From 142dcf2933f2d91581ab15bbe467daa5f51cd6a7 Mon Sep 17 00:00:00 2001 From: hepj Date: Fri, 15 Apr 2022 17:51:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0conformer=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PyTorch/NLP/Conformer-main/LICENSE | 201 ++ PyTorch/NLP/Conformer-main/README.md | 61 + PyTorch/NLP/Conformer-main/README_ORIGIN.md | 103 + PyTorch/NLP/Conformer-main/conformer.py | 445 ++++ PyTorch/NLP/Conformer-main/datasets.py | 110 + PyTorch/NLP/Conformer-main/engine.py | 127 ++ .../Conformer-main/figures/feature_maps.png | Bin 0 -> 530014 bytes .../NLP/Conformer-main/figures/network.png | Bin 0 -> 107622 bytes PyTorch/NLP/Conformer-main/hubconf.py | 1 + PyTorch/NLP/Conformer-main/main.py | 375 ++++ .../mmdetection/.dev_scripts/batch_test.py | 212 ++ .../mmdetection/.dev_scripts/batch_test.sh | 19 + .../.dev_scripts/benchmark_filter.py | 155 ++ .../.dev_scripts/convert_benchmark_script.py | 74 + .../mmdetection/.dev_scripts/gather_models.py | 162 ++ .../mmdetection/.dev_scripts/linter.sh | 3 + .../mmdetection/.github/CODE_OF_CONDUCT.md | 76 + .../mmdetection/.github/CONTRIBUTING.md | 70 + .../.github/ISSUE_TEMPLATE/config.yml | 9 + .../.github/ISSUE_TEMPLATE/error-report.md | 47 + .../.github/ISSUE_TEMPLATE/feature_request.md | 22 + .../ISSUE_TEMPLATE/general_questions.md | 8 + .../reimplementation_questions.md | 68 + .../mmdetection/.github/workflows/build.yml | 142 ++ .../.github/workflows/build_pat.yml | 24 + .../mmdetection/.github/workflows/deploy.yml | 24 + .../NLP/Conformer-main/mmdetection/.gitignore | 121 ++ .../mmdetection/.readthedocs.yml | 7 + .../NLP/Conformer-main/mmdetection/LICENSE | 203 ++ .../NLP/Conformer-main/mmdetection/README.md | 41 + .../_base_/datasets/cityscapes_detection.py | 55 + .../_base_/datasets/cityscapes_instance.py | 55 + .../configs/_base_/datasets/coco_detection.py | 48 + .../configs/_base_/datasets/coco_instance.py | 48 + .../_base_/datasets/coco_instance_semantic.py | 53 + .../configs/_base_/datasets/deepfashion.py | 53 + .../_base_/datasets/lvis_v0.5_instance.py | 23 + .../_base_/datasets/lvis_v1_instance.py | 23 + .../configs/_base_/datasets/voc0712.py | 55 + .../configs/_base_/datasets/wider_face.py | 63 + .../configs/_base_/default_runtime.py | 14 + .../models/cascade_mask_rcnn_r50_fpn.py | 200 ++ .../_base_/models/cascade_rcnn_r50_fpn.py | 183 ++ .../_base_/models/fast_rcnn_r50_fpn.py | 62 + .../_base_/models/faster_rcnn_r50_caffe_c4.py | 116 ++ .../models/faster_rcnn_r50_caffe_dc5.py | 107 + .../_base_/models/faster_rcnn_r50_fpn.py | 111 + .../_base_/models/mask_rcnn_r50_caffe_c4.py | 127 ++ .../_base_/models/mask_rcnn_r50_fpn.py | 124 ++ .../_base_/models/retinanet_r50_fpn.py | 60 + .../configs/_base_/models/rpn_r50_caffe_c4.py | 58 + .../configs/_base_/models/rpn_r50_fpn.py | 60 + .../configs/_base_/models/ssd300.py | 49 + .../configs/_base_/schedules/schedule_1x.py | 11 + .../configs/_base_/schedules/schedule_20e.py | 11 + .../configs/_base_/schedules/schedule_2x.py | 11 + .../mmdetection/configs/faster_rcnn/README.md | 61 + ...cnn_conformer_small_patch32_fpn_1x_coco.py | 189 ++ .../faster_rcnn_r50_fpn_1x_coco.py | 5 + .../mmdetection/configs/mask_rcnn/README.md | 43 + ...cnn_conformer_small_patch32_fpn_1x_coco.py | 201 ++ .../mask_rcnn_r101_caffe_fpn_1x_coco.py | 4 + .../mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py | 2 + .../mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py | 2 + .../mask_rcnn_r50_caffe_c4_1x_coco.py | 39 + .../mask_rcnn_r50_caffe_fpn_1x_coco.py | 36 + ...rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py | 45 + ...rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py | 4 + ...rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py | 4 + ...mask_rcnn_r50_caffe_fpn_mstrain_1x_coco.py | 41 + ...mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py | 57 + .../mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py | 5 + .../mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py | 5 + .../mask_rcnn_r50_fpn_poly_1x_coco.py | 23 + .../mask_rcnn_x101_32x4d_fpn_1x_coco.py | 13 + .../mask_rcnn_x101_32x4d_fpn_2x_coco.py | 13 + .../mask_rcnn_x101_32x8d_fpn_1x_coco.py | 63 + ...cnn_x101_32x8d_fpn_mstrain-poly_1x_coco.py | 58 + ...cnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py | 61 + .../mask_rcnn_x101_64x4d_fpn_1x_coco.py | 13 + .../mask_rcnn_x101_64x4d_fpn_2x_coco.py | 13 + .../mmdetection/configs/paa/README.md | 24 + ...paa_conformer_small_patch32_fpn_1x_coco.py | 142 ++ .../configs/paa/paa_r101_fpn_1x_coco.py | 4 + .../configs/paa/paa_r101_fpn_2x_coco.py | 3 + .../configs/paa/paa_r50_fpn_1.5x_coco.py | 3 + .../configs/paa/paa_r50_fpn_1x_coco.py | 70 + .../configs/paa/paa_r50_fpn_2x_coco.py | 3 + .../mmdetection/demo/MMDet_Tutorial.ipynb | 1604 +++++++++++++++ .../Conformer-main/mmdetection/demo/demo.jpg | Bin 0 -> 259865 bytes .../mmdetection/demo/image_demo.py | 26 + .../mmdetection/demo/inference_demo.ipynb | 100 + .../mmdetection/demo/webcam_demo.py | 46 + .../mmdetection/docker/Dockerfile | 24 + .../mmdetection/docs/1_exist_data_model.md | 496 +++++ .../mmdetection/docs/2_new_data_model.md | 263 +++ .../docs/3_exist_data_new_model.md | 275 +++ .../Conformer-main/mmdetection/docs/Makefile | 20 + .../Conformer-main/mmdetection/docs/api.rst | 101 + .../mmdetection/docs/changelog.md | 683 +++++++ .../mmdetection/docs/compatibility.md | 82 + .../Conformer-main/mmdetection/docs/conf.py | 90 + .../mmdetection/docs/conventions.md | 31 + .../Conformer-main/mmdetection/docs/faq.md | 78 + .../mmdetection/docs/get_started.md | 207 ++ .../Conformer-main/mmdetection/docs/index.rst | 50 + .../Conformer-main/mmdetection/docs/make.bat | 35 + .../mmdetection/docs/model_zoo.md | 267 +++ .../mmdetection/docs/projects.md | 46 + .../docs/robustness_benchmarking.md | 110 + .../Conformer-main/mmdetection/docs/stat.py | 64 + .../mmdetection/docs/tutorials/config.md | 527 +++++ .../docs/tutorials/customize_dataset.md | 486 +++++ .../docs/tutorials/customize_losses.md | 105 + .../docs/tutorials/customize_models.md | 369 ++++ .../docs/tutorials/customize_runtime.md | 319 +++ .../docs/tutorials/data_pipeline.md | 184 ++ .../mmdetection/docs/tutorials/finetune.md | 89 + .../mmdetection/docs/tutorials/index.rst | 11 + .../docs/tutorials/pytorch2onnx.md | 101 + .../mmdetection/docs/useful_tools.md | 210 ++ .../mmdetection/mmdet/__init__.py | 28 + .../mmdetection/mmdet/apis/__init__.py | 10 + .../mmdetection/mmdet/apis/inference.py | 199 ++ .../mmdetection/mmdet/apis/test.py | 190 ++ .../mmdetection/mmdet/apis/train.py | 150 ++ .../mmdetection/mmdet/core/__init__.py | 8 + .../mmdetection/mmdet/core/anchor/__init__.py | 11 + .../mmdet/core/anchor/anchor_generator.py | 728 +++++++ .../mmdetection/mmdet/core/anchor/builder.py | 7 + .../mmdet/core/anchor/point_generator.py | 37 + .../mmdetection/mmdet/core/anchor/utils.py | 71 + .../mmdetection/mmdet/core/bbox/__init__.py | 27 + .../mmdet/core/bbox/assigners/__init__.py | 16 + .../bbox/assigners/approx_max_iou_assigner.py | 145 ++ .../core/bbox/assigners/assign_result.py | 204 ++ .../core/bbox/assigners/atss_assigner.py | 178 ++ .../core/bbox/assigners/base_assigner.py | 10 + .../bbox/assigners/center_region_assigner.py | 335 +++ .../core/bbox/assigners/grid_assigner.py | 155 ++ .../core/bbox/assigners/hungarian_assigner.py | 145 ++ .../core/bbox/assigners/max_iou_assigner.py | 212 ++ .../core/bbox/assigners/point_assigner.py | 133 ++ .../core/bbox/assigners/region_assigner.py | 204 ++ .../mmdetection/mmdet/core/bbox/builder.py | 20 + .../mmdet/core/bbox/coder/__init__.py | 13 + .../mmdet/core/bbox/coder/base_bbox_coder.py | 19 + .../core/bbox/coder/bucketing_bbox_coder.py | 346 ++++ .../core/bbox/coder/delta_xywh_bbox_coder.py | 204 ++ .../coder/legacy_delta_xywh_bbox_coder.py | 212 ++ .../core/bbox/coder/pseudo_bbox_coder.py | 18 + .../mmdet/core/bbox/coder/tblr_bbox_coder.py | 172 ++ .../mmdet/core/bbox/coder/yolo_bbox_coder.py | 86 + .../mmdetection/mmdet/core/bbox/demodata.py | 63 + .../core/bbox/iou_calculators/__init__.py | 4 + .../core/bbox/iou_calculators/builder.py | 8 + .../bbox/iou_calculators/iou2d_calculator.py | 159 ++ .../mmdet/core/bbox/match_costs/__init__.py | 7 + .../mmdet/core/bbox/match_costs/builder.py | 8 + .../mmdet/core/bbox/match_costs/match_cost.py | 184 ++ .../mmdet/core/bbox/samplers/__init__.py | 15 + .../mmdet/core/bbox/samplers/base_sampler.py | 101 + .../core/bbox/samplers/combined_sampler.py | 20 + .../samplers/instance_balanced_pos_sampler.py | 55 + .../bbox/samplers/iou_balanced_neg_sampler.py | 157 ++ .../mmdet/core/bbox/samplers/ohem_sampler.py | 107 + .../core/bbox/samplers/pseudo_sampler.py | 41 + .../core/bbox/samplers/random_sampler.py | 78 + .../core/bbox/samplers/sampling_result.py | 152 ++ .../core/bbox/samplers/score_hlr_sampler.py | 264 +++ .../mmdetection/mmdet/core/bbox/transforms.py | 224 ++ .../mmdet/core/evaluation/__init__.py | 15 + .../mmdet/core/evaluation/bbox_overlaps.py | 48 + .../mmdet/core/evaluation/class_names.py | 116 ++ .../mmdet/core/evaluation/eval_hooks.py | 255 +++ .../mmdet/core/evaluation/mean_ap.py | 469 +++++ .../mmdet/core/evaluation/recall.py | 189 ++ .../mmdetection/mmdet/core/export/__init__.py | 8 + .../mmdet/core/export/pytorch2onnx.py | 144 ++ .../mmdetection/mmdet/core/fp16/__init__.py | 8 + .../mmdet/core/fp16/deprecated_fp16_utils.py | 47 + .../mmdetection/mmdet/core/mask/__init__.py | 8 + .../mmdet/core/mask/mask_target.py | 62 + .../mmdetection/mmdet/core/mask/structures.py | 828 ++++++++ .../mmdetection/mmdet/core/mask/utils.py | 63 + .../mmdet/core/post_processing/__init__.py | 8 + .../mmdet/core/post_processing/bbox_nms.py | 157 ++ .../mmdet/core/post_processing/merge_augs.py | 117 ++ .../mmdetection/mmdet/core/utils/__init__.py | 7 + .../mmdet/core/utils/dist_utils.py | 69 + .../mmdetection/mmdet/core/utils/misc.py | 61 + .../mmdet/core/visualization/__init__.py | 4 + .../mmdet/core/visualization/image.py | 296 +++ .../mmdetection/mmdet/datasets/__init__.py | 22 + .../mmdetection/mmdet/datasets/builder.py | 143 ++ .../mmdetection/mmdet/datasets/cityscapes.py | 334 +++ .../mmdetection/mmdet/datasets/coco.py | 544 +++++ .../mmdetection/mmdet/datasets/custom.py | 324 +++ .../mmdet/datasets/dataset_wrappers.py | 282 +++ .../mmdetection/mmdet/datasets/deepfashion.py | 10 + .../mmdetection/mmdet/datasets/lvis.py | 742 +++++++ .../mmdet/datasets/pipelines/__init__.py | 25 + .../mmdet/datasets/pipelines/auto_augment.py | 890 ++++++++ .../mmdet/datasets/pipelines/compose.py | 51 + .../mmdet/datasets/pipelines/formating.py | 364 ++++ .../mmdet/datasets/pipelines/instaboost.py | 98 + .../mmdet/datasets/pipelines/loading.py | 458 +++++ .../mmdet/datasets/pipelines/test_time_aug.py | 119 ++ .../mmdet/datasets/pipelines/transforms.py | 1804 +++++++++++++++++ .../mmdet/datasets/samplers/__init__.py | 4 + .../datasets/samplers/distributed_sampler.py | 32 + .../mmdet/datasets/samplers/group_sampler.py | 143 ++ .../mmdetection/mmdet/datasets/utils.py | 100 + .../mmdetection/mmdet/datasets/voc.py | 93 + .../mmdetection/mmdet/datasets/wider_face.py | 51 + .../mmdetection/mmdet/datasets/xml_style.py | 169 ++ .../mmdetection/mmdet/models/__init__.py | 16 + .../mmdet/models/backbones/Conformer.py | 574 ++++++ .../mmdet/models/backbones/__init__.py | 18 + .../mmdet/models/backbones/darknet.py | 199 ++ .../models/backbones/detectors_resnet.py | 305 +++ .../models/backbones/detectors_resnext.py | 122 ++ .../mmdet/models/backbones/hourglass.py | 198 ++ .../mmdet/models/backbones/hrnet.py | 537 +++++ .../mmdet/models/backbones/regnet.py | 325 +++ .../mmdet/models/backbones/res2net.py | 351 ++++ .../mmdet/models/backbones/resnest.py | 317 +++ .../mmdet/models/backbones/resnet.py | 663 ++++++ .../mmdet/models/backbones/resnext.py | 153 ++ .../mmdet/models/backbones/ssd_vgg.py | 169 ++ .../mmdet/models/backbones/trident_resnet.py | 292 +++ .../mmdetection/mmdet/models/builder.py | 77 + .../mmdet/models/dense_heads/__init__.py | 40 + .../models/dense_heads/anchor_free_head.py | 340 ++++ .../mmdet/models/dense_heads/anchor_head.py | 688 +++++++ .../mmdet/models/dense_heads/atss_head.py | 651 ++++++ .../models/dense_heads/base_dense_head.py | 59 + .../models/dense_heads/cascade_rpn_head.py | 654 ++++++ .../models/dense_heads/centripetal_head.py | 421 ++++ .../mmdet/models/dense_heads/corner_head.py | 1066 ++++++++++ .../models/dense_heads/dense_test_mixins.py | 97 + .../models/dense_heads/embedding_rpn_head.py | 120 ++ .../mmdet/models/dense_heads/fcos_head.py | 577 ++++++ .../mmdet/models/dense_heads/fovea_head.py | 341 ++++ .../dense_heads/free_anchor_retina_head.py | 270 +++ .../mmdet/models/dense_heads/fsaf_head.py | 422 ++++ .../models/dense_heads/ga_retina_head.py | 109 + .../mmdet/models/dense_heads/ga_rpn_head.py | 133 ++ .../mmdet/models/dense_heads/gfl_head.py | 632 ++++++ .../models/dense_heads/guided_anchor_head.py | 860 ++++++++ .../mmdet/models/dense_heads/nasfcos_head.py | 75 + .../mmdet/models/dense_heads/paa_head.py | 655 ++++++ .../models/dense_heads/pisa_retinanet_head.py | 154 ++ .../mmdet/models/dense_heads/pisa_ssd_head.py | 139 ++ .../models/dense_heads/reppoints_head.py | 763 +++++++ .../mmdet/models/dense_heads/retina_head.py | 114 ++ .../models/dense_heads/retina_sepbn_head.py | 113 ++ .../mmdet/models/dense_heads/rpn_head.py | 168 ++ .../models/dense_heads/rpn_test_mixin.py | 59 + .../models/dense_heads/sabl_retina_head.py | 621 ++++++ .../mmdet/models/dense_heads/ssd_head.py | 265 +++ .../models/dense_heads/transformer_head.py | 654 ++++++ .../mmdet/models/dense_heads/vfnet_head.py | 794 ++++++++ .../mmdet/models/dense_heads/yolact_head.py | 942 +++++++++ .../mmdet/models/dense_heads/yolo_head.py | 536 +++++ .../mmdet/models/detectors/__init__.py | 36 + .../mmdet/models/detectors/atss.py | 17 + .../mmdet/models/detectors/base.py | 362 ++++ .../mmdet/models/detectors/cascade_rcnn.py | 37 + .../mmdet/models/detectors/cornernet.py | 95 + .../mmdet/models/detectors/detr.py | 46 + .../mmdet/models/detectors/fast_rcnn.py | 52 + .../mmdet/models/detectors/faster_rcnn.py | 24 + .../mmdet/models/detectors/fcos.py | 17 + .../mmdet/models/detectors/fovea.py | 17 + .../mmdet/models/detectors/fsaf.py | 17 + .../mmdetection/mmdet/models/detectors/gfl.py | 16 + .../mmdet/models/detectors/grid_rcnn.py | 29 + .../mmdetection/mmdet/models/detectors/htc.py | 15 + .../mmdet/models/detectors/mask_rcnn.py | 24 + .../models/detectors/mask_scoring_rcnn.py | 27 + .../mmdet/models/detectors/nasfcos.py | 20 + .../mmdetection/mmdet/models/detectors/paa.py | 17 + .../mmdet/models/detectors/point_rend.py | 29 + .../models/detectors/reppoints_detector.py | 22 + .../mmdet/models/detectors/retinanet.py | 17 + .../mmdetection/mmdet/models/detectors/rpn.py | 154 ++ .../mmdet/models/detectors/single_stage.py | 149 ++ .../mmdet/models/detectors/sparse_rcnn.py | 110 + .../models/detectors/trident_faster_rcnn.py | 66 + .../mmdet/models/detectors/two_stage.py | 210 ++ .../mmdet/models/detectors/vfnet.py | 18 + .../mmdet/models/detectors/yolact.py | 146 ++ .../mmdet/models/detectors/yolo.py | 18 + .../mmdet/models/losses/__init__.py | 28 + .../mmdet/models/losses/accuracy.py | 76 + .../mmdet/models/losses/ae_loss.py | 100 + .../mmdet/models/losses/balanced_l1_loss.py | 118 ++ .../mmdet/models/losses/cross_entropy_loss.py | 201 ++ .../mmdet/models/losses/focal_loss.py | 181 ++ .../models/losses/gaussian_focal_loss.py | 89 + .../mmdet/models/losses/gfocal_loss.py | 185 ++ .../mmdet/models/losses/ghm_loss.py | 172 ++ .../mmdet/models/losses/iou_loss.py | 430 ++++ .../mmdet/models/losses/mse_loss.py | 49 + .../mmdet/models/losses/pisa_loss.py | 180 ++ .../mmdet/models/losses/smooth_l1_loss.py | 136 ++ .../mmdetection/mmdet/models/losses/utils.py | 98 + .../mmdet/models/losses/varifocal_loss.py | 131 ++ .../mmdet/models/necks/__init__.py | 15 + .../mmdetection/mmdet/models/necks/bfp.py | 104 + .../mmdet/models/necks/channel_mapper.py | 74 + .../mmdetection/mmdet/models/necks/fpn.py | 221 ++ .../mmdet/models/necks/fpn_carafe.py | 267 +++ .../mmdetection/mmdet/models/necks/hrfpn.py | 102 + .../mmdetection/mmdet/models/necks/nas_fpn.py | 160 ++ .../mmdet/models/necks/nasfcos_fpn.py | 161 ++ .../mmdetection/mmdet/models/necks/pafpn.py | 142 ++ .../mmdetection/mmdet/models/necks/rfp.py | 128 ++ .../mmdet/models/necks/yolo_neck.py | 136 ++ .../mmdet/models/roi_heads/__init__.py | 28 + .../mmdet/models/roi_heads/base_roi_head.py | 106 + .../models/roi_heads/bbox_heads/__init__.py | 11 + .../models/roi_heads/bbox_heads/bbox_head.py | 416 ++++ .../roi_heads/bbox_heads/convfc_bbox_head.py | 205 ++ .../models/roi_heads/bbox_heads/dii_head.py | 415 ++++ .../roi_heads/bbox_heads/double_bbox_head.py | 172 ++ .../models/roi_heads/bbox_heads/sabl_head.py | 572 ++++++ .../models/roi_heads/cascade_roi_head.py | 507 +++++ .../mmdet/models/roi_heads/double_roi_head.py | 33 + .../models/roi_heads/dynamic_roi_head.py | 154 ++ .../mmdet/models/roi_heads/grid_roi_head.py | 176 ++ .../mmdet/models/roi_heads/htc_roi_head.py | 589 ++++++ .../models/roi_heads/mask_heads/__init__.py | 12 + .../roi_heads/mask_heads/coarse_mask_head.py | 91 + .../roi_heads/mask_heads/fcn_mask_head.py | 328 +++ .../mask_heads/fused_semantic_head.py | 107 + .../models/roi_heads/mask_heads/grid_head.py | 359 ++++ .../roi_heads/mask_heads/htc_mask_head.py | 43 + .../roi_heads/mask_heads/mask_point_head.py | 300 +++ .../roi_heads/mask_heads/maskiou_head.py | 186 ++ .../models/roi_heads/mask_scoring_roi_head.py | 122 ++ .../mmdet/models/roi_heads/pisa_roi_head.py | 159 ++ .../models/roi_heads/point_rend_roi_head.py | 218 ++ .../roi_heads/roi_extractors/__init__.py | 7 + .../roi_extractors/base_roi_extractor.py | 83 + .../roi_extractors/generic_roi_extractor.py | 83 + .../single_level_roi_extractor.py | 99 + .../models/roi_heads/shared_heads/__init__.py | 3 + .../roi_heads/shared_heads/res_layer.py | 77 + .../mmdet/models/roi_heads/sparse_roi_head.py | 311 +++ .../models/roi_heads/standard_roi_head.py | 295 +++ .../mmdet/models/roi_heads/test_mixins.py | 271 +++ .../models/roi_heads/trident_roi_head.py | 111 + .../mmdet/models/utils/__init__.py | 16 + .../mmdetection/mmdet/models/utils/builder.py | 14 + .../mmdet/models/utils/gaussian_target.py | 185 ++ .../mmdet/models/utils/positional_encoding.py | 150 ++ .../mmdet/models/utils/res_layer.py | 102 + .../mmdet/models/utils/transformer.py | 860 ++++++++ .../mmdetection/mmdet/utils/__init__.py | 4 + .../mmdetection/mmdet/utils/collect_env.py | 16 + .../mmdet/utils/contextmanagers.py | 121 ++ .../mmdetection/mmdet/utils/logger.py | 19 + .../mmdetection/mmdet/utils/profiling.py | 39 + .../mmdetection/mmdet/utils/util_mixins.py | 104 + .../mmdetection/mmdet/version.py | 19 + .../NLP/Conformer-main/mmdetection/pytest.ini | 7 + .../mmdetection/requirements.txt | 4 + .../mmdetection/requirements/build.txt | 4 + .../mmdetection/requirements/docs.txt | 4 + .../mmdetection/requirements/optional.txt | 6 + .../mmdetection/requirements/readthedocs.txt | 3 + .../mmdetection/requirements/runtime.txt | 5 + .../mmdetection/requirements/tests.txt | 11 + .../mmdetection/resources/coco_test_12510.jpg | Bin 0 -> 183096 bytes .../resources/corruptions_sev_3.png | Bin 0 -> 1401893 bytes .../mmdetection/resources/data_pipeline.png | Bin 0 -> 84111 bytes .../mmdetection/resources/loss_curve.png | Bin 0 -> 37484 bytes .../mmdetection/resources/mmdet-logo.png | Bin 0 -> 32836 bytes .../NLP/Conformer-main/mmdetection/setup.py | 161 ++ .../mmdetection/tests/async_benchmark.py | 100 + .../mmdetection/tests/test_anchor.py | 410 ++++ .../mmdetection/tests/test_assigner.py | 424 ++++ .../mmdetection/tests/test_async.py | 82 + .../mmdetection/tests/test_coder.py | 21 + .../mmdetection/tests/test_config.py | 374 ++++ .../tests/test_data/test_dataset.py | 493 +++++ .../tests/test_data/test_formatting.py | 23 + .../tests/test_data/test_img_augment.py | 203 ++ .../tests/test_data/test_loading.py | 90 + .../tests/test_data/test_models_aug_test.py | 120 ++ .../tests/test_data/test_rotate.py | 224 ++ .../tests/test_data/test_sampler.py | 328 +++ .../mmdetection/tests/test_data/test_shear.py | 217 ++ .../tests/test_data/test_transform.py | 752 +++++++ .../tests/test_data/test_translate.py | 515 +++++ .../mmdetection/tests/test_data/test_utils.py | 61 + .../mmdetection/tests/test_eval_hook.py | 263 +++ .../mmdetection/tests/test_fp16.py | 300 +++ .../tests/test_iou2d_calculator.py | 105 + .../mmdetection/tests/test_masks.py | 655 ++++++ .../mmdetection/tests/test_misc.py | 47 + .../tests/test_models/test_backbones.py | 1087 ++++++++++ .../tests/test_models/test_forward.py | 491 +++++ .../tests/test_models/test_heads.py | 1311 ++++++++++++ .../tests/test_models/test_losses.py | 136 ++ .../tests/test_models/test_necks.py | 238 +++ .../tests/test_models/test_pisa_heads.py | 244 +++ .../test_models/test_position_encoding.py | 38 + .../tests/test_models/test_roi_extractor.py | 113 ++ .../tests/test_models/test_transformer.py | 523 +++++ .../mmdetection/tests/test_version.py | 15 + .../mmdetection/tests/test_visualization.py | 98 + .../tools/analysis_tools/analyze_logs.py | 179 ++ .../tools/analysis_tools/analyze_results.py | 203 ++ .../tools/analysis_tools/benchmark.py | 101 + .../analysis_tools/coco_error_analysis.py | 171 ++ .../tools/analysis_tools/eval_metric.py | 79 + .../tools/analysis_tools/get_flops.py | 69 + .../tools/analysis_tools/robustness_eval.py | 250 +++ .../tools/analysis_tools/test_robustness.py | 377 ++++ .../tools/dataset_converters/cityscapes.py | 151 ++ .../tools/dataset_converters/pascal_voc.py | 139 ++ .../tools/deployment/pytorch2onnx.py | 230 +++ .../mmdetection/tools/dist_test.sh | 10 + .../mmdetection/tools/dist_train.sh | 9 + .../mmdetection/tools/misc/browse_dataset.py | 80 + .../mmdetection/tools/misc/print_config.py | 26 + .../model_converters/detectron2pytorch.py | 82 + .../tools/model_converters/publish_model.py | 39 + .../tools/model_converters/regnet2mmdet.py | 89 + .../model_converters/upgrade_model_version.py | 209 ++ .../mmdetection/tools/slurm_test.sh | 24 + .../mmdetection/tools/slurm_train.sh | 24 + .../Conformer-main/mmdetection/tools/test.py | 220 ++ .../Conformer-main/mmdetection/tools/train.py | 187 ++ PyTorch/NLP/Conformer-main/models.py | 94 + PyTorch/NLP/Conformer-main/run.sh | 26 + PyTorch/NLP/Conformer-main/run1.sh | 28 + PyTorch/NLP/Conformer-main/run4.sh | 10 + PyTorch/NLP/Conformer-main/samplers.py | 57 + PyTorch/NLP/Conformer-main/utils.py | 236 +++ .../NLP/Conformer-main/vision_transformer.py | 603 ++++++ 444 files changed, 74704 insertions(+) create mode 100644 PyTorch/NLP/Conformer-main/LICENSE create mode 100644 PyTorch/NLP/Conformer-main/README.md create mode 100644 PyTorch/NLP/Conformer-main/README_ORIGIN.md create mode 100644 PyTorch/NLP/Conformer-main/conformer.py create mode 100644 PyTorch/NLP/Conformer-main/datasets.py create mode 100644 PyTorch/NLP/Conformer-main/engine.py create mode 100644 PyTorch/NLP/Conformer-main/figures/feature_maps.png create mode 100644 PyTorch/NLP/Conformer-main/figures/network.png create mode 100644 PyTorch/NLP/Conformer-main/hubconf.py create mode 100644 PyTorch/NLP/Conformer-main/main.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.sh create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/benchmark_filter.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/convert_benchmark_script.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/gather_models.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/linter.sh create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/CODE_OF_CONDUCT.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/CONTRIBUTING.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/config.yml create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/error-report.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/general_questions.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/reimplementation_questions.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build.yml create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build_pat.yml create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/deploy.yml create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.gitignore create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/.readthedocs.yml create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/LICENSE create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/README.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_detection.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_instance.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_detection.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance_semantic.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/deepfashion.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v0.5_instance.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v1_instance.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/voc0712.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/wider_face.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/default_runtime.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_mask_rcnn_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_rcnn_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/fast_rcnn_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_c4.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_dc5.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_caffe_c4.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/retinanet_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_caffe_c4.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/ssd300.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_1x.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_20e.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_2x.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/README.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_conformer_small_patch32_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/README.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_conformer_small_patch32_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/README.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_conformer_small_patch32_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1.5x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_2x_coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/demo/MMDet_Tutorial.ipynb create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/demo/demo.jpg create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/demo/image_demo.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/demo/inference_demo.ipynb create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/demo/webcam_demo.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docker/Dockerfile create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/1_exist_data_model.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/2_new_data_model.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/3_exist_data_new_model.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/Makefile create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/api.rst create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/changelog.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/compatibility.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/conf.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/conventions.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/faq.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/get_started.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/index.rst create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/make.bat create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/model_zoo.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/projects.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/robustness_benchmarking.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/stat.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/config.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_dataset.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_losses.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_models.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_runtime.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/data_pipeline.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/finetune.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/index.rst create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/pytorch2onnx.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/docs/useful_tools.md create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/inference.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/test.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/train.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/anchor_generator.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/point_generator.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/approx_max_iou_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/assign_result.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/atss_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/base_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/center_region_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/grid_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/hungarian_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/max_iou_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/point_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/region_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/base_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/bucketing_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/legacy_delta_xywh_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/pseudo_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/tblr_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/yolo_bbox_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/demodata.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/iou2d_calculator.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/match_cost.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/base_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/combined_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/instance_balanced_pos_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/iou_balanced_neg_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/ohem_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/pseudo_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/random_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/sampling_result.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/score_hlr_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/transforms.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/bbox_overlaps.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/class_names.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/eval_hooks.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/mean_ap.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/recall.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/pytorch2onnx.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/deprecated_fp16_utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/mask_target.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/structures.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/bbox_nms.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/merge_augs.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/dist_utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/misc.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/image.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/cityscapes.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/coco.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/custom.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/dataset_wrappers.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/deepfashion.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/lvis.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/auto_augment.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/compose.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/formating.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/instaboost.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/loading.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/test_time_aug.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/transforms.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/distributed_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/group_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/voc.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/wider_face.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/xml_style.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/Conformer.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/darknet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnext.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hourglass.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hrnet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/regnet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/res2net.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnest.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnext.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/ssd_vgg.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/trident_resnet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_free_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/atss_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/base_dense_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/cascade_rpn_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/centripetal_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/corner_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/dense_test_mixins.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/embedding_rpn_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fcos_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fovea_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/free_anchor_retina_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fsaf_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_retina_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_rpn_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/gfl_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/guided_anchor_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/nasfcos_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/paa_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_retinanet_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_ssd_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/reppoints_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_sepbn_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_test_mixin.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/sabl_retina_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ssd_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/transformer_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/vfnet_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolact_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolo_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/atss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/base.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cascade_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cornernet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/detr.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fast_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/faster_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fcos.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fovea.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fsaf.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/gfl.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/grid_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/htc.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_scoring_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/nasfcos.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/paa.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/point_rend.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/reppoints_detector.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/retinanet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/rpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/single_stage.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/sparse_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/trident_faster_rcnn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/two_stage.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/vfnet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolact.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolo.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/accuracy.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ae_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/balanced_l1_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/cross_entropy_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/focal_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gaussian_focal_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gfocal_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ghm_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/iou_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/mse_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/pisa_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/smooth_l1_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/varifocal_loss.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/bfp.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/channel_mapper.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn_carafe.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/hrfpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nas_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nasfcos_fpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/pafpn.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/rfp.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/yolo_neck.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/base_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/bbox_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/dii_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/double_bbox_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/sabl_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/cascade_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/double_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/dynamic_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/grid_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/htc_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/coarse_mask_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fused_semantic_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/grid_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/htc_mask_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/mask_point_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/maskiou_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_scoring_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/pisa_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/point_rend_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/base_roi_extractor.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/generic_roi_extractor.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/single_level_roi_extractor.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/res_layer.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/sparse_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/standard_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/test_mixins.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/trident_roi_head.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/builder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/gaussian_target.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/positional_encoding.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/res_layer.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/transformer.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/__init__.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/collect_env.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/contextmanagers.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/logger.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/profiling.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/util_mixins.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/mmdet/version.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/pytest.ini create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements/build.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements/docs.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements/optional.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements/readthedocs.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements/runtime.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/requirements/tests.txt create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/resources/coco_test_12510.jpg create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/resources/corruptions_sev_3.png create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/resources/data_pipeline.png create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/resources/loss_curve.png create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/resources/mmdet-logo.png create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/setup.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/async_benchmark.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_anchor.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_assigner.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_async.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_coder.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_config.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_dataset.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_formatting.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_img_augment.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_loading.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_models_aug_test.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_rotate.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_sampler.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_shear.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_transform.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_translate.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_utils.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_eval_hook.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_fp16.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_iou2d_calculator.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_masks.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_misc.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_backbones.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_forward.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_heads.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_losses.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_necks.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_pisa_heads.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_position_encoding.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_roi_extractor.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_transformer.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_version.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tests/test_visualization.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_logs.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_results.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/benchmark.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/coco_error_analysis.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/eval_metric.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/get_flops.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/robustness_eval.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/test_robustness.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/cityscapes.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/pascal_voc.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/deployment/pytorch2onnx.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/dist_test.sh create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/dist_train.sh create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/misc/browse_dataset.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/misc/print_config.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/detectron2pytorch.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/publish_model.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/regnet2mmdet.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/upgrade_model_version.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_test.sh create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_train.sh create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/test.py create mode 100644 PyTorch/NLP/Conformer-main/mmdetection/tools/train.py create mode 100644 PyTorch/NLP/Conformer-main/models.py create mode 100644 PyTorch/NLP/Conformer-main/run.sh create mode 100644 PyTorch/NLP/Conformer-main/run1.sh create mode 100644 PyTorch/NLP/Conformer-main/run4.sh create mode 100644 PyTorch/NLP/Conformer-main/samplers.py create mode 100644 PyTorch/NLP/Conformer-main/utils.py create mode 100644 PyTorch/NLP/Conformer-main/vision_transformer.py diff --git a/PyTorch/NLP/Conformer-main/LICENSE b/PyTorch/NLP/Conformer-main/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/PyTorch/NLP/Conformer-main/README.md b/PyTorch/NLP/Conformer-main/README.md new file mode 100644 index 00000000..e196ec8a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/README.md @@ -0,0 +1,61 @@ +## 简介 + +使用pytorch框架计算conformer网络 + +一些一阶查看README_ORIGIN.md + +[conformer的GIT网址](https://github.com/pengzhiliang/Conformer) + +## 运行前准备 + +``` +#修改_amp_state.py:(python3.6/site-packages/apex/amp/_amp_state.py) +if TORCH_MAJOR == 1 and TORCH_MINOR < 8: + from torch._six import container_abcs +else: + import collections.abc as container_abcs +改为: +if TORCH_MAJOR == 1 and TORCH_MINOR < 8: + #from torch._six import container_abcs + import collections.abc as container_abcs +else: + import collections.abc as container_abcs +``` + + + +``` +#修改helpers.py :(python3.6/site-packages/timm/models/layers/helpers.py) + +修改: +from torch._six import container_abcs +改为: +import collections.abc as container_abcs +``` + +## 数据集地址 + +昆山服务器存有数据集,地址: + +/public/software/apps/DeepLearning/Data/ImageNet-pytorch + +### 单卡 + +``` +#启动 +./run1.sh +``` + +sh脚本中--nnodes 为机器数 ,--nproc_per_node每个机器显卡数目, + +对于python参数: + +--num_workers 为显卡数,--data-path为数据路径,--output_dir为输出文件夹 + +## 多卡 + +``` +#运行 +./run4.sh +``` + diff --git a/PyTorch/NLP/Conformer-main/README_ORIGIN.md b/PyTorch/NLP/Conformer-main/README_ORIGIN.md new file mode 100644 index 00000000..3a3ef4af --- /dev/null +++ b/PyTorch/NLP/Conformer-main/README_ORIGIN.md @@ -0,0 +1,103 @@ +# Conformer: Local Features Coupling Global Representations for Visual Recognition +**Accpeted to ICCV21!** + +This repository is built upon [DeiT](https://github.com/facebookresearch/deit), [timm](https://github.com/rwightman/pytorch-image-models), and [mmdetction](https://github.com/open-mmlab/mmdetection). +# Introduction +Within Convolutional Neural Network (CNN), the convolution operations are good at extracting local features but experience difficulty to capture global representations. +Within visual transformer, the cascaded self-attention modules can capture long-distance feature dependencies but unfortunately deteriorate local feature details. +In this paper, we propose a hybrid network structure, termed Conformer, to take advantage of convolutional operations and self-attention mechanisms for enhanced representation learning. +Conformer roots in the Feature Coupling Unit (FCU), which fuses local features and global representations under different resolutions in an interactive fashion. +Conformer adopts a concurrent structure so that local features and global representations are retained to the maximum extent. +Experiments show that Conformer, under the comparable parameter complexity, outperforms the visual transformer (DeiT-B) by 2.3\% on ImageNet. +On MSCOCO, it outperforms ResNet-101 by 3.7\% and 3.6\% mAPs for object detection and instance segmentation, respectively, demonstrating the great potential to be a general backbone network. + +The basic architecture of the Conformer is shown as following: + +![](figures/network.png) + +We also show the comparison of feature maps of CNN (ResNet-101), Visual Transformer (DeiT-S), and the proposed Conformer as following. +The patch embeddings in transformer are reshaped to feature maps for visualization. While CNN activates discriminative local regions ($e.g.$, the peacock's head in (a) and tail in (e)), +the CNN branch of Conformer takes advantage of global cues from the visual transformer and thereby activates complete object ($e.g.$, full extent of the peacock in (b) and (f)). +Compared with CNN, local feature details of the visual transformer are deteriorated ($e.g.$, (c) and (g)). In contrast, +the transformer branch of Conformer retains the local feature details from CNN while depressing the background ($e.g.$, +the peacock contours in (d) and (h) are more complete than those in(c) and (g). + +![](figures/feature_maps.png) + +# Getting started + +## Install + +First, install PyTorch 1.7.0+ and torchvision 0.8.1+ and [pytorch-image-models 0.3.2](https://github.com/rwightman/pytorch-image-models): + +``` +conda install -c pytorch pytorch torchvision +pip install timm==0.3.2 +``` + +## Data preparation + +Download and extract ImageNet train and val images from http://image-net.org/. +The directory structure is the standard layout for the torchvision [`datasets.ImageFolder`](https://pytorch.org/docs/stable/torchvision/datasets.html#imagefolder), and the training and validation data is expected to be in the `train/` folder and `val` folder respectively: + +``` +/path/to/imagenet/ + train/ + class1/ + img1.jpeg + class2/ + img2.jpeg + val/ + class1/ + img3.jpeg + class/2 + img4.jpeg +``` + +## Training and test +### Training +To train Conformer-S on ImageNet on a single node with 8 gpus for 300 epochs run: + +``` +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 +OUTPUT='./output/Conformer_small_patch16_batch_1024_lr1e-3_300epochs' + +python -m torch.distributed.launch --master_port 50130 --nproc_per_node=8 --use_env main.py \ + --model Conformer_small_patch16 \ + --data-set IMNET \ + --batch-size 128 \ + --lr 0.001 \ + --num_workers 4 \ + --data-path /data/user/Dataset/ImageNet_ILSVRC2012/ \ + --output_dir ${OUTPUT} \ + --epochs 300 +``` +### Test +To test Conformer-S on ImageNet on a single gpu run: +``` +CUDA_VISIBLE_DEVICES=0, python main.py --model Conformer_small_patch16 --eval --batch-size 64 \ + --input-size 224 \ + --data-set IMNET \ + --num_workers 4 \ + --data-path /data/user/Dataset/ImageNet_ILSVRC2012/ \ + --epochs 100 \ + --resume ../Conformer_small_patch16.pth +``` + + +# Model zoo +| Model | Parameters | MACs | Top-1 Acc | Link | +| ------------ | ---------- | ------ | --------- | ---- | +| Conformer-Ti | 23.5 M | 5.2 G | 81.3 % | [baidu](https://pan.baidu.com/s/12AblBmhUu5gnYsPjnDE_Jg)(code: hzhm) [google](https://drive.google.com/file/d/19SxGhKcWOR5oQSxNUWUM2MGYiaWMrF1z/view?usp=sharing) | +| Conformer-S | 37.7 M | 10.6 G | 83.4 % | [baidu](https://pan.baidu.com/s/1kYOZ9mRP5fvujH6snsOjew)(code: qvu8) [google](https://drive.google.com/file/d/1mpOlbLaVxOfEwV4-ha78j_1Ebqzj2B83/view?usp=sharing) | +| Conformer-B | 83.3 M | 23.3 G | 84.1 % | [baidu](https://pan.baidu.com/s/1FL5XDAqHoimpUxNSunKq0w)(code: b4z9) [google](https://drive.google.com/file/d/1oeQ9LSOGKEUaYGu7WTlUGl3KDsQIi0MA/view?usp=sharing) | + +# Citation +``` +@article{peng2021conformer, + title={Conformer: Local Features Coupling Global Representations for Visual Recognition}, + author={Zhiliang Peng and Wei Huang and Shanzhi Gu and Lingxi Xie and Yaowei Wang and Jianbin Jiao and Qixiang Ye}, + journal={arXiv preprint arXiv:2105.03889}, + year={2021}, +} +``` diff --git a/PyTorch/NLP/Conformer-main/conformer.py b/PyTorch/NLP/Conformer-main/conformer.py new file mode 100644 index 00000000..d7d841a9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/conformer.py @@ -0,0 +1,445 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from functools import partial + +from timm.models.layers import DropPath, trunc_normal_ + +class Mlp(nn.Module): + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim // num_heads + # NOTE scale factor was wrong in my original version, can set manually to be compat with prev weights + self.scale = qk_scale or head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class Block(nn.Module): + + def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0., + drop_path=0., act_layer=nn.GELU, norm_layer=partial(nn.LayerNorm, eps=1e-6)): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention( + dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + def forward(self, x): + x = x + self.drop_path(self.attn(self.norm1(x))) + x = x + self.drop_path(self.mlp(self.norm2(x))) + return x + + +class ConvBlock(nn.Module): + + def __init__(self, inplanes, outplanes, stride=1, res_conv=False, act_layer=nn.ReLU, groups=1, + norm_layer=partial(nn.BatchNorm2d, eps=1e-6), drop_block=None, drop_path=None): + super(ConvBlock, self).__init__() + + expansion = 4 + med_planes = outplanes // expansion + + self.conv1 = nn.Conv2d(inplanes, med_planes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn1 = norm_layer(med_planes) + self.act1 = act_layer(inplace=True) + + self.conv2 = nn.Conv2d(med_planes, med_planes, kernel_size=3, stride=stride, groups=groups, padding=1, bias=False) + self.bn2 = norm_layer(med_planes) + self.act2 = act_layer(inplace=True) + + self.conv3 = nn.Conv2d(med_planes, outplanes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn3 = norm_layer(outplanes) + self.act3 = act_layer(inplace=True) + + if res_conv: + self.residual_conv = nn.Conv2d(inplanes, outplanes, kernel_size=1, stride=stride, padding=0, bias=False) + self.residual_bn = norm_layer(outplanes) + + self.res_conv = res_conv + self.drop_block = drop_block + self.drop_path = drop_path + + def zero_init_last_bn(self): + nn.init.zeros_(self.bn3.weight) + + def forward(self, x, x_t=None, return_x_2=True): + residual = x + + x = self.conv1(x) + x = self.bn1(x) + if self.drop_block is not None: + x = self.drop_block(x) + x = self.act1(x) + + x = self.conv2(x) if x_t is None else self.conv2(x + x_t) + x = self.bn2(x) + if self.drop_block is not None: + x = self.drop_block(x) + x2 = self.act2(x) + + x = self.conv3(x2) + x = self.bn3(x) + if self.drop_block is not None: + x = self.drop_block(x) + + if self.drop_path is not None: + x = self.drop_path(x) + + if self.res_conv: + residual = self.residual_conv(residual) + residual = self.residual_bn(residual) + + x += residual + x = self.act3(x) + + if return_x_2: + return x, x2 + else: + return x + + +class FCUDown(nn.Module): + """ CNN feature maps -> Transformer patch embeddings + """ + + def __init__(self, inplanes, outplanes, dw_stride, act_layer=nn.GELU, + norm_layer=partial(nn.LayerNorm, eps=1e-6)): + super(FCUDown, self).__init__() + self.dw_stride = dw_stride + + self.conv_project = nn.Conv2d(inplanes, outplanes, kernel_size=1, stride=1, padding=0) + self.sample_pooling = nn.AvgPool2d(kernel_size=dw_stride, stride=dw_stride) + + self.ln = norm_layer(outplanes) + self.act = act_layer() + + def forward(self, x, x_t): + x = self.conv_project(x) # [N, C, H, W] + + x = self.sample_pooling(x).flatten(2).transpose(1, 2) + x = self.ln(x) + x = self.act(x) + + x = torch.cat([x_t[:, 0][:, None, :], x], dim=1) + + return x + + +class FCUUp(nn.Module): + """ Transformer patch embeddings -> CNN feature maps + """ + + def __init__(self, inplanes, outplanes, up_stride, act_layer=nn.ReLU, + norm_layer=partial(nn.BatchNorm2d, eps=1e-6),): + super(FCUUp, self).__init__() + + self.up_stride = up_stride + self.conv_project = nn.Conv2d(inplanes, outplanes, kernel_size=1, stride=1, padding=0) + self.bn = norm_layer(outplanes) + self.act = act_layer() + + def forward(self, x, H, W): + B, _, C = x.shape + # [N, 197, 384] -> [N, 196, 384] -> [N, 384, 196] -> [N, 384, 14, 14] + x_r = x[:, 1:].transpose(1, 2).reshape(B, C, H, W) + x_r = self.act(self.bn(self.conv_project(x_r))) + + return F.interpolate(x_r, size=(H * self.up_stride, W * self.up_stride)) + + +class Med_ConvBlock(nn.Module): + """ special case for Convblock with down sampling, + """ + def __init__(self, inplanes, act_layer=nn.ReLU, groups=1, norm_layer=partial(nn.BatchNorm2d, eps=1e-6), + drop_block=None, drop_path=None): + + super(Med_ConvBlock, self).__init__() + + expansion = 4 + med_planes = inplanes // expansion + + self.conv1 = nn.Conv2d(inplanes, med_planes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn1 = norm_layer(med_planes) + self.act1 = act_layer(inplace=True) + + self.conv2 = nn.Conv2d(med_planes, med_planes, kernel_size=3, stride=1, groups=groups, padding=1, bias=False) + self.bn2 = norm_layer(med_planes) + self.act2 = act_layer(inplace=True) + + self.conv3 = nn.Conv2d(med_planes, inplanes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn3 = norm_layer(inplanes) + self.act3 = act_layer(inplace=True) + + self.drop_block = drop_block + self.drop_path = drop_path + + def zero_init_last_bn(self): + nn.init.zeros_(self.bn3.weight) + + def forward(self, x): + residual = x + + x = self.conv1(x) + x = self.bn1(x) + if self.drop_block is not None: + x = self.drop_block(x) + x = self.act1(x) + + x = self.conv2(x) + x = self.bn2(x) + if self.drop_block is not None: + x = self.drop_block(x) + x = self.act2(x) + + x = self.conv3(x) + x = self.bn3(x) + if self.drop_block is not None: + x = self.drop_block(x) + + if self.drop_path is not None: + x = self.drop_path(x) + + x += residual + x = self.act3(x) + + return x + + +class ConvTransBlock(nn.Module): + """ + Basic module for ConvTransformer, keep feature maps for CNN block and patch embeddings for transformer encoder block + """ + + def __init__(self, inplanes, outplanes, res_conv, stride, dw_stride, embed_dim, num_heads=12, mlp_ratio=4., + qkv_bias=False, qk_scale=None, drop_rate=0., attn_drop_rate=0., drop_path_rate=0., + last_fusion=False, num_med_block=0, groups=1): + + super(ConvTransBlock, self).__init__() + expansion = 4 + self.cnn_block = ConvBlock(inplanes=inplanes, outplanes=outplanes, res_conv=res_conv, stride=stride, groups=groups) + + if last_fusion: + self.fusion_block = ConvBlock(inplanes=outplanes, outplanes=outplanes, stride=2, res_conv=True, groups=groups) + else: + self.fusion_block = ConvBlock(inplanes=outplanes, outplanes=outplanes, groups=groups) + + if num_med_block > 0: + self.med_block = [] + for i in range(num_med_block): + self.med_block.append(Med_ConvBlock(inplanes=outplanes, groups=groups)) + self.med_block = nn.ModuleList(self.med_block) + + self.squeeze_block = FCUDown(inplanes=outplanes // expansion, outplanes=embed_dim, dw_stride=dw_stride) + + self.expand_block = FCUUp(inplanes=embed_dim, outplanes=outplanes // expansion, up_stride=dw_stride) + + self.trans_block = Block( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=drop_path_rate) + + self.dw_stride = dw_stride + self.embed_dim = embed_dim + self.num_med_block = num_med_block + self.last_fusion = last_fusion + + def forward(self, x, x_t): + x, x2 = self.cnn_block(x) + + _, _, H, W = x2.shape + + x_st = self.squeeze_block(x2, x_t) + + x_t = self.trans_block(x_st + x_t) + + if self.num_med_block > 0: + for m in self.med_block: + x = m(x) + + x_t_r = self.expand_block(x_t, H // self.dw_stride, W // self.dw_stride) + x = self.fusion_block(x, x_t_r, return_x_2=False) + + return x, x_t + + +class Conformer(nn.Module): + + def __init__(self, patch_size=16, in_chans=3, num_classes=1000, base_channel=64, channel_ratio=4, num_med_block=0, + embed_dim=768, depth=12, num_heads=12, mlp_ratio=4., qkv_bias=False, qk_scale=None, + drop_rate=0., attn_drop_rate=0., drop_path_rate=0.): + + # Transformer + super().__init__() + self.num_classes = num_classes + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + assert depth % 3 == 0 + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) + self.trans_dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + + # Classifier head + self.trans_norm = nn.LayerNorm(embed_dim) + self.trans_cls_head = nn.Linear(embed_dim, num_classes) if num_classes > 0 else nn.Identity() + self.pooling = nn.AdaptiveAvgPool2d(1) + self.conv_cls_head = nn.Linear(int(256 * channel_ratio), num_classes) + + # Stem stage: get the feature maps by conv block (copied form resnet.py) + self.conv1 = nn.Conv2d(in_chans, 64, kernel_size=7, stride=2, padding=3, bias=False) # 1 / 2 [112, 112] + self.bn1 = nn.BatchNorm2d(64) + self.act1 = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) # 1 / 4 [56, 56] + + # 1 stage + stage_1_channel = int(base_channel * channel_ratio) + trans_dw_stride = patch_size // 4 + self.conv_1 = ConvBlock(inplanes=64, outplanes=stage_1_channel, res_conv=True, stride=1) + self.trans_patch_conv = nn.Conv2d(64, embed_dim, kernel_size=trans_dw_stride, stride=trans_dw_stride, padding=0) + self.trans_1 = Block(dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, + qk_scale=qk_scale, drop=drop_rate, attn_drop=attn_drop_rate, drop_path=self.trans_dpr[0], + ) + + # 2~4 stage + init_stage = 2 + fin_stage = depth // 3 + 1 + for i in range(init_stage, fin_stage): + self.add_module('conv_trans_' + str(i), + ConvTransBlock( + stage_1_channel, stage_1_channel, False, 1, dw_stride=trans_dw_stride, embed_dim=embed_dim, + num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop_rate=drop_rate, attn_drop_rate=attn_drop_rate, drop_path_rate=self.trans_dpr[i-1], + num_med_block=num_med_block + ) + ) + + + stage_2_channel = int(base_channel * channel_ratio * 2) + # 5~8 stage + init_stage = fin_stage # 5 + fin_stage = fin_stage + depth // 3 # 9 + for i in range(init_stage, fin_stage): + s = 2 if i == init_stage else 1 + in_channel = stage_1_channel if i == init_stage else stage_2_channel + res_conv = True if i == init_stage else False + self.add_module('conv_trans_' + str(i), + ConvTransBlock( + in_channel, stage_2_channel, res_conv, s, dw_stride=trans_dw_stride // 2, embed_dim=embed_dim, + num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop_rate=drop_rate, attn_drop_rate=attn_drop_rate, drop_path_rate=self.trans_dpr[i-1], + num_med_block=num_med_block + ) + ) + + stage_3_channel = int(base_channel * channel_ratio * 2 * 2) + # 9~12 stage + init_stage = fin_stage # 9 + fin_stage = fin_stage + depth // 3 # 13 + for i in range(init_stage, fin_stage): + s = 2 if i == init_stage else 1 + in_channel = stage_2_channel if i == init_stage else stage_3_channel + res_conv = True if i == init_stage else False + last_fusion = True if i == depth else False + self.add_module('conv_trans_' + str(i), + ConvTransBlock( + in_channel, stage_3_channel, res_conv, s, dw_stride=trans_dw_stride // 4, embed_dim=embed_dim, + num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop_rate=drop_rate, attn_drop_rate=attn_drop_rate, drop_path_rate=self.trans_dpr[i-1], + num_med_block=num_med_block, last_fusion=last_fusion + ) + ) + self.fin_stage = fin_stage + + trunc_normal_(self.cls_token, std=.02) + + self.apply(self._init_weights) + + def _init_weights(self, m): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if isinstance(m, nn.Linear) and m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.LayerNorm): + nn.init.constant_(m.bias, 0) + nn.init.constant_(m.weight, 1.0) + elif isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1.) + nn.init.constant_(m.bias, 0.) + elif isinstance(m, nn.GroupNorm): + nn.init.constant_(m.weight, 1.) + nn.init.constant_(m.bias, 0.) + + @torch.jit.ignore + def no_weight_decay(self): + return {'cls_token'} + + + def forward(self, x): + B = x.shape[0] + cls_tokens = self.cls_token.expand(B, -1, -1) + + # pdb.set_trace() + # stem stage [N, 3, 224, 224] -> [N, 64, 56, 56] + x_base = self.maxpool(self.act1(self.bn1(self.conv1(x)))) + + # 1 stage + x = self.conv_1(x_base, return_x_2=False) + + x_t = self.trans_patch_conv(x_base).flatten(2).transpose(1, 2) + x_t = torch.cat([cls_tokens, x_t], dim=1) + x_t = self.trans_1(x_t) + + # 2 ~ final + for i in range(2, self.fin_stage): + x, x_t = eval('self.conv_trans_' + str(i))(x, x_t) + + # conv classification + x_p = self.pooling(x).flatten(1) + conv_cls = self.conv_cls_head(x_p) + + # trans classification + x_t = self.trans_norm(x_t) + tran_cls = self.trans_cls_head(x_t[:, 0]) + + return [conv_cls, tran_cls] diff --git a/PyTorch/NLP/Conformer-main/datasets.py b/PyTorch/NLP/Conformer-main/datasets.py new file mode 100644 index 00000000..773deb0e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/datasets.py @@ -0,0 +1,110 @@ +import os +import json + +from torchvision import datasets, transforms +from torchvision.datasets.folder import ImageFolder, default_loader + +from timm.data.constants import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD +from timm.data import create_transform + + +class INatDataset(ImageFolder): + def __init__(self, root, train=True, year=2018, transform=None, target_transform=None, + category='name', loader=default_loader): + self.transform = transform + self.loader = loader + self.target_transform = target_transform + self.year = year + # assert category in ['kingdom','phylum','class','order','supercategory','family','genus','name'] + path_json = os.path.join(root, f'{"train" if train else "val"}{year}.json') + with open(path_json) as json_file: + data = json.load(json_file) + + with open(os.path.join(root, 'categories.json')) as json_file: + data_catg = json.load(json_file) + + path_json_for_targeter = os.path.join(root, f"train{year}.json") + + with open(path_json_for_targeter) as json_file: + data_for_targeter = json.load(json_file) + + targeter = {} + indexer = 0 + for elem in data_for_targeter['annotations']: + king = [] + king.append(data_catg[int(elem['category_id'])][category]) + if king[0] not in targeter.keys(): + targeter[king[0]] = indexer + indexer += 1 + self.nb_classes = len(targeter) + + self.samples = [] + for elem in data['images']: + cut = elem['file_name'].split('/') + target_current = int(cut[2]) + path_current = os.path.join(root, cut[0], cut[2], cut[3]) + + categors = data_catg[target_current] + target_current_true = targeter[categors[category]] + self.samples.append((path_current, target_current_true)) + + # __getitem__ and __len__ inherited from ImageFolder + + +def build_dataset(is_train, args): + transform = build_transform(is_train, args) + + if args.data_set == 'CIFAR': + dataset = datasets.CIFAR100(args.data_path, train=is_train, transform=transform) + nb_classes = 100 + elif args.data_set == 'CIFAR10': + dataset = datasets.CIFAR10(args.data_path, train=is_train, transform=transform) + nb_classes = 10 + elif args.data_set == 'IMNET': + root = os.path.join(args.data_path, 'train' if is_train else 'val') + dataset = datasets.ImageFolder(root, transform=transform) + nb_classes = 1000 + elif args.data_set == 'INAT': + dataset = INatDataset(args.data_path, train=is_train, year=2018, + category=args.inat_category, transform=transform) + nb_classes = dataset.nb_classes + elif args.data_set == 'INAT19': + dataset = INatDataset(args.data_path, train=is_train, year=2019, + category=args.inat_category, transform=transform) + nb_classes = dataset.nb_classes + + return dataset, nb_classes + + +def build_transform(is_train, args): + resize_im = args.input_size > 32 + if is_train: + # this should always dispatch to transforms_imagenet_train + transform = create_transform( + input_size=args.input_size, + is_training=True, + color_jitter=args.color_jitter, + auto_augment=args.aa, + interpolation=args.train_interpolation, + re_prob=args.reprob, + re_mode=args.remode, + re_count=args.recount, + ) + if not resize_im: + # replace RandomResizedCropAndInterpolation with + # RandomCrop + transform.transforms[0] = transforms.RandomCrop( + args.input_size, padding=4) + return transform + + t = [] + if resize_im: + size = int((256 / 224) * args.input_size) + t.append( + transforms.Resize(size, interpolation=3), # to maintain same ratio w.r.t. 224 images + ) + t.append(transforms.CenterCrop(args.input_size)) + + t.append(transforms.ToTensor()) + t.append(transforms.Normalize(IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD)) + return transforms.Compose(t) diff --git a/PyTorch/NLP/Conformer-main/engine.py b/PyTorch/NLP/Conformer-main/engine.py new file mode 100644 index 00000000..a2c16ae4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/engine.py @@ -0,0 +1,127 @@ +""" +Train and eval functions used in main.py +""" +import math +import sys +from typing import Iterable, Optional + +import torch + +from timm.data import Mixup +from timm.utils import accuracy, ModelEma + +import utils + + +def train_one_epoch(model: torch.nn.Module, criterion: torch.nn.Module, + data_loader: Iterable, optimizer: torch.optim.Optimizer, + device: torch.device, epoch: int, loss_scaler, max_norm: float = 0, + model_ema: Optional[ModelEma] = None, mixup_fn: Optional[Mixup] = None, + set_training_mode=True + ): + # TODO fix this for finetuning + model.train(set_training_mode) + criterion.train() + metric_logger = utils.MetricLogger(delimiter=" ") + metric_logger.add_meter('lr', utils.SmoothedValue(window_size=1, fmt='{value:.6f}')) + header = 'Epoch: [{}]'.format(epoch) + print_freq = 10 + + for samples, targets in metric_logger.log_every(data_loader, print_freq, header): + samples = samples.to(device, non_blocking=True) + targets = targets.to(device, non_blocking=True) + + if mixup_fn is not None: + samples, targets = mixup_fn(samples, targets) + + with torch.cuda.amp.autocast(): + outputs = model(samples) + if isinstance(outputs, list): + loss_list = [criterion(o, targets) / len(outputs) for o in outputs] + loss = sum(loss_list) + else: + loss = criterion(outputs, targets) + + loss_value = loss.item() + + if not math.isfinite(loss_value): + print("Loss is {}, stopping training".format(loss_value)) + sys.exit(1) + + optimizer.zero_grad() + + # this attribute is added by timm on one optimizer (adahessian) + is_second_order = hasattr(optimizer, 'is_second_order') and optimizer.is_second_order + loss_scaler(loss, optimizer, clip_grad=max_norm, + parameters=model.parameters(), create_graph=is_second_order) + + torch.cuda.synchronize() + if model_ema is not None: + model_ema.update(model) + + if isinstance(outputs, list): + metric_logger.update(loss_0=loss_list[0].item()) + metric_logger.update(loss_1=loss_list[1].item()) + else: + metric_logger.update(loss=loss_value) + metric_logger.update(lr=optimizer.param_groups[0]["lr"]) + # gather the stats from all processes + metric_logger.synchronize_between_processes() + print("Averaged stats:", metric_logger) + return {k: meter.global_avg for k, meter in metric_logger.meters.items()} + + +@torch.no_grad() +def evaluate(data_loader, model, device): + criterion = torch.nn.CrossEntropyLoss() + + metric_logger = utils.MetricLogger(delimiter=" ") + header = 'Test:' + + # switch to evaluation mode + model.eval() + + for images, target in metric_logger.log_every(data_loader, 10, header): + images = images.to(device, non_blocking=True) + target = target.to(device, non_blocking=True) + + # compute output + with torch.cuda.amp.autocast(): + output = model(images) + # Conformer + if isinstance(output, list): + loss_list = [criterion(o, target) / len(output) for o in output] + loss = sum(loss_list) + # others + else: + loss = criterion(output, target) + if isinstance(output, list): + # Conformer + acc1_head1 = accuracy(output[0], target, topk=(1,))[0] + acc1_head2 = accuracy(output[1], target, topk=(1,))[0] + acc1_total = accuracy(output[0] + output[1], target, topk=(1,))[0] + else: + # others + acc1, acc5 = accuracy(output, target, topk=(1, 5)) + + batch_size = images.shape[0] + if isinstance(output, list): + metric_logger.update(loss=loss.item()) + metric_logger.update(loss_0=loss_list[0].item()) + metric_logger.update(loss_1=loss_list[1].item()) + metric_logger.meters['acc1'].update(acc1_total.item(), n=batch_size) + metric_logger.meters['acc1_head1'].update(acc1_head1.item(), n=batch_size) + metric_logger.meters['acc1_head2'].update(acc1_head2.item(), n=batch_size) + else: + metric_logger.update(loss=loss.item()) + metric_logger.meters['acc1'].update(acc1.item(), n=batch_size) + metric_logger.meters['acc5'].update(acc5.item(), n=batch_size) + if isinstance(output, list): + print('* Acc@heads_top1 {heads_top1.global_avg:.3f} Acc@head_1 {head1_top1.global_avg:.3f} Acc@head_2 {head2_top1.global_avg:.3f} ' + 'loss@total {losses.global_avg:.3f} loss@1 {loss_0.global_avg:.3f} loss@2 {loss_1.global_avg:.3f} ' + .format(heads_top1=metric_logger.acc1, head1_top1=metric_logger.acc1_head1, head2_top1=metric_logger.acc1_head2, + losses=metric_logger.loss, loss_0=metric_logger.loss_0, loss_1=metric_logger.loss_1)) + else: + print('* Acc@1 {top1.global_avg:.3f} Acc@5 {top5.global_avg:.3f} loss {losses.global_avg:.3f}' + .format(top1=metric_logger.acc1, top5=metric_logger.acc5, losses=metric_logger.loss)) + return {k: meter.global_avg for k, meter in metric_logger.meters.items()} diff --git a/PyTorch/NLP/Conformer-main/figures/feature_maps.png b/PyTorch/NLP/Conformer-main/figures/feature_maps.png new file mode 100644 index 0000000000000000000000000000000000000000..b0bb6a8df8c5faf83876ca94c16fb669a48b6de4 GIT binary patch literal 530014 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

_9EdM8nK$j4L_yDUws<_c$)Ekj%?jRa= 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

Km%75W|`3!96e|8QU;3bq$L#}VD^Mr%YA965*& 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


({^1p^JGfS1`_^jh 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

gB&KQW#{)CKK{0aZX+}9+pQD6LYEI_}uEWsgRPl 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 0 or args.cutmix > 0. or args.cutmix_minmax is not None + if mixup_active: + mixup_fn = Mixup( + mixup_alpha=args.mixup, cutmix_alpha=args.cutmix, cutmix_minmax=args.cutmix_minmax, + prob=args.mixup_prob, switch_prob=args.mixup_switch_prob, mode=args.mixup_mode, + label_smoothing=args.smoothing, num_classes=args.nb_classes) + + print(f"Creating model: {args.model}") + model = create_model( + args.model, + pretrained=False, + num_classes=args.nb_classes, + drop_rate=args.drop, + drop_path_rate=args.drop_path, + drop_block_rate=args.drop_block, + ) + + if args.finetune: + if args.finetune.startswith('https'): + checkpoint = torch.hub.load_state_dict_from_url( + args.finetune, map_location='cpu', check_hash=True) + else: + checkpoint = torch.load(args.finetune, map_location='cpu') + if 'model' in checkpoint.keys(): + checkpoint_model = checkpoint['model'] + else: + checkpoint_model = checkpoint + state_dict = model.state_dict() + for k in ['head.weight', 'head.bias', 'head_dist.weight', 'head_dist.bias', + 'trans_cls_head.weight', 'trans_cls_head.bias', 'conv_cls_head.weight', 'conv_cls_head.bias']: + if k in checkpoint_model and checkpoint_model[k].shape != state_dict[k].shape: + print(f"Removing key {k} from pretrained checkpoint") + del checkpoint_model[k] + if 'pos_embed' in checkpoint_model.keys(): + # interpolate position embedding + pos_embed_checkpoint = checkpoint_model['pos_embed'] + embedding_size = pos_embed_checkpoint.shape[-1] + num_patches = model.patch_embed.num_patches + num_extra_tokens = model.pos_embed.shape[-2] - num_patches + # height (== width) for the checkpoint position embedding + orig_size = int((pos_embed_checkpoint.shape[-2] - num_extra_tokens) ** 0.5) + # height (== width) for the new position embedding + new_size = int(num_patches ** 0.5) + # class_token and dist_token are kept unchanged + extra_tokens = pos_embed_checkpoint[:, :num_extra_tokens] + # only the position tokens are interpolated + pos_tokens = pos_embed_checkpoint[:, num_extra_tokens:] + pos_tokens = pos_tokens.reshape(-1, orig_size, orig_size, embedding_size).permute(0, 3, 1, 2) + pos_tokens = torch.nn.functional.interpolate( + pos_tokens, size=(new_size, new_size), mode='bicubic', align_corners=False) + pos_tokens = pos_tokens.permute(0, 2, 3, 1).flatten(1, 2) + new_pos_embed = torch.cat((extra_tokens, pos_tokens), dim=1) + checkpoint_model['pos_embed'] = new_pos_embed + + model.load_state_dict(checkpoint_model, strict=False) + + model.to(device) + + model_ema = None + if args.model_ema: + # Important to create EMA model after cuda(), DP wrapper, and AMP but before SyncBN and DDP wrapper + model_ema = ModelEma( + model, + decay=args.model_ema_decay, + device='cpu' if args.model_ema_force_cpu else '', + resume='') + + model_without_ddp = model + if args.distributed: + model = torch.nn.parallel.DistributedDataParallel(model, device_ids=[args.gpu]) + model_without_ddp = model.module + n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) + print('number of params:', n_parameters) + + # linear_scaled_lr = args.lr * args.batch_size * utils.get_world_size() / 512.0 + # args.lr = linear_scaled_lr + optimizer = create_optimizer(args, model) + loss_scaler = NativeScaler() + + lr_scheduler, _ = create_scheduler(args, optimizer) + + criterion = LabelSmoothingCrossEntropy() + + if args.mixup > 0.: + # smoothing is handled with mixup label transform + criterion = SoftTargetCrossEntropy() + elif args.smoothing: + criterion = LabelSmoothingCrossEntropy(smoothing=args.smoothing) + else: + criterion = torch.nn.CrossEntropyLoss() + + output_dir = Path(args.output_dir) + if args.resume: + if args.resume.startswith('https'): + checkpoint = torch.hub.load_state_dict_from_url( + args.resume, map_location='cpu', check_hash=True) + else: + checkpoint = torch.load(args.resume, map_location='cpu') + # pdb.set_trace() + if 'model' in checkpoint.keys(): + model_without_ddp.load_state_dict(checkpoint['model']) + else: + model_without_ddp.load_state_dict(checkpoint) + if not args.eval and 'optimizer' in checkpoint and 'lr_scheduler' in checkpoint and 'epoch' in checkpoint: + optimizer.load_state_dict(checkpoint['optimizer']) + lr_scheduler.load_state_dict(checkpoint['lr_scheduler']) + args.start_epoch = checkpoint['epoch'] + 1 + if args.model_ema: + utils._load_checkpoint_for_ema(model_ema, checkpoint['model_ema']) + + if args.eval: + test_stats = evaluate(data_loader_val, model, device) + print(f"Accuracy of the network on the {len(dataset_val)} test images: {test_stats['acc1']:.1f}%") + return + + print("Start training") + start_time = time.time() + max_accuracy = 0.0 + for epoch in range(args.start_epoch, args.epochs): + if args.distributed: + data_loader_train.sampler.set_epoch(epoch) + + train_stats = train_one_epoch( + model, criterion, data_loader_train, + optimizer, device, epoch, loss_scaler, + args.clip_grad, model_ema, mixup_fn, + set_training_mode=args.finetune == '' # keep in eval mode during finetuning + ) + + lr_scheduler.step(epoch) + if args.output_dir: + checkpoint_paths = [output_dir / 'checkpoint.pth'] + for checkpoint_path in checkpoint_paths: + utils.save_on_master({ + 'model': model_without_ddp.state_dict(), + 'optimizer': optimizer.state_dict(), + 'lr_scheduler': lr_scheduler.state_dict(), + 'epoch': epoch, + 'model_ema': get_state_dict(model_ema), + 'args': args, + }, checkpoint_path) + if epoch % args.evaluate_freq == 0: + test_stats = evaluate(data_loader_val, model, device) + print(f"Accuracy of the network on the {len(dataset_val)} test images: {test_stats['acc1']:.1f}%") + max_accuracy = max(max_accuracy, test_stats["acc1"]) + print(f'Max accuracy: {max_accuracy:.2f}%') + + log_stats = {**{f'train_{k}': v for k, v in train_stats.items()}, + **{f'test_{k}': v for k, v in test_stats.items()}, + 'epoch': epoch, + 'n_parameters': n_parameters} + + if args.output_dir and utils.is_main_process(): + with (output_dir / "log.txt").open("a") as f: + f.write(json.dumps(log_stats) + "\n") + + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print('Training time {}'.format(total_time_str)) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser('DeiT training and evaluation script', parents=[get_args_parser()]) + args = parser.parse_args() + if args.output_dir: + Path(args.output_dir).mkdir(parents=True, exist_ok=True) + main(args) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.py b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.py new file mode 100644 index 00000000..dbd739f7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.py @@ -0,0 +1,212 @@ +""" +some instructions +1. Fill the models that needs to be checked in the modelzoo_dict +2. Arange the structure of the directory as follows, the script will find the + corresponding config itself: + model_dir/model_family/checkpoints + e.g.: models/faster_rcnn/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth + models/faster_rcnn/faster_rcnn_r101_fpn_1x_coco_20200130-047c8118.pth +3. Excute the batch_test.sh +""" + +import argparse +import json +import os +import subprocess + +import mmcv +import torch +from mmcv import Config, get_logger +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import (get_dist_info, init_dist, load_checkpoint, + wrap_fp16_model) + +from mmdet.apis import multi_gpu_test, single_gpu_test +from mmdet.datasets import (build_dataloader, build_dataset, + replace_ImageToTensor) +from mmdet.models import build_detector + +modelzoo_dict = { + 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py': { + 'bbox': 0.374 + }, + 'configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py': { + 'bbox': 0.382, + 'segm': 0.347 + }, + 'configs/rpn/rpn_r50_fpn_1x_coco.py': { + 'AR@1000': 0.582 + } +} + + +def parse_args(): + parser = argparse.ArgumentParser( + description='The script used for checking the correctness \ + of batch inference') + parser.add_argument('model_dir', help='directory of models') + parser.add_argument( + 'json_out', help='the output json records test information like mAP') + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + return args + + +def check_finish(all_model_dict, result_file): + # check if all models are checked + tested_cfgs = [] + with open(result_file, 'r+') as f: + for line in f: + line = json.loads(line) + tested_cfgs.append(line['cfg']) + is_finish = True + for cfg in sorted(all_model_dict.keys()): + if cfg not in tested_cfgs: + return cfg + if is_finish: + with open(result_file, 'a+') as f: + f.write('finished\n') + + +def dump_dict(record_dict, json_out): + # dump result json dict + with open(json_out, 'a+') as f: + mmcv.dump(record_dict, f, file_format='json') + f.write('\n') + + +def main(): + args = parse_args() + # touch the output json if not exist + with open(args.json_out, 'a+'): + pass + # init distributed env first, since logger depends on the dist + # info. + if args.launcher == 'none': + distributed = False + else: + distributed = True + init_dist(args.launcher, backend='nccl') + rank, world_size = get_dist_info() + + logger = get_logger('root') + + # read info of checkpoints and config + result_dict = dict() + for model_family_dir in os.listdir(args.model_dir): + for model in os.listdir( + os.path.join(args.model_dir, model_family_dir)): + # cpt: rpn_r50_fpn_1x_coco_20200218-5525fa2e.pth + # cfg: rpn_r50_fpn_1x_coco.py + cfg = model.split('.')[0][:-18] + '.py' + cfg_path = os.path.join('configs', model_family_dir, cfg) + assert os.path.isfile( + cfg_path), f'{cfg_path} is not valid config path' + cpt_path = os.path.join(args.model_dir, model_family_dir, model) + result_dict[cfg_path] = cpt_path + assert cfg_path in modelzoo_dict, f'please fill the ' \ + f'performance of cfg: {cfg_path}' + cfg = check_finish(result_dict, args.json_out) + cpt = result_dict[cfg] + try: + cfg_name = cfg + logger.info(f'evaluate {cfg}') + record = dict(cfg=cfg, cpt=cpt) + cfg = Config.fromfile(cfg) + # cfg.data.test.ann_file = 'data/val_0_10.json' + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + cfg.model.pretrained = None + if cfg.model.get('neck'): + if isinstance(cfg.model.neck, list): + for neck_cfg in cfg.model.neck: + if neck_cfg.get('rfp_backbone'): + if neck_cfg.rfp_backbone.get('pretrained'): + neck_cfg.rfp_backbone.pretrained = None + elif cfg.model.neck.get('rfp_backbone'): + if cfg.model.neck.rfp_backbone.get('pretrained'): + cfg.model.neck.rfp_backbone.pretrained = None + + # in case the test dataset is concatenated + if isinstance(cfg.data.test, dict): + cfg.data.test.test_mode = True + elif isinstance(cfg.data.test, list): + for ds_cfg in cfg.data.test: + ds_cfg.test_mode = True + + # build the dataloader + samples_per_gpu = 2 # hack test with 2 image per gpu + if samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.test.pipeline = replace_ImageToTensor( + cfg.data.test.pipeline) + dataset = build_dataset(cfg.data.test) + data_loader = build_dataloader( + dataset, + samples_per_gpu=samples_per_gpu, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False) + + # build the model and load checkpoint + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg')) + fp16_cfg = cfg.get('fp16', None) + if fp16_cfg is not None: + wrap_fp16_model(model) + + checkpoint = load_checkpoint(model, cpt, map_location='cpu') + # old versions did not save class info in checkpoints, + # this walkaround is for backward compatibility + if 'CLASSES' in checkpoint['meta']: + model.CLASSES = checkpoint['meta']['CLASSES'] + else: + model.CLASSES = dataset.CLASSES + + if not distributed: + model = MMDataParallel(model, device_ids=[0]) + outputs = single_gpu_test(model, data_loader) + else: + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False) + outputs = multi_gpu_test(model, data_loader, 'tmp') + if rank == 0: + ref_mAP_dict = modelzoo_dict[cfg_name] + metrics = list(ref_mAP_dict.keys()) + metrics = [ + m if m != 'AR@1000' else 'proposal_fast' for m in metrics + ] + eval_results = dataset.evaluate(outputs, metrics) + print(eval_results) + for metric in metrics: + if metric == 'proposal_fast': + ref_metric = modelzoo_dict[cfg_name]['AR@1000'] + eval_metric = eval_results['AR@1000'] + else: + ref_metric = modelzoo_dict[cfg_name][metric] + eval_metric = eval_results[f'{metric}_mAP'] + if abs(ref_metric - eval_metric) > 0.003: + record['is_normal'] = False + dump_dict(record, args.json_out) + check_finish(result_dict, args.json_out) + except Exception as e: + logger.error(f'rank: {rank} test fail with error: {e}') + record['terminate'] = True + dump_dict(record, args.json_out) + check_finish(result_dict, args.json_out) + # hack there to throw some error to prevent hang out + subprocess.call('xxx') + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.sh b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.sh new file mode 100644 index 00000000..8da8fef1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/batch_test.sh @@ -0,0 +1,19 @@ +export PYTHONPATH=${PWD} + +partition=$1 +model_dir=$2 +json_out=$3 +job_name=batch_test +gpus=8 +gpu_per_node=8 + +touch $json_out +lastLine=$(tail -n 1 $json_out) +while [ "$lastLine" != "finished" ] +do + srun -p ${partition} --gres=gpu:${gpu_per_node} -n${gpus} --ntasks-per-node=${gpu_per_node} \ + --job-name=${job_name} --kill-on-bad-exit=1 \ + python .dev_scripts/batch_test.py $model_dir $json_out --launcher='slurm' + lastLine=$(tail -n 1 $json_out) + echo $lastLine +done diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/benchmark_filter.py b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/benchmark_filter.py new file mode 100644 index 00000000..0ba2d04b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/benchmark_filter.py @@ -0,0 +1,155 @@ +import argparse +import os +import os.path as osp + +import mmcv + + +def parse_args(): + parser = argparse.ArgumentParser(description='Filter configs to train') + parser.add_argument( + '--basic-arch', + action='store_true', + help='to train models in basic arch') + parser.add_argument( + '--datasets', action='store_true', help='to train models in dataset') + parser.add_argument( + '--data-pipeline', + action='store_true', + help='to train models related to data pipeline, e.g. augmentations') + parser.add_argument( + '--nn-module', + action='store_true', + help='to train models related to neural network modules') + parser.add_argument( + '--model-options', + nargs='+', + help='custom options to special model benchmark') + + args = parser.parse_args() + return args + + +basic_arch_root = [ + 'atss', 'cascade_rcnn', 'cascade_rpn', 'centripetalnet', 'cornernet', + 'detectors', 'detr', 'double_heads', 'dynamic_rcnn', 'faster_rcnn', 'fcos', + 'foveabox', 'fp16', 'free_anchor', 'fsaf', 'gfl', 'ghm', 'grid_rcnn', + 'guided_anchoring', 'htc', 'libra_rcnn', 'mask_rcnn', 'ms_rcnn', + 'nas_fcos', 'paa', 'pisa', 'point_rend', 'reppoints', 'retinanet', 'rpn', + 'sabl', 'ssd', 'tridentnet', 'vfnet', 'yolact', 'yolo' +] + +datasets_root = [ + 'wider_face', 'pascal_voc', 'cityscapes', 'lvis', 'deepfashion' +] + +data_pipeline_root = ['albu_example', 'instaboost'] + +nn_module_root = [ + 'carafe', 'dcn', 'empirical_attention', 'gcnet', 'gn', 'gn+ws', 'hrnet', + 'pafpn', 'nas_fpn', 'regnet', 'resnest', 'res2net', 'groie' +] + +benchmark_pool = [ + 'configs/albu_example/mask_rcnn_r50_fpn_albu_1x_coco.py', + 'configs/atss/atss_r50_fpn_1x_coco.py', + 'configs/carafe/mask_rcnn_r50_fpn_carafe_1x_coco.py', + 'configs/cascade_rcnn/cascade_mask_rcnn_r50_fpn_1x_coco.py', + 'configs/cascade_rpn/crpn_faster_rcnn_r50_caffe_fpn_1x_coco.py', + 'configs/centripetalnet/' + 'centripetalnet_hourglass104_mstest_16x6_210e_coco.py', + 'configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py', + 'configs/cornernet/' + 'cornernet_hourglass104_mstest_8x6_210e_coco.py', # special + 'configs/dcn/mask_rcnn_r50_fpn_mdconv_c3-c5_1x_coco.py', + 'configs/dcn/faster_rcnn_r50_fpn_dpool_1x_coco.py', + 'configs/dcn/faster_rcnn_r50_fpn_mdpool_1x_coco.py', + 'configs/dcn/mask_rcnn_r50_fpn_dconv_c3-c5_1x_coco.py', + 'configs/detectors/detectors_htc_r50_1x_coco.py', + 'configs/detr/detr_r50_8x2_150e_coco.py', + 'configs/double_heads/dh_faster_rcnn_r50_fpn_1x_coco.py', + 'configs/dynamic_rcnn/dynamic_rcnn_r50_fpn_1x.py', + 'configs/empirical_attention/faster_rcnn_r50_fpn_attention_1111_dcn_1x_coco.py', # noqa + 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py', + 'configs/faster_rcnn/faster_rcnn_r50_fpn_ohem_1x_coco.py', + 'configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_1x_coco.py', + 'configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco.py', + 'configs/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_1x_coco.py', + 'configs/fcos/fcos_center_r50_caffe_fpn_gn-head_4x4_1x_coco.py', + 'configs/foveabox/fovea_align_r50_fpn_gn-head_4x4_2x_coco.py', + 'configs/fp16/retinanet_r50_fpn_fp16_1x_coco.py', + 'configs/fp16/mask_rcnn_r50_fpn_fp16_1x_coco.py', + 'configs/free_anchor/retinanet_free_anchor_r50_fpn_1x_coco.py', + 'configs/fsaf/fsaf_r50_fpn_1x_coco.py', + 'configs/gcnet/mask_rcnn_r50_fpn_r4_gcb_c3-c5_1x_coco.py', + 'configs/gfl/gfl_r50_fpn_1x_coco.py', + 'configs/ghm/retinanet_ghm_r50_fpn_1x_coco.py', + 'configs/gn/mask_rcnn_r50_fpn_gn-all_2x_coco.py', + 'configs/gn+ws/mask_rcnn_r50_fpn_gn_ws-all_2x_coco.py', + 'configs/grid_rcnn/grid_rcnn_r50_fpn_gn-head_2x_coco.py', + 'configs/groie/faster_rcnn_r50_fpn_groie_1x_coco.py', + 'configs/guided_anchoring/ga_faster_r50_caffe_fpn_1x_coco.py', + 'configs/hrnet/mask_rcnn_hrnetv2p_w18_1x_coco.py', + 'configs/htc/htc_r50_fpn_1x_coco.py', + 'configs/instaboost/mask_rcnn_r50_fpn_instaboost_4x_coco.py', + 'configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x_coco.py', + 'configs/lvis/mask_rcnn_r50_fpn_sample1e-3_mstrain_1x_lvis_v1.py', + 'configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py', + 'configs/ms_rcnn/ms_rcnn_r50_caffe_fpn_1x_coco.py', + 'configs/nas_fcos/nas_fcos_nashead_r50_caffe_fpn_gn-head_4x4_1x_coco.py', + 'configs/nas_fpn/retinanet_r50_nasfpn_crop640_50e_coco.py', + 'configs/paa/paa_r50_fpn_1x_coco.py', + 'configs/pafpn/faster_rcnn_r50_pafpn_1x_coco.py', + 'configs/pisa/pisa_mask_rcnn_r50_fpn_1x_coco.py', + 'configs/point_rend/point_rend_r50_caffe_fpn_mstrain_1x_coco.py', + 'configs/regnet/mask_rcnn_regnetx-3GF_fpn_1x_coco.py', + 'configs/reppoints/reppoints_moment_r50_fpn_gn-neck+head_1x_coco.py', + 'configs/res2net/faster_rcnn_r2_101_fpn_2x_coco.py', + 'configs/resnest/' + 'mask_rcnn_s50_fpn_syncbn-backbone+head_mstrain_1x_coco.py', + 'configs/retinanet/retinanet_r50_caffe_fpn_1x_coco.py', + 'configs/rpn/rpn_r50_fpn_1x_coco.py', + 'configs/sabl/sabl_retinanet_r50_fpn_1x_coco.py', + 'configs/ssd/ssd300_coco.py', + 'configs/tridentnet/tridentnet_r50_caffe_1x_coco.py', + 'configs/vfnet/vfnet_r50_fpn_1x_coco.py', + 'configs/yolact/yolact_r50_1x8_coco.py', + 'configs/yolo/yolov3_d53_320_273e_coco.py' +] + + +def main(): + args = parse_args() + + benchmark_type = [] + if args.basic_arch: + benchmark_type += basic_arch_root + if args.datasets: + benchmark_type += datasets_root + if args.data_pipeline: + benchmark_type += data_pipeline_root + if args.nn_module: + benchmark_type += nn_module_root + + special_model = args.options + if special_model is not None: + benchmark_type += special_model + + config_dpath = 'configs/' + benchmark_configs = [] + for cfg_root in benchmark_type: + cfg_dir = osp.join(config_dpath, cfg_root) + configs = os.scandir(cfg_dir) + for cfg in configs: + config_path = osp.join(cfg_dir, cfg.name) + if (config_path in benchmark_pool + and config_path not in benchmark_configs): + benchmark_configs.append(config_path) + + print(f'Totally found {len(benchmark_configs)} configs to benchmark') + config_dicts = dict(models=benchmark_configs) + mmcv.dump(config_dicts, 'regression_test_configs.json') + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/convert_benchmark_script.py b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/convert_benchmark_script.py new file mode 100644 index 00000000..e307ef0b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/convert_benchmark_script.py @@ -0,0 +1,74 @@ +import argparse +import os +import os.path as osp + +import mmcv + + +def parse_args(): + parser = argparse.ArgumentParser( + description='Convert benchmark model json to script') + parser.add_argument( + 'json_path', type=str, help='json path output by benchmark_filter') + parser.add_argument('partition', type=str, help='slurm partition name') + parser.add_argument( + '--run', action='store_true', help='run script directly') + parser.add_argument( + '--out', type=str, help='path to save model benchmark script') + + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + if args.out: + out_suffix = args.out.split('.')[-1] + assert args.out.endswith('.sh'), \ + f'Expected out file path suffix is .sh, but get .{out_suffix}' + assert args.out or args.run, \ + ('Please specify at least one operation (save/run/ the ' + 'script) with the argument "--out" or "--run"') + + json_data = mmcv.load(args.json_path) + model_cfgs = json_data['models'] + + partition = args.partition # cluster name + + root_name = './tools' + train_script_name = osp.join(root_name, 'slurm_train.sh') + # stdout is no output + stdout_cfg = '>/dev/null' + + commands = [] + for i, cfg in enumerate(model_cfgs): + # print cfg name + echo_info = 'echo \'' + cfg + '\' &' + commands.append(echo_info) + commands.append('\n') + + fname, _ = osp.splitext(osp.basename(cfg)) + out_fname = osp.join(root_name, fname) + # default setting + command_info = 'GPUS=8 GPUS_PER_NODE=8 CPUS_PER_TASK=2 ' \ + + train_script_name + ' ' + command_info += partition + ' ' + command_info += fname + ' ' + command_info += cfg + ' ' + command_info += out_fname + ' ' + command_info += stdout_cfg + ' &' + + commands.append(command_info) + + if i < len(model_cfgs): + commands.append('\n') + command_str = ''.join(commands) + if args.out: + with open(args.out, 'w') as f: + f.write(command_str) + if args.run: + os.system(command_str) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/gather_models.py b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/gather_models.py new file mode 100644 index 00000000..5be5df8c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/gather_models.py @@ -0,0 +1,162 @@ +import argparse +import glob +import json +import os.path as osp +import shutil +import subprocess + +import mmcv +import torch + + +def process_checkpoint(in_file, out_file): + checkpoint = torch.load(in_file, map_location='cpu') + # remove optimizer for smaller file size + if 'optimizer' in checkpoint: + del checkpoint['optimizer'] + # if it is necessary to remove some sensitive data in checkpoint['meta'], + # add the code here. + torch.save(checkpoint, out_file) + sha = subprocess.check_output(['sha256sum', out_file]).decode() + final_file = out_file.rstrip('.pth') + '-{}.pth'.format(sha[:8]) + subprocess.Popen(['mv', out_file, final_file]) + return final_file + + +def get_final_epoch(config): + cfg = mmcv.Config.fromfile('./configs/' + config) + return cfg.total_epochs + + +def get_final_results(log_json_path, epoch, results_lut): + result_dict = dict() + with open(log_json_path, 'r') as f: + for line in f.readlines(): + log_line = json.loads(line) + if 'mode' not in log_line.keys(): + continue + + if log_line['mode'] == 'train' and log_line['epoch'] == epoch: + result_dict['memory'] = log_line['memory'] + + if log_line['mode'] == 'val' and log_line['epoch'] == epoch: + result_dict.update({ + key: log_line[key] + for key in results_lut if key in log_line + }) + return result_dict + + +def parse_args(): + parser = argparse.ArgumentParser(description='Gather benchmarked models') + parser.add_argument( + 'root', + type=str, + help='root path of benchmarked models to be gathered') + parser.add_argument( + 'out', type=str, help='output path of gathered models to be stored') + + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + models_root = args.root + models_out = args.out + mmcv.mkdir_or_exist(models_out) + + # find all models in the root directory to be gathered + raw_configs = list(mmcv.scandir('./configs', '.py', recursive=True)) + + # filter configs that is not trained in the experiments dir + used_configs = [] + for raw_config in raw_configs: + if osp.exists(osp.join(models_root, raw_config)): + used_configs.append(raw_config) + print(f'Find {len(used_configs)} models to be gathered') + + # find final_ckpt and log file for trained each config + # and parse the best performance + model_infos = [] + for used_config in used_configs: + exp_dir = osp.join(models_root, used_config) + # check whether the exps is finished + final_epoch = get_final_epoch(used_config) + final_model = 'epoch_{}.pth'.format(final_epoch) + model_path = osp.join(exp_dir, final_model) + + # skip if the model is still training + if not osp.exists(model_path): + continue + + # get the latest logs + log_json_path = list( + sorted(glob.glob(osp.join(exp_dir, '*.log.json'))))[-1] + log_txt_path = list(sorted(glob.glob(osp.join(exp_dir, '*.log'))))[-1] + cfg = mmcv.Config.fromfile('./configs/' + used_config) + results_lut = cfg.evaluation.metric + if not isinstance(results_lut, list): + results_lut = [results_lut] + # case when using VOC, the evaluation key is only 'mAP' + results_lut = [key + '_mAP' for key in results_lut if 'mAP' not in key] + model_performance = get_final_results(log_json_path, final_epoch, + results_lut) + + if model_performance is None: + continue + + model_time = osp.split(log_txt_path)[-1].split('.')[0] + model_infos.append( + dict( + config=used_config, + results=model_performance, + epochs=final_epoch, + model_time=model_time, + log_json_path=osp.split(log_json_path)[-1])) + + # publish model for each checkpoint + publish_model_infos = [] + for model in model_infos: + model_publish_dir = osp.join(models_out, model['config'].rstrip('.py')) + mmcv.mkdir_or_exist(model_publish_dir) + + model_name = osp.split(model['config'])[-1].split('.')[0] + + model_name += '_' + model['model_time'] + publish_model_path = osp.join(model_publish_dir, model_name) + trained_model_path = osp.join(models_root, model['config'], + 'epoch_{}.pth'.format(model['epochs'])) + + # convert model + final_model_path = process_checkpoint(trained_model_path, + publish_model_path) + + # copy log + shutil.copy( + osp.join(models_root, model['config'], model['log_json_path']), + osp.join(model_publish_dir, f'{model_name}.log.json')) + shutil.copy( + osp.join(models_root, model['config'], + model['log_json_path'].rstrip('.json')), + osp.join(model_publish_dir, f'{model_name}.log')) + + # copy config to guarantee reproducibility + config_path = model['config'] + config_path = osp.join( + 'configs', + config_path) if 'configs' not in config_path else config_path + target_cconfig_path = osp.split(config_path)[-1] + shutil.copy(config_path, + osp.join(model_publish_dir, target_cconfig_path)) + + model['model_path'] = final_model_path + publish_model_infos.append(model) + + models = dict(models=publish_model_infos) + print(f'Totally gathered {len(publish_model_infos)} models') + mmcv.dump(models, osp.join(models_out, 'model_info.json')) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/linter.sh b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/linter.sh new file mode 100644 index 00000000..b0fe0acf --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.dev_scripts/linter.sh @@ -0,0 +1,3 @@ +yapf -r -i mmdet/ configs/ tests/ tools/ +isort -rc mmdet/ configs/ tests/ tools/ +flake8 . diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/CODE_OF_CONDUCT.md b/PyTorch/NLP/Conformer-main/mmdetection/.github/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..efd43057 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at chenkaidev@gmail.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/CONTRIBUTING.md b/PyTorch/NLP/Conformer-main/mmdetection/.github/CONTRIBUTING.md new file mode 100644 index 00000000..d65e30a4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/CONTRIBUTING.md @@ -0,0 +1,70 @@ +# Contributing to mmdetection + +All kinds of contributions are welcome, including but not limited to the following. + +- Fixes (typo, bugs) +- New features and components + +## Workflow + +1. fork and pull the latest mmdetection +2. checkout a new branch (do not use master branch for PRs) +3. commit your changes +4. create a PR + +Note + +- If you plan to add some new features that involve large changes, it is encouraged to open an issue for discussion first. +- If you are the author of some papers and would like to include your method to mmdetection, please let us know (open an issue or contact the maintainers). We will much appreciate your contribution. +- For new features and new modules, unit tests are required to improve the code's robustness. + +## Code style + +### Python + +We adopt [PEP8](https://www.python.org/dev/peps/pep-0008/) as the preferred code style. + +We use the following tools for linting and formatting: + +- [flake8](http://flake8.pycqa.org/en/latest/): linter +- [yapf](https://github.com/google/yapf): formatter +- [isort](https://github.com/timothycrosley/isort): sort imports + +Style configurations of yapf and isort can be found in [setup.cfg](../setup.cfg). + +We use [pre-commit hook](https://pre-commit.com/) that checks and formats for `flake8`, `yapf`, `isort`, `trailing whitespaces`, + fixes `end-of-files`, sorts `requirments.txt` automatically on every commit. +The config for a pre-commit hook is stored in [.pre-commit-config](../.pre-commit-config.yaml). + +After you clone the repository, you will need to install initialize pre-commit hook. + +```shell +pip install -U pre-commit +``` + +From the repository folder + +```shell +pre-commit install +``` + +If you are facing issue when installing markdown lint, you may install ruby for markdown lint by following + +```shell +# install rvm +curl -L https://get.rvm.io | bash -s -- --autolibs=read-fail +# set up environment +# Note that you might need to edit ~/.bashrc, ~/.bash_profile, and ~/.profile +source ~/.profile +rvm autolibs disable +# install ruby +rvm install 2.7.1 +``` + +After this on every commit check code linters and formatter will be enforced. + +>Before you create a PR, make sure that your code lints and is formatted by yapf. + +### C++ and CUDA + +We follow the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/config.yml b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..56bbd88f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,9 @@ +blank_issues_enabled: false + +contact_links: + - name: Common Issues + url: https://mmdetection.readthedocs.io/en/latest/faq.html + about: Check if your issue already has solutions + - name: MMDetection Documentation + url: https://mmdetection.readthedocs.io/en/latest/ + about: Check if your question is answered in docs diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/error-report.md b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/error-report.md new file mode 100644 index 00000000..23cb9c1a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/error-report.md @@ -0,0 +1,47 @@ +--- +name: Error report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +Thanks for your error report and we appreciate it a lot. + +**Checklist** + +1. I have searched related issues but cannot get the expected help. +2. I have read the [FAQ documentation](https://mmdetection.readthedocs.io/en/latest/faq.html) but cannot get the expected help. +3. The bug has not been fixed in the latest version. + +**Describe the bug** +A clear and concise description of what the bug is. + +**Reproduction** + +1. What command or script did you run? + +```none +A placeholder for the command. +``` + +2. Did you make any modifications on the code or config? Did you understand what you have modified? +3. What dataset did you use? + +**Environment** + +1. Please run `python mmdet/utils/collect_env.py` to collect necessary environment information and paste it here. +2. You may add addition that may be helpful for locating the problem, such as + - How you installed PyTorch [e.g., pip, conda, source] + - Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.) + +**Error traceback** +If applicable, paste the error trackback here. + +```none +A placeholder for trackback. +``` + +**Bug fix** +If you have already identified the reason, you can provide the information here. If you are willing to create a PR to fix it, please also leave a comment here and that would be much appreciated! diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/feature_request.md b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..33f9d5f2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Describe the feature** + +**Motivation** +A clear and concise description of the motivation of the feature. +Ex1. It is inconvenient when [....]. +Ex2. There is a recent paper [....], which is very helpful for [....]. + +**Related resources** +If there is an official code release or third-party implementations, please also provide the information here, which would be very helpful. + +**Additional context** +Add any other context or screenshots about the feature request here. +If you would like to implement the feature and create a PR, please leave a comment here and that would be much appreciated. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/general_questions.md b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/general_questions.md new file mode 100644 index 00000000..b5a6451a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/general_questions.md @@ -0,0 +1,8 @@ +--- +name: General questions +about: Ask general questions to get help +title: '' +labels: '' +assignees: '' + +--- diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/reimplementation_questions.md b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/reimplementation_questions.md new file mode 100644 index 00000000..6b358387 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/ISSUE_TEMPLATE/reimplementation_questions.md @@ -0,0 +1,68 @@ +--- +name: Reimplementation Questions +about: Ask about questions during model reimplementation +title: '' +labels: 'reimplementation' +assignees: '' + +--- + +**Notice** + +There are several common situations in the reimplementation issues as below + +1. Reimplement a model in the model zoo using the provided configs +2. Reimplement a model in the model zoo on other dataset (e.g., custom datasets) +3. Reimplement a custom model but all the components are implemented in MMDetection +4. Reimplement a custom model with new modules implemented by yourself + +There are several things to do for different cases as below. + +- For case 1 & 3, please follow the steps in the following sections thus we could help to quick identify the issue. +- For case 2 & 4, please understand that we are not able to do much help here because we usually do not know the full code and the users should be responsible to the code they write. +- One suggestion for case 2 & 4 is that the users should first check whether the bug lies in the self-implemented code or the original code. For example, users can first make sure that the same model runs well on supported datasets. If you still need help, please describe what you have done and what you obtain in the issue, and follow the steps in the following sections and try as clear as possible so that we can better help you. + +**Checklist** + +1. I have searched related issues but cannot get the expected help. +2. The issue has not been fixed in the latest version. + +**Describe the issue** + +A clear and concise description of what the problem you meet and what have you done. + +**Reproduction** + +1. What command or script did you run? + +```none +A placeholder for the command. +``` + +2. What config dir you run? + +```none +A placeholder for the config. +``` + +3. Did you make any modifications on the code or config? Did you understand what you have modified? +4. What dataset did you use? + +**Environment** + +1. Please run `python mmdet/utils/collect_env.py` to collect necessary environment information and paste it here. +2. You may add addition that may be helpful for locating the problem, such as + 1. How you installed PyTorch [e.g., pip, conda, source] + 2. Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.) + +**Results** + +If applicable, paste the related results here, e.g., what you expect and what you get. + +```none +A placeholder for results comparison +``` + +**Issue fix** + +If you have already identified the reason, you can provide the information here. If you are willing to create a PR to fix it, please also leave a comment here and that would be much appreciated! diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build.yml b/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build.yml new file mode 100644 index 00000000..fba01fa2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build.yml @@ -0,0 +1,142 @@ +name: build + +on: [push, pull_request] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: Install pre-commit hook + run: | + pip install pre-commit + pre-commit install + - name: Linting + run: pre-commit run --all-files + - name: Check docstring coverage + run: | + pip install interrogate + interrogate -v --ignore-init-method --ignore-module --ignore-nested-functions --ignore-regex "__repr__" --fail-under 80 mmdet + + build_cpu: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.7] + torch: [1.3.1, 1.5.1, 1.6.0] + include: + - torch: 1.3.1 + torchvision: 0.4.2 + mmcv: "latest+torch1.3.0+cpu" + - torch: 1.5.1 + torchvision: 0.6.1 + mmcv: "latest+torch1.5.0+cpu" + - torch: 1.6.0 + torchvision: 0.7.0 + mmcv: "latest+torch1.6.0+cpu" + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Pillow + run: pip install Pillow==6.2.2 + if: ${{matrix.torchvision == '0.4.2'}} + - name: Install PyTorch + run: pip install torch==${{matrix.torch}}+cpu torchvision==${{matrix.torchvision}}+cpu -f https://download.pytorch.org/whl/torch_stable.html + - name: Install MMCV + run: | + pip install mmcv-full==${{matrix.mmcv}} -f https://download.openmmlab.com/mmcv/dist/index.html --use-deprecated=legacy-resolver + python -c 'import mmcv; print(mmcv.__version__)' + - name: Install unittest dependencies + run: pip install -r requirements/tests.txt -r requirements/optional.txt + - name: Build and install + run: rm -rf .eggs && pip install -e . + - name: Run unittests and generate coverage report + run: | + coverage run --branch --source mmdet -m pytest tests/ + coverage xml + coverage report -m + + build_cuda: + runs-on: ubuntu-latest + + env: + CUDA: 10.1.105-1 + CUDA_SHORT: 10.1 + UBUNTU_VERSION: ubuntu1804 + strategy: + matrix: + python-version: [3.7] + torch: [1.3.1, 1.5.1+cu101, 1.6.0+cu101] + include: + - torch: 1.3.1 + torchvision: 0.4.2 + mmcv: "latest+torch1.3.0+cu101" + - torch: 1.5.1+cu101 + torchvision: 0.6.1+cu101 + mmcv: "latest+torch1.5.0+cu101" + - torch: 1.6.0+cu101 + torchvision: 0.7.0+cu101 + mmcv: "latest+torch1.6.0+cu101" + - torch: 1.6.0+cu101 + torchvision: 0.7.0+cu101 + mmcv: "latest+torch1.6.0+cu101" + python-version: 3.6 + - torch: 1.6.0+cu101 + torchvision: 0.7.0+cu101 + mmcv: "latest+torch1.6.0+cu101" + python-version: 3.8 + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install CUDA + run: | + export INSTALLER=cuda-repo-${UBUNTU_VERSION}_${CUDA}_amd64.deb + wget http://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/${INSTALLER} + sudo dpkg -i ${INSTALLER} + wget https://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/7fa2af80.pub + sudo apt-key add 7fa2af80.pub + sudo apt update -qq + sudo apt install -y cuda-${CUDA_SHORT/./-} cuda-cufft-dev-${CUDA_SHORT/./-} + sudo apt clean + export CUDA_HOME=/usr/local/cuda-${CUDA_SHORT} + export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${CUDA_HOME}/include:${LD_LIBRARY_PATH} + export PATH=${CUDA_HOME}/bin:${PATH} + - name: Install Pillow + run: pip install Pillow==6.2.2 + if: ${{matrix.torchvision < 0.5}} + - name: Install PyTorch + run: pip install torch==${{matrix.torch}} torchvision==${{matrix.torchvision}} -f https://download.pytorch.org/whl/torch_stable.html + - name: Install mmdet dependencies + run: | + pip install mmcv-full==${{matrix.mmcv}} -f https://download.openmmlab.com/mmcv/dist/index.html --use-deprecated=legacy-resolver + pip install -r requirements.txt + python -c 'import mmcv; print(mmcv.__version__)' + - name: Build and install + run: | + rm -rf .eggs + python setup.py check -m -s + TORCH_CUDA_ARCH_LIST=7.0 pip install . + - name: Run unittests and generate coverage report + run: | + coverage run --branch --source mmdet -m pytest tests/ + coverage xml + coverage report -m + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1.0.10 + with: + file: ./coverage.xml + flags: unittests + env_vars: OS,PYTHON + name: codecov-umbrella + fail_ci_if_error: false diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build_pat.yml b/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build_pat.yml new file mode 100644 index 00000000..7fea812d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/build_pat.yml @@ -0,0 +1,24 @@ +name: build_pat + +on: push + +jobs: + build_parrots: + runs-on: ubuntu-latest + container: + image: ghcr.io/sunnyxiaohu/parrots-mmcv:1.2.1 + credentials: + username: sunnyxiaohu + password: ${{secrets.CR_PAT}} + + steps: + - uses: actions/checkout@v2 + - name: Install mmdet dependencies + run: | + git clone https://github.com/open-mmlab/mmcv.git && cd mmcv + MMCV_WITH_OPS=1 python setup.py install + cd .. && rm -rf mmcv + python -c 'import mmcv; print(mmcv.__version__)' + pip install -r requirements.txt + - name: Build and install + run: rm -rf .eggs && pip install -e . diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/deploy.yml b/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/deploy.yml new file mode 100644 index 00000000..2f9458b9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.github/workflows/deploy.yml @@ -0,0 +1,24 @@ +name: deploy + +on: push + +jobs: + build-n-publish: + runs-on: ubuntu-latest + if: startsWith(github.event.ref, 'refs/tags') + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: Install torch + run: pip install torch + - name: Install wheel + run: pip install wheel + - name: Build MMDetection + run: python setup.py sdist bdist_wheel + - name: Publish distribution to PyPI + run: | + pip install twine + twine upload dist/* -u __token__ -p ${{ secrets.pypi_password }} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.gitignore b/PyTorch/NLP/Conformer-main/mmdetection/.gitignore new file mode 100644 index 00000000..77ca0d7c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.gitignore @@ -0,0 +1,121 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +data/ +data +.vscode +.idea +.DS_Store + +# custom +*.pkl +*.pkl.json +*.log.json +work_dirs/ + +# Pytorch +*.pth +*.py~ +*.sh~ diff --git a/PyTorch/NLP/Conformer-main/mmdetection/.readthedocs.yml b/PyTorch/NLP/Conformer-main/mmdetection/.readthedocs.yml new file mode 100644 index 00000000..73ea4cb7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/.readthedocs.yml @@ -0,0 +1,7 @@ +version: 2 + +python: + version: 3.7 + install: + - requirements: requirements/docs.txt + - requirements: requirements/readthedocs.txt diff --git a/PyTorch/NLP/Conformer-main/mmdetection/LICENSE b/PyTorch/NLP/Conformer-main/mmdetection/LICENSE new file mode 100644 index 00000000..04adf5cb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/LICENSE @@ -0,0 +1,203 @@ +Copyright 2018-2019 Open-MMLab. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018-2019 Open-MMLab. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/README.md b/PyTorch/NLP/Conformer-main/mmdetection/README.md new file mode 100644 index 00000000..224064c6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/README.md @@ -0,0 +1,41 @@ +## Notice +The code is forked from official [project](https://github.com/open-mmlab/mmdetection). **So the basic install and usage of mmdetection can be found in** [get_started.md](https://github.com/open-mmlab/mmdetection/blob/master/docs/get_started.md). We just add Conformer as a backbone in `mmdet/models/backbones/Conformer.py`. + +At present, we use the feature maps of different stages in the CNN branch as the input of FPN, so that it can be quickly applied to the detection algorithm based on the feature pyramid. **At the same time, we think that how to use the features of Transformer branch for detection is also an interesting problem.** + +## Training and inference under different detction algorithms +We provide some config files in `configs/`. And anyone can use Conformer to replace the backbone in the existing detection algorithms. We take the `Faster R-CNN` algorithm as an example to illustrate how to perform training and inference: + +```bash +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 +export OMP_NUM_THREADS=1 +GPU_NUM=8 + +CONFIG="./configs/faster_rcnn/faster_rcnn_conformer_small_patch32_fpn_1x_coco.py" +WORK_DIR='./work_dir/faster_rcnn_conformer_small_patch32_lr_1e_4_fpn_1x_coco_1344_800' + +# Train +python -m torch.distributed.launch --nproc_per_node=${GPU_NUM} --master_port=50040 --use_env ./tools/train.py ${CONFIG} --work-dir ${WORK_DIR} --gpus ${GPU_NUM} --launcher pytorch --cfg-options model.pretrained='./pretrain_models/Conformer_small_patch32.pth' model.backbone.patch_size=32 + +# Test on multiple cards +python -m torch.distributed.launch --nproc_per_node=${GPU_NUM} --master_port=50040 --use_env ./tools/test.py ${CONFIG} ${WORK_DIR}/latest.pth --launcher pytorch --eval bbox + +# Test on single card +#./tools/test.py ${CONFIG} ${WORK_DIR}/latest.pth --eval bbox +``` + +Here, we use the `Conformer_small_patch32` as backbone network, whose pretrain model weight can be downloaded from [baidu (k7q5)](https://pan.baidu.com/s/1pum_kOOwQYn404ZeGzjMlg) or [google drive](https://drive.google.com/file/d/1UrvRg2hnXsie_z_y39Xavdts4qfrwZ1E/view?usp=sharing). And the results are shown as following: + +| Method | Parameters | MACs | FPS | Bbox mAP | Model link | Log link | +| ------------ | ---------- | ------ | ------ | --------- | ---- |---- | +| Faster R-CNN | 55.4 M | 288.4 G | 13.5 | 43.1 | [baidu](https://pan.baidu.com/s/1lkZy_FTLeCRg3rVH8dOKOA)(7ax9) [google](https://drive.google.com/drive/folders/1gCvcW3Zhqq8KK5GnAr9So7-5uJwnrZcA?usp=sharing) | [baidu](https://pan.baidu.com/s/10HTtS8FozMSYfHJv8L2H5w)(ymv4)| +| Mask R-CNN | 58.1 M | 341.4 G | 10.9 | 43.6 | [baidu](https://pan.baidu.com/s/1wqvhbq4ePAPIZFqE0aCWEQ)(qkwq) [google](https://drive.google.com/drive/folders/1mjoReWPoBSMUIjBQE5VlhQf0XZ2sE7J-?usp=sharing)|[baidu](https://pan.baidu.com/s/1lSq7hMTSA8fN7WNXTZqp7g)(gh2v)| +|PAA (1x single scale)| - | - | - | 46.5 | (coming soon) | -| +|Cascade Mask RCNN (1x single scale)| - | - | - | 47.3 | (coming soon) | -| + +## Update Detection Performance + +| Method | Schedule | Parameters | MACs | FPS | Bbox mAP | Segm mAP | +| ------------ | ----- | ----- | ------ | ------ | --------- | ---- | +Faster R-CNN | 1x | 55.4 M | 288.4 G | 13.5 | 43.7 | - | +Faster R-CNN | 3x | 55.4 M | 288.4 G | 13.5 | 46.1 | - | diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_detection.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_detection.py new file mode 100644 index 00000000..156aca02 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_detection.py @@ -0,0 +1,55 @@ +dataset_type = 'CityscapesDataset' +data_root = 'data/cityscapes/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='Resize', img_scale=[(2048, 800), (2048, 1024)], keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=1, + workers_per_gpu=2, + train=dict( + type='RepeatDataset', + times=8, + dataset=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/instancesonly_filtered_gtFine_train.json', + img_prefix=data_root + 'leftImg8bit/train/', + pipeline=train_pipeline)), + val=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/instancesonly_filtered_gtFine_val.json', + img_prefix=data_root + 'leftImg8bit/val/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/instancesonly_filtered_gtFine_test.json', + img_prefix=data_root + 'leftImg8bit/test/', + pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_instance.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_instance.py new file mode 100644 index 00000000..3c5472aa --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/cityscapes_instance.py @@ -0,0 +1,55 @@ +dataset_type = 'CityscapesDataset' +data_root = 'data/cityscapes/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='Resize', img_scale=[(2048, 800), (2048, 1024)], keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=1, + workers_per_gpu=2, + train=dict( + type='RepeatDataset', + times=8, + dataset=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/instancesonly_filtered_gtFine_train.json', + img_prefix=data_root + 'leftImg8bit/train/', + pipeline=train_pipeline)), + val=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/instancesonly_filtered_gtFine_val.json', + img_prefix=data_root + 'leftImg8bit/val/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/instancesonly_filtered_gtFine_test.json', + img_prefix=data_root + 'leftImg8bit/test/', + pipeline=test_pipeline)) +evaluation = dict(metric=['bbox', 'segm']) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_detection.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_detection.py new file mode 100644 index 00000000..09a75c40 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_detection.py @@ -0,0 +1,48 @@ +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance.py new file mode 100644 index 00000000..f6ea4f45 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance.py @@ -0,0 +1,48 @@ +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) +evaluation = dict(metric=['bbox', 'segm']) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance_semantic.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance_semantic.py new file mode 100644 index 00000000..f7c072ec --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/coco_instance_semantic.py @@ -0,0 +1,53 @@ +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', with_bbox=True, with_mask=True, with_seg=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='SegRescale', scale_factor=1 / 8), + dict(type='DefaultFormatBundle'), + dict( + type='Collect', + keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + seg_prefix=data_root + 'stuffthingmaps/train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) +evaluation = dict(metric=['bbox', 'segm']) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/deepfashion.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/deepfashion.py new file mode 100644 index 00000000..308b4b2a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/deepfashion.py @@ -0,0 +1,53 @@ +# dataset settings +dataset_type = 'DeepFashionDataset' +data_root = 'data/DeepFashion/In-shop/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict(type='Resize', img_scale=(750, 1101), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(750, 1101), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + imgs_per_gpu=2, + workers_per_gpu=1, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/DeepFashion_segmentation_query.json', + img_prefix=data_root + 'Img/', + pipeline=train_pipeline, + data_root=data_root), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/DeepFashion_segmentation_query.json', + img_prefix=data_root + 'Img/', + pipeline=test_pipeline, + data_root=data_root), + test=dict( + type=dataset_type, + ann_file=data_root + + 'annotations/DeepFashion_segmentation_gallery.json', + img_prefix=data_root + 'Img/', + pipeline=test_pipeline, + data_root=data_root)) +evaluation = dict(interval=5, metric=['bbox', 'segm']) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v0.5_instance.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v0.5_instance.py new file mode 100644 index 00000000..f3da861d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v0.5_instance.py @@ -0,0 +1,23 @@ +_base_ = 'coco_instance.py' +dataset_type = 'LVISV05Dataset' +data_root = 'data/lvis_v0.5/' +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + _delete_=True, + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type=dataset_type, + ann_file=data_root + 'annotations/lvis_v0.5_train.json', + img_prefix=data_root + 'train2017/')), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/lvis_v0.5_val.json', + img_prefix=data_root + 'val2017/'), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/lvis_v0.5_val.json', + img_prefix=data_root + 'val2017/')) +evaluation = dict(metric=['bbox', 'segm']) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v1_instance.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v1_instance.py new file mode 100644 index 00000000..e8c5d1b1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/lvis_v1_instance.py @@ -0,0 +1,23 @@ +_base_ = 'coco_instance.py' +dataset_type = 'LVISV1Dataset' +data_root = 'data/lvis_v1/' +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + _delete_=True, + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( + type=dataset_type, + ann_file=data_root + 'annotations/lvis_v1_train.json', + img_prefix=data_root)), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/lvis_v1_val.json', + img_prefix=data_root), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/lvis_v1_val.json', + img_prefix=data_root)) +evaluation = dict(metric=['bbox', 'segm']) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/voc0712.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/voc0712.py new file mode 100644 index 00000000..ae09acdd --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/voc0712.py @@ -0,0 +1,55 @@ +# dataset settings +dataset_type = 'VOCDataset' +data_root = 'data/VOCdevkit/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='Resize', img_scale=(1000, 600), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1000, 600), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type='RepeatDataset', + times=3, + dataset=dict( + type=dataset_type, + ann_file=[ + data_root + 'VOC2007/ImageSets/Main/trainval.txt', + data_root + 'VOC2012/ImageSets/Main/trainval.txt' + ], + img_prefix=[data_root + 'VOC2007/', data_root + 'VOC2012/'], + pipeline=train_pipeline)), + val=dict( + type=dataset_type, + ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt', + img_prefix=data_root + 'VOC2007/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt', + img_prefix=data_root + 'VOC2007/', + pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='mAP') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/wider_face.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/wider_face.py new file mode 100644 index 00000000..d1d649be --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/datasets/wider_face.py @@ -0,0 +1,63 @@ +# dataset settings +dataset_type = 'WIDERFaceDataset' +data_root = 'data/WIDERFace/' +img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[1, 1, 1], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile', to_float32=True), + dict(type='LoadAnnotations', with_bbox=True), + dict( + type='PhotoMetricDistortion', + brightness_delta=32, + contrast_range=(0.5, 1.5), + saturation_range=(0.5, 1.5), + hue_delta=18), + dict( + type='Expand', + mean=img_norm_cfg['mean'], + to_rgb=img_norm_cfg['to_rgb'], + ratio_range=(1, 4)), + dict( + type='MinIoURandomCrop', + min_ious=(0.1, 0.3, 0.5, 0.7, 0.9), + min_crop_size=0.3), + dict(type='Resize', img_scale=(300, 300), keep_ratio=False), + dict(type='Normalize', **img_norm_cfg), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(300, 300), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=False), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=60, + workers_per_gpu=2, + train=dict( + type='RepeatDataset', + times=2, + dataset=dict( + type=dataset_type, + ann_file=data_root + 'train.txt', + img_prefix=data_root + 'WIDER_train/', + min_size=17, + pipeline=train_pipeline)), + val=dict( + type=dataset_type, + ann_file=data_root + 'val.txt', + img_prefix=data_root + 'WIDER_val/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'val.txt', + img_prefix=data_root + 'WIDER_val/', + pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/default_runtime.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/default_runtime.py new file mode 100644 index 00000000..594de8dc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/default_runtime.py @@ -0,0 +1,14 @@ +checkpoint_config = dict(interval=1) +# yapf:disable +log_config = dict( + interval=50, + hooks=[ + dict(type='TextLoggerHook'), + # dict(type='TensorboardLoggerHook') + ]) +# yapf:enable +dist_params = dict(backend='nccl') +log_level = 'INFO' +load_from = None +resume_from = None +workflow = [('train', 1)] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_mask_rcnn_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_mask_rcnn_r50_fpn.py new file mode 100644 index 00000000..fb9e0a8f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_mask_rcnn_r50_fpn.py @@ -0,0 +1,200 @@ +# model settings +model = dict( + type='CascadeRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), + roi_head=dict( + type='CascadeRoIHead', + num_stages=3, + stage_loss_weights=[1, 0.5, 0.25], + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=[ + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.05, 0.05, 0.1, 0.1]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.033, 0.033, 0.067, 0.067]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)) + ], + mask_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + mask_head=dict( + type='FCNMaskHead', + num_convs=4, + in_channels=256, + conv_out_channels=256, + num_classes=80, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=2000, + max_num=2000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=[ + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=28, + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.6, + neg_iou_thr=0.6, + min_pos_iou=0.6, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=28, + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.7, + min_pos_iou=0.7, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=28, + pos_weight=-1, + debug=False) + ]), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=1000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100, + mask_thr_binary=0.5))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_rcnn_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_rcnn_r50_fpn.py new file mode 100644 index 00000000..2282c36b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/cascade_rcnn_r50_fpn.py @@ -0,0 +1,183 @@ +# model settings +model = dict( + type='CascadeRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), + roi_head=dict( + type='CascadeRoIHead', + num_stages=3, + stage_loss_weights=[1, 0.5, 0.25], + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=[ + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.05, 0.05, 0.1, 0.1]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.033, 0.033, 0.067, 0.067]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)) + ]), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=2000, + max_num=2000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=[ + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.6, + neg_iou_thr=0.6, + min_pos_iou=0.6, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False), + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.7, + min_pos_iou=0.7, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False) + ]), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=1000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/fast_rcnn_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/fast_rcnn_r50_fpn.py new file mode 100644 index 00000000..1099165b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/fast_rcnn_r50_fpn.py @@ -0,0 +1,62 @@ +# model settings +model = dict( + type='FastRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + roi_head=dict( + type='StandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False)), + test_cfg=dict( + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_c4.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_c4.py new file mode 100644 index 00000000..72031750 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_c4.py @@ -0,0 +1,116 @@ +# model settings +norm_cfg = dict(type='BN', requires_grad=False) +model = dict( + type='FasterRCNN', + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict( + type='ResNet', + depth=50, + num_stages=3, + strides=(1, 2, 2), + dilations=(1, 1, 1), + out_indices=(2, ), + frozen_stages=1, + norm_cfg=norm_cfg, + norm_eval=True, + style='caffe'), + rpn_head=dict( + type='RPNHead', + in_channels=1024, + feat_channels=1024, + anchor_generator=dict( + type='AnchorGenerator', + scales=[2, 4, 8, 16, 32], + ratios=[0.5, 1.0, 2.0], + strides=[16]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + shared_head=dict( + type='ResLayer', + depth=50, + stage=3, + stride=2, + dilation=1, + style='caffe', + norm_cfg=norm_cfg, + norm_eval=True), + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0), + out_channels=1024, + featmap_strides=[16]), + bbox_head=dict( + type='BBoxHead', + with_avg_pool=True, + roi_feat_size=7, + in_channels=2048, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=12000, + nms_post=2000, + max_num=2000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=6000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_dc5.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_dc5.py new file mode 100644 index 00000000..16daf9ef --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_caffe_dc5.py @@ -0,0 +1,107 @@ +# model settings +norm_cfg = dict(type='BN', requires_grad=False) +model = dict( + type='FasterRCNN', + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + strides=(1, 2, 2, 1), + dilations=(1, 1, 1, 2), + out_indices=(3, ), + frozen_stages=1, + norm_cfg=norm_cfg, + norm_eval=True, + style='caffe'), + rpn_head=dict( + type='RPNHead', + in_channels=2048, + feat_channels=2048, + anchor_generator=dict( + type='AnchorGenerator', + scales=[2, 4, 8, 16, 32], + ratios=[0.5, 1.0, 2.0], + strides=[16]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=2048, + featmap_strides=[16]), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=2048, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=12000, + nms_post=2000, + max_num=2000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=6000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_fpn.py new file mode 100644 index 00000000..8dbd7a1f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/faster_rcnn_r50_fpn.py @@ -0,0 +1,111 @@ +model = dict( + type='FasterRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=-1, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=1000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100) + # soft-nms is also supported for rcnn testing + # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05) + )) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_caffe_c4.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_caffe_c4.py new file mode 100644 index 00000000..c3331114 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_caffe_c4.py @@ -0,0 +1,127 @@ +# model settings +norm_cfg = dict(type='BN', requires_grad=False) +model = dict( + type='MaskRCNN', + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict( + type='ResNet', + depth=50, + num_stages=3, + strides=(1, 2, 2), + dilations=(1, 1, 1), + out_indices=(2, ), + frozen_stages=1, + norm_cfg=norm_cfg, + norm_eval=True, + style='caffe'), + rpn_head=dict( + type='RPNHead', + in_channels=1024, + feat_channels=1024, + anchor_generator=dict( + type='AnchorGenerator', + scales=[2, 4, 8, 16, 32], + ratios=[0.5, 1.0, 2.0], + strides=[16]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + shared_head=dict( + type='ResLayer', + depth=50, + stage=3, + stride=2, + dilation=1, + style='caffe', + norm_cfg=norm_cfg, + norm_eval=True), + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0), + out_channels=1024, + featmap_strides=[16]), + bbox_head=dict( + type='BBoxHead', + with_avg_pool=True, + roi_feat_size=7, + in_channels=2048, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + mask_roi_extractor=None, + mask_head=dict( + type='FCNMaskHead', + num_convs=0, + in_channels=2048, + conv_out_channels=256, + num_classes=80, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=12000, + nms_post=2000, + max_num=2000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=14, + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=6000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100, + mask_thr_binary=0.5))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_fpn.py new file mode 100644 index 00000000..c5d5e32b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/mask_rcnn_r50_fpn.py @@ -0,0 +1,124 @@ +# model settings +model = dict( + type='MaskRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + mask_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + mask_head=dict( + type='FCNMaskHead', + num_convs=4, + in_channels=256, + conv_out_channels=256, + num_classes=80, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=-1, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=28, + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=1000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100, + mask_thr_binary=0.5))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/retinanet_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/retinanet_r50_fpn.py new file mode 100644 index 00000000..47fe98c2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/retinanet_r50_fpn.py @@ -0,0 +1,60 @@ +# model settings +model = dict( + type='RetinaNet', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + start_level=1, + add_extra_convs='on_input', + num_outs=5), + bbox_head=dict( + type='RetinaHead', + num_classes=80, + in_channels=256, + stacked_convs=4, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=4, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[8, 16, 32, 64, 128]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.4, + min_pos_iou=0, + ignore_iof_thr=-1), + allowed_border=-1, + pos_weight=-1, + debug=False), + test_cfg=dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_caffe_c4.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_caffe_c4.py new file mode 100644 index 00000000..b3741daa --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_caffe_c4.py @@ -0,0 +1,58 @@ +# model settings +model = dict( + type='RPN', + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict( + type='ResNet', + depth=50, + num_stages=3, + strides=(1, 2, 2), + dilations=(1, 1, 1), + out_indices=(2, ), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + norm_eval=True, + style='caffe'), + neck=None, + rpn_head=dict( + type='RPNHead', + in_channels=1024, + feat_channels=1024, + anchor_generator=dict( + type='AnchorGenerator', + scales=[2, 4, 8, 16, 32], + ratios=[0.5, 1.0, 2.0], + strides=[16]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=12000, + nms_post=2000, + max_num=2000, + nms_thr=0.7, + min_bbox_size=0))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_fpn.py new file mode 100644 index 00000000..02fa898f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/rpn_r50_fpn.py @@ -0,0 +1,60 @@ +# model settings +model = dict( + type='RPN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0))) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/ssd300.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/ssd300.py new file mode 100644 index 00000000..4ea79750 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/models/ssd300.py @@ -0,0 +1,49 @@ +# model settings +input_size = 300 +model = dict( + type='SingleStageDetector', + pretrained='open-mmlab://vgg16_caffe', + backbone=dict( + type='SSDVGG', + input_size=input_size, + depth=16, + with_last_pool=False, + ceil_mode=True, + out_indices=(3, 4), + out_feature_indices=(22, 34), + l2_norm_scale=20), + neck=None, + bbox_head=dict( + type='SSDHead', + in_channels=(512, 1024, 512, 256, 256, 256), + num_classes=80, + anchor_generator=dict( + type='SSDAnchorGenerator', + scale_major=False, + input_size=input_size, + basesize_ratio_range=(0.15, 0.9), + strides=[8, 16, 32, 64, 100, 300], + ratios=[[2], [2, 3], [2, 3], [2, 3], [2], [2]]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[0.1, 0.1, 0.2, 0.2])), + train_cfg=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0., + ignore_iof_thr=-1, + gt_max_assign_all=False), + smoothl1_beta=1., + allowed_border=-1, + pos_weight=-1, + neg_pos_ratio=3, + debug=False), + test_cfg=dict( + nms=dict(type='nms', iou_threshold=0.45), + min_bbox_size=0, + score_thr=0.02, + max_per_img=200)) +cudnn_benchmark = True diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_1x.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_1x.py new file mode 100644 index 00000000..12694c87 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_1x.py @@ -0,0 +1,11 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[8, 11]) +total_epochs = 12 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_20e.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_20e.py new file mode 100644 index 00000000..0559030c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_20e.py @@ -0,0 +1,11 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[16, 19]) +total_epochs = 20 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_2x.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_2x.py new file mode 100644 index 00000000..e34095ff --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/_base_/schedules/schedule_2x.py @@ -0,0 +1,11 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[16, 22]) +total_epochs = 24 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/README.md b/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/README.md new file mode 100644 index 00000000..d43fc6da --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/README.md @@ -0,0 +1,61 @@ +# Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks + +## Introduction + +[ALGORITHM] + +```latex +@article{Ren_2017, + title={Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks}, + journal={IEEE Transactions on Pattern Analysis and Machine Intelligence}, + publisher={Institute of Electrical and Electronics Engineers (IEEE)}, + author={Ren, Shaoqing and He, Kaiming and Girshick, Ross and Sun, Jian}, + year={2017}, + month={Jun}, +} +``` + +## Results and models + +| Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | box AP | Config | Download | +| :-------------: | :-----: | :-----: | :------: | :------------: | :----: | :------: | :--------: | +| R-50-DC5 | caffe | 1x | - | - | 37.2 | [config](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn/faster_rcnn_r50_caffe_dc5_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_dc5_1x_coco/faster_rcnn_r50_caffe_dc5_1x_coco_20201030_151909-531f0f43.pth) | [log](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_dc5_1x_coco/faster_rcnn_r50_caffe_dc5_1x_coco_20201030_151909.log.json) | +| R-50-FPN | caffe | 1x | 3.8 | | 37.8 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_1x_coco/faster_rcnn_r50_caffe_fpn_1x_coco_bbox_mAP-0.378_20200504_180032-c5925ee5.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_1x_coco/faster_rcnn_r50_caffe_fpn_1x_coco_20200504_180032.log.json) | +| R-50-FPN | pytorch | 1x | 4.0 | 21.4 | 37.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130_204655.log.json) | +| R-50-FPN | pytorch | 2x | - | - | 38.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_2x_coco/faster_rcnn_r50_fpn_2x_coco_bbox_mAP-0.384_20200504_210434-a5d8aa15.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_2x_coco/faster_rcnn_r50_fpn_2x_coco_20200504_210434.log.json) | +| R-101-FPN | caffe | 1x | 5.7 | | 39.8 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r101_caffe_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_caffe_fpn_1x_coco/faster_rcnn_r101_caffe_fpn_1x_coco_bbox_mAP-0.398_20200504_180057-b269e9dd.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_caffe_fpn_1x_coco/faster_rcnn_r101_caffe_fpn_1x_coco_20200504_180057.log.json) | +| R-101-FPN | pytorch | 1x | 6.0 | 15.6 | 39.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r101_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_fpn_1x_coco/faster_rcnn_r101_fpn_1x_coco_20200130-f513f705.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_fpn_1x_coco/faster_rcnn_r101_fpn_1x_coco_20200130_204655.log.json) | +| R-101-FPN | pytorch | 2x | - | - | 39.8 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r101_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_fpn_2x_coco/faster_rcnn_r101_fpn_2x_coco_bbox_mAP-0.398_20200504_210455-1d2dac9c.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r101_fpn_2x_coco/faster_rcnn_r101_fpn_2x_coco_20200504_210455.log.json) | +| X-101-32x4d-FPN | pytorch | 1x | 7.2 | 13.8 | 41.2 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_x101_32x4d_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_32x4d_fpn_1x_coco/faster_rcnn_x101_32x4d_fpn_1x_coco_20200203-cff10310.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_32x4d_fpn_1x_coco/faster_rcnn_x101_32x4d_fpn_1x_coco_20200203_000520.log.json) | +| X-101-32x4d-FPN | pytorch | 2x | - | - | 41.2 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_x101_32x4d_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_32x4d_fpn_2x_coco/faster_rcnn_x101_32x4d_fpn_2x_coco_bbox_mAP-0.412_20200506_041400-64a12c0b.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_32x4d_fpn_2x_coco/faster_rcnn_x101_32x4d_fpn_2x_coco_20200506_041400.log.json) | +| X-101-64x4d-FPN | pytorch | 1x | 10.3 | 9.4 | 42.1 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_x101_64x4d_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_64x4d_fpn_1x_coco/faster_rcnn_x101_64x4d_fpn_1x_coco_20200204-833ee192.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_64x4d_fpn_1x_coco/faster_rcnn_x101_64x4d_fpn_1x_coco_20200204_134340.log.json) | +| X-101-64x4d-FPN | pytorch | 2x | - | - | 41.6 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_x101_64x4d_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_64x4d_fpn_2x_coco/faster_rcnn_x101_64x4d_fpn_2x_coco_20200512_161033-5961fa95.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_x101_64x4d_fpn_2x_coco/faster_rcnn_x101_64x4d_fpn_2x_coco_20200512_161033.log.json) | + +## Different regression loss + +We trained with R-50-FPN pytorch style backbone for 1x schedule. + +| Backbone | Loss type | Mem (GB) | Inf time (fps) | box AP | Config | Download | +| :-------------: | :-------: | :------: | :------------: | :----: | :------: | :--------: | +| R-50-FPN | L1Loss | 4.0 | 21.4 | 37.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130_204655.log.json) | +| R-50-FPN | IoULoss | | | 37.9 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_iou_1x_coco-fdd207f3.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_iou_1x_coco_20200506_095954.log.json) | +| R-50-FPN | GIoULoss | | | 37.6 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_giou_1x_coco-0eada910.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_giou_1x_coco_20200505_161120.log.json) | +| R-50-FPN | BoundedIoULoss | | | 37.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_bounded_iou_1x_coco-98ad993b.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_bounded_iou_1x_coco_20200505_160738.log.json) | + +## Pre-trained Models + +We also train some models with longer schedules and multi-scale training. The users could finetune them for downstream tasks. + +| Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | box AP | Config | Download | +| :-------------: | :-----: | :-----: | :------: | :------------: | :----: | :------: | :--------: | +| [R-50-DC5](./faster_rcnn_r50_caffe_dc5_mstrain_1x_coco.py) | caffe | 1x | - | | 37.4 | [config](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_1x_coco/faster_rcnn_r50_caffe_dc5_mstrain_1x_coco_20201028_233851-b33d21b9.pth) | [log](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_1x_coco/faster_rcnn_r50_caffe_dc5_mstrain_1x_coco_20201028_233851.log.json) +| [R-50-DC5](./faster_rcnn_r50_caffe_dc5_mstrain_3x_coco.py) | caffe | 3x | - | | 38.7 | [config](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_3x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_3x_coco/faster_rcnn_r50_caffe_dc5_mstrain_3x_coco_20201028_002107-34a53b2c.pth) | [log](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_dc5_mstrain_3x_coco/faster_rcnn_r50_caffe_dc5_mstrain_3x_coco_20201028_002107.log.json) +| [R-50-FPN](./faster_rcnn_r50_caffe_fpn_mstrain_2x_coco.py) | caffe | 2x | 4.3 | | 39.7 |[config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_2x_coco/faster_rcnn_r50_caffe_fpn_mstrain_2x_coco_bbox_mAP-0.397_20200504_231813-10b2de58.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_2x_coco/faster_rcnn_r50_caffe_fpn_mstrain_2x_coco_20200504_231813.log.json) +| [R-50-FPN](./faster_rcnn_r50_caffe_fpn_mstrain_3x_coco.py) | caffe | 3x | 4.3 | | 40.2 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_bbox_mAP-0.398_20200504_163323-30042637.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20200504_163323.log.json) + +We further finetune some pre-trained models on the COCO subsets, which only contain only a few of the 80 categories. + +| Backbone | Style | Class name | Pre-traind model | Mem (GB) | box AP | Config | Download | +| ------------------------------------------------------------ | ----- | ------------------ | ------------------------------------------------------------ | -------- | ------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [R-50-FPN](./faster_rcnn_r50_caffe_fpn_mstrain_1x_coco-person.py) | caffe | person | [R-50-FPN-Caffe-3x](./faster_rcnn_r50_caffe_fpn_mstrain_3x_coco.py) | 3.7 | 55.8 | [config](./faster_rcnn_r50_caffe_fpn_mstrain_1x_coco-person.py) | [model](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco-person/faster_rcnn_r50_fpn_1x_coco-person_20201216_175929-d022e227.pth) | [log](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco-person/faster_rcnn_r50_fpn_1x_coco-person_20201216_175929.log.json) | +| [R-50-FPN](./faster_rcnn_r50_caffe_fpn_mstrain_1x_coco-person-bicycle-car.py) | caffe | person-bicycle-car | [R-50-FPN-Caffe-3x](./faster_rcnn_r50_caffe_fpn_mstrain_3x_coco.py) | 3.7 | 44.1 | [config](./faster_rcnn_r50_caffe_fpn_mstrain_1x_coco-person-bicycle-car.py) | [model](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco-person-bicycle-car/faster_rcnn_r50_fpn_1x_coco-person-bicycle-car_20201216_173117-6eda6d92.pth) | [log](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco-person-bicycle-car/faster_rcnn_r50_fpn_1x_coco-person-bicycle-car_20201216_173117.log.json) | diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_conformer_small_patch32_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_conformer_small_patch32_fpn_1x_coco.py new file mode 100644 index 00000000..5768401a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_conformer_small_patch32_fpn_1x_coco.py @@ -0,0 +1,189 @@ +_base_ = [ + '../_base_/default_runtime.py' +] + +model = dict( + type='FasterRCNN', + pretrained=None, + backbone=dict( + type='Conformer', + embed_dim=384, + depth=12, + patch_size=32, + channel_ratio=4, + num_heads=6, + mlp_ratio=4, + qkv_bias=True, + norm_eval=True, + frozen_stages=1 + ), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 1024], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=-1, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=False, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=1000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100) + # soft-nms is also supported for rcnn testing + # e.g., nms=dict(type='soft_nms', iou_threshold=0.5, min_score=0.05) + )) + +dataset_type = 'CocoDataset' +data_root = 'data/coco/' + +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='Resize', img_scale=(1344, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1344, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') + +# optimizer +optimizer = dict( + type='AdamW', + lr=0.0001, + weight_decay=0.0001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[8, 11]) +total_epochs = 12 + +# optimizer_config = dict(grad_clip=dict(max_norm=0.1, norm_type=2)) + +find_unused_parameters=True \ No newline at end of file diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py new file mode 100644 index 00000000..009bd93d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/faster_rcnn_r50_fpn.py', + '../_base_/datasets/coco_detection.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/README.md b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/README.md new file mode 100644 index 00000000..fd1dc5bc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/README.md @@ -0,0 +1,43 @@ +# Mask R-CNN + +## Introduction + +[ALGORITHM] + +```latex +@article{He_2017, + title={Mask R-CNN}, + journal={2017 IEEE International Conference on Computer Vision (ICCV)}, + publisher={IEEE}, + author={He, Kaiming and Gkioxari, Georgia and Dollar, Piotr and Girshick, Ross}, + year={2017}, + month={Oct} +} +``` + +## Results and models + +| Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | box AP | mask AP | Config | Download | +| :-------------: | :-----: | :-----: | :------: | :------------: | :----: | :-----: | :------: | :--------: | +| R-50-FPN | caffe | 1x | 4.3 | | 38.0 | 34.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco/mask_rcnn_r50_caffe_fpn_1x_coco_bbox_mAP-0.38__segm_mAP-0.344_20200504_231812-0ebd1859.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco/mask_rcnn_r50_caffe_fpn_1x_coco_20200504_231812.log.json) | +| R-50-FPN | pytorch | 1x | 4.4 | 16.1 | 38.2 | 34.7 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205_050542.log.json) | +| R-50-FPN | pytorch | 2x | - | - | 39.2 | 35.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_2x_coco/mask_rcnn_r50_fpn_2x_coco_bbox_mAP-0.392__segm_mAP-0.354_20200505_003907-3e542a40.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_2x_coco/mask_rcnn_r50_fpn_2x_coco_20200505_003907.log.json) | +| R-101-FPN | caffe | 1x | | | 40.4 | 36.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco/mask_rcnn_r101_caffe_fpn_1x_coco_20200601_095758-805e06c1.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco/mask_rcnn_r101_caffe_fpn_1x_coco_20200601_095758.log.json)| +| R-101-FPN | pytorch | 1x | 6.4 | 13.5 | 40.0 | 36.1 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_fpn_1x_coco/mask_rcnn_r101_fpn_1x_coco_20200204-1efe0ed5.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_fpn_1x_coco/mask_rcnn_r101_fpn_1x_coco_20200204_144809.log.json) | +| R-101-FPN | pytorch | 2x | - | - | 40.8 | 36.6 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_fpn_2x_coco/mask_rcnn_r101_fpn_2x_coco_bbox_mAP-0.408__segm_mAP-0.366_20200505_071027-14b391c7.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_fpn_2x_coco/mask_rcnn_r101_fpn_2x_coco_20200505_071027.log.json) | +| X-101-32x4d-FPN | pytorch | 1x | 7.6 | 11.3 | 41.9 | 37.5 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco/mask_rcnn_x101_32x4d_fpn_1x_coco_20200205-478d0b67.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco/mask_rcnn_x101_32x4d_fpn_1x_coco_20200205_034906.log.json) | +| X-101-32x4d-FPN | pytorch | 2x | - | - | 42.2 | 37.8 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco/mask_rcnn_x101_32x4d_fpn_2x_coco_bbox_mAP-0.422__segm_mAP-0.378_20200506_004702-faef898c.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco/mask_rcnn_x101_32x4d_fpn_2x_coco_20200506_004702.log.json) | +| X-101-64x4d-FPN | pytorch | 1x | 10.7 | 8.0 | 42.8 | 38.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco/mask_rcnn_x101_64x4d_fpn_1x_coco_20200201-9352eb0d.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco/mask_rcnn_x101_64x4d_fpn_1x_coco_20200201_124310.log.json) | +| X-101-64x4d-FPN | pytorch | 2x | - | - | 42.7 | 38.1 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco/mask_rcnn_x101_64x4d_fpn_2x_coco_20200509_224208-39d6f70c.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco/mask_rcnn_x101_64x4d_fpn_2x_coco_20200509_224208.log.json)| +| X-101-32x8d-FPN | pytorch | 1x | - | - | 42.8 | 38.3 | | + +## Pre-trained Models + +We also train some models with longer schedules and multi-scale training. The users could finetune them for downstream tasks. + +| Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | box AP | mask AP | Config | Download | +| :-------------: | :-----: | :-----: | :------: | :------------: | :----: | :-----: | :------: | :--------: | +| [R-50-FPN](./mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py) | caffe | 2x | 4.3 | | 40.3 | 36.5 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco_bbox_mAP-0.403__segm_mAP-0.365_20200504_231822-a75c98ce.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco_20200504_231822.log.json) +| [R-50-FPN](./mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py) | caffe | 3x | 4.3 | | 40.8 | 37.0 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_20200504_163245.log.json) +| [X-101-32x8d-FPN](./mask_rcnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py) | pytorch | 1x | - | | 43.6 | 39.0 | +| [X-101-32x8d-FPN](./mask_rcnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py) | pytorch | 3x | - | | 44.0 | 39.3 | diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_conformer_small_patch32_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_conformer_small_patch32_fpn_1x_coco.py new file mode 100644 index 00000000..29b629ce --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_conformer_small_patch32_fpn_1x_coco.py @@ -0,0 +1,201 @@ +_base_ = [ + '../_base_/default_runtime.py' +] + +# model settings +model = dict( + type='MaskRCNN', + pretrained=None, + backbone=dict( + type='Conformer', + embed_dim=384, + depth=12, + patch_size=32, + channel_ratio=4, + num_heads=6, + mlp_ratio=4, + qkv_bias=True, + norm_eval=True, + frozen_stages=1 + ), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 1024], + out_channels=256, + num_outs=5), + rpn_head=dict( + type='RPNHead', + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0]), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + roi_head=dict( + type='StandardRoIHead', + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)), + mask_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=14, sampling_ratio=0), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + mask_head=dict( + type='FCNMaskHead', + num_convs=4, + in_channels=256, + conv_out_channels=256, + num_classes=80, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))), + # model training and testing settings + train_cfg=dict( + rpn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=-1, + pos_weight=-1, + debug=False), + rpn_proposal=dict( + nms_across_levels=False, + nms_pre=2000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True), + mask_size=28, + pos_weight=-1, + debug=False)), + test_cfg=dict( + rpn=dict( + nms_across_levels=False, + nms_pre=1000, + nms_post=1000, + max_num=1000, + nms_thr=0.7, + min_bbox_size=0), + rcnn=dict( + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.5), + max_per_img=100, + mask_thr_binary=0.5))) + + +dataset_type = 'CocoDataset' +data_root = 'data/coco/' + +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict(type='Resize', img_scale=(1344, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1344, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) +evaluation = dict(metric=['bbox', 'segm']) + +# optimizer +optimizer = dict( + type='AdamW', + lr=0.0001, + weight_decay=0.0001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[8, 11]) +total_epochs = 12 + +# optimizer_config = dict(grad_clip=dict(max_norm=0.1, norm_type=2)) \ No newline at end of file diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py new file mode 100644 index 00000000..230181cb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_caffe_fpn_1x_coco.py @@ -0,0 +1,4 @@ +_base_ = './mask_rcnn_r50_caffe_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnet101_caffe', + backbone=dict(depth=101)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py new file mode 100644 index 00000000..db02d9b8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_1x_coco.py @@ -0,0 +1,2 @@ +_base_ = './mask_rcnn_r50_fpn_1x_coco.py' +model = dict(pretrained='torchvision://resnet101', backbone=dict(depth=101)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py new file mode 100644 index 00000000..c8cb2d87 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r101_fpn_2x_coco.py @@ -0,0 +1,2 @@ +_base_ = './mask_rcnn_r50_fpn_2x_coco.py' +model = dict(pretrained='torchvision://resnet101', backbone=dict(depth=101)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py new file mode 100644 index 00000000..a44c0183 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_c4_1x_coco.py @@ -0,0 +1,39 @@ +_base_ = [ + '../_base_/models/mask_rcnn_r50_caffe_c4.py', + '../_base_/datasets/coco_instance.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] +# use caffe img_norm +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py new file mode 100644 index 00000000..0471fe86 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_1x_coco.py @@ -0,0 +1,36 @@ +_base_ = './mask_rcnn_r50_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict(norm_cfg=dict(requires_grad=False), style='caffe')) +# use caffe img_norm +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py new file mode 100644 index 00000000..5d6215d6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py @@ -0,0 +1,45 @@ +_base_ = './mask_rcnn_r50_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict(norm_cfg=dict(requires_grad=False), style='caffe')) +# use caffe img_norm +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict( + type='Resize', + img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + multiscale_mode='value', + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py new file mode 100644 index 00000000..374b8644 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_2x_coco.py @@ -0,0 +1,4 @@ +_base_ = './mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py' +# learning policy +lr_config = dict(step=[16, 23]) +total_epochs = 24 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py new file mode 100644 index 00000000..44f7e039 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py @@ -0,0 +1,4 @@ +_base_ = './mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py' +# learning policy +lr_config = dict(step=[28, 34]) +total_epochs = 36 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain_1x_coco.py new file mode 100644 index 00000000..86c5b133 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain_1x_coco.py @@ -0,0 +1,41 @@ +_base_ = './mask_rcnn_r50_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnet50_caffe', + backbone=dict(norm_cfg=dict(requires_grad=False), style='caffe')) +# use caffe img_norm +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='Resize', + img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + multiscale_mode='value', + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py new file mode 100644 index 00000000..431e5ab3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py @@ -0,0 +1,57 @@ +_base_ = './mask_rcnn_r50_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://resnet50_caffe_bgr', + backbone=dict(norm_cfg=dict(requires_grad=False), style='caffe'), + rpn_head=dict( + loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), + roi_head=dict( + bbox_roi_extractor=dict( + roi_layer=dict( + type='RoIAlign', + output_size=7, + sampling_ratio=2, + aligned=False)), + bbox_head=dict( + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), + mask_roi_extractor=dict( + roi_layer=dict( + type='RoIAlign', + output_size=14, + sampling_ratio=2, + aligned=False)))) +# use caffe img_norm +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py new file mode 100644 index 00000000..6a6c9246 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/mask_rcnn_r50_fpn.py', + '../_base_/datasets/coco_instance.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py new file mode 100644 index 00000000..932b1f90 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_2x_coco.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/mask_rcnn_r50_fpn.py', + '../_base_/datasets/coco_instance.py', + '../_base_/schedules/schedule_2x.py', '../_base_/default_runtime.py' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py new file mode 100644 index 00000000..9eb6d57e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_r50_fpn_poly_1x_coco.py @@ -0,0 +1,23 @@ +_base_ = [ + '../_base_/models/mask_rcnn_r50_fpn.py', + '../_base_/datasets/coco_instance.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] + +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +data = dict(train=dict(pipeline=train_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py new file mode 100644 index 00000000..d0016d1f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_1x_coco.py @@ -0,0 +1,13 @@ +_base_ = './mask_rcnn_r101_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://resnext101_32x4d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=32, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + style='pytorch')) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py new file mode 100644 index 00000000..d4189c6f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x4d_fpn_2x_coco.py @@ -0,0 +1,13 @@ +_base_ = './mask_rcnn_r101_fpn_2x_coco.py' +model = dict( + pretrained='open-mmlab://resnext101_32x4d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=32, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + style='pytorch')) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py new file mode 100644 index 00000000..ee034b71 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_1x_coco.py @@ -0,0 +1,63 @@ +_base_ = './mask_rcnn_r101_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnext101_32x8d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=32, + base_width=8, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + style='pytorch')) + +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], + std=[57.375, 57.120, 58.395], + to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco.py new file mode 100644 index 00000000..1c124328 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco.py @@ -0,0 +1,58 @@ +_base_ = './mask_rcnn_r101_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnext101_32x8d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=32, + base_width=8, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + style='pytorch')) + +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], + std=[57.375, 57.120, 58.395], + to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict( + type='Resize', + img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + multiscale_mode='value', + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py new file mode 100644 index 00000000..f326441d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_32x8d_fpn_mstrain-poly_3x_coco.py @@ -0,0 +1,61 @@ +_base_ = './mask_rcnn_r101_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://detectron2/resnext101_32x8d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=32, + base_width=8, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=False), + style='pytorch')) + +dataset_type = 'CocoDataset' +data_root = 'data/coco/' +img_norm_cfg = dict( + mean=[103.530, 116.280, 123.675], + std=[57.375, 57.120, 58.395], + to_rgb=False) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict( + type='Resize', + img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + multiscale_mode='value', + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) + +lr_config = dict(step=[28, 34]) +total_epochs = 36 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco.py new file mode 100644 index 00000000..31e59432 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco.py @@ -0,0 +1,13 @@ +_base_ = './mask_rcnn_x101_32x4d_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://resnext101_64x4d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=64, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + style='pytorch')) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py new file mode 100644 index 00000000..9ba92c5b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/mask_rcnn/mask_rcnn_x101_64x4d_fpn_2x_coco.py @@ -0,0 +1,13 @@ +_base_ = './mask_rcnn_x101_32x4d_fpn_2x_coco.py' +model = dict( + pretrained='open-mmlab://resnext101_64x4d', + backbone=dict( + type='ResNeXt', + depth=101, + groups=64, + base_width=4, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + style='pytorch')) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/README.md b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/README.md new file mode 100644 index 00000000..df974ce7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/README.md @@ -0,0 +1,24 @@ +# Probabilistic Anchor Assignment with IoU Prediction for Object Detection + +[ALGORITHM] + +## Results and Models + +We provide config files to reproduce the object detection results in the +ECCV 2020 paper for Probabilistic Anchor Assignment with IoU +Prediction for Object Detection. + +| Backbone | Lr schd | Mem (GB) | Score voting | box AP | Config | Download | +|:-----------:|:-------:|:--------:|:------------:|:------:|:------:|:--------:| +| R-50-FPN | 12e | 3.7 | True | 40.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/paa/paa_r50_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r50_fpn_1x_coco/paa_r50_fpn_1x_coco_20200821-936edec3.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r50_fpn_1x_coco/paa_r50_fpn_1x_coco_20200821-936edec3.log.json) | +| R-50-FPN | 12e | 3.7 | False | 40.2 | - | +| R-50-FPN | 18e | 3.7 | True | 41.4 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/paa/paa_r50_fpn_1.5x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r50_fpn_1.5x_coco/paa_r50_fpn_1.5x_coco_20200823-805d6078.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r50_fpn_1.5x_coco/paa_r50_fpn_1.5x_coco_20200823-805d6078.log.json) | +| R-50-FPN | 18e | 3.7 | False | 41.2 | - | +| R-50-FPN | 24e | 3.7 | True | 41.6 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/paa/paa_r50_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r50_fpn_2x_coco/paa_r50_fpn_2x_coco_20200821-c98bfc4e.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r50_fpn_2x_coco/paa_r50_fpn_2x_coco_20200821-c98bfc4e.log.json) | +| R-101-FPN | 12e | 6.2 | True | 42.6 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/paa/paa_r101_fpn_1x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r101_fpn_1x_coco/paa_r101_fpn_1x_coco_20200821-0a1825a4.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r101_fpn_1x_coco/paa_r101_fpn_1x_coco_20200821-0a1825a4.log.json) | +| R-101-FPN | 12e | 6.2 | False | 42.4 | - | +| R-101-FPN | 24e | 6.2 | True | 43.5 | [config](https://github.com/open-mmlab/mmdetection/tree/master/configs/paa/paa_r101_fpn_2x_coco.py) | [model](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r101_fpn_2x_coco/paa_r101_fpn_2x_coco_20200821-6829f96b.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/paa/paa_r101_fpn_2x_coco/paa_r101_fpn_2x_coco_20200821-6829f96b.log.json) | + +**Note**: + +1. We find that the performance is unstable with 1x setting and may fluctuate by about 0.2 mAP. We report the best results. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_conformer_small_patch32_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_conformer_small_patch32_fpn_1x_coco.py new file mode 100644 index 00000000..bb5a745b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_conformer_small_patch32_fpn_1x_coco.py @@ -0,0 +1,142 @@ +_base_ = [ + '../_base_/default_runtime.py' +] +model = dict( + type='PAA', + pretrained=None, + backbone=dict( + type='Conformer', + embed_dim=384, + depth=12, + patch_size=32, + channel_ratio=4, + num_heads=6, + mlp_ratio=4, + qkv_bias=True, + norm_eval=True, + frozen_stages=1 + ), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 1024], + out_channels=256, + start_level=1, + add_extra_convs='on_output', + num_outs=5), + bbox_head=dict( + type='PAAHead', + reg_decoded_bbox=True, + score_voting=True, + topk=9, + num_classes=80, + in_channels=256, + stacked_convs=4, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + octave_base_scale=8, + scales_per_octave=1, + strides=[8, 16, 32, 64, 128]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[0.1, 0.1, 0.2, 0.2]), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='GIoULoss', loss_weight=1.3), + loss_centerness=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=0.5)), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.1, + neg_iou_thr=0.1, + min_pos_iou=0, + ignore_iof_thr=-1), + allowed_border=-1, + pos_weight=-1, + debug=False), + test_cfg=dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=100)) + + +dataset_type = 'CocoDataset' +data_root = 'data/coco/' + +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='Resize', img_scale=(1344, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1344, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_train2017.json', + img_prefix=data_root + 'train2017/', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + ann_file=data_root + 'annotations/instances_val2017.json', + img_prefix=data_root + 'val2017/', + pipeline=test_pipeline)) +evaluation = dict(interval=1, metric='bbox') + +# optimizer +optimizer = dict( + type='AdamW', + lr=0.0001, + weight_decay=0.0001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[8, 11]) +total_epochs = 12 + +# optimizer_config = dict(grad_clip=dict(max_norm=0.1, norm_type=2)) + +find_unused_parameters=True diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_1x_coco.py new file mode 100644 index 00000000..a64a012d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_1x_coco.py @@ -0,0 +1,4 @@ +_base_ = './paa_r50_fpn_1x_coco.py' +model = dict(pretrained='torchvision://resnet101', backbone=dict(depth=101)) +lr_config = dict(step=[16, 22]) +total_epochs = 24 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_2x_coco.py new file mode 100644 index 00000000..a3bc60f9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r101_fpn_2x_coco.py @@ -0,0 +1,3 @@ +_base_ = './paa_r101_fpn_1x_coco.py' +lr_config = dict(step=[16, 22]) +total_epochs = 24 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1.5x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1.5x_coco.py new file mode 100644 index 00000000..7de45783 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1.5x_coco.py @@ -0,0 +1,3 @@ +_base_ = './paa_r50_fpn_1x_coco.py' +lr_config = dict(step=[12, 16]) +total_epochs = 18 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1x_coco.py new file mode 100644 index 00000000..cd844108 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_1x_coco.py @@ -0,0 +1,70 @@ +_base_ = [ + '../_base_/datasets/coco_detection.py', + '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' +] +model = dict( + type='PAA', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict( + type='FPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + start_level=1, + add_extra_convs='on_output', + num_outs=5), + bbox_head=dict( + type='PAAHead', + reg_decoded_bbox=True, + score_voting=True, + topk=9, + num_classes=80, + in_channels=256, + stacked_convs=4, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + octave_base_scale=8, + scales_per_octave=1, + strides=[8, 16, 32, 64, 128]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[0.1, 0.1, 0.2, 0.2]), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='GIoULoss', loss_weight=1.3), + loss_centerness=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=0.5)), + # training and testing settings + train_cfg=dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.1, + neg_iou_thr=0.1, + min_pos_iou=0, + ignore_iof_thr=-1), + allowed_border=-1, + pos_weight=-1, + debug=False), + test_cfg=dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=100)) +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_2x_coco.py b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_2x_coco.py new file mode 100644 index 00000000..529f0743 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/configs/paa/paa_r50_fpn_2x_coco.py @@ -0,0 +1,3 @@ +_base_ = './paa_r50_fpn_1x_coco.py' +lr_config = dict(step=[16, 22]) +total_epochs = 24 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/demo/MMDet_Tutorial.ipynb b/PyTorch/NLP/Conformer-main/mmdetection/demo/MMDet_Tutorial.ipynb new file mode 100644 index 00000000..c94748c6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/demo/MMDet_Tutorial.ipynb @@ -0,0 +1,1604 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "MMDet Tutorial.ipynb", + "provenance": [], + "collapsed_sections": [], + "toc_visible": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "270b5681a3294ef49c034189468fd36a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_7f0c0b0195e44c208544d2556e866997", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_fed604d9763f4fcc8b640b28ab10ca50", + "IPY_MODEL_620febe332464c0183030c285738c8c8" + ] + } + }, + "7f0c0b0195e44c208544d2556e866997": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "fed604d9763f4fcc8b640b28ab10ca50": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_127050aef12f47aa86f8cd85c25a22e6", + "_dom_classes": [], + "description": "100%", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 94284731, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 94284731, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_9fdf59eab9074902a357b14e15b0238c" + } + }, + "620febe332464c0183030c285738c8c8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_a47a8658f18b42698a205b684694e5df", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 89.9M/89.9M [01:03<00:00, 1.48MB/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_06c0bb6dfc7f4d0cb98d2a36a77be41b" + } + }, + "127050aef12f47aa86f8cd85c25a22e6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "initial", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "9fdf59eab9074902a357b14e15b0238c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "a47a8658f18b42698a205b684694e5df": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "06c0bb6dfc7f4d0cb98d2a36a77be41b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + } + } + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "aGYwt_UjIrqp" + }, + "source": [ + "# MMDetection Tutorial\n", + "\n", + "Welcome to MMDetection! This is the official colab tutorial for using MMDetection. In this tutorial, you will learn\n", + "- Perform inference with a MMDet detector.\n", + "- Train a new detector with a new dataset.\n", + "\n", + "Let's start!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tJxJHruNLb7Y" + }, + "source": [ + "## Install MMDetection" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Wi4LPmsR66sy", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "feb3f8b8-421a-4535-d7ce-5771c3f3e8ac" + }, + "source": [ + "# Check nvcc version\n", + "!nvcc -V\n", + "# Check GCC version\n", + "!gcc --version" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "text": [ + "nvcc: NVIDIA (R) Cuda compiler driver\n", + "Copyright (c) 2005-2019 NVIDIA Corporation\n", + "Built on Sun_Jul_28_19:07:16_PDT_2019\n", + "Cuda compilation tools, release 10.1, V10.1.243\n", + "gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0\n", + "Copyright (C) 2017 Free Software Foundation, Inc.\n", + "This is free software; see the source for copying conditions. There is NO\n", + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "gkGnB9WyHSXB", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "ad0f10a0-5ee7-490c-8f6a-181f3697669a" + }, + "source": [ + "# install dependencies: (use cu101 because colab has CUDA 10.1)\n", + "!pip install -U torch==1.5.1+cu101 torchvision==0.6.1+cu101 -f https://download.pytorch.org/whl/torch_stable.html\n", + "\n", + "# install mmcv-full thus we could use CUDA operators\n", + "!pip install mmcv-full\n", + "\n", + "# Install mmdetection\n", + "!rm -rf mmdetection\n", + "!git clone https://github.com/open-mmlab/mmdetection.git\n", + "%cd mmdetection\n", + "\n", + "!pip install -e .\n", + "\n", + "# install Pillow 7.0.0 back in order to avoid bug in colab\n", + "!pip install Pillow==7.0.0" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Looking in links: https://download.pytorch.org/whl/torch_stable.html\n", + "Collecting torch==1.5.1+cu101\n", + "\u001b[?25l Downloading https://download.pytorch.org/whl/cu101/torch-1.5.1%2Bcu101-cp36-cp36m-linux_x86_64.whl (704.4MB)\n", + "\u001b[K |████████████████████████████████| 704.4MB 26kB/s \n", + "\u001b[?25hCollecting torchvision==0.6.1+cu101\n", + "\u001b[?25l Downloading https://download.pytorch.org/whl/cu101/torchvision-0.6.1%2Bcu101-cp36-cp36m-linux_x86_64.whl (6.6MB)\n", + "\u001b[K |████████████████████████████████| 6.6MB 67.1MB/s \n", + "\u001b[?25hRequirement already satisfied, skipping upgrade: numpy in /usr/local/lib/python3.6/dist-packages (from torch==1.5.1+cu101) (1.19.4)\n", + "Requirement already satisfied, skipping upgrade: future in /usr/local/lib/python3.6/dist-packages (from torch==1.5.1+cu101) (0.16.0)\n", + "Requirement already satisfied, skipping upgrade: pillow>=4.1.1 in /usr/local/lib/python3.6/dist-packages (from torchvision==0.6.1+cu101) (7.0.0)\n", + "Installing collected packages: torch, torchvision\n", + " Found existing installation: torch 1.7.0+cu101\n", + " Uninstalling torch-1.7.0+cu101:\n", + " Successfully uninstalled torch-1.7.0+cu101\n", + " Found existing installation: torchvision 0.8.1+cu101\n", + " Uninstalling torchvision-0.8.1+cu101:\n", + " Successfully uninstalled torchvision-0.8.1+cu101\n", + "Successfully installed torch-1.5.1+cu101 torchvision-0.6.1+cu101\n", + "Collecting mmcv-full\n", + " Using cached https://files.pythonhosted.org/packages/19/b0/8598b2ed3d44d2d977f8c126b39d88acdcd37cf574d946f62d894fbac141/mmcv-full-1.2.4.tar.gz\n", + "Collecting addict\n", + " Downloading https://files.pythonhosted.org/packages/6a/00/b08f23b7d7e1e14ce01419a467b583edbb93c6cdb8654e54a9cc579cd61f/addict-2.4.0-py3-none-any.whl\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from mmcv-full) (1.19.4)\n", + "Requirement already satisfied: Pillow in /usr/local/lib/python3.6/dist-packages (from mmcv-full) (7.0.0)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.6/dist-packages (from mmcv-full) (3.13)\n", + "Collecting yapf\n", + "\u001b[?25l Downloading https://files.pythonhosted.org/packages/c1/5d/d84677fe852bc5e091739acda444a9b6700ffc6b11a21b00dd244c8caef0/yapf-0.30.0-py2.py3-none-any.whl (190kB)\n", + "\u001b[K |████████████████████████████████| 194kB 13.5MB/s \n", + "\u001b[?25hBuilding wheels for collected packages: mmcv-full\n", + " Building wheel for mmcv-full (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for mmcv-full: filename=mmcv_full-1.2.4-cp36-cp36m-linux_x86_64.whl size=20200392 sha256=a70169ee930afc4ec6159e0837c972baffc8972caca583f6ffaf104b361543c8\n", + " Stored in directory: /root/.cache/pip/wheels/dd/48/39/f64327bc1602fd0235b54b5a0f18e86bcc183ff2460c76376a\n", + "Successfully built mmcv-full\n", + "Installing collected packages: addict, yapf, mmcv-full\n", + "Successfully installed addict-2.4.0 mmcv-full-1.2.4 yapf-0.30.0\n", + "Cloning into 'mmdetection'...\n", + "remote: Enumerating objects: 21, done.\u001b[K\n", + "remote: Counting objects: 100% (21/21), done.\u001b[K\n", + "remote: Compressing objects: 100% (20/20), done.\u001b[K\n", + "remote: Total 14888 (delta 6), reused 3 (delta 1), pack-reused 14867\u001b[K\n", + "Receiving objects: 100% (14888/14888), 14.34 MiB | 31.38 MiB/s, done.\n", + "Resolving deltas: 100% (10172/10172), done.\n", + "/content/mmdetection\n", + "Obtaining file:///content/mmdetection\n", + "Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from mmdet==2.7.0) (3.2.2)\n", + "Collecting mmpycocotools\n", + " Using cached https://files.pythonhosted.org/packages/99/51/1bc1d79f296347eeb2d1a2e0606885ab1e4682833bf275fd39c189952e26/mmpycocotools-12.0.3.tar.gz\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from mmdet==2.7.0) (1.19.4)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from mmdet==2.7.0) (1.15.0)\n", + "Collecting terminaltables\n", + " Using cached https://files.pythonhosted.org/packages/9b/c4/4a21174f32f8a7e1104798c445dacdc1d4df86f2f26722767034e4de4bff/terminaltables-3.1.0.tar.gz\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mmdet==2.7.0) (0.10.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mmdet==2.7.0) (2.4.7)\n", + "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mmdet==2.7.0) (2.8.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->mmdet==2.7.0) (1.3.1)\n", + "Requirement already satisfied: setuptools>=18.0 in /usr/local/lib/python3.6/dist-packages (from mmpycocotools->mmdet==2.7.0) (51.0.0)\n", + "Requirement already satisfied: cython>=0.27.3 in /usr/local/lib/python3.6/dist-packages (from mmpycocotools->mmdet==2.7.0) (0.29.21)\n", + "Building wheels for collected packages: mmpycocotools, terminaltables\n", + " Building wheel for mmpycocotools (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for mmpycocotools: filename=mmpycocotools-12.0.3-cp36-cp36m-linux_x86_64.whl size=265909 sha256=f23454e7c7191cc33c38b4624101902a15b8a4a253fd8a1b93cb49a6680e46ee\n", + " Stored in directory: /root/.cache/pip/wheels/a2/b0/8d/3307912785a42bc80f673946fac676d5c596eee537af7a599c\n", + " Building wheel for terminaltables (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for terminaltables: filename=terminaltables-3.1.0-cp36-none-any.whl size=15358 sha256=ae589ca7e2072acef95341b0747618fd61ff796bf924e98acceee9560cd13ee8\n", + " Stored in directory: /root/.cache/pip/wheels/30/6b/50/6c75775b681fb36cdfac7f19799888ef9d8813aff9e379663e\n", + "Successfully built mmpycocotools terminaltables\n", + "Installing collected packages: mmpycocotools, terminaltables, mmdet\n", + " Running setup.py develop for mmdet\n", + "Successfully installed mmdet mmpycocotools-12.0.3 terminaltables-3.1.0\n", + "Requirement already satisfied: Pillow==7.0.0 in /usr/local/lib/python3.6/dist-packages (7.0.0)\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "6hD0mmMixT0p", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "2aa8ca3c-452f-4576-9a4c-d34ea8ad3d21" + }, + "source": [ + "# Check Pytorch installation\n", + "import torch, torchvision\n", + "print(torch.__version__, torch.cuda.is_available())\n", + "\n", + "# Check MMDetection installation\n", + "import mmdet\n", + "print(mmdet.__version__)\n", + "\n", + "# Check mmcv installation\n", + "from mmcv.ops import get_compiling_cuda_version, get_compiler_version\n", + "print(get_compiling_cuda_version())\n", + "print(get_compiler_version())" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "1.5.1+cu101 True\n", + "2.7.0\n", + "10.1\n", + "GCC 7.5\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gi9zw03oM4CH" + }, + "source": [ + "## Perform inference with a MMDet detector\n", + "MMDetection already provides high level APIs to do inference and training." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "j4doHX4exvS1", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "74abfe9a-fb8d-4c90-a8ba-0d84c16d4fed" + }, + "source": [ + "!mkdir checkpoints\n", + "!wget -c http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth \\\n", + " -O checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "text": [ + "--2020-12-29 07:17:29-- http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n", + "Resolving download.openmmlab.com (download.openmmlab.com)... 47.252.96.35\n", + "Connecting to download.openmmlab.com (download.openmmlab.com)|47.252.96.35|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 177867103 (170M) [application/octet-stream]\n", + "Saving to: ‘checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth’\n", + "\n", + "checkpoints/mask_rc 100%[===================>] 169.63M 8.91MB/s in 20s \n", + "\n", + "2020-12-29 07:17:50 (8.54 MB/s) - ‘checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth’ saved [177867103/177867103]\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8M5KUnX7Np3h" + }, + "source": [ + "from mmdet.apis import inference_detector, init_detector, show_result_pyplot\n", + "\n", + "# Choose to use a config and initialize the detector\n", + "config = 'configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py'\n", + "# Setup a checkpoint file to load\n", + "checkpoint = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", + "# initialize the detector\n", + "model = init_detector(config, checkpoint, device='cuda:0')" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Wi6DRpsQPEmV" + }, + "source": [ + "# Use the detector to do inference\n", + "img = 'demo/demo.jpg'\n", + "result = inference_detector(model, img)" + ], + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "UsJU5D-QPX8L", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 729 + }, + "outputId": "493acdd8-fba3-4c5a-a4a4-c4825f0b172d" + }, + "source": [ + "# Let's plot the result\n", + "show_result_pyplot(model, img, result, score_thr=0.3)" + ], + "execution_count": 7, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "

" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7GrWIJywLV-V" + }, + "source": [ + "## Train a detector on customized dataset\n", + "\n", + "To train a new detector, there are usually three things to do:\n", + "1. Support a new dataset\n", + "2. Modify the config\n", + "3. Train a new detector\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E73y5Lru-wBx" + }, + "source": [ + "### Support a new dataset\n", + "\n", + "There are three ways to support a new dataset in MMDetection: \n", + " 1. reorganize the dataset into COCO format.\n", + " 2. reorganize the dataset into a middle format.\n", + " 3. implement a new dataset.\n", + "\n", + "Usually we recommend to use the first two methods which are usually easier than the third.\n", + "\n", + "In this tutorial, we gives an example that converting the data into the format of existing datasets like COCO, VOC, etc. Other methods and more advanced usages can be found in the [doc](https://mmdetection.readthedocs.io/en/latest/tutorials/new_dataset.html#).\n", + "\n", + "Firstly, let's download a tiny dataset obtained from [KITTI](http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d). We select the first 75 images and their annotations from the 3D object detection dataset (it is the same dataset as the 2D object detection dataset but has 3D annotations). We convert the original images from PNG to JPEG format with 80% quality to reduce the size of dataset." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "rHnw5Q_nARXq", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "12eaf9e5-9415-4c1b-8210-4408b0386a25" + }, + "source": [ + "# download, decompress the data\n", + "!wget https://download.openmmlab.com/mmdetection/data/kitti_tiny.zip\n", + "!unzip kitti_tiny.zip > /dev/null" + ], + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "text": [ + "--2020-12-29 07:18:31-- https://download.openmmlab.com/mmdetection/data/kitti_tiny.zip\n", + "Resolving download.openmmlab.com (download.openmmlab.com)... 47.252.96.35\n", + "Connecting to download.openmmlab.com (download.openmmlab.com)|47.252.96.35|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 6918271 (6.6M) [application/zip]\n", + "Saving to: ‘kitti_tiny.zip’\n", + "\n", + "kitti_tiny.zip 100%[===================>] 6.60M 3.17MB/s in 2.1s \n", + "\n", + "2020-12-29 07:18:34 (3.17 MB/s) - ‘kitti_tiny.zip’ saved [6918271/6918271]\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Wuwxw1oZRtVZ", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "02bb73dc-c2e3-49a1-c1d4-6abe113fb97f" + }, + "source": [ + "# Check the directory structure of the tiny data\n", + "\n", + "# Install tree first\n", + "!apt-get -q install tree\n", + "!tree kitti_tiny" + ], + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Reading package lists...\n", + "Building dependency tree...\n", + "Reading state information...\n", + "The following NEW packages will be installed:\n", + " tree\n", + "0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.\n", + "Need to get 40.7 kB of archives.\n", + "After this operation, 105 kB of additional disk space will be used.\n", + "Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 tree amd64 1.7.0-5 [40.7 kB]\n", + "Fetched 40.7 kB in 0s (153 kB/s)\n", + "Selecting previously unselected package tree.\n", + "(Reading database ... 145480 files and directories currently installed.)\n", + "Preparing to unpack .../tree_1.7.0-5_amd64.deb ...\n", + "Unpacking tree (1.7.0-5) ...\n", + "Setting up tree (1.7.0-5) ...\n", + "Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n", + "kitti_tiny\n", + "├── training\n", + "│   ├── image_2\n", + "│   │   ├── 000000.jpeg\n", + "│   │   ├── 000001.jpeg\n", + "│   │   ├── 000002.jpeg\n", + "│   │   ├── 000003.jpeg\n", + "│   │   ├── 000004.jpeg\n", + "│   │   ├── 000005.jpeg\n", + "│   │   ├── 000006.jpeg\n", + "│   │   ├── 000007.jpeg\n", + "│   │   ├── 000008.jpeg\n", + "│   │   ├── 000009.jpeg\n", + "│   │   ├── 000010.jpeg\n", + "│   │   ├── 000011.jpeg\n", + "│   │   ├── 000012.jpeg\n", + "│   │   ├── 000013.jpeg\n", + "│   │   ├── 000014.jpeg\n", + "│   │   ├── 000015.jpeg\n", + "│   │   ├── 000016.jpeg\n", + "│   │   ├── 000017.jpeg\n", + "│   │   ├── 000018.jpeg\n", + "│   │   ├── 000019.jpeg\n", + "│   │   ├── 000020.jpeg\n", + "│   │   ├── 000021.jpeg\n", + "│   │   ├── 000022.jpeg\n", + "│   │   ├── 000023.jpeg\n", + "│   │   ├── 000024.jpeg\n", + "│   │   ├── 000025.jpeg\n", + "│   │   ├── 000026.jpeg\n", + "│   │   ├── 000027.jpeg\n", + "│   │   ├── 000028.jpeg\n", + "│   │   ├── 000029.jpeg\n", + "│   │   ├── 000030.jpeg\n", + "│   │   ├── 000031.jpeg\n", + "│   │   ├── 000032.jpeg\n", + "│   │   ├── 000033.jpeg\n", + "│   │   ├── 000034.jpeg\n", + "│   │   ├── 000035.jpeg\n", + "│   │   ├── 000036.jpeg\n", + "│   │   ├── 000037.jpeg\n", + "│   │   ├── 000038.jpeg\n", + "│   │   ├── 000039.jpeg\n", + "│   │   ├── 000040.jpeg\n", + "│   │   ├── 000041.jpeg\n", + "│   │   ├── 000042.jpeg\n", + "│   │   ├── 000043.jpeg\n", + "│   │   ├── 000044.jpeg\n", + "│   │   ├── 000045.jpeg\n", + "│   │   ├── 000046.jpeg\n", + "│   │   ├── 000047.jpeg\n", + "│   │   ├── 000048.jpeg\n", + "│   │   ├── 000049.jpeg\n", + "│   │   ├── 000050.jpeg\n", + "│   │   ├── 000051.jpeg\n", + "│   │   ├── 000052.jpeg\n", + "│   │   ├── 000053.jpeg\n", + "│   │   ├── 000054.jpeg\n", + "│   │   ├── 000055.jpeg\n", + "│   │   ├── 000056.jpeg\n", + "│   │   ├── 000057.jpeg\n", + "│   │   ├── 000058.jpeg\n", + "│   │   ├── 000059.jpeg\n", + "│   │   ├── 000060.jpeg\n", + "│   │   ├── 000061.jpeg\n", + "│   │   ├── 000062.jpeg\n", + "│   │   ├── 000063.jpeg\n", + "│   │   ├── 000064.jpeg\n", + "│   │   ├── 000065.jpeg\n", + "│   │   ├── 000066.jpeg\n", + "│   │   ├── 000067.jpeg\n", + "│   │   ├── 000068.jpeg\n", + "│   │   ├── 000069.jpeg\n", + "│   │   ├── 000070.jpeg\n", + "│   │   ├── 000071.jpeg\n", + "│   │   ├── 000072.jpeg\n", + "│   │   ├── 000073.jpeg\n", + "│   │   └── 000074.jpeg\n", + "│   └── label_2\n", + "│   ├── 000000.txt\n", + "│   ├── 000001.txt\n", + "│   ├── 000002.txt\n", + "│   ├── 000003.txt\n", + "│   ├── 000004.txt\n", + "│   ├── 000005.txt\n", + "│   ├── 000006.txt\n", + "│   ├── 000007.txt\n", + "│   ├── 000008.txt\n", + "│   ├── 000009.txt\n", + "│   ├── 000010.txt\n", + "│   ├── 000011.txt\n", + "│   ├── 000012.txt\n", + "│   ├── 000013.txt\n", + "│   ├── 000014.txt\n", + "│   ├── 000015.txt\n", + "│   ├── 000016.txt\n", + "│   ├── 000017.txt\n", + "│   ├── 000018.txt\n", + "│   ├── 000019.txt\n", + "│   ├── 000020.txt\n", + "│   ├── 000021.txt\n", + "│   ├── 000022.txt\n", + "│   ├── 000023.txt\n", + "│   ├── 000024.txt\n", + "│   ├── 000025.txt\n", + "│   ├── 000026.txt\n", + "│   ├── 000027.txt\n", + "│   ├── 000028.txt\n", + "│   ├── 000029.txt\n", + "│   ├── 000030.txt\n", + "│   ├── 000031.txt\n", + "│   ├── 000032.txt\n", + "│   ├── 000033.txt\n", + "│   ├── 000034.txt\n", + "│   ├── 000035.txt\n", + "│   ├── 000036.txt\n", + "│   ├── 000037.txt\n", + "│   ├── 000038.txt\n", + "│   ├── 000039.txt\n", + "│   ├── 000040.txt\n", + "│   ├── 000041.txt\n", + "│   ├── 000042.txt\n", + "│   ├── 000043.txt\n", + "│   ├── 000044.txt\n", + "│   ├── 000045.txt\n", + "│   ├── 000046.txt\n", + "│   ├── 000047.txt\n", + "│   ├── 000048.txt\n", + "│   ├── 000049.txt\n", + "│   ├── 000050.txt\n", + "│   ├── 000051.txt\n", + "│   ├── 000052.txt\n", + "│   ├── 000053.txt\n", + "│   ├── 000054.txt\n", + "│   ├── 000055.txt\n", + "│   ├── 000056.txt\n", + "│   ├── 000057.txt\n", + "│   ├── 000058.txt\n", + "│   ├── 000059.txt\n", + "│   ├── 000060.txt\n", + "│   ├── 000061.txt\n", + "│   ├── 000062.txt\n", + "│   ├── 000063.txt\n", + "│   ├── 000064.txt\n", + "│   ├── 000065.txt\n", + "│   ├── 000066.txt\n", + "│   ├── 000067.txt\n", + "│   ├── 000068.txt\n", + "│   ├── 000069.txt\n", + "│   ├── 000070.txt\n", + "│   ├── 000071.txt\n", + "│   ├── 000072.txt\n", + "│   ├── 000073.txt\n", + "│   └── 000074.txt\n", + "├── train.txt\n", + "└── val.txt\n", + "\n", + "3 directories, 152 files\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YnQQqzOWzE91", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 304 + }, + "outputId": "d18e385f-4f99-4725-ff2a-c29138d0fcc5" + }, + "source": [ + "# Let's take a look at the dataset image\n", + "import mmcv\n", + "import matplotlib.pyplot as plt\n", + "\n", + "img = mmcv.imread('kitti_tiny/training/image_2/000073.jpeg')\n", + "plt.figure(figsize=(15, 10))\n", + "plt.imshow(mmcv.bgr2rgb(img))\n", + "plt.show()" + ], + "execution_count": 10, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PMZvtSIl71qi" + }, + "source": [ + "After downloading the data, we need to implement a function to convert the kitti annotation format into the middle format. In this tutorial we choose to convert them in **`load_annotations`** function in a newly implemented **`KittiTinyDataset`**.\n", + "\n", + "Let's take a loot at the annotation txt file.\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "n7rwalnPd6e1", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "ff5c0f3e-0c8f-413b-f7d8-d01ff13fa5ca" + }, + "source": [ + "# Check the label of a single image\n", + "!cat kitti_tiny/training/label_2/000000.txt" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Pedestrian 0.00 0 -0.20 712.40 143.00 810.73 307.92 1.89 0.48 1.20 1.84 1.47 8.41 0.01\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QA1pFg-FeO3l" + }, + "source": [ + "According to the KITTI's documentation, the first column indicates the class of the object, and the 5th to 8th columns indicates the bboxes. We need to read annotations of each image and convert them into middle format MMDetection accept is as below:\n", + "\n", + "```python\n", + "[\n", + " {\n", + " 'filename': 'a.jpg',\n", + " 'width': 1280,\n", + " 'height': 720,\n", + " 'ann': {\n", + " 'bboxes': (n, 4),\n", + " 'labels': (n, ),\n", + " 'bboxes_ignore': (k, 4), (optional field)\n", + " 'labels_ignore': (k, 4) (optional field)\n", + " }\n", + " },\n", + " ...\n", + "]\n", + "```" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "GdSaB2ad0EdX" + }, + "source": [ + "import copy\n", + "import os.path as osp\n", + "\n", + "import mmcv\n", + "import numpy as np\n", + "\n", + "from mmdet.datasets.builder import DATASETS\n", + "from mmdet.datasets.custom import CustomDataset\n", + "\n", + "@DATASETS.register_module()\n", + "class KittiTinyDataset(CustomDataset):\n", + "\n", + " CLASSES = ('Car', 'Pedestrian', 'Cyclist')\n", + "\n", + " def load_annotations(self, ann_file):\n", + " cat2label = {k: i for i, k in enumerate(self.CLASSES)}\n", + " # load image list from file\n", + " image_list = mmcv.list_from_file(self.ann_file)\n", + " \n", + " data_infos = []\n", + " # convert annotations to middle format\n", + " for image_id in image_list:\n", + " filename = f'{self.img_prefix}/{image_id}.jpeg'\n", + " image = mmcv.imread(filename)\n", + " height, width = image.shape[:2]\n", + " \n", + " data_info = dict(filename=f'{image_id}.jpeg', width=width, height=height)\n", + " \n", + " # load annotations\n", + " label_prefix = self.img_prefix.replace('image_2', 'label_2')\n", + " lines = mmcv.list_from_file(osp.join(label_prefix, f'{image_id}.txt'))\n", + " \n", + " content = [line.strip().split(' ') for line in lines]\n", + " bbox_names = [x[0] for x in content]\n", + " bboxes = [[float(info) for info in x[4:8]] for x in content]\n", + " \n", + " gt_bboxes = []\n", + " gt_labels = []\n", + " gt_bboxes_ignore = []\n", + " gt_labels_ignore = []\n", + " \n", + " # filter 'DontCare'\n", + " for bbox_name, bbox in zip(bbox_names, bboxes):\n", + " if bbox_name in cat2label:\n", + " gt_labels.append(cat2label[bbox_name])\n", + " gt_bboxes.append(bbox)\n", + " else:\n", + " gt_labels_ignore.append(-1)\n", + " gt_bboxes_ignore.append(bbox)\n", + "\n", + " data_anno = dict(\n", + " bboxes=np.array(gt_bboxes, dtype=np.float32).reshape(-1, 4),\n", + " labels=np.array(gt_labels, dtype=np.long),\n", + " bboxes_ignore=np.array(gt_bboxes_ignore,\n", + " dtype=np.float32).reshape(-1, 4),\n", + " labels_ignore=np.array(gt_labels_ignore, dtype=np.long))\n", + "\n", + " data_info.update(ann=data_anno)\n", + " data_infos.append(data_info)\n", + "\n", + " return data_infos" + ], + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PwqJOpBe-bMj" + }, + "source": [ + "### Modify the config\n", + "\n", + "In the next step, we need to modify the config for the training.\n", + "To accelerate the process, we finetune a detector using a pre-trained detector." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hamZrlnH-YDD" + }, + "source": [ + "from mmcv import Config\n", + "cfg = Config.fromfile('./configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco.py')" + ], + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HntziLGq-92Z" + }, + "source": [ + "Given a config that trains a Faster R-CNN on COCO dataset, we need to modify some values to use it for training Faster R-CNN on KITTI dataset." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pUbwD8uV0PR8", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "bef23024-c326-4688-a661-ba00d63756ce" + }, + "source": [ + "from mmdet.apis import set_random_seed\n", + "\n", + "# Modify dataset type and path\n", + "cfg.dataset_type = 'KittiTinyDataset'\n", + "cfg.data_root = 'kitti_tiny/'\n", + "\n", + "cfg.data.test.type = 'KittiTinyDataset'\n", + "cfg.data.test.data_root = 'kitti_tiny/'\n", + "cfg.data.test.ann_file = 'train.txt'\n", + "cfg.data.test.img_prefix = 'training/image_2'\n", + "\n", + "cfg.data.train.type = 'KittiTinyDataset'\n", + "cfg.data.train.data_root = 'kitti_tiny/'\n", + "cfg.data.train.ann_file = 'train.txt'\n", + "cfg.data.train.img_prefix = 'training/image_2'\n", + "\n", + "cfg.data.val.type = 'KittiTinyDataset'\n", + "cfg.data.val.data_root = 'kitti_tiny/'\n", + "cfg.data.val.ann_file = 'val.txt'\n", + "cfg.data.val.img_prefix = 'training/image_2'\n", + "\n", + "# modify num classes of the model in box head\n", + "cfg.model.roi_head.bbox_head.num_classes = 3\n", + "# We can still use the pre-trained Mask RCNN model though we do not need to\n", + "# use the mask branch\n", + "cfg.load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", + "\n", + "# Set up working dir to save files and logs.\n", + "cfg.work_dir = './tutorial_exps'\n", + "\n", + "# The original learning rate (LR) is set for 8-GPU training.\n", + "# We divide it by 8 since we only use one GPU.\n", + "cfg.optimizer.lr = 0.02 / 8\n", + "cfg.lr_config.warmup = None\n", + "cfg.log_config.interval = 10\n", + "\n", + "# Change the evaluation metric since we use customized dataset.\n", + "cfg.evaluation.metric = 'mAP'\n", + "# We can set the evaluation interval to reduce the evaluation times\n", + "cfg.evaluation.interval = 12\n", + "# We can set the checkpoint saving interval to reduce the storage cost\n", + "cfg.checkpoint_config.interval = 12\n", + "\n", + "# Set seed thus the results are more reproducible\n", + "cfg.seed = 0\n", + "set_random_seed(0, deterministic=False)\n", + "cfg.gpu_ids = range(1)\n", + "\n", + "\n", + "# We can initialize the logger for training and have a look\n", + "# at the final config used for training\n", + "print(f'Config:\\n{cfg.pretty_text}')\n" + ], + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Config:\n", + "model = dict(\n", + " type='FasterRCNN',\n", + " pretrained='open-mmlab://detectron2/resnet50_caffe',\n", + " backbone=dict(\n", + " type='ResNet',\n", + " depth=50,\n", + " num_stages=4,\n", + " out_indices=(0, 1, 2, 3),\n", + " frozen_stages=1,\n", + " norm_cfg=dict(type='BN', requires_grad=False),\n", + " norm_eval=True,\n", + " style='caffe'),\n", + " neck=dict(\n", + " type='FPN',\n", + " in_channels=[256, 512, 1024, 2048],\n", + " out_channels=256,\n", + " num_outs=5),\n", + " rpn_head=dict(\n", + " type='RPNHead',\n", + " in_channels=256,\n", + " feat_channels=256,\n", + " anchor_generator=dict(\n", + " type='AnchorGenerator',\n", + " scales=[8],\n", + " ratios=[0.5, 1.0, 2.0],\n", + " strides=[4, 8, 16, 32, 64]),\n", + " bbox_coder=dict(\n", + " type='DeltaXYWHBBoxCoder',\n", + " target_means=[0.0, 0.0, 0.0, 0.0],\n", + " target_stds=[1.0, 1.0, 1.0, 1.0]),\n", + " loss_cls=dict(\n", + " type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),\n", + " loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n", + " roi_head=dict(\n", + " type='StandardRoIHead',\n", + " bbox_roi_extractor=dict(\n", + " type='SingleRoIExtractor',\n", + " roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),\n", + " out_channels=256,\n", + " featmap_strides=[4, 8, 16, 32]),\n", + " bbox_head=dict(\n", + " type='Shared2FCBBoxHead',\n", + " in_channels=256,\n", + " fc_out_channels=1024,\n", + " roi_feat_size=7,\n", + " num_classes=3,\n", + " bbox_coder=dict(\n", + " type='DeltaXYWHBBoxCoder',\n", + " target_means=[0.0, 0.0, 0.0, 0.0],\n", + " target_stds=[0.1, 0.1, 0.2, 0.2]),\n", + " reg_class_agnostic=False,\n", + " loss_cls=dict(\n", + " type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),\n", + " loss_bbox=dict(type='L1Loss', loss_weight=1.0))))\n", + "train_cfg = dict(\n", + " rpn=dict(\n", + " assigner=dict(\n", + " type='MaxIoUAssigner',\n", + " pos_iou_thr=0.7,\n", + " neg_iou_thr=0.3,\n", + " min_pos_iou=0.3,\n", + " match_low_quality=True,\n", + " ignore_iof_thr=-1),\n", + " sampler=dict(\n", + " type='RandomSampler',\n", + " num=256,\n", + " pos_fraction=0.5,\n", + " neg_pos_ub=-1,\n", + " add_gt_as_proposals=False),\n", + " allowed_border=-1,\n", + " pos_weight=-1,\n", + " debug=False),\n", + " rpn_proposal=dict(\n", + " nms_across_levels=False,\n", + " nms_pre=2000,\n", + " nms_post=1000,\n", + " max_num=1000,\n", + " nms_thr=0.7,\n", + " min_bbox_size=0),\n", + " rcnn=dict(\n", + " assigner=dict(\n", + " type='MaxIoUAssigner',\n", + " pos_iou_thr=0.5,\n", + " neg_iou_thr=0.5,\n", + " min_pos_iou=0.5,\n", + " match_low_quality=False,\n", + " ignore_iof_thr=-1),\n", + " sampler=dict(\n", + " type='RandomSampler',\n", + " num=512,\n", + " pos_fraction=0.25,\n", + " neg_pos_ub=-1,\n", + " add_gt_as_proposals=True),\n", + " pos_weight=-1,\n", + " debug=False))\n", + "test_cfg = dict(\n", + " rpn=dict(\n", + " nms_across_levels=False,\n", + " nms_pre=1000,\n", + " nms_post=1000,\n", + " max_num=1000,\n", + " nms_thr=0.7,\n", + " min_bbox_size=0),\n", + " rcnn=dict(\n", + " score_thr=0.05,\n", + " nms=dict(type='nms', iou_threshold=0.5),\n", + " max_per_img=100))\n", + "dataset_type = 'KittiTinyDataset'\n", + "data_root = 'kitti_tiny/'\n", + "img_norm_cfg = dict(\n", + " mean=[103.53, 116.28, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False)\n", + "train_pipeline = [\n", + " dict(type='LoadImageFromFile'),\n", + " dict(type='LoadAnnotations', with_bbox=True),\n", + " dict(\n", + " type='Resize',\n", + " img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),\n", + " (1333, 768), (1333, 800)],\n", + " multiscale_mode='value',\n", + " keep_ratio=True),\n", + " dict(type='RandomFlip', flip_ratio=0.5),\n", + " dict(\n", + " type='Normalize',\n", + " mean=[103.53, 116.28, 123.675],\n", + " std=[1.0, 1.0, 1.0],\n", + " to_rgb=False),\n", + " dict(type='Pad', size_divisor=32),\n", + " dict(type='DefaultFormatBundle'),\n", + " dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])\n", + "]\n", + "test_pipeline = [\n", + " dict(type='LoadImageFromFile'),\n", + " dict(\n", + " type='MultiScaleFlipAug',\n", + " img_scale=(1333, 800),\n", + " flip=False,\n", + " transforms=[\n", + " dict(type='Resize', keep_ratio=True),\n", + " dict(type='RandomFlip'),\n", + " dict(\n", + " type='Normalize',\n", + " mean=[103.53, 116.28, 123.675],\n", + " std=[1.0, 1.0, 1.0],\n", + " to_rgb=False),\n", + " dict(type='Pad', size_divisor=32),\n", + " dict(type='ImageToTensor', keys=['img']),\n", + " dict(type='Collect', keys=['img'])\n", + " ])\n", + "]\n", + "data = dict(\n", + " samples_per_gpu=2,\n", + " workers_per_gpu=2,\n", + " train=dict(\n", + " type='KittiTinyDataset',\n", + " ann_file='train.txt',\n", + " img_prefix='training/image_2',\n", + " pipeline=[\n", + " dict(type='LoadImageFromFile'),\n", + " dict(type='LoadAnnotations', with_bbox=True),\n", + " dict(\n", + " type='Resize',\n", + " img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),\n", + " (1333, 768), (1333, 800)],\n", + " multiscale_mode='value',\n", + " keep_ratio=True),\n", + " dict(type='RandomFlip', flip_ratio=0.5),\n", + " dict(\n", + " type='Normalize',\n", + " mean=[103.53, 116.28, 123.675],\n", + " std=[1.0, 1.0, 1.0],\n", + " to_rgb=False),\n", + " dict(type='Pad', size_divisor=32),\n", + " dict(type='DefaultFormatBundle'),\n", + " dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])\n", + " ],\n", + " data_root='kitti_tiny/'),\n", + " val=dict(\n", + " type='KittiTinyDataset',\n", + " ann_file='val.txt',\n", + " img_prefix='training/image_2',\n", + " pipeline=[\n", + " dict(type='LoadImageFromFile'),\n", + " dict(\n", + " type='MultiScaleFlipAug',\n", + " img_scale=(1333, 800),\n", + " flip=False,\n", + " transforms=[\n", + " dict(type='Resize', keep_ratio=True),\n", + " dict(type='RandomFlip'),\n", + " dict(\n", + " type='Normalize',\n", + " mean=[103.53, 116.28, 123.675],\n", + " std=[1.0, 1.0, 1.0],\n", + " to_rgb=False),\n", + " dict(type='Pad', size_divisor=32),\n", + " dict(type='ImageToTensor', keys=['img']),\n", + " dict(type='Collect', keys=['img'])\n", + " ])\n", + " ],\n", + " data_root='kitti_tiny/'),\n", + " test=dict(\n", + " type='KittiTinyDataset',\n", + " ann_file='train.txt',\n", + " img_prefix='training/image_2',\n", + " pipeline=[\n", + " dict(type='LoadImageFromFile'),\n", + " dict(\n", + " type='MultiScaleFlipAug',\n", + " img_scale=(1333, 800),\n", + " flip=False,\n", + " transforms=[\n", + " dict(type='Resize', keep_ratio=True),\n", + " dict(type='RandomFlip'),\n", + " dict(\n", + " type='Normalize',\n", + " mean=[103.53, 116.28, 123.675],\n", + " std=[1.0, 1.0, 1.0],\n", + " to_rgb=False),\n", + " dict(type='Pad', size_divisor=32),\n", + " dict(type='ImageToTensor', keys=['img']),\n", + " dict(type='Collect', keys=['img'])\n", + " ])\n", + " ],\n", + " data_root='kitti_tiny/'))\n", + "evaluation = dict(interval=12, metric='mAP')\n", + "optimizer = dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001)\n", + "optimizer_config = dict(grad_clip=None)\n", + "lr_config = dict(\n", + " policy='step',\n", + " warmup=None,\n", + " warmup_iters=500,\n", + " warmup_ratio=0.001,\n", + " step=[8, 11])\n", + "total_epochs = 12\n", + "checkpoint_config = dict(interval=12)\n", + "log_config = dict(interval=10, hooks=[dict(type='TextLoggerHook')])\n", + "dist_params = dict(backend='nccl')\n", + "log_level = 'INFO'\n", + "load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'\n", + "resume_from = None\n", + "workflow = [('train', 1)]\n", + "work_dir = './tutorial_exps'\n", + "seed = 0\n", + "gpu_ids = range(0, 1)\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "111W_oZV_3wa" + }, + "source": [ + "### Train a new detector\n", + "\n", + "Finally, lets initialize the dataset and detector, then train a new detector!" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7WBWHu010PN3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "270b5681a3294ef49c034189468fd36a", + "7f0c0b0195e44c208544d2556e866997", + "fed604d9763f4fcc8b640b28ab10ca50", + "620febe332464c0183030c285738c8c8", + "127050aef12f47aa86f8cd85c25a22e6", + "9fdf59eab9074902a357b14e15b0238c", + "a47a8658f18b42698a205b684694e5df", + "06c0bb6dfc7f4d0cb98d2a36a77be41b" + ] + }, + "outputId": "0fbc2dcd-0f98-4004-ce3a-b9eb920a6353" + }, + "source": [ + "from mmdet.datasets import build_dataset\n", + "from mmdet.models import build_detector\n", + "from mmdet.apis import train_detector\n", + "\n", + "\n", + "# Build dataset\n", + "datasets = [build_dataset(cfg.data.train)]\n", + "\n", + "# Build the detector\n", + "model = build_detector(\n", + " cfg.model, train_cfg=cfg.train_cfg, test_cfg=cfg.test_cfg)\n", + "# Add an attribute for visualization convenience\n", + "model.CLASSES = datasets[0].CLASSES\n", + "\n", + "# Create work_dir\n", + "mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir))\n", + "train_detector(model, datasets, cfg, distributed=False, validate=True)" + ], + "execution_count": 16, + "outputs": [ + { + "output_type": "stream", + "text": [ + "/content/mmdetection/mmdet/datasets/custom.py:154: UserWarning: CustomDataset does not support filtering empty gt images.\n", + " 'CustomDataset does not support filtering empty gt images.')\n", + "2020-12-29 07:19:47,726 - mmdet - INFO - load model from: open-mmlab://detectron2/resnet50_caffe\n", + "Downloading: \"https://download.openmmlab.com/pretrain/third_party/resnet50_msra-5891d200.pth\" to /root/.cache/torch/checkpoints/resnet50_msra-5891d200.pth\n" + ], + "name": "stderr" + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "270b5681a3294ef49c034189468fd36a", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=94284731.0), HTML(value='')))" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "2020-12-29 07:20:00,253 - mmdet - WARNING - The model and loaded state dict do not match exactly\n", + "\n", + "unexpected key in source state_dict: conv1.bias\n", + "\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "2020-12-29 07:20:00,594 - mmdet - INFO - load checkpoint from checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\n", + "2020-12-29 07:20:00,733 - mmdet - WARNING - The model and loaded state dict do not match exactly\n", + "\n", + "size mismatch for roi_head.bbox_head.fc_cls.weight: copying a param with shape torch.Size([81, 1024]) from checkpoint, the shape in current model is torch.Size([4, 1024]).\n", + "size mismatch for roi_head.bbox_head.fc_cls.bias: copying a param with shape torch.Size([81]) from checkpoint, the shape in current model is torch.Size([4]).\n", + "size mismatch for roi_head.bbox_head.fc_reg.weight: copying a param with shape torch.Size([320, 1024]) from checkpoint, the shape in current model is torch.Size([12, 1024]).\n", + "size mismatch for roi_head.bbox_head.fc_reg.bias: copying a param with shape torch.Size([320]) from checkpoint, the shape in current model is torch.Size([12]).\n", + "unexpected key in source state_dict: roi_head.mask_head.convs.0.conv.weight, roi_head.mask_head.convs.0.conv.bias, roi_head.mask_head.convs.1.conv.weight, roi_head.mask_head.convs.1.conv.bias, roi_head.mask_head.convs.2.conv.weight, roi_head.mask_head.convs.2.conv.bias, roi_head.mask_head.convs.3.conv.weight, roi_head.mask_head.convs.3.conv.bias, roi_head.mask_head.upsample.weight, roi_head.mask_head.upsample.bias, roi_head.mask_head.conv_logits.weight, roi_head.mask_head.conv_logits.bias\n", + "\n", + "2020-12-29 07:20:00,736 - mmdet - INFO - Start running, host: root@9e3393d105fc, work_dir: /content/mmdetection/tutorial_exps\n", + "2020-12-29 07:20:00,737 - mmdet - INFO - workflow: [('train', 1)], max: 12 epochs\n", + "2020-12-29 07:20:06,295 - mmdet - INFO - Epoch [1][10/25]\tlr: 2.500e-03, eta: 0:02:36, time: 0.540, data_time: 0.225, memory: 2133, loss_rpn_cls: 0.0286, loss_rpn_bbox: 0.0177, loss_cls: 0.5963, acc: 80.5273, loss_bbox: 0.3859, loss: 1.0285\n", + "2020-12-29 07:20:09,579 - mmdet - INFO - Epoch [1][20/25]\tlr: 2.500e-03, eta: 0:02:01, time: 0.328, data_time: 0.021, memory: 2133, loss_rpn_cls: 0.0214, loss_rpn_bbox: 0.0122, loss_cls: 0.1724, acc: 94.1016, loss_bbox: 0.3016, loss: 0.5076\n", + "2020-12-29 07:20:16,729 - mmdet - INFO - Epoch [2][10/25]\tlr: 2.500e-03, eta: 0:01:46, time: 0.544, data_time: 0.224, memory: 2133, loss_rpn_cls: 0.0183, loss_rpn_bbox: 0.0148, loss_cls: 0.1509, acc: 94.9316, loss_bbox: 0.2840, loss: 0.4680\n", + "2020-12-29 07:20:20,049 - mmdet - INFO - Epoch [2][20/25]\tlr: 2.500e-03, eta: 0:01:38, time: 0.332, data_time: 0.021, memory: 2133, loss_rpn_cls: 0.0114, loss_rpn_bbox: 0.0129, loss_cls: 0.1295, acc: 95.4590, loss_bbox: 0.1995, loss: 0.3532\n", + "2020-12-29 07:20:27,248 - mmdet - INFO - Epoch [3][10/25]\tlr: 2.500e-03, eta: 0:01:31, time: 0.547, data_time: 0.224, memory: 2133, loss_rpn_cls: 0.0073, loss_rpn_bbox: 0.0109, loss_cls: 0.0959, acc: 96.5723, loss_bbox: 0.1557, loss: 0.2698\n", + "2020-12-29 07:20:30,613 - mmdet - INFO - Epoch [3][20/25]\tlr: 2.500e-03, eta: 0:01:26, time: 0.336, data_time: 0.021, memory: 2133, loss_rpn_cls: 0.0073, loss_rpn_bbox: 0.0147, loss_cls: 0.1402, acc: 94.8047, loss_bbox: 0.2492, loss: 0.4114\n", + "2020-12-29 07:20:37,880 - mmdet - INFO - Epoch [4][10/25]\tlr: 2.500e-03, eta: 0:01:20, time: 0.550, data_time: 0.224, memory: 2133, loss_rpn_cls: 0.0083, loss_rpn_bbox: 0.0141, loss_cls: 0.1126, acc: 95.7031, loss_bbox: 0.2164, loss: 0.3514\n", + "2020-12-29 07:20:41,288 - mmdet - INFO - Epoch [4][20/25]\tlr: 2.500e-03, eta: 0:01:15, time: 0.340, data_time: 0.021, memory: 2133, loss_rpn_cls: 0.0056, loss_rpn_bbox: 0.0125, loss_cls: 0.1184, acc: 95.5566, loss_bbox: 0.2062, loss: 0.3426\n", + "2020-12-29 07:20:48,606 - mmdet - INFO - Epoch [5][10/25]\tlr: 2.500e-03, eta: 0:01:10, time: 0.556, data_time: 0.225, memory: 2133, loss_rpn_cls: 0.0033, loss_rpn_bbox: 0.0104, loss_cls: 0.1058, acc: 95.9668, loss_bbox: 0.2002, loss: 0.3198\n", + "2020-12-29 07:20:52,062 - mmdet - INFO - Epoch [5][20/25]\tlr: 2.500e-03, eta: 0:01:06, time: 0.346, data_time: 0.022, memory: 2133, loss_rpn_cls: 0.0044, loss_rpn_bbox: 0.0111, loss_cls: 0.0908, acc: 96.6699, loss_bbox: 0.1836, loss: 0.2899\n", + "2020-12-29 07:20:59,403 - mmdet - INFO - Epoch [6][10/25]\tlr: 2.500e-03, eta: 0:01:00, time: 0.556, data_time: 0.225, memory: 2133, loss_rpn_cls: 0.0027, loss_rpn_bbox: 0.0085, loss_cls: 0.0809, acc: 97.1191, loss_bbox: 0.1754, loss: 0.2675\n", + "2020-12-29 07:21:02,897 - mmdet - INFO - Epoch [6][20/25]\tlr: 2.500e-03, eta: 0:00:56, time: 0.349, data_time: 0.022, memory: 2134, loss_rpn_cls: 0.0037, loss_rpn_bbox: 0.0103, loss_cls: 0.0821, acc: 96.6016, loss_bbox: 0.1719, loss: 0.2679\n", + "2020-12-29 07:21:10,285 - mmdet - INFO - Epoch [7][10/25]\tlr: 2.500e-03, eta: 0:00:51, time: 0.559, data_time: 0.224, memory: 2134, loss_rpn_cls: 0.0026, loss_rpn_bbox: 0.0097, loss_cls: 0.0769, acc: 97.1289, loss_bbox: 0.1655, loss: 0.2548\n", + "2020-12-29 07:21:13,802 - mmdet - INFO - Epoch [7][20/25]\tlr: 2.500e-03, eta: 0:00:47, time: 0.351, data_time: 0.022, memory: 2134, loss_rpn_cls: 0.0019, loss_rpn_bbox: 0.0113, loss_cls: 0.0826, acc: 96.9531, loss_bbox: 0.1655, loss: 0.2613\n", + "2020-12-29 07:21:21,244 - mmdet - INFO - Epoch [8][10/25]\tlr: 2.500e-03, eta: 0:00:42, time: 0.560, data_time: 0.223, memory: 2134, loss_rpn_cls: 0.0021, loss_rpn_bbox: 0.0086, loss_cls: 0.0704, acc: 97.1094, loss_bbox: 0.1386, loss: 0.2197\n", + "2020-12-29 07:21:24,802 - mmdet - INFO - Epoch [8][20/25]\tlr: 2.500e-03, eta: 0:00:38, time: 0.356, data_time: 0.023, memory: 2134, loss_rpn_cls: 0.0009, loss_rpn_bbox: 0.0085, loss_cls: 0.0697, acc: 97.4316, loss_bbox: 0.1622, loss: 0.2412\n", + "2020-12-29 07:21:32,267 - mmdet - INFO - Epoch [9][10/25]\tlr: 2.500e-04, eta: 0:00:33, time: 0.563, data_time: 0.224, memory: 2134, loss_rpn_cls: 0.0035, loss_rpn_bbox: 0.0078, loss_cls: 0.0632, acc: 97.5781, loss_bbox: 0.1274, loss: 0.2019\n", + "2020-12-29 07:21:35,806 - mmdet - INFO - Epoch [9][20/25]\tlr: 2.500e-04, eta: 0:00:29, time: 0.354, data_time: 0.023, memory: 2134, loss_rpn_cls: 0.0009, loss_rpn_bbox: 0.0063, loss_cls: 0.0522, acc: 98.1348, loss_bbox: 0.1038, loss: 0.1632\n", + "2020-12-29 07:21:43,253 - mmdet - INFO - Epoch [10][10/25]\tlr: 2.500e-04, eta: 0:00:23, time: 0.562, data_time: 0.224, memory: 2134, loss_rpn_cls: 0.0026, loss_rpn_bbox: 0.0080, loss_cls: 0.0675, acc: 97.4805, loss_bbox: 0.1299, loss: 0.2080\n", + "2020-12-29 07:21:46,765 - mmdet - INFO - Epoch [10][20/25]\tlr: 2.500e-04, eta: 0:00:20, time: 0.352, data_time: 0.022, memory: 2134, loss_rpn_cls: 0.0012, loss_rpn_bbox: 0.0060, loss_cls: 0.0588, acc: 97.6465, loss_bbox: 0.1207, loss: 0.1867\n", + "2020-12-29 07:21:54,166 - mmdet - INFO - Epoch [11][10/25]\tlr: 2.500e-04, eta: 0:00:14, time: 0.559, data_time: 0.224, memory: 2134, loss_rpn_cls: 0.0035, loss_rpn_bbox: 0.0065, loss_cls: 0.0633, acc: 97.5684, loss_bbox: 0.1208, loss: 0.1940\n", + "2020-12-29 07:21:57,687 - mmdet - INFO - Epoch [11][20/25]\tlr: 2.500e-04, eta: 0:00:10, time: 0.352, data_time: 0.022, memory: 2134, loss_rpn_cls: 0.0016, loss_rpn_bbox: 0.0072, loss_cls: 0.0579, acc: 97.9102, loss_bbox: 0.1229, loss: 0.1897\n", + "2020-12-29 07:22:05,088 - mmdet - INFO - Epoch [12][10/25]\tlr: 2.500e-05, eta: 0:00:05, time: 0.559, data_time: 0.224, memory: 2134, loss_rpn_cls: 0.0010, loss_rpn_bbox: 0.0061, loss_cls: 0.0571, acc: 97.8906, loss_bbox: 0.1196, loss: 0.1838\n", + "2020-12-29 07:22:08,566 - mmdet - INFO - Epoch [12][20/25]\tlr: 2.500e-05, eta: 0:00:01, time: 0.348, data_time: 0.022, memory: 2134, loss_rpn_cls: 0.0010, loss_rpn_bbox: 0.0054, loss_cls: 0.0481, acc: 98.3398, loss_bbox: 0.0877, loss: 0.1421\n", + "2020-12-29 07:22:10,210 - mmdet - INFO - Saving checkpoint at 12 epochs\n" + ], + "name": "stderr" + }, + { + "output_type": "stream", + "text": [ + "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 25/25, 11.2 task/s, elapsed: 2s, ETA: 0s" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "2020-12-29 07:22:13,383 - mmdet - INFO - \n", + "+------------+-----+------+--------+-------+\n", + "| class | gts | dets | recall | ap |\n", + "+------------+-----+------+--------+-------+\n", + "| Car | 62 | 135 | 0.968 | 0.879 |\n", + "| Pedestrian | 13 | 61 | 0.846 | 0.629 |\n", + "| Cyclist | 7 | 65 | 0.429 | 0.035 |\n", + "+------------+-----+------+--------+-------+\n", + "| mAP | | | | 0.514 |\n", + "+------------+-----+------+--------+-------+\n", + "2020-12-29 07:22:13,385 - mmdet - INFO - Epoch(val) [12][25]\tmAP: 0.5142\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_vYQF5K2NqqI" + }, + "source": [ + "### Understand the log\n", + "From the log, we can have a basic understanding the training process and know how well the detector is trained.\n", + "\n", + "Firstly, the ResNet-50 backbone pre-trained on ImageNet is loaded, this is a common practice since training from scratch is more cost. The log shows that all the weights of the ResNet-50 backbone are loaded except the `conv1.bias`, which has been merged into `conv.weights`.\n", + "\n", + "Second, since the dataset we are using is small, we loaded a Mask R-CNN model and finetune it for detection. Because the detector we actually using is Faster R-CNN, the weights in mask branch, e.g. `roi_head.mask_head`, are `unexpected key in source state_dict` and not loaded.\n", + "The original Mask R-CNN is trained on COCO dataset which contains 80 classes but KITTI Tiny dataset only have 3 classes. Therefore, the last FC layer of the pre-trained Mask R-CNN for classification has different weight shape and is not used.\n", + "\n", + "Third, after training, the detector is evaluated by the default VOC-style evaluation. The results show that the detector achieves 54.1 mAP on the val dataset,\n", + " not bad!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MfQ-yspZLuuI" + }, + "source": [ + "## Test the trained detector\n", + "\n", + "After finetuning the detector, let's visualize the prediction results!" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_MuZurfGLq0p", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 376 + }, + "outputId": "f583b268-e4f2-4f5c-c911-4f04214c571c" + }, + "source": [ + "img = mmcv.imread('kitti_tiny/training/image_2/000068.jpeg')\n", + "\n", + "model.cfg = cfg\n", + "result = inference_detector(model, img)\n", + "show_result_pyplot(model, img, result)\n" + ], + "execution_count": 17, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAFnCAYAAABQJ7n+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9Waxl2Xnf9/vWWnvvs890x7q35uq52Ww2NZDUYCiWAUGRE9sxYMBJHDuAHxzBBvwQBMj4lMc8+ylwkAGwH5wAgR8SKRJkMaJEkRIpcWx2kz1UVdd4685n3sMa8rD2vVXdZFNW1E02W+vXOH3rnnuGvdde0/f/hi0hBBKJRCKRSCQSiUQikUgkPsqoH/cBJBKJRCKRSCQSiUQikUj8WSQBI5FIJBKJRCKRSCQSicRHniRgJBKJRCKRSCQSiUQikfjIkwSMRCKRSCQSiUQikUgkEh95koCRSCQSiUQikUgkEolE4iNPEjASiUQikUgkEolEIpFIfORJAkYikUgkEomfGETk90TkH/24jyORSCQSicSPniRgJBKJRCKR+IlERP6hiHzxx30ciUQikUgkfjQkASORSCQSicQHjoiYH/cxJBKJRCKR+HiRBIxEIpFIJBIfCCJyW0T+axH5FrAQkV8SkS+JyKmIfFNE/toTr/2HInJTRGYicktE/n73/H8vIv/yidc9JSLhvYKIiLwE/I/AL4rIXEROfzRnmUgkEolE4sdF8o4kEolEIpH4IPl7wN8APPAt4D8Ffgv4FeD/FJFPAEvgnwGfCyF8T0QuAZt/ni8JIbwuIv8Y+EchhF/6IE8gkUgkEonER5MUgZFIJBKJROKD5J+FEO4C/wD4zRDCb4YQfAjhd4A/Af797nUe+JSIlCGEhyGE7/y4DjiRSCQSicRPBknASCQSiUQi8UFyt/t5A/i7XfrIaZfi8UvApRDCAviPgH8MPBSR3+giMxKJRCKRSCTelyRgJBKJRCKR+CAJ3c+7wL8IIaw/8RiEEP4HgBDCb4cQfhW4BHwX+J+69y2A/hOfd/Hf4rsSiUQikUj8JSAJGIlEIpFIJD4M/iXwt0Tk10REi0hPRP6aiFwVkV0R+dsiMgBqYE5MKQH4BvBXReS6iKwB/+0P+Y5HwFURyT/UM0kkEolEIvGRIAkYiUQikUgkPnC6Ohh/G/jvgANiRMZ/Sdx7KOC/AB4Ax8AvA/+ke9/vAP87sQDonwL/9w/5ms8D3wH2ROTwQzmRRCKRSCQSHxkkhBR9mUgkEolEIpFIJBKJROKjTYrASCQSiUQikUgkEolEIvGRJwkYiUQikUgkEolEIpFIJD7yfGgChoj8dRH5noi8JSL/zYf1PYlEIpFIJBKJRCKRSCQ+/nwoNTBERANvAL8K3AO+Cvy9EMJrH/iXJRKJRCKRSCQSiUQikfjY82FFYPwc8FYI4WYIoQH+FbESeSKRSCQSiUQikUgkEonEnxvzIX3uFeLt0s64B/z8+x6EMaEoCkIIOOcIIUAXGaKUYJTCGI0WBXgIvI/0EggAvvsZIITQPcAj+CDxbwQQQQEiICIoAa0VWikEukdACBDiDepDCDTW4YNHlEZEda+M3wMgCN777vgVSikIj/9+hrxfg8jZwRPfx+P3PfkJAYnHKHL+YefnhiASm9F7h3MOAmitMdoQJOCDx3uPdwHvfNfkct7uSglKK5RWiADnbQdBwLn4fun+896jlcJkGYFAay0hBIyJ7eSco7UOQsC/60SebLv4PwF8ODuPeEzBh/PrJgK6a1vpfhcCmdHo7sRD8ATvMUaT5Rk+BHwIKInX19p4PE0AUYpMawZZhtEax1nbOMQHRCkcAW9dvKZZ3vWO2IHC2fU/O9buu7x3OOtomgbXuq4vG5TqzkErtNHx3EVQSqO0RmsTL78/+8x47s57nLXUdYO1FqUUWhSB+F2EgBJBoUAJYgSlFNZ6fBsos4L19TVcBovVHNoWhequj8VaS0BQ2oBIdw1iXwk+4J3DeU9wsR21VmgtGG3QWuO9wzuH0RrTjSVFPCatBGMMJtNgAq1zzBYVy2VDlvfQysTv8o7gbdcnY9trbdBaEULAWosEyIxBS+yboiTOHyHgfMB6T103BOvpDwaMt9awrkHaFgPY1tJ6i4jCaI1WguDBOYIPBB+vt1KgY+cD5xGtCCKEEH86D1XbsmpbvIC1nkxrjDHxWgUfrytQZgWF0QgB340Pbx1Fr0QNRiyahnpZoZwl0wplFLooCCiaqsFbi8ahtUaAwiiMePAeh8KKxgbBi6JtavCOTAsKoZdnGB3HU+sDk9mCqnXkeUGv1yN0bd4vMsoiQ4hzcdv6eHyisM5Rty1NU0Pw9LOcIssRrWicZVlVOOuw1qN0BqIYjEYEpWL/ty1GK4xWtE2DDyDa0DpPay1agYRAZjIKrej1MlbVikVV41DEXi20TUsbhCCKYWFYH/XxIbCqK5TW5L0SRDGdzrHWUvZLjNYs5jOsbRmWJetr6+T9PoiKk9nZjK+6+dMHvFJ4ukXSkypGfVzoNgchdCt3CO9aQyHOu/G596zS7/o14OsKa1sIoLRGRKOzDJTuXhHXBenWMd+tw8oogjgCQuxYoftoQUK3cCsLLo41vCW0FkwfdA7KI6HB2yWKANpAMCAmfrerQQIhCL5p49qkNU1VUWYafABTdPsXS2gXiAghz5FcAwpfOZr5CgBlQBca0Yrae3xQICqOVwTxjrZuaVuLD4ITwesClQ9AaQZlj8IIwVraqsK2DUigHA5QJoeg47F//4XibD/zQ3ZMfzk5ax6Ja3ToJqjYSr57jXTNJwTvaduauqqwHnpln7ynURIQVNxaB6ibmslkQl01BNfQL3M2dy6iTfEjP8UfFe+NQ5cn/xDC+TOutUwn09g+bY3znkyEXBRBwEo35pWAUujYsqDU2WUApNv/xb1r6PaqZ8/zrq+M84ZWmjM7Iw6FgNKKsl8yKPtopTtr4F1H/5eE98kiCNBWNcvVEussyihMnpFlOdrEPa8SIe6Qnnjb2XhBzm1RZ1tsW+PahqauWC6XLFcrrPWgdGc7PWmfCFpnGJPT7w8Yj9folUVnr8TXyU/snPZEewchtA7bNFSrilVT0Z7ZCue292OrNESjvBsL7/6cH/DpnLXP6cnRYQjhwnuP5MMSMP5MROTXgV8HyLKMV155GWs90+mE+XyObWo0wrDIGfd7bK2PGPUKtHi0BFoBJy4aRlqiEWKiQatCNE6DA4LCWktdt8wrx7z21NbR2hrnXdyzKjBKMAr6vZxxf8CgV1AWPfq5pidgjAGjaTw8ODzk6HSKznvkeS/OSsHjrcW3LcEHlGRY58iyjH5ZoiAOIiX41iIqGoBKhHNRpuv4eBcntO5xZvCEuK/Ge7DBd2JM7Ax5kaGzM2EinpcohQ+BtqqZzxbYuqVfDlhbX4M8EFRAvKJZWRazJfPpkrpqMcawtj5mOO7HfZE4lAZlcnwQLHGDMlvWzOdzxEGuC5pVxaDss7G1gVNwPD2mahquXL1MrxxwcjzlwYM9lqsK58D6ThU6F1gc+kyYyAxN08Z9nGi8D7F9vUcpIc8zhsMB/bJAayHPNIWBa7vbjAc9JkcHLCcnaOXZ2Fzj4tUreIHFaoVGk6mctmmZ1oG3D055NDulmp7yYjnmhRvXGF0YMxwP6WWa0hvmruH24R6L/VO2hlv0L11BlSU2eAKc/5TcUDU1rXO0zjJfLJhMJty9c5fJvRM2yxFb2+v0Ck2WBdY2hmxurqONoPOCXm/IcLRGbzAmBIV1AZ1prG3xoWaxWjGdTrh96w6PHh4wKAcMyz74hqaasVycUs9XDLI18nGP4cUxg/GY2WlNdej55KVn+Dv/wb/H6nrG73/989Rv3aHnc/JiQN1WnE5OqduAKYc4ZbDBo3JN09bYtmExWzCfLJgdL8l1zvpan+EwY3tjg7XRkHZVsZxN2FofcWE8ojRC5i19I6wPelze3eHaC5fwF+DWnfv81uf/hM9/8dv0BruMx9vcuHaF9XGJr5csF1OqecWqaljWLaO1AZubm+Q6JwtCT2l6Sih7Bh8sjbe0AosGjmYr3rp5j+XhnM989rP88t//NY4ObmIePmDbZMwmJ3zlte+wqhvW+32efeYaNy5vY08PObx7gMgaZjggLxUjcQxDwC+XWAWrAC5kOHrMa3jz5JjvHR4wayzewWq2QJuc7csXWeE5ODhgqDUv7V7i+YuXGOaa/ckBx8sp1dGC6899isEv/jLfvPuQm69+l8H0hEujguLCiI2nnqZRJbdfu0m1v09fVmytjyiLnBsjzeUB5MFxuHK8OQ3suQIZrrO/dxc3Pebq+oBxUfDMlW3Ws4qs7PFwbvmN3/8TXr35EDNY44XnnuXq9hqZnfPS9R0+cf0CwywQWstk6Xn0aMalrYs0SvHV175NUIHMtrywtsnz169RjEpuHx/w6ptvobxh79Eph5MKXw65+omXydY2mFcLTg8fcWV7ndLA4d4jVDHA5gNuH5wyWc4YmIYiaG7sXOHp9QEvPr3Dg5OHfPm1N3h7b8bW+i67GzvcuXWPezNLm5X84lOb/NVPP8v+6RFf+86rrF3c5dOf/SvMGsfnv/Al5rMVL7/8MmWu+da3vkK9nPM3f+VXeP655zkKnusvvszV3acoQ44oQ1tEgcn4wBTHiWu5okoyr+JqmUSMn1hCCGAdIprp8TEP794D57GtZbQ+5vJT19BFDt3eQeV5JyQIwQWCB8kl/k5AnKd+dJ9enoGXaID3B4Qsx0eFHRc8zjkUkGcGO6/Yf/sBaMv6M0NUWSC6xATQPuBdjlZ5J8DvMX/wKkdvfpd1HPOjE944aRjubLK76RgNKsRNYbFg/cpTEMa4RY+TmefwzusMNwbcu7fPw/09rj51he1r17j5xncZugV9lbO7ew3RGao9QtXvoNdL7PoGZnuL3ugGr/9f3+B3fvNLrGzD+uU+n/qZ59jZ3eJ3vvhlTltFYwqGRcalYUlJxvRozsGdUyon1EXBid7gKIwZXljnn/z6f8jVdccXf/v/5U//4GscH5+yfXmN//y/+qdceeZlYBPYJCB4D16B0hbBIXgEA97Eje6Zz+hH1Gec6/YnRAfQuVPqB76B97Wn3nXMf9HjD3F7iAfRFUEs+DIKQQC6IvgaT45yBcuTJbfeepWbb32L0XiNF175OS4+9RToOZolbmU5un/Eq9/6Ll9//VXeufuQ1aRho7fkl/7KJ/jVv/uf0RtfQTqH0ceJrhnf/ZxtMUqjvHR/FKrDY/7g81/gf/5f/wWHR4f0xwMuXr/Izz3/CZ7prfGdO2/y2uE9ZtWKKhNsL2PgFANvqDV4HfuN1posM2RZjjEa53x0CiAY0wkVEseAKEOZ9ynzElCIAl0IraoYbwz59E+9ws9++qfZ6K9jvI6OJxQfp4XqyeEk5090Ay2ciQacO/FEK1zTMts75NYbb/Ht777GtJpjBhnDzTUuXNllPB7zzDPPMuoPMWhMJ+BBy6peMlu2PDw65fY797j7zm3uvPE6t1/7Jif377Cwc9wg0PQKlo3CiVCUBXmRsbk95vLVK7z44ks8/8IrPP3My1y7/hw7OxfQeXQIBnEILYYMEfOE8PTRITw5j53rLIEzlVMC4MDNVjy8dY+7b9zk7Tff5vbxPhNXUzUtddNgnY/OahE8jtZbnLcgHlGBgI8f2YKIRpTqIgqiQG5dtKv+9b/63975Qcf5YQkY94FrT/x+tXvunBDCPwf+OUC/XwaRgKjQKZTR0xyAxloWVYWagm1qsk6swEhnpEcvtjfETYDuxAYFSgSjM3LpUfQ8Zd8ybi2rpma5ClR1jfU+TmDBs6otq6piNluSm4yiKBgUBeN+n7IsKUoDWYY3A8haUCZGZThLcC0mCEVuEBFWVYv1LTqA6F6ckLzFuYDSAuLjgOuiByB64P15xIVHJKC1QilBd1EkAcEHUD7gXFS5nHd45/G+wQUX13gTvd1nbVBkOTrEtgsh4BqHGCHXikG/R89kDHslTdPSti3BN6zmjnLQoyij8h48eO87h2WMdNCicL7F+QYhYG3DcrEAE4Wjtmk42N9HK8N8WVHXFd7HTZ13nczsH0dLnEdfWBufC4LzrhOkXGyjbrXx3lFVFSKBNtPYTLN3NGE+XzE7ndCulpRlzupwwtwrVG5Y1Q3BQ5n3GZRDgilRasFwOKLMMjIMJ7M5D44eYXLNxvoaly/sko2HZOUIk9e0IUaHGK0xaJx3BOtxwaG9Oh/459E/8eKCCC6AdY7WgegotFlncSGQax299s5h2xZRBpAo3vgY9XPmLTSicDZGKeCif3p9PGbcz5noU2gzRATbtKyWSxaLCm8Nnrghz4whE83KOaxtQOU0to3qqVKoLrIoBEFc52VTmswYjDEEBW3weDxKy/lDG4XJDHmek2UGQpywrIWqit6dIAEVhF6es762Rm5y9h894vRkSbVacvHCOld2thiP1imzhnzVohdLpospnsC4HLExGKGVwntHXTe40OIlgDFRTwS8c/jYPLStpa1a3HKFLSyawNVLl3CiuHLxEhd2t5me7nN0MME7hRYwPtBaj1ZCLkJAEVSMOsEqggvgHRpPT6DfH9DawNTB8WzGnTvvsLGzw/XLV5gfHfNg/4BchOdvXKPxEILQBqFBM+DxntYFcL7znrrONurmR600ymictzTWIlLQL3uU3qLCEnGeYF0UcYHGeVoEi0KynKAMrXMoU4BoDg6OEB8o3A2ubPbRYpCgUSGABEa9jGWxYjWfMqkbmrpBcsO4P0KUiV5sD4XSjMsem6Mtcp0zXd3haHHCzVvfY3TxMqYs8UpoEdpVzaxqGfTi4t84i2hhY3OLajKnqmqWK4X1njzPyfMcBIo8Z3tjndnxhImvycab7Oxss7G1wbSac3J6gs1M3MyEGGUTAty+9Q5ts2K5aDg9nfCbn/88y9/+Dd5ZzPnpX/x3+PV/8Ov81Iufpm1aXACjNKKFxXLFbDbHrxVR5U58POjE/el0yt79B+RZzlPlM7S2JSgw2oBSrBYLTJaTGYNrGmyATDLEnBlxClNssawbdJFTFCXBCMtFg8qEfJAjKkYchRBtb1MWFMrzb377/+HaT13j6U8+z+6lq2g0WIX2AYIFHG624Guf/zJv/MEXeHZrl0wbvnr722w/lTP4mR12n72OdpqHt/ZY0xtU80cc7jfMmpK3v/kq02rFvWpJWQovv/g0O/2SveBZrVq2L22gC0sx7mMGV8hlDakn4Fvs/oK3fv+L/NG/eZ29vZom78FozNf+8B67vUeow8BAKfJxzublHQ4fHnG4d4CvDPNHUK9q6DmqXLOwE7Yyy+TmNzmY3eSrX/gid25NIFvnYj6iKMcxvCPEfUnojMUzT/VHAZHHUaBP/vsHE+fNd23+z//xwZ1PEAjndqogQYHjPFIsaLAqUNVLHr1zl3vfu0OpGj77uc+xcWGHcrRNjEJyLGbHvPm1V3n1G99lumy4fv0aL738aWbHC6R6yKVLI7TW3x+N9DHh7Mo8aShrpeN1PvMaiuL44IA79+5y+dplPvsLn+O5F57l2U++wNWNLaavvclre7cRY+gNBmS9jDY35I1Ht0KmAXMmfuluX68JIe6xtM4Aut99F3WqMVmOyeI+MDo1IYS4Fmmtu6jUaLx/3ISlM35YpPrZ/jqajSHGaAahqmsePdrn4f4+0/mcOrSs5i0r55AioywHNE2LzeLeuXGe5WLO/sE93rz5Oq+/+Tbffv1Nbr/zgPlkQj09xc8nZG2NCQHvhdYLg3LIYH3MYK3HS598np//hc/x8qdf4eq1p1hb3yXLxkBGCIJ1UWhR3V7yoywynU2/ZzrGmWakIEYIugC1ZXZ8yt07d7h1/y4PJ8fM6yU1DustLvjO9d5dQSVx4pI44gIQRBMjvAPqLDpJdBd9znnffj8+LAHjq8DzIvI0Ubj4j4H/5Ie9wQeHc9HYCZ1RJD7QOktoHNY1rFaG3MRBW/QKtIlh6iYzOA/GeZSCLItpDUo0DovRmrzI6Zc5uIaqFpZFYFlrGuexAVoXWFY1dR3Dk9vWsbIVy9ozWzmKXkveayjKksYGvMopipyyyAm2wdYeEzxFplFasaorPI6gPMqAyQxKhSgAEPAu4Jzv0iJ8l2YSjUbVbbCkm5REOPcABB6/BiWoAJkucMHRupbWNgQlZGiC0tGw7ELQRIcozGQFbbDnaQHKQG9YsDYqASE4R1XXLBYrqlV8aKMxRY7SOobHGRVTApTGi6OuanxraaqKqq4gU9S2pbUtqjPKq8biXBdB0rb4IChRMdyoSz3wEicHXOz0cWJ/nJYRQkAp9TjdyDtCcDhvECk4Opkx1xqDILrEoqlbB7Un2JbJbEnTOnLdMChbVNHnuKqwtmEomlF/hGjPyXTFYrJifzphdrJgc3cHl+c4nbMC8mgVd4pqNymJRomiyHNC29K0zbu8N54YqeHCWcRUTLtpmgadKVRr8YXDOY91DkHhg8QUgeDj1RdiwFsnHhUmI9dRKBgUBeV4QN/0aBvwJiA5NNaxXC6hyqnbllXboBsNrUWftacEnIALHusChUCZFzHNxsX0F4JHutjGIIILUYBTIufhYCKgurQYlWkyQGsfhcfcxHQkAsE6CMKFzW2ee/Y5/M1HnE6W7D3cYzk9YX5ywu72Jpub26ytDVE6h1yxWs7ZO93Dr7f0LuxglMIHG7835oChA5hOhAlB4b0QvBB8oFmuqJp4vetqycOjE8r+iJd+9jMMtza5884D7t5/SL9oGYbAeGMAeELwrBcDdCZYH1NYtAeDR7sG3daohaXI+6iyR20bjhYLTvYPCXXL7sYWzWLO67duMq+XrI8GEAxVC3XQeFQnCMZGdN21986fC7uiJG5aMoP3LS44wJHpgmFZsrNZ4m3BUeOjt1hplnWFIKysxwaF0jlBWbKixGQFRa7JsxKjC3pZiUazmlfkPU2uAuJanrmyy8P7R8wmE4qyx3S1IvRHVLVjMl0iRtPLci5ubnJhbZNenjNZLTi9eQf8iuAb5vM4VpogGJ1jtaH2XRqS0dAGiqKHyyx1Y1ksK1rrmExnLJdL8jxHRMiNoSwyytxSDgpGowFFWbC9s814bcyj/X3u37/HxoUrDMo+y+WEt96+yenJEVev7GBbz63X3iDUFXWZ863f/zLfuP4yL+zeIBsOyYEQHFZMF+TZGaueD9L+SHyYfJ/L7vE/g1J4axkMhrz0qU/x9I2nEIThzhamMDH1Uxtc3XB6csygP8Ssr6GMIQuAD9jaQheVKb2S2cmSQimKYUzlc3hMXuC87zJJPJ7Y/7UO1OEIky+4f/N1RKZsbRh01gczoAsbBXGcHNzjze98m5P9e5RXdxiMMtZOYWNdceFCn7zMOHznAZuDMfPbd7lz+xZVNqa/eZnxoGa4ptD0ML5hQ1UM6opNcrKd61y6vIHRFdkI2qCpmm3qhw3twTHbl6BXz+iFKS89v4nZ2GB9t89TOyOG9ZLjR4Ym5IyuP8Pceb43PaaXD+j3NqCA+eyEeZgzV551rxjUU17/3d/Brx6yVbeMty6gyjGffPZZ1jcvRGvbeVDQtgGTPSlgPPngRz4GY1qn+vMJGPj3Oc4zg+WDETPOnaLnaSIh5jsKBOc5OTrk2996jenhgqsXLvP8szdYv7yFVA6U0K5WHBze5k+/8rt84w+/wrC/wa/9rb/DjU+9glYFq0nF4d1vQ3sU0x3+wkf80eW9Asa5eKG6axVgvD7mZz/3WX7lb/4NNne2KYsCkyvcouZB07C0FtEZmVFkZRHHvrU4HCbLEaMfCyMCQjTegvcoydBG4X3A2pbgBa1iWm4koLVB6WgrGWPIsgyl9HtP5ePHe+zXs2wD33mwzxPbfTSL26rl4OE+9+7vsXd4zHRZgRGcCxAq+rOK+azi9s13yMTQLmpuv3WLN773XW7ffoc7Dx9wdDrhZDqLqa1YcrHotsKoll4/ZzQasL27yzPPvsCNZ5/jqeee5cq1q1y5fo3x2np0EAUgNKBiIpE+mzsEQjBnyUUfecJZEBJRvBAPtAE7q5jsH/Nwb5+902NO2xXL0NLiCQq0UVGEsB7rXdyPE/XAANEzB1GUk3g9JQjexvR9532XevX+M8+HImCEEKyI/FPgt4lT6v8SQvjOD3tP9MpbnLNAzO8SDd4FrA+0bUslDUYrJIDRMUqi18sp+wVFkZHn0WAHH/PxJaZ1tEohPY1RoLEUBqRnyIyi8QGHsGpcZwRlOB/z06312LqhsQHVWJjOKcpeFwVgwXtyrSmznEIFdPBkJhra2giusSxWDtHQ75VkWUZZ9mlti7OK1rYxLcLF7xPpUmBU9LCLikbXmY7VpVchgBbVnWsUBJTKzt9rg491EM5y58THwaM0ucko8wKjCpxvIXiMAqPBiEcEylHJyBWsjYdUq4bZcsVisWIxneMkoLIMMkMQTWYURnq0XtF2HU0ZHXPHjSbPDL0sR0Qx7AdWTcuyS1NpWovzZ92zG8zBd2k9cdNgjEHrDK0tbV13tUUe51XFehJxMi96JUJMIerlGiMQxFMUmnI0pHIOu2ypmpqm9azsCirHrFqhg0f1epTDMaNhgS0N82pJu6rYOzrl4fEEKUuKomR7axuMIQi0bYsLgSzLMEZjlMYS0GIhnEUB+G7ghlhHQ4ihQ12whveeTPIYOus9LgSsc9Ho7gQDj0NUeJxmFwK+jWqQllgfQAfQIRp5SjSmp8kGmoVzHOo5tjuG1ofutZAbQ08XSF6gJWNpa+rJirZt6WWBXBskuCi6BFBBEC0oE/O9lVb4EOtyWNfQtjWtbWhtS93UaNPVlhBFVhiyXkYI4Fzg9OiU1aLi4s5FxKzx4MEh+/t7HB0dMz065PhgnavXGi5dvMp4bZN8ULAse5zun1DXDW1rGY1KjMlYLif4TnwLIQp8WWYwJkOrnEzlGFE0TcVy1RC8p1rMuHnzFm/dvMfUeX7qZ3+Gi8+8xOks8PCdfR41j9hyGzy9uUGmFKug8I3Feo92kCvDoMgZ93LWMo1UkOlYe2Q4KJE8YzpdsH/3PpkNjNZG5GvrHMxnzBZzNodr1FYxqz2b1qMCGC1oo5EsQ3WZFKkAACAASURBVKmsmxMEbYSY0955WnSMskIgeIdCMeyVbOkxs6MpwXkExaqu8R7mTcOiUehSgcpRpkfTBJQYRoM18rwkz3oMyiFYCE7h2pYiV4itKQtNWWbI0iJ5QaMUXnKWTUtpHbrQrK+NyRWs93OuX9pif3JCeWEbPyy4eW8Ph6YZrdMbDNB5iQ2KnopzxHzuqJsa0Ypq0fBoecrJyQatdYjSKBWQ4FB4MiVk4lHBRkNvckI57PPKp1/m6Et/xM233+Kz21e4uHuRyTTmqU4mUzY21tnZvcy1S9cYNC1vTo554+Ejfu//+Ndc39jll/76v0ve7xOAihj9sTHq5ln3gS2PiR8TZ5FwojWiYLi2xmBtDVoLuQETt5TBxe3a2vo6uclBFCrr3u8CoXWAIAq8EgabY1QuOBVQGgbjDKVd3LwSRUYtlhgT5dm6BNtbjhzNcLXP6s7XyK48RZCSkJcYBWG54K2v/h4yPeTiZs6Np9ZxRrG7vMi1q7uslxew+zX7t44YmQFlFxm3Ws2oju8zGFiuXr/E84M1Ht25R7GoCEdHXFCaWR04fXhAr6hpH+1x894UlV1jV+eoY2GVNVy5cIlf/pxhJpBtDbj49AZr17bh+IhLdzNcrSgvbnPr7fs0g5z1zYsM9JBSZ6j8CkftMbdOKh5MAmIy+lJz4/qzXN26gq0NejDgymd+GhOgXtZIyMj6ELrU2MfmsgD6/dMyPkTOHCbvFS2893+GkBH3KO8WKmLU7ff7+///yQLS6SRRWBWCNgQ0wQds0zA5esQfffEPcFXLZz/zC1y68RS6FAg1oTDMjw/50z/+Y/74K/+Gt9/4GoWHZ37xKa48dZX+cICzwvpOiXEXEVeS5Vk8hSfO+bxu2cfE8y/v+bd3vts/x+cGuzu8srWJyjNUCLi6BWNwUjOzNT7T5L0ejYCTuLnTxpCrjKAN8mTq0bmLO0ZyiSi0MtFJ7WNEuHMerIXOcZFlsR6dx6POhJAuifzMqfU4HOFjwvuMe/eEoHleSkHF/t8u55zsH7H36IDj6YxV3SJogopjdzZdcP/eA2zdMDuZ8OjeA179+re5d+cuy7qlRfBoxGj6eY5rF2gcea7Z3hjx3DNXeekTz/LiSy/w/Asvsnv5KuV4nbzXiw7eUHXHpgGLhJYgGQoV9/hdtLnKnqxb8hHkLEAeYj04uuAyG2BRMX90yKN7Dzk4PORktWDqG5rgoCuPIAJYwRGwwaEDMcK8i7gXJVF79aEruxAtHegi/UPoagC+/yF+aDUwQgi/Cfzmv/XrxXePgD9bAEQQ06U8dIqMJRbTo7ZkEr11jXWUZUHR0xijsJnvigtGdVIpBVWN045CuoJbSpF1Hcgh9Ac5w6GlaizWQ9NYqlUslOib6BVprMPVNSIB5yxLW2OwZKMhRsWG1irm8eRFD1W3LJcVzcmEU5nR6/UYDkf0erGYi8kLtMliQUHbxjoX3cWynWChBVToCoSdTXgS84S6EqQxvUIE6RbWs9oaRkWDWinBag1eusKjhqyLYgihRSR20bPiiZNqivdCkfdZX1tjbbzBdDbjdDZhZWPazaqqOw+qIdMZRWYwBLI8J+8V1N7SBEeRZYQ61q7oDQZsbZXMlxUnkwkn02kUJBRoJTH9gsd5gtZGqyHWOdE4pbqOTRfZ4JFcyLqUhSIvyE1GNVvQti2j9TV8sFg8XnSM7kDh0ATJENEUOmN9kLGqVxwu57yx/4AbYZv13pix6XMcTnlYNKx8jD7ozStoj/HasLa1GQsqSlR3rY+il+tSoGKsRFfoNQixSmEXOkXozjUW7FQinYh3ls/HYxVSBOctSsUolbip6gpa1g02t5SZItOGzGhCL2dVB/LM0C8KnLNkJovFVZVQuZYyBFTr8XVLKDL0WcHWLC603jlca8mUialROkNCV9xVFMpolI6fqXXMzTxTV0KXnOtDLPZWNQ04WB/3ybKsK2wZcz/n8wWLZUtR9Ll+42k2NjaYHB8wOT1kOlvw6nde58H9Q67cuM5oo6RflqxtBFTj4veKwrs2zg3W452n8bGfaOnC0bxG0GilwMfcdaPhuWeeJV+/wOtv3uG3fvcLfP4rX+PGpUts9Mb0t3Y4mJ0weXiAqxqujUfYoofzNeApvLBWGvq9gq3xiOVqRc9oWjSOlkoKTJFTSs5CDI/u3WdRb7Jz9SJlL4PFitbCvIVZG/CtR7kW5W2M0ELwQRF8HMtKRYPpbMFzwcdUoNygFXjbYGuQYhCjZLrFIojgjWbRtDg1YLqsqR1sXdjlwqUJR8fTWEjMeVzrKMsh2q7QKNp6SWE0lpYsjwX8WgLSK7Ba0SjNwlsG3qE9ZLmhWVZICPSNcGN3izAqObUWt1rgpGA5naG9om0CRSdGax/rGmkdU5MCltVqxdHxKa1unghd9ti2wdsaLTHlyhiF9S1Kw3PPPcPJYkHjDYpYgDd4KEwR07GUZmvzAp+7ep3rSlG8+g2qyYJwfMLxnXew82lMFSkMXgs9bRgUvSit/tiqRSU+SGzbxiLdSkPrOsEziujOubjOKoXShnIUUye75THOcUrQuTnfVHkVKNdygsS11NNE8aJdElZTkAYpNFRzgqtBe4phyzg7YW2uuaKG2LuvUrtj5r0R21evQ2tZvP4dirvf43NXt2gdnB69w9z3ODmE5WyFv3dCbivuvj1he73m8sUN8myAm80ZjUdc2lijqDVhnjFcXcDOCu6/9XVMWVJnA473KpxdsJrNOFlCuTViY73PSCu+/pU76LzH7uY6vZ6j0AG3mlLdnuBPZ5jQo3ZwurfPICheuXaNngFbTejlOflGn3zhmTiH6o0Zr1+iVA2XhtBXit6opLy6RdjIYvqoaDxCJpBlGh7bjN189+Ozys4LiD9hrP9Qg/3dysIPePCev/1FeRwl0DjL/uEhe3fusnfrLX7mk69w7alnYlqlhkCM2pvee8CXv/CH/P6XvsTx0V1yDRujPuNBTpZ3dRbyHKwlyzTenaXFfoSNrQ+B88K+zsd9g9YoZXC+RbIcpXKCDzy4fZu3791j0bR4icW9BY0RwWQK0+Xyo2Lk6vnnd046BV0B8q5/aY0WHZ1WImQm69JN4MyiP0vDblt7fsOAyI9B6fsRc3a2Z6kNPoARQQjYVcXJo0MO9g44mcyoncd3ERCe6HA8PZ1zuH9CtVjw6P4DDh/scbC3Dy7Q6xkUjmW1oKlbjOpRFrC1tsnlnU2evXGJl55/lmvXLrK9vcWg3EKCjnaUzuJYQxEllqYbMop4dCY6mdGx1sFPIkGgccwfHXH35h3euf0OB8eHzF3Nwlu8eEzobhxBLKov4tGds/2sd8YCqTHKKQSJxfGfuElETNkV1Hm4xg/mI7MtC+Hdi4MPAQnh3EgRrXF0OWJRTyMa757lMlYCb9uMLFesurzT6BWPYVht46jEkSkXPeUm62oM0N1dwaJCoKeFYIRS5/RNvDNDaCwgNG38GQhYG1dZHXz0UDuPtRaCwWQZJu9R9jzOCU1TU7eWtl3SNI7hcBiPK8swShFMQaZzXPB43+K7dIEg6nHozlk7QVcvIhr9IgqtM1rbdvUUYhqG1tkTBVE6Q07Fu4WcGcAimoBFAGMUPRND7qenFYiitTWz6RSRnMxkXLywi9OeZVVzOJlgp1PqaoUNdfRMuS4VhhxnLS5Y0AYtwnK5oixLNtfX0XrG8ckhtq3x/kytU0+Ea55VZ/Y4B4LFua5uRifSxBQSi3MG72MthEwrMiVMlnOsOHoXNhFjOJlPCD6e53k4aIiREEEpiiInzzNCplHes7f3iBNjyHsZK9sQTMbmaEyRl5wenbI/n3F0c87OYs7a2hqDwYA8z2MeourCiEMA57s72nThp1rO72IRHSeCViouVs5Hz2AXRqUk5pzGmijx/dZaQtcGSoQizzvVPXRpHEKmNUhOEyxKwASJhrxSBBVTpibzOcOqh7KWernCN5aezmgzhbNx0Ty7q0zwDufaWN/CK3R3JwjOjt9oekVOlsd876AU2kQRJMtzskzhQxs39wIqy9B5ARpGwzV6vSnLxR6ny4rReIPNrW0G/R5KRU/EdLLk4f4BlfNcuLTOzs4G2glZp95aa3Gu7q7t4xS7s2sd05NiqpQWE4UyEXqZZto07OzskA22qF9/g9du3uLkZMaltW12N3cZbV9gvprxzqMjFidTXrhyhbLIILR45+hZR1HEov+9XFPMHUZpeiLkHgbjNSqpYVkTBkNcCDw62OfyxYs8feMGpw8OWdoFTVDxTidNDbbCuwbrSlwbwAbEx7zqoLqlUAkiGkyMdjKZIcs8fhmvlffR0+u9Q3c50q3zeIkRGVWruLC7wysUfO+NWwxMxqA/QInC1RbrLFYZghfqumZtbUjtHI1v8VqogkMHz2m9IlhhFByFNgx6RVTnmxoTPONejteaqm7R9YqyX2AXS+YWmlVDvxwg1qG8w3RRY4IwHI3oD+Jifzo5ZTaboaREi8a2DW1dYUTFdD0l5GWB9548z3jxhedYVIF6teTeO3dYTKe0bUOeFwz6A0QZZs0KubDBeGeNl0cvs7N9mWc/+TStneObDMljKp0WyL1Cgokq8l+yDfzHibM9kDammz8Bo2hWK7xzlL2cQLyzlunWTW8dyugudzc89kjZLp3O6BgmrohuEGlxzRx8RZif0M5PaE8PkFATXEvdLskGGaPdPj/98y+z/OYd8vUeZC2T+QN2nv4M5EtoVizm97m+O2bzwi5Td8B3v/Z1Tk4FN8k5Wi7YXq24fmHEpbUxOxf65JlH5zkvjJ9ibes6i3u3+O43v4PJt9m4/BzFhReZH09ofYu1wnIV15FchMtba9SZ4mRW0UqPcvwc+MDJZIYWmJwsuPvmHT71wos8v/sSy+MpvqlY2gXj4YCNp7fxYcnitGY+a8hDw9yCI2e8tsnaeEA/U6BOmdQtda5Z2CnMTtm5MSaTId7FGgA6e2ITe7bOfJ8A8KPhveLFe59/kseV9uNdoZpmFZ1YH1KIf9QTAkH5c8dWNTllurfP5PCQn/nMZ7myewF6BYIj+Jb5yRE3X/8e3/jyV3n11deYzWdsr62zNlBsr5dc3Nkkz+X8LgwoKEZjrKvOfPzfd74fF57cX5+fp+o2E+rMaXi258lwbYv2gm8dJ6ennFQLWgmIyTFGQOuuBn90aKHk3faNj2HypoucOkszhjMRo4vE7v6uQrcfsxBUFOedjWP43Qbex3SNOhtfXcTFmRB0LnB2df2O9w545+Zt7t25x6quaEOIpWFcAB9obaBtV9imoVlU1KuGEIR+UTJrWpbVAqti1PZmf8j21jprwyEXL2yyvbHG+nhI0AXLyrNcORbLhmAW9I1DZVAQCHR3VFIq2mA0Z4YbkHFeaPcjnUHyOEJMwlnFDgEfqJcrHj18xP37D9jbP2C6WlJl0HQR/KqLXDu762MQIARa756YN7q51ROjjLU+b6OziPV4FD8BAkaAWK3UP7FonHmenY3hUjp6Tz2gTUYWAr0sIzMa72PBx7ZLSQjBn1eLPktDMFnRbeYtmTEUuSc3HqNj0T8dQIuQmWhwigHyHPEG5eLtKetWxzoOPmCzKKQM+j1Gwz6I0NRVrPXQOkTn9Hp9QohFNKPxHYWOyXQRox+6iI2syCl7PUxXP0MTBZjCmFhMzztsa6P33sW7mXgPQQKZVtjGxpoJSmFURutjmHsWYqeLdRc6KaSb35zzEKS7PWV3J5dMYXSGVhpnPd4JTU0svBkEk2l0oSiLjAubG/TKksVihW0di8kiqmresVouqNqGFocKgUIynG1jEc7gu1tkWiS4LvwrTkAi6tw50boYQqe16vr1Yw+IUkKWZeiuICl0dy4JDqzFiMVIQHxLmfexZRELR2aafi/HOU/benxrqW2N7uf00WyMNxn1Cu7eu83+5BhZalrvsI2jp3uUvTHVcIQeDtDecjI55dHBPuPRmI31dYbDIcPRMAosPhbi9L4TtgB5IlRQK93dBjb2U+8sed6LBQQDnfChuoiMEKNobEzVaJq6u91plz/ZFdiyzmKdjtc/OKRpkSJeX2MMVoTWW+bVElc3bPZHmAsXqJuW2WqJ84blcklTW3Qei4AqbfC2Pk/r1ers1qjgrAMfOsFC03YCmvOBurt1nwueoigodIHJ8mgQ6AzvYr2I69duYPUW37v1iNmiom4tRSbsXLxEfzhkb++Ihw8PWbYtp9MpvTInF03uYGoM2XBIkWma/4+99/y1LEvP+34r7nDCjXUrdnV3dTc5MxySomxJhASKFiDZMPxF3/xnGv5gGJZhG7BsSDApUuIMJ3SsHG4+ce+9oj6sfW5VD2dGJtQjNoezgFu3zk3nnB3WWu/zPiEEIglZKaw1KFeASsFoypdL7KoWqmwqkmS1WqFkxXR2xIP33ud6CFy+OePxsxecvr7gwSePuHXvFq2xbE7P+MFPv+T2ySH37t6isQ0uJbaDo3euUJ+jH2NRDSoEbExoawhNg9WG2BqildSVLQZddcUALLqOMHQMi0tE7InJ36QoiSzQUiBkJkRPoIAX2lgQxcizJ4KySCOQRpV7XZR50HmPc57ttMHFCbaukDHhg2c2m5Wi3jsAjNIMg2N/2iJyKAg54LxDKE0zm9BvNlx3PUIq2iTZn05QbcNyWPPq7JR9XTMzhuODI2KSzI5v0a57vhRfEIYB6ACNDBEDyBippSQNA1YpkkrUpuZkOmNvrrnur8rmToG1BkEix4BAE8NA123xQ4l9lZVlbzqjruGLx695/eIp2yFjlOHB/fsIITi/vOBzv6ZtPF8u35DqlvXVK776X/8nPvnyx/yP/8O/ZDK9i0CgskS4BMkQhES39td2f/h3ZYjRt2mHdNazaekCjSD/1dUVwQfu3LpFiJ711QolJZPZHHJms1hxeXHBdNIwPzrC+4ypFEKOrLNui3BrxHaDXK4Ynr3i/OVT2mnFZthQ7U/I6jZNVSGmE4JIrJYLNkZzdXXBNE1R2yW+X/Hm6hzbtuiJ4tbxLeY2M4SO1MCd/cTBzLE/qTFq4OjBHRZXS7768gkXp462H7h/fAfZtLzo1uTrgb0H3+P89Amr6FkJxXTvkIe3HrBZdrxZZ8T0Nnu3P+aDOx/z/N/9W9bbF4h5xtuB9rDGNp/Q90cMfcVsBovLLzhbn2IOMlfDit5KYlVzMDvi8M6H2PsV0uxzdvYC3cL+8Rw7P8ZVh7zoA7fuPwIzRdGgtGFnfV+6lbsxbvb/Bu+7/7TvRRl5NFR//vgrNpslD9//gOlsPrJev+E3IIrXShQJg0JEQS0MH9y9z0cPH1JNWoQSICPdZsXTzz7l8x/+iKvTC+qq5dGjRyQCViYaFWiMKxJBKUAoEgopAjmBlhVF75rfYcO9PTa/LuNrEJl4R8a0k31kQI4eWEoilMZdLnn67AVLN5C1QYwSZ1JhBSStShd65/c07ll3FPny5+XN5x2wUQDS0qBxOIy0xWctJeIIkqVcEvkK01z8lXPz6zN+BkCEr80QcgSbF5eXPHvxkucvXnG9XNNFTxc9ficrVmJk7EZSyIUdPwSCC4XFoS21EEQlmEwqZtOGtqqYNC3W1EQkWx9YdAN626HskpgjdaeZ+gmdG5hMpkhhily/ChgbkSqNfeTCyEZIcvpbcK7GG0KkzIjTEzcDy7MLXrx6xYuzUxbdhiFFXCqqAStVcc2/abblIrsOb2tUIRQiF3uEd5CKG67du7HCN06ev2B8KwAMeDfKSLztxCNGALScbK00meL/UElJa6tRjgGIYgLqfE/MqXgTxFgSO5TC2oAcHeoREd15aqVprKUyCqMURkmslhitR0dUEDJjR+S10obGKHzKbLoBHzPWKCZ1g60relfjnMOHQEIjRjCgrsrJCyHgvSeMJpbOe7x39INjs+4wVlJVmqay1LUtJnpKjQViQWlzDAVRzJBCKpNpKguLHCUKKhbbsN1kmMZMXhCF1bEzU6GwXDKSFDN97yDH0ahRopSlbmQxH43cGAj5fiDkhFGKg705Uii6ZorrSzStC54cAz46RAKhShGbUsINA01TM59P6YcO78s5Kn6EZVLOYke1yzcsBRRE8ZY9orWmrisqa7BWo7UiR48QmWljMUqiiYjkmbY1sqnYxqKhJwZSiMSQkQ7EMACw8QMRhzaKo7albho6Es8XV7xZL+hCBGHYO9ynsoq1gGFwrNdrvPOslyum8zlN02CbepRiFLNWQVmcfCgpL9iRZogqhaMLRXudSkfFSAW6eCCEGPDpLUK/o87pkemQcsLHkpgRki5MnlzABd/1dIxRfsIUI1GRS6GN5OTwsJjYnl9w2W3plmuGLiBqgZUW1RYtYMrx7Twyxt8KcpFsDB6tFHVdvE5iKkal622HmTXYpkHLYg667QfmvUNKRUyKpt3jo4/uUe3d4/Gzl7x4+YzL5QIlEsYYDo6P6YPA+4DU+oZVEWIi+AKYVLawnrabJUYptKkhlS5pTgkxdvcZ7xOUGgEycL0jxw2z6YwP3v8AjWAtrxg2PT/59Ke8WVzwnYfvc3z3PTZnZ3z58g0X6xWP7tzmVlMjhURXNcpuwQRkEoRhS9huyFXN/uyQ7dUCVRmCUthJy7yuC9ghMkPO+ATr60suXj7Bb66RWHJOpdAKqUjDJMQcSKMcpngFla6QD54uJny2CCMRGoQCW2kMkqHrGbZbuq4rJqfW0l8PrLfFV0VpUEqUa4aMNgpNpneJECKDc/Q+0fU9zjtCjmz7LYOuwGgc8OL8gh/+4Afcqqf83kef8N7Jbe7daZBVRUjw4Gif0+sNy+tLmCakssRhwFpNbQ1GglECURmsMlhrmc8mtOsJOYNz/sYQN4/X4G4js91sOb88Q1eW+f4hk8k+80nDrK3puhVN2zLZm5NlhhxK0oS2DJuexdWaV2eXrFZrnv30C/7JJ9/jt0+OUNogCCityZ0nxIye2F/N4veb8asb77ZUdxv83dfyTl9bWHMpZS4vr7m+uuZgvofrel4+f8HB3h7tdEZyA5fnZ1xcXKD1CbOQcJ0jDQpwNHNL1czADYRlz+qzZ1QhwbUjeoEWmuvlNctFx+07dzmaHyPnFfv37mNfv+bln3xGOjmmwrN8teLZs1Om5oDJpKSQvffBnGuRqeoJ79+qMU3Cu8jyOnDY7GPTEQ+++12UbNg8/iFHdyY403Ayucvs0fuk4ZzmaKBCcH96hHeZw8M5e6s17Soi5re59cnfx58n9j78Pg9Ofo83Zz/h8s0X3Hv4IbOj95Bmj7yNiAPL0X7i2bMfcnF+iTmYcfuDDzGTY6wsXjszOQd7yN7rimH9mqpymIMHVEe/xQc0qPoEaCjb0Hc29OKv/OdbP3asULLk7OyclALBR3aRljswuBT83wybRIhc1rhcmJsFjGvKnw6ZLBWL80s+/cl/4M//5N8gQ+Zf/LP/jqMHD+mXl5y9fs7Lx4/prt9Q6Q1NUyFVSUiIY7ElpCYnXVJOfk3HrnD6pT8wjgwkMTImQ2S7WLNarRlyRtoKEwIxebSQWCnxJHwMN14aeVcUjpGqQklCoRkXMq0YjdSDh5ix2VDpGiVL2khKO4Hpu+PXiw3zs2NX1O4Ympl80/gUuchfV9dLnj9/yeMnz3j55ozFes0qeaIuqW1CFhlPcKGk941y45xBKk1d1xitsVmTpKWuFBOrqJVAZkOIGR9H+XFwqG5Nko7OL6m2homfc3G1wtqGqqqp2wmTSc9kMkWbDq0bmma/sN6zBKG+1bNb8QXOpTEkRCnOPbj1luurBa8uLrnYrFmGIq9PSY5k8BJQkXMuhvNSgC6EhOKGN0bdjpesHNn2Ymyw55RKMZjijXqgsF9//vhWABjlApU3qEsxpJHjHiMj8zsuqIy0eyURohi7KaWwtkLIihAs224zRm8GnI+klOn7gewCWZc0ECUkQUZc79ESaqOxI4BhtS5sBClL6oNRyCxASmxVobIgJEEeHDkVKUNOhsoY6qp4K3QuYH0i1HXxKoixgBveMzjP4B3aKZzzYwJH2aQ7N9Ctu0JL15K2qZm0baF4K43SBhkyzkf6fiD2PXVVleM1cuelVohcpAoZQJYkdaQs2ispsHVFcpngHSFlTFZoaSALQvQl3UMFlCpGqUoZlIQhDAzLFV23xaWSEqKVQUuFmbTUTQ0Szq+vOFtcElxJ46irmpgC235D07bMJhM2mw191xFDMa4sJpbFlCjIt+YtO1lJVOqGzVA8TMzIxNjJNDJaC6pJhRIC7x25T7T7U2KKdNst69WKYQjEADJLjBCoGFBS4v1Akg4pMjIELAnTNkxEoOs8274juDWZxHRvQgKmsxmNrYgxsllvWC5XSK04vHXM9GAPW1UFvBkZQjIKXD/gjSBqiCEgQsbIco2JVJJlRC5osdWmAFMhE6NGktFKo7QiCYrhZ4pIIYhZElLEpYBLgRpBcgMuF/mMkIIhBLaDK1GbPuL6AWUtJ7eOiZdXXF4u2IaeruuQwoJUxYhTipsoQEF5jQXmEuQEMZRHUJy0Y0goZfE+sQxrag0yVSxWa8SpwEwsi+XAyhuCrplO93j4QcV0b87Ll0949eIxV5cLvIMgAFPMWnebP6UVVdNQ1RXaSIQMRQIRA3kY8M4RQ8APPTkGzC4+OBZmUSbTtDO2qmKxWrHJiuwD86bm4N5dLi+u2Fyc8ezFC9xqy0e373P/6JhkNa9fv2C9WPHRyQkf3D1hejynns3pFgMmS+pgaJVkWC6R073iNR4DE2XZbyeElFhcXrDxES/BNJa9xlJnx2JzjTAT6uP7VKZCAsE5QnQIDdnJAvqpxHbb0dWGWVMhpCJ0CVUpTGPRRmFFw35TkVrHtK0I3tH3W4ISBehNGWsleQAhSwZfZkz1yREfA8E7jJ4QQ2K9XBG9p7EGHwaGmLleLtFaEbIiKcuriwWtfoXMhlsnx6gsSEPPRCbuH+5BXLJYGX+ZswAAIABJREFUXYOd4CctprFkIkoLvB+QaMgRhaBpW5qmJZNZrpacSsuesTd+MUZr6rrBuQ3Pnz4l5sh77z/i4Qcz9tqKDx/ex/tnXC4WDKHj6OQWbdswn844mh0zS3Uxxj20yO0L1k9P+fP/9//j4+99F3v/NlkoslZQGSr1rVgqfzP+c8YNzX+kHu/Yx+OGWErBreNjalshRWH5nZycMJvNR0PtxMHBPrP5lMl0So4Rt9rQ7M3oh45UZYQW0A/0F9fEztOvt0yqGc4nVG2JPpKvDM+XC/jOLW7fOkAIQX91ir2GN8+/oB82bPotyz5y1XlyrlitNtz5+BZ/8OC/pveSqeyIaUUILUOekE6+Q3P8HZrmFnRL3L7HHCia6hZ7+w8QDz7k6vmnPDz4CKEVQjTkZAojrt9SXV2Tqxn6Vk2MA7f+6R8g/SknzTWTuw2T/SPa2TFcXLH/8T5iFpkffMDdekO83lBXUyahQmoLakuuA7LSZAzsG7yzdEEhtg26mVHt3wE5JWf9FlgSbzurN+Z27zKOv807frhpvH3/+7/HMAzM90rBAuMGXoyd8m+oWy4pG3g5FhvBO7QZ5Q4uc/rkFf/Pv/5X/OWP/hRlI3/0R/+MB9//PbSumB7OySpy9uI1XS6yCGUNCIkfYwyTEEgUMRv0t5vv/p89ft7ZyD+LbIixVhnPne8dy6sFq+WaPhW5WWFyJ1QuXeswWvAnKKbslNQ3IfPIdsnEFMZrh7Fo2xkYlqpHjpK2PLI2duadMCrbbrrYIzL7Lb9P/lrjnTl6J5fefVmMJ8QNjouzc148f8HZ+QWdd2StmFQ1QYmRBR2Lz1eIhFDkNyCw1iInU2gC5IyLGp8VWmUqA0YW9r1zARUgBUHuE4HSeF5ZqKyh3QSUthhdUdUts1nHbK+jnayx1jCdzlHGUpmKnN/GcH9rR6ak56AQpdAgLbdcvD7jzekpb64uuHQdqxyKL5oQ2CwgpsIuycUTsLCMdkwhSb6RwY82BlKSUywNUgQ5xxt2kpRyzG39xRf0t2RXJkiMqJQohZsUGTnySqQA0igjEMUjwCpNpWVx7RegRKEeJpGZtG3xDRCClMC7wnboQmDY6XBywiFIooQZxSHQiYwUucg6bCmOjZYMdXVDnddGYEyFrRVZlp8pngpxTP0QCJmorETpYsTHWPwFX2IsV6s1uhgYU1Vm9K4IRbaREtEHhm7ApcjQO/qux7kC1BSDMYtUBltLkk03tLWYS/GRxgmQXAwAE5LE6CIrC7ARcirTqigyEmMtSglkShgT8YMrrzlmYuyADk1hdlit2JvOStzsOCnkXPT/Viuk0bRtS+M2eKWoVYNWCqllYZxcbdn2PXJkccgsUSkTNaMZGiWCdicngq9JgnYUvBjTjfFlQfcEyCJnIOWxWxwwvgYjb4rqSVPjfYlbiiRCdkx0Q6saaDXJarZx4HJ9jYg9tbW8//Ahe3bGZ8+f8eT0NfXGIFOmsRXV8S3atkULSd/3LNcr3rx8xWq7od2b33gwSCkRuTAmxh0CImVEGkv/mJFp3ExngRaKKAuNkPHrieL9sDO1RYiSaqIkSSuSKnnTPkWQGkWJW5VjHJGPkcvlgsszSy2Ka/baDfQhUSlNaytik5CmsIqEUaAEgTEVZaTTlp6PxCqDNoVi6oeId5FhCGxVP7r9Fx8PFyLdUK59nyPhMuFFhWyOMbbGRY2tBUcnx5haUE00n3/2OS+/fErKhpPjE4QOJS86izHRp8EYS84epRSz+QwXA32IKK2pbdH/kgLWKIwxpKQISSCVYdt7OilIEayRVCqXjUjK7LUNub7L2WbN8uKan66+YLtY8+Dhfe5/+An++prT5RopJfenFckYfCWYNhPeb+fMl1u+fP6CfrVCq0wMkX1T8WD/gKAzzy62PL+8ZOMGlqsVOgd+++E9GuN5drrk4vwMS8v8cB9TFZAOwc1iXJKQMjkJohAEMkFkpCoot4seGx21aantnIN5w/6hYeU6us0GNwwoWWN18QfK0SFri5ARnzyCiNSSRs9QwrA/abh7FHnRP8GFQKU0MgQmdTGJvbi8puszk2pOnwyP31yDqbh754BJU3E4nzDZO8JWDf/h0yd0/QrjJsRO0IcBVDEiLcy3SIol00iOJgOr9Za4fc3d6X6h2uaAtmb0A4ooIYs0zQ0k1yNJVFJQKUFlFIlM8B3Uiu2q44sfPyVeR/7wD/8xft7wf/7P/wt+e03aRKIHlUuxkYUimxJf9xsXjL/dozDXylohYNwYZYhlrXF9QGTB3Tt3MVpgrKGeNDeUN902TCct0fVj91RxGFtkozF1RfZr+rNT6thjppb9O0esXwdms5pUaVYpcnB8jAwNXz57yb2DI9LhbUQOHL7/CUcfPOLT//1/47NPn9HJRNACbh9y8P5v8eZPznhxOdAtB86vAjqsOL6zx+Roj/f/yXdRkzuI+i7ICiqF/egBWW4J5ogsamwnOLz3D6A24C4Q4QpmjhTXxHDJMrymmb2PqQ6wH1jS6ilnT/89zVRxcnwEWeLNgrMv/4zZXsYNG66+XNFOj5i398mnPcsvLtAvLxFHgeqDCXI2R+oZmn2GN55+uaUyx+hwhIh7IPSNHPwtr7CYX5cv/Uzr+2/BzSelopnMqaqIVLr0i8dmxDdZsJQrN7FzScsKGMHgsOn46Z99yr/+V/83r55/xu0HM44fHvLg/Ud4F9C6LiaU1pKyoBsiSntCSiTGCG9AohFYBBXvnKi/W+Pda27XwCmWFqy3HavLRVk/hbrxJlNKI6MH70gyIlQue/S8kyPlsSaLoyG9H/e0clzvyjoulUJrPTLpd8l7pQbKvPN49+K+9vnXa0j5Fmgu3fvCCkg+sD6/5tXTF7x++YZN3xGVHBnwxYIghFjk8qNhvncB54pstq5rxLhPTDGU8IHo0USsylhZGPwpZ7oh0wtNFy3rraBSiVZDZRLaXlNVNVVVo01Hfb1mtqhpp4bZvOWOEsxTT2IYY1UN3+pJTQC51I0qZdJ1x+svnvLZT37KV69fcbbdsEiejcgEEnXKqCgQufiSpZTo+g3eO5SS1HVFSg5iATAK+FSYCZlU9nEwsosKuKcUo6n7t5yBAYwTfCm6YQe8lEJpJKsXmkkGiPghkKTF1BZbmeJeLUDG0exQ7IzuZElgcAGdAw2J4D3RBfLOBAdBGDMtU0wgEtJnjCn6/uu+eGpopbAmUtuMEkXCgQhFo50VCokik1IY0aViaLIDHrTWaCsQosE5jQuamDIxRpwLBJ+JgYIUuoEYHCF4ttuB9eZ0RGkVylhs3VA3LdYYEBEpMmmcz5TUpBzGbN3CaIi5fE6jTtO7QMqhRMEh6IeASJGcElZJcqS836rQ2XMunhHZF0lKTJGYJUqWIjiFhHee1WpFEhSfhRBRSmN3YJA1hBTo1luc62+ocGpsGuxYLom3cpEdWFEmHzVGxZZrJISAExmtC90xYxB6NGocFxNEiezUtQGpsLZG6Zpu4+i7gIgZSUJEj0QRfKSuLbNbxyW+1yhOh471eokQHlLkYH+fpq7YrFZstluurq7Ie3s0tqJpGoSUXC6uWZ+e0g5dARdSwmqLyapoIccPSfkcw1vZx45PIhGgJCordNakbBBKYqwpvhey9KvSaEgqpCCPqGUaAYedpwlijP5TI6VOACnhh6F0D4WisppZ06KlRdqWSGF5hDEZI+8kGRRWlBQQfGAYBoIUOFeiXLW2SKnZbnt0YzCm6Ge9D2y6gSQhKcnaeRq5RzuziCyJ2RFHydd0NuPw6JDzy2u2fWSIHiPL9VDo3sVbxAeJyh4oxa8S8m1M1WjYmVNB17XRSKNJrhxd5x2LfgWyoq4qZnUNbUW/2pC1oBWWIzOnEYZhseXV6TlX2w0ffviQRx88Qg1bJkqQtCUKx+TWAY1pmOiGGDKzuuJ6u6KqGiZVzVRrVO9QrWJSWZKIZFkoc269ZnH+holVfPDefb54es3Z6RntfMphe4iSgpgSLpY5UgBW15jK4mKkc4koDUkmokyFRRE9hEBlLY0xHO7vkdZwurwiJk9CM7gOQUSpYuQrZCZGRxGqZRQKmSSxjwifuL1/QCMiL54956CeMGtbmsmUlxfXaFOTguR643AuYasLmlZz92SP3/6tDzHNFEzFFy9e4V2mH7b0MuCJo0dPiQUWCkTORF+MaI21WGPIocRNN1ojVdnIpViSq6TI+GHg6uKM4+MT2no+UhEDs2lNUpqu22CM4rKWbK8u2UhDc+8+/9Uf/2OCk6jTK/7wj/8bqqMTEkUHrqQmC0Ec56nfjL/FY2SPiV1HL+eSgpESedx/lLVKkMPY5VOC0WmsSNCkeNtEzxHRJPrrpwgTiX7J5eVT7uxPqY4tVC3DYHhzeoad7KP2Z9x7+BGnP7nGXC45vHMbs39I2G6J9TX+7DmTxjCvKpaXl9jDGj1ROJW53ASm14KfvvoUUU95eO+AOx9+THvnGHPnGCEGkE/IQuHlBrgs0id9zOR4wublE5oHv48YNGE1oJoAbkXnV8TYo2qNSh3+zWM652iahoP3HqAme1Dvk4Nm8flnTOsHPPvJv8HsRyYfP2J5lblYwL3Je8iwYes9fuEx5y1tdUKz/wBdTdlsL7h8fcb81oR6ekRUhiRuHC7GFS+Mj37Zxv5dSsbf7Pi55p4ZMhIpC4ty1xGPIZUo7G/qucd/39Lpi8wox8Dy8ornL17x5vyK9x59zL/47/8QLzpOjm5TT/bLb4sC8uuqRmmLkANJjHsJyp4wkdFCI1Rh+P7ajl9UH/0MCWjHwChedJnFxTXXFwvIII0mOl8MD8WuJVvWJSGL1AFZWBZyXEhSKvLplMKYWlcaPkIWP77i2TAafr5r539TB+1e3/jg53iU/G0fO6wi3zx4y7xIg2d5dsGzJ4959uQZZ+fn9NETBPTBQRKEVECikuKScc7R931hPguBthYtQY4JZzIbTKoQ0VHJWCKthSAJxRAyuY8QPCJFNJHeQlMptMwYmzCmsLltq9n2hkmnEeoQ5Am5tJmQonicZL69MpIiVMqQIqKLbM/PefPkGS+eveBsdc1y6Fin4r+WYsLKhPapNI+lHBMtd4SZstbm8QtS7DiQYkxVjEW6lku9mnIu8jghxsv5Ww5gCMpC9u7FmkfGQB43CrvYoJwFyESUmZRUkYHLHVqpsKIwGgZfgIVScEmM0YgEKntqVSGqutBiRrPINHbzUxbEDDkKhpQhBGJOWGsxKqGHSG0CRgpkToRk0NsOUqQyEm1LpzTKUe+TE2BQwqCUQChoRYWxkjqa8jMx4VzAO4h+3JSnluiLpGQYerquBwQxC1zv2A4B0zkqY7BKUFlddHVjfKzI5eaNuWT4+pSQgM8JlSK7xU+OE2QWGqMsUguC6/E+FPMbKVCmIMGVMaRYIwbHsN3g+p6ExBgLCZz3pTOlJbtpdZcCUVUVdVPjgsMFRzf0kNMNZVTu5C5jj0xpjUpxjMaMxQ9iBC+M0aPhUSSEPEoLdkZGssC1UqK1wYXAsuupjWWxWnG57LDWE3zxmtFaQIjougAtQ+pJKVJri60qQm1ZLRKL6zW+7+h6h6kts8kUDaximRQvLy+ptGEymRSJTlWRgi8+DT4UX5RcfCCCD4TxuitO0uN7EPLmBogxIkMEWwC4ghhUqBzpXYWyprAqYinqpEy4AFXSxTRq9NxAFXCwsD4SlTXszebs7c3ptmd0bijPpRVKWYzUDGWHP/qRyCJVSaEkkqR0M+kwxiAVVgwMw4DRekxCKeynbvDkAK1VVFUFUuNi0ZEuNz2xcpgQ8bHEaCoj8X5bzr/RSFXkXEJkQvA3dEkXPH3fM7ElH927SIgeYUskbd/39MNAkgIfA0O/QaWMloqYCkNFyMIIkkaPjKPItK7RIdF5SLKo4ytR0QmL33qGMPDm7IyDuuLj+3ewMvP09UtW/ZpWRG5P5hzWMzSK46NDTr/8CiMl89k+B9MJOkU2qw6IWKMxJjL0W7bLFacvXnG1ueTWh9/hwXv3uX614YvPP+PKH5HrYuRKisWgNhfPn5gqZGXLXBkFfvSKkKPGlpFtJnOCFNifTznsM0FEln3C+R6VPNtuQ6czg3PESmONRiuJiKXjIVKm23ast2vkrGFS1/gQcd3A7Vu3eXD7HiEoVhdrltcrvAC77YhPH1O3H7J/dADCMJluOdibQBe5dB0OR7SGIDKd91RZkKWHXMyZ9ci02d+bYbNAmkyWEm00ybtCPxRFGrRcrlitNxzfusuD9/aZ1paj/RldiGxDpBsCm+0KJwWoijSpOKs1/mgPfbLH73z0iPd/73uIth0XTk1M4sYP6W2XGHYOHNz8O34vv/36t3Z38ndg/OyWp5ydscBMhbadw7g/yLnEptaWnFJJH1EKETPJRYZuSz2dIChzYho7pOQBf/2Uxz/4E2QlOLhzwP7JhEzg+tVztNsyyCWdvOLsasHHH/4DzPE+9757gmrbIt9Kge31kuc/+iFXn/+Av/fJI/7h3gF7f/FD0n7m9t19LtcLQtQoV6PDFVYLHj76hP0Pb8OkhvCa3K6I/g2ZxOZyzfr5cx7c/13MpMUtXzGcP6Oe7iEO7yJ0IJtEf3WBnk0B0CLRnV0Rl6+pbx0j9/ZR9QE09wjiCOkrkjC4znLx1b/j0fdPuPvwj9k/0fhwzEQ0cHGNrmZ0myUr4YnuHsS7ICTrTc2riw3v58ysEvQakoCatyBGuWESv3x8ewCMnzeKsTYIocaN+Pj1X0FjvDR6xp2Py6NXkmTSTPn+3/t9Hn7yMXWtee/DI7arM6pmigiAHdkgojCNtVI3DJGcFQpx40dXYqXLuv03fsz/hk/9rhYTGXwfODs75+zynJhikY6JUf4cIyYLtDZoJZE7YG5svjCyJ8IYDqBUab5qozFjSlIY0+ZCSChRGoFln1tM0iWFiS7S+PmGtbSLYisvNovSoBXIdybFHY1BfJ3ltPuueAdCzO8c7ptfGYGzt1y2X+kYG/Wjqeq4/ibwqw2vX77iyVdPOD09ZbVZE7UkqeI9QigRnlIoSMUAX1AanjmVv6blLriBIq2LGhkyiQ4pI0oWZnvKhQ6QScQ4kMKAz654OEiDRJM2jozAWsMkVCQMURiO8yHWNshRhlqSINN4z8F/mQv6nZvn581FPwvWMR7vEPDrLZdn57x4+ZLT81OW0TPkQBC5JOxQADqFJISESwEfhpKyozRSgg+RneeUlLKkYmZBiqGYeUoxGuEHQi5JkymnG5nVLxrfCgBD5kwdAkEKrNYMRo+6/YjQstDgGfXrITOEgDAS5R30Ha2EpCUTZakqg44RHQPBB1KMxWjPFLCgH9z4d2LpVOpdTGWhZHvv6QbH4HzxgiBhal0K0CgJQhJCmeS1UviciEDnApXVN54Mcky4FFIWWp7cTTIZPxZiSgqMEEgjmVaGkCR+1Lh774nBYkNF7VuquieEhA+hpD2EhB88oXMMUrIiI7SkbiraSU1V2ZFWzbhWmdLBTQkjGGeF0RhSC/QYJ6qlpM9F0jIEz3btSICxhkldM6maYngaI402xJhZb7ZFlx8LEt1WU2xtUEMczQbLpLGbDa21KKVvJk+lRIkbkqXrmmJCa8MwjBoqUfKbg/eFlaN2bIxiZGmtLRd8zKRQKPVDiKx9R8yRrR8Yrhe40eiyd2tyUgihCD4RhCDv1chmQuU10Xt6mfAMRO8LaIXCtpYsNeeLBZ1S1FWFnM2orMV7z2KxLB4TbiALSTubUTUNm74jZ1WYByHQJ08XPNqDDZZJAqVKMkXWFpcycmQQkFMxH1QQQmIIrqTKpEQMCZ0F+FwoS0kQQ0bIEukaciYpC6rg9y4NzFxPEwKqUvhWcfp8gciSSpqiz04QfSqyLKVwMZJFumE1iFGmIG64PWVDr7VCCzM2Ksvr2/Yd2WjMpCGgWPYenxXTdkKPYOkHskscCEVlDDIFBt+jpUYiR0+WTA4BW9XomIlD+X/Omd45fKrQSWC0pmhxFNoIIpm16+kFLPqOKieM99Qu4aVlEx127LOfrRY0PjFvplhlaOZz8ApDovc92yTJQ8LaCW0MELakYUPOA4sh8OMXrzlfLqn9wHtHhzy8c5eTwyPkdMJsb85muSKailg36LYiD4LQeSovsDExbJZ0G4fVe6xW57z54U84uvc+79/9kNOrS548+Qo9NVQSdErUuUNmR3YBIQ/BTEoXx3dkl6lVVRYHoUhGI2tNiD1VbJAZjqZzhJwSr7ZI+5jQD1yvoRWSzTayP7M0RmOUQEdP7DpsU+HJvDhdoLqe23fvsLlac7ZY8F2jOWoaVrM5Whk2JF4vV+QocS7xF8+fcj/cRQTJ6+evEd2W37l3j4u+5y9fvmQQLXk+4zop9qWBnLA4kt+QRPE3OppWTC1MpomXl9dEKmo8lSyA4HR2wGLds1gs2fYeYzX7c4sxJ1wtVrw4vyA3Gpczw3aFnUicNXz66hX9//V/cPbZn/IP/9s/Rh8rwCOSQo3Vx1vDMAdSEBPEXOi+O36gfAfcIO+07uP4dtZav5YjU4q6ND7IvKV8e5/RGrwPdN2WujJYU4SRSiagG5lpEVRbft954hCI2iPrMZnJKJICEXu255+jtm8Iy0z74D6GhsF3yNmM55//mOHqBa21sLRcfPqcJ48dJ3d/i+nxHqvlG/YqR+oW/PDf/hkvf/wXSJf5+7/7++wf7fP5+isutksurw1S1AzdQL894+7H32Hv4BB/vYb1GmG3CNeRlCMx0Bro1IQXn52RK4MwmTcXj/mdgzlVfUZOS7RqsE1ENxpxfo68XOMWK6r5lHamEWzHIqFHtA5hjrn96DbxpOJ7tcdMM8Lfotm7TauOICrEZCgAUL2HyZJqMkUIU4Laq0NinrONmqF4cmO4aTuM46+zoR9d6n/phvxdiv07wOKveOz6EOKdp9ZGfePNcVH4cYVpqoEkEUrQHOxxf37AA108xZSITK1GCFOOiBSIpNDZgt9izVAk02qGTE1hwoqRmWptkSXpt82Vr41fQpb5ZfGzN7GzYwPk3cjalIpcOoRUUlBMKcq/RjAYn1eI/PbBX/P8vsusePd9lYe5FFbwtgucSx9JZcVyveLV6+ecDdf0oieNMuokSz0Rs6bP4ENpRilVGBgpiVH6DDmpd46BIidJiLtXUN6zQCOFKbLXNO53pULkQI3FRIVJGpl1AS9i8ctAQpaBkg2hIFtEevdQJRBFVkwCEcoeEwURiGO1ohjJu+8sbWlMwFEI5A1f+JsZf/VWHhucyFE+Ul5v3jrevHrD4ydPeXl6yqLvCKUgAFGk8NZKiCWpLcayfzVKIOsKrcZYWyiFcx4Z7EKiRAZpCTGQZUZKMwYbJJLrEaJggELKkmYSPSJHrLElKS4H0iaSZUVWAh8qjDlAyRmS+h1D3F/GNPsmR3ntZbz7fPJrP7Iz7kyUVE4dMnHtuDg/5/PXT3m8POXNsGQVHEkrbEqoNErNYrElGMJQQhxyRukSj5pzLP5/UhU2Sx6DG3KJNlRaIrXCD5GwM9qnHNsSGPYtBzDICdH3hWofY8lMVgqIpBxQUmB10dcEATFBH3vcZmDjeuzKUNcVk7ahrWumk7qwMSqDEJac4tgplkzbKTEWgCCEcJNUEkIc40QtujI0IYxmIontsCLHRMhF2hCiRApNRYXKms57PAIbMlqVE1cHibECqSUl+xSU1SPaqpGykPQ0JZNeKoFBY7TCe0UIJUIzpfJht1Uxn4lxBDiKjiuMcaAloSQy5IEYAmtZFk1b1+W4QpFExIiLEatU0d95jwtFPiKCL+jkaKCirHnrNyE1G+fxMSGlJOQS3xlTAVW2vS+UUCEwSdy47eZcCuEYAoMb6NzAMDg26y3bbT+ioEWKIoWkeF7lry92KRNycQ8uednFOFWpQskLQRLJpCGRfUAbhUu+SClEYut7UhKYuqGqDV0fx0AKgZCaqq4IwjAkAVnjfE/nthweHtDUDYfSoNgy+EK7nFQVrakKrT2GgijqEotpKkvoJN3g6AZXGDPel5QVygKQJWQlCUqx8oF8dY02BmsMyVhk01KNEprgBrLKSFPobi75YgiVd7h62cRooRFZletFZqxuCW7LcttzlTpW2w5JTbde8fqrx0xnnkCHmjbYrIkD9NsN3XYgDBGpCyiSYwI1mt7mMDKKCrIvSMhx8ikGmX70aBHYymKsLXG610uaytBUFYlIv+jpBFxuBtQ0kFJhVYlUENhy341eOChE9oiUsMqOJo+SmPyYr142CNYIKmWJo+xM2xphNMFouhypYrk2ZEgoFEpoohhIBAbv2WyXbNXA/lxStQ1ogxUJIxJGKKLP9E5iZU2VFK3K+H6NaFqq+T5+69ifHrBKiR89e83puufD+/eYHuyzWazIMaC1RBmNjppaW1osB3XEzuccH9zCuAEn4Kuzlzx/8jlhs+bBB48wwvL4zXM2zjM3E1QcqGzZMHU+EbeJ9ZBwQ8a0Cit1ufeEJilNNopMwMoSyRoHx5tXS87XAZcj0gpiEnRD4PXZgknbUjf7BNcTceTY4YPkzsP3eU/P+LO//FOW3Yb53m1a58luoEqCWmm2jWZytMdaCs5XF/TOs397j/Ntj1t5FtcrpA88nE+5d7zH1fqaH606ri8ze4c1VkWEgabWDK5nGzUpKyqp2GsS06lkuA4QBCp6fN+X4+A87WyfLCs2XdFd7s0m+GHD/TsHbLcrum5DJQ3JOWwMrKLkT//8z/ny8x/RXH5K/0efgBzKtS12nMCSL68YyDaVG1jo0mHlLXuQkSb5djf8G9Tib2JkdhvwAqRuNj0plE5Q13U8e/wYKeG99+7TNg1J5MJwy650FaVGmJEeIASyrgnrNdeX5+hGMT+aIWTp5CEXtEdgnqzZa+a0WpCtZb26RMnInQe3yW3Pl//+R2wWU578YMVLt8f971/wT//5H7B68Tnq2XCWAAAgAElEQVRdN2FxtiBs1kyqPV48P2e//ZJmUjFcJ64XG/YnD7lG4GLgk9/+iN/9R/8Ie+8T/PWStFkStx2tnSLnt8BdgF6jRCANBhMDzDVKZxanPyaerumF49atO7RmCiGzfv4Yu+yZTizyaB/CNfnqCm80PQ1tpRG6IglJFyOTR9/FzitoJwjZEsaUCl1PQARkZWmzxZoCeLsoyaYF2eKzJWTBlHyTdvb1wv4dEOMX3kK7ovX/D+Dx7s9+s/fkz4sQ3Rmplyngne9/wwqMsfVz846EFG+fQ4kbmYKSkFFk0VCgVkEAVFJUesKkNuS9Cl1p6mqGSBUyCbIEIVIBO6z6K0XqN1W07oCMnbdZzpEQHClrUhQoWSLQg884B9ZSjEpvfrfsR3ZmqX/dcQODvfN2dszh3evaFdElNECSB8/q7ILzi1MWfk3PMHpcZJISqDFhIkRBjgIZi8lZ8aAUN/t4kGhVWDA5p7cscwr7QimNMRatDTEUGXgxeC9+AzJRJNA77biQRYG/Q2/xJAJfB9MziMDPoBlfMyzdfSeNRA1ZDvY7f0Z8DRr81Y7ywm6kfykTFluef/WYn376Kc/fvGY1dAwp4QVjImN5E0rJ8c4vsgRFMaZFgrD2RoruY2nYZjF60snCEPYJYi4gTc6RTEbmiBICvWMspeIuKERha6bxOMUUCNliqwnT2S2a+hAtJwhRFWDqZxOx/ouMd/co/6knFdAH/OWSly9f8uz8DedhTW9Lw1KkiA6pXNtCErMnpkQWBXDMORX2liiqgZAhh9LQTqlYBwgpxiatwA2+GK1S6kEhJTEW9nrKv5iV9y0BMMDHgI/FdIUY0Rm0VFRKokctjM4CLyAliUkQo8O7gaHvWK8FC1MiNafthKatmE+nNHWD1mVCUUKilSymblaXRJBhYHAeoYuDtFKaEitaIhpTDtRN+VnnHGFwhb1BZkiJFIpsQmuLtZbKWqzW9J3HVApj6+I7oBQ2FmZESkUfJ/J4QwGC0TNDFVaGNhp2vhwZrFU3saghlJjYvu9xfSC4OEpgIiknBj8wuI6YItoatLZEcomurGrIpegrnhYFeJAiE4V8G3m9o54LibUV2tjis+Ed682Wvi9MFu8D/TDQDQ4hVUloCR6lSgSokqoU5ikx9APbfjvGx3riaKiaUkmAyWPyiBhNYG4+RELK4n+x88UIISCELhPb6E6cxTuTERGUIOaA73uaZoocs4clgFQl1UVJYoblek2KjmltqZqGqCWbbkvvBlAGGFkgIdFMJ0zmU7RWdK4kduwsaISQ1HWNC6XL13U9IUa884WanDPeebZDX8AiEtuho99sEQj2Dw64fXKbB/cfcHRUOiopF6pW1m/PzY2paXobOQyjXjInYhTUWtPUhjqC2jjiUDobk7Yl5yIXkLKAH8lDig5yQUSVUkQp0UIhjCipFMGNMq5csu2zIKVi+CpFOVdKCGKMDMNApRVt04zvuSeEAhqK4FjFwGrdsX9wXCLn8ihZGaM803g+30705TXpkWIZd2wcqYjBE5PAWl2ALJ/QuhjTInt8COTBI1ImmgIUzpXiRejwObJXt1yFzPlqSUqSdhioZoc0VpeNXIooCW1jmVaWPd0y0Y5usy5sAV2yrXsv2D88QeTI6+srlqsvOJ62NPv75Ay6rRFKIIlUWmBFQguoreHWyRFTFdA2Mjmo+fSrL1ldvOF5Thx/8JCj+R6riys2257zy2sObrX8R/be88eSLD3z+x0X7pr0lWW62s9whlbLXS4lQIsVBUgCBEHSF/23+iBgJQIiJWLphtNm2pTJqsrMSnNdmOP04Y17K9vMkDPsGY7APo3qrLp5MzMyIs6J8z7vY0qnWbQDzmuyq1HGoa3FuIy1W+8aICWRaAyeejoh5Y6rzYpl1AwpoqOnz4a+gGA1603L1TU0jUGpQO0Kupg4fviQP3nnR3x5+YwXL57SzMCVJV3b4r1QA6uy4thWGAw3cYklMq9nkrceQWmH0SJHu3d8xLv3b/ly8Rnn1zdscOhsWRwekE6nbAJ0yTJ4jc4ljbPM6zmlbek76dSFFLDWcH17w2S2z/7hAYvFgvV6zWTSsLh1TKdT3n3nHdohcbvpMAQ2ixtMc8L6+pawShz0S9abjqwcKAdoUhapkSvEoFb1HuMKtLXbJOHRF0PxDcv67/GLf5Ex9i53fydn+q5HFRmnNcF7lotb3npwn7JwUqRlCNFhdEVOo2n42GwOvef6+pL9WcF8WqPUNcovZee0OSP1T7n/I9mcXj3/Kw7vP+Lw7X2IDcQPuHl+zt/+xec8/PF/yf6j9yk44E//23/Lox/u87KtePH8Y65fX2CmsPy8xV1pQrvi5N4h89f7zNUeputwOnL8+AFH796nOHyEKo5wR1PQkuzT377GpoSdnMDkmGmZcY9q3IN9KBLHtw9Jt1f4XFPmiviiJRQON3FMD0/4/Kf/B8vVK36Qf5dUzcnNnProBOPmoApyLsFMMbainDpUPbajkSJZnsEC+hSukP3MaM62dZvfpondbaN/vSz+7sZvprz6uePXPv+/BiGob/zlzb8zO7r6Fl9RY5PQFiWuqMQXyzhQ5pvf8ue+8Esc7R2Gxddf30XQIoyRGBPGQFEIeLFY9Hz5xVPKsuTx24+wbnuMeWQv8CvbP/y8L9mlIHzt3Sor1qsNT5+d8fr6hn4I+JjeUODJ6LwFy6RYVErmgsikFSpLjL00moXpF1MWE+oUJWZSZfGCUj1ZmdEXSslksxFlhGGR1EDMHZkOpTLJOLJRsv+VaARglATtVCTCzJBYM4m6FOBNvkqYH1tgJwuhUI/RrUoLCwUj3/u7vs/v3B/bxDs1nrOcIfY9L16c8Tf/8BOePHvG2ndsgmfIkTCGGYi8JkktmQX80EYLIJOSgEBs1yNFHjWiEfErYQSTJBUjiU/SeFhKCehkjOxzlTJjjVNLUtwY5ICSgIbj40OOjg7ELHQHOG4NfX9Dm4QMXwWEvwVN3f5+qF1EcFiuef78BZ998QXPX75g1a7JSuwafJD0zO19G8mElEarHJmXemRYKJVFRuLjKPuXVEStpf7NKRP91o8yM3hpUA/DwGq1wnv/c3+13woAY8e0yxmdM1b4JTgypQKV4wgcjd0RZQVVTiNlx4cR2cl03cDQB+xCc1XcUhYlZVWJkV1ZMK3rUXvudtIDY0YH4fGGTknsViS+VVOXUylCvScMfiyYBFkQQMET/MDQGzorC0JRGHSvcUWPHVHUrpe0hMJKKJUxGmcktlVZSThOahi7zwqtZQHUGXTjdgV9jIngFdZmYumIQyZGuegxBtwAWkXaviN6T45CC7KugCQpK9GLSShpq5dXoxzD4axFtS2xa8UQNUaij6I7j5E4sjBiTIQYSFmM9tSYdBFi2DkoKyNSG6vk95yUNc46cpTJEpN4KWxTYzKZpBRhx4ARNoa1FrSW4xlZANa+MfYEKWaVFiPVwhXjohFp65qQoB+jZ/uQMWWNHo3E+uDx3UDXafq6pC7FPbzdSFpDUVZUzYykNEP0KESj6EpHyplVu6aoKrJSbDYbrBOJjNXClpE4zx4V5XeJRNbrNVorJpMarWHICd8PhNeRGBJVUXEwP2DaTPEqsfYbfBgYfBDghy0iLoaqITLq+uScDCNlqyxL6gRl2dJ1maZueOutxzx8a5+nr1our86JMVDQUNY19ZDQPmGLgqBHk9HC0Plut0GQ5qQeF3NHYS3D0NG3LdEoCmOwStF3HdNJQ1MV+E4iTn3wbNoVqbAE3zEMLT60YCtZAxSIK7F0O7ab3t1zTUmcWNpSzbIUJV4prDOyQEahwiklCLwPgb7rKFIUbxQNjOBPzJlZM8VWFbqoSP01r16dU288RwczmtKIlELLcVVGsz8pmShF36+4ublmeb2i33TElLBqzeHhHs3+CevFFf3VDftlwfF0QhsDhcnYQmFjwpmMIZO9x2mFqiyTUvP4eJ/Gvs/Z2Us++eIpffLM753y4N4p+XLJ05fnrPOUh/dP2QyRq5dnbHxiFTUnFLQ5s95sUMHTVyW9UZRF4nq15Lbv6PuC/Xv3qKo5i48+p71ZsxkGzsMt90+PmTYNMXjWvSerQD3fIw3w7OUF/sBy7/QRq/WKsmqYzhpiTLTdQNt2xEIzLRvKGczzPYzpmRQ1VsN126KKClPUrDctM+85njScFAULE9jcrlj2ibNNy8XJhP0Hxyg3pQ+WIljKXFHrCpctfeqBjCtLILLuevp4w6SZ0nYd5+cX6Bwpy5LVYsH+7IC3Hj5keHomjLtuQPmOo/kclT1FakhUQEHEjIlLmXXX4Yeep599zMGk4q133qG0lXTQtLnThVXbm/er43sg4zc+VBaluVGKaV1R2YKysGgF/8Uf/T6Lmxv29/fkciU1diUNHmH09UNm6CJNaVmvNzhn2DueomxPeP2c2L2mmBjizReU3JKLTPQDzZ5DFZmsMuHmBoZEqQ/4nQ/+PdGeMJ/P2bt/j5PZgFq/xC4uWT35lMJCimuaWcW9gwMOTo/Ze+uEk7ZjCIm//7u/JK1e8+HkCHvgwCmoLCp74vKaEFZ03YZJfQDewmqF9gH3+IA0NfjzpziVKA72KaxmYhyLT89pn16xutqQasViULjmgFjMmB+douYHqPk+m40h9h6jMtoW1PMKbAYGcvJjRTzq7rfnf1u7ZVmH3xRxv4hV8U++uuPHXwBQ7H5GvvPCv66JeJfZ8PWhlfzJSqGtwxQVWI0yVqS8d0hk38BF/imncVfsffXNXwcvvv6ePLKkdxLj8UC0ztRNSVlWksb1la/VI0j2Tziubxnf9mVSXG07edxhH0htsLxZ8erVJV3nUcaSYxhJ+iLtVsnfoTGM82HU+avxuMUHQKPIDH1PTIGUpCgUGzfZywwhgo6yr9MaZUfzdpPF3wvoyfRIEmMepQJaYgkkVmCULIi0Lt8BN9L4NfK57e+q2ZooZgEhx0RAhd75bdhtWNCviUGQt//b9q8iDG3Hq7MXfPSzTzk7f8VqaOlioE2BoEcj+5Qhi6dezAlSGslQeudlJT5ubyQVKY111vb6oNFarAfy+HrOagS1GL1I8thsA6VEjo6SJps24q23vz/n/v17HOzPMVqCKESnsfWg+e7P27ePO2yP3Yc7k3s7X0c6Ug6JsO45f3XOF8+f8/TsBVe3N7Qx4Mfmd4hhrH+laS6sR2FqK6UgQcxpx7oIMRC9H5My88g44k1NO3hJh/E9wzDQ9z1DP9B2naQw/pzx2wFg5Cy6GSU5ypUyOK0ptMEihWzMSbRXOpPUiLxqhVUF2RWkGHfd95TEIKfftKzWHVqv0KO/xrSpmNQV0+mUupZ4T2MdxZgaIl4KEWs0uZDJPUSJDi1sQS4jKW7RIiBJt7nvxQzRD54uBHxdQAfG9VRVTV3VMJqGOePQSuOsaP9ToSgKAb+zGnVBRqOwuwVeaDmalISJ4gpFUWpygDBA9GJiGFOk9Jqiskx8LUZ7PorR44ieCgMBsjGja7KgYL0fED2woIxlUaJTIubM4COdF1ZHjGFMMxHzyaoqcGVJzrDphhFkketmxvQSnHRdrS0wfmDoPe1oqJhy2vIH5JwqobTtIqX0Ngb0qw9mAZuEjaKNImWIIVBYw8RVzJoJpRMqUj8EXi8WLJYbhsFjtSEZA1ruNaWl47oZBnwYMDpjjSEqRTd4iomiqCq6ECWSt+8wpcO4kqqJzPf2yBmWyxXGOpwr5TdKPS5nsrXE6LHKCHDmxGS1ix6nHbp01IVjWk2YzmZMmgl70xnT2Zw29YQuEoc4yl40PgRijqikGMKAUoYYDVpblBWzp+C9RPCq4Q1rw2ictZRlOeaRK1QAYw0+RaG+xTH2S+mR5iU6W7tLghFzHZVkU5pzZug6bm9uSMHjrGE+naAPD2jbFqvl+xdlQRg62tBBjqicWC1vuby8YLp3QFk3X1nUdw96LSZj4hkq96sa2ThpjF9SjKydvH1IMz58BPRatRsmaRilTOIJokYUfdP3FJN9HjyYQ99woRWrtuXysmVaWWazOZPC0ftM5TSVM9iQKKqSISt0jGQfyKri+dkFF9c3PHrrPicPHzOsb7m5ek1cLUkqk/QJVSEmp9ZoJlWJT5F2s6Qk0jiwMeNmJWp/xuZwn47M6+fPWTczTuo9yumci9slnX8B71Z0SXFxvWTlE+XhGq8Mbdujw0BXOgYNfYKL25blYskmToj373Hw4AHN8xnD7WuMMfQpsths0FkxbWoWYckmRW7bAesmPH/xmi8+O2fdLVBWopyrqkFpSz9sWCxXrFXgYJY5msw4dEcoE+g2HdFULDedmD1VDatNy3q5ZKI1e8ZwoA1ltnQM3N5c8/TlS/ThPmFeklSBHzYQNC4aTFLkFCV9xBq6vmPT9axe3zCftTRVyfXNDYfzKdZYegZWiyXHh0f0Q+Lp82dEl1iuljTHM5JPGBwhWnIuCdmiVSKSuF3fcn55zn/68/+T+9OG/36+x2k9E0aNEkprYuza73b+349/6bFdJwpjKIyRgi1lJnXN3rQZGYbyvpzEPT0D3QDnr9YEH3jrwT7VpKIw+9KZ69dszp7y5OP/TGkGSrtm/zAwnTQ4M8NOD8E1qJseHRyr509ZvLrh8OgxX/7sghkl+48r4k+fwMkUd/WC9w8PcHVNE1dc2jWbl1c8ff6Eg985pTqYU04POFmdcvn8mtYsKE9qOKyIqWN58ZTF+Uf0mxuMmeLDlLrUNNoT+pabj39K9fCU/mpFYqBsCvTJHqqqKCYz0tLycj1w+NZ7fPDwA/rLl7w6O6c3FhUTUwPKVtiqksZ8DMLhlxY+SpXCWIoCMH8jqEIJnd6n8Tx/p3Pjzg/7hYXAvy7gYju2jZ9vAw3E2FlhioJ6OieGOT55MeocC/fdtbq7pP0zTuXd49jKknf7ujufk4aigBcpyXN9Oq15//3Hu8/nkQkvKR0isf6u/UW+OqSsVSiGYeDsxTmXV7fEpMHKcaa8jcsdzftTEhkDGmM0wxDRKY3FnTBVBSsau9XjeVFEVGYsBK0wHbImy4adFCAqSe0afMKHREyKjCUjhbXCCziRxdRCZ7OTfGS13S+J9HEkPRORTrmlF6+n7AXoUJpEQcABFovC3AFnvktp1Ffugzcvipwnw+3Ngk8//YxPP/+Mm/WCNno2wdPnSBzpIDoLW2P7J+3qhfHbjdcyxrgDLmLOu/mitRHZjE4YIwwOPYIPkjaZJNJWvWFlpJQZRkawMJ0CVVVz//SEtx495GB/H6O2bj+abdLmb2Rp2p7S0Vx8izOnu/vsu4cSwK96bs6v+PyLJzx98ZKrxZJu8PQjoCZ2BUkkPVmM/SOZrBWJLZuHXXPfD4OwUzLSxPSBEETRIDYIQgwI/s5rY7jBz13DxvFbAWCkLIZ/QkwS6vusKJhWlspASp5AZgC6pOjiiGSlIEwIAONw2RFzEqpK3hYxWgCNEGh7kV0sraW8WVBVFUVR4pxhUjcUhcM6K+ZtSoq2rBSlkQuy3ewkE0nBj4u7RrOluwkiNfjApmsZYoDe430k+ERRViilGEKQiEdj6I2jLIQGbQqFsmKSaK3B2YwWEaM8V9RW5mKE9u+CJDxUhchaRjQshJp+GOiHga7rabte0iCSqCZVEt2vMUqSHlBYI5O0G9GvXYe9KCitw1kx9fQxENrIYrlkGAKuKKnrBmMsacyqHoaeEAJ951Ep4HKGqqQoS8z4wAoh7bSAcYw6MmrsaI4ddzVKh6S5+UZWotQWId8uRGFnkhVHql6MY+wrBgMczmYopel9IixX+MzO8dZnI5FihaGuCpqqpK5Lhral9YGu69FtiytKjDWU1qCdo/eeoi4pm5qqrmWh3RrQpEzXdajcYjTCahmSMFGKAlc7fI70wRM1dH2HRVO6EqUUlSuYVA1NJaY/2UJ/049xW4wAkjwkbYZkhJmQc0KlTI5iTGSMprQlpfPEHCAlAWZGmYfaLcJJpEBdh49gqlr0aeQdAmqtMJeil4ygpGXuWq043NunLkr6dk3XtuQUWa2Woy9NAVmRUqBwjsPDQxabNXWVaddLnj75kpMHgXsPHkhDT20ZSAJebFFds3VCVwqlzUjzg7KqMCqPEciyYcjjg0+PbJ5lt8Fpj40iM9okL4VLhGfXF9jbxMN7Dzk+PGI6m3B1dc3i+hWL2xvC4CmqGVU5oykKKqexUVGWDq8M+5MpsyrQrSOVtfSD59mLF/Sh597RHnv3T1men9NevmbZbjjam1OWjmHcCKiUWW1WOBeZ1SXteoXRkYPScDKtiPWcfLXg7Mkz8n7Pw7cfsFx0vLi4oagueXT/Ee99eI+rdct8/4AuZSbNlNivxXNn7B5s75fQedq2oxkZNirBfDKnnjW4sqC9XTKxE4rKkaNi2fZMVEPWBa9vXtEOK+qqJmtDyEIdjCmPqS6Rm+sr5mjuH09xteGTZ09Yxo61TxTKMJ1OCCbhQ6QuCqbOMlOKg70ZXR1Y3EReXLwknU0omZGURYWM8pkCI8BBDoQ0jNJDkUNt2g5XlLv5XxUV2QfMdMar8yvmkxmnJ/c4f/WC65s1Lhe4KB4oCksf9Ogcrok5E5InJNH0t33HR0++4E//7Z9wcv8RVhcotnLjLFKjX1M36vvxyw2tFGYL1I8FmEK8s7Rm95zS4xrjh8AwtNi65vp2we3qmpOTI1wFBE3sEmndoZMnDYlXP3tOWF/z8NGc+48/xExOaZ97Vi82HD3u4PYF4eaK8OqKeOuZVXu8+/YBhz9+n6N/8yPy839AXZ3RGM/+8QNW1z2HDTzrz7i8fcnFR1fkkzmuVBwd7/N7f/wH/PnVE84vbvmBm5BVycsvXvCTv/0blldPeP+dt/ngg99FFcfQLgjDivreDxlurolpxuyDhyzPPiOmgen8lC5l2lqhDxQ5aPZ+/B/ww8CLp38O5SGz+7/P2i9ZLjsoArYe0LaV85YctijGTuJdBhLSkVNS1eQRHFI6j39PO0blGxzj+8ny6xrb67ItAHYSjt07RAaqiwpVNhB6sna7Sk9lCVN94/CTUXy9kPjlmS1vpCLpK8d597hTimPTQg44jsaWY7jcDsD4+u/63QypGvL4PBt/gDRIQub2ZsWTZ8+5WSxJKInqDAk1xkAqbTAGIEKQlvb2UMX3AhTi95ZHmoGwSmRPE4LIR7SC2mgqrTEIa0BFT/KRkDq0TejKYIeeInjKHEfKviALCiPzM8nzXylRn+itNadifI+wBq3KqNChupfQvwLVopoaqgOUOiRTEUcJhARDvGGlfKenXglUBG+ArhwTi9sVT5484cunT7m6vaWPnj4nBpUYRnmJAWm4pYyKSbzmxjqQO3MAwDlHzvIs2H7OGDP6XWRp9mozfo5xL6nF88+HHSsDxNA0pIArNBAprGH/YM6Dh6ecnh4xKatRPnQHvNiO3ySIsf3nHaLo9rxt35d9ZH214OzJU548fcbLy0tWbceQEkMUGfm2DtZZIoB9TCQiOWt81FI7MwIYw8DQt4TQk1Kk7wfatmXTbujajq7viCFixtTEFCM5yZyRFD12fjTfNn4rAIzMyMAIAasUBYqyLpk6x6SyWNOgCkNyji7BxgfatqVv16w3m9H8QzR9Rht0KWaGsuTKTWeUITuHIhOGgcW65Xa5AZV3oEBdVezNZiM7o8Jah9EGa8yoJxckQSmHLgtC8PR9h3WW0hQ7A8wheMzG0vY97aZjtVyxWq5HsKSgKupdkdYrQ2stVht0obCFxjhNUTiKIu9kLZBEflI4nDPjQi8Pp8IotDI4Ec0RU0HhCyYjMrheb1ivWzadJ+eE9wO1LUTaoR3OChvEINq89XpN9GKqYvqCqm5QWo3aRMtsvkdEsVlvRDISAr1fCQNjIxsdYwx959E5UiktRp3OjQDGm5syjyjpXdOkrJK4N+8iCdVXtJLyIDDEKMkjOUeK5IQCpjJOjeY6KaGzMCwq69ibTulTYlCwGDzJ6F1R3IdAjAJKVXWNK2tiAlNUhK7ndrlAG4srK5pGCr3b21vquqYsKxaLBd5LukzhSkCNXhRhd8xbECaGhEUTEcmP0QW2KFgvlnSrDcOm53C6x+LhAleXlNOKqBUxRNarDQnxeJBzx7b9S2ZcAJTGWov2W62ZFPVKSdRtPwxYa6mqmo2xtIs162EgWyfMl5EtYVxJ7wd88vJAVxJNa8zYSchv0NG6rikLR19YulJkSEPfsVjeoolMJw1V6QheFvymqTCu4OJqwfn5K3RRsndwgKlkEyXX24zeJ0ZANmtHYG3LvhF0vC4bsm/F62KcCzHmnceKj4EuBLKD0liSjeSkcUlT2oJX1xdcX15wfb7g/Q/ucXx6wMHJCfNJye2F4/b2lvXVFfv7hliVFNM5k6okpYHsBypn2Zs0NAoWyzU+R4bO8+Tpl6zbfd5+8ID5gwdcnZ3xsxcXXK1bHj18SK8KfOgoC0PWij4MlMmjwkCVExZPSSDEgUcH+0yLmrMXF/zkJzccv3Wfk/sPuXh9zeXlDb/7B39EM5kKwBQTrnAUuaQuhXE2qxTT/QnvnD5isXL8zOxTljXOOCpdMCkbnCuYVjUuZvrbBT5rMQHGsNz09ENEa8cQEg6NNQV9H+idmAQ3szmJmtXrK25uXjOvFff2jzg4PGJxectAQBmDKgtQnmgNdTNhNp0zWwcm05I4rXGq5+Xtc9Zffsa+PSCmIKk8KGGHaYBIiD2ZjLGOlBVVVeNcQde2GK0JQTbCPgSKwrFZb0hKYoTPL16xV5csb69ZLDfslzBEjU+KkKDUmsKIp1KjZhRlSesH+s2SFDzKGFIWWcJdo7e7T7XvC7Tf/Ngx3VOWooI8MsAVxspzJ4aEdQbfeUlPspasgkQU64Hjo4Z7xxNyDAxtS12XdK+v2Lx6Tl72vH36GBdPqKdQqDl509D3ltBHls8idcz46w41BK4vX5LNNeeiRLMAACAASURBVH/4X/9HzIcfolRkOHuFXp1zNlwy3yTi0vH07Am/+zsfcm9vj5+dvWJ1veFP/92Pyd2Svfun/NHv/TGqGzBmSnd5w+efPefivONk/0M+/PF/YHL/HUgFxBX+9VN0NNi2ZEiRFBWdrnDlhBevWs42Aw/23uH+W++SOqB+TFhcsAkHvPODD5jc+5BGDeRiDWzQRhOGJTfXF8RgOTy5jytrwIoU9I7B/U59oNiB43ef978eglK+81Hd0atvf/7I0ftXOh3vdjFH0QXSeYZkC6rZPhOnmOwd3KHRyO55+1XfBC9+8ciiH/q54ELashHuHN/dfwvAIXs/Y7YF7QhcKNDmjf/FdwFgvIF37tyn47qxxdw265bLiysur65p+0HSBZOYazpjySFAFtP6LWCaYyaOr21N+bWRZkyM4l2nlJwLxehrpmT/7LT80VmY0xkgZVTMMrlSEllyyjvzSUaJR8Zxt+MOMk/lXBVItMhugsDQwdWXDC//mv76E8pqwD16DKcfouoS1JSEdO6FKbKd9L+cl8O3JtPcfSnv/idrSUqEIfDpJ5/y0Ucf8eLVS0niIxMUYC0qBXISrY5VWnypojC+Muzupbu3SVVVOw+/xBvmj8qalON4nrbGsltfFkWOmZDibj/N+P21M3JNlHzvo6NDTk6OaZpGUoKyNPu2/kpfW7J+7UPmzR0q1RbYufueBLEPLG8WnL+84OL1FberlQQvEKV5TcKqbZKINOzjmLyStUbbEaxJCe871qsl69WCvmvZtO1OHiIM8vHXH6+5Umr04Xlzb0k9+FsOYMDIRjIKUiaGgRQLFAUmJ3SSk2aLAmc0xgdKA94oCmsYBi834ygj0doRVZIFGlkwClPuaC3GOlwKUvymbd5yYLnpWHcD9uqaqiyYTCZUVc20qSlGzwxrjVycIMVRWZZjt3gsrkPAaENV16QxGkkMLdWukxz6DplQEssqC55B9WCcpKcMNqONxxgxFrXWUBR6h3lLd9yJf0IIMncUaCOfK0tHShlXFJRlzXQysFxu2Gxapk2DKw2Db+n7jmHIVEVBVThJlXBW9JEoSS1ZLuVxphHZhLEYW1DWEKN4cnRtR98PDKN3RYwRBVS22DEnckpoY0ljcclIn3vTIY6Cum19D0aPEWPeuNB+nYpojBTrxgroo82IwCrx17i93ciCpjXZWmaTKYcZNldXbAaPtohDbozowtK2PU9Wz3l+diZeISmijcMYI8kvmzUhRYbgR2NXz2wmP69rB3G+bzuKohAtdA5Y68DLKpWUeITEdkMbJWEkW0NhLPVkQmNK2tsN/8//+1c8f3rGn/z7P+EHv/87VPMG6yw+eCaTCcZZWXjzVmIjrJ2qLBliwGiLtci10pl+jA+uyhIF+OBZr1Ysl0tMlq9ddB3d0FJV8/E9gyD3yowLVSRGudGKqqTdDKQsDI2QPE1dY7UwLZq64q1HD3AaFrc3vDg7Y1JV7O3NQSssUvxGH3GuxBnLEDwuCEMpxDgaBaWdI3fwgWi0gGCITGzwgUEl9NYl2ll0Nmhr0NYyhEhdWvYP9mlYc+t7cs7MJg3JVHQvX4HSXFxd068ir66e8/id+/zwgx9wvDen0IqqnnB+/pr1asVVTrw1r9Em03ctOSYq53BaAz17lUENAzd9i60dy+WSv7q44J1Hj/nw3R8w3Fvz4vkZP/niBfP9fZJxhBhZbNbsHZaoDTRlSfaw19TU1hDJvPfoIR7L3mTKk9eXnL+6oFtv+PC99xm6npubG9x0Rn1wQIyeHANG653ESlUlOiZ0jJSmZlpJpKoZJWmNLSisY1aUvHd4Qg5rnmzOidpycHSEHxR6tUQrQ1NP6NoVq2LNymuG2tIOgWeXVyxyz9v3T1m8eMXLi3OOHx0RcyYZjWsmGFOwGtbUFtisGbSmmM3wZ+dMG8fjx2/x9Myy/vglV+0try9eojrLHhLRJaB8xDmL0gofA4OPNJMJm7ZjsVwyr8XfZrsLXS9XhCGQFCQNbz16xHw2pYua63XgJx9/ijGRZy9f8uz8hurA4cqBrltQWsOgLIeHh/xg7w/w3Yrnn39CfXjK4ckD8tht+NbK7F9pwfTbMKwZmVr5Dr08AzmPJoAKV7rd+yVONfLweE+aHllirFUhxtZVU1Ldv4d+dMj+XkX75GekcEv78hWxiqTZ+8wPP+DFl+es+szv/7s/ZNJ/CSc/4/LihrYumJcR4pqzl0+5ujzji7ziuDHct6fkaDiY7+Gs5dnFNa8/e07fNKA62tuWdx5+QGlrtE90XU9VWO4dP+bD939MdfRjlKqhNAxti9o7QNl91l+eUek1L549pTfw9sMP6VaJoBPFyY9Z6QPOVwv21YysWuZ7h9QHh5Dn6FKT0itQsu53bUtRVkyOjzDWkfMAjBtOifsakxb0Gz/bEVjXo85+W5jqLaj0ncyPO0XnN6qBN51c9a+MHvVtzAbZb43MCmXAGA5OHhDDhKqxFPUxysmcsFqo8G+8tr59/CJ69y86rrIs/5H3fbVTre785Q1IJn/7lQGMu4f+tW9xJ4RqF1WyXnd8/MknXC9uwRqiF22/dWLyvwXupEkVRp+FrYw1j8mKadexjuOeqi7q8efJ3jWTiGhWQbGOCWeV7JuTxJsGFSmc5torbpJmgaUxBRZHgURgpgRRK0nUyEgE6xZUvOPBkHWE1BKffUr30/8bf/URqnvGMi1w51+iHp1T/47C7JUEpciUJKWkKP+u59N2URjvqawU7XrN06fPefrsGYvVSpJYzJjWGAdS9OSRea3GC2eteOFJLRLJYxNYaZHgp5hoe7/z2bPaYse0my0zuetaYowiVx5BmxgFJNnut42RRrLMEZHp700aPnz/PX78wx/w4N4DatNIch4ao4qfe7/92kcWgGKb8rhdC8xYZ6msGVYdZ59/yac//YRPPvmEl6/PWfYbYd4roS+qLDKq5MUUPyWZA0Mc8CkR4gbvE127YbNe0q6XDF1L8AM+jaCZ0mDENNgYLTKrkeW0Bbu34F5MmfwL5vdvBYCRQTqGuoAk0SwZ0beLs2yCIRNAYibRFBpsobGmJjcVKUEfJPM3BNF0hRFh2xbVjN4OzmrASSRPjNKps2F34vrB03Y9t4u1UPAL8W+o65pmUjOpKwpXYKzZLaLbJCO03Khx2IA21E3DZKQnqSw09xTlox+9KQY/EIJELRlnd1T97UfnnKRFuEBReAo3YMfXrZbpkVMElTFZuu1aa4wdEVwz0ruDTMDpdELdFIRYEoaBGD0xjKafUaJsRNcki0gaCYQ+BsJKjnXwAq44V2KsYzZzNI2ASH3f07YtOYtUpahKmsmEsqoQeYgsUFobrBW6VxyfTGqUB1itR8OXtJvrW6aM91v6oR7Pj8FYjXV2dz7KsqaqK/oc8V3Hs5dnuKrENlOMVUwqYRcMfUfCYBTEDG40Wc05jkjhmGk8JtQoPU7gmHj48CExJYZhoCgK9vYd/TCgRk8N6ywhBhaLJdppMVMNkihitcbpkmwyThtBdMcM76Sh23Q8P3vB7OOPsZOS40f3GIZA00wwVtB1NfZIxC9EiTmXFt2lMg7VioHoLhpcCTnPGsOkrplMJqzKkhhGc9okkpqQAiFJiosa2TM4R8ySpx23kgGlRHrjrNy3hQMiRe+w1lA6w7SZ0FQFtbOEYaDbbBhCwPZCScwJUsj03UCIeXz4jjGq4396RPlzzlKMxyQPYaXxIdKmAaeTROr6SOvlOBUiDfLBs7y5ZX8CXmVyjBRZsYgBXZbsTeY0zZq2j6wvFwzRs9kE3nvrHqeHUw5PTtGm5vZ6SQqBYfDkIgojwCgxBjeyHgUVGbKiCApXlMz25nRtz/PnL2gXLW89fMT7P/xdFqslq7bDd55EYhM8XXaUGUqlqcsKnzL37x3jo2HPKWxdkzgimsRis6FfbxjWaw4P9pkfHXLTDayWS7KV+ynHAcjCxlGZxllKYxgUuKwotKO0Ba3WmJSotWFiLJPC4aoJoTnhqm1p1xvqas7J0THP1pmw7CjsjHoyxemEqxuaaJmGxJNnn9F/8SWndU2fI7fLFSFGyCKTigXYlGlzpu86brqBZZuZH59wfLzHvcMZpCOWq3u49Ybzfo1fKyZJ4ZPGE8jGkJQiJqHBWqMpy0o6XCFJapKVFCStNXVdk5UnYtkMiZw1f/bf/Edi0vztx59ydX3J4uqCp8+f85//7u94/MEP2Xs4QaeBzbqjyyXTyYxXH3/E1fkzsvtrTt/5If/T//K/yf42Cz33F+6Ivx+/sSEbWfW1F8aunhmp22NbdYdtjDrrjJJ1LyY27Yam0BgizGpoAtycYeuIm0R852neeQCTt+Dg98jmPabBcfX0goubBbWLLIuMuj8jHdZgLAw19x5/wBfPn/O6U8yaiqMHpwyx4+LVOYt2w/7elJdXz2jXib264vMnX+JVxdHhA6qFZ9Gu2ds74r33/oDDex+QU0E2FRhP0IHoVzRt5uXFSx7UK548+3se/ZvfBwYO9+eUR3toqwgqs3d8ADmhfMJlQ+o8HIqcVLsKsufm8gVDB6cP3yUrR0Li8rTykFcoU4EaU9O+cTHEoLuuKg4ODpjOpmOX+c01+eeNvPszlj1jR3/bxWfH2vt+jMwYGD0kHM18H6WrMTa9En652vau852u7c8fAoq8aSsr9c1Y03/s/L/5/F2gSb15iTtTWrGTGXzlDb/k+MoR7ZrT410U087QVGkY2sjZsxe8vromG0UaZQMhezJpbPRoEtLQ2cqJcxbW61Y+a6whBUnMsMairZN9eUyyn7alqONTxBsxVvUqkXMApdGlwdgJgx4oJyWxsqxJLIKncpaIwSH79jzOsawCzopHnM4GohrljhEfFqjrZ/R//5+In/+Esr/G5TUxDwSuiO4Z+vFz9GwOJpPzPiCszH/u+AbIttUHIcyLoeu5fHXBs2fPeXZ2xmK5ou17iQzOaddUS9uEl5H9nnPA5jcckbTzw0iQ9K5hDexkyrA1lJTGqtZawI+cdgCohAlsZSZv5OxZZ6xR4v02n3Bycszh4TF1OUErJ1IdcRyBrL/Kivl1L0vj998CZIxGrzkFjNKjYSskH7h5fcHz58958fIl568vWbUbhiTxqEMcGJKw1FXMWAV+6Oi6jnW7YtW19N7TdoHgxfsi+l5Y7VHOI1qLxMoVaFeCdWhtMVpTGolq3vpXBu8JPkJM/CKM9LcCwFBKjUkhFWkIKN+jCks5qZjUFqsE5Vl3azarBSFDYcTbwOjR9MdqnHWEoElZEMuYGcEIcTKNIIYtCJUrknEaXGGpMGIAmNLY/Y0jayDS9R1937HarLG3lrJwFIWjKkoxArUW5yzWCI0oZ1CmwCox5LFG4YyVzkNKo/YKYkhinBgzMUSGEBiip/cDbd/JQ0ZLFKlzhXhfOEtRSMJGUzfUZUFVWNHzq7xjStjtsydvqVQKZTTKaLQ1VKUDZclNPUbWdHStpu07VsslIWRB7JQZgRrQxqKThhRQWorY2A+klIVxkLdULLOTOFi7BWQKjHESVSS8P9GZKcOYpIxAwggSrTVKxd39cfde2T5ttiioMaPMJ4nvQ0K+VVEW5Fzho2cya+i852Z1y8ZHNv1A8sLCCSSy1qSuQylFVZXEIRATWFeSc2IYeimKjZhCOlNwe7Pg6PiYump4+fIlISdOT0+xznJzc0uIkWY6ZbVeMwxe/EbU6PgcIlhFU1bMZ3Oc0dxe39C1gvwqo4kKNm2LRjOpJ6hCU+1NaNuWuqmFheGlSN2CP0YpklYEn3a6vbIU8C2tPUYbyqLAuUI04CDRm8rQbhezHEk5orMVpo9Wkg5kDMPoD+BDJCQBT/LIcNFGo42R+2zsRKicmFQV5fGxABhtx2K9YnGzpI+adZ+gjNSzjhhlXngf5Z7QIlmxNuCsJSdZ1LR9E1+Z80jhzBCTmIkOUY2mr5mQEzoEuvUGXxZ0KWB8ILYdC9USNcyqKYeHJ9ysB7pFz83thpvll1xf3/D4ZI8P3nsbpx2ubMhxRQgRSk1ZlVQpY2OQjaGF0hY0RrGOQeZDUhS2oDAFy8WSJ/4JShsmsykmJLp+TVFoBqNZp0RO0BQVVWExTUMz3SP00iXQTsNRQ9BHLNYdN1c3+PUKPZ+i4sDt61csXr5AVRWbzYZZWQpYqDLz2ZTKBazWYn5JpjKGqrBoIw9kl8DFJOwNk5mXDp8zy7bjdh2Ibp/KSepMiEHisGrH4ANeweMPP2BdG7789FN6pUhWDGWndY253TC0G0ChtGLtAwwR6xw3IbDqPT9qCuazBp322ZwcYZuGm1cDq3XHRhmWfWLRd/is8EEz9Jmhky6h1RZnC4JL1HVD6UqKwokP0cjGsnXD/rRi6Hqm0ykP3n2fLgycvXrBz8KKs1fPqT79hObwEP2ooi4cq1VPlzRNWfO//8X/xfXlOXZyyB//V3/G//g//6+A265G2/0BX9l4f183/QuObxZgW/A8j/chIzk+R9kK3V4viTGxtz+jNAWhXbNYn9PolmKaCOtXDBefcnnxEYcP9uG0hOl8RLBa9j6Y8P7R25juBZqC2TsPsfOK+vgEyofgK6i/wFAyocBGx8E7Dygby8cf/YRIZLW+4fBozovzK143lqM/uMfevBGz6f0pM5vYnzyg3r+PCoqhHSimM6EoF5pYy0Pm3v0jnv3lX/HF53+H3XNM4oCdHVA9eJ9qsk+MlqymEDv84ob17YI9f0pWAzkHdGpRBCbVnNpNQc1RWGIcwHSk3JPTBk2LYQ7U33oVjFa8+95jHs1LmvunoPWY2MSvMD/ucrDv/oGvFrJjxxR2yRXfYxjbkWVfqECXY1MJ/xVAb9w8bt8tEZ5b+sPXvte4nbvDxsiMtpD88nGR33JT/MIv/66ZANu95QjGjUaPi9sVZ89fslquiDmCBYeViPggzOuUEolEHNPmtJEGzTaBJOQobOqiFK+o5Yp1KyzOEAKudBwe7DGbz3BlSbKJbPLYnLI7fw1tEkVZYx3cLi746cd/wxdPPsXZksruc3x4n+P9PQ5nFVb1pLySfSEGpaZgnJBwtCd3l2xe/C3Fq5+y+dlPuLm8gr7H1Ib6/RNUUeFffUK5V2KbTEKRdwX5rzC+dRKO4PHYZM4ps1muOH/xkk8++YRPv/iS1zc3DMPYmIqJHCCmiMqS2rKNsfVRzFQTimxkr5p2IITaPQ6cc2x9/vTIvPDe76I8jRXj1G3crRqtBOKYphGi3wEakMFAVZccHu3z4OFDTo5PqYsp4MZztfWS2Z6HX+30/SpD6l12KSt63FsrgOTJEXzb8erVGU+fPeX89Tm3myWbfkOfApswsBk6et8RfCD5QGg3+KGn6zo2/Zp26BlCJGVJpEpJTPqVGpmMyhJRGFdgyhpbNShboo3dXXultBjY6kjColX4R/HT3woAw2gjBZlxDDmJaU9psZOCeloxqyTWcrlpWXUDQ0ioFFAjvTxlSQYxWbYjymhcoUUb3ZR4X4oeXkmLehgG2k3LuutkUow3sBh3apFrGCNmkzkSopW4mBjp/UA/9ICgwJLoIL4Ik6ahKItRqy8JIpLtnEkI4ieSlTyyBzROV+KArsCHSNf39H1H23YMg8f7gZzBmn7nCyBeGAVNM6GuSqYT0R25YixOyfixoBWXZzVKPSSHN6VAjBFrhaVhrEJbMfQ0Q0kEVuuWzaYjhAF6oZypcdOnxzSKrVMssJNTfF3iEaOgzX0IRKVQ1oxUOmEPSNFt7rTCRFayTXrZ/g7AKGGIX7l3tuthTEL30komj48R5QylbQg60zQ1NgRU1xNXYs5JCIQh4qwjJZHikAUUiUmiaZumwlnL1fUV69UaEJBkUsHt1fXoA5JZLJdoZ6mbhvnenMGLWU1ROYq6FLPOBLYQ2U/KCZ0ypXPMmglhGDAYQh4oq4pcZAhwu15xe3vL45yZTKfgrXhYOIc2hrD1ZkE6IWk0p4sx4kZGntWG0hV0Jo3XacAYTWGF2ROSp+u8gE3OCYME6aSgtjpyWWCssRht2Eo4Yh4z0FUma0kGQrGTligFZVGgYyLlgaaqaJoJ1ix4vdjQMWBthdaWEIQNlUahqzZjLJUSMx/Jj34TmRZDQCklHXedaNs1fQhoV1MUVlJehoHJrKGpG8rK4MqCEpF0uULSc8pCcXBwCOXAioHlYsFyE+ifnXN9eUHfe05PTplP5jhboI3BlY7ClfgQ0f2GiGK96bDWEpRGW0dENJP4TKUtRV3StmsWV5c0kwJDFAlXghdX1/QtPHQwnzYsNx22EpZVYzQmRnxsmbjE6X7N9dEB+0VJUxbMSisgiu9ZL5b4lWW5WcN8j7lV9N6yWq/YrwuSSgyIu3apBZzMBpTVFEZjyQzJU6SEJYv5rR64eHXDIiay1xTG0Pd+3BQYAYYVVM2E44ePuLq5EU2wErPlPATipqXWQrs1paOsanJR4rNhEVZ4UzIgjJ6JLThuZhT1nCc3l9ymDa33XK0il4s1fbIkVZNzRd8nchZGVE5iUuasxBtLMk9is2m5vrmhSZrTR0c0zQQfEm4+5cc/+gHn1xesVpf85LMnfPzpT7n/1iP8B/tM6oKJcTR7x/DOB/wP/92fcXlxxl/89U/54ouPub45Z//wFK2sdOHerEoyH7/yr+/Hb3Z8vbC981xSbyLsQsz0nWez6YgBurZDa8OhU+hc0K5vaa+ueH31BadHmipf44drlG6p3v8B6J50+RHMEmqqUMc1R7N38a8VSRXURwfY0qJURfYtm4sXnJ19zsQ4HroatRloVzdMj6bM9mpM8Nw7PWRvesTp6Yc8PT+jKxTrPnB5fs7b75yg7D7NwdsouweqxjUWMORco/QBg7+i0Yb9t9/h9h8OaFxNXq8ww4JZUaHdLa+/+Ety2Ofk3T8EoHaKd3/wI6rDI9DCSCUPEFrKugbmEDVJC3tVIKAgDNk8SDLVz7nRQ4TZ3gRVv0UqLJuUsN9aDP/zrvfWsyGOMdtKfc1k9PsxjrxjFmyRd3nk6l3BoEaA49u+9O512zL+UwpvGLSkkeAk++n/X407i3ZOQMzECFdXN7y+fC0aft8SiaDTyGRI4gOQPOwiNdXowSXShcIWwmrVsof3/cDV7e3/x957NlmWZed5z3bHXJemfLVDj+cMiBEQhBQMBiIUwQhR+iP6d/oB+iCGQiIII4JDYKZ72lVVd3mT9prjttOHtW9mdc/ADQZSg8SJqO7KrKxb956zzz5rves1nJ2dlxqm4sbsJsvVMYdHhxiTsbqDvCX4EfCQFWGYmPyOHs/kO04eBLTWxJAZxkDQh7zz4U/5o3/1+/yb3/sezq7J6QI9M2i9lHpOHUAOMF4SX3zK+uM/o/7sYy4+fcj5i3PilFjeOuTe8TFu1xFOn1Ftj1DtAq2X5DwH1fx2TvVbTLicEuRMv93x7MlTHj54wNMnT9lsNkwxEop5ZI4lipOEsxKPOhTwwSjZ3wPij7evJfeTNqXVW74b17/f+7t5PxJiuJJaqeJrobXCWEOIU/G1E0/CnIXNUDWO1dGMu/duce/uXQ4PjzGmKewLxRXgo37L0S1/1+Pqns2oFCFH6bW8x/cTp69PefLkK54+f8LJxQXboWPwI+thy+Vuw27o6IeBsR8I4wg+kGIgxUjIkVguokhBDFln9oY1e/mONhbjGkzdYqoZ2IqsxCg1XQUgQDYJpS3KBrnWf8PH+lYAGFVVcefuXXxIXF6es5k6ej+wHSpqm6jrOYu25sBZmlkiZYVBsteHXk6s3zfTVuGn8WphWWupKmnA94swzy1969hsFZttx+ADVJaUxcAtFXPEEAXh05UT6mTxdshRjBhTSgx7ucnllqqqxMywaZgvxKjTFOPZTCIH0V250nwKhySjcqFkGkU7c1gLzpkrf4mUMr7Q4lNMYpw3Dux2HdZoZrOWylnaVoCUqrZoLf4Qrqow2n7jQZ4Lc0GiYxNglERo6boCo0naMITCDompLNZUIoZ00bMKktm2rfgghECM8togE3gfgpgo+gmdIk7VhXZ9HUO0T5oQ4818xYSJMYkb9T655C1QI5dFn4pPBlG8Tay1xATjNNH7CW1gjIHt+ZmcC+dYLBdQmqkw7WRDUoYYAtM44eta/FgUGOOoqxpnRRuasySK1FWNMYbN5SU+BrS1+HHixYsX9EMvQIA1jN5jK0c9a9htPFkpZpUr0pgESZFGz2q+QMXMpjyMpmkCp7hYr3n48CF33rvL7ffvSWHxVnGRCkiUkxF5UtH8Wetg8gWsS0x+ImdB+vu+J/p9RJShqjVGK3oFtu+LPKNsJuWhocomb5wTkM45pimKZKqy194l5jpPuylMgHG3o7GWxlXFeFRx6+Ydst6wPLQc3L7H7OiAplkIHVALSKKULmvfM2VFipMAGLJomArLwVgjwFUWqZRzNUPYmy9FjHM0ixmLRcWsaakMjMHTVobadGSdaGYzlrpBhZ5+9DBNJDQ+RcYJJp8R9bYmRFmL2ihCTAzjxHYY6WKG6Mna4LPC2orKOFROWOOorOboxhG3bx9SmcgudvTdGjszeK15tb6k6zfoo0NuzmpqrWiNYabBpQRpwJGosOgwcTRrWMwbZnXFbuwY+x3T0LG6fRdXGYZux9lZ5LAyhOAIXhFVZshATrI3GQgqESjTjBSIKhDJEvsWPMumZpq1vD4ZGLpMzBNxmlhfrjmbBt5d3EI7x+dfPuJlv5aUqLom46mtox8vyV2PDuIpsLm8JPaag8MbTMlysgvUrmLCMAwTC+N498ZtYjPj0aVhu0mcvXrNm/NL7MvXXOQ5KVVYNcPqSiLMkhINWGG4DUNP7yRueJommRRMJywObzCbLRkGz/rxV6zeuc0Pv/8hl5sTTnYdf/XwM27fvUP3+x9wdHiPuc+YtqKbL/lf/t2/5dmzh+xCQrXHeN/jw0jt9kXKPx/fhiP/ylflV97/maQr09OzjAAAIABJREFU7MkyWSmCgmg1q1s3mLeq0GoTzWLGzeNjJr3hzeO/4uTpz/ngbsv999/F9APx8pzdest0eMHq+zVV/R2iV+y6iaw9abNlYSsalWHqOXv8CevuNcujBauu5cxv+fSTj/jdn/6Adz+8xdOnz4ij5c6t+7g7N/ndn3yHYfeSv/zj/8Q0KO73P8CujqFekT0oHdF1XT6XRasGlQ3g0auK2z/5Ab83H7nznVsov8XmwDBuufzyGU7dIR68iz5a4GeWxfImLGbgMjEN6LwDRul01YSKEZWFYSeRjQ2VVTKdz399KWkNMpDfSzq0lPXFXfW3dKXzlY+WMC8EyBQvhX++N/dHFs2mRKYid0JCmLB7evtfh1sAb6uxvsbSEDwqQ07kYhqhfiuN2t/UvvwjXtc9UGMVYzdycXZB348isc1irJ1SIOVUTB8p8utI5aT2T0qjkTp7sZqDUWiMpJbYindNxTvvf0jbtMRQoum14fR8zTR0hPGMabik63rCGMog0hPCQIg91iSa2tG2MypXM/nM5dTx8k3Psd/xQfecm7xiNtvR3j2C+9+HuUNRSSTyxQvsk09pnnxBenVOvvSkbWbsPa6aiLtA1Qd0P0C3gbgD1aMYQC24bsR/w+vwFmNHWOuGMIy8ePaczz79lC+//JLddkvQhjFK/0MMqJAwSHKiVpqQYSp9gLIatPQmMYkMSNb2W/+eQsCM4slD3Bt9FtuC4It8pCTvZCQoIkuMqqssuvRUMUaCitRNw8HhguObRyyXK6yuIVsBsNRbe6PKCPd/nwjzDzh/f5dTjEC78pwTdu01Z0kWeb/d8PzJY548fszj5085OT3n/HJNN+643K1Z7zZMwUstPo7kEKm1RZXUQ6F1qPK6CqXS1bney8BBY12Nqiq0qUA7sqpkqK20eFYh1zDmRDSSpYM2f+PZ+VYAGNIoGpSx1LOWXecYU2A3dVT9hFUeP9alALEYYyUC1VQYlXHOkJJo+421xJQY+pFhHMgpoPcxjCpT6YRzjmXdsGo0w3ImOeUoppDoxonReyYvko4xGoasSaVpNslCzCQnU/QYIn4S9sGu69l1I0YrKJFPTW1ZzFqWixlt7aj2xmF7nWEWT4GUs/jqGIU2mWbmJDkFRYqIW26C4D3DODGOA37yhCBJI9YYqr6n6XZUlS1RrJq6rmkq8ezw3jMFz+Q9IXhAaP/FcUTelhIJijIaW1fUSgsbIURSSMTpmmolfiHiE0GWSCKRjDiU2vsQSLSlLoaC0ziVtA5hWUAJzy2ROSlHYspXrAtxAU5XiSvX38tf/7rELWkUlBjNwU/EMXB2ec7J2Yl8XmWp6xZrKpL35D2jw6iryM2+66isw1WOFKNM5dDM6walwRrLjaNjUkFhQxLmzDCOBO85Pz+nbmqyhr4fCitBNIkxJ/GA0AprNITIbrOBEMVnQyk23ZaT8zNc1aB94vGTZ9x5+CW5NgQC4ySGnPuYqZRkDYl2LKCsSIrgmgmRQiyTEgGVQmnsUko0rsLUDdPQSQxeTlfOv3mvHVSCkKdUvCWMBW2K18qVpqMogGTD3G62OLIANsUQ1VlN3bSs+4S1FYvVIfffeQ+7mDNp2A3bq3jdvSYxJvGK0UpARZsSlbVX0b3eexIBbQytcwxK0Y8dCkVd1agMQ46Y2mET9OPAkIOACtqSq4wLjnoKTE2LrhvMZGhsy6KG2fKQupkLUwpNTNCPog3sQ7kHYsBryxQSWtxuqVyNMQ6TAnVTU+vMrZuH3Lt9k+2wZZ0nUghEFPODQ7S3rM9Oebh7znC45OjGAbeWc7xK6LGndpnsYEiJVetIUTGvHKt5y7T26BQIQ8/YbTCuom1qdtsNL15Gbs4Mo58J6IJI3ZxSJAVDDvgUiEHAWY+wNFQxqs0moVWW6UYKhDAxjSOaijRzxJyxdcVwsaEbJmJW+JDQlaWtWwbnOFws6M93pKxwdUsIA5MPuNkK5VpON+c8+Oop6c0J/+LOfb535xi9WHJnuWV3z6BD5vz0K56/OWdbaRq9IueayrXE2KONpNWYIueLMTFOJaXEOVZHR2z6CeMsi8WK+WJJnDx5u+bmzSN+58P3eHZ+waPxlE8/+jlffPod7t26SaVbcoJ+u+XenYZ6VvHBe/e4+d6PePXyBcOkuH/vPWrnrqY6V/cB12T3rz2Ev0HN+JUS/Zt93T9WffO30DO/dvxX0ANmJEpYa1uMJhXoTDOz2NmSwPX1ErPigIoBd7DCqpvYrwwuOzQVWrfklxu6Jy/wBzNOto/ZTX/Cez/SsNU0VaKZH5KmNbpfE/Mpaqhw9LB0HL9zzGJjCCeZT85f8L02UbeW+mWkXd5g1tzCHB9SffAO6qniO++/x8nulFRPhDCgNifU7QoZXPWgD8ipRqvAvFXoxpNOnjOaNbe+c4/F3VvQ7WC2pG7v8OHdQzavMqq3cMNhbqyYnMKYgMbgQ8TEiTSdgz+lXmpy5cq00iHlfoWmlkY16795jQilT1hSel+sxqthx2/zMMZKzVeu+n8Vi/e3duw3nZLQUH6BukpLKD/A37pB5Le3Mkkm8H6QybhzGInF4B92/v+RAIy3yFlf8yT4xqunCOen5zx//pxxHIFMO6vxSdIqCnWAFCKH9lhqoWyKlj8RfCLmSDeNjNPIOIiv0q4bZAiO5uz0Qtin3ot8WHMVcavdDGsPaaqWpmmZtQ11bTk4aKgbW5p4hdVijn9xcc6zLz9hePGcbd0x6x5gFzvUvQOaFFDv1jCbwdSTnz/APf6MG5fnnG8VrTnkcOHYmh11ZaVGjQrVRbgc4WhArXrIG9A1MJMJOrBvX68dfL9+Rq/P8Teu51vXoe92PP7yKz756GOePHnCdrNlmiYmICQZpOqUcCis1iitStpkwiqNKi6lKScBCLRBWYctvnsy6BOwxJbaFYS9LUx+uRO01lcsi71kPcZAimCthAakFCQdzShmdc1i0XB8Y8nR0QFN05DzPg1p34CrtwC/vWdMiZz+5tr7dQXBNxfn2yf1V+qI/PXXUtffka1Xeq/Yd5w9f8HHH/2Sv/gvf8knnz/k8bOXnG22rHcd47hjCiM+RpIufiHFo1CMPxUqi1xcJelntS5SHQSY0Ep6SaUN1jqydihtycqQlSYX76SoSqDGXv6jDMpeJ738dce3AsAI3nNy+hpdN4V2LvnHCztjZgwGLXr7nNFENJpu9CQFCouuDK11zNqatq6oq4r1+oKz83OGaYS9A61KEnE4SsNNSFRAYw113TDFzMZpdqNmiIExWqqUcP1ICjLtRWsi4DVMWajTyljqymAiqJDIIeI1RJXpBs84BbZdT+0cxoqpnLFGDDCNIIRZgYpR4gKVKvGt4vCdtTRiKSeClUnuVEuzHVPGT0LVjt6zC55Oyc1tjKGqPU0TqOu6xN5kjB3QKlFXIkVBF5lA8TuIsZxrLSAIxVSRjPwMXG0Ig/dsdx3OWFwtmqaEQhmLtoL4oQ1JmyvWRIiJEDO+xE5lq3DFCyOW5llywCUiNSXxnsgF1c5InKJsQOrKUyMlyElhrENbg9EVCUU/BGK0eB9RKmIMEhurDCYLQLSfBimVSEkAFmcMaezwkxeJEgLShOQxGipbEUMg9J7aOZwTKuYUA91mBxpCSGgrTa/OwkuMk+SGOyy6ksbw8uKMg6NDlgdLphTgMjP4gTh64utI9dHHXI499bxBG8PusiN5pFnOXEVpETPGKjE7yuC1QVuNURMqKXxQ9D4RkjwoM4ZxCqS4ZcqZEPYPIzEdyuW8pIJOp7g3NiqsjIwYxyYx4cloQs6yV1vDOE3kcaKuatr5HFJiGAbZpNKIIaJ1JObA4D3j1BOGgThNsr6V+HHkbMnWgMkko8hGYpOnnNiNCWsy2jiUNgzTxOBHlM40SlPriiEbBmsZTZLpog9UlWWhHLUKdIhxVsQQtcE2IqFw1pGT3KNaK4zT2MahbUZlya+ujWXmDP0wkSMEAs5Zmramqgx+6Ei+Zz5rWM0bVo1DJ81pTtTWMCbY7kYWzlLPj1mvz3n19AW3hoHv3LrJ3bpioQNHM8fCKJLTvH/7iG4MtE3L6mCJrWvOdx0Xw8Tp6Rm999y+eRNrLScXF/zioUfPfofb7QKTLTb2zJskwKyuCvVVoStDpyNKJ0wOJB0ZU2DQBtUYqgn65EjZoFNAO82FHwhRSmGHRRGojUareGUMm63GLWa8WW85OjrEOui6HZVuiGFku9nw5WPPRY6kPjNbLbm1dNyYVXB7QWtu8iiccTkGrBFn6qQlfroqdOhgElkbtBN5ntFKPp+D+XyFGiPtYsbyYEVVNywPDhinkcXNm3zX/pizfuRk/Jyf/ewz/uMf/5zvvfdj7t69izYZ28JkFG7ecHn2hl9+8oTd2PA7P/hd/qf/+d/x3e/+DuAgGwEKNQQtD1j9tYLkrTIjX3/nKphOyZ0n/kOl/rj6D994oH+jcvk71fPf4Ce8FQr/a3309q/7NxT637ZDXTVWbxXTBVTVRpdhXIHss8QdKivnfwJMzix0wujA0we/hLPH3DiqubtYUh8c0qwaODgkryOpP2B5vKC9obCNR+2eYzhA1zXKD6RtTzo54fz1cxJL+qHmxfNTbhjH0tb0uzecvznh2bMLlArY2TH3P/wJ8+/9IfnoENSEaY/oMzz8q5+xcomj93/KFN+hWt5jmDpq69Aqgx7p0xZjA8Qd/vIVwWVSNIzrgfreuxAhX450vWc9BqoYqQaPbuZoZwkxYqho6psQFdvtQL/tWYZIfaTRTgryVOIjtXFXC0Op67Mua6nM5DJSOVdigl3wiyuTxL/XkSmDn/39oIrps8hyjZbnUEwJP01kJNZcmX9iUobfwvHrW38N2rE3wTRXPAn99Uuh9lKhfYPKFWBxvQfJb/as2POzNa9ev6Sua+7cuc181vCbmbX+f7S7fG3/lX9Wl5qGBERJDHn26jXPX72WGs44khGz8ZwcOx9k4Nknuu6Mbhropgk/TuQhMnrP4CdspfDeo7Wmcg6tDc7WzOqW+/fvUVUts6aldsLsNdZBNUNXS3Q9J6pyb+aM05nt9pIJTTclxqGjsXD3eEVVR8apoveWzdZz87LDjVtC3pDv3UAdVjAP4Dfklz8jvXwE2y0HRwvmzRzfV2w2kYEd0/gEtjva3hA3a8xuh2q24qFhNJltaTg9mjlGHXLNxIoCaiLD3JQhKWGbi3HknrkFOSbGXc+DTz/j888/48uvHrMdBrQzZN0wDsNVI6xVqaNLTepjJJDQxacvplBkI2C0xWRdVrh4tUQlLO/JS4S21qYMLw06G3ISYCGnWFgakFORMSRQ5fkeY8InT9PWzBYVy/mMm0dHHB8e0FaVRP/mzLUXzFt7YZHj89a6u/r9fnhxFbxYVqdOV880uaU0V1HFqKs1LD5csoAVYl5KFg+OlBW73cju8oyLN694+tUjPv7oIz7+6GMePHrI6fkl2168LKYgg39peQtIkcteUUxUr56p+/+zT2WRvkSpLHt9SRcQKQkCPKky5Ef280y6ej6rEh4AihD81TD21x3fCgBDK/FgGONICIkcEk5ZFrnm0LW08wo3t+LwO0yEMbLzkSFn8jShc2ReyUO8MuKu7azIMbJO2Mph65qgMtthZOx6dJL4Q5MzFo0umqeZVShTUeuG5CxGKeJmw7TrST6SsmE3etbeAxCNErdUEjKbAY1lMBpfNFIxRQafGEaJ/GEzYc0+YaSirhoq56gdVJYS96OJoZybklKBzjhrqGtFSIaQBmLI5OgIIeOnUFJXEjHIhGPXB6wbMdaKdt9ZRj8RfMWyqahnYkKK3pt8GlIx8Mwl+lQhLruh7ElVJWyOGGWqP3lhc5gMUxDHWqWUpKxMnqxGAgpXOawxaOtAyZSWnIs5kSES8cTy+QMqiylMyhGjHChDyh5BGgwJVSKrMkYpxknWhqsszdzhVxHXtChqUpwkKtUYFJUUYEUOlL1solEl2kXNrRsHrBYzkh8J3UjQCVXYOf0k1/DVq5fMmlakMFEoZFVdIRhCZpoCo59IWsCgKYUiQVBYFCYL4miUYr6YEZPHh4lZW9G0NfPlnK7rydmwCxO//OIBT1+9ZrFYUjmH04Y0TtgsulXxalQQBRixRJJSdBksCeUDYTKk1jHmzGa7JQWPwpFVBJPQyRC8FKJaO5xrxHGegE+SOqNjFGApRSmaY0ZHuX9lAxNL1iknhhhpmwaVYTOMpJiZ1RVKgrrJakDnCaU8QU/4OJEJmJxIwTOVvO+YIplEyBpVWZIWKYRXiSFIgJbTGhVhmHqGEAu7MZDHkUY5Jm3ZVRW9y7QmME+ZfpxQPmBGj4qRpCJYeTgrK1G0TdMQvUxHUtLysLZFohM8lkStDK3W3Fgu6Xxm023xfgDmKGXxaaIyGZU9TgPTiPaeCmidQ9cNQz9y+uwNXFxSzSwb2/Dq1Tnn64Ef3bzB++8cYbTjeIq0SnO40CyXDTkJQFK7hmU7p9GGuXMM/cDZySkHiyXGOF5ues5+/gl/8EPDTXdMteyY2YlxjBg7F1qf0dhZwy57tM3oFFA6M2WNWh0Sh4msA1lZMg4/DZytz1gcOLTSxOjRU6KOChMzSidCTvQp8PT8hMsJ7HzBLo7YODFrZ9hKU6nIvK5RpmI39vzy+Ql+8Zif1hXv3jxgsb2gNi1Vf4fnpx3rdslZD2OO5BCE/ONgGD0YLQAgicpZBh843VxgZwuqdsXovUiK2iVVc4i1kc4mVrfv8N579/nBy2ds7x3x+cMzPn7whlvvvoNSgaPbC4z1zOYzDlYtv/jPn/P4acebl2t+9P3v8uF7d6XoTAoSwtDjGqS4PgqziUJ51WUfA3xKXKy3hG7i9uEBTSPePNpQTK72TeK+IILfrNjPZQL7VgBsLo3JPk7ryiy5TNW+zYjFrzmuQQyuuy8KIy0FtK4IKQvIRSYGRdTgyWiV0CkynL/mL//k33P25V/y47sr7rYznr76AnfWcG/9LnanGTqLWQ9Yu8FWFv/0EeeXltnBLZa3buI7OP3oKdPzF7zYGb7qNDH1jEee0CRWxnBsFvzH//sT7n3/u9y5d8ytW3dIiyVZHQgl+ga4o2PuHxyx3AzMUwV5RsoLaJZlsWWU2pDylqqycNljV4ccGM1wuUGvDsHOwFWQNe5W5vadBW51iGkqsnGApTKNUHezRekjFgc1iwPLeOZhaEBbOT/Eq0bhuj7PoPZ23PuiU2N1uRhG/syxX8u/CaiQv9Zx7iPctVLUsxaV5TVTCPhRGkZslrL/v3kyxv7DWxnq7b/7Vhd1DU7Y0hapv/WU5azZbju+/PI55+dnfPjhh9RugdbXUda/2fuEf1S/gPK2koKgru1GVQJCJifxxzm7XDOmhNaO9cU5j15/SRgDwwhvfCBgMAEyCeU0qXFUrmHlag7aObatWR4I+7F2ToaCOeG0o6kqqT2niMqKHDJDP+FHz7A+pw+v2STHzmeGcSINHXkaSRF6nwTY8B23Diw3/vsf4oeOMTScTBUfPT3j/Mun/OSu4l5zAOdn5Defo1aedHmGP/0YHbeYeYWaOVyGZqqYTXMBtpcVaaWYxi2701OWt7eowwn0AOEcSIyhI6iexr2HYQHJFtPSwmwuzKys9ryDjCZJrZpEprc9u+Dxg0d8/vkXPHvxks22YyyyeuUcyWip05RCO/FM8MXTL+QoRDqEWZFLF6+UElZGhJijDHSVML1jjoTsCRFJyCiLQSmRpFjtyCYUybJAAUYZCYBIMjhTJmN0QjuFqzSHq4ZbxytW86Y8o/eAQ7qWsWWRaV3fUVl8whDWwV5s8RYtSg79FlsqBlTKGFvJws0ZjJLzkSOu6PUUXt5DDAxbz5NXG569eMWnn37Cwy8+5enTRzx+/IiLizP8NDCNEnRB1leSjphKH5i58iJU+6llYZTvAeV9oMIetBJ7nXJmlUjeU4woJ74iShemN6FMaorsrPgY7i0Pstb89fDFtwTAsNaymM+J4yAX2TrSGBh2A1OlaReOtplha0uoPWM3EroeqxS2rXAqo1Mk+omLi5GqkgY5JEVShojB2obKGBY4ZqbBarCFSpNTJPhI3idvpIiJ0hRXWtFUNbE0zEFZZt7TjlHYDlPAu0icPGmSCT9a45TEh2UKAKGKcaXKhCAskKEbQKkCYlTUtaGtLbW1Qj1HzH+qqiImME5jnEIbV5pgIzSeoAk+EqooMpOs8FNgmEQOE6eJcejEONJonDWEXc2urmjahqquqZqapm2xlaRAxFDGiMVYJycksSOUbN6MgAFKYummENE+knKQmM193GYMdMPIYmxp24amaUTOY6zILwoQ4pUS486cIO39LqJMJsvriHO8eFXEEPE6Y1TCmTKCzUg0ahiJyrHdzVgYw2y+5ORsfRX96b1M9X2Jd7RKDCN9ThijaJuaWdvgc2S2tDjj2O0GpjdnZB8kmnPyrL3IOVJKLBYLFqyom4bFbEY/jvgLT/C+xNlqAaezonYW5ww5efbhb1XlmKaRtBG5kOSka8ZxYhg9IUTWmw27bY9CUniWbcusclTGkLIpshrJubZW5A7ihB2ECZPlax8iXbfDIA/UiCTMxGRBaSYfJBrSOXROhJiwVtZjygo1+v2TgpxERkVlygNEih5jDaujI1SM4Cd0kg3Yh4AuBpupgGPygBMU1hgjMZkpEmIoZowKU0CLGCMxafmZWDSJtgEyISVSLpuvUhJzqgEiU4pEAz5F8jRgVU3nJ2xVcf/uMSsa9Jszti9e0A8b0Alj9lHFhhAjk5e4VhRFSywAnzWa2llibsBp0IZtt2UcPSZlghdQRhJVnMSoTV7Aq7YlW41VihwCL58/IzvF4vYBpqp5tenx66ecDh0//M67mNkMTUSZSG01fkxXD+BKS1SqqWuqqmHbDwz9hMrQtjV9N/Dpp4/oDga+9+NbaAVOy16DFWBIGV1y51OR5WlqUxOjw6dBGFzFyNX7ict1z2Y75+CgElZOOSc5S177FAO6cri24fTkNYd1w2J1RJ1qYhAmz+pgxbYfsC5jcuBit+PjBw9IceQnd+4whYGx33Hr+IhmeYsno+Fy2gq7I3pIAnoqa0hASInJi2lyQnF2fom/3HHnXkU+0CjtqKoZSjmmEOiGQFUpPvyd7zLutmzXll9+lnj4+Vf8mz/6fVROzNoF2k/U7Yof/csf8P4HH/Inf/JzHj+5IPcb0pCws6K1NQiDBV8g7V9DZ9h/pZTQMZXcGw8ePOTJF0/4t3/0r2nu3iAGMFYVU8L93/ptdWKRMWzRDiyyXwgjeN+R6vKreHz8U6FgAPu5lIA0CQjl/VsgM06pNBKZx49fE3Xi7r0jjiqF9Z7hk6/4k//9f+PRgz9n1J7F3QWfvvqc9elrbo/HDM8esrCW+7//Q6p3Wp58/KfkjeLOvUPGTaKuWvA3ePnlpzz45RPuzyxvLiMvtxXv37vPzB1z+uIJx4s7vHN8zH/+859BfZMbhwf4bU8KHq0yylbkpGnnDd//g59ydPAB+sPfg9UxXiuglmJv2HJ+8hlPn/yCgybRbE+59+FdwvkpJg5UuiGcjJijDzHtPdrZIZhW9t08oY0jJgoAEQEPaUKZCmJFvVohMYAB1IhRO/Z+B1rN5M/+GpzriozB16G33/jKpgRFepJLLWCqSpispV6x2mIWItfde2b9s6EnBbgozcGvoqv7H7p6jue854ddX7kr3ErJXSbEXcOtm7e5f+8dbt06xlpTkg/+sT/QP/D45il4C2/JSrPZrFlv12itOTk94ZMHn3GZdhwf3OL28S2OD45p5oe0Svb5bBWp1pgEdZ/xCbxWnHcbQvJcrkf6oWcYevw4EiaJsPejx48RlcQ0NE4TJnekNLJNFaMSNrb2I8qPGF0xJg2uRamJZdsCe6a5JiXDJmg+ed2jqanfv0X3osFfbFg+ekh1fkp+dkFjFOFAo9uKcRip1QybGggBrCbXNSnPWb8eUM1rqnHF5Nb4ZEk+sN6csryzYPnB+2BLo24oU3oKig9GpSsm4h5MzGR81/P86VM+++Jznr98xXq3JaRERAznVQYfA3GaUFfT/r0HXkkdzJnkryXlqtTz+1RCISQokio/n5KAvEhySdhLo7OsY2GJSexsRmqUtPfjQxr7hHiWuMoyX1hu3625ecsxn2sZ4mUDVJDVW8yKbz5DE0pyGSmBpvKeip+E+JsqotJXmIZRGqMzV/F/SZA3oyX6GgKj37Jbv2Hq1ly+ec2jh6/5D//PI3756QOePn3Men3GrtvIXk4SlnupZ1XOiJ2dubo19oCCLgyKPdBwBVCUvVUCI3Rhsez/9vUNFnPCfG3P2dsolE+u9gDqdX2jr5j2v/74VgAY2mjquoFxEgoQQk8MMTIOExcXl/TZ085rnDbSeBkFKtFU0uRrMtMgsS4oWQS9T2x7z7QbqYbEzDkawGqFa4TyT6k515s1eCURqaEYu0SZvJtJPAuSc9iqxtIyTxo/RcIkmtHReza7Ldu+Y4iB7BOExOQ9ung6aC1yEIshGU1Mpph0Rvq+Y7fbyxusSDKcYzmfsVDz0vgLmyMEMQ9ylaOyBpUSlTMFfdOkpAhNZpFafAiM40jf9yJJiJ40TlwMIzstcaeurqjbRlJUmgalNFMUf42YwMfio5AysaCcxlqMtaSkmKKAMuMU8LE8+ODqSTcMA+QkDs7jiDHmyn9hL0VJSZpRMdNRkm6B3BwxBHKWz7VnhUSVMF4TEIqYLjnHPngxGVQWdabopoFdP+FDkHSbnBjHCcaE9wOGTNs0WGfB1lDBZn3J2G3QKbGaLzhYHmGrGbspE/UWZTSzpsb7kZQz4zSx6zp8SNR1LeALEGMAMpVz4BQMEz5mtFEYowhZ/BuGYSjXbe81ElAJnHXEkFF4nLNUVS0mUNPEOAw0zpKcIeey2WhVaLmKHAPaVjijoVDvjPgbkaJHpSj0LkQqY5yOIqsQAAAgAElEQVTBR6GApX0OcwjknPEpCnCmDbog66lIulKOkoeeXHlYlE1JSYxYDPIQ0kai83zK2KSFLVOiislvbVTFBBS4MnOV+O6ERswZ/eRJ1lKFBbmtaZoGsiSi2GzxKRL8JAkr00RMI0F7Nv2OIXjmrqJLmctxIjcz3rlzj/r2PVavT9G1YrM742yzKRrILLIRpyhPOLwfmaLBlDVqjfi7vDl5Q9Q12YjZp/eJMQWCD4RhYKjqK4f8VADBnCIpTMysYX77Bun0kOdnr3n5/AW3bt9l3i7pdiN/9egVr7cj2/c/5J2bM+pGHtCTH3G2xerMzChaI2BYXdXM6hndTgyGd1PHzTsrDmYHRGU4W29YX66xWTEOA53VbJVhDHMOksVmxZTBD56qbXG2Ekf2kNDKUFnHweKYts44oxn7juD9VSOeyKRirOrqhvnqgKrdMoaErRtaq7g4O6Pf7dC2QlvD3XeOSZtLzl9NXK4vePAocODF7b2PEzdWB6i2Jr++ZJo6Up4RU5DJlVKiqUwFwAiZmATYjAm2fU+76eCeo27mZG3pupFRRZI2+ClwNF/x43/xEz766A3HB5mxH9mdrbl1eEBIgTRlIhYza/npT38PXOL4Lx/zww/uYY0TsFWBthlDQCUPyl3vh3x9nnnl8xMTWIPVikXbQo6E4s2zBwWvJXV/fdrD3+soUw/jDFmJhAsytkS+pZQwprqmZ/wdJrHfrmNfzCJ04ywFYooyH9qst4SY6HYDv/joc47fucHhzRVLFdBPn/L6T/8vXv+XP+f8zae8RrN49x4fffkYves5/uAOtcpUNnNyecatH/8ex+/9hCfPLmlv/wh3e8V4MZKnyDhIVPOL8wuG8YijxX36fs2jx+ccTZqq0MhvH9/m1ePn2DTw7p3vsf7yKQffO0SX0na2nGOXH6D0d8nzu+RGkZV4PqmYwAbM7pzhySNy6lipRHRw8ewRz149pZmv+P5P/hWm6fFnL7DzDItMFwPJWpbVSopPFEZHSAPeb8QAPIxgD2RqajI59+S0gRzRBIQm3VAEU3wdYNv//td97zc8tL7yrjLOsTg4uH61fYFc9Nr7Zue/xePts/33Ob7pNbZ/tW/uO9enVTGfN8xm90pj85u93/9fDvW1/119MyeRM59fnHN5eUnf7zh984Zd13P/Rx9y5+Z9nF1yriz9kLncrJnGwLbvuZx6lM+4LrLdDVz2PdSQVcL7Ce+lzwl+wk8eayustkXFbCTlLUbqFNCIHD1Z+b4QRA0kjYR8GbSpUMbhQ6YbRwKebKALsEma5iygf3HG4z/9nGdvXvBhW/MH79/ie/crZncdygVG3TGZjFINSdU4UxOnxOb1ljeb13z24hVn6S/omxWdnZPcnCpZfOj4w3/7P3C4+Je4lXgDBlukSWWuqLKAjlJuXrO2sg+cnp3y4vVLzrcbxhwJOpfneAEopompgBclsFT+upKJvy694teuXjGGzPl6dr8f7u1/1lppfWMsLhSFZbBnI6n9ALp4/aUsP5f2NA8FymiqytE0FYuZDC5r16CoScmhrsxDr97F9ReKAq6LB+H+nSoFJichMhQJi3rrbyodyb6Xvbgw2UNM7Pod55s1ZxdvePDFL/n845/z/MtHPH34kGfPLjjvHOtNh3WmDKlHyPEqzEFjiSpK/xGFIaONvRKWXdXn6tonZP+uriJqrzSv159W7c+9QnyJtAxRMYaEppT/v3L99sff5pH0rQAwJNJQkjlSmgBNVTW0szl16/ChY3N6AmcJpy0zU1FVBmMyIVU08zl1XYuhjTFoZ1HG4dCYduRit2XwidTviCGIzqbWmLbGtTXaaoJWmFnNyrW02kFIpF70+9QNUcOWyC5G0XtHTYthMVvQVi0xZ07nLW+6DVs/EHxiHEa6XWacfKHZAAqilgsXM+CQRjYEYYxkxegTw9Rjx56YJnyacJ3G1hZXOUkOSTBNkVEraiVxrqCIYRK2hpZkBgyo2uBswzzZq3jSqU+kKO6609Sx2/as3UYSM5qmxD3JQoopiQuvkqZkz4SQVAqoGoh9zzBOZBTWuQJuADHjnCNlGL1E1lprytTUoAzCgAmxTEpKxKjV4ulQEFNUJEWupu4kYStdeXMAxmpsZXC6pp5VWGfFANJP4hUSxcvDJFMaekfbaOaVI0ShMo2TZ+hG2qZGZ0hTgGwwVtaJrRw+ZcZJLN+qukUbJykHQ88UPD4GmUAEL/dyDCSQyCedCWHEe0l2MUqRcxSz1aZluVqx63q63cAwTGilmM9mdN3ANI5YIxGg1rkrc9pEJqQom/O+YMsysTVGgymTkBxRJJqmYnUwZxoym8tLod+pDM0KRZINBnHVVkbkEjlLwaiMbGTGqCuQPSShr135ZeTicxIkx3m/SWYv7zOnsn60QWtbUkcs2niIMiEyxWQp5cwUAxVaJEXjgB8HEtCoxLCYM813IkewlkophhAYQqK2Fa4yBXjIxdxVM2QIxhLmNb1PNOPIYVPx/gf3aGeW+bLhrz79jOFiK2vKSgZ4VoGUgyRcIPIPnMMYTYgTb07O2AwRUzmapmZ1sGLeNFTzJcMUGIaR3aZnXlVX91bKEv1VG03jWu7duU02iRcXp1ycnjG6OfcOb2OaJb94+pLzi4f8dz94hw/u1NxczVHGFep/4GBWcdQ6tj5glePo+Bh7e8b56YbLi3MYRlb3Vqx3A7/84z/m8+cv2RqoXUXUMGnxwamUoVKZbBzD5NHJUlctxlTkLAlPWmtWi5bV3LBaVAxj4M32DJ8cPno2fc/M1WQnE++IxjUt1WzBydkF52Fk3rZ0w8T5dgCtmM1r2vkNKgOv35To5SypMs5ZlqsDalWRX58x+Q7ve1CpmONKISMMUg1KS6IUhrpdoKYdpyeXbO+PKOMIZHTO1PMF9WHDOKxZX16wmLclPeeU4D2X5xfciO8RQ+Dk6VdshhPGbBj9gLawbDMvHn5Mdzly8zs/YvXOXXQptXSuQali1fWNZ96+LMliDAYCCv/kh9/j9uFNjg8X5Ax1U2o+JWCnc//wVIW9oVfCMrF4KzpRdK0G2S+ua5F/Sh0Jb1W5e1vO4ueTIDExjomvHj7h//j3f0bTLFgezhjbml/+n3/O5pO/4H/9H/8Qs9hh9Jp7zZz3ju7w3dV7XFbnnLz5gt3ZG/T7R9x+711enFd0n+04vHkf/d0fEM0tquPb2MUbpu1jju4ncrjDwz87453VEWdD4CJpTkaYmZuc7jJv+lNyNXH26g13bt3l8sSjqsCKAfIENuLjBDkzuZoqtZKahcJlBcbjt6fUwfMHP/wO69dfMg6JZw+fU/vE689OqBaJ+3cnmvyS0DZ0mxNcvoeq7mHdMeQZOYpcSeWKlDvCtEbViJSMDnINqiJNW0LY4iq4YrdwBCz3J/6ti6H+jt/7+13ar72SKlTqtNdlX43yvtYw/fMBe/POb7JR/jZ2ypXefk/tfpuFoaQRTAmkL1RvsXG+xeDR18lwZf69RzwjFyenfP7oIbuhY58eMV/MuHHnHlPUfPbZAx6d7djsPKlP6GwZgmcXA3W2zIIlJkM2mXBxjlJe/BRUqc3KxNtpGapKNH1A5URlDPNmgTYZZ+Z4U6FQVMljcsTpmnC5o0+KrBMpW6YIQwx0ccLbxN333uWHx/8aHjyke3PJ5a7nxeuedm7o3qkYoyZtOrTtaWxFYxf4ztBtItM4cfrmgtOTN2z7DRfdJRchcWnOWasZ2+xQpmZ+3IJucfNDaCqSFmJALKf2qsG8GsgXlkGInL4+4bPPvuDBV49Zdx19iuy8J2Qx/jda2OI5u2sgrdS4lIZZ5YxObzXQSN2aYrr6mcKj+JrkbfJDebl8NUgVr3qLypLMkxTX5p5ZEXJEZ2EnaKMxVsvwt1rR2Ls09j6W28Dyihlxvbiy/GICPGCZaIilPtg/a+V8BXSW0WzOClNeKuaAyqeEdCKM+51muxn44ounfPTJI/7sP/2cF6/OOD9ZM257QufJgyfhmJhoG0cmkULAGmFVCru9sPu1lnQVZFiZkyprVV0zLLgGOK/3giKHVbD3zPkVYtOv2Qa+BnaWPk6prxUe/G1JRt8KACOXNy4ojwEjZkzWWtrZjNY4KiZ88thsaF2FVUJzjD6w22zwk6duGmbzuVCCtKF2NVU7w1Y1l5drcsqYrETWsNnhNxvRrGmJYpzVFbZVVBVU2WC1JltDPauJBoji8p+nKE2Wzyg/yc1mNbPWcVwvmasZKsLYjWy3O8ZhJOzjUHNi8gJq+ILsWa3QVosHQYSQAwZwVuGsQavIOA50QyykG5GROFdTV5bcuOKgq0vcT8a5WvbnFAXnswaHvkoPqXVhT4QgkowYZXI5TIWu/PVCQGmRWAj1P6O0R6FLoxqFhm5kWq60EeiVDFrOo4LS+Eoza6wYiOacBYn2vtCIlPwbFHO1lDAlsSMUJE9ZgzUKZzVNLTR/Z7UksTSOqrK0i4bZco62FuPWXK4H8pQBjTEWa2SzmleGw6ah6zs2w5Z+2JFVwhlN4ypCSFxebnBNKA2RkljYccAaQ11XsmaRG9xaSwieaRqIUbKW+74XlNIYXFVjncUaR1PPIcPQ9/S7gWkIBB/p+5GxHzBolLVEJN0lRaGzGS3snKqusc5BkSWFmK4fHAVhzkkaNYU4MCsSldPMZy3DYi7ARqHV+HEqrBFzNbpUSqGsFWm8Lg2OMRgrGe+SauLxwQpIZwrwEMWEs3WOSnGlNcxkckwYZwt4YYpxjzj8pxjJxuAqV3K2BUDLKlHXhlm9II4VaRxwWjENHRcnYG6AqSpsW4vkC5iWgeV8AQiby1Y13mfOL3fUiznu6AaqS1hTYZXcZ41VHB8u+eCD93mjX+DGgDLisE4IZCvGlGImW6KajSp7l2XX9fhtR9PWJGBe16yqBt3OSdGXyOclShUA0BisqyThI4hB5a2jFfPljJcn55yf7/ji8jHzo2Pmh3e46Ab+w88+5sntih9/513u3bjJjWVFCpHKaFZNDXmkmzxVmJjXC+xsxixllPLYLA/mcZr48uFD/l/23uzJris78/vt6Ux3yAFIAARIEGSxSsWqYpXmarUt2y9tR9gdHd1+6D/Qb/aD7RfbEe22Ww6prSk0VRVZHMAB85DI4Y5n2JMf1rmZySqqZElWi2r5RCQDSCIvLs7dZ++1vvUNalJj5jXT6T5xBDBkYqIw2lHaGpX0WJw6tLUkL5FiKXhS75kczpjUUx4+fkYSZ2WRUCUniSQp04coHjDKoIzi+dPHzKcz6ukBpsgsT4/B3ORgf49J6Ygqsj45pawnaKcInUcpTVVVuMLgHAJqjuZPwqjUIxPDgrZkbSArXFGjbGCzGYSNNRaRVV1TTCaEyqJV5PzsmEfHj2i3S8rC8Pa9uxzuy3S33/b8+C8+5JMHH/DeD98bI/TW/OT93+d/+5//dybTd/gn/+W/4L/+1/+K+UEth3EuyNnuKmN5HkEmK1cm03oEHXPOWK24/dohJEUIjE3ijqJ55YV+9gy98mv1Fd+99CW/bCuEJQZ9lLKjckaecyRUaOcjcfET6qv/lq/XtXufiqsV5G4Ct1kFHj54yr//vT/k//7d32Xv4Dp7+4fMn+3j9ZpvzAr+rz/+ff6LX3+T357+t3z8x+/z4U8/5OXH97mh5xzs3WUybCjcDdL+Ed/+3i1sFcmrM+b33sGXNdQGO7+BbTxHdaaaT2gD3L31qzx4HDh/+pjFsOHJds3BVKHnitf3XuON77/Ld97+DSbNdfbu3BNWoAmEfsnqxQv2ywZ3U4HTqFxilUOTIK55/tGf0Z0855vvvsbB9E2GVHPyyWd8/kcfcTi/zhvvfp+2SyxP1tx+9y66mGDq69j6BtoK8KDHCWROkGMhkaxhTQxrYnuGrSuMc4S4IuWA1nsoJpAaGCn0f63x+9+wt81JQPYdOzOEIPuotZd1yxVAQ+1oOF/XJft3cf1MY37121cbkN2vU7qcrF6V3Ox+vV5vMcZSFgXaXDaLqLHxG2nsFw3jFSzpa31dYWBcgLVZka3lyfPnPHv2nJQiVVVSjLKEth/o2syT58c8O9vgo8EMmkJZQgJtpRkbuoGUDeWkwpYTyAPOWrQ1YmytFFVVYouCIchAT1tJa5hNJtTKk4Ytq+RIrqQsSxqVMNGzOFuz7iPDIEOVhMiAS+OosqKZOO595za/dfcb+J/egOfn7N//nPB+yyQqYpHxFrJ1KAK83BK149XTcx687Hh6suHp8Snkjume441vvc6N6ZTjXLFyc1o3I1nH3s05h9+4Sy4sSYHPchZbdrKjK/d5tyZDYnt+zoPPH/DFo4ecLBf4nGmjp8/SX0BCZ0OhNUZp8ZJLAkTkUXKgQQC53dpVY2rFaA1grLl8/tMViQkSgCA12+WaBcakvUv20cVPaD2aEY9gnpJBbFmWNM2UvdkR0+oQY0oZHuor+83Fbdilj0hSzS58XYYuUh1rAkoJ8zdlCQFoh8C6G9h0G86PP+Lx/T/hyYOHHL885/jlghevFjw7PmPdBpabDj9E8cbzCR2F/Z9TQlmL9x0+DNiykD7M7KR/43NvRnlOvpSOwCVbVG755eYiW+0uFVL8PgSEGO8nO2xiB0CNe01KJC1+eZndXrG7Z5frJuVffEh8TQCMxOCH0fdAPBD6vmez2TBvLNXUUpUVBSWFtsyKhqrQZAJd17FYLlm1S2bzzOFBg1aazWZLpMU5hw6RQkWykwI4pUDqNGaMwUlKYpBS8rR+TbY9hba7uQ1ohS1LaiQ6MpYZlcQghiANfDts6ZInqYS2MK0nTKxhUlqCD8SYGXxg8JG2H9h2PW3fM0TxYuijmJfmZNEJnLM0paVyBjvS2GPMxCiLKwWhjw+blq6SRkhrg1YG6xwx7+QAonEakzwlYigKeUkZqGyB1iUgUUUSWylRm94P0oRrhXFuHM9I4xaDyD5SyqMxmhSN2phLdobVGGXJoccYLdFaRtyCNXl8z5pe65GVNcanRjG10SFiNDhjKJzDqARppDghm49RssHpkZqklUZbsbe1zmJdgdJC9Rp62ejkYUXQWxTTpmI+r3FLhVoxpodIjBLKEHOiUGJUGVJku11fhCO5LOCOLQqapmIyaVitlqzXa7l3o1mothqrRY/ddy1Ba+aTCZPJhI11+CGw2WxY+iUhJlS+1H4prSmsowsdXdeKAexkSlEWFFWBToGEHGJZKzAKlbQ4JfsBq4Mk21iRQuTRsHY2mVLXFf22xRhL1rKhKWXFKLRwo4lOhBGs2OVlk0WKEoLFeyeygSwms8YYUoAYAqaqMEqShrISeVRUin6IDF5Al5wzZvyMYopkJwCNMDDShd+KM5q9WYlqamJfsjdpOJzNyTnx6sULbFkyPdinme1RFQV1UY7RmgWFrUlBEYJiyIZuSPSnC7J37FeQoyKlMDKGrBQshUNH2Zhjihgrpn9G74BFOQiNszR1TVnVaNMRQmTd9vh4ikqZMJ0w1QoVM0pJgSLIPoQs5o1GGaZNTZpUKDXgnILDPZqi4emzM549ecJsvs/hbJ/oah6dLVn95D5vHJ3zK7/0Dnt1iVYap6HWiGt1tyH4jAmKfWOoJ3O6kRRY12KaqZRms92y2RhKp9m0W9pcYpUhO7DK4ftIG1phdlknyGJOErOmgBApi5L96ZzFkDjv1gSt6L1nsVzR+UEYRyhcWbE3n3H85AHtMOAkB1Lir3NAW8Vsb87NHNExEVGEIKNhnzN2LB6kiJbMcJUzKHn+k2RAy/5hHCpHlLayBiqHKytJJDAZWxV0fcvKe2azimbS8OnHT/ng/b/grbf/GT/4wXdx4/NiXMHJYsuf/clHhAzffucmR9cO+O573+bGtczHH2149ugR/eIcNbdwJfv952r4i0NawZjoIwfhWACM8IYZX0Lp8T0Y81dOSr/idP3SO8hXvhKZzx8e89nDl+gM3/rG67x+e06xA5yv/qTa/fRX/ou+RldGuNWw8+6Qgkvc4FWC+x8/IvhE0xT4fsOdm9/jrTdv8On9P2C76fmkX/Lat25wdnzO49Mlx6sF+QW48oA3r93goLTsHd7jZL2i3l8wmUHfnVPsRTBbIgo9VFDeRKuC2cENvnH9Gqmd0tSGOgfOnn2OqQz1NcfR3SPevn7EqtccHRxRVdcZuo7YFijlWZw95+zFMQe37qHrBGoDQy3jbtVDf4bqVtic2fYDzZ3b1NV1DqLl9JOPuXPzOgf37uHn14mTG7j5HdzkEHQJthDQLwcB4kcTTKMrTLVH7gdyTLw8fspsv6BRlpA7rCvAzAAHaQaquojS/rv+eHcAhUjoROpYmR3N8Mq1+/3Xvov+D3h9RT+QUrrS0I01x5V7tkt60Tqh9KWXyEi4lP1YcVEL6lHD/7W/7T8DXkgspHxzs1zy4viY5WYt51Y2qORJwRNCIiVhdBXOYY1Dx0RhLH30KJM5bGbM90qGCF5BWU1lndY1rijYDj3KaGbzPWLOLDdrXFVS1g0pJZyz2LCmHba0Q0fhSqazKdeaAhMD223LbG8yynHXaKtJKuOyYk5BbeDJ05+yOppz49aKYi/xn//gPd77b75LjjXNdk1x/AXD5hndqyXh/hl9t+SDBwseb+DJukWVhne/f4+btxtu3buF2r/G9978LvneeyQ3h9LgJpn5YQW1uRiiWsCogMn2EvNWRpr/IRJWG54/fcGDB484PV8wpEQbBjZ9zzDKGnLKpBhwxmKtETN3JbT1nNMF63rXEOdxeGeMVOZ6nORfOoTlK5ISSWwUupC+ZGGkEfSM4jl14TOBSB/saDq8a8i1UZRVyWTSMGsmuEKj1DAOC0RCkq+sM6GM24sD2F7B2TOJrAIQxv63Y73uefbijE8ePOGDT7/g0ZMnnD6+z8kXH3F+ckroBwGwtMKTGHIYVXxSr1qXyDrig0YZYXRao9GmRI1sCvUzgKU2Vu7H6A+4u3YgRRqZ1pe1SL74//AVz/wV8MKM0bdKidT2S+ByypfVxc+8xi+qeb4mAAYyPY6J3vuxKTR0fU+7bVFFKXnnBpTOeB0oqynVZE41A11OWS4XpKxoh0EmxDoTh562XeH9QI6BhKUdJ+VVXVPEiNWasnCjwYwwDIL3bH1HiJ4+DJhe09Q1k7KhUAWVczhTkNAEJGqpXUf0ECizxCXhe5x1aBxh1GSllOn7gaZ0zJoSn0Sz1vY958sNKUgBm1TEaUWhFJWzNLVDAyF4+t7jY0ZpB1nSHvrY0/keRj8IpToKO1CWhejlLnG+8WAx8gDKri3orVYU1qG0I8SIi5Z+UHRtT4ge3ws/MBt7oT8TydNoZjhmL+80Y7voHQFQkD/jAyaKVEQB2shGFHxPTOkC/TfWiZ7eGJwSYEY2LUm+yDmNcVe7hyoRozRCWSUBYnSEleQPS4ZzoioKNEY2uyyRvElLI1ZVJZE5rnIoYwgxobPCmYLT0wWnp6dQFAwhsH94gA6Jvt0ydC1lWTJtGopKplBFUTGbCcDSti2r1QqlFEUhdP9+kDQTo/QonRkny84RhiA0wlrR9z0+R6pGDr0QAm3biV+aElTYFY7Yi3mr6MoUIXOxAWkUIXphlbjyAnWWewVFUaIiaKvZdgGtGJt1Q1U3dEMv62WcYIqhpsEPAylFrNEX6Kke0XKjFEOSAjPHCCOokZH42sqVbFdrcdXOirKq8eNBsltbrrC4wsr7HZH0KCYmVEVBzPJ5NnVNToHCGpJSdNsNfd+jioIY8uhJkmmKKTpotKnAVPikGKJmcbZmphYc3NxSziq2xo6TfDn8dtPnPCL/IUacFYmI2TFeUsQ5R91MaKYBrxVd3xIinJ0vuD6dMpnOSe2KDIQo9zll8FkxJNBojMo0kwbLII+rTxRzS1VUPHv+ilevXnHWb5nvz9H1nJOuZfPgBUY7vvP2GxxMK4wxzKY111zJ6ckCHTviIH4Gb1y7zWkOPO+W9O1aYtzMDArN+uwUVWhW+3O2KJx1WGUpjEXZgrOul4lR0xC0pl0BIVBPa0qjKYwdmTceNPjg6XvN+WJBUVV0XU9GQNiuHchZUbgCay25E5fwzWbDudNc37vG/sE1ymzYnC7JKlMfzHFlSUAkRUMIZKXE4NgLu0dMtvSomxQgYxgGjC1pJpqUB6wtxKTLwnJ5SjaOL1494c7rN7kxbZhOS1LqeOebdzm6uU8YTtmsz7G1otNL1psVf/K7H3B7/xY3blZ845d+i1//rdcI/9O/4fXXK0p1Qr/IlJM3QBfjUFoqlcsJkPiEOKGRMGafjS7ekLOYZekvTXB2ZfZVEOHLB/uX+RH5yney7MNotLn8PxF4cvyEk+VzNJmTleEolRSmksnqlVeT/37dOxL4MvPCs5OPaKzQtq3ijdeP2N+bY1XNZt3y9pt3sUPml+/8p7QvHxLrJf/2f/1Tjh99yNxv0dnx0cNnVHsnVPNvcOfuN7n163dJB5D6p5z95FMao1FpiTEBpTewdnL+XL+BjhZX3qLvBSh/5x3F7X/6DdKTn3Ly9Avme3tMrt1if7pHXK4o9xPnnz5juWq4/f232b5acPrinMn5J9SHe7JumjnaNqA82MjRvIab18lOE9UBhgLTTJncukd5eIiZHmEOX4Nrb0GagJkKQqbGlZDjlWYjkVWLb88I3RKL4+jGNzFFjXEF1ngIK9anS4bujKH7mMn+O0wP7qIwf43GdUfxURfGv1cLahiL1yt6hTQmiaUrdUZVVReMw8tl8A9hrf4dXFc2gbSrtfQ4Ed3R78fGKcZI3/cX99JaO+5JP3/NZpOLMx4uXwqUyM3yl01S9cXm9Tek2fwHuXYwrgy1NGpURGVePT/m+fEx624LwMw26JGFGftItxmoi5Kb9VwGgFtPXRSE7NnEjlsH+xwWE/rBQ1Eyme7x9Olz8YOaTnl5esLgB6xRLM/Pabsth0f7zPb2OTs7Q9tMWRasFlEa5XSdI9gAACAASURBVLogJI/3wqadzmqCGmtZRModU5DBnTWotmX76AFneqCuVxRFZHZ4jzvf+jbs34WPviB0T+ltQ9fPGIrAep047QNnm4HeZ+7crPjm3SNeuzNl0ANFrTj8/ruoO78EegZFArWUZLI8oPMgTFYiOgdyBIX4NFwwADO8Ojnjo48/4emLF6y6jiFH2hDogr+cxo/65GEYRM5urQRV5DEqWSmZ4qdIzkqkD2rnGaGwGrKBkKOkDXL5mheAhfeoqMa40JHhERQ5jlWf2oWByLs3xkivrSQ9ZDeQa5qK6bQeDeNHs2gFMuEWaZDKkLJCJyONrHDnxEYAUBj6ruPRg/s8+vw+L5885sXT53z+2SMePH7K85MF664le/lKIYk/kpbXMiqPaYSX4G5C/DR29XlWwvY0yiBcbBn87OqK3c+qcaCkE5fymgtfnCtPzyhT3/VtF09U3oFMWWofrQSkGcuXnU/eFchiZG7Arq65IHgpzT8AAGN309wYGapGTZYgQmlMpdBa0w+e0C2IWdGP5pi9j6Ad2lmMK3FGoYkUOhN1JqiAH+C03fBydQJZUxnLrCjZa6Y0ZQlKbnY0mcE6koFIQsWeVbsi9i2hC9SqpLKOwRXoqsBMGpSGppozY4/KGFKInJydEVKSQtTJp5dJYDXOKKpSJgZTX7L1PYU1WONpOzWmF0QKXTKvJxweztBakVNk6DzbbpCI0pDADwz50iU+pEzfdajUj4iXUNuNEZ+MsnQjDfDi5hNzwoeEygN6pEUZq+W9a0WMDqU1rU9sB0nECF5SQbTSYAxlUeCcI8Yx8mec1KssAUE7s86cxc0WkMSCLDGkuwclJaHWKS0yE6Gy79glMv3G5Qs5ihqLnwCjBl4ibUPy9P0gm0SAqizBWTH8SwFSHKlmAe87ahyz2ZQq10QEUCu0ZdJMqcqGs9WaAehWS4IfKJQwSvT4sKcUWS9XYiRpLVUtbIyiqMhKYbXB+14MRDM452jbVj5rY6jLCmfFfPFgtk/pHKvViuVmTfQBDUwmNUppYoj0/cBytaIu7egpki98AIxxuMoQY8Y6RdJyMHg/0I8HQkaAlO22ZbvaCPOhrDBaM+Sx4cliqGScRmc9so0kH1qR0EoidauqoiwLOTjHAimPEbWbzQavFJOqpC5LVM70Qy9g5eDpB0+MstlpbUaPlUsgQxlZw6CEIoySJkyL0ZY2irKs0VrTDQPrtsVHT+oi623HMAzYsqExFdorQhRzx4wheHH8fvT4OdbWfPdXv8/+wQ0enJ3B6MIcYiCOU3F2II0xpJRHc14DOQhl1lhMUWKGnkpBU5UUCsqyop40aKdomgYxlvQSuZsyPmb84GmTfM51WUAITEqD1pnJpGZeFuwXhpPFguPjF1BUvHX3dUqVuP/4OX235dfe+za2bmjKglkzwaJZny4J2jOfTJg6TdCWw0nF9b0pOSu26wXbdSRPLOu155PwGdXtW9T16/TrHjdpUCYTAhRVxbQqaE8DQxibw3FqkULEDwPbtsMPAR08y0XLZlZyeO2IvT3PWX9OGCLeeGERWYs14mWkAGscwxBYLFaYsuDo1g3aIdGHDlsVo4RNIsTkKZdEIWcsddVw7oPIr1TxJW3rVQ2nAnIKOKcxWZOMGJKuTk65UV9jNqs5PJxzdOOAyayma0uhteYMhaKqG9LC8b/8D7/Dd3/wNv/sX/5n2Lqhmht++v7vc/LiM37wK7/Ne7/5zynnE8iZEAZ2aU3ajDFl1l7SU9XlXgxf3XtdHuI/z4LIX/Hnd4y23U/s9KtDyHJuGA0W3v3eO7z97TewSrFX1VSuIBMZkqfUI8Ayfn0ZIPk6X1fvVUJdsX+LMfL2O3eZTSa8993v431mf19z8mzNcBa59oNfYXH+mB//d5+guoLN+pj2dEHRGJ6cP6D9+JSn50/40foL3nzzNvt9YPvsIddfm/L63RPSNc2w3eDPE406oMx3UMURZaqgBD0RwP3o9oTFww1HkxmT2TXszVu45RmdX6DNHkkt+OKD91mdPOH81UOePjhhGR+T8isOvvmUG7/xOqgC0obN/Y959cVnvPmf/JY0J3YOLDg7X3DaZ2Z2ymR6C10ckk0J1ghDawzvGy33xvuWyCrjuy3dtsVisJMZzh2i0thEqE4o7/SURcRkhdXiTZUvwKO/GkOQCeqlXHU32LhaJQ99zzAMFIWkseldM86lsZwejav/sV2/6HmU9DMrn+hoUKFHSpf3HhRst1uGYaCua6bT6S90+/9ZM72vmpL+/Efw9QYvch4bYKNROZFHY8xhs+XBw4e8OjulC4MMgVSPVlFIRgmaqmFaT7CupChr6pmiMJrtsILtFmc7SmuIqUeZxH6zz6rMnJ4+wW9r9qdTclPRdmdsz54Ly65dgMu4uIGU2YSOTbsi6kbYrh76kQG9Wp1zcrZi2QeG0FHZCh86fA7EHDAhcqOquLkemEfPqlyxOX/G9MY1tDuEJqEbizMziukcdWcf9+kr3rz5gvrlkvsf3memE9eUZ7Jekn3L3sENiIrcRzAZ+o7uxRfkaqB+7V2MyxgiKQ8olcCIp50g5pngE6+enfDp55/z5MVzVtsNgw8EydzEOScMYimMxt1b2Mg5CcAgmOdl+p2kSCbxb7hodsc9RYuJeBwlJjspScr5Um52uRyESaRHY81RS6lGM6gdeO+j+BEl5SlqhXGapqkonL4YVKAsCkvOmiAoDpaEUomsB2nuk6FrSx49OeOnH/+Yzx58zJPHn/HZ/fd5/uAz/GZD7D1+iKSkiMaQtSGpdAEO5JwlSVWJrYDRUhcxPot6xA4wIsHe7bMXmUIXhYO62EAumBhKjQz7K/cO6QfzDoTIl8lou9SidCV84eLD32GnO3BayXpISVi58vrmklLDVcw6/QMAMMbVY8bibhenWDUl0+kEVUSMjbiqJA2BuPW8enVKPDkdC7OE1lBWBSEOTJsKFT06Q10V2MqRYqCcZ8w8sFlvUT5iMAzdwFl/SlPXaIMUySZJgkNT44oJpW/IfaAcoMoWkxV9iixWCzarE3kAgYNmQjOd0ThHms3YeH8xCffdwBC8pCxqK2ooY7DaY2xGxUBKGmMVWnnUKPvIPuDbQXwdqppZNWUeJYnE+8A2Bl5t17TDQN8HUjeMUUyJoffEJHILNfp8VFVJWThmkwpjRqoVgJY5VdbgU5ADySoMFoMR34gIpvds25YYJCI0otFRpu6M5o6SrCJpBfrK4tuZdMYR3JDYnXyxWncPRcwZbcep/2jkSc6olEcTHXkQ1MgKCFFijsxIU1Ma4uDJfSfMhKyxZiJYqECEpDAAiUBkvVlRVpZJM8doRzcMkNXoxpup6oo6SCRmMxRs2y0xS7yus5aQEv0w0HUdIUaUsXSDyIT8EIgJmknDbDaja1uRS4XIdtsSY0ddN6zXWzHsrCtKZ6mtoalK0JmN92zaDqsFNPGD0GaLwuKHiHJ6nOhnhhDwMeKQKNKIkhuiDTFLJFXfi+dIHHWYKYsRpzTkcgCEGMYkBIU1jpQVPl4eDuJPMX7O2uCMRY+uyWRBg1UQOVg2mhQTUUVS9AwxobQlZY33gd57VCoupjZ5pKkpLZnbKH3BivApENIILqSIUjCZTLBaJEtZZYYUaXvPZrVkvdmyX+zTZEMZM6SMVhmdgjTRztKteh599oBZM+H6997m5ut3ebZYUjcTQh/l4TCWnKJstEhssUFhCotDYY1lvrfPXrC0fqAfMto5KmcxzlKUJc6IN0mIAypHnDPYMdc8h8hys2QYzpgXmnlZMikr+rgFHbm2V7Nnb/FiWvD4dMXxJnD/0885mk24d/MANz3grAsUrqQ+OKAsCg7QLE8XZJXY35syKRURxUFlee3aDKMLXr08w5++ovMJVRpOF+f8uG3JSvHGrRvYmahZy7pCeYXvPUP0uEK8HVKMJB8IRhJr4khHnpUF5diQOGNoqgo7FhAGJRrfssQqkVYJfdegcWy3LbnvuHvrNZg2xDaCzqzbDX0yYCwJQz8kFJa6LphVJedRJHpmnNoGH8aDOBCjl3gwIwyjlCM6K7abLdcOj9gsjhlSwhjLdDphOp+gJhW1m5GzYdGvGYaC4BX7k4bVySsePnjAk2cvufn6Hfb2j3j40ef86R+/z9PHLdfu/Cpvzo/QKmPNpRgjpURSVzLfv3RdZVhc+dYv/sZ4hl7UYD9/uqZRk4vGmowymiEkNpuB9TKRVUlUmdOtp3aJ+bSiKaqv+Bv+6vfx939J2Svvr7j83phdfzAXKq3WiuqWMIaNhnq2DwqMh/BxS86WJ58dM2fLXqU4ulayeuaZTStUOeWDD0958GnLrx3dwOG4/s2bpOnrlPu/RDE3pIOAMQ3JHZKUwxQTmrIF62ledjz+vX9H93HLtNxjET7j43//O7z3T36Z+fQ6tCsOJj1f/OTf8JM/cOxX93DuiKerD+k+esabVnHjN1+hVQ05UGSFCR7lNxBK4jBFVxtcDlT7e5j5DXD7oBsIHq83oEpQDZbpCPBcuX9JodUMYzqcyShXo7SFPIDrCHlFMh3l5DrWXoN+Cqa8IuHY3f/d9RXr+oK/P079+PIaFqBRDOfy6CW1+/M5JdDqsnbh67sa/74uY+3Y5DDW1OD7gRQD5+sVVVNfMC6qqvqF4MV/lJcgZSgj8F3OjE0yvHp1wsMnT6Tmck7Wo86jL5qlKAr6VhF6z2zvGlVVo7qe+aSiTppoe+pS40zCxEhSLbE9oVYtRVqjh46ZKTBFQZES0zeu03tP7Bd0J+dYrdFG44zlYO+AdbIMw8B2s2QVWlTX0nU958uWNmuUjmjVjJ9hJOae6EsqGni+AqcxjSHqCNc7ONxAY1BNhfUd6tZrcPdbHP7ygPnoIYcfPeDGgeEoDdyqG2hb3DaSnm1o/88/xFdfEOwem3bN6foJb//mt1BHVugETmr3pDJ6J8EYffdfPVnw/k8+4MHDTzlZLOliwqdxEKrVhSdeyolAHuvAETpPO4aBnGcxxjG9UNLpYkryd+7YADlD2nkoXIldHYcahXUXA9AUoni/jUyOtEtJQF9KOpOoA8TnzpGNNO+DH+i2W0gecoQIKluyKcZnT4ITtsM5q/Uzzs+esjx7Trvq+ehPn/Dgs5d89OnHPH7xmG27wQ89wYdxD3Yo3RCto8+aPgiAZkmonDBZYlVRktKnjEarJOx6nVApo7QACOlntt8dcCCSQTUy8bLIcVMmKyVDzSsGqZfpLldf7Mu9W2b3/+Urj72ApO5FlE3ofMVI+KIWUl96xQvGR0r8outrAWCocQORSJUxkjP1+EIaEj0aPxauwNgS5aRIjmmkf41GJCEF2q7HDz1Wibuv11A7Q11VzI3FW0/tHE45alOQQyL2Mgn23UAXBnwO6NZQ9jVVUxKTx8SM0QVlIdPe4D02KMpsUdELWtX3dAk8ikEbfBADTWct2oHN6mLB+RRH5kPEqUThxDxU+4i2YJRFG+j9wOI8MmkamdCXkqyQEK3SBLBbx9lyyelwzpAGrJIJP253XyX9IcVIt+0Yup6+azFGyQTUyqZclSVOi8GkuojJ8eNGIQuucG6Mvkz4MetbhAp53AjEmDTlTMgCBFwF0NRuUXMFxc/pIvKMnIkposZ85hxFZmK0xoyIoRk3KZnGjJRoBSkFjDYYKwVrSjtoTJFiQOUssXAKkpLo1cIITW29WRMMBBRdPwAKpy1Gabp+YLNeka2mdIaULBNbM6kqUsqsNxuJwxwjXpNKhG4QKUuGrDTdECldwXQyJaRI1/YSdxsE4ApBEklWiwWb5TlNVVHXFeWkYTKpsYWjKGq2246XUaJgnXMkMoP3KAJDEPmPj0kkOWiJ51ISYRrGdTDEIAkPo+GqK2tMcrQxkqMY1O50sT5lksooM4JIo0+G0YYYo0TJxngJNgFWadzoTTKtawpriH5gvV2hVEaXDcaVGFcI02GMxxUN7c4ROo30V3Uh50CLSaO2dpQsScOcs6TLlM6RFLgYCEn8U1KOhOApfWKmDdNpSR4Kun6gG1p8O2BcybysGZZbvnj4mGO2nC/Fi0TbApPGBaYUcRcprMaJdBRz1rpueOvgNSZHHlM6Xrx8jiJRViW2cGitSIjXj9GastAUpcOajtQN2CxI+snZGa3KpNke9XSGNp5hPC+mdUM2ilRWuPOO1XJFWTiqZkK2BQ9fviKFnvO253A+Zb9u8M4R+0BUmWZS4IeWiU7sV5bZ/j7XJhMOpzUPnj/jrN1CWbIOkWdnS24fvSbRwybjCstqseTlomW5XqGdkcJi9G0gg7Ol6C4Z2JtOuDmv2GsK+u2WdrkiDoEUe7xB4rCVIsdBDrgQWJ1vKJokvhqF+J8Yq1EG4igNW2w6krIU1Uwa76Q4P1vwZHXGSbshK0VQjs1qxWFTo50R+VoM4s2D+K0YDGTDsyfPmd+5xbTZR/UJ30essRgj00uKCqccauh4+97bHL/7mEc/fYhyBau158P3P+fd77zLrZvXuPuv/jmfvP8Jf/6jz9j2K7QJ+H6Dq4oR+BJ375QSFxQ4tRs87I7wXWP3l81X//qtmtYjhVdJ4RJi5tnxgg9++jkPHi4ZPIShxerI7ZuHfOfb3+DeG4fMZ8VFoS/XpYb4b/pe/u4vdeXryrfyrjWWIjem8U+NpudGK2KCPsFQK5ojzd7rM4oh8ys/eJNpMbDZnnJjcsid20d4VXH85BXL8wVvvPkah7e+xXoNgzmh0obCNGATIXp0YVGDInUVPgQ+/9FPaNoth+UtXr44ptBbzteP+OJhyS/d+yFh1dG3r3jz7oz3//wxi8UMM29Y+Mxrh9c5unMEdoFKE7rTLc8fforKgfbpC0xaUuzfJKeEM4E+r3GziGp6mMzBlaTBEntDUZbszLZlQgejIBtjK+rmAKU6ec4VYMVPymSFMjVGTVB5D4oJKSdS9BfS0V3TIFO6K9NJYOQEjb8bGRUjJXwnHTVjPbAzqtZXGABXGRv//yXXz/KyFGOKWJYp9OnxMe1mw97BPmVVXUhWr97Dn5WB/OO4RpbWOL0fti2PHz3mfLHC54gqDCZnnFKQAt57qfPGwZD3nuVqQxnBaU02CWUsg8+suo511xGsZbU6Yeg8erKPsY4X5xt8XGOLAmss7QDbtqP3Yvgu1JlMCJl1Mgwpo3KgTAMuDqQIREVZlGAixogpeqU0e8agUSx6+PHDM96wK27frikKhXpwBjwGbQnbFn++pNiboesOc/s6h9cKZvuWO3uG4tUZOWba4xXnZy0nLz/i6R9/QTe7RZpeJ2CYXZ/xzg9nwASSgzw+p6OXjgKST6zONnz68Sfc/+wzztbndCmQ1Bhrmhj35F1fIAyArPVYw2fMyIJQSqb8Wu16wy9LzmTzkTUvbLHLSNVd0oiAGfnSdHbHEFBqZNQqwpUVkkYPtJxHM/e8mwmO3oMmovUW8pqQDW0bOT8/4eSsZbnZcr445eWLz/ji8x/x+OFPefn8AZvlirCuaLeZTdvSp0F8NrTGGJF657iT4Is/UWHHKPBkR2b72Dfpizst/dUIYiglg+IdD/ECRt7JyK6ckZcAwo7dsbudX70ffNW+cUGgUDtAQqHUmHCoMj5GdIzYvGN1jCx6RoY3l8DF1df+RTHYXw8AY6fTQ/5RKQulervJnBkoZ5bsMiEHSlvQaMe0tCikeSiqimwM265ntd2wWi6wYhqB71ssidl0Qt1MpFAMAV1oMTu0Dl0WqGHAxJImZ2LweN8Tu0Dvgxg4KkVwkdYEkbU4S1VYJkaPzXUC7/Ftx7Zv2WRoY8KgKK2VSaPRlM5RFIUkN8RAJhExFKVjoGUZNlJFKY0uLMYVYoxpLcoYlN1l8WZQCUtmWmlCr+mtImrwOhGjpIRo48hGE6MiaDUikNBuO4nI4dJLoSoryrJkMpngrJU8asxojinU/pw9ekTqjFI4JxIVtKHvB2IY5QAZfBBDUD3qU5VS6J2RjrrUvQJkrUbX2x1TQzYebaTUsaO/glJKSp8rzS2Mpp9ayWdhFFmF8YFVKOVwxqKyEXAmG6JOWAOTUlM7echXqzVbL6wVZxyqbMSHYhjIKZCTxllHTpbD+YzZZEIIEecs9dCwXK9Zrjf0PhJSFjM3a4kxsliv6bcbZnWFcwUpQVU1ws7xHq3gcG8flSPb1QJyIIaB9TrQrZcS4zq34+GZRqaJwhYFRiW6bc/J2RnD0JEOIjoamrqmNhNMWWOKDRGR1GhrxzSVJPKFKOBDCDspjyKGyDB41m1PIjLdazA6j6aYkiRBlkQRpQQJ1kqhc8aisWjqoqR0bvR20yQ1JikoPUqN5HPOMCYx7MwMr0RbMWrqFGRj0IVFOyfgSvRst1t0zhTWUJSFPBc5oclUhcU4TYg9hR/YczP25hUMliIPbIYBqyPLdsEtO+O9b32bxRtznnz0FyNinMd0EohRfFdijgQvfjApZXrf0RmRBxxcv8benTm2tNjCsFycUVeFmMoa+bdrqykKi3WalCKKCMFTO8PRwU3auKE7O+PkfE3RJ3JdUc33aJSjShAHxzxl6qIiXZtjgL3ZFOUcT5+9pBtaTruBWVNxY3+fEBWTZoaZzbCloiZxUFtCLpg0Dl3UXKsn1Mry559/Qt95mpvXaQ6uE6Jiu2lRBQyqEuZFVaAHS+gCWhcYrbHaELKAYcY6ck44o5hUBbWzsg93HTkE+j5AGJjoIN4mOVM6h9UGpytWZ1tUDuzd2iOM+2M7tOgSnCrxMTFEhXUN1jZo5VguVkL57bbsHxxweK0ixSCMmYzc4xxHJ3LZFzSOqpyyPNvS6TPu3jnC5ozKFqNHwCEL80bpAmtrbl67we3bN3jy2QO2C48aDB/++D5/dOv3eefbN/jl3/xlktEctxntMuvlSzbLBTdv3yZrx84M7IIq/5deuwnGxQn5/+oc/dkmZnel3STmAhyB6bTi9TfuUFfX8D1E77EmcbhfcTCrvuJvTFwCGH/7KNe/u0uNRXRmp0EWH4yR6aTEiFCry6lPih4VLDpphiGgysAb35xS1a8RtnuEKZTVnF/73m9xvjhGhzXffusak2HBhz/6mPnNfd7/5AX3//B9Xrt1yNt7jtnkgOnNdyiuv002NcdPXnD8dGC92vLkk8fcdhvulW9w694d3D24dfsmupyR1T4P/+gvePzwfd559zYPH77g5MEJRTLU00PuffMed++9RVi+IJvA00+e41xk/523OH65wfhHXM8NxcGCzq/YdC+x5ZKUX5L6hA4Kp25gKNHRgM0k5WE8L6EgBznvdWHlXBg6dJqiigk5KdAzlAojO9hIkUpE5JvjZ8ClzvlytV9d0zuWxiVbI6fEer1GKcVkOsUWhaw0rUWSuKsTlYBxX3bD/7qux7+fK+8kIynTLhasl0sK6yRufFKPjKzL5uNqDOU/nuuS+UMWY/xXL1/x+PETGYTGQLSj6bwR2Wzft/SDl7PPlZwvVxwfn7Nf1Ay9J+tIqz2EgOsj66Enu5JN6wlB5L1aGbpODBj1KFXd+XslFcdEvkxBwijFJhuwjsJI6p8kCEasLojK0g+BoU+koHBJUQRP33Y88x0vn75io1qO6pqZi6hPX8LpEiY1+XzDsFgTXrxAv3BM3AZlDLrqcXOF31q685YXQ+L5oDjtImuVKYxi065ZUPPu7W9Q3vkGmAlQiDw5g1b2ggy3WW347LNP+fyLT3l1fsI2dUTJLBUgwQjLIfkgteA4JJP7kXYjefGvyxk9ytS0kb0g5nQxRNvpKWVIqi4AWtmspKnW2srgM+0adQEuBMQyFwPTlNQlqzRGrHGEJGwNO6aRxBTpug3Pnn7BqxfPeHWSePBoywcfveT+5895/vKE5eqc0K/ouzPisCLHXga1ZEJUJK3IphJmSQKHotIj4zfHEagIRKUI2hGNHY9jNaLwmUwa02jGPXdkUuyAexnyKi6lgldB/nE4qcafG1/jIkp1x67I+WKPvzTwvMrAkHsp2/NuPxmtBBDZtxolLBcSmJR2UMeX9vNLz42/HLyAvyWAoZT6AlghfmAh5/zrSqlD4L8H7gFfAP8653z2i15n54/ATqOTuUjUiDESk9D5+74nDgGUQZmMzQFdFGincWWDqiuhFmqJ1Mwx0m82hKEjKUf0mRwGVIx0IbIdPNk5TFWRnMaUlqYosBlC2xK6HpcSVZZ4wV7Bebul2wRyhtoWHNQNs8lE6P4u0NmCsqlQXlz0fdfjfUSpjDFi8OmsOOUKoGHIWuOyYpYV05TofEcMiWwVylmUcSStiYh7q3Y7M6VMDoFKJ6bOEJoClzNDSJLyMEjcYcYI9chokpZmXxnJkU9Z/A66PjH4DrP1nJ6vKazFWSe+GTs2QGlwLuG8IViLVjLVNCNFOllNTkaQ1NEjQnwZduimFku1q9FF40K+dMAWjVqSBYZGQCA9Ahd6t9B3B/COLZYVhXZjsokCFSTuMifAoPMYqWj0CK6A1VBXFQd7NVllFtsNagQkCiORnpv1mpTlwc4xoKzGGESCkisKZ9jfm6FMQbNeY0/P2HYDbT+IQY+xkkBiDKnbsl5tgJYMWFdQliVVVbFadpJ6oSw51rIuUmS53dKHiM8t220rKQvAdDoVCUThaKoCZ2CzWXC+OMf3PQUlVVmTSOxdL7DWYZ3Em/WDF/f2JGyZDBefkRq1b9578rbl9HxB2295vbhNVRnIIl8Syp1sWsL0MONeevmZGqXENdoIC6kwDZDwxhC7kXGRJHpXDi3IUQ4lSem43OSSEvZIVJaQMn5Mien9gB96SqtHGdgY9xt6AdpMJmWPHjoqNUFpD6mlNpEb+xMoM4Nf0lSWt958k+a336P+1uv83r/9d3z+o5/Sv1qQRvPcyEDh5DDLozfP4MW0MyZh0ewfzbh2dJ3TxSl+aCkLN9LwJFnIOYt1wq7KKWFUpjJQml06yITGFgyLLafrDcqUxKiorWValpRlqdtEcAAAIABJREFUQT10VKplNpmhUGhXQFFQzmb43rEFhi5y+ugFNZpbe3sM1uFTj8me69MKUxckY4lZMa0r9NFNzrstz1KPmU5p9g/J2dH3LaRIKD3GGY6uH6Gc5vnyBGDcay0+cZH4AgjtO0acKTHWSnoLCmLE9z2qUmgyWmmasqSyBYfzQxbdC9rtln0MIQTIgdV6gVaeiZ2BcZKa0g2U0xnDELGjd0x7ekLf98zQ7I/Swpx3oKgY1eXoyVHWmdIWZxpSsHTbiD6YIaZjVkyS0ZDFB6KyU2Z2nxcvnnM+vGKrOlwqiF3iz/7gj2jqX+UHP/yn7N9+k1tv9SS95ez0Pp998pjZdEpzcMDOxWo3lb4KU+zKrHFX47Kx+9s3FRdO3+NLZ6WYzRremTS89Zbg4WN4EVaLdnY3dL+89BWA5B9Ko/Pzun0znjspBymerdQSBFFA1I2nrgv+q9/+Ib/zP94nFYrD+QFxOXB08yZnw4q1LTD7M775nW/xyU8e8+LkjL84fcmnJ0t+9QfvcVTs8+z0A+z6Ea/Zc67P7zCcP+PRh494ddqyfNWjp5m9ay+YTjXzb36b4mYDusavK5YazP5tbnznh/yG3uf+jz5hOn+Dh89OCMHw/PEzqtM1yhzy8Z+8z3vff4vmzddpfUs5m2DqBbiB5BR33jikqhTDZkHcJKLyNHsZ2xyCqck4MiLJ2oENxmSkpIugLDnVhFihVTkOWEfD7rE4NcgkVKsdqyhdrBFZe5GvLkPNpQ5bqQtTyaIovgzy7bxs8sWo9P/DNfIf6TVq93MIOK25fed1GXY4O4JAX2ZcfMk09R/LdZU2D7Rty5OHj1guVtLCKUVMCaMzxpQ4YwT4MYrOB1Zdy+nW0/nEWbvl9GQBTtOZRB48RYAuRrLz5OQJwZN8QimDNQUgngZFURB8GKM/FRNbCDsgSvpWY2rq2QynM/35MZogpt9YYjLk8SsljSfRFZmQI5UuqCYHVG2i8AmVevxigT2PKFfhcExtTTjfkj74EI6fEVeJ7umCMtVkW3CSek7KOev9KeiSqWuIaM7PVjyZTHn7ve8w3H2HwVSQRYxWjCCySpqw9Tx/8oRPPv2I56fP2caeNkmjLZBQxgDRB9LgpfbTisjIxiVL1Z+5YFHsTDkvDWVHJi47ttduMLbrF5DfZ4VS5sILK0WJZd2xERTqMhBAXpgQIsOYxphiFn+1HPAp0b9Yc7J4wWfvJ/6P9RmxSzw/6ThdRc5XkU0XRo+KhMkDKgcMUaQdJLQLpDwQMqDkMwQZsoYs0mkco1+VIuuRXZF78QhJl9KQNEIXafx36iwpOTlJsEHWV8cb+vLX49qXIWMWBkcegejRvH93jy//+K6G+RnAIf8/7L3Zk2TZfd/3Odtdcq29unu6pwczAAaYAUBsJEWKokSGKYteQvaL/egIO0L/guVXP+lfMN/84gc/WJYjHOGwRIk2KCEIkSI4BAaD2ad7eqnqWnO5y1n9cG5W1fQMCFAEaSqCN6K6KjM782bePPfc8/v+vsuG75GGXVwDhJF0Hcsq8lIopkiMw3XiU6DKzevHT95+HgyM30gpndy4/Y+B300p/RMhxD8ebv/3f9YLhJRp8BtDOFJAFobRtGZrVlGOFFF5hJIEHwne59iYYPFdz6p3qKrCA52LSJ1lEWVdUxYF0feImKikoBCJ3nuWXc/JasHS2mzkVlYUSmPLktoUKB/RIlGXJSNpMHVNbyB1S2yzJLpA8o5u3bAOiVTa/MXIRFFVzEaSOgna1Zp+3WCkpDKGEDyL9YoMDoocPznQo0NwCJHNERlAGCU1guxcuykw1ZD8EIaBVhcGykCqK2qR4zCDh673OJ9P+N5n6UAYTDKTjYMx00YukCUb2fcArPV4vwKgMAVVXTEdVxRF7m6ZosCIcrgYSkgSoQxSWfreDbFcCiMlhJD1WVKipbhyEZabrOQhSnEzVlMCoXPnW6QEN+J1r5jAXBfc2fR3Ez+YJ6WMmmskGUAhioGRkt2mZTQoIymqksl0ilCCIAQIhSlLlJQEm5HsGBwxZt8IlSwISRNWAz1KoHTBaJJZCZFEUoJyks0abchRb63rETEQeouUMrNwbGYMKSXZmo4RStJ3DUkItnZ3kCTs8QnLi2wc6pxHCJ2pi3TouiaE7KWwffs2Ih1wfn5Cs1zhXeT0/JQ+NHRxSkJk5kDs6JqGvnNYG+lDoPeR3kV0VRK1x6aO1jlE6lgsl6yaJbs728hUIkSg73pcb/NkHjwxuCw9GUAFETNqbPuWqsgRuCLmWFUEGKMonUdvJmQxJNAomdFl5EABjAgfszxHRVKSqI1hLfkYVvWY2Lc4a+lEZgEEKQgBXARPjn/1YYXwJaFZ4VcrakqqqiDZJa+89ALf+uIvU27NaNdr9qZbfP7ll3n69vusbY93FkkgKI8VEhsFNmXmlZQJqUAjCB6QOpt5aoU2GlMoVIqD53QGwbzPXUVlFJKEkZK2a/nw8TFPl6e8dO8u81u3UeuW07bh5PiEdUyEnR3qnRFVZUi+oyAyGo0Y12Mu25aL4yOerVvMaMytw9s0fYMjkS7XTJ4cszfeR/lIWY3Y1Yo+JTrfUyFgpLm1PcWoKXJnTlkY+t5z0TlkyhKs1lpGQqFVBZgr+VguXgJGC8ZlSakNQglUaShGVS5SUpbGCRdxLtCYguQEpYik6HB9S9d5tK7QpqOUChUDpq4RymBtoiAxLkukO8c3LWqmQUru3L6NnE/wKfLg0UNW5+fY+Tx31WLMDK6kEN6SYqQwBUU5wq7abK66tcfF6pJbtqR3CecU8YoKmy/JSkK/DmzN9xnP5nSdJ64cXdfy5NGChx8eszztKOWI3//97/C9f/MvwDZU5S0Od+/xpW9sZwkU17TITYk2TE9XC2nEzQv6z759+hnXi4BEIvhcaBryAkINU/f1Phmous9zLPIyRNwAMf4qGBiZ8bcx+sr7k1eT/3DPpzo0A/MiCYh5rhAisjF3jjGn02QmjCWLBgVReGIUaO0RybOv4Fufu8v23X2M3ub//Gf/HMuaoigJDn7/O39IGSS6Knnvo4ccEWnNlKOnK97pLR8/+RMu5RmHH73Hf/Yf/xe88LX7NIsLHv8/77K9fYvf/Ad/h+//v/87T85X7MnXwEyITmDXj/nSay/w4dsOuWp54YVD6olnuRjz+PQcu1jSFj3TvRdZ2Dmnp2DDDMw243sHjHZ2QfagFVrU7E93kTZQqhKxvUtyBRQeoS1DnBWDqjoXBYDAk2JLIiJkhR4VEDVJQhg6aClpIPtc5cVqB6kjOoH3PUZ7pDEgKmIy+Tmih5QlihIDqSRtOrUJgs/meqPxOHs4ZN0qKHUlIRmW0wg+GeeZNnHbn4zu+Svfnu8YfoLezs8ZIEg3Qc+ru/LZIsjHz2hKM8sd1s3xTJtDft2BvQaLNq8wFCziuqt9BV1+5kdIz/0tbpyb4hO/NjT16+eIIcoXNnJkgQM6UvKAQogMtoEY5skNC1kNY2vw3bqx+yvOmBBDat3VJwOR08DF4K+FC3Tn5xx9/BDbNqiYKFI28Sf6vJYQcQgUiBhTYW3g+OgMkiak3PDSEVp6onP5PqHAJwwRQ6CcVGhT4Hzu6NejzMIVqSIFT1EUjMqC3rUURYmqRjhRMZrPcW3Lx8sFvgs4mwMKGDyWlDJYL2idx+pEKASznSn31V0OnnkK4zMQ2LWkpSPEjliO0XtTFJ7ytIGnJ0gzp45j+lZy1kTOU80zFE9Dx9p6utUptrd0yrD7+ufZfu1V1jqvdcuhbhURCJIUBM1izaNHj3j09AnLfo0XIa/QY4Qrv4qIt47gwzA6MrMhMkiWpcrfUQI/+P+llLJJrRoSRBgYBEJk2WmSg/R9SBe5Yegth8ZpDCH73A0M+4jAR0uIAJkBbW2H7VpCCHgfWTdrVs2SPrT0ocH5DhM8Ey+RSdH0gagKgjRXjHKfLDFtggNAk8EJ7y2kgJYaZQwpKYhykJkKQsom71EERMgrSFREyuG1SINfxzAHDk3eCIjB2yJt0ALCDdPOzTker28PbPx0Y155XkqyMbLfYMhCXLddxGAkGsIQR7u5ZKd8DU8iDZK2wZsjglSb18yt6edBi+fB1c/a/jIkJP8Q+HvD3/8z8Hv8FABDCIGLEW8tOkSESPjU0yWJjZGxqCi0wgUPUmBmI5QpaG1P13S5o7w+vxHfKZiMRszHI7TMFFEtJLIwyKJgosdUEfRlwWi5BCExWmO7nrDq6JVGCXBS4GNNY2YUIVAYRV2UCHL0ZqlKvHWsW8tFl43vksguwFJIRlWVC3hNpvBq0GVBVWQqmFC5wG/7Btv2GJWY6BKrS9ZdiylgMq5IIQ96LTQKjU5DASQUUUt0gFEJXncgPAqJKiRBysyAELkHYn2kc5Y+RowLNM4TQwItCUoQkkJIhfM5UicWRY56dJ7zxZLFcpnZIyInQpgqd4R1YbKDsAKpEsbkJUryiSBCBlzUBrAQBPIgV0IhRaaL5YvKJo84F4QMpkopCgQZILjSrD23lN7EBOWEjRtabSFACgI5qtHKQPABT6SSBVbkmM6drRlFVVBdLhGD9i4YTVkqrO1xVuC9yKkUMbDuLJ1zJJkBjKW1mUSrB+8NFUlKQpT4mGj6Dt/36JRlFut2DaQcU6kEy67BJUdlDMTE6cWC8XjM1s4u0/kuxyfPODk/xweHLipEkogYOH32lPWlYXt7zmw8YjqasDPZwnaRdXvJ+fKY5YenjOoZydeImFheXHB2vCAmy7KzuKToKVkvHYsm4IJkuWxpmzOa5ZoYA+/++F1u3drj8HAPicBaS4gWkqcAVAooGfHOEpIF4Wn9mjpqjFCYMhvXNk2HiYFaRgrdY6qIqSRlZbA+IE2Z43qRGCSVyiZVUXqkFwjrEcJAzCBFoStm0ym+W7NareisxaIIStNTE3T2MGnsOUpP2ZIlgTEiaHpbo1zH6eMHfM/MuZjtM7k4QY8U9BYlI0rnC1zfO2RpCFXJqfPMKp2TZezARAmJvg+0XUAgKXTBdDImri8RRhB8h3A9TVCU5QwfEn7T5IyCdRQ8vljy5nsf8PDojK+89mX2t7fZLRRjIwjdiqOTDynXFTvzLbzQeAGzccWeUZQWbk9qXEg8PVvhuyMO7twhSVi3LW8/eIJOPS/szTmoFGNdoIOjqhTedlTjwEj3mKJkMqnpm0vEaM5Fo1ktLdY/4zIUdKctfRsR0eTMcLK3R1VGKt0jFwW4SBCRTiZ8qTAuUVQav1jQ9ZaQSlYdTBLMQ0TrFt83tN4hjGY0n6GCw11c5AV4tUMIktOTc/a3BC+ODc9UyqCQzqDx6698DmE7TLvm6MlTHqTI4f4e0/mcFDSxT+gckp4XYM2KUSFRo8QKzWh7jpxqbIIk68y8iNk1XKQMTNoQGE8OuP/i11g9+UPafkkbI0WpeeutB/z4ez/gpS+8zG//3b/D8eMHfOdf/EvOL875/td+xN1XvkQ11SBDZgfGbA67KQhS2jBCw3Dvn89U73nwQojn7k05fAJxzfZ4vhC5Knx+4h7+asvCSMIRsDGgRIXz2R8l+ITREJxFikhVVkNHLT9LagdIRFLgASWIokfKhE8Fl0sLSTObGgqVjYClVkQkIZRoOUGNKw72d1GNJU4FXitGuuSFaorA8/Dc87v/+rv0hQczx6c51lzyztEbnAVQXHLvK7d49eA1fvQnb9Luf0i1tUtZR2SyCCM4/MrX6cqI2vsqyQdEd8Zo8RQqyedudSw/+h479+4ymlU8a3vO2mO+pm5xb/8eeuseb/2pRc1+jf17v4E0JaPbPVBD2oH+guVHPVMT6boFNhwzSSXeTrCmYHrnNkgDOIRwKBQJkxeSQiJkyaZAjEii2ix3N8BbllgJIYm+Y7l4n9EoEi4L/uC7v8dXvnHAzt27RDdByfuIUtGHM5rmhFExpixfgJSLT2QuLstRRVlX+bI9DNAEpHBtRCs2MRA3+UBiQ8zYlKf//4AXn7VtGITZdLv46U/4c702NxCL6/1lcC+B2tx9A0i4Qe4KQBz08wrQKeU7N4iSyjT/DCGo66P6Ew9xuvGzeUPDPHalu9+0jANXUmgyiODTINdICeUv8Mu3WZw+QI12md/+Fklss/FYEClfPJMQxI2EkUgRGZx5BVYI0gC66ghm89kjRClQxmx4RuiUcBfnuNUZoV8jXKR2DbW8YC0bOr3DKuS1RSkNCUWzdowZEckhAVJmZqWylt2dGX3XM5nNmFQ1My0wIjDbmmLGJefLBaYeEZOkWXWMijHdqsGQ2N2acXl5Rr0147Lr6c6foa1gvVyRfMAGSVJVLt6jA+FIBLwu0KZCxYArA+OXtvhSL9nb6ym7Y7Atcj3h4ydLOgqWvmO8PGXnVs2WkEizjesKVtZw1mp+8MERbz094SLCcbsm1IZV9HQh8PJrr/P3//Yv8uVbe4yHr9WIhMp1dV5fLRoef/ABjx89YbFaY0XCR4/CZ1GfFGiTgR/v0zAeBEoIpNCZ+QyQMvPcx5C9KIb5WmqZI1YjV8zsMMS3MsTi9r0HIlopQsom8kkJovebWQxSHOQkudj2IXudtOsV68WS5XJJ2zQE5/Ah+2FkoCODIg7FWurB/05mOUvI89UglObqLBOSdBUVPUjzBZkRKjaSmMGcdPATkpDlJCHLHzNwkB8TaeDDDd4ckAYoYDjJ5dAwiRs5X77/mt+WXyTcYGBJqVEIYrzmXW7YEyENq4c0pD6m4fWuZGib83MwXWXwsIgRUwxJIzEOKTO5mZ4tCuS134UYEqaEHPwWP2uuydtfFMBIwP8tMpfkf0op/Q5wmFJ6Mjz+FDj8aS8iRHagDS5iU2ZYWATWazonaNtEDCp32rWGEJGVxowM46Km9J7e2hw3KQTBW4J3nJ+dUmjBqCqRWrHsHCoVjPWEsq6Yii1MUZBCpDAG1/W0TTPo+gUpRNqmow0OoRV1KSl0QmuRXZylBF3gC0nSMXcokiN6SwqBrndszE2yk23+YrxQeDKyrZAkWaIKQSkT41TQ1Q7X+VzAhzCkeeSTVAmV6WUyEhJIoRADZbMuK1SSyJhN8uQodyiDGPRWCXyKeAGrzrPuLbbv6a2n7SytzdIAGXLXS2xMR5XKTr8hJ59AyskR1qK1QirJZDLNoyFEYsjd842hZUrkmCp1nUqyMWrc/B2vTBuzl8ImceQmtfGKcXFDk/WJTd5oFlwNz+G+wchnc4f32fDVt5dIt8K7fUw5oijKIZkjoZOhSAVFVeBtQfCW6B0uJqT0dC7grcO6PP7iEHMwqStsjLRDTGnXW2LIkV0uCYzQaJ2NHUVKOOtJUjCqa7QpWLUL1k3LtPeM6ppRVTGfTnHOcX6xwPcdhdE5pSYmlotLLs5OMFKws73F4e4BW/M9prOarb2a5eoS2yd8FLiu4+GDB2zNC7Z2R7S25/h0TeMUTgra3hFd1jfbpsM2LYJEISTLyxVKQCLgvM+dDZUn3LZvqcclDLfRg+FmWdA6x+nlBVLojHQ7ixDZ/aVxHeu+oQzbOBeIMWDKilE9Zrla5Yk0BCiH7zPl7xKpMsNGG4Q26LKgTjUyJKLLPgk2enqfNZNSg5CRShWMixHBSy59No88OnrCd995TPHH7/ErX3qdX/61b+OEpw+OzveoELOxb5J0wcOoIijFxbpBCainE4ouXxjlYEibUjakI0aE0INkQKC0QimF95a+6/HWkZLMUjFTsmw6zlcNLkZefeklDnZmbE3GyEnFem1YrZcsFgvqoeshlUC6nq2q5PbeLmd9ZDqWNI3low8fsnu4y+3JGLG0/OC9jzg6nfKlkLh/5xY65nNQFtn4djwqEEXJ7mxEF7KUrWla+pRoYs/7D085W7zPtJ6wNdLEsQalsqxNJsrKUJgCyCh9H3LCjAwCKRNFqZmMNeV4jwskvm0JSVBkWgIhpewPMywujJKcXyx4cnTKaH5IWY4gBlLfYPCk5AkErOsheA53t/ny518h2Z7LxQXrtsVUI2LIbCwlcgJUSJCkxMtIVFBMZ1RjhxpFVn1H7zJFNTlL355h6yllNcKUMJqNuSPv0p8u+OCddzldXRBiwcMnp/yr3/0Ov9pbvvy117h7cMA73/8xo0qyXi75wZ/+KV/95tepx6NsCi3NtU/nzSYnG+Nhrv79qdfPn+Hem8DEX5/y7qdvSQikNIQUWTcd7bpnvVzStSvqUjGfjTg82EMJDQiU1Bl0D4Fqcz2IAqVG+BDpnONyvURpQ522UBhUSjkFxwu0KBBxjNh+ibD9mIunD9gqJL/5D/8jnv3wDXanI05PTuifGWZ37jM7OMS2gu3ZXer9Aw4Ot5mmhrd/9D0ae8kffedHaJP4WF0g3JyJ+Ryvv7zL4zf/gLhtuHf/a+i0BcsWiojHoYJHE6hGu+jDV9kVDmcs49FHNE1HLKccnfWI8YTqjoLRFkJURHocEj0kAMxGW1RThZgLTt57E73dsGgF+/e3yROqJNu7DaDZ5lqbJAIzyDOH6ljkSPSYcsqPJCBEbv3Z/gLbN5TKkILGiBK/alk9eoxLu8x3PofSAz3aKLTWEE2OR7wpyR4sSz4BoiWwg++AKTMTVH7GNf6vu/Th2tD05/c+MyaQCDHLk4c98emDuHnoCuUAcgc0DPKeTRKHgIEJndmS6c+dTnJjUnsOQP0EfSNlRtTN7u9ge4AIif7ygsdvv8Gz43e488rXmN/+hSv8Jc+bAYQnCU1AEUgYAgQP1oJRlEbihCSgBkmNGJi4ERVTRm+ExAvobM+T0ydcNpf0tqN9tmJ9+ohgn2JnYF7WxBAH6arPVLVNcTh0vxFgfU9VFbz0yotY6/AhUUrFKHk0kpB6XN/jyV39tvdU9YTJbMT+/jYqBnA9TQemhDKB0YHg17h+leWwMq/j87rfgbAk4QgiovGUoaeSJbOqYE+PqLsJiBXeJ46aJT9sIqmu6XCUK8eqnSLvvkTXJ54tLQ+O17z3+Jh3n57xZNVwET3L5Eh9Yuk9clTx7Ve/xcuvvs52Ob5qYijCwHTJMfOXxyd8+OGHHJ8c52ZfrcleFwHvPMLl6NQNaCqvjK1z8zLbNomB0VqAHDweBnmxD/6KVZBVUbnc9t5nCX4UV4VwZmP4XMAnMbQHIiF4vLNXcc2d62n6lma1Zrlc0jdtXqPFG3qNwXtPCIESBsgS7IQcDCuzJPOTTQR5XcNIOZghX5ffN2uZODAWorhO4NgAkXIwWd74w6WrR6+4iTfOv3TVqLjpCS4+MT0MNVLi6nfcMCAQNx6//v3JuuuawrmJUhXD+jffGkzTZfagEilLVOMAaiAHwEfIG9PDwKSPcZjKfvKc+RcFMH4tpfRICHEA/HMhxFs3H0wpJXFTKHNjE0L8I+AfAfmitKETwZA9q0lC4SN0zg8aH0GwgdR6VNej9M3EjBxRaLQmKoXrO6ztUSLH3pCyxi05T2cDhWnyQBgoxghFUY5ISRJ9oCwrClPgfGLZWby3pGQhZASwbzuCjYSQEyYigqKuGI0qlBH0nSOEiFaZ5rRerzk7X9JbS+8sMSWUUpkmpjRZ+5VN48rRiNrF7JSvJErpwZxSoZXKaWUiwUCNKpQEJalHI0pTEK3HqGwWmgRY7+m8I4UcWSQEzOqKUmucMVjn6UpH7wLOJ7re4nyk95k2JWKOedVKkKQhxoRL2cym8w4AO4A1ajPsU0IEQRQbKthmMtnQlNJVfnsM4QptFcOEk/x1dNonY3zEJ06mm783xpafekzkkzGmDV0sSxRICbf09BdnnDw7YzyZYKqKqq4ZTcYYbRBC5qJTmiwlCZ4igtGRrncZs0mJVdPQtH1mvGhHUVcURUWJYC1ysknrUtbX+ZQNHFX+rJKcsOP7QBs6bO8JIdC1lmAd7WqVjx1glEYbw+58i+l0St+3rJYJ2wMxsF4seLBqeaqfMd8ZM55r6qpiOq7Bl/guMKqy+7gPAescx6cnLNaRNmR6pEh5QROcBx8wWuF0wfnZBcvlJUrDet0QY2Dd9pwvF6x7QzKSQklWXY+1HZ3zOHIHres6oo8oqRiPKiBwtliyeHbBw7MV+3fuUU+mTMYj5rPhophASE0IWZcYdMIz/KSES5E+BYooiEP3vqoUfecJjaVzFu8dFdlkM/QWHwLKmEznDxFTGsazOayWPH38mEejKevmy4gdgyxLktbE5EBm9k3GdhJCC4pJhXc95/2Ky9Yi9BLbLRHJATF3G6QkbaK5EpiipK5q2jaghRhkKApldO4+IvHBcblY8PjJUwieOJ+wtzPn4PZdioszlucLLi8XhEmBKQ7RPuTEFCmp6wrTBgoNxXRE3y15cnHCXl0iteHSek4by44XlKogxIAmUZVj9g9v46NHR8vUKGqtYD7mdNnQdS3KdnQXPaltCQvYEtvMyx1cnCIitJs5IySCD1csKzOMc5FgVNXMt3fwvWPRtPjeYYcoNETuD8QYCUkgtSEJwfnlJQsLh1sjwICIKCUoC00IjpQS2iimswl3XrjDumk4evaMqqpQRuduTTZYGeLWQFUVAUdQGlNVlCNDosWGHLGahlSFvl3RJ6jrknoqmWwXiHrK7fu3OV+cc9QtkUZT65o3fvweXUyoP/4jku04O1sw3jrk3Xd+xEVzzr2X7jCZvIiPMX+Om9fDG3/9h+Mx8Ze95YrFh0DfOfo2LzIfPnjI0dNH/N1f/1WapuHxo6dsz7eZzeaEkGitJCIp6tzxK5SBkLtWVak42M8sQqOH6jkJYh+ITUCPDGCQ5SGzL/wioxdfRLkVO3tTDrciF6cnHB1/zIkJfPsf/Da/+PVfZ/XskvH2PrO7rzDaMiT7PnfemvLDP/kBjx4sOTBT7s13OTnS+NWIqveUxZLJvRcpRI8/WeB8QaokJycNVeiQrmLdz+ifBJRyzLcO2d2+hbWXPPvomGZ3ws6Lt7n71ReoZtls26cJQVgUS1CW6Z1K3+J8AAAgAElEQVR9VF2i5zUvjLc5v1zgygo9mcMQB525jmnowWc6shgSl4bk2bxYH7ppSsQBvMgFaCJgKsFc7iNVhVRTvvpLv4Ex59h2xWhyG1mUIASF3EbLhBIaEapsCKoGAvhVXHq8Ee2e34cyCkXMb1lsOol/fbfngYqNv9fPG2SJMVPkb0agXu/jBnjw/PsTMZscSwkiS3ry9TZ7EgklcjqYuMmo2AAjP+1d3TBNvPGfr6xO8q3rCirHaeSxJkUGtazn2cOnvP2jd+m7Ew7uwaZUSZ/4eBtzwoRJLapbwHoNqzVUCjEuMeMaIQoQ2esFrRBhM9YUShgkkmeLEz46fcJFt+D89IKjtx/B5SkmnRP2NGHnkGgrYoIgAlJFkgx4EYjRgQSpM7BQ1yWT2QTnAotVk70KhKYPDtf3BBfookMJcjSmiaxsS4wRlSIqBnRdUlQlY62HNEODUrlR4PEg0uB64ABHTJYYe7Tw1MmTLhc0T0/ytauT+FBy5js+Lkc82TY0MifovfK5Qz73W7/JZHrIm//m+3z3/Td47+EzHp+uOO8CnaxY4WmiRMWSVE/4wpdf4/Vf+nX2Du9muUNKqMGhbqAEEDrL06OnPHr6lGXTZulZysb+RIYzWBCTuGYaqE0zM/vgJVKWqIls1BmGGNQrw9OYaz6pBNFnZkT2VcvSkET25wve0dsWkbLcxsdAsI4QLH3X0qzXLJcLmqahdzZL7V1mYYiYvTqkyKEBm3EXB3Agbvw4nqtRNuf7Z8kfrnw8/gxp2c1G7eb2TaPd5z1rpBzYCp+xPb+f5w17P6ueupKMPPc6N9/TzWbx9T6urQA+AS6LLC8R+tpz5up/pCz8v5ojxWDcn+LgafiTQdS/EICRUno0/D4WQvxT4JeAIyHE7ZTSEyHEbeD4Jzz3d4DfAZhvzVIKmeqTJ8m8AElJkpIiIIlCkwCXItZ7fNughKAoK7Qxg/4xR3IpcryQSrm4L8sKhUAnASHh156QLEJqhFYkJbnol6AMnpxBXGnJbDamVAX7nSfaDudaUnLE4LAusGzWtF2gt1kOMhq0P4aCpCsa29KvG0IMtG1L2/aZcuRBCIlOEiEVqAKjNGiBLmCsDNKUhN5DJCONUrOJVd6MkMzGiayaBnykVDrH0uhsTlbWRb549jajeSJmM0rEwKTIaQEFikopXJHwIWHLgs462t7R9Q5rHS6BI+JTRjv1kBKyMYHMzskiJ01sFj/x2lwmv/esM7taEMmBAnZzQMdcQHyWDireYGw8N5YGTZwcMMN0hVIyELgS2VlYCkCk/DtlzVjnHM2zczi9zN4pVcV0PmN7a4uqzL4fWkmULNAmG4wRHTHcUIqXYIQhxEjvHfQ9UXpKITBlhdcFfZFlA8F7bG9x3hFFBrlGRYXtelzIbssImQFKrSgLje17lBDMJmPqumZrNmEyHiOnE8J8TtMsaVYrbNdltodzLM7PWawtptRMxjtMq33KYsTh4QH7hwe0doELAes9F8s1i1V2h1bCYFQmjZZSoyR0XZeTeaKjLDUhBZQStNaxtj1RwmK9ZlRnL5pl2+EjmNJTGENRjbG9w7uAR7O9vcV5a/ng+CE//PAJ5kfvMBpP2d3d5uWX7jOfjFitV8QoEGi8i/gi0+yDAE+iC4G275HCowEjBUnJIZ4r5E5J8IgkiR68T7jocQR8jCitaW1D01tSEsiYUDGitaJVgmgGppT3uWvSdrQiMTeKsLVFORmhombVXNLhsBfP0OUIUWjUgNsmpYkyxx5n8+EMsgatKE02nI0xnx9FVaLLknGhKaoKXRQsVw3Pnj5lUpe89MpL7O3tMqm3OP74Mc16ibU9NiSc8yglGY9rtrxAhIayKlFlxXq14NHDI3bvHGBGYx4cn/HBoyfURnP/7gu8cLCHVhW6htSvEdFRS4HtHXujWU5i6VrOKsPj7hyRIkEmnny8RvqGybRi+/aUpAvW1nF6fgnhnKoU3NvbpShMBnLiQD+PiRgckHC2I/Q9AoFP2QtJx0QQCi8Epq7QZUHTdyg9ZTId07QtQgSUzF2YKBTIDFAaozm4dcBse4vpbIYqiqsFx8YYzCXoUsL5SCcktQBZFETZZ9Ndmc9vqQR1OQAm9IxHisnMIErY2t/izude5FGz4vxySfYAKnnz3Q/YvrWNWy959vARq3ceEIXgm7/4DS6OH3H7cBdVjPOcMTQ4bq7JNwu7v9k2Wza+Pnp6zOOPj7lz+y4He/vMJ2OWyxU//tEPOTzYZ/banBgiUiqePrpgNBnTrR7RrpdsT+6yWsYcITmTjIYUqOQjSmfIyAVPYzuKaR5Lo1RTTfZhJIkP3uLkD/6Ik9MjfOeJ54FXv/g1fu0/+U8Z1wXtWQHFjPHtER8/eIsPPvh9zh5/xOOnD5E2crA/5htfeIXvLh7wL3/wXU5twW/+1lc53LvLW28/4OjkQ8JKcDCuEKue+3cOOH12yQ/f/Hd84ZuOvS/fRs8Ktg+2MA8S0/GL3PnVv81F40ihRyhHIuEFJGFJocUu17SyZPvwDsgSIbY4fvIG9166BUUxMCvgyu0kycGr5jO+gavaVWVtddZ15o6aEGg5RlcxgyLSMCsKopxRznuEmgx6bBCiyvI/wrUKZOgkb8qx69C/wbJbgC4MwgwFLP/hnB2bQuAqUevnzMDIC/7clFmtlkgpGI8nuTb/SfsSueD30UESOT44ZXlct2yQQTKbzgfw2F9Lc9Kf931/ArG4/vuq+Em4xSXn5ydU1YjJ3j5SZlA3+YQIkt2tW5him93tQzYpQpv3z7COzBb1Pap/DO/9Ce7pU+zyEjmuqO6/gPjiF9GMiIzpU4EUI9BFbjjGhIqBZNc8+eAdjh4+YHV2xuMPPyAse0zXI2REuoiMiYQcJCcRhCfKSCAQhqZYCB5pJOPpZDDbN4wnU2QAHQPtyuMTRBHoQ2SsRowmBcHB2UXD49UpOkWmdQnRcXyxyg3cLjP2lusWF+Jw6khS9ESR1w4x5kQPGQIqOFQY6PymwruWZ80lf/TolPdWjretoVWJqi5pmp7Js1M+/O6/44+//xbvvveU5Vqw7sELk31s4hqlEkb17N+a8l/+53+LX/nWfSqTgUcpsvzhpkfC4uKCo7MzLtar7MMlyOECLmQhp8oBAUpltkYYmgtpGCIb5UBKERk38vPMehGD3CMvzSzJJqL3uSm4qRtSvtZ7kRn93mX29EWz5vLynK5phnV4nyXirs9GqgKSyHVCLrXynBhjJIUh/lNlvzYxyB/S0Ay9Pic/G2zYbJvbm3rm5nn67zM/XJvvXwMYf5ZvxE3w4yc2g7nib3zq8U+89qc+4w2wZFjR+EFSEwXIEJBDs1qKTaLUhoEjP3HMfhZj4X9vAEMIMQZkSmk5/P33gf8R+D+A/wb4J8Pvf/bTX22gu1xNuhLrA21vGQ1UMKRBao0RuRMdbIskoE1OWAghDlrDgAsRJXIsUoyBpu0Y1zVGaWKfDT2lEEOxb+hjYL1uibInKkXnPRd9z2XfMSlqJh5MSggVMIVGVQXSBaKweDyiyF9AlIrLdYO9vABVsO4sTdNcoW1CZPrkdD67YiLkqFBFFJLee1zKBmTKaGKAYAeDRJFw3uJCgQgSofNzlRqiToeM4JwsEUnOIrvsVRFj1l1LnQeMEIK27TMlzjn6FBExH6sQPLU22WtDQKUlvtb4AI3zdMMk42PCeo/1PiNrA2K3cQ/PbApQyCsGxM2LmRC54CAMRj1stKzDMmYYC58VrXMT5dzcn1IkM9AyfTbJoZM0vJtsfjrkSyeylgxIUaO0zuawKRIiLFYdi3XH8ckFVVUxqkvKwlAYneM6jaZSJVKonO6h8++mbUgpMVOStmlpbT84qAdkgJGukFUBEWxp6fsMaCmlcH1PVRZsbc2v3Ngn4zHjuqBvVtiupTIF4/GY8XjCaDQixohWkqIasz2psfMZlxcXLBcrClNjKolNK84uzzh6ek4pT5hPttnb3WY+38ZetOiyYDydoi77/Pk9pBRgyDMPZINXTDEYRTmaPjMMpBRUVUIXFbosCUKShEaXNUKtsT5SjabURYVznvG4wNlA16/ofMxe2kVJOYI+JB49OeLJ0yPOzs7Y295GAp1zSDTRp3yOpzREJuTv3qeEjwmjFTZ4vG1Zrzu63uWkFO+IUeZzpKwQSuVx6wI+ChIeWZaUtaJwKV9chwjcKBQ+JWSIECPROhrboO7cxijJullRjgvqrQnKWdZH55RFzWhrjhR5XAskUSii0ghV4EKk6y3e+UFekqOgpVZUdZ29ZHKrkZQkShWsG8tHDx7x5Nk5n3/1C7x0+zY7O7ucnfSQJMZorPc5UYHIaFTRN5YUHKNyRDWfYolILamnE1arFQ8+fIjWmiZKFr3j/q0D9uYj6kIRuyUyBkzyyOiYFwpdjml2ZzyuTwgkmtUlndd8/HGLqRSfK+/jkKyt4+jZM/qlZTap6O7dBVOjyDpHwRC3KwTjqqIQidB7qjqDFELmVIgI+fsMIdMMB4Q+n2s5jz0Eh1IFIXis6/OFUiS0MYwLAzJhXU/bt1jnBkMsWPUtHzx6TB8c5+tEZS6YzOc4IfBJIJTMFOqYMGVBduO2dOsLQugoqxHVqGbv9h0OLle08WMIYApFszhnsWyYGMM3v/FNXnzlC7z54zf55tdfp8Sxvjhhsl/R9S11lRfseYa6ef37GxADrmZujDYURUld14zqESJG9na3MVpwsX/I/Xv3mc+3YHBe99ZhW8v5+oyjRw+Y1UtOjjv2D17g1a+8QhAB5xuqMlLOpoigKbRA7Go6M2iKu0tQK5K/5OOnxywuA250yFe/9RWm4zep7n+Bjoh3j4msMd0at0h8//v/iu/83v/G+skZaqH54q1DdmrJH/7BH/HGB085CpecfNxQ/qhmaeZ89OiIJ49P2SvG/MIvfIvp5HWqW7sI/YTZw8e03TkPPracy8gXv/k6k9uOavsWfUqEpmN3egvpAileUuhIJJ8vp01LaxVbek7Xtnz/jTeZb++xtfMSMZncKhIbh3+TGRgDOpAG8HWj3c6X7sSmg5LSJpb2epTGlEBBCDanLKWKNMSnp7CBHSIkR6RFYhGqZsNtFiKnDwhSjmAcdjxYHw8L5exz9dcdxHi+cHHO5QaPED9HH4z82iF4jo6OOD4+Ymdnl7Ks8pryJ3QtU8pG0kVp8Mlyen7Kk6dPUNIwn2wzMtPcChfkeW8TjSs2+/xZjvxzndtPPR4heB5++D7vvfsut1+4yxdncwpVgXNIqdnePkCGz+PCBYnMTNx0hCMgRRyycAIy9rB8RvrwTeKDh4hmRSgEbfOYepoQ27eQ1QFGjAGDTwJrPWm5xvSO85NnXL7zLuLsEr1awWJBe9nw7OwUFy4YqQnTkJt4TW8H6U6ODRYynxdxoLyXxjAejehbO4A+GusSro9cLAIhRZJJLJrcCNVGs7hcE32iazpUilyalr5dYa1FKo21HiU1weVoSykNYkg+yzIGhUw6+1Ilnf0gTMEiKd5d9fhnF3x4/IQ/+eiYJzbxMI1Y0qBLw5unTzhOiddeepVy+xajXQhFQDlB5wI29qgUqRQUJvHS7V1+5Zuvc3d/C0Viw+TaeEgIBH3T8dHHH/Pk5JhF29CnmJNHdAYrfAoUg4wiJnCDBcDm+TkxZFPkp8y6CoEQPd67nFgSB++xQdohpUAPMoXoc1POBc+6b1heLunaNd47+rZlvV7jbTbQTDHmhqbMZuRKZpAqhcz4kImr9cqmdtpIQK4inclNyc8CLuLAGpEDg/7mefkJNkO6TtyDTxftm/+3qSU3tz+L6fFZYMTzc9Lz9dWnAI90XVddgZhXZ/PmOTdrsusnpnTzNqQY8TEgBiPmfIyugR42x/S5Y/dJRcZnb38RBsYh8E+HnWjgf0kp/V9CiH8L/K9CiP8O+Aj4r36WFwsho9RXmiWfpR69DbRZvIwwgCmQWmGKCiMiVVVRlCUhJmyfB7aLPTGGgbaSWK1avHNIkR1hSSCkYmQKTCkRvac2WfOpVUHUBX3vSIsOTKAXAi8TSUaUz8kVIQqSNpi6yJqvBC56Vp1ltVpwdrlAm5K6Huc0lLLK2neXfSSMMXmAxDD4r3i65OjIQAIuZSR6g3AOAz/GSIgJfNajxpAwZYUWOUc5RIeUghQ866bJB1dEGFBDqTJ9tioVJIPTCqUcLkS09Sg7XLKkRCpDEXT2zQgBFQ1lEvgY6Z1HdBBizADGZtDeABnUMEiVUp/6vm92Jm6yLTYnpB/Q1M+iXm4mgpsnbyKn14gbpjJ53TO48aYwNAByh70os1mmtRY/mG565wfgA6x1rBctapX9JtQQC6SVoNCG3a0txlVNPRpRVSVSGbTWOGcptMJMx4xTjXcO63qsiyQhCSnik0eJQF2qYdJU9H3PbFKxtzMnxkjTNOzs7LA1m+C6huVyhiDLiVLMCPO4ronRY9cNMXkKo9nf2WI+ntD3gdG0QBRTRpMRx8cXrC4iy+UK7z2T6ZTLtgSlEFqhjEHrInuX+JiZnUqSBr8Q5z3aaFQo8N5lQ13A+4i1gRi7/L6ioO9anA1opWlXHU1s6ZoeKSTtumPRLignirPVmsXaEcRA7VT5AnX09Bnnp2ekGNHaYIoaKSKdiri6ztpGkTvlUmcJmfc+L36loiwKSp9jXI0QEAKdC7iYtfE2OISUlCqhFdgErfOEkONMa2NQ2qC0xkhDUUSKQhOCxrWK7bpGp0jTroky0JtcDEg8zq4JoQbiMDnn0LMgso6z8xks1SKbByqTjXmTFAgtQQmMqZAig7jKFIwmczi75PHxKWsXuDy54At3b4OQWftbFijXY+2Cvm8JyaC1pBxVGAHSSO6/fJ9QSuqtCQnPZGsOQnPe9Kw+fMz5Ys2XXr7L4fYE6aEyirLUeJdp5VIJXtiZ8cW7t3BR8f4HK0SK2M7z7nvvc2Evuf25V7lz7y7nzz5PFS6Yz2YYqa9cwEWe6CmMxvgcW71Vz7CN57Jd44NHKUXXW1a9xzPHJgazXA0K1t0aHyyFyd4/UksiLjNuRNYox+gpqjp3YHzEOZt/QqDvW9quozs7o/Eey4jV+Sn7t0r6SaQLMXeGBNi+R4QOCkMKgvXlgvXlmtn+HFDU1ZQX771MYxMf/PhtmnXLbFTQdS0jDC+9eJdvfPsbhNjzq7/0dWK74N0fvsHrv7xHPd4hMLDkSUMnOnf5/mbLW264CWpd8MKtW+xO93j//Q955+0fc+f2Ia+8fJ8YItPpFCkFbZvjx++/vE1Kmv7yNWjmTMeGnYlAqpo3/u1bqLph50Dwwq0XwM+zbEJGjFqRhCL4RL/+gGJ0SlAr9v7W1xmnPfrWse4ukAfb7Hz+S0QdKcqCRXyEtgZtCl7Yu8P92QHvvbXkdnmPb3/5F/iFX/oGb/3p2zx84yPM/h7bVUeMhvne5/nt134L++yC9uwJ5ycPeHryhPlHAllGumrF9OAlDu+/zvjgFqt2TXmvpDrcYv3BR/gLgX71ZfzbH7Jaf4C75ygOd0jVHmfJoqstYpxx9OQ9np19xP7hSwQ/y9dkvWG8FoN8ZNNgSCD8QE1/TqohIMWEay0xCEw9RuosGhVS0IUeVUYiDik03rUoJRC6H6jCa3w6x9oFNdtIXXFd3sqrjudGy775iXAtBf3rjl7c2G42Wv4yJCSJgHUdQkZm8ymj0WhYQ/+k/Vwf6+ViwZPjhwQRSCmgVMnW9i6jcoKUiqHBTbY53PhV/LS56c/x+VygWa+5PD9nPBrjuo6iHgN5PVLMt9D9Nu3SElV1NS9mGCxDFxIyy7LviY9POf/ghPT+EZOuYVwLuuUaD+ivfw1xAEpOCO056wdnvPvD93j84SN867B9i1uuUcsW/+gJ8mJB3zSc9mtW9MxjyYs6QlVgiip7s/lsRJi9+Ye4VQTRetaXa/pVi7chH7+oSN7QrBtc7BFa0DpLv1ph3QJvEySFURoJtL7LxrVoTFHgXSKKHDkslclJWroAJFIGkoxIUaNEjRQVQRasdMGPmpYHHzzm/KO3eXb+MWdnF7Sx4FwoLlwgFInZfsnk3iv81//t/8D7P3rId37vX/O9P/xDnh49hnRBcJZqpImiYP/gFr/2K7/N5+59G8kOYLiKKU+5MRhs4NHjx7z1zrs8PTmlD5EgJdaFAQjYJIRE+j6DFt6HnJBHriGkFJ+oCRKRtt0kgXiizyaXOY70uvCPzmH/P/be9Emy6zzv/J3tLrnU3tULutFYCRIkSFCEKFKytrCksT22Y2ImHPP3zdf5NJqYcThseWQPKYqkSFEkQBA70I3eu9bc7nK2+fDerK5uNqHFlESPfSMKjcrMyuXmueec93mfpe9om4a2bWlDz2w+Y7FYEoMf9iBZPASHuU5MgYUpkHISg9cBKlNKJL5GDYlzbg2gPfKfWBfw5rHi/FFtA4+DDOdvfxrbYH2ceQJ+BgP9fIH/JOPqSWDiaQDG046z51CIzOwxaci5NeKJ9/RofnvkgTG8E7TWOK3Jg0JAnwN+1iCJIp4Brz/fnP7FbJK/M4CRc/4I+MpTbj8E/unf4RkFbUNcWte5vSkrUtL0PpMRSptJllIltE5ntCNjLK7U5GSx1pJTlM1hSoSupfMB7UBVZnCJDajYkoNMiYVRkDIja6mrmt6KsYu2BlWVJLNmQHS0zWrw57D4gCR7eE/Tt/ShIw4ForMF2mjZmOZA9FHiJ0MYBgdDF1Y0iL1WdCR636N8xqQhjUNJ9OhaKyYXfcKHntD3FNpQmeLsfBmjMLaUOMucsVaSNmKM+OCJ5IG+I/nAxhl0YTGFRfeGLgRMUuggDI0YhkhLJSYyRkFhNckZMgXOFWJEiYxvozXOGKwWwMQaezYQP2swrsEOpYQeeB6x/EVAx3pzkHNCDbKBnM6jfAIQxNCLGSSJsiwoK0kZaHrPsvX4ZUsfeqGuaU3SGu0KlII4uOGmKHKhRnnavqd0Ba5w1HXFZDTCWis9oxBwzuKMwxWWmho9TOKrpqVpAlGt0dlADDCdVBid6PuFJLPYCKkn+IacI2VZDOammpCCGMzO55SlZVyW+CATDlpTOitGbDmRY6QqCibjMaH1GFXiXIGxFh8jy9WKZbM6u/bWWmeQSTjJgGO5aqjKQqhexmEQMCgnLUkcURNNZOUbmtUS7z2YxGI2RyuL1RYSlK7k2d1rzMOCVVLobglRoZSjHhuJi21X+GVDilE8I7Kc1yIHVmVD4UoBKqoKTSHsiJgprZVi3laEbDm1LUa1GGtZNj1tyKzahrZvmdRjcrtEZw/GUo2n4ss1nDOTSwwGO6ShjEuHM5ZgNDZGUttRGUOOsomMfUf0HX3b4PtOzHOzaB2dNmJ6mxJ9DORJJdeoKzDWo9IwoWsl84VW1FU1eNhojC0pqhFtSLR94ni24OR0xriC1XJF78ohaSfR9p0wqpRCG6jKAlNWOJ3YGDu0DZQmogg0fUCZkuAcNx8cs2xbXriyx7MXNhmpUs6DMuTUorXH5Z69SSnZ8iZz685tTpZzVrMVHMLm5RWvf+0VNsuag5tvs7szpihruaayMLTEd0U2LjEGjCsklSNHnLMYZ+n6SNd5+r5HaYUtHMZUwrRLftDADoy7FDGlGUy9Il3foYzCDow0rEaTCb4jxMxyNiMGT2Glc2RUSetb2rYlM0Jbh3EOlUQHG0NP363YKndxusKkAhUtpRmRa8XOjuFa5zm+/wCtFN3qlMJqfO+JsSVGz7vvvo2f3aVZrZjsXWbnmc9x7ZU9gpIFWGWJHc4pi5nVLyxA/ts7pENmKIwmGMWNTz5mdnrKi89fp3CON954A2ssvk9URYWqFcvsZV1Tih0usr3hMC4QOs+9ZWC2amFp2UgtI7UgZIOzCaUDRZoxe3CHW2/9OS9cG1PuTnA7ihQ6THQ8fNgw3XkWWxlCK4Dh6eEJ0ypS1yWvf/U1Lo1O+H74f3j7e3d48+2foaYVB6cLXvryG3zhN36bmz/5DpYVulS4vYLCVrRdx7/74/+bOgeuTjcxWfPtmx+ye7/hpedXqGqbk9mMP/jGVeYP3uXjWz2vfPkPMDWY6xO2+n3CeImyltwvGDVzNnb3wXcUFPzGV/8JFy6/hFJ+ABOCjLMB8IehYUyStSlnhvwRUurROkEScPD49IDlcsnexUtMN3aGR9Vo41BKwG1ranRRAz05e7p2xb17H9KHm0w3S9y4o8ieR2yj9YZ28MVKawM6oY+vWZlanQ8f/gcch8NcDpztUT7rsee7sdbagT32yw3900oxGtWMRjVrB/N1t/Tn359AQUppQoh8+N4H3Ll/k6/82pf43OUXiVmj9ZiczRDfKHO2MekxWGJNKz/fvX3EGvtbHEZz4cI+J5ePUVrTLpeMNnbQRhpOZjJiop6h3N1gvLEH2YgE0Qz7PzSKCDGh5g3NJ0cc/uw+4cPbLJoZOzs1Iy4S3r+F1iPy3pJ792bcuXHERx/e4t2ffciD4yXWVkxKy950g5qacHqKCx3ZdyinSMbRqUjjO2mCRNBZCegZMoWyBKEtgTLErmX28FjOd2RgEzlikFSNmD30Mt8HWkIfMaqUegUle9gQsVYahTknnBXvO2ss1hhQmdG4JmaHsQpTaLZ3txjXFaYv6KIhFVMOcsGNkxWHh0tO5i0qO0KyrBQE67Ajy/Nf/By//ju/zWRvn1e/uovVUxbzTLs06DxFcUqflkwmjq+99g1+57f+OdsbVwDxKMspiQJg0LHMZ3Pu3LnLnbt3WbUtODHuN0FLkoaMGKlFvPjnCViWzhjcKaehqBVgNAcxRF/vwdPwt8l7QgiErqNtW1aLBW3T0HcdPnraIB5oamA/gDArUmKY99Zj9xzTbF1TDICZHpAKARQkKSMOBpVZcdZYftLD8WlMivOMjPNzxPq+9eOfNrd81uM+6/F/E6+Lpx1Skz6dxXH2HE/Mc+ufM2aG4sw7JO2QM/EAACAASURBVCvAGMwazDmTC8qcktKazcQgSToHcHzGXP/3EaP6tz4yA+rG8IHRon1XBmMcZVlRVo7sDElLFzvFiI+BuGpYtR3rbHcNOGvRSmOdw2opqEPo0TZhKinI+kaoxb7rJGI1KfCJLmZ0CJI17APoEldN0ZWl1mM639F0LX1WqGTp5h3ztmPVtSzbJc4ZysoxqWqSj9Lhz5nYC/MjxkjbdrL57sUoJiUxKO2MYaUUoZfY14ktGZclzmiC0YRgidENkW+yYQ8pQVL4rsUaTekKjFaSXmI1VVkwHtcUzrJcLlislgA0fUfvo7jzIr2WGCGQUM7glCGHSFAZrSWyUPmIGpx/7QBSSNS4dKrjUDg5Y3BOJl2FEiMeHl3Af515jVJCyVsDGOcNb9aABTyiU53dloesYzG6kPQWBD0tykqkHBqcE1ApAc45TIRMh7IWlQajTWShiOsLFXFDZkAM2xBpY4PuW/RqiTk5wihNUVg2JhNhAZSOonTio1GVYDyZIB12LSi0H4wmg29pukDXnlIUYsC6UoHQi1TFaEmvMFkPSSCDmVmUbPIc06CskPPpnMEVGlVobLasVhHnFFUxRhaQhPeBrpXiLaYok7y1YCJq3X3LWZg7WnKorRXjK4KSFA0v468ejRjVY2LweN2Rsif6iIqwtbXJxnTK0cER82bB3vYeqjMcrzps4dkqN2hjYjFvyH0PKKx1mKLA6GKIUso0y56mbMlxJmjtjkZvW+qqILaSAx76KIyQPqCzkq11NaZLWZgeazpcjujQoJOn6xOJAkh0bSOTaJY5wWDQIWKdpi4cyRXYmKmVpqpGtHjmXaSbL4k+4Qox+go+oIxF5USIicVyRVIJ48CWFVpHkjYSqYViPB6jSsfFS/ucnsyG7PPhuyxLScHwAVvUYg5bVJTV0CNVCjU83ufEcrXCqYK+N3SdoooRpy170xpVWogTlsst7h+taHxL8oGqKDhZed75+A5d05Gfvcy0cNjQk2LHuNaMK8vlvS2qyRZbmxO2tzb46fvv0ebA1u4Gx4cHvPlXP8QE6PsAA2OItSGvAmMtfdcPnQ/ZHWijcIXBFRZXFYRG4X1P0zRMNreZbExZdgmfAklnoYJ2HSMlsiJtK/FFSkMiCdB1Ldo4yrKmtIbQtYCiXc5JvsWqLICjspg20rctmQ3K8QSUJsUgBYcqaWdLlHFsTfaZ1i1GVWxONFVULCLs7+7y7DOXub+YgVPE2NOEwO07t9i6+QkPHtzj+OY7RN+z+8wL/Oztd6j2X6Ta2KCyYPI5/6f/fjx2GKXP5PfjccFrX/wiXdvwyivPSwyfNYQ+M58veHD/iL39C9xrD1ilhnFZc+O9D3np+lWMWXJycsDBYsGbb91guWh59dVL/N5vv87F/f3BGj0wu3OLT378Y259+Amj5jLj0RHq4imjjQv87Ls3MMUOz3zjDY5uf8jh7fd4eOuQ6dRQPwu5b1ExsLNXc+lSzenzexx4+M8/eYuislx+7g02y0v0s4JFPOTWnQ8Yb0Z2jKbay+y9tMvBJzc4biwPPjpkNu9ZLD5mfKrZ2X+Z43v3uV/e5kSd4l77F2w+fxm6GUHdp687RuOLQEteHOEOPmX3uZfo5neoomVjeh0denDLYajVkAokwUABYnSeALH11SgCil7kVHQQGpROBH+fmFckFD41GDOCvIfRJRmNtiXSjy4HJwsxP/32f/pTTHHCN3/z67jdmnX6wNr3Raa7QVqr12bgnKURnHEyciYxiOQVA+0c1t2+X9ZxXqu+Wq3o+56qqsQc+CmsUnh6AXJ+z/LLPdYRjeuu6fq1H4cczn6G1JicMjprrl+9yt7ONkaBQhNiAC17y1WbMSpT12cuKfJs56jna2r83+odD916ZQ37165hjeZ0vqAoazHsTlESa1RBWV6gZAuFQ2FZR6gaFOsKUidFOlnS3z5Fn3jKVNKtAkfhFHdhi5U/5ODwLR6ufsKP3/qQuw+XHDY9M5/otcOVPaoC2obSTGi7luQ7KqOpoqHTBZW2OKVoMOSsMQM9RYWIw5CipJqsTShD22K1wmqLimIs6f0C4yzOJFL2GDKWQD2S/X1Z1lgrTF/rNrAWXFVii4Kc8pk0xVpNWRQYJ1Thsi6xhaGsS/Eq6x3JVrSpYLnKPDxsmC0jy2ConSNoRas0uSjYvXKBP/wX/wNffeN1IOBKx/Xnr/Ha519j9rDl1u079M2nODvi9dde43/6V/+Gl178PDnJ/pw1W2LwFuyWLXdu3OLTGzeZL5f4HKX2ycJ6EJZ9PCtyzxfz64J/fV3FGIdmLSIbiZG+62hWDavVkmYpxuK+6wi9SHKD789AEpnTktRCOZHCOuVwmGfyo3H7mJRBSWKNHsaYHqadgYDNWiovvz5iliYYGqmPy0ae5uNwxhp/QvaxrmWevO08k+sX+Vwopc4A1vO3rY/zf7e+/WnGn2vmx9PkLTln8rnmylli5LkfaXwOQJCSZvra38gMzTnyIDnMSNNOaVIWUCNKBu4wp+e/dkv0KwFgcO7L00aJsy1y4vSQ1FFVpWwOlcgLdMqQhIkQ+iCyCsT6SdI6ND4WlM4Oq6AgmCMrRbHH0elOEhe0oXSOHBO+98z8ihRlIjVKGBxGOWxhwEkEWN94lquGw9mSVSMd17KqcJWlMIIiGp0prCSSNH1LzmIy5pxMhNYaiiTxTGlgnKy6nhCimFkqCylj9EDnGQZbSMKk8FE+d4oQfaBwhqIYoZwhpBYfPTpGnBdqfspQV7WY/miNGhx9Q0z4EId8Y+mMrunYMSeU0bjSnXWUs5bz6ZwjJvAhDQPZDEX0gLINwAznGBOfhRqe14E9SvzKZ87D5xfONU1rfdEKbTJgjHyfKeWBAiYLjNJywRZW46xcVD6twaNEVoL65oxEGGXODFMj4py7LuqVUpIqoSVySGWGCNAe1WUWTUNZFDirKYqCzc1Ndra3IQZxlFYSH1VVCpUrING2DW3TklKQjlPyzOcNOSmMcYyqCYUrMEO0rTNWvFE0YiiUAjFF8YWxBcoYjFXgLIVSVKNAWUiMpFYWZwuqqpLYypRo2xaFFcbJ4CGjjQEyMXq0ku9aJYWzFrQl42majtPTBaUt2ZgaTKHpjDA6VEq0TYveFnZEu1oyPzmmay8OxruZ9Rys1KAPTgEVo3QiUiIkQeKN1lRlzXg0JaE5OZ2JZCxEdkYVly5s4ZQixkDXt/S9ly4JYJ0l25I+ZknqUZrcNqASBZmIISS5ZkOUTHWrLQYxMjVKQCMzdCytVowLR6kV2XtqFGNbYHY3eOFzXyCXJbMPPkCpBcZIYhEpYQrNyBT4YfIO2pK1JUfp0l3a2+H568/xSf6EdtVg11pLpXDOUtdjdFEMsWKPALYEaGuxZcnm1jbBdMyPlvSxEa+X4BmPtikQNkisSy7tbaNsxb2jJQenC5q2RU83SCrx6b0jrCl49vJFJs5RVRWYlsmkoqomKF1SBzHNXbYNx6sF9bRgGRLf/db/y9Zki81aU1aaa5f3mbgKY8VoOeY1/fLMxxvUIJ+IgcJqFikQco+xhvF4RFnVLLqVzDU+iFv7kB2ujTBdfAwyT7kS7zvyICGsC8f+7jaL+YyTkxP8ak43P6aYbuL1GF2NmI5qxnU9aFrdsBkZFmhbMxqPUMZh7RhnJyhV0rVLbFmzOZ0Qc88L169RtUs+fPeEvm/RRN7/8CMeNoEXX3yZN166wvLkiCsvfZH9a8/x1jvv87kvfYlyo5BYVZVQuhgKuuGa+KUvtP/1HTkFjBXTTa3g5RefEe8fa0hD2s3DgwOImhsf32S1atGTluX8IR/fmPFXf/4jvo9C0dL1J7T9nK+8/jVu3jvg/T87wjxo+aM//BqTHY0dj/j4k2O+984Jk92rLHY3SemAHOZ0jeb73/q/2N+5yKR6yPd/8B2O7jygPejY2pny+Tde46vVdZpmxsF7H9GmKS9/7TW+dPUFzLjkR9/5Uw5uPaA9/CE3791kdAFu3j1mPN7kwhtfZmNrwmo549L+Ns9t7HFla8rL0fLhJ/fYcyMmZcGH4ZT/8ON3ePmLr/Dbe1+gWBkIc3R/xOL2x4xe/BpYw/LBMW2YEdq73PzpBxTuebavfBGaW2TriV2HHV0CCkCkgBlLUgxdYktORiSgGrSJEiFogNhyYXMPqkoMcrUhZ0fOBpMViWJYuxVg0LmCLJ4kp8enXLm6yc72dZQaIdtPufZh0L5zhnUOay1i8h0D6Exe7wHWHdRB+vIZxM7/4mMNYMQYGY1Gf09gxN/lUPy8rEPx8xNI5pEMRObN3e1tNrYrysKiorDWlHYkLQaKDx6eMKoV4/EGOfag3VCUyPNJ4fk3f5trGEXn9Q0K5Sq2r1xjo+sx5UiSwQb/soQhDPImi8gn1h8nkoY4SQ29x7cNoYrsvHQZN9V0dyOpXzKftzxcNHx84wEfPZzz6YMF0Uw5XMFpEwgqMJqIceM89BibSaklpI5KFWxmR12OmNSWUVSchIRzBeXAZnYk+uRxylEUFlcKC8FaR106nLZYSlxRkIqIcRlXaJzTFM5SliVFUeNcRVmOKAuHHtJMbKGHeHIjUlqjqaoCchokFrIX11aTVCbhaduOEJbEDKlXlGXF1GyQ7AboQK9aZrmjKRW61Fx4/hm+8rVfY3e6DV4ArtHU8uWvXGNrM/Lw8BrHs5fY3t/ipc9/jhe//AplXYhZspXrjqEOzTlxenjEjU8+5u6dW8Qc6EJPn5KwdgdZQYyJRJLrOkljNw4gQFGWWGPEiy+JL0bbdDRty3K5pFktWcznIifxXpj0KZGT7FfXQ15iSNdNvke3y/gVFntiYHPptfG/gA7pTPqw5oqos/9b1x1a67PPLH/zRDrHE8yG9d+t73vs0jhjLfxidvpfd9/5uujJ+558nfP//7R66jxoQowi09bn358eANlHUbKsz9Ea7NEaYxwiIxEvOHv2gKcc587p+XO2xgQ+i+32qwFgcK6gzSJTGHreWCWd/MIZstMYJVGdpXHkXEi8WggCaEi/n9VqiQ6KrvdYo7FamB2tz7RxyCGPiRjBGo0rSpRzWK3JpsMnie/RRuNTpGsaYttI5JfRdMFzMm85PllxMmtwRcXOzjautKATOQoiGFMmR/GU0M5gbU1RFGK8mQfqVBJKUgiR7BNdtuBBpSiIrJKUDqft4NqriSmwWC45nh3T9ZGNapON6SbWWU4WS1L0jMqC8bgCo1k0LSn0FIV8xqZtaHNGaYMrapwCGyKq86jgpTM/+B70Pj5iRGhF6SwhZpLS6EIWHPD0XiYErRXGCuuBvGZImDM08knk/vwFeP5HmUeeH08igecff16zZbQY/MWY6PqewoArHcYakQypAX1VYK1GYehSEhpaCoToSQyOyhqElpnFcP0MvJD/rCOhpbiWjYQ2lpwCrQ/0XvRjRmvmq47ZYoUFrILxeERRlAI0sKZoZpyzMEyKbbuia4UlY01JCgNAF6EuSjanU6wS6YwAWwk9SJVS0uK3kSCHiHYOayx6iOO1VqJYq6KkLKrhu4Ku6xE9tFCIYXB/RpMGc1ilFcpItzimRBsCq6an7T0+ZpxdM6cM+xf32dncoiwKFs2Csi65ePmisKm0Zndnh4cnSw4eHlCMJpRFjc6ZHAKp70kKlDbD+1Z0MTBvOmLWRCxJFxwcz7l76zZtd4WtaU1dicO4KQqU6clakQxDHrwAP7Zw5BSoKsfUK2yhoVNgAnHwphj2aUhHUIvEJgtCnJInek8XPTlFNoqStF3xrTc/5eHyTbYv7tM0PX3XY4zENaa2I1OQlCIoRUwKrwzKOFSQjkRd1exu7/Dw/gNi7ymcxSpFlyIhyPkvnMMVEn8aYz6T0GHExyRpRTIGjCUipmO5XUnHI4pu1wDjwrK3tYkqaop6xMOHRzx48IDLF/ZQxnFwMmdv9wIbGyNU4Zl3xxhlGLkpbdMSQqTQiu2tDUzt8HpFmz0jDbnvOFo1xNgxKQyfe+aqdJIU8r5TJGrEwR0jjLqcyKHH5ExdOjbsBHJiuVzg+36I0o1gFc4VOOtJQFKG2XLF4ckJo7JgczJBq8xyvhAT3NIxvnIJnRMfJc/y9JjDW5/ixht0FVRug+3NEVvTMcZYQgI/RNJmY1GupiCSMiy7nmwMXd9z//49dnYvYGuDypGL+7u49hoP79+mmXtyTix9onlwzCsvvsCXXv0CP/zOn/HB2+/yk7uBG41lfPEym9NLWJWRXB0BT4bp7L8fDCDq0MFLYs6EcxLVaKwUyePxiLqoee1Lr3Hr7h3e/vHPmC1P+Mn33qE77pk9OGZclGxuOrb2Jnzz17/JS9cW+FXN4YNDfvidt8E8ZGdvi2sv/xH/9H/8dXauGEz7Du/+xf/BD//yLVKnsbQ8/PQn/Ntb3+PERy7vP8Nrr7/Iez97lx9/+7ss2sS8W/Lgo7f59V/7Xb7+z/8NS6WZ7E65fv0Cb//J9/nRX7zD/Pg2nZlQ3F5yedxy63tvcXDyAZv1hFeuvcgXLl9FpxZ1ccq/+7d/wuL+ArcR2L5ac//EUG1eY6O4RD7w+H6GTUd0D+5wpDeoJhu89b2/YuvqRVZNw62PP+KlF3Zobr/Jsjth+/IG5sIGOZ4ALZgJ6BHCOJR1xCIAnkG0BDlm8qqBQqNVgTMToIAOcjWiW3bYAlSxZretyRFSqJIchTbU1nJp5zKj+iIqF7K2qjAYwQzNDvSwmY4CoJAhe1ARhlhPpUqRtg27ROCMyv33cRhjmE6nKKUEzOWz6df/8Mewqfm5pJABIB4MJ+GRBGZcFZjUia+qSigcRuWzrmcfGnSfULlGqTB0rI0YG57rLD/1eMpd+ezfoSTUBpUzpqjQxQgBYtxgxD5wS4bo0zSkxa2RrTjINYxkr5IUjJ+/TP3sFA4Omd5/lv7ebd7+6H1+cvMmh14T3Cbl5i6zDmZxxUPfiLSx1ljAh4akKyqdKJ1Ct4nNoibVE0YuMxkaGgBaJ8rScvnKHjGNsHZCPR4zmZYYHSiLzLgq0Wgcjno8IhaemDu0SRROY43CDMl2ZEPOCmMNKQf62IKKZKUpCml25hDQuiPFgDZZWAexQyVF1hpblJRFxDlh2Vg0RbbU0dLngg6DHY3osXhbcOW55/jqG7/OM/vPopQDF+V6sppnvnSFK195RgxzczeEC5mBNSm5L3H4xqRJlPFNx/07d7l/5y59150BAiGIl47OEL3IR30WACMNe9eUhT27Wopf3GI+Zz54V/Rdi/eRtmnJMZHPgMv1yBdAR7NmNgxs7ZRFjvQE82H9Y4aC+oxZlNZgYD4zDlWoc+N2/W8emGo/P8jPAxXw82DF+eNpYMLTzCo/y5DzyeOzrsvzkq/zTI2nPX79/MboM/nbmlWijNTF63niyb9+xBgBkCa2yqCMzB0M++jH671BnnN+Ph8Yd/9VSEjWOkEY9M1rFEcL2OCs+CmgFYJGiDtyjFrM/9KQyZWlcKtGY7kwUhCJxdDB7VLiYNWhdC/eEz7ijGYaMhu1onYO0FjjRAriHCElmiTSCu00tiyw3tOsEjksCG1H7WoqV2AVBN8To0hDchIqfD2SqNcz190o4ID3a5Cgp+88jReNe+g8jkzUHp8AlbFaEXpH9A6vRes9X66Yz1fMjafpEtPJGMXA3sidXOWjisI4jLQyhtfzNK0na4NxAaX1GaDibElVjTFtS4yQcmBtyhJiL+gpkGMAXeCcJaNIKQxaM0GXjZHNZUxZ2CXrwa7Fm+JsYsnrOlEeoIaF6rzm9GkAxvr3NSJqtEbpIY4pp4GOlPBJcs6tkXzziIAIVVmiRg7VelY+U7SWtu3JOaCUe9T5UZAHIEOtLzCFIMVDJ8J7WTT0QIcS2YMsCAnNqulZrQ6xQGEN0y4ClslEU1cO5yyb9QStMznHIRJqg5TE6Gi2WOG7QLtqIWSJC80JVxTizhwEKcWI4VYkUFVjdAFepbPJR5gtw7kN4UyaoVHiQ5ACrihFGhR6lJJFQJEJIZyLPVLDZ1PDBkLT58zK97ikiBpcXYM1dDnQrzqC9xhnqOqSplvhVaKwjiuXLjPtMrNVy6rpRPo0+EfknDBaQDuUgImzrscHmeqK8VhARmW48/CA41MtFMu6op5skJ1DF46oMl1KRKXp2pZ+saBWir3xiIfRUzoFOpKUEplCTiiM+O8AQWV6soAgWujLfezRnTC4nHUU2jFf9Lx96z0uHc+Ybk/JSYAya0AX0sEKJLqUSTnS5KHxoZXETMUwjKGMIRNDD2XJqK4Zj0as+u7sMes5XQ1gWgiBtu+5decetx/OcJTsXNijqGv8suHm7XvUxS5FWZKzRKTGoKit5cL2JpOy4v69+zTLGa3TwtAwmlWMFFWFK8ek1uNjTwiByo3o+4ZR6ajHFbMuslwu2N+c8PBgTjaJ0/mMd9//gLxcYadTfHikHT1blJSYIyuVUdkTfUNhNFsbE3KInJ6cno3V5bKhqjVKGUkrUSLDakLg0xs3yKHnxevX2d6cUpWl+JmEns3pJi9cfYaRNdy6fZeRgd26oh6P0XXJ9rhmVBZnUc8xZtHz2wJKhbPS+W1zIFrY2Npk+8IWIbZYWzMeOSpXY/vLXLn+PMc3Eu3pnNpafDIsmxYVM7c/uct//O5fcji+ytYXvs67H33Khe2a57aE+ZRVOk8I/2/+UGpQdqSI0mJwN9iYkXPG+w5rLZubU27fuI+1NYuV5y/eeUC9v82rf/i7/Ic//vc0o5orL3yOZ69fBtXx0fGY5z73CtevbnN0GPjgnR9w77373P7gJ8AXiG6f/tYpnP6U97/7A27d+ZAHxzNe3nkOVi3XX7rCb/+T19m6tM0zo4LdfcW3/vQv+c6f/O+YyRiTKlo0nQ3UG2PoD7j11rfp55/we1+/ytZPFnz7J++wqp/hhFv8+M8/IG627F69yvFRzTuHJ7zw0hbmgmLn9y7z7GLK/vZzTD6tMOE6z37+G9jLzxJOE7NbH7FxaZPNy5cxLvDw/bf55K23mb35Pvo//5QXn3uFzf1Mp9+lmr5M6DfxR3OyOUYVBZovCJDulLCOBhBck8m+Jc2PaE8ecOeTDxjXBZdeekFkYa4mFyXxaEbbBrYvXUDldOZRERUiy00KcqRyiYsXasZ1JZ4/WaIolQ7DTLDeg0jDQ2KoB8q5HorvFGTeMwaUG0rh8wXDL38MrhsodV2fe51fRfDivNBjWB4yqAGUAvEHUzmhKfDdgts3P+TqCxcpxgXKrCgml0jZkjDMlofkAG1rSH5JNbog3zvnaeZ/k/f3qAeeGbZ5WRqNcjErlDFkZVmTx22WmHuNfep8GBUSdbkGuwqHu3IJ9ipUjjA/obhzk42/3ODSzzaIH93j9GFDuYzi68aMtmgJwTKKJeOQCUoTQsLmRGU0xagmqRFzMrPVggvJo60j5EhSHdt7+7z21Vcoqj2MHVGWFc5lUl5hlBcwqI/opHFlibeOVZfIuZcmD5EQe0LoSUnhfaSqK2ypSbknE9HK0CxbTo6PIEd2drYpnCH0nuV8TkhZvhMlBv4AKnqczsTkSanHWEVVOTZtzTLNKVOmGE/5l3/wR/yv//P/wqWdyyTE100VBkuJLiXmW6RbI0LyBCUmrpE4rOGaEoVTmdwFZocH3Lt9i5OjA4LvadslXQhn7IoUM/QBciTlIM250AvLNni6vuP05JRVs6RtG7quwwcPOWGUgbSOYlZnDSbZ0w6NNSXeCUYJMCQMAdmvnhXKwNrUf13Qr8MjYA2Cro0yecQqWI9grQfARUCXxFCsr1kcTzAlnvS5WL//9b+fla7x2BX0FGbHk6/z6Nw87k3zNNDiyePJQISz23N6LDAhxjjUb48/7vH3CAIyc3bp5+H+lLP48q3rERJJDedbyTqghzpfgPDHzVCfdvxqABhaKPVadbKIIROYEiAMqzTOaKEwWpnwhDYtSK62EvMZB+MnrSt0FikEKeCMGMkEFCblwTcikgmQE21QhGWH0R05elKIFNZSKWE+kDLOWkb1iNF0QhciMRhWc89q3mHRmJjRZNHCKYUbTcjKCpNDS/G1XDWsmhVN29F1PZ3vkIRG0clHn8lRo7PCWYNKArwUVtOuVuTs6ZNHl6ILLsuSPir6VeL+wwMWyxW7u1tMRyNi6DmezWnbhu2tDaZVJQWyDmzYgrLOhJyFbeG96B/RoDOd7+iHqEedFa4oMUrRK0UwSgrIXuj9Ocog02sq0WML+yNELQwXkFobkSYpis9oSzwCI7RSZ8kF8OhCfBKFPO9/sabUp8GcrKwqSKILEwPUtfFWQClDURrKqka7wKLLNF3PYrkk+ShFeRKa3qOPI92fPDAy1reoQaYgn0sm0JQiCoM2CqMtQp2LJK3oeoinK7ouUpdzxqOKUe2Yjism4xF1XVKWDlKB73soNVvW0axks26zZlRU4t2hB90qCaWlgybnSRFTlIhXbYlZicTAWhRi4tW3vRivilvXmXeGGfxLAo+AQcnXlvuMFa+ZHCNZCX8kDNdWGyMhChJWlA7lDEfzY1LvcdZQlxVlUaCdZnFyysOTBbqasr21xXzZ0HcthbUCVjojz8X6mlYo48iFQ1mN7zwH8wUFGUtke7TBqluyOj1BWcPuvsIUFdmIBMhnCEiiCl3PpHBs1yUb3mJdJCsBvrrQE5JEEcpCrUhKQIygM9kqstXDgikavxgTTbtCFzWXr13h1de+QFaBGzc+JMeOFD2hWxFTIoWSVeexpUWVJX1ckKLG9z3LxZLgvTBqhsneWcPu/h6TjQ3UjZss+w6t5XMkp8gD60kri7aOjObB4SGpU/icscUltiZTQvI0fWbLVJTWYG2PzRljK1yCHAJ72xsYMrvTTbamUwrnyFazjIHsOxxQOktZGxSwvb2FKRt6EkW9QU6BkXa0TWDWNfjQM1/MefDwIVUMxGE2SDkKq2Xwk5erWuZkneWCKqxFfZjx1QAAIABJREFUESGnQebkWSyWbLkRhXPntJcWYx1t6zl8cI/Ye56/dpXnrz4jpoNBCp+tyZgLr36Bq5cvYaoRV65eYTW5yCqP2J6Oqa1slo0eOn5Kk7Ima0dhEzn16NqSW8Xm/hYmXuP2zU/BwmhS4bQljiZcvvYcd1cdtxaf0gYxZH7zzbf50m7F1St7/OY3v8F/+mRJUY9454MPqOyS6esvsL81GeaX9QT3X7ys/v/gkM6cpGpJI0IPXOEUJXUpZwH+Lj+zT/KK1778CubqlE+OPuXtH32Pje2evWnB1q7n/fd+wP7+ZX72zg/50Y++xTd/4zWevXaRGzfe49antzi8d4Pvf/y/8ezVV/ndLz2Pi6fcPTpid/sC+xde4uD2HNuP2Z1e40KxwcZ4g2OtCcWUnckF2iYxqrfIekzX9dz66EN2Lr/EtDToLnL14lVUqHjh0jbeX+Y+p7RzT60tD04j1772OTZG11ndvkdvalzWlMUm25ubuOxoTwKvf+3zTF98HlVo9MgwunyJXFZE3+PKiro+4re++WX+/Z++zY3bn/K7v/87jPcvYIsKykv0sxW3737C/jPb1PU2pFKMmzNnRXBOLdCjcovKJ+h0SDf7CNtr2gcz6r0dglf0ymBiph5NUHoEbKEoQSGeWapEaQthxWTb8LVfe5Hx5ALGAqZDOp5xWJe1dG2HRpRRihw9KnmwkEJDbJekqCi2RoAbRsg6evGXP/qe5mfxtKLkH+d41DE+AzGeeqxZGElYGCmhEoR+xc0b73H/3k9xI8eF6y9x7cUKVVpCrpgvDkl9ZD6LLE4O2NjO7OxeP0soUcO6s5bzPfZyj/0i7+98J3tdnKCtfAZlSWgCoELG6jXb9VHyyDBAB5B5eGwGpxS2NOh+Ce0J2ffk1QJVwYtf/TLPvfgqN3/wLn/+H/+C/uQQlxDjb5PFgDwkUttTuAolnQC0zuA0J33H7bbFmgW7vqVXmWxB2YgdZTaKGm0sne/ps5jjOheJuSWGDqNF/tunwKe3Dll1DWVp2NmaMqoKjHaEGDg6OiHEzCgknLe0fom1ChU185M5tz/9lBh7Lu7PKZyhaVaDbD4RY6brI2U9Ynd3D+szKXb0ueHZ669QasPt9zzzNjHq4aXdHZ599av862/8Pq9cegGlo/jJKGHYpDUQltZ7W4mWRxuikqaSxkBWZ7KN5XzGrZs3uX/3Lqv5nGXf4ZP4XEkiuSSEpM7T+o6T1YL5Yk7TrPBhSA5pG/GCC4Ghk4kZvm+tBr+GmCS1Ucl+22iN9HIeja8zmvT6klgPwXUlcg4Ryxkev24G43+eyAIbatJHIoHzBpSPP8OTPhbr284fv8hY82l+GevffxFo+jQg48nXedJL40kJiVLnwhPWj11/uCeeL+YM8ZGPyeMf/tF7TemR6TJDo1cid+W7UcN3dPYVnXuuM5nOOZbGLzp+NQAMRFdvB5dSvUbHgng3ZKRAXvsUpJzPzD+KwmAdg3eDoDx916Ot5CWT9EA/TRIPmCwxJYmMLMFHT8yJPiViCqQMUStS7FGNp8IwiYrSWDCSTJHRGGWEzq01xIAhU9tC6OpJ06PwIeJ9hw+BputYtR1t17FctazaZsg+5qxY0smInk5bohpMb1AYV9IFz7Lr6Wdz3KhAFYZqNEHbRGcCzaob9GELtjY32NnaZDSekHzH0dEJcTphNKqE3RATWlkqYylMgTWSquFjGLq5Ed97fNuRs4I0EBBzwBiHqSzGZkJShKQpQmK56mSgGTXIL4ZvVktOdTwnqQBEspHiY7orMwBNyhhZTM4dslgyfP9JKIVCAMBYjbOGrGDVdvR9jzWOFBI5K0ZVTUwDcqsSaaCLGWMwhjPn65gCMQyLfR7gFyXjUzZ5jyhvOQorwAzAhWI4T3lNcxtAGPzwuoNRTUr4LtL7FfNFQ3FqqApLXVk2pmO2NyZsbU6Z1BVaObTOWGOplWY8HlPZApM0sRfPizPUEqHn55zQ1hCip9QlxjgIgRwDXfBYxMgyDw7XedhMGEQKI4CQ+M5YDeRI13XEGLB6cBQeAJmcIyFH2hgIGuIavMkZazRHsxmr5VzSRIxhPA4EpUmLyGw+43S+JK08rHoWiwXkNDBlSorC0nYtXd8DGVc4co6DplKhy6EDp8Fqw8lqhcmRDiQeN0Mx0EtFIyqIfFUUVOMxm1YxqTOjPlBYYZtkIj4J++NMe6cV2ahBmqFAa5JK9ClQq0xRFERnUKFHaYdzJfsXLmEqxYPD+6xOGnKKxBjomxWEjna1xFHiUxJ2QVTMFwu6PEQfZ1lA13PhdHPKZGubk+WcdHgsaR3WYMyw0Cop7KyxjEZjtHE0sef+4RHaaqb7F1BFSdYF2AIVISeRxRgj33tVWOx4xLQq2N/eYDoucFoYTKumJ6xWxFXDWHum1QZ1OaKqCraKilW3wkWPH3UsHs7Z394kzxRHs4aiHuGqilXbcdJ7qsqgY8Qjnz1GLYyjIK7idVnisx/8LZSY1mpJjYopUo0mjKoKc78Z5qso41vJGnDn7j1S17E9njAdV6QYJJlEKfb29ticTOhDYFpobOnIPmOVR+HJGLIpiUi6TOx6UmkpSkfCk60Gqzidn9L5lqQzTbuiD5FxMaKPic2dfa5c7ZjPehYHhzibOZ0d8d2/+CG/9sUv8Xt/+Ju89cd/xkf3H3DyrW9x4+2SC/af8VtvfJmyqjnfsXxsA/GPXS/9IxwyByfp1p6ZOg5gt9Z4Lw7zOSRu377DuJpQT2vakw/55M1vc/TxLbZcz2Jxk7uf3KRfJG4dfYpu9rl7/z1uv/d/srO5x8mhp0k9ubLM5sf87iv7fPOffZ3F6Zh76evcev8TdsaXuH/3Jteee57T4553v/VDrnzxBX5w55jnLr3IV37jEptvv8fFq9e48vmX6eqS02XLxlKj622uf/U3CfdmfPTD92iXx3zllV0exoK7N445YcTlz7/Kl3//X1FUU5rb98jLY6rxhHvvvcmdu2/y2svfpJsBzkCdxSdgZCifvYxhj3L7KiRPSUN/v2FnusnWpRfZf3YXVV4As082M7K7hy09qCkq74LyoFrIAvijZT5QOZDSHNKMUeXZ3sjs7jjcdkN7+qZEe3eR0eYu2+Pr5C6j7EVgE3SJVhmRYCbQDa70XH5mg7aFbnFMuekIa7M3LWa6KEmOERZHBhXBSAEe2hXz4yOyKtjd5B/kelhvnEXy+3T251P+Sn7yE6DCL3y/j4r8v9uH+gV/83PUBUU+e61A161YdS0HR/fQJjLvemarjovXX2V39yVmizmH8/u4cMzB/U+5eLmnrrcYTzaGUlCYcHKsDYifeC/nfn3U216/F2k+wpA4owWI0pKNKuNiOI3q3PsXbzI1JOkZrCsophNWN05INz8iHhyQjk5QfSKZir53+EXHZLRNNQZ/PINYYbJ4R2ilsV4zNSV91uQ+UZSKk9WMT+Yt9w3s7jhabemjpPaF3HK6OGS51PhwREyGqq6ZTCrq2pBzQ2jnVNahbU3XwoN7B8xWDVVh6JY9ZWFEUtH2HB+fktGMJiNCCsybGfWoxCQFAboms1o2LE9vEUJP17UiGbcOlKFte8a9Y3fTUboROUe09Xztt17j1Y1L3HnvdYgzpgb2NnfYvPIiF648Rxkl8bHLa4abnHOdGcCctWxLjNq10TgsZL3GBPBtw62bN/nZ2z/l1q0bzBYz5l2D15CdwcdEs1ixPJnRzVes+oZ5t6JpZW+Xhj3rWhpy5mlnBvYTAyAwMDmUfuSnd1bYDixWlBr2cZk47HHJ+rFrdV2bxCiyBT0Y/q/979ZzEAwfnUfLcBrkuhIWIbXm2v9Cq0ceGecNN8/XN/A4AwMegQvrnyfBj78tePHk86+f78kEpPOvr8+ltJyZquYstS2Pg7Z5uN8Y8/j0pgZmPZqU1iytQdayBr7WvmLyP6AVSYtqIilYywc5B0g/ajw//fgVATBA5yzGgYDThoCm950YKipoQoctHNqJ/kro75AJpMHIUgFWKaEkn6HEekCYBjfa7GUQpzgMchk4xbDBDykRUiCmcHZRLPuOVew4OezRp6dkpQgxs+gbss1op/E54JQjZUNMkd43dN7Tdp6m83Sdp+sSfYxED0Rhdsh7H0yRkhSCXkeaLrNoW07aBuc0ZeEwWjG2JXUuCE2g7T1Wwd7mlDiqWTWOk9MTDh/cJ4We3Z0dib7UluPG02DQxtAuVky1pjQGrCYpiVzURpMj6ASbmxPGowrftITeCzqaFKs+0YYVoLGuwFgjBZVpSWsZxVmhO2zCs5jspMENOA4JMmtzQmUEYApRvCjWoEQaUkaEpsWZxFMSazJlUVDXNdZo1jFMVklhmAbgxxjRViUyPiah5htoVj05KjyalLT4ekQFSZFDPjMCzVm6QoqMyoMrMaLNzojEQGUx+TzfPn2SzrXWjK3dm6PSxCzmn33OLNqO03nLwcNTRnXB9uaEzY0p5bikqCtG9QY5RKL3aGfETIxM8IG2WdB0LTkHrLOCXmtD8ELdK0LPxECwQFKomFCqw1SK46aTaLAQsWpgPmnxsRAPliySrbYls15gIt63SHZzpgs9Tdcy6ipIEd+sOD2OQxKNBV2csZZi0HRtx6oLzENgMi64cGmfza0dPr19h67tMFqLUVdRooAuRlQO/x95b/YlyXXf+X3uFkuutXX1hu4GGgQIECAAakhxhrIleaSZI3t8PA/z4Hf/ez5+sJ/G8rFGskRJI5IASQDE2uhGb9Vda+6x3M0PNzKrugFQGg894hkFDrqWzIrMjLg34v6+v++CRqYbrFwDUR4tJXmesVotcG2TdHsyY15ZesqhTUb0tpOdpQvMOFNcyRVCNOS9DMMMJSqQFvQAjyRXESUT2KdQKKEILmKQKFSK4QyBYDQz13BWVxijCDEwyjLkTg85KhHTBA71R0NkYehLwUhFZGxxdUVsKqJUBCWogmfZJhaaDAJcMjEWWYbOc3Rukm5YRHQWU9HtGvJBQdVaMm0QUTIYjJkuT4nKIKRBFiVBw6pbZOrgEVZxeHiG7S+4dGmHzBhUHRjpnL2xpjCO1eKMs8WU4tIui6bko4+/YPL0I3a2dvnOq6/x0q0BRSYpix66drRiydjMiF4QR2Okt4wGPfpbW8wmU54cHqMKyyVdMtgaoYVC+UCJxDQWVQqIEW0MNkrKvMBEMLIil0micjRfsZP3INfIUKPdCq1iMhfTBu8jT4+m/Oyn7/HtV18mKwtklz7kJZQiQ3iHrGcgckzWJy+KpO+NJXOnWMUi+Y+EgHCRoBVBFJh8QCbnzE6XTE/mIEv2d3f58v4DGqCNkv5wyCu3brE4PubLxUmSxPQE7z9+yvbtN7l97RWy8n2axw8pVIbqlzz8ckL9ZoZWoI0DFNF1y30l0z2q056LbsH1TwPQEIDaSHs6dmqaxzFpsiWCQODLO19SLWqyXPOXP/5T5ssZQ3cVcseUGadPH6FWAekMd2dHTJePKaTmxBwwbypao6llTn94lV999BM+vi24di3nu2+/xeTglAeffcKbNy/xz//gbYT0PHz/p9Tzmv3LN/ndP/xDihAZ7O2xd/k6g9dfZ9U6dtrAYDjCqAZTZzQ6kBWWvb19Tg++5M3Xf4dsdoN7E80P/+TfobZLKj/B3N5GxhepZUlbvseT5nNezirG13dQ/V0IJa3JaGSGRNCLGVIVxHZJiKlr+6M//AN6t79H78oIKfZAjkDOCMpSlEO06IEXxHBIWK2IcYdoSky/T5Q5EBFqhXOC6XHF3u3fwZ/dpZ7PKQcFWZ5x+sWEus45Ollhdh8wuGHRUdNMV+TjMVFA29QYGkQumR+e8Nmnh1x/8Yfsj65hI+TKkKi1qvMYEF3hkNZfkSTF1P2cUbYHIiUDCZ5f6F+kLq3vxf9QEOHXjMDn6N9fR59+dktrhvT6Cu8cSpvuLV0oUDYtzk7+vGFU/Ke8yXVL+Osfdc53XXDdvUqBJDUEm6ihf51cRErdQhO498kvQFgG45tUK8On793h5z9+wmJ5xA++P+GtN18DFESN8IZ1NEOwqakg1LpY1N0cTfLU9Ttdp6elivP8fMluUSWJaZ0Xz39eH+rUiBBdoQNdyyixnMs9Yu9l2kNLPKrwD44J01OmqxUPzmYctYKzVvM0Niy1R+eCoYc6Jm8G6YdIW4CoUL4mtFBXDhtarALrSkI7REmDEckovZovefDlhCgylDKUZY+TJwqtFdEvWS2P2N0ZJo+JWNJOlswOT9A7Yx4fT3G+xeg0FoqiZL6Y4qslJjO00znMa0xmGI/HaS75JDV3QdE6hdAlQqdmlDZQ9ArKMkdWgRgl21nLrR3L66/d4rVXb6GJqGCT7EaWqYAUjpBiYdJajogUIYGHUoKWRKG6zjnpHAcPoU7P8ZL66IT7n3/G53c+4enRIbWzzOol81VF3bYsVzXVosKuWnzjcNHipIXYgQycF94xpnXnumwQqgNVOmn6RSnIZrqE1IBbAxPPSiw6ofOFS0Wam3TzU252JAgd67LzwKAbu+v9pY+/4V3EeG5DTlzLUy5KU75esnHRB/C8tukKd3EeXfq8Z+AzzIgL+7nIBluz0S/+7cXXXR+f5wGg9ft9/roWug8cuxouMSzUhoki1gflwnEP6aSipUqmy9310MfQydcCUa6BpAghEkXs9ptkZTFNcKSQfy+z7rcCwCB2brTWpU59SIWRkKkj4InUzqJsROs0sDOTTKC8jwRv8c6em6hEuoV+OlKiG/FSa3SWUj+8T2ZVKqTOrOxMI7UKOLeezqlwDcbgvE8FekgU6LppqG2d6I3S07gW2kRzcralcTXONQQXUFFgpAKjUFJjdI9MO7K2SQkgweG8S9nrSqXpFBxNjNi2ITaRzCTadtlYyip1xL33FFrRk5LCGLZGA3KjmcxmLBcLVqsVu7u77F++jPOeo+mSosgZj7bQtkH4LltZgIshSUd853UAKBGRRlEoSfCGuYW2BeHP3cLbTn7ifJuYCEJuFtoJiesMCLvjB2nMpzzrdcY7m4ma3JXBmAzZLV4TkifQHe0oIbI+sS5i2r8gGYoGLzC6IMs1WZ6DiCnas2kQMabUEBtg0VJXnibCZLGkqi3JoXs9cTqFrRDQ+X6k2iEV+VHKTVLOZi0izhW5zyOhkCJIg+oMQDvH7QSuaYxUSAKNszSTGbPJlCI3mCIj6xeMB0PKLlLXaM1KrCjzLOWDFznDIkPIFDlV1w0yBKxNqF4mIGqJk6CQZFqjZMTLwNJaVlVDu1oho6Ju6k36QwyexnmESlRt584vuqFLCllfDJumYbWqyDrTT6UkZV6ijEkgYN2wbMFVFusDy9YyWa2ofDJiBJUiZUOScqAkRZ6TG42vVljnkDLJYLQQEAMiemzTMmtX6QArhQ1Q1y3z+oTeqqanFYZEY2xaS+ta8DUyZhTjHn2v6JWCTHtW0iX3cw8F6WKb9EIdCJo+WQd6BlwMRGdZWksT0o0yA3Ip8FoSTJoLRijKMqPMDUMRGRmJj5aVb9DBI3NNbzig1RC6+aBUYiY0dc18taTUEpmZ5AcSHSGmFKFkTptYQhpNmRWMh2OOzlYok5FlOXlRkBeS3nCUmA2upVQFo8EOj+MZT09PuFyO6Gc9sBbbTNnujym3ekSveXR2xmplaUPBShhKkfGTX33GFw8PePO1V7myuw0ukpmCYb+g8S3SFGRil+GopMhzCJ5gW1QZeXr4hNVyyf54QAwS31gymRNDugEKBNZDY0maZmcZ5pp+tosuSg4nMyaTKVvjLTKRaNFRRHSRo1WGaSwuSHwUWKDGI7ylalv6eZYWc75B2YrT01O8XLJfXEWbDE+GDSbRJK1FuoiLEi8Uzga0yDCAc8m098bNVwjBMDmbILcMCkHbNly/vE+zPGGQDzg6fsKXk4rPTxbcOpyyvbfPv3rhNm+//T2uX7tMWy04PVky6g8Q0eNsi1Q5SIWrm0SXNWZ9q+TCJeW/7k2kf9ZLUS4sKImdSZtPYO3O9h5//eGPefjgPgdPzzibNAx7GnLLyfECWwWKINmRJXYyY3+0y+J0xcxahtf2WISG4BVaDvnJux+yevQTfud7L3FweMjDz5+Qty3bosLNbzLcv8Kr33mbz+/cZ6sf+fS9P+fqpV1uvvEK5GPEINJrMgwt2jyEOKU9fszk5JiPP/spD+4/4L//w38JlaMnJaN+TjYoUTJSaoEXGQ1jZBxw6+YP4eQDBpf3aXqCJgZ6KsPHiMOTJxg7LRSrluN7J9y5c8z3/vg65eX9dI9SBpQEMlzoQyyQYQiN5uDzezw6uM94/AK3Xn8bMPhWorKS4CRSjxmMc8xoh6BHzM8+5N6dh7SN58qltxhfeYf2rGFafY6vPdHVLM4iSvfQPU9mBOiMcDZn/mQGS0W/3EOIgkyvO26KtBTtOn6bky8TCwMBSqOk2jyH+KyNntj88xscfs+BF1/3/Ve2SLoehdB5gplknsy5/Ok3un3DAj+tmVRXdHWv3733ECqqRlDHIWW2w7CoiUJzNjlgenwf7zxtnXP8ZMHJ0VNW7THvvNOgVIsgxZxHkQzHE8s00DY1OtNIZbr14wZi2HyN6yQRIRIQ1TFVNpLJ9XzvUg8IofPdSs0rlx7elJ26K27J+sid19nObgIvsTz5K04efcj0rOLotOY4RhbCUMcWKQM9lXYkQ0gybQqCV3ixRAqHVJpMKTIlyGQkoyATwy4NJTVHm1XLfDIHJZBGULeGahkITqCUpV8KBv0B/f6Iah5RwXHz8i6XLu1w/+E96sWcYthDa0W/hLZ2iOjREUod07wh4FyLQDIYDDFFSSSZre/s7KRIe5VYTr1eyaAoWaxaXCzIhSCPFVE0yGIIUSLJEDGAS6BFVIBQCASOJMVVpMeIDoRJxtsiddGJEaNahKyIrsXVgruf3eG9d9/l87tfMFnOmdcrZssFs8WctnW41hMd6QQGCDgC7eZcJx8J2Xlaqa551jF0LnjlrSPlN0V3NwZSLOea33MuXUjrVHXhdvE1SSBrNl/XVESkJqiM8Rz/7LZ17YI4n3IbIIVfnzQCv+aacQEguQg6PP/1IlAhnnuNZx678P3Xve4awLi4fZ1M46seN2L9wt3j8sLzzq0CiKGrm2J3rGLHpOwe3gBWac0qNyDQ2tEogc4xkX667ZsNmn8rAIwQ4ybrN/hUzCcKdTLvzIxB65gSBXwyOozOJxV1CCkmsysEhZB4mxx8XedevP4vIJNuLAg6pUBistBdLGXSbhoV0TFRyhHgjd4gZMpovPc0NnV1lckhRqy3iDaxBpy1aK2QWY5SER8keRB4L3BB0FhHlhmMVSkGNiQwIhI3tHHnLN55nHc0TUvlWrz3rKqKbLkEUiFvM42OnvGwz2AwoD8cofOCk5MTFosFJyenuBAYDoeUeYbRiuA9WZ5hoiGIiIuB0LaJEWIdKEVjkxeIRGCkJHafvdQKZTQhpASE1trO4HEt0Yjd146FgEgo24XzLYRAiZRikTRvgBDkeZ4QRJKpq+yOeQgeiM8hjOniZK3FO4cUCqWSUWJm1n4PAWcdTdPQNFWH5gqstVQi+WM0znFWVdS1PadGITaFQppiaRm9vmDGjj62Rl15rqi4iJJufo5r9DfdAGOIiJi0Z0YJtBLJtTrL6Zk+vbKgLDKETi7TRZaRZ4ZcawRgm4ajwyNiDBij6PVL+sM+WZnQddcGcJ5IwMuQQDopiT7Q1A1153ESukIgywvaJmVtF0WB0ZqmScdufV6cswR7Hme7pgDHkGRbNm/Ji5wiz8mUYjDoJ2AuRKR3LKsKW68QOi1BnHUsFyfMpguUzjC6QGUmATwhpFhYAUZrnLX4EFAyJZwoqcl0iWtr5vM5vV6PoihTHG3TMp0tqGuLHg0p8xIZwblAUF0KSCkR4xxjFapI9OUYBMFFvA1I2HSG6Nhc64aesw4hJCbLcJCMqoToQLnuJtFpCokd+CEVvcwwUIpeltMGyLVO3j5ZznA4pJHJa4eY/DWcdcxnc9TxMePujSRqYgRPir7zXQcsJIbQld1LeNOnaiO2bSmkIgMKKcFbbCPJnCP4QNnrsVtK5vNTprMZ0CMrNUiDdSmtRIiIURfi82Kg9RalFIeTM9798ANu37jBjauXQRmWMVLbmta2DHLD/rgHWtATjqEIzKcnOFUQmxbRVGR725QyY+HBuHQ9MFJAELjWJxA1SgptyIseJitYzk6xVY0cBDKhaKxHBkG/6IEBrSzj4YC8yIkipYoo21K1DS7rJV2t0RRlyfLgmPpBRdHL2cm2UDIl+wTviNETRNzEQurMYIzBWofWqctorWUwGLBcLGnrFUVZ0u8PuHT1Mk09Z3nykK1yTLUreHrwlHd/9jOyrMd333qD115/iW+9fIujJwc09ZSm6VHqAm2S0WoMAZ0nFtLaDO3/z7SF38atm3Lrvu2FB0S677qAipLrN66R5Yaz+YpsdIN+kfHd7/+I6cGH+OXHLDLF8ZMpt7evYnpDgp7DVsly2uL1Ta7vlygV2HnhX/Czv/sJ1eouk6cLPn3/Pou54truHjdffoFcDvn8F4+YnVWcHh0wn/9H+lcU9e98lyi3uHv3Q/7Z968xPXU8eP8z3vi+QPVrfBxx6cYuaiR52Mx4LFv27Jybt4fsxIqzn/97RuM/QEiB7pdoMuJS8ubeyxT9Vzh46Fhd2odxD9seU5jL5KGX7pF2Tn10Spw7mnbA6aqg1RmKFQ8efMGlS7cZjV+AOAJeIIqaILZAD9m99COuvPD7OBHJ+j1g3c30xJgT822ycgCtJgy2ePTpA54e97lx6zajV34f4fsURYZo9lCZBJkx2GrRPQmZ7bq7K5SEvb0XUHUg0ztQOWSpEWLNwOjK0q4ru15v0bEynv3/QuezA9Tjeq3xW7CJDnDxNsksP/7oY7Ki5JVXv3W+TniuQPr/tH0FwbnwUIx04WLjn1oLAAAgAElEQVTEsKZ3AzFJAIIX2FYgXeDg9ITjkwmPDj/hVSl5tXI0bWC1bKlWlsZ5mtZR1Q3DMlG+bd3Q1gum8wWrakVjG/b299jd279whkJXDCcwSmxWUTxT9CTWeGpaRsAHiZR6UyytqVdrv4M1G/a8cQTF3hgxHEM7YPbFhF/+/EsePYlUrqAJNc5X9FuHdAERFDGYZPDe3UNtsDTUSB3QRlOUgoGAWnkGmU7JJGEd/6kJAZQWBOXBBIK2tKIhCMWwVzLe22K0s0NeDLGNZbxdMB6VlH1DOQFTlOxc2kIbRb/fZ7yXgxD0ih4hBIqij4+KSIqQNnlOvz/EhYC1biNr0lps1ki2qqltoKUkGoWTGQ0CQ2K/qOgTw0Ks51qSNbsgUqJTJ7dI9XzHqulkxGlOtiztCdg50+Mj/vo/fMhf/Nm7/OSnP2W6mFHZmqpZdVY6nQGjF0gUsgNKIo4QU3Rtanh2jG3RyYdgM5c346UrhFnP9e49rq8T57KDZxkH6/Xb8xKOtbxjU3OvR9VzRfxFsOSiXOUrYT9ifYfiGbnHN3laXPy7iwyLrz78Vc8KeHaqX2RUtG37zO+f38fzj/297++5/Vw8jhcTT55hpXX10PPXo6+w0SMbNum6+UzXAE/Wh5GAf7aw+prttwLA6HCa5B6rRNf1TB/WdU61Smni2gXWB2xok6FL7KIEO5MQ2VFRQke7TRc+lTwUCLQxJNRXaIRKkyJ09JgY111Xh8QlY0OlcEGmhWOCtQkiXVCyGIl124EPYlPUStVFvUVNkCn2KQRwDmTXvVVSoFWSrPigSBqspMmTQuBDhvee1tqUoNINzkBKEgGBkpEGmNi289lwjEYjBoMee5f2yYuC2XTKyfExxMju3i4xRpq6ZuEEvcwkICUFpiGFZFD0CESatqWJ9abIr5uWykscBh/XEyOxAYSAxtrNAA3dYvvcIEYiYjcBiF280jotJGn9jTGYLqkh+LUOKw1jZ1ucd2moq3U6jdyAEW3bIoWkzBN1yYeAtTWuO37W2s6pWKC7iyY+0LYtjXesvMO72BWO6tkJ2Y3P82/P75yiY1ysa9v1Jp77k/VzJJxrOjsgJssy+mWZit/g6Rc5Vy7tcWV/l36vRBqNzLIE1FmbjA4hxXhWS5qmYblcsFhVLKoKRGIb9HvD5B0QPTU2ebJ4j+xAp8Y6fEysEq0VIs9Z2gohwDtLXdd47zpDVZ+iZp1PKPw6wxw6H5MkgyJEtFQUWUaZGVazGdPpJOWSk2Q2ZVmQ9Qtqq5hnJW3ru8hhUDLDRNHNNXCto3OvSLKytpOLiYiWkrIo8VrTtjYZ7PbSAlyqjNWqST4uVYs0PWSQeJcMoJwGayKUEqkUyiQvEy0NWhZIqTtgKRnwJtdpOmqrwJOy3vOOJaGUTsb4ct0BePYmEWMnRTEao1Qag1IxyEvyzOKlwiiNzCR5liXQ1AdEiLS2ZT6fI/M8mep2fisxysQwixJnfQLEQmR3e4ds6xLTec3ZyQml0WAtsY0EGxExxTHP58c8mD5BXR8zHG7RKyTxrEpyMpOzrFtUBJEVXNnZRgvJ2WhAVVXM5zPK/oC6bqjalkVVczKbcu3SHqo3JGsicVExLA372wOEgna1jQyBByczjpcNvhJUBJ6ISJEpajTBR9rWo4yGqAghsV5EVPg24KSjLCSlzhhmBdJ7ZBQoIcmynCIP2NqiNQwGA4wxJD2sB52BEriYuHVCa/qDIZf3LnF4+oTH975E98aoGJI0iIDQAqEFQYVOwtF52Ngu4jbLOXr6lMl0inOO6WyOc45Br0+Mkojk+pXrFPom+/sz3vvgU37+3s+4/MItvlW9woOH98hy+PSjX/LJB+/yP/2bf81b73w3gRcxJValiOOvdmH+KWzny8Lz0nUTMytIaTHdbXm8M+CHP/rnXLl2k/H4Mg8OW+ZlQeSEd8rfh0s7fPjxA9RR4OVXr3D7+9e4//gRf/2375OVlzh4cIfdQnBluw/1jMP5kqODx7TO0jcDBkWJZMxHnz3l4GjB4zsHZI1FtR7jJXfDlzz99K+498UjbqofIenDYcXqUeSLR78Ad42XXvwe2/3LOD7izpOn0C/ZujTk4YM72LMTrLJc//Yr5Hu7XUcSsr1thrsv87/9+/+ds17k5vC/YbFqufHKdWSmiasWO11w9/PHDLYuke1f5cb33iTs9gm5ZLQ9pihTwhuix6B/lcI0GGkgevLREIwgUxGkI0iPVCYlGBQBvCIZZhZoWXLz27/H1VfeYXzlMoI+YRWQZUbWu4zQydxP9y3RnODDMQSHEpaYQbOYUC1rBqdfkO2+nDwOMFy8e667mlGodanbnf91N/ZC9zReSAxYL5z/0bfUKFtMZ0wnM/Ks5N7dL+kNR9y+fRtpLmrHU2F/oZ/8n/na5wcgBN8VGeleotX6eGpA0zaBR4+fUh19xuLwDmeTKfP6gPH1q6xqT4wSKTOMKXCi4Oh0ypPjU3rjq9RVxcHjY44OT5nNZiyrJWVZMNoabRgTqeq7CLYmD7s1FBnjutHVff4oU8SikJtC9uI9NASXZLsdyCFZy3YBFC6kdDafKeax4LDJeNoYnFed79gyeXiJJKNGKLSzGAkiRFauYSmSF5bTkGHYkpqoA5nRgCcKl+TOUdAvR1zbNwjpECaQ5ZJmBFr26A9K8tJgVA8XDHlR8uLtbyFjS1EWqG9JTKEpihzrLVrr5LulUgOrbS1SGRCaEBWtdRiToU1GqFuM1mRK45ztwJzQNU0kQUkaBdZoaiR17FK7AIfGELu0utjF53qMTOlo6/pHdc70MUS8FZzOVpwtlsyXCz678xEPv/yc+/fu8quff8HjB0fMpjNCSOmGMUp6ed41JrsGQOwM/0ME4TsmUhqrSmmU1ucAWzrx3ZS4wMq5IJ+4ONaf8bcQzxpTPl90f7Nvzd9TzD8vx7g4qr+G+XBxH2sfjK/d94X3t35vG++1C/t/BoS48D4uPvcf8rfPs0Se9/X5pu3rpHPfJFHp/uIC+PNs7RQSLT+xh+nANAGdTpQNQB3X4Gv4tZfF3woAI12gfPI+UBI653EtJd6myKC2lajcEHVKHZFdIehjcqb1Ll0Yg4hIqQmR1KmMKUJKKgVKInSiIqpNIeDBOxJRNZkdRu/S9ySmgNQaFSUuRFwXgeqgkxEkgp6P6VYsVUeDSrBdFwcl8FKATrwY3VFAffDJ6NOvUcW1z4IgCkUkx7lAZgzzxYLWKaz3BJ9AGxeSn4Qj4oOgsYE2oQuUvZLReAshBfPpjOViSQiefr/PcNBnUScDvCIGRIx4m9x/tUzUaKkjZAHrPTZ4og8E51LsU0wpKOsJk9IYVJqs3cIiyUDjhm6/LuKjWLMbktEjmwnWST2cS+kbgQ0qmmJFO3Of7jXzPHVDfUxdWyUlzloQqchtOyZPJ8micZYYSRS5CNEniYXDP3OfXWvn1p8rdd9TESHoUEORknE2DIzu69p3JXbnMV4w9REClEpoo5SpcJZSUZYpfSQzGhECg16P7e0Rw2E/jf/uuBmjk/wl+GR2W5aEfp/YmWzO5jOWqwVVVXVJGoEyyzBGkHlF29gLTJbE6kDKTsYaE+otBFlm8N6xWMwpioJekRNjpCgKbAcGXTwPQqbYyeA8TV3jMoPulQx7PQolaVfpxmedTah8o/EKtElpI0ZpYsdWCF1xqLOMzJgEjnQM4hhJRb5UHePDUus2LWKQSFTqiihNqTIGg5b5dNoV/RqJwrsU6WsJWDxRBaROvjkagRKaKAyBxOAxRiWwKARiSA7MuU4yI+eTn43ziU2Ve4WUDu/Px3vkvFuQzjxIHxE+mW9qITFSddeCgJSmS2NKkVWZ6rpd1tJUFcH75BaNwDmIKvmcWOuIyA2IMShLhv0+1WJOpiQipoSk3CgyLdFeYduae3e/YHasuHr1Cm9cf4neYEDTLKlqz6BMfhrDXo+laxmXGVcv7WKtw2QVp5M588WCrfGYWdPinh6R9Qbcun6NXn/E5MkTCgmm6/xc6ufoSztcu3yZD+884MHpnGgls7lnJpNsThloGpt0/YXA2bTgcdZjW0+RC4w0SQYlFSoKRIhkUlOYnJVyBJGMYPO8ACmx3tFUFqVTjHIU6RretpZCKa5fuUa9mnJ4eMh09wjl8y59xyePOZ1A1EjY6FqFSOyt7UEf6wJNXXPjxk2GwyHHR0cUvV4yGy0HvHh1i3o2wQfJtSv73Hl4wHx2wnR+xGx5QmYc33vnTfbGGYvZhOVkQm+0T900WOfp93rJi0Yl5hz/gAXHf03bGgyOpIXOxZIoMeZS5845yavf+RYv3r5FoXLemsOPH065cqnH4y961HvbfOfG75I9bti5MeSL4hB/0zCe1rz+6jt8+nc9PvizP2Vx+r9ip48od7dYNo68DNy8tMu//R/+FavjKT979yc8OTtDLz19a6Ae09/aholhcXZKeDrl8KMJl6+OKdQWZ09rHtyRnB3e49H7C6TIiI3iwYOn7L/yCp8cTHh8tuTWq9f5P//v/4Pfc/8db37/ZaKfY67kBD8jXrnE5ZdeZPnwI3oOiqAQKuDODjj94iEqv8T23m3MeMiDx3fZurFDb2uLqPrs7Q2QQuNsQ0p06XVMMQciFWWz4wmVtZieZ7w7QIkxhAWB0xTT6AFtENEwuPQCnoaoNXXtKYcFUaT7iicivOjkuGsD6xW4llCdEdozxlsF7eo+vWYHIbdB9VgX72uWzbnoYN2DXRf66wV8KoTX6/ln58M/LkMpAk8PnvDuz35G2zj+29//fd566+3kyaXk+ZPWNZz4TQAX652uj006G+kbie6ur03l0ERia6nqmkePnnJ87x5u9gSEIprk4RaCQCiNNhlaZchomC0rHjx5ynD7KsdHc+598YiTs0nHBhCYPEN2zazUNEwykg3etPG88EBAytj5Q3bnNioIKjGi5bmPwGqxRCmRJK2dQWNMV4MLo8Z3jUeQeSQvFG1TczadIwuHo6GyK4b9ElSOkgV5UPjKoWKKCF34hoWwCARlTEV9kWUMVBIQt67FKQ8qNSpHgzFbvesokXw78swgRQ8pcqIOiCwgtSDGEu8VZTlmMTtG1AGT9RPTUiiKsk8IqdYQSuKiYtm0CBUoCoXOTOfxJrEx4EVEa431qRmjhUBckCLLzGCVwEpF7SONE+RZN2OEutB/C8TokjmykERqomxpXQO2xdYt1aLh6HTJT3/xCT//6HO+uH/AvYePUwJiltHUiZWlyHCreQKHgqO1geDompbJKSKluaVmVOxqI60FUqoO9LoIV7K58G/OcYhf6cY/y6z4uvviswyBf4gM7PnC/itF+te8h+6bb/ybr5NnwDmLYf34xcjSbwI9npeUXHz8IoDxFT+LCyyPi94a/ylriYtAxsUI2OfBi80uN4Otq+UuvrfN514/p7sOrj1ZhEigplxf175++60AMEKIVHWDbWMXC5liGItM4axlcnZCCA5hJEFrlDEMBzlGrwe9IMVWJg2e90lXpTo9eeiKXDzo6IlKEYRME6c7mF3FnG4DXYReCOkiKg0E71NMa0xaPh8izgdc7CYXqQOrpEREhRFygx4KkeImfReX6mJI2jKfUGDtOnQwXDBpESClIQDGqI7l4Kjalrpu8DZ1e9uQaOWV9QQcUVSEEBkMW8ajAcPhiOgDi8WC5XxB9B4RA71eQW0tznm0SCaqyd8jDSi3TmVBgExymFLl5EHgXMT5rivfHZc1+wToLogJ1Ik++V/AOQKainnVudGKDQjhnKNt2+QuH9YnI24uTgIIbi1hSAXFRVQyeEfs9ptYJd3iRwga6zvAqHM8TvSOrnDvwJXNRFyvMNZgsNiwLM4Dm9IvzlkYzyGwIW7MeRJgkcQoUsQLFyqBloJMyRQHZnRCw9uW5XJBbgwegW/bTlqQugxpfCSZjdEFRa+kN+ixqmpmsxmz+RwlNL1eSW4E2htq0aDUArwnBI+PAjpmkhCA7HSI6zEvwKge/X4/HU9jqOu0/9VySdsmxo2QaR/4gG1a2qomDvoYqcnKktGgj8DTtBJtDOOtLXSRMbWJNUOIXawmyKi6fcqUaBJ9J+VIJrlaaZSQxOixrWPul8n92UdsG0BYkgeLot/r0dYNTd1gYyBGhfCSTGbkwpIpTWgaogXZWmgTC6cWUPuAFKC6c5tA0M5kCEWIHu8DrXcEETFZgWySgah1sVuErW8mF1DxmMZPStjxCO9St7/7f61RTuMiLTpdCJvPsR56zntWlacnc2rpk4RCi04uYVOyiDlfDAqR6K4xtkjRJwZSJ0jDweMDjo5P8ZOaN268iA4W5xOLRYakixWrFYXJ6EtJqTXl3j5lOeD+w0ecnE4ZDPqUvQF3Hz1hMllwZWeLQhuEgizPMVj0cMCo10cVPaKzQOSkslghsVGwrFuKvM+qTokhnuSTExGgDCiNyQqU0TjrICajXUJivCWaqiQzGaURGJ2htME6z/H0hNPphJ3RmHKsiW1D1dSUbUtmBuyOtwi+QUfQRERwBN+QvAWSvwYidMWyoCxyTk5OktwvN2itKcuSPC+ZTufMlhW1daA0e7u7rBJcxs0XLjOrlzw8PuBv/+NfkOclo0HOD7//Nrtvv8PB/S9RqmA+X/GLX3xEiPCDH/wApXXqWvwTk49s2vHrfyPPLHDFuvYR6b6V5cnjihDJIuxISbG9z2q75mSUUYy2eXJwjw/+7lccLR9yTTjeuHmdH73xOrd7kvzkPtPTY166+SaHD96nmT3CW0XY3+Xh0Skf/OSnPDo4SJHgreX+pELku0wXfW5vlexva26Or/O3n3zK3mKG6Sv2622uvPgOk+oXfPjgHnt7N7h28yV+9cnHXL90meu3elx74zKH00POFisePz7knWJB1F+CXBFES50dcfXmLovZNpOnE157+SUoWkI9oe4ds727y/aVq1QLy+y9xzSnMy6N3qK3s4vMFFHWtO1jUAvKbJdodxAKIicgnlBuB+wjx+KoYlhcRQ1yYlwxP77DsN9Hi+0UY2t2IM+QwhBEiq900hFDg1I6RWpKCUJD3EPLAYIF6CcIc0w+HmLELlWbDAhjd0+LXz3d3R04wRcJohabk9+t6jage3rmbwoI+M/fHj14xC9/8QHDznPoxq0XNgbnX9nOlxq/ge18sb+W/EnS/mdnCz7/9B6xWfKdly4TOu8w6yIIg0CiTIbuWGtSpWailII8L3Aevnx4QBR9To7nnBzPaG1qHOWFAbk2yY/IdWGCI5mrCjZSoGg27zGEmGKzZSCKNjWfbGA+D0ymcyYnJ9y98zl7e7u8/c7bDMfD1KSN54Vt9A6aBao3R5w+QUw1O/kRV/IZD+QErwUzW3HmK1A9cqMRKqcICm+TPGPlYB48C5nW9so5BoLEHI3J+6sNAacjXgQCniwvGA2vk5kBSpdoU+B9TvASnTl6w0gUFZPJioVd0LQLZstTvHc4bxOLtcgYbo1oOhZjIBKEZFXXjLd2kIVJNUAQSVYvFLHzBHTBJ/+ArhkrZUpPc17j4ojWG5o6Ym2LyNKx8qFCRIehSGCDUDgrqOrAaeU4Pj7i4Ms7PLr7KQ/v3uHRowccn51ycDrhaLFgFWDn2lVuvfIK27v7rCae08M5h48eEZRGtw2hqWhXS6SAEG3nYRc6uUBi2gQfurl9zmx/tpi+2LUXrF04n5Fn8NUi/auMgIvrePFrnvfcLHoGGHkW9Hj+dTeSigu7uQhifK0EpPu6lgGttzV4sa4pnnk/F/b9TZ/nojnnNzEknmesPL+v57fnGRvf9Nrnv1/r1tbS2/WDHZtUyg3Del14peN6/jrrdY6Ua+DztxzAiDFS1zW2jbTWIWKgyDQ72yMubw1ReJpmiSNQOYsNnmoxp8ZBZwAohUIqgzI5RdFLUgOdjM+st9jgCMES29BFKipCZwolhOhMWmIH8gtiTDQr4cHIgHepCFcqI2YR6XxXN3cngc4ttwNOTFeArPXTScvVSV58SG7AKl3Y1+wpBZ2BTEyUeq2IotunUtStRa1WHb1G4EICTwQK6x2IQKgTKOE6Y6TxsM/Ozh5KKU5PjlksFhvQvyJQKMO4VzIaDsiVIfpAVde03mKbQGtbKu+orU9ovjAISEwNnVgDMkK9WiUUWOtkQBghBp8iT6XEdbr7SOfE3WWIQyrIkldC+lnr1PXx3idUXapNtBExbhBK59z5hBcCrRW5Uqgsx4cATZtAmhAQKhl/JuPFDRF5jVCkc919vwZa49q7Q1zQqHW0tihEd3FeL53EM5N9o9Gk23cU3YIgSTZUx9JRRCQhufbiWS5nLBYTitOc8XhE3uuB0ut3S2EMvaIgap1MSTvvFKEEg9GQot9jMN7i7HRGJNK2NdZHOpuEtB8pUwqKlBA93lm8TYNwjdQqqTA6SUXyPKcoCvI8Twkyne9JYk0kNNaI5F2SaIeJqdPPMraGQzItqZqGLM/Y3tlGFjl2MqU0OfO4wLUtNgiMkcg8MWls2+Ccoyyy9HkFrKoK7xK4YJsWYiTropdXq4o8ZOR5hvUdei0F06ribLlkWTXJUyFocmXoqwxRtxirKGwk6+KWfVbgtO66PGEDWAmRTGed93gS00oLkEoQjMHaGVLSxQDK7lyfgxjBdzjIOgYsJuAtrOVv8byjCGksR+uxzuKI5M6ilSYET2MdKOjnmkJB5TxGSbwSCKXQRYYqs87vI6bOTSeT6xc50UNZFox3tlDLCdZF5ouKyXzOuJSgDAGVhl1r2S5y5lVLKSX74zGHkyW5Nmxv74DQZFmOkIbZbMnx0yMOn5TsDnpc2RnzojJIociRFDFgcs1YB27s9NkRhi+PTjlaLCmLIa1tWdZVMrtFoPMcIwXGOWTT4DpAJ0qB0DpRZjujt+ADIgryoqAUCqUV2mhscBweH9O2DbvjHfoxIxeRoUjJQ9bVbA9GDHs5cTji/rwlRkfwLcE1EFpkZxIWnKWqqhQxrJKMDSS9Xo/lckndWLQxzCdLZqsaD/R6OfvDa/DogMlqyrUr28xWMw4e3aM/HONcKv6Ggx3+6s9+zCcf3ePSlWtYH3np9m3KweB8fMjzTtU/je2rn/XiElev7zMRTCbPYxpVIGaSt18b8eBpi8p7DDQ081P2+prdb79O62/RO3rC925cY/rFI37n5Vd48tJLvF/N0JnDckzZqwi15LPPP2NyWlNPp9DU3Lx+BZRDbJWc2Qy5O+ComnPv6V2uXb/GncMl14uWYlnj7BVuXb1KkUeuv3KDl7/ze/zNj38BjPjok3vc+vbbLJaH/MWf/wzFFc5ODI++uMf2fmB58CVbt17iwc//nHf/w/tkXnFHHPLaC3vE5RSzM+KFvTcQog+iQiyW5Dpy91efsLt3n5f3vkNoA/VqyaOjA9rwmP3dfQbqZQodWU4+4u7n/w+j8hL97A2u728jVwuCm+BM4Om9e+gX9hn2FIQcyiG4FpHlWOtRukCRumQiLojUSJmB6JOoSwKPRYQFVXWCKiJqPGDQuwq5wbqWLjRrs21ICRcWrenHDtKI0NFbL0JbbDp4zw2WZ3uD/2W277zxJtPpjH5/yHA4TIXJr8NXfoMgRgcNnBcZwRO84ODBI/7mL/+S1fSI1/6X/5kQHHVTY52n0HmK5DSWQMSFJjXjVAIFi2JEQHHw5ARrMxYrS/SJQRpiwDV1irTuGkabhJhnipjI+oc1OCVI66gQAq5ecnb8lMPjM97/5Es++uhjlos5Okb+6I/+iCwz3To7INaxrdETqop68phw8DGDZoJ4uCI7OuSHb2wzGL3C33z2CUcTR+MiTRAoDyY6RCfFdcqwEpE5ilVM9x0ROuGqjymzJRdYoXBibSrvEzg/HNHfuorMhwRZsJg6iIrhTs72dsBWxyxWBwgRODx+ynJ2ig924/c3X83IioLReMSTo2NWTY2LqVH5ws1bvHz7VYTUeB8IIVIUWZpvXa0RrHumuE1NQ4goYgBvU8S46oB5JdJ607c19WrF08MnfPrxXT75/CE/+fBTTo5POH5yn+X0iNAsELHBx4DXklZBQyQfvchgf4zXmkYLaqFopSbkRTonAfKeJLQ1eIn3bUrriF2zN4bUGFo39p6TPazHzfmoEZwnYJwX3M97WqzBu2clI+sa+esn198HXlzcNiyO9StdAATS48/KOX7d97+OJfGN23PgwfPsC+Ar5py/bvs6VsrXPWf9Pp8HLy5Gxj6zj+4CvhmT3UkQ6/e3ATBS+qVYf33OWEQIOvm2/zXwxW8JgJE+sMIH2+XLpgNmtMZoyfawj9Yj2uDxojsIwtHUS1armrpuWa1qqmoFsmG1qBLtm4jqkM5MawoV0F2XNnkoKAKkfOcI1vlEg5RJx4iATEqC88ncLQRs22Lp5Cl0BZxz+I7aHqXHB8Anh2MAlEjauRCI0ZNnBusd0XukFGQqJUjIGJDBd5pFCUp1CSkKodKJX1PBlG6o6xpnE8U6Rmit7wxQNKKqcdayWq24tLPN7u4uSgpOTk5YLle44NneGmMyg+0W5roAJSTGKFSm0b0S1TbY2RwVEysiunWaSFfMhYBQCbTYJJCIdMNWUido0ncFulSbG9ratDTG2Gmizhko6ygjrVOMUvCp42rWxp4kOtrm70UCQaI2z7AehIC2bVnWNdaneKlAd7FZI34hpE6/WOvEzpFb0QFTyVym01x2rynkOn3knFUiz1tE0E1A0XXdk4Fnet1MqSR/cRZBMlbSWhA92JDO2XQ24XRyijIZQhnKXk5ZFBQmY5UXqeObZR27Q6K0woZ0LJQ2DIYjZKzJZDKPLXLF5SuC5mhBJDJf1Sxd08WmSlyMtNZiVLqJO5u8XdY0N+fSzVJrDSp1wfu9HoOyR54ZgrXMTo+pq4qmLnGtZeUczloyk1GUJa2zTCYTQpcWMhgMWVU1LkRsm8xYg9G42hG8p8hzVISmqtK5coEm1EghOpPfjo2DSXEAACAASURBVEWFIDiPlhpnPa1rEVKS5Tn5sMfRas79J49548YeRSNwwRN7oAYasWzYNiUFOt1kjaGi6+r6RHelu9g767tzlyiceIcxRTK8DSH5XKjE6tLaEGPyksmlQBmD0gYlk0QsLcFS5vgaO1VKbQx8bdvS0zm9wYDB5T2yXp/VYkU7q5EmFQ1tjIjMcLacU8Qcspx80KPBofIMkelkECw3aWNJqidSmknZy5E6o8gzhNK0riUvtmhtugb5GInWUmQ5Dlj6gHaBncGQg7MphTaMh0OKvMf29jaPlhWr1rOgTck2PnD5dMH17RGDXJOL5LTeM4L9UUm+vUdeZNSf3WW2nFLLhtPTExZbY3xouX71CmWRMauWtDHiBKi8IBpFHSw92Y1dZ1FCJMDXxy7QQFJVNaqvMSZnMpvz3nvvESYVb33nVaROUj8ZUyyuznJ0v0TJNvku4ZmcHTGdnHL5xRcQmaCqquSF0Y0HpRQxiE5S5Dg7O2MwHpOVPc5mC9xqRtHL2B32eDo5YjjM2A8jJsttpl/MkMFTLVfUVcu4r8mKbT744F0Ojmb8yb/5E269+OIGsAWSVE7/dtyy/7G3TbLYuuHDeQc/ovAqcvDUcefpjLwP3766hW5rdl+8xSIK8m3Bgw/u8zd/+mc46zn+7CGHjyacHDzmZPIJSi/41//yRxw/mvLxB4e0bUSoMSbvs7N7BV02ZKszenPP6vQ+oTB4Y3j/i3sotnly73NevarZKxXy6Yrv3XqBOr/MwZllMpXkxVWcm/HeX3+I90fcGN/gre/+j/zi/QX/V/VL3nmn4Fs3M/TRjDdD5Ob330QEOD36JXF1BO57hHAJYTRQ49sJj5/epQkLbr5+ixv/7CZWPODs8AhCj/2dV9B6H8KS6E+p5sd8+t7fsDyreP2HP+DkCzh8epdit2Ye5lx57XV6eot+bycVb22NPH5EdmkXnKPQOTG67j7qCfEIEY4JoQ+iT8Cx8odoU7OcHrA7Msg2ErJDIjWC20i9nzr0axZsR3Pc3NdJTEARU792c5KT9oCLcpF4sQmx+SX/xUkZAkGv1+OP/viP17/4R9g6D6mmRZucZrnk6OABi7NDRn1F6xadn0NiyCmXOuXaaIp+Tu0r0A5pYGd3CydqEJL5skXIBVIYIpJMSbTRSOnReYYxGYHQmeILRDT4kBiJQkWcr9BadHIm8M4xPZ3x4MuHfPbx59z59C5PT0+JRnHz1k3+xQ9/l1du3+bKlSuYLNustRKQlXg5Ukqq2QI5PQZ7CouKMq/oDxqkmBPdCt84ZKNgKSn6BmID0aGVYB4kM+9YCE2Npqpblm2N7wnG/y97b/IkyZXn933e6u6x5FpZOwpLYxkMutHsZYYzY5LIMRsb0oY3Gg/SSX8E/yIeZdKBulCmA804PbRmk93TaPQGNJZCoVBb7hmREeHL23R47pFRBaDHpk0atig5LJGVsXp4+Hv+ft/fdxlt56QzLbjoHLFQSKmzFNEI5EhRXp/wxfmMB48+4WLu0cKyfS557eaYm9sGazNDoqomnJ4ccXZ+Qeg6XNchbV5XHh+f03YebSqstaS6RiqD1lnOm8jruxDz+kKJXAtIpSF46JtKUgqE7JBqiUSxmp9B7dCjwGK25HJ+xuXshA9++Sve++l/4vHjTzg7OeHJ0RlnXczBBr5DOI9OgcHI03cSh0KPtgndlNl5QVCK2cWKVdeRbIGJAmXKHGW+kj14lRNqMv4Q+uEt+sZgWjchs3H+FTvg+aK6X1OnFxqE5CbSIGdIaZCV5cdIKQnheRbE+hW/BqAYGqMvSiuyH98VODLkH236TgwKqc2G6iYbYvN9N38PbOzhccPz1+EGX7GfL77usA0AyIvgziB5fVFC8uLrbf69+ZyvkrO8CH6sX7uvixPZhD+mbMSZZAYplFQonfo6rk+pjOIqhWbjO/bB/Z3z5+/FakgIQWFLUlC44Oh8Q1OvWFwaTFhBN6IsNaoo0EWBVAJrLaURjMqKtvXUow7nIkIqQoCua2ldkw3cfEuIHV56RMoJAkl1KO1BGbTSfVxQpjVlQ85A9DmmMMYMemQzwn7h26OHkpxfnGLMiKiSPTumV+lt0MmV6k8MMish+yj02qC+a69ERA4pH71JlVYaWdj8Jffvm+UDmq71rJYN0UdizEaL+STIg9z5yGyxzMZz1nBw/QZ1veojWw3WltnYB1jWK4LvozG1RhQFxpZMJ4IiBJKPuCZLPEI/0LvW09RN7lfLxNAbSeSTWSD6qKP+yx4ispA5mjYEwgb7QtCDKKXJxyQmSBKZUs9uyVnNghz9lHqwI4XA0gdcnZkhSQha77OBZ0z9cc4T6BWklxkYQ3Rteq4LzhrkGJ6wRotFlsf8NiqWFIO+7+q2bFhzhZcrlSNNrdGMqwpIlFVBNRrRtTli18dA09W0bc1MgFWasiypipLJeJwjMguLtjbnsPfHv20cYxOxVhGLkihL9oVl2WZaaEDSxWzY6Z3D+byfwefvQki5lvMYY3LxBkiV/SEGv4pYJYqiQBjNYpZlOyFGFosl1igKq7HW4mNmBbXO49qONuWoJCUUVhckZHY6X9UgsrSGGEhB5Az0riMoA0nBMLZEQpHTP6y1/YWmj+yNHqkEopDM5kt+8cGH3DKSt3cSe6Xi8rzBVBrpJUVSmMyJwiFoY0BL2RvtZjmLFDJn1BP79JyYTS4HBk/KtN2QYg8SZNZV1zkaIE5Huasj8xggyr47kBfvKcY1a0cM/amUqKqK7a1tpLW0q2bdvfDJs+paLuvIqBQEkRcxEUlXROrQ4QUYpcAYRGEYjzV13aK63rskheyDonNkp9AyLziSQCmDkh0yBHTvOYF3tPUKijHT0YiL+YLSWG7duM50POHi+JBGS5zzBAEnlyv+yy8/4M27t3nnG/cIMkv4rl+/xk6SRFPQBs/JyZTm6WmOy3Yt56dHSDxSRHZ3d/JokeCJOJFIWhGEoHGO2Ev/1vFrIi82YogoZXMHqTeZna0WfPjRJ5RWsX/jBvvW4lvwPmB7OaLU2R8gRcfZ0VPe/+whr6/e4p1vvksMPQAXE4W1zGcXlOUYa7OMxFbZd6hpHaYcUYym7B4c4FYnXL9+QJsCjffc3N9htax5enjGo4cPefDZQ0q7zcvfeJtVJ5nPT3JHFCBGBqdK/f+DF3/ntrb/loBwbFUdq3oJrUQWltOuxUdFd5YotgX/+J99n+Wx4+zRGdPxLcYi0oiGnZt3ePe7/5T29ZrZ8f/JydOaFK+RZOKzR8cU1ZJqpHjnzT/k2eklh/MzXn7zFR4++IL77x3xjesFt/Zv8vrr72JtycdP7jP3p5itXW7sWEa24PD0go8+OWZnUvCtd6/x+tt3qHa2efDg1ywvVtg/2OPJ3/yAuPK8/v1/wnK+YO9WQO7vw3RKMJqUOqyomR894NOf/xfeurOHoKSbz5jc2GO0VVLqEjuynD1r+OzjTzA+cWO74Fvv/ik6CYSy7O6vCNZQ3dphb/QOnQsoB+50xrOnH1O3BTfvvYoZN6RCo9QERJXZjKnD13NEavH1KS50mElF0guatGBUgRSWWAtCA2EkM61dJHSKkHqjI1iDDgk/rMT6G3qfhJQ2vuU1bPXcc3n+1v862yYxhOfomP3t4v/WnUzrNxtAnYjRmdVpreDu3Wu8fG+fy4tj6uaSorQURclFEhRSU47HmKmkqAqUFigFZWXQqaCLkSAlIuXrb4gyJ4TpRGksMTS54BKZLQu5MFFDmk0Ued2aJKtFw2x2wRePHnJ8dMSjh484fPYMYuLg2gFvfett7rzyKjdv3OTWzRuUZZnLoRTW67618ScQkahgSE8gLiPCa1Yzx+OjU56en3N8fkm7AhVKjLe41tOJFcEGFlFy1ghmXtIkgUcTCbgkKCN0qwbvO4IwlCEiXU4EDFIiFPhuwfL4Af7inC23otIGoqHwCe06oqtwviGK3pTfFwRXIrBYm2PXU9AIJRmXE4rxhGJU0biOyWQbJe2azTJ4gqQIQfQpaUIgQuglO72UUmjwktV8xezojCf37/P415/x8/fe42c/+yEnp495+uSQ46OnEFsKbfBJ4VTPYIv5DApCosgpjkooTO8NFrrI8rKhxbNY1jjvspRL57WfNAWy6q/HbQ48iK65AimJvUlrXnsPDcevPKOHorhfs38JAPgKD4fNwlp+Be1p09/ixduHGmRoGGxKMZ4HV67+PfzIxJduyw3RK1bFi++p+mbvkEoYY+gbJENj7sub2Nivr3tdXnjMV7E1NkGLF/0sXmRWDADLi4CF72uF2HsxDvYKJBAy9euy3JgT/bzABkARUyYOJLExz4vhMQOwffWcr9p+L1ZEKaZsSpeGySkvsLWWGK1I0RG6HAmZUiA6iWuzNwI9qarQmsIotLZMJ1OatqFpVrjoECJr+mRwhHaVzRt9pPM1nV/R+QRK4RKZzqIyyqqUwliNTCJ3pqVaF37RtXgf1rT8FCLBe1TMhWsQva5fXJXBoh+wMYTegmGgBOeEFC0yQjVMzTHkglr1fgmFkGvdp1IKLQWtzkaHrvV0XY7/y7GmGicDznuWyxrnHNf2d5lMxtnkNAQKXfTxRrFHS7O+rnUdyXeErqVLgi6knFgBV94AUiKszZOQCzgXcANCGfPncz5mVsnGQkOuXbdTllFkZwiGKKUBYQ9pkJ2EvIgno5w5ZSRkU6y0EWmaMuDjYk58CGSfDhfSxsX96ntYkyXE4IEh1rT+1DNMWI+jDZdgJfpkjvjlQd3/zjGfKjt/r5HGiBqkIz0DREjZZ3mr7BqucipJUZb4GGjbjtY5dA8y+M7Ruo62abiICWsto/GYyWRMUVXZ8ElrpMkpHNJGKqlIhc2eEjGnkqSU8DFlJo/qpS1aoUNOfIGMkHZdx3K5zGBhWXIxm7NqGoQQGGOIMbJaLvNCMwSatgUtWdYrkndsTScINaKrWxb1krpp8P13M93Zw60avPM5IrYqOb+Ys1yt1gaa0TlCytRHCXSuJYhsSqalRgiVC1ipclpO2yAVmUnhO3RhQQscns8fP+LHwWNeu8bo1jaF0jBbMY+argngcgINSueiXpAjPPtzA5nBzUg28HTeo0hZriUivuuQUmfZVMjouVCZ4eVCyNTcFLNsbQCaZAa1hsXJQJMUZJxLSNGfS9mPZ7hgSAR13ZBEx1ha/LQkYXHe8ezpU+J4Gz9EcMaAT4IuBFof6aRmoou8byIhlUHqzPLJOto8n2Tj2hwp1wUPQjIajWmfHTO7XCLKMVtbU5Z1jdWS6bjk1o0DpmXBycWMk/mCRdPh/HkGqMcFL9/cZaI1yRhGRYHQJeP5kq1yxM3dyLyNiGBZLi5Znp/zzHdE1zHdmtI6h1CKpsvAXgSiyGM+poCLnpA8KQliHCKaA210NHVHigIlLDE3rNZ679i4bKImdNZbykTTNfjgqcqCWK94+MEHjIxB2S1iDJydnaCVXRsUN3WNKUqkFJzP5riQsOWIRhdIM2K8s0+bBDevS05OZogbirPTGafynPsff8wPfvA3HB5dsn/9LsXWDpfPHnN5uSCJq8z2DAhnYPG/SlP393VLV+ubdf2awEq4caA5mO7R1WP82NBqxTIatgWMoifuFFSv3eX404ZP3v+E6CV/+ef/A+ezA37y0ROaZsxnnz3IgH8ISGtZ1TUp1tzZGlMWlq1ql3Rjm4UGPTXcfukmq88t+xNN6wwffrGkHAt++P6HjKpb/MWf/xHm1SmtaHm2fIUPPpQsZx07N25w752Xefl7b3H9fZg/e4/LkyM+fPiIYrSPPD/j/HLB3ZsvwfYBLkUWy1OsdBQl6LrhwGqmOJJ0WG0RomC6sw+xAXXBqjsnRLh27WWUFMxOjmnmX3AwNRTXJsSwpJ5dUsTbmOkut77xCoQlxXjJZGeL7bu7EM+RMhK6p0hGSDuiubggXCZG27tIcYGIZxTFdYpCZe+9FKBJiLSDGd3AjnfwFLSupVA99VwwTIgMM60k6+5CjGgMV92FkCfIBAN9TcBvXej+g27P1U0JRNi8of+nWK/9fvftii36/JsOCXyQXIMUnjuv3uRP/Ls8+eJTjM3ra2Uso9GUEUX20hQKU5R9g8YjpGB3Z5ed/VcZTaacX9ZcXjaZuWFLTA+yam1w3tN5d7VrMXtbKBNIITG/WHJ8eMpnD77gl7/6gPOLGRDYnk741rfe5c03v8HNW9cpqwnlaAcldS6yfC9D1r3seG1S2jukSM3IbNOcTKgfXRCi57OnM37x8Bn3Zw2njWDlFAqDEIZV6DgPS2o6lk4wbzVzX9GmlNm+SeKBC+epUwvB5XOvT/6QQtGlvF4qYsdodc6t9pSXVMQ7gbITKCSxPiOpESkZgpRMtva5eSuxvXMdqzNzTKSItppyVBJEAiWR1hClwBYlWiZS9HmNLPp1Y/+TwmCI2acoxpyuGJxAhgqbBJ/+6hN+9O9+yPGTI05PnrJYHdLFhhh1XsdKi3MaHwTCDuvvodjMRWVuKGYzbofHN5csZyfUaJrGI2Nf8KoMMApr8nfVW57IFDJA6QeWFf3Y7ZuKDP4Hz6/S85p7Q+rNVWznej0uNwGNr2JVPA+OfFXh/6JPxCYDY12PiKugAuBKOj78ILK34EYj8yvlFbwANsQEoudz9A3a4dOmDVBhc4t9A/VFScfXARTrumVDXvJ10pmv+nvzmAxAx8Cc2bxv/b5cMfAHWb1SCmkMCLUGrNbMjyj6fmS8Ajeemyu/fAw3t98PACOBD5Bijvyx1jIqNFuTCQe7YwoVcmmtBFIrohC0bU2MnuCh7TzeZUqhkgrRG1CSHKUSOfJOKxAFrijxLiCEQmlD23mWq5qL2Rx8l1NDogKXKVCu7eMKjUVoC9qilaY04F3E4bLJpeijLWPAS4FUJUIZtOjNJFUuWIf0jtjHwSJy0oDA9DIMT+hN7pQaDG7C+ktVkgzqpNQX9hCrioYWUsTT05Bkfl0fY0bAlKbzkabz6J51oWXupAeR4+ikFCipkegsg4kJGQUqZVDAtS3Rd8SQsslnSiD66Efyfg/jYJPWlQZZxsbAy0kr+TPplI/R5snatQHXOfAB1V+bRT+RrE19RJ8q0k/kSkpEHKJ2s5QncQWK5MSN/L/+Vw+KpR5rHgZWPwh7VkZMz08mefIclgwZZOoVnfkYCoGSmXGj+gI1CokxNrMCxDD50H+/mWkhUuyLd0NhLcqU2J6G5bssK+jalrZu6NqW+WLBqmlZrFbZMdwaiqrEFBUSjfbZt0CpEUFn5krwjq5raTpHUlkupE2W92Qa16BPzDKS+XyOlIr9gwPqtmW1WmWgUQ4xXh2LRSS0LSF4glDMZjMaY0Ap2hjoOsdscbmWWvgUEcpm417nKEdjpC2wtqFuskTkagHjQUqMlLTJ9+BYL29I2QRTSdEDDQpTWLSRpMaTCOtOklsFHh4ecX2UuLZTsXVtBCJy6RNLH/L84yKxdYTOrQGq4eI4nNcpQiB7SkQyWBJTZgFokSPbhrQKYzSmKFHeEUU22Qopg4X5Nda0jTxeeuBI9gt6a2ymi4rs7K+17mVJicoaRlIyMpZRYbFKM69rurZBl1MyBTBSNy2NUMRRgS0KQpdoO48tC+6+dIdPV4mLWZOjS2W+cHoXCM4TpaecbmF1yenFJUvfMdnbBRf5/PCQEDMjZzwpGY0MZaEp97cYTyrM0THPTk7okuWsrfnJhx/x4LHh1ZvXuHf7OrtlRVN7rKnYnu5yeHrJVCmm2xMuUqBuG1ZnHacxkpxDSIVWJq/TesCn67o+4tbjosOnPnFGZnmgkIqUPMElfBeRKKwpGI8nKKMzKCIltrAILUhKoqwmEPHBcXBwhzdfusdnDz/mZ//pR7z+7T/m4OCAEAJ13dA2DcYWa0BPKc2q6fBRYIsRKMsvP/yMb79xF223qUrNS7fucXh0xM2dfS53ah48PeZHP/ohH332iD/41ve498prPDl+xseffswbb76OLIqrBc3vS4H2D7UN9erVn1/1kDxGxQCQg0gJgacoE9IYtkYlnRU0JHaSwAQwSaCNhG7O5dND7MlDvnjyKTpY/vJf/CsenP+v/OqnP+Po4QO6mJizwqgjKhMZS2hd5PDzR3zv7W/z3e9+kztPLXu3EmMz5mhXMzt+zLL+gl98dB8XI89OnvJn33mNHdUyc5cIk/jOP/pTornGz977Nc5f49HHNS+92XHrpQmlKVCTKe/+xf/Eo4XgqV8x3ooU0x0YHaCSwfqA0QW0Y6bTgre+uUM7f5/xzYpiL4KYAzrPZcD1m7fZu/4SVk6J5zPOH54wW8xROjBdneKaOc9OOm6/dY/JpGTVNUTn2H/lLXSxTdSO+elTpFsynmjAQCuxFtJoBNqiti2qsxDPoJmhtYNGwzwi/AhhE8RzUmeRbJFSkRmairzARZA9HHLhk5kY/TrJBVbzS5IOlFWJLkZ5TISUsY/+nFhzHMXz5f0/2CY2T9rAGmh4bic22RK/y95tMFFE/1prHbnIYBCRbrlAKo8dG176xnV2poFqsgWPTlGqYGf7gCK1eZ04BoQhoblx4zZb3/keb33jFq+89grLVcvf/vSX/ObyE6S0lMWIJCJt69A6Uo1GVGXJ0K6TWlMvlzz+/DM++eRjPv/8Ac+OjyhHY9799rcoqre4fv0Gt27doSpHvRxUobXBr4vXrJUXcmD0QpIZ/Jf06zBTYrevswy7HH7xBSezGZ+eLPjkAp4Ew9M209etSJQ6ElTiIgRO64bWgQuaOuXY7my8r+hUIlqDNCUqGkRlEEpgfERGQZCGgEI4j207xOk5YrVkx2whtOesWSH3xlSTCZ21RNEhTeTg1hSjtpEEQuxQJJTOTbGkBC55mtBmiEY6iBqN6dfKEqRer0v90LEmr2YH2VUInpQcMkUuzxd88sFnHD06JkZPMalA5DS1ICIyeYQAbSxKKIJQJJHjWwUQk0eImGWvKSJDR2iWuOWMpAqkSwih1lLpJCHpfB6mYEjGILxBBpvrUwQpeVLKTcksac2eZvSFdl6Xr3l0iGENtmGAe7Um2wQf8pF4HpR4/jGbEgut9bq4fxHUWLPr+59N1kBiYHZsgAdczTnP7+OXmRCb77XJzv67AIavu+9FAGaTNbEJbmymkGxum5KNFx8zyFiG2+PGmnhY4w6vsfYz6QEMeon/AACJvFMbLPbMakbKHrfuRdWJHiHqm3vDbV+z/V4AGFIqymLUgwG9yaWkp6l3WAlKZmNBVWiktRndjxHvEkWXqVUi5vhB1zRIEVEqoYDkHG0XCEITsEQ0lR0xGo+ZSsV213Lj4ADIXgSSyGIx5/JyRtN0RCFpnWNxuWTlIh6BC9B6DzFRKIUwPSWcbNgYQsiFdqQvrvJ9UmezUeEDKWVfBoHqgYxegrFxwseUCMH1SGWevLSCFAVRCZLWpEKvL15eiT41Qq+LaFtUFEWB85HLVc3WaJyL9BDzxKgGI82OEBzGWJSxKG0ZoQgpSxJECEQBXni62uGcJwpBlJIQc8EkhMgXo5TBBS0gdj0yv4m89ZPB+m+uPnumJPmsbU+9MajoI22HAdADupHYU7Gy6VJIPYUc8mcjJ9LIAYNIecIfpv7+hvUa4godzGDYgBSTsgeG6Hn+spcKScRzEwXQu0K/QDGDPjpVkmLApYCKCScdTQPOdfm5xlDGSDkaYYqCUueUj9A52ralXq2wxhBcxXKZvV4651m12XBJGYMxBcZUrKhxC1BboHYUXR+B6kOgbh2uDBQDWKKg69HUTTpdXdfEGGl7w1StNU2bTahiTHQp4F2H71oKk/PMvXcYa1g1DV3sdXRIXIS6zWyS46MTlFKURcV0so0XOaq1cw7fdYSQddZGymxAZTTOg+/aHqDKcqmAQ0D/GUQ+740EGWl8h1WScVURppro4ahpedJ1VF3LeV2zWjkuvcCUBdZFWh/y2Iw5rSVG30uQNgC4BFLoPgZMo2WkKErSPKyNX4WUGFNQViXWK4RWhBSyEWUKdNHjYsjMDp/9NgT0kWL5Yp+lMHlMWWOzVCcBMbEznjC1sL9VcG1rB1kqViESzi8JdUsSNjOzfcyRsyuQcoTRFpk00Tfs7O1y564kcoxSpgfqMvDoupZYZE8gLyROCWrnmK0WiGrEwe3rPH16SJKJJDy2UIxKjXeJslBofY1qXNCEhJeSZ8fP+OLpjNOLU2bLBa/dvcf2dI/RZI+qatAYxqVhPB6xW1ZcXM6p246UErPTM0KCEBPXD65jtcEa0zdtU+9bczX3ZMpivpAWpqQsK1bLFcL3UblI6rZjsaxJ5NSS1DteJy3QhQYRqaqCN+69TIXj2WLB4dNnFFvb3L59G2stT588xTaWwpp1itJ4MmGx6ljWc5Z1x8XC4tKIg9t3OH38kHt3K06enXLz2nXaLjJfNhwfP+Pzk1PmMeKtZN6suLy8vKre+/EoNxhd/1/YhrUMXDErvvpRecuzfUKISHCOaBRJRLTQGdwPLZUrERo6FfBdA7NTTBH5w2/dwdtD3v/FD1l0R2xvX+PxZ/cpEbz2xk2evf+fqf2MV++9yT4jjuqaVbPkziv73PvOPUb7c7Zf2UNuHXB0/wd0s5qHD59y/cZd/vCdt3h6sktlp7z3yU95/8c/gMLy/Z17KEpubu8z9hM+e+8DtkeCw9Nf8v7P/iOkEf/qf/7XpJdu8OjhB7Srz0m2BF0gnKUSAmVHIEeIcoqPl8xXnuloRFg9QhYJ0hbC7gMWVS4xEvARWRYcvP2P2L+9wy9//tfUtuDVd/+c5tEpfjRF7kwpipt0ixbYQahdpKmptvcJsiWZmpQWQC4ww8UZLI+ROyUETzxfkGyDmiq++NV95GXFVC7Zig2iEqjRLUS1TWwWyGIYr8P3nSA5Ysox2UJqku+oZ5ecnZ4jDOzs7zExJUjdJ1Os1735rBAbQAYb59D/41vaOFn7QmsAzzuV8gAAIABJREFUGtZsoSuZx6aPx+8OZIgv3SSEpF6sOD05Ynsi0VIi0orxVCFHE7RZQjJ4r8DDaLLFtRtT9vdvsrO7x93br7L93bcZWUGKHiNXTKoxVTEiCkVwARc7TCEpyiKvEbqOkAJt3fLhz3/N/Y8+5snnDzi/OOPuvZf453/5F9y4fZO9a/uMplsZZCYXzJtok87VM3jfAxhDZD1rW+1hDaeUgq0ddv7sz2hXiQ9//GO+aC3nYou5VsxNQRcaSlxeT2iN9AWidQTf4gkEAloICnL6VzICrERXJYYApULKiCVSiAyq+KRAVZRji/UeF09oO4VzATPa4tYrr+AnY549vsA7jyk1Ria6dsVyPsO1K1SfclU3S3wKNL5l0azY3tvl+o3bVHobmXSPh2VQJ/8n+qS4zASWXDX3tO6btcmjpWZSTVlVjrZrqZsLnBRZ5qETKcncwAsBs04OpG/8gcxUgxwuAMgQoWlJTY0uc80ihuaeFAQFiD69UclsNG8KdMj7LDqIpCxdJV/eBn+JAZDKoyA9h1xfFcHiK4vwTQbGZhE/FOBfd83cZEi86EHxpfs29i+l5xkOpOc4A78VgNjclNbrRtmwP8P6+2v3mef3ZfM9N/f/t22boMrA6v0qAGMzNv7FYzJItjfvh4w95WZcbjSKoeFEjrvPxyszhpLcbGaTWRi5jTe0m/t9+vrP8nsBYAwFo+x159IbILv1pmggZSNHFx0qBVTIhjBSqszUGFmsLREo2qZlNjvHaIm2Eikj3tXUTUPjAm1ShAjL5Yz55SrT140i+RYtwSjLqDSM9YTdKhddTpYs28D55ZKz+ZLLus1JHU1LSglTlkirUf2Kazh/1tSdHsEYFtUxf1tcxTLSG1lmQ0fRf9Ex9vrtGIlJkI1wZO+v0BtJCoFWIrMyrEKrAilVnshUzwLQhiRULsCQ+BAplSR4T4rZkAiR450617Lq2kyHTwolcxZ4GKIltSQlmaU1JhcDrQ+9Birve/5c2Tk5SbLRZw+/rNshL4AGpNxljDFkb4zY69ilWhtyZs1UQiqVE03WA7EfXFL0k0s2OSRl+mIaJs0EiI3Jpn9u2uiYDAUqIi88rhgZffb4AGA8B3hsfI7+Y13NIWmtC01xiN31ED1RgCA+XygLgdaXFKOSshxRlIayLLDGYIxBjsfZLyYmptNA5xyrpqHt2uwELnIDqGsalnGFX65oTjrE9gpRaMyqYyks5+cXpHEiuJBTMySkGLJreYIhOhUh1/G2W1tb2bgQQVFY2ralbVYorSgnY1IIBNdlBoW12LLElgW2LBmFhFkusG2HkZKiN1nc3t3jD7/5LYrJiGeHh5yennD47Bmnx0fZS6KPZ0sxboBOV0AXJGLyWV4SM/JbjatskkqWq4wrQ1Xu0c2WfHL0Bc60PF5NuX0DXBNp6n2KyYRpCBAFJiZkDIh1OkjPshG9PEiALSxaROg9L5QQeOdJKTO2tNYorRFa5wVALxMKMeJixAWPC4512bWRRDKcRKEfDzFkRlHuwucEICMUIy2ZFJZJmTXujU9MyxWtMvgAVhqkqRApsVisODtXqGKbiVI4H+mI+bsZTxDOEYNHKbtmiEkBrXPUcQVWI0cFTz4+Yt55tg+uY0YjgutYrhaktIeQEZKntAY50thij1SNqUNk1Sw572pOFitWH37E4eE5r7/2B+zsXKf2AikMu5MJ2+OKvcmYnVFJUprLpuXJ8QnL1YqzoxP2dq8htEGS4wt8CIQUSDKz3LL5k6ftagqX5TpSSLSyGCTGVFknjCCmyOnpETK1bB9MKKqCRKIoLErleWxra8qbr32DVwrLs07yweef8+TJE+YXF5yen3P3rmRre5fgPSEmSm1ROgNYTRd47Y1vYYotXKvZ3btNszjn9dfehPufsGoaXn35DqsHD5ktap6dPOGXH/6C0vU+TUIMq6Xf/eL6//LtS8Xni4uZgc2WrmqgJoETliIa/GUA0eHLGUYuiVGz9FP+5tcf8Ksf/jvcyRGmvM21suTWvQnf0zf5D3/972mL11nM53z/3Vv8yZ/eRU8eE+Q+f/TOH+NOl/zig88ResUvfvbvuTj/OUvh+ObWPyPNT3lSnhFuaJpnBWJ0xo17ka0778D2DZzQfDJ7gmgjzw7PcYsaPV/w4Cd/zcGNKf/2wf/OvG6JTlLpBX/zb/830t6ruPGUJ4eH6Lji7f1bCLFFCBXSRFp/wfLkHO8SoS1pPj2n2hPEiUBuaVLYJ2Dxao4tsiTDSUNld1A3Sr75xzcRegthKravzzE7e0QFlJLJeIvkysxkTA47rvN44yk+1Jlm3ji6tmZ1eEnxNGHsLkrfwN54hXB5jmpOCAvPYnlCVRrs/oT58UPO20NuvfwOVhW9GSl99zUSU0fXNUiRKOyIlHI62e7eLphMsV+fD9mcaLic/5ZzaSO5JD1/z9X59OKzfldQYWiObDIlBu5AJFNONt/7d3if/txPmy+ThlcTPHn8lI9+/XPu3pyyNY6kcIkShoPrE3yAshyxdfM2d69tc3DjOvfeHHH3zX30eIQSkqLIgt+QstSQJIi+B41TlnQrqbOxvesycAw8efyEn/70p/hmyX//T/6Eb7z+OsWooqjGCGNBDD5WkKUBEEI2cxwKQykEaL0+dCkmooS02akejluhEH9wwL79I65PEoRLjj+e8axuqEtFGwKIQGscNgimvkIFzXGacaY6RPLICLovpL0a1rcSEWNmX2hFhaCSAhEFHkVjR/hrB4jtXdqd61ycrRhXW1y/dQ2xbanrS0BSaUNwnsePn/Lpxx/y5NHndM0SETt86GjaFV1ocdHTBs+bb7/F9/94hNkdg/BrqTXyigmak22Ggr5PMiPLJ1MqcmRlcjSNo24bEh5dKKQpaJPEhQ4lNFYXOdAgrbJUP9HL2zUCSZZkRkTq2QhekLqstDVK9J5ZeWQJBUkIggC0RkSDDAEZc6qiULnGyQKxtPakk72kOqXQNwz7NfTwjx4wGNg9LzIZvmpL67XUV6edfNnrYWiEfPl11sNteGzuRj8HBMivuEanjedt/h627Hnxor/Gb9/EGsLYBFSumCRfBUC8+NhN2ccAYLz4GQfpx3Nyj/RlScomIyOllFlSCRKZefYl0GmzXhM9aDMwbxiYRKzv+7uOye8FgJFSJPq67zbm6JQ8PQoCIhd9IdG6hi6tQGqshKqwjIoSYQpSygMjdY5SSWxZUowqpNF0wSHqGtm2FG02o0zOE5sVsVnidO7adiLhuprLfsLSEpJSFJMxYiQw0wnjvY5V7bhc1JycnLG4XFDagspWpM7hU8SHhCglwkjQOW4q+x4oSDKbW8acWpFPxtxpDURcn0QQyaySFHMCB4O7q+hjYNfMxIRUCakiuU7OHUitNFpLdO/HQMpsAS0EMTiS0jnJox/kiJSdYo1BpJx9HULOmvYyF17Ze8LjfOwnJNOjsJk9IkQWvm3gofiYfwSgpUCi+mItg1K5SEt9cZc9O3yIWYefHQ8RUiN1nvQ8CS1TppT3fhcxekigZUEyWf9Ob9ynRJbfSCXwIfZLmCvGB2SsQ9BPBLE3+1xPKmyAUqlX7WTZwlqf2fu1SCWvFhCCtekowzEOERkhpVx0RZFISWXmQ8iAjVYKQkD4mm6+wBFRI8t0OqUsKhTZfbowBbbU6BSxI49zTW9Y2qe7OIdw4GtD2wrc2RxpA9Z7jrsV9adgpmNWF4HYJYgdQnii6IGzJNHDRJUSo9GIqir7STHLaoQIiGiw2jCqCqLvaJsMhAQC6Cz5UtagyJKmogyU1nLt2g6np2fYYszrb7zJy6++yvnFKYfPHvG3P/kRvjnPGJTLJrHKWIIgsxVS5iNFIQCFS4m6bZASfFTZ5LfIgKLroEmSydhSjDvms8iq6wii4KKGk+NzXDNDmhw1S2yZHT3g4onGr5o8rwiPVAGrJDZBIfs4XKWIvqUygpHIJrweQSP7EyDk+N4YQIaETiCjIBO3MmspxuwTo+k7TwKSFnQiMFKZdaS9R/cSI1EqRBAYqREy5XM/NMguYlPi+v41VnYbd76CMM/0ah0IMnG+cojY0dqWLmlEErjU0caWUiR0UigvSDJkt/Ug8J1HVTmeVipJtbPD0cklv/n5R9y+eYtrkwodE7Jz1PMFTRcp7AihEim0bFWG3cKyPNvCXZzQXtagLZ/X58yaT7j9UiAJw6VzaCMzGyJ6yolm//YtFiHRpJZl53Bd4ux4jpOCVQgUI5MdrIMgm7tmEymfYj/HxjxPhkQKAhdSpuEmi6XECM9ydcr52Rn7YY8bVUWVKqqkIBjQJaHoUDIz2Lhoc2SsEEhj2N/fZzKpUCIikqMyoEXCGIMpx0hbYSvLxfKSX98/5tvvvEUtZuy/dI8nF6ds1Re8zDZHTyPzS4/pHPPHTxFlSdc0uLZZxwdmU5S0UYR91fbfGNCRBnjv6u8vP2bgXcTc1EgRJRxCF3SryM9+8jmr+WOq6+ecLj9jcdqxsHv86KMHPPngb+FiifanvH59ytbbUzpt0Pt7hOB4++WX+Kt/+efsbedGRaj3uL1/k3r7hGtuht+N/Ka54Mc/fcbsYsX7j2Brb5tZ85ib+7dxRvPw8oz//PHHzJdbTG823L55jZcmFZOxoS4M5vo2aqvis48f8Na3/wj/5AQ/H6HULtOR48mz3zB/dEJX3eBXn3wEhyXX5Yi9m9sUox26+VPuP/iUT+4/4903votMhqefPeaVFs4WTxnfWyCmZ4z272UTvjRCGo0oNFFqtN1F72yBz6DeaHtE1BBijW8bbDEi+YAwOZrRxzFNWzAudwmN5fJ8QVntUGxbLs4fcrlYEWdw6+4BRpa41Qn7d+7SlJ5U7yCv3YTdCr1cIWKH0ILQLhAqghI5Vlj3HmSiI8exRoQy2K0pVubxkBD9Yjk3LoZCJ8Ean1jX9EOXWg4AwuaCuv/fUC0Ni+31UJL8fcZVGhbjA2Nz8PHoWrSx2VBADD1t2MgZ/fsP35Td/iMQABESsUsYLUha8PhoxqcPjlhdXFKIDhcW6OmU7+waqmt7fPdP3uH2tT3efPk2Ozvb2LIlihYnFDIlpMhgktB5d5dNTetbjClIISJVyiC+7xC+IwVHDI6Da9f45//ir6isYXdvG21N/nBC5SIxyX6t2H9sQW6WrCGJ4dgM4I9A6qGJtXG4huImJ5xj37jLG1Jz//yc35weoU+WlL4ixQYtM9s5CYUUCSsEpZ5gZIuKudnlSQitKWzBtByjlSZISVCGKAwqJpRzyBhIqWPRnPHkPHtedZ3jMjbMg+Li1OMP68z+DgoRAyZq6ouaLz7+ggf3PyX6mpRaQmxABZL0oEWWMoYVRnmkcEBOfEkig+JS5AZslthkT7Xoc0JgjBFCIPiWJAWoAqHG6GKJi3NCT+tXEkQyOR485RQvqdS6kSdEROCRKXthxDT4VWSwKcVAiA6UJPadvNSPyUFWK1QveZGaJD1SKpLUiKSRMtc0awFV3zCUiHU98hwYKUD053oGS64K7s2EjC95UPRmobJvHsseeIDsXbYJAGafRPHcePxSAf0iAAFXEvEN1oTo30cMnyd9GbwAcPGqMTd4juW5rV9fwxoA2ARaxHqcsC74B0uC2AMsKaZ1wxcSIQ4mmxuoUL8NbPEM9gyfQV4xH4bXH/xB6C+7/U4MwEXsm79imEtF6lMS1Zoln7/v/BkUmVE1PDz2wEXez/47GQxfv2b7vQAwBAkpHYlICILONUiR0VZbjRmPDaVVdD5HYnbOo/FUVmOVIrmGumuQZHaD6zyBhEMiC0FAUUcLOCaqY1QYrKpwTcdqtaLz2b2/SYFF0xBiZDQa52QIFXD+jDb0yGESaGUYVyV1VeDblsIYyrLCixyzhEiIQiL0wLpQkBQhSPBgbEmSAZ0CKTli8mT4QhLJExSk3uhHQUyIFMgxoJGAIASIQZBEABlAdjkaSw5MFoUiRzgpVO9UnJMOpFC42FEYiSoMSl0ZPNJTsAeKGSnLclIXCQS6GOl8IIRE8qkvxBKr1uEGmUESuSPaj8lhyAmp0Mb0BCFBjJ7WdTSuoe06nO/6+FtBdNlQSEoFSqGMBREzk0LE3q8jU/uCj0QfkDIbFiYyO0XGgBRhDazE0A8MKfNFQIheMx3XKx65NqFR2Q2YQZuX0VIhcvRlKQTleIQ1uifYpN5nhRxvm/LqW1kJUhFDQjuRmRdSYEYjpDW0wdN0HaumxSrD9vYuu9MxlZa07SVn9SWrGDibzfD+lOQFWhtKW7G7s8NoNKYsR5RliXcNrusQyaFLQdcWNMqwXUo8HUnMQEXqdkb7MGCKLVrn6FJACkc5Mpkx03T46GHoqojsd9F1Of4sxkxJTNGjBITW4RAUpUJWJV3X0LiG+WpG7WpMU6N6Ro/3ia5pqLYLooInh8/42/feZ365YmtSoFJAS8f2VDEqK7omcCklPubzTJDNWYd+WhSJ5HK8pOkjk6uyIgZHt+oI0dA4wdPLpxSxyXOGkJmaGSd0zrFoHKmbUY2njEXi4cfvszz8mKapca6hczVNFxkXE6wUaLJMRtoCQmJSFDRdQosOJ2ElYjar8YEowUeP8AojsvFs9AmpC5SOCNrMfAmB6BzOdXiyMWgXurz4CQmLACJeQXKhx8QiIXmCq4mpw0aNERapLFoFjLSkVNO4FZ1vOAhjOm25TJ6mizRdPn5Belzn0XGC7ARCJYqqwIZAdJFiovMCB3jj7W8yrSUfPv4/OJ879ssxxkMRBMoLnBPMlg5lE+PJhJ1JgQJuTUrC7g5HQbCsAwsf8Lpj8egpxWhEoyAqkcdtcGxNCr759ivMkZy3NWa0zeGTGYdPTxBVCVtVluIJ20vLutwtkwKFwGrTXyhzSo1QEu9ilhE6SawTIrRoE5ivFvjjyHhvj1JZig5iI4jC0haC0ngSsGobQkhU44otpTFGsjUZs7yc45olQlhkCihpQJjsCWBgOp1QhMBlyu9xMTtn585tQlriF4e8sj/i8GRFc3RG2UB56wZWZxlavrCHdWqMFnneeu6Snq6upP8tYRhi8/cL4MVzTR0GH6Lsi6PpQBgap3AYPrj/BV/89X/k2dFviHJKqyccr2pi26IXkrdvvMx3X77J/rTmzHn+u7/6H3nz1Wusjr/g1Tt7XMxn+PYG4WwLv1dx55173PnON1gmw09++REPPzni8Q/e49P7h2w9PsTqhqkfc3h4xNnlIx7POmS8xZ3zSP3FY97VmnvXblH9yT/F32n5+ac1P1v9mu4lzXff+MdU9g7vv3+f2zcFr7z6Ku/97JR/87/8Bw5PLnhJX+P+3qfMft0wmRQ08YKTuoau4tPf/JJRcc5epTh7dMTo9j2UgW75IWnfYe27EHdIsqOssnl36FokJgMIMpGE6z25IkZLoOv7pROSBuENpb2GQKHliCqUxGYbdf0GB2+8AmjqS09Z7dA2nxMRVNduoHd3keoVUhR01Ixu3eXeXU1qfP6GY8f85IjZ/Jz9WzcZ7+5grSFhSULl31lMiEJnsKIHKkS/vggxIHujPe8jTduhtMIavS7OclvsxUEyIB8DkPHCfX/PQRXJhZAk9RT7iF+tUBOFUDaDrYgvFUS/05bAi4QHFhcLYp3Ymo6QE83JsuNkFrg8PsWElp2bu7zy8ht0kwNuHEy5/trLjIuCsenB3z6Lq0yJFJuebZqLnh+/92M++vw+joBRieg9Vso1azi6bPqulGR3d4ed3X1SeqEzLQRyjVt81WcXV79yVQlKrW8TbFohDM0lelAo31HsTdm9cws7rihnJWUyKDFG4ghJ47WBMrNMlRxjMRhfE6XLqV1WU5UVY2URGDptSMaSRIEKuSOSQkDS4dozLtpLvE9IbTGlJaqWRdciSRhyzGnwHcYptEuILqB8RKYsCVE90zckR9d1fYNvRYpLEC3alCiVE7iiCLmekNA1DqTITEEEUihSDPm6oR2IbEbqKEimxHdn+bAFIAVkUsiokH1UcYi6N3JNqL6p2sMRhJTNTUNKqBTRwgOeQAZBhewl8NnUAnqZDQOwKARJKpASkRQyatayqgiIiNi4dKV+/CSG2qFnmIgrsCIPnys2ziZ7Z81I+PJQgR78GJ46AAXD+ZSZHpJNNsOaZbHBOrh60f5V+6IckQvyYV+EENmeJg2+e+mq0O/HBP2+Zqvf/jXElZn7c58pXqXc5XSQzNQNPqwlMymJNdMiH6tIHI6mEOvnDsfyRR+MK9lG72fywrEQ64HHc6+hhITYy4NkgkFK32PA+fPnhrOMOgO50ROlIvXryyvCaR4fA7DyddvvBYABrL+wjCYlXIw0TUfnHAmLsRZlDVFpZOewWlEW2Ruhq1e4ts0yDCSrrqara+L8AmEsSSmcD8jYsWUEqqx6lkOmZCuTXVJNDKiYNWFCaYTOxb3vloSmJiQQwqDLESql3iU79DnXAkwuVoUAba+696FHw0LIp5GRZZ+iIIghEnw2kAsoXFK9VEEiUlhr/sJwEvUX2ivjstSzT9L6mqiUyukW4oVBLTMNs7AakkOYHlCQiehCpvLErDVXUvUgA0gURWUQ3hG7NhdRREJgHSkZQjb/iwRkX2CGFNaR7SmmvishshzCaqwqUVoRCfjoCFH23RSF7xknIUaapqHzrk/MAJ0yMqKkxCqF0ZIg+mSXfgBIqZDSQudytKxUXJGvhkHXzx89TJp1hJm1ImUfC0Weh32MWQtqJCNj2BkVHOzusLuzi1GSEH2+0MTA8fEJZ+fnNF2LlAWmKEkyURhNaUuKScFkb4osDLPFkpOzc9yq7uVQBTuTknFpkMkyaipOmpqzi0vapiMGgWsci7Dg7PiMsirYmkwYVSWFtVirscYyspZQFowmY0IydGFJ5wTRL+h0S1cLmtWKRdshikRRmT5JwUEU+F5jKZOAFFhdXtI1/xd5b9Zk2XWe6T1r2sMZcs6qrLlQAAhiIAgSFElRIdui1BbbHW6Hu+Ubh2/8A/wX7Ev/AF/5zhGOdkfb0RHtjra6W5ZFiZQ4EyRBgMRQhUJVZVXlPJxx770mX6y9T2YCYIu0aLXUWhFAZZ3M2nnOHtZa3/u9w7xFSFPCjncNeIGMkqqq8EEgRDLQ9cFxOmpI/RRDmgx1WuRk5HR2hDY541HF9777Xd595+esrw4pC8HJ6V6Lmgt6vR6Z7jOdOUTd0ITkkdN5nXQGdRFav5gktwje462nrhzeSXw9TRrgnk7Gpo3DzxuyqDAyebusDEryvEAR2H/ylHkzT3IqJQgho66bdoKO5DGmaN/oUFkyjE1b1XYjTdLThhhT56bt7iV9YOoGmMygtCPMA846pExmnb51tO4mcKlaj5fYotQxxTtLIVOCjEiLp5EKTXKApqUARqWpa081H+HsOrauiRFmU0ulFFJFjO4iXQVCaaTSKG1QUuO8pbZpfml8oLGeECR5kdKMRBTp+Y6RXr+PWR0gMsN4dEA1r2mqhvWVJbRWLA0HSJVzeDynPplRW4sdT6m8o5pNmMdNYjlguLRKpgUbW7fI8Lz4SuT1L67ykzfe5pt/9h2W14ZMNThXLzrviaQXkLFb1CPeR2TX8ZMqrZeE5Pdj/SK6LARoqprZeILqryTT4pBYHJh2gxHBNpYsSwDZrJoxGo/wtqaaTXHWo7I+Xk5pVK9lkzWE0JCXQ9Y219l+8oRnrl/C6xwzWGH18hXu/vQNvA/gA66uaNQEWy3hnU/MOUEyU27Tq371cupv8+ieqMVur32966LHBcCj2nsAAbaJZJkkLwW3nruEkJ9HhDk//d5jYB2zZNCiompyZGbItwI3PrPFSiZp5Dq3n3+eV37zCu7gPrs/fpMPtp9w90lFnAUu5VdZWVuh3LBs7x2w8/CAONc8c/k6YnTI1eEyD+/OaWi4mg9R84zfuPMCW+uv8fnPf4kP3v4+733n6wi1wqvlBjqDa+Y6W3qVn3/vLV7+vf+CldUrXN+aU6pTxqcjXv3ql3nxZ4+ZfPttRLHBw4MZVmxz+/kbqNUlXrhxk4qCr3/7B2RZzaf+899myXrMM3fAKJQ4IZoBxAHYHGFHkM3BeKR2IPoEuZYYaAIqwEnDUnYlMQzzhBZ455hPHzHoeUQdwU7Qsx1G81P6azfJyi1oKszlEnsyZ/9JjVY9iisvoOQKIq6mjqOKCF1CZRHKIjIDwdE0I5qmwNc5+AGoDNAQMiIKHxUxJvls15kL3uNiXBgcxxCYzeZMqzlSavr9frsh7jIVWu7DojPKout61nw9n37wcbjjlxrnjgvgrE1Muuz8D/wVRreRCamjPq3n3P/wQzJVEMw1Bn3F1NeMg+PStas8f/Mal65fYv3aFfprm0gpqZuGqpoymzoyLSkzQyYlWgomoxPGoxH7e7t8+OABX//z76GKIVe3rhGlQOmU0GdtRZF3+6mLCUkCcVYp/qrjF5yej73cvmAbhxYKnRuWV5aRStE0TSslNfjomUVPiA6tBbFMCSrKg8a1+3KByXOyLCfXBiFzVJZBbpCq9aLwIKNBRo1EIaNMBpchMSiFiFjr2sQoBz4iQo1WGUI0ECsEddp/x8R4jb4D3hUianQ0aLLEroi2BesSG6KxDVVtyXQB0rVMg4BqGRBSBWJ0hCBbw+tUkGutUhBIuw+5iNXF1i/uo+c2/VxXP4R4xhoXMXX8vUgpcYsyU8pUsUhJVAq0IrjUQIiiM+5fiEHaojWxCn0XSpCgv0Vxn/DFljstLkpCzntWXJAyxIg4V6RfvGE+wpbooI0Q0r7zF9x7H5OtnPu7kvKTvxfbz9lKRToYtQsM+EWjq/W8963fXDcnpT+11gvQJoQzGUcCJs4AjFQnhhbskotI1PNJK+eBi/PyEimyxbn6JF+QT3zfUiw++yfNnCK2AA8s0iPPqrKPj78dEhJiW+STLhoJ4Z3OZhwfnxLrOacnEpREqKRrrqPGas0gLxB9g1RzcBZBZK1zUdm0AAAgAElEQVS3QW1T5KSLqZDu2AyewKiaManmxDpJFgICETLq4LGtWZrKDHlZ0s8MvQqGWhOEJAhDkIrxbI4IyaU3Cr+IKI+Lojgio2gtd1KPQLapIj40KWWB2HpfpAIkyjaFQJCYFEjQOhVgSuFaEIQQCcIjI8go8bFjDaQbtcvgXeiDz6OLAoQUyehRK6RQC/+FVCyps5u4O64EkKnLHWl/nwchktxHJgqgCyGZO9lUwKZCLPVMupjZ4By1UtjMUBQFWmuGvT5lWWJtYnGkidJQW8t0NmNeV/jKJ1mP0RiVzqdRKZLRyGQClioXfw4xVWjNmQKnvdsSmp/8QYSIELoNsWgNOCVatdq8GCA4tIKy32NpOGCpX7K1MsAoyaCXMxwMKIoMSMX71c0VdnZ2OTo9JQJSG2KAPCpWen2W1pdRhWZqa4KX+EFJPZ6Sa1DRgqsxUrLU65H3MsKJwE6r1BnTmhgEdUxd82rsqMZTALRR5JmhLBRb6yto00eaFJmptKY0A5TIoe+p5jCbOfx4RjQBoQO28ckXpQPKBG2B1xoENRJaWpdSrRQotAtMKzFKXZuwQNWJAk9Hk/MgEkNpPpuT5ZGiyPBNZHI6YnxykAAUYdEiMJ/VaFmQmV6K/TISpSVKC0SUC8CCGGmahnrumBDxTUOeGQSCXAq00UQnkU3kytKQW5c3WRn2mTYNp4c7HByPaVzgeH+XXr/P9StXuHHjBlHCeDph7/CA0emY6emElTwnGw6IpiBmBVUDdm45nXsa52lqy2g0Zjad4psEeGgj6ZC8QEx+Nt7jncUFnyRnQrCxfonr8ykffvAB1ek4ubG3YJwQKs0vqToH5VvWVLpfjUwx0ErI5GoePdY2GAGDwRL9niBTAkOA1nR1HgWhTM7/UkpcAOsj1gXmjUOHiC5LZt5TFDlSZdy7d5+dSaTQOWVmEFHgGkvVVDQxUvtAJgTDlWVOjw/YOzhibXWZLMtRWUHmDWtrPciHzBrHuK7BClCS3dmUcjaAQUkWFapYY6lUPFcMuHTjBqvLA6YnB1RBsH18QhUD0Vk84LzD2gYpVMq1d45Alu5NCdIohE/zc4ixla4FrA1tZ1AlGrNMEXeJjZY6csIphI9sbGzQXxUcHh2RmYxhf8BsOiIzhrLo4UWG1ApLAqG0lBSZZmlpwKipEFLxznv32Lx2A9NfpZmPaUTGvYdPKPurLK+vMzo8Zm/3Ce+883O2t7e586nnk4ldjIsYt78zQwALgvzZ6Do1ISZgp/EWJXW72VXEOMTaxHxaXlGsrGywufoiw+Idclng3AjbKPL+Jhs3N2jWM2abBZ998VU+U1xFSsF0dpeHbz3k/W++xfILL3Dj+R73fvQ+8+NT3MEGTw/2qAj81mu/TSlX+c4f/TE/efAzvvblLzEIW3z6xU8hyyl/+q1/yd//6u/y/W/fxXnHp19+nTe//U1OiEx3PqQ31lz1V/iDr/wB/8s/+V/5wdff4KtfvcyzN25y7723EJli//2fsXfwGG0y3nl0wunphLV6zNLzl3n51c+hyiXu/vRNzKBh1DTY4Rb66ib16SkmG4Ic0DSBIgrsaJ8nd79DZirm031yWbFx4xnE2qfwuo/OCxSGTGXo0IBNyVKzqeD+g3d4uv1Dbq4Zrgw1/awmyKxtfEhQJTFz+MkRB08PmdeOGzdvMN8dYXKFWRomOQIBhIG8bDuOac3YuPpp1rdcu5YbCIrEd0uj9XwjOJ/kubB4Jrpov6pqGE8mKCVZGi5hco33ac3vjLe7/IZF6XJuj5xYHXIBFP5/Dy0+xxCIcWHy+2vdcLdLrRKS+dGIB48esrK+yeDqFvXMsnXzOr+3tcmzN69xaWWIFBHrLd41nE5nHB0eMJ9OUUqxNOjRywua2YTHj7Z57713ePjgAU+fbPPk6S4xL3nxldfIckPTOGgN513wNK7tKn/k8/9aGCa/5NC5Ap+Sv9Y31llZWUmm6ZkhBIGNYEUkqCTxk7lOEmMbMcIgpKLQElOWFHmJNhqtc0xRQGkocoNxrZ9cVIhoUNGgoiYGi4zgQ43KDIVKzQflLNIHtHRJzsiEyBRERYgWEW1iN8WIjAqjkuecq2D/6RExaAKR6Tw1EXRW0BssU5T9tN8UyfMsCk8UkiAcUYS24x3pzBIXDANSXXJ+nMkx2js+xkW3vE075bxosQMHusPItKAuLF06dkQXNSqVRpgkbZHaEPGE0LTsiRY46KjadI3szmsiMTmkkChxhricb8qel5B07++jRe9FHwsu/PxZAd+azceztK+P/sxHx3nPu096/ewcX/yebI1pu/d2HjjoTD2dc+0lDAtQBkBrhTEfn0U+qdBfHDt6hErNrvOvd15nZ9e0q5vahlnoasaz89D991HfjO7PEEIb+dvhT4ltr1qCAqJlZbW1fofxXmwsX7zf/l3jbwSA0S0VQIsUJblAjInEVDubmBhSoIscleV4D/NYUblEeYpNTfQWQ6RXFmR56vK74NO/M4YIzGcz7Lwi+pjQVZESICanJ9Te4YVMDqtA9B5rDJlPhYjJcoQRoDUuLyiyHKVnSZ9nEgLqSWWKiSBD2/lbfLwEZ4RoE9ooQITQejCItt/kCVEkr4OWWiSUwmiN8B5hXdKkxoiQieGg0CgVceI8PbLrS7dgiIxJltNu3oWlBXUkSmq0juAsIQaU0qkwRLSmnCJJRmKaXBRpS9llI+soaKxLXW+faPORlB4iEUTnaBV0qXvsUtzr3Hu0URRFYg/keZaoTlEgdUbTWPIyZzKdMKvmKWHGOXwQZK1hFASCkmQtk0TGLsXEJ8NFlSJnnU+yk3ihmdcBOgmplqL1HJAJTdcy3QNSBgaDkq1L61y+tMlwUCKbGcE2iFDj6oAlISUCGOYGdWmF9eUeTZMKW9tYlvOS5UEflWsaLFZYShmolMdg02LgG4JTyJiRKYlQhrVeD9ufI2xDU7kUgSWgVxYJEGvRVxc8TVXRzD3Tk2OUKkEvIbOSwXKf9fUeeVEShWWgM6SyVMFjhSWqiGrrBO8THU3KmGJ1W8RbG03H+BFCoIxGRoUWOiWl+BofLEolJ+wFSi506taLdkMqA0KFluWRg4Y8y5EiUtdjZrNT6ujxCOz8BMEEnRUpEcPZ1nMkCXM74yUtUza7aJN95vMaVzeAQQZFbCo2egXPXr3Mszev4pxlRfYJ1pGbfXb2D2lmEyYnR4yPDtl/uspwZYXljXUuX75CXa9STafUkwn7p2Nm0znTtVUGvRxjNDMiTQREAidE620RrIWYUnVQqVCWSoFM3i8+BGrrmFUVJjNsbGzS7/U5aLEhFxP7R9HGd3WIukhgoXcqJfQoRWwCwTfIIqK7QgHo9XoMeyWbqwXreQ87i9g6cDSv8NbTzOeoOjCLhipPufDWCxohqBqLLHPqAKPpDK1yloclOztjeiZPrA+jCQjGsykfHu3SeM+dW1dYHi6Dr7Eu4HzAGE2Mhsl0TKY0g81Vmr09JuMJaMHDwwN2d49Yy5a4tXWdwzFsrq+xsbKENpF+P7J1qcfDx4e4+Rhl8rNkoNiCrjL55gTSnOuJ+AhRymQyphMQTjsjeRfITcFw0GdjbZ1GDlASbFMlLXEwRKmQRUnZNExHM5RSHB0d0esVrCytUs2mZFlOkIbD0QifpaNb2zCbjYnBsrQ8hHCN7YcO3Vui1yuYTE6oRMbG1nVk/xLTscWeHjEen/KjH77Bn/zxH7O6tsrK+ho+hEW6yicun/8hjgiLfUHHNuw23FJCENgg0apPiILZzLLz9IBH954SfMPc7rOxdp1H96Z86y/eIorI733tGQZFybe+8zZ71YSv/Pbf4+cHD/jGvUewVnCrmLK+fIm3Hz3FiDU+95/+N6hLq1z71A38q29x/P4TSrtFvnyd3Yc/5/bzz1LqFe5vfUhveIne2gr5qmfp6mUOxg9Yvf4cS7eeYf/Pv813fvwNrl56hhOt0SsaN7qLdssc7Y249spLvPD8F3nrjTfwdeT6s3f4/vffZLC2zEw5qumYxgYI69Qq41DsM1cBl5fojSHPvnaHS7d7fHBi8UsbzEWB6gn8ROJGMDmqcIOH3H3rG7z79jeZ7s/ZWN7i1p0e1ckBg6VHHM88w/UrNEiuXV3Dixm+Lni6M0etrdMv+6yvfx7KU9SWxIuCbOUyAwveFLh6n8fb76GJXL52jUu3S2ajHSpvceMpyxJ6q0OCTGlLUfaBAtCpAFJ5utoJ672ANHQbYkRKFcMlmnwgAVmTyYTJZMJwsMylzXWMMYQQEzNKK5BicbgLBcW5L7pf27367946/4q38rkC4dd3UACJcJHxwQknp8fk62s0uUBmcOu5O4TomM1H3N1/TF9rMiRl3md6fEQ9nVBNpsymUz44PeXp48e8++47fHjvA3Z3nzKZTonBkxclz7z0Eh4Yz1LyTKY1lbepGLIW63zrlXDGgj2rhH+9H/sTT0VbuCqj2Nza4PYzN7l//z2q4wnCaJQsiAZiURJNkdgJlUcTMTJgNPQygy5zdJ6Tm4LMFLgiw2Ut01GGdN8GRYwKYtqDiJjSAUWI+NmcaTWlnk2gafB1RT2b0jjL4yfbzKpjhLQIafFNtWD8Op/2LdZ7Ht/fZXQyJxrP3M6Yzmukzri0dY0XXnyFO88+j1TJYyXVCw6QuODxMaClQHWFYTxXGBMXTZAOnEg9pjN2QDxroC8u3fln5ow7AUqI1sNAto2s87KNlnEhU3NCaIUwSQIWgySG1BwUsi3ou8Ke9lnvpPckdqg8P/efu+bnDSzP3wefKCGJMbEq+cXNgFQf+QvMDuBC0f5JYEHyC2zPTPshus/SPROuNWr3LUBjfWL+XEj+OwfMyA50Emeyj25f3b3Xbpxno8BFxkSrbbgA+pwHIM4f5zy7JXbaj3Of+YI05ty4yGg5A4oupDR232+vTQhhYcobzyaNi9frbweAQULqhEuFpEqaGKRE64w816nwEaCyjCg0jQ/Us4pqVqFFBNeAdxglsE2dfBxUOlFKm6QV0wmRNREKpSl0hrOOqm7Im4YmeEL7MHnrmU9nuBgZapmKNuvwoiaajMpHrPepO6pNkpzEJPgQQaCixAhBlBInWJjbxBgJqCRJIKIIrdkjBJHoNUlu0rrxyrRt00KkyEUhFiwPRCpqIi19TwoIZw/OAsBoXVKEoPXHkHhvaZo2YtRolDJtRz3JRwSy7UymWyTGgAyh7bbT+nLQRjcp8jxLsZYLDdWZmywxMUuSm3J6TYrEougmSEn78OjEFmhcIM8NQitMYchnOePJlLqlwLuWuh5a3Yhs65JEY5SpYCR1aKSUi6gpzk+C4mzSU1KhlcIojVEyARkiooyhNAWrK33WhyWligg7RwZL3sa/Bd8wnUwX8am2kRidUS4NkVK3pquRXAiUSGa00TUYEcgUKEKSAbSTq5QiSWCUIJeKtWEPFSx9rWhq16bYSOZ1TWUd86piHgJRhGSmisDVHmdrnJjgZxWj6YiDQ8gzWOqXbK5vgpJEkgSqKMtkvojB+8RokFKnSN32HGZZol2G4FpwKPmrZNKgtMC5hhA8WiemBECXCy1lAjFS6HPLIIighEbEBI5oJWiaFE8aY5JInNoRVWWxoSIIklOM1O19T7peJqNflslBvKkRPtK4po1WdmgRefmlF3j1+esMlCdTARk8NsLKUsnpOOdARYqyIMQc23j29/Z4urtL/rjP2qVNllZWGPb7LPUH0DSMDg+odg8Y9AuKfgkqJ0hFURrKXo9+2SNTrQEdMW0utExaUNVqRIXAhUjlHMenp5ycjiCCUqmbrLRJVEyZnlGT5WQmQ1gPSiRT29aPJqh0H1vbIGLSwiopwJOAIwFGSnpaIgpNWFacaslIhAT+CLAxUIcUJVs1ic1GbsgQaKUR0qCVodQ5/bJHrjKUiChl0Canv7zMgIyHj7Z5++fv8tztm6yt9IkyScIm0xmQkeU5+MR4WFtdQWjB04MdajSyhqltCDbnL77zYz6nX+Xa7RVGh3tU81OWlguWxiViJ+Ka1vJ6obGMi+5Git6TuBBonGuB7G5TJQmI9j4ylL0Bg/6Q4WCZSchBBppmznR8ymjiGZrIyqUrVFXFyfEJ2hhmsxlZZlhZWWJ0eoIPAVMMmM9nSFkSgqeaT8m0wFczpCkoeyXPv/Bp7u+fsDea0VvaxAzX2bh2k5OxR0vH5uoQfxQ4OTnhG3/6Z6yur/M7v/u7rG6s/2I6ZddG/g8OyEgeTGdgfAtiiERCmsxq5k1NCIqDgxFPnp7w9ltv8+YPv8v+zru88PwSn3n5cwx6t/md33+RebXFl7+0gbaRS1dXePvemIMdj1RbPHu1ZLa7zztV4MqVgl62zq1PrXMtl4h8mZOHT1DTQx5/+GN2x0dc/sKrrC31ON3e5d7Te7hJw7M3X2b74YjR3DIPcz54eo/T2jJrNP/Jf/aP2d075L1373IqHX5lhV2tyJYGlBjypRWGS5eZ1Zqf/vRNyl7NFXNIXs/YrwX+8Ij5WGNyCBXcuf0Mty5fIRye4qTn4b03ycKM51/4MrafAK9SauqmwswET3/8Lk6f8PjxT1ixgeOHJ2TXr3J0f4/vf+NNPvXcS2zcukpjKoqlS9SngJHoskTpml5PcXXrBlevarxrGAwMuDnRGLLMU9UVJyfH7B9MeOG5FymGl0GMKWTDsFdQjSVCbIJMAHpA40nNga5yUrT7mxDP9jCLBKi2A9u1hpXC2YbJeEJjHSYzrK6skOclSkm65CrvLAKTwPauqODsUVkUZ221drFY+/WNX8ZR/1c8It3OyU/nnOwdUDcNTkIVHYUwzKdT9o52OT49IAbLZlnSQ1GYkgcffsjuzi47T5/y+MkTnmw/Zndnh/F4TF3X5HnOcLhMUeQMhktsbm5SlDmNd6nBRaSpGgQNueliELv39msGav6SEUkSayUEQsFgZcjt27fY3NzgeLyPVzlOa7wGlRcok+NdRHqH8pHMQJ4relmGzBNTMFdZYlssutYpZS8Iv0g3C12hKjrzQ8VoPOKDu+/y8MMPmI9OoampqznTZkbdVEzHY0RI3he+ZR2ElsWqEAQvmIzGjMZjGlFhaRgMUxLWy6++xtXrtyh6g1RQx5BIFqR9lickVprolsTUDOyehTNF01nqw+KPX/bWFGdFaHo80/47+RCdY04oUlSmaE0pacEMkfaD3THSGty2E+Si9k8g5aKATgwJOCuQ5Tkg/7wMIl2r9r1w8U4UnBXr54v61HgULdhwEQBY3GPniunzBbwQCfHR582BW6BkAbl3IQWtFKRjNLvWmeL87+mKfK3b+ercB0if+WJRf94j4kwScu5zigQWIy+eo/OpLB/9c/EZ5RlgdTZiqjPPfrB99Wxt7ibSBfhCy2RrG/UduLSYd89fo19xnvwbA2DE2CIyQS4iNK3zCbUSAq0ypJHkZUmUGt1YQvRkmaZfFhgpiN4iYqSp5in60dpk+Cc888qClskE0lqiMsgctFT0yx5KZ1gR0cagpKKe1VSzGdE7dG4W+N+8tlTTKdPaMZlVuCDQoTNukrT0g6T1IT2wSoIXsfOgIcazqFCBRMtE49ZSkkmB7W50ujU7TZZd9FAHXGiVJgMfkv2LWDx8ZyBBatp2WiiF1pIsz1Aix9qaqqrx1pKZlkouklGMlgqhkubUxyQH0EoTVcSJRNvuKEICULpINM7gCDYQXNL6IyDPMkRMrIHO4EYrSVEUFGVBWZYok4x9Um0uMZmksQ7hHFLmaYFQCjmdMZvMsNbjCGQqQ4pIrC1GC7ROk+J519004Zx/OM4ocN3N100audFkKiVwCG/pFRkbq0usLvcpc0VsZsymFWWRIYRGBgUxaeeUTuZcVVPjZnOCjxiTkxcleVagckORa3AwG9c0dWLiaK3p9Xo4B84HGu9xQFQagQdXk4nAMJdEkyFkMsDxsaR2ntpZ5tYxryuqqsFam0A2GwkupnQb5xOLxdY068tcvrSFzhU2VFS1JQrRRmgmRowxGZ1JUqKvy8WioVSGMYmZI9Ktt5gYtdZooxaUvBSN5QGXzpfQKTUnROqmxllPlmXIOh07ywz9/jAV/c5TlCH5RIRAE2xKvEHgvcP5iJQarTTGGAqTEYsS4T1NnSfDKSSumnPn5nV+84uvs/PgXY4PnpBlkkwZZq6mP8hZXV1C6PSZldTMpnNGkymzumJ7exvx5ClFlrO+vMLNrStcvnYLrQST6YjTWYMuMyprsUJg65qmmmPrKqXBZAYh00ajiSlGlRhoXPKVcDFSNZbZdIY0qsXYUvpSuraWrAtn9xCSGQ9RJXfyxnkameQk3WZfdA7yLdMgBk+wDTLLKGTGoCwovSNzNbJ9PlyI2OCx1lLVzYLxokNgqZWvSalS1HReELxDtqlHKIXKC7K+RGU5k+MRRycjlpZKolSI1lejqZLJV57nZGVB5ixFnjMcDihXcvzE4Y88o/GcP/3Tv2Bvusfrv/kCm5sZ1lV4GVB5Tu0jwpi04YgBYoqZTdniaQGMdM+Tw7pkfJokPMlDReqMLC8pAmidI2SKwvXBE6JnOpvx4HCfLDR8Whb0yhU2NyS7B/tcvXqV1ZUVqsmYMi8TPVwprlzZwuoBOyfbaJ0kanmhsSTPEyE1s/kBE+soN5YQxRJkJZevDDlwj/GNpF9kTGzD3fc/4F/9y3/F+sYmv/lbXyEvy8Vn+zszOnAmnhVJSaoZcV4xnXoePtzhT/7kWxwcThifjhkd1UxOJsyOPCc7H7Lxwir9S8vUo5p/9q//BZeWSjbKK3zlK19lZ7TK3dM9jt79Lof7P0ZkW7xVvc1/9fe/TJ8TarGPGTwLBxPi/ISD6QM+ePIjzKM/49Zzn+GlV/8e3/q/v48MOcvL1/nBT36M0oof/fxH3N95n+2dIw5nlmc//SVuv+K4/Zk7BHHKwazi8bTh2Eqe3VqHZs7JZI4wA3youH11g/WtgJ857u3lvGF3KDMD1vHCrRdZVU/51r/+Y/Jejy9/7SvsvP8OpwfbfLq8wr139jk9OOZzt28TnxwiRoE3v/0tannM6Hib3/rMa3B5QDOyqMJx68od9h4fU64tcfXFWyzf+RRKbYAowQS21uYItYzMM3JVEZshzDOimxH8Hj4LCFGwsnqZpcE1CrMMMQciKpuC0JSDVQhb7X61Ia1Kjog/Ax5RqVEiut1vy4kQybibdsPvG4+1PhlWA/1BnzzP0To1C5y1qVGjFLnMSNbcpGO16/7ZDNH1Mdq9U7vz/quX4OeOIARKygtF169tCEEzqxgdHyfmZHRMqxnSeva3t9k/3mVcT5mOTtifV5jGsbd7wAcf3Gd/f5+9vT2msynORbxzia03HFL2evR6Pfr9HllRMlxaoj8o8R4a26Qmn/et7ZtOhsoqMRK6/dZf61DpfAfrCc5R9stknpzlGK2x2lMLjzAJbHei9fAyKX2vKDKKPEdkBqlNSsELgeAFXqaY+6TZ9ljRYKXDSY8RsvU6TCttv9fn0uYVDvcP2X+8x8n+PnU1xUubGIEuoEVnxhjRqgUvpGp/bythEACStbVLvPTyy7zy2dfYunINU/RA6tbvLQG8yS9CtT2RTo6RmOlSJCm76NihF27sj7MaPml0XXy52D+nGiOxX0Pre9H+XJu4iBSpaSBS8IEnrbnpgKmRk3weU0JgKs394qnp0jN+mSfxoxKIbnyUqdC2cdNboK29W3pEev+y/Y0Xi+iPekN8YpHtUjMlnGvgfpK8ZcGCIKK0+kQA4/w4f7zOF02pM3ZIZwtwHlzpAJIucUTKlOIT48fBi06e8tGY2cW5JVz4vB+X57AAgS4Mcf7Ldl6NZw3rKEggz8dMkz9ymL9kIvkbAWDECE3TJMMoFFprRJ6lWMLGMp95ZsGSlQYfIyYr0NEjgyePkr4U9HoFkgLnA9bkVHWDtg7rPfO6YV43uHmNwJMJwbiumPhTyqwkK4qktJUQjSNqgxECaXKcVJAbdKapbCrCcqnxlaNG4+ZzoHP/10Q3J3qXEK/u87U3mVLJ8AdS91RKklQESYhJSiaFwCiFI6UtxJg08KEtatLNqwnet3T5wMKOO/22Nj7HJ8AjBqxzNLZBSphOUvTS0mCAMUmaQnuekyQkoaFapy5m4wPB2bbRqci0gjxHImicSw8UEmSkV6YiYF5VzJuGEEALQa5kkvlEyHQyB+2VJYPBgKJXJPZGTJKCSEjnQkDWnncXAsZqpNHo1k+iqWps47GxSxmJqCCSUWrLQiCeFdaQzr/3qRtO14Fd0Ndac6AWTS8zg4qSXq7p5ZpCS0ojyfs9tB5iXfIAqaoqsRWUBFsDJG+PLIEZ3kNtA9bXjMdjZOuXYqOjdgEXQWYFgxXNdDLHI7EogtRUEYRrEFiM8gQVUJlCSsGsmpMrg1ZQFBmr2QChVLrX5zWjgynjeUOcN21EK0hpiCoglWHr6hZKC97/4C77ewcEDlEyZbTLzj24u61ipIYWdW8nzXbRiiEgYkisnW7DeeHZPutnic6pmlRgO2sJIaC1WqCyWZZT9noUeZkmPKkxWWLmZG1R2TjXnluPbTzRB2zTMCh7LA2GqTgvC0LdgA8YEciLFkSIFqXBhYaATxFsKqJzlcp9qfDOURYZeZFTe8/MOqbzOcdHxxztHfB0+wlryytsbV1iaXUZkxfULjKZV4gM6mrGw/v3mY8nyJg2htMmeSpEb5hOx4TQ4HyksgGZZ5gsZzKZcjw6YTxONF0QTOYVjx4/YefwiCjSXOGFZO4ceamTnC1IpDIYpTA4nIK6npOiwRIbSGlHU08JJkfgqJtErdZRoRCIGGh8zfGoZrhUIJYHhBgYT+YUIgncqqqCKCnzIpkgt2bHyXFcYoNnPJszqxsQmnnVJI+JNg45ywqyLONkPKd2lkwIdGaQRqGUYGVYMljqsV8d4WcNxydH/OQnb3I8f8yzz15ifVhgpcZJTRUUmQPNJJMAACAASURBVMoRQtIrM+q9ivFoTL8vWBkO0vmTsvXBMUifQNUUVx2JUjJ3DY2P9AbLZJkiIFHGUNU1s2rOvKmZN5bxaMy7795jeesGWW+JlaUV6qahV5RU0wnVvKIs+zjrcMFR2zm2rrFNTVNXoDXCQZHnRCFYu3QZ03gOTvaYNIHHO4d89pUb+JURxyc7DHsFT08qYoRHDx/xve9+l5deeYXNPE8Skr/26uDfz4jnvxCtgS1puRMIBsMcZTJ2d8Y8fXrA0fEMO5Os6i9yZetzuP03+HA248F7P+Tp/CfEwTqvf+W3+cE73+Izz014fStj7vb50f/5T9nb/gHPX/XI+EOq7T3Cyh735SEbn9ni+hfvsLJxmTiZcePDHlkvIjdu8u7DbV7/3YIvfO1rlOYyvSXLt/7H77G3t8Pu/VOOThsOJ4dURQW9Pl5YdN+wVDT8zudeolq6zY+/8Uf8H298B6eX2bu/x3pRsr1d8xc/2ub3f/9Fbty5w/THp/TfHjG6t8srz2zyxS+8ys539nnzJ98jWyt46ZWbrBY9PpzOefDB+/zRn73N3pMjZp99lVc2lvjpG+/x9rvbrKz3ee1Ln+fVP/gviWOFPZwgxSPoax58cMjNVz9L//Imsn+LaJYhNkBEF5IUeieRQkMYQ5wTDu7zePcha88/Q+/KMwgGUPSILocgCMGk1A00iAJCknEpmeOpicIjiO0600URntu0xgDBE9WC9gnA6PS0ZeYmg2yxkJOm/2utaZomxbG2jEaCT7QdmWDMtPNuGztSQvv5BILoW6Plrvv+C+7PT9xcx0/++pNo13/l0Ra6e/v7bD/ahkLRVBX1ZMLx/iNOn+6wd7DD/ukBx4f7zLefMtk74NHePvO6wjlHIDWYBv0+RZH2ZGWvT1HkaG0wmUHnGWWRt8zmLO0ZRec/kmSQPiSZIHDmR9blI/7/PlLBXtuaQufM6im7ezvYpqEsCrzyaOUpVPKUC1HQxIAjeX/FtuMXSA1NqRRaJRBjPp8xs5YQlxFS4mKF1xYnU9xsrgUalTasKEQQbF2/zfrGFdZXt/jJ93/Iwd4OMzsmBJuMo4koIdFGYF2DlIHcZNSuTmyiPEdqzdVL13nhlZd59bXXWFlbTyyGoFDa4OoAtKa2ShOFRGd5a1bfPjc+EheJbfHChNqZJ8qEDaema1undPGbMsL5pI8QI8KnFAzZFr0ITRDpfYSQZCUogbfpuZJKEbUCl5qt5408u05rS8A6AxcXz0lIfmGxe/7jgu2ykLnEc2kbi+btxaK+G+fZChfHOTZGxxD4CAAh5Zm5eiex7kAC7z3q3Lb3o0BHJ8tYSDNauY4XZ5KORaO1u0KtzOdjwMC593M+SUQp1aaQiAvbg/SzZ3//qIHnR0HV82DLxWtx8euPemCcsW9SbRtaeZnojtVdl3YN7xq+USq8OJOlfPT9/WWMjL8RAEZqiodk9BhdcveXCiVbN/iYFiBXw9iNQIzpaUVGRDaGOjp09CijU6e2CfgA2uRIowg0IBpKFeiXChMh1hbhUofSh0htG/AxpV+4gIyCaD02OCodUtSolMTMIFVGoXMqHzidVmgPIkgUEhPNIokgChAtnUhIgejigto1NJlxQlCqjT2NiWFPJISE6PqQEDWt9YKNISDRlGKkDYU+Q9wWPLGIUok+5JFIn26MurJJXhEi/V6BLAuEF1iXXJG7okfXNUKbNNm0koboHKFxCJechzMtMSIZqwYExrSTS/At2pc6D7lOJng+uDOTTKPIC0NmkneEjBHTUut9DLiYNGAIiYpqsXEXQuKdZ4rAu3lyIXcOicaSUG2p23ipRReHhf+HDhBdmkCk7HwvUuys0RKjk2GQ95aVpQGrSz2GhUHiqeY1eAVlDylN8ibJRSshAmstdd2gkORZkQAJH9DaMD5NWnhtBDpT6CKj7A8ZZiVR5IzGNSfHY2azOVHAPICxDh0cuUjO7dqQTDrzgl5hODo+oXENQUhUKFCZQYpArmBjfZWVKGiASePYOxqxt3eMs4EsKxguDTAG8iIxSKwNNLGVFMnO8OcM1b04oZ2htYmoT7tghJZqeVGXmP6dXPwHESUlIViEAN+6cPsQqaqaUeszIFrNX9nLk5luv4/JcxrrqBuHDxPmTU1DAlKaecXo5JhMabSStPH1DHs5UaQAYkQKAAt4audw3mODxxMRSqKNwUUIjQWZGEulzsnynCIvmI0mhNoxHo/TokFksDxAmZwsy9BFznw24/GjR1TTOb2iJJMC6RKjoRYCV7kUnSoUpjeg9IrRbMrPfv4uJ6fHTEZTtDYIKamahtFkluKb8wytNJkQiF6PJgSCNLioqC2IXOODxbkGH1PHSASSRtVLVJ4ho1zQPqXW6KDRUlHmmoFWlBJ6RU6uFNZZyjyjV5T0Ck3d9zR4hFbkeZ6y4GXScjbWglAUvT6DpRVshBAFVWVbuZzk8dOnxGhY37yC8ILJfEYgUvb79OyYQZ6xpAvWn38GN4OHT55ydHLIk+/e44c/srz03B2eu/MCXpXIcsjcRRqbAIbx6Qm+iTjdUMkZJssY9EqcTDr4hT+GTnFwjXcpHg6FC5IgFEpleNsCv0LgI1Q24JwgypyHD7c5mcy5dv0GxmSMx9MkDcsLjDHMrcVFS94fsra6ws7jDJNnizUu0YxTss4s1Dze2eN0MkfojKIsyTLN6nIfMQNb76JMAop3Hj/l+OCAzY0NWlLb35HRAa+AaOfwxXfSa71S8sKnr/Lf/w//HSenlu37J1zKVmh2Ff/mX8x58OAN9mdPYeMKa5c3yIbXee3L/xBdP+F//+f/G/ffeYsPf/YOvWXFg90xPXXAf/sPfp/icM77uzvsZhOGW7fp3bqB273HYGXA4c4pSmRsXrvNpArcfOFTZNkyQUy585nP8sG/+RA5qRC+x3LeJ2tm/PjP/4zTyYjrl3M4apgfTbj67A2al7+CjT3u3x/xyjPXeP0KvPneJf7oh28Sllf4r5//MupaDzfI0IVi98ld/q9/fswzIbDeW2VpdUAczXj4+AHVTHJ97TJ3lu5z8LO77N//gLe2HUejht5ySWHg9c++QKmmsL4O1z9F/cEx2XKPF//jL6CWtiDrEXVGEBIZC4gGgcLRoGiQoSLKMf7kET/69rd5/rXfoL96B5oMsgyiSBTjKAhOE0OJ1jlQLKReCX7K0OiF54SMcvHt6Ns9kpAgNdE75tM5AU/R6zFYWk77CNNGOJ57IkT7gHQa97M1KKYOr7WE2SztzYxO+8umSclreYkp+6B0Mgw9w95/pRE4y8kRbReg8+P6tY4YiTYwnc4xWUaZa2bHI+5NfsbBh4843H7Mo+0H7OzvMB0fI08mhMri8wxlFGV/SF4maVtR9smLgiIvU+JfKxvVWZaSObRBtz5qIYK3ocV9VDJQ9hHnUsF5Fp361wVgpPMdfJKTnR4fc3h4QO0ail6ZouNDg/WO0ARkVBRkVCLglSfLFNqkfU9jG1xVczw9xnuYWMusB5uXl0H2ECriRINTFicbPAZERAmdmD86hyiQUfHiZ15nff0a77/zM957723GkxPm0zGxqVNCH6CLJD44nUwYLA9SDL2z3Lx9k9de/yI3nnmetfUNfEy+bkRFsCKxLUlJI1IIgui8EWRiYLYF/6Iwby9FJ5VIINOZRKMrPumkVyEsmG5del+UZ4WmlMl/xrc0hu7/vk1kSb8pgUFBqyRR1x6CIrjU1A1RttCTOKtruFg8p1upY/R8XNbRMae7v3fMjQ6MuDg3nN2XzrmPIOStZF8kpsKFNI6WzdX56XWGwd17JCYQ7wwEaoGBFpT5qLwlAUQLsv6FfXL37HTXbMFsER2w4j+yrz7/vbMJ6/y8dz4N6ZPGJwEEF4GL8+fp/LMNZ/dPqgnCuX9/dnpTd75L0+s4GdAmkYi4kE13n717/2fg1CePvxkABimGxhES1bmlWGdZxvrqMquDAiFc6zjuaayllIJcJPTU1jUntmkNQQQhKhofknkbGu/TQyKFQKLolQU6AzevcNahVMRkBktMxiqtCWQIiU68e3BMNBptcpQ2hKjxAeraLrRN0QcUAiMkXiq8j8lsERbmkFIoaF2Hu7hSJyJCCYRSSAEanx5qLSFqiJ7QHjt1wGPqXLTIaVAK2VLppWypYyp5EHRopSlyiiJbAEW+sfTKgqV+L9HmgsfVgqYJhGBbKUiAxtJEj28L21xl6Ng64gd/DiBINDwRA1V0SaYwnxNJkamZyFqj8QQuaCXItCbTGtV6fIhu0yEE+BR9GknglUCgBQStEblEDIEQcdZSVzUhuLR4uoiUER0VYND6DPV0wS/oTt1kmOaIgJAKJZN8oVekGE3hHcRk/DkY9ilzSbQ1hLTwTKYzhDKp8JWCzGSYoocpHdZ6TucVtWuYjiu8CxRFycraOlmuUUYiMwlS4YKgsYEgNELnSOUTUo9M2eISelmRrlHTIEJKn2iaCq0EBYrUx3JE2xamQWC0TCkW0WN0oFdm9Pt9lJSUecmg1yMrYFAW5JnBe7AuLibU5FKcMrgREd3KY1qNz2IikjHQ5YWfZ1hIKT62iJw3FYreo5ApFtcohBRYGwgixfNa69JiqESSUTQVvbqXFhOdkWU5vV5I7AKlETHibUNwFucsKTozAWJV0/DOe++x1IuoZoSSUPRK6snsbBqWCm2yJPcxGbGx+Jj8ILyPRBHIjYaiQJhIkeUUWUawlulkAqphMp/SV5rjg0OctzS2Sb4e3tFUM1QIaBmoJmPwHq0MsVxiHjUnkwnWWSaTUSvxThIr7xx1laRwaq7RKsPIlPyxvJSxPOzjZU5lI0pFrPPtRqfNcY+iXYxBK5Pue5fAhZR0JBBtBmzWLxgUhmGZ0y8MPgpORlNEU9MflpiNNchqJl62fiu0RYkkiiQTKcuCsujjRmOyrEApTfCCsijxPjKfT7l6o0BGSXAOrSTVbExjLQrJ+vIS/dhnOqpZv/wS+/Njfnr3J8zrhp/9/EOOjzxODhnPPXnZx2SagS64tLFBPJ1yenxKnFjM2gYdgJoikUWriU+dt6AEaA06w/mUrBSlQpkETHoiJu9R9lZonGG4vMHMHjCbHtDr9SjyHplR+LpmeXmZoixxh8dUtYNgkUrgo2P/8IBn7XW0WQLvQCqGpWLiMjY3N8mKHlnZw/q0cbx98wZ3Hx5y++ZtotRsXr7EP/pH/5hrN261xRp/nXXBv/chTVdJJo+fsyGQaBprMVlkun/K9RvrXNu6ROEbsllDPf80f/iHH3JlsMX1V5/Drxbce/x1bmy9wJX+DX72+Jsc7byPqfc4fBKxw4LLm5e5P1vjzZ8d8vTwmJevDvmLb3yTo9EhExP47JWbiGzI8tYVnNngf/6f/hkrG31e+/yn+NxrX+Wrv/EPeOPf/jnipOFSUeCrgu3/5w0+vH+AdYK3mprj3Se8/vl/CMMrDLYMX9Sf5tn+iD5PWO59nxt2k/iDZb7+h+/jwr+lGRxy6PfTOuMq3PgYVi/z+Re/xM1nNhkMCt63T3l07wH/9ME/4fjokH4Q3Lt7l4dG8pmXP8d/9Ornme7fZfedb1PM3yPYSwR/mbuP3+HOl7/A6o1LODWkdo7J6G1WllbJuQVoogGvA3CKFfscbj9g550nPPuFr7HyzEvELAchk2w21CTJh0KIHCFWIGT8v+S92Y9k6Xnm9/u2s0Rk5FL70lXVO5tsNps7paFkLaMxIM+MZcCGAWNuDPiP8PwJvjVgwIAvDGkAXxj2DOCBx56BluFII4qQKHEZNnstdtdelZVZucVyzvk2X7xfREZVN0mR4tiyfYBEZsZ64sS3vO/zPu/zkJvyteXCGpV5qQu1mFxcRlQJbZckCQQISaEBA5oWXUsxaDkOnj7kf2Or1d85g0oJho6jR4+4/+Auvu8xRgo3ztVkpdncPsuly9eot7ZL5TPCzwE65GfnZ874EKhWQn+/oENpfOg5nJ6QrOb4yQG7tz7kwaNdHt+9z/H+PodP9lgsTqi0YstWtO2ING5xoxGj8ZjRaETbtri6EcaKOt2rtbNUdU1dV9TOYEo1PpSiWlalsJXCSjj9/4lDtqHMqKmZH8x4+OAeh8eHZAWuqeljhypimyrqInpfQVWKegwsFgumfc+sKy21i0hKSqxXtysWi8ukUQUqioOIkrgnRk8ORTg6U5wdNJ7AxvY2z082cW3D1tkz/OiD97hz60Pm0yOi70hxIIeEMlCNNuhipq5rPv2Zz/DFr3yVK9dfomomJJACo67QuhL3lJxX75mX6WCWGE206aR4qkpxcKmNt67bsSyIUrQ0cs6kNUr/Ml4z2pAxJFWcfJY6gTlJjKbNKZMiyfzWBXhguXwX8ETYLqd6faCeya/XnsCpbl+KPz6RfbZYBvJZnJb09pQtsGR4aXI8ZVAs22hEwLPkZSGsnDqcc5LzrIGiT4MsmpDFyVErtXIzW4EVrOqop4BFzsTSfv3s9V4f188CGMvY+xPbPdbaSE5jeL1iPywv0Sfpe3zytV1TUV59J8vPvXy/5e2pAFFlvS3r+FJ3KOe8akESyRdpGEqFeWcKgPbsufy/goEBCmcUyWhCcanIMRK9JwyeHB3GgjUGbUSEsrKGxgmVbdHNWSwWoDV13TDEQDcIlX4YIqgiBloZNDUWRaWLtSdgrcO2FZaMGQSpVSljtQGjMEPNfOhRxmFcRdeLpobOEasyOnlUGlDaIDBMImpFNHZVBVaIgKNSEIOUlXKW+vWQpfpsFRglbh122VtnIK5RiTRCc89W3ECUgiEmjEklWRcAw1pBdo2ByjqqymGtKZXqORvtiMnGiKaqUClCbcmpIQZPTFEAnZQ4ns+YdQt53hDohySLlMmF4WJRKq+stHIYSOUHNJHMIgUqs2xNOBXwZMm0sYaYRdQ0leS3so6Y0+kCnREww2lStLRNRd/W5BgIPq5oWSmB90KbA4vTDmM0KSzBJrHNlYBLHrYkp2qyAC5GI7yVROgH5vMFlgprNJJDKLYmm2QMi2HBtJvRDR22rlBa0/vIbL5gNp/RLyKT8YSzFy4IZTD1LLoeP/eFuWLwA3iv8SGIVW7wLPqOaq4YTMDqmsY11KMaFROh79AmoJXHGifMFWNJSmh8yShqW9PHQPADJniMFphDo2U8OENVKZrGFT0D0CUpNbrYlZqC5itx8aGMwNMdR6HJGL1c6FiBZktK27O0Pa2V6CYAShfAycn1n816Tk56UlwKQskyt+g6ZgvPyckU52qatsXYqjjLiP6FypnKWlSOqBTJOaJKy8B0uuCdd9/l7MRwcbtiY2SIyYtehxWXFKsslaloqxGKjGkDPgasD6h+oO886Cj2ysaxtbnNaNyQyBzPTzicHXF8VJgSVpOS2JiKLorYvSoyNiu6LDoXThmiT8xjjzWW2lXUVcPQ96SUmS8WxSsbUFqcgcJAKJtAMpm7j/YxRzMubYzZ2DECJFqhakMip2XZ2kjVI2lhU+cyGpRUPgVolWq3zhGnMm1TobNokQyzGV4bgvcMMTOEnq6b01etMFiSsMaICsp7WOVwtsYPAkg2TUvGEWJk98k+Xcq0WxP6ICyNw8M5Z+uO0ahl1Dpefv1TzHVg9+QR9+9HFtMFjx4doasIzQZKR3y/oKpbrl+9yuSM557bpTtYsPvgIaOmotkZr6qgKQrNOeVEF3rmQy8CqbrGVQ1aV6KtkGHW9WAdG9vnmMWKjY2z9DExhMilCxeYL3pqV+FdJ8FQFLagMZZu0dEt5lhr2D844MGDR2ycbZmMNtBAbWFUGy5e2KZtG4a6BiW9wGfP7vBwf0HtPMpVvPnm5/nqV79GNSoJ4P+PwAtZoH1h8y2DpVI1TJmcB959520e7x+idcX2dkNjFU8e32KU4cXXL/Or6Zc5e/U8V166xjQGPvyfPuLd736LOzZw78O3CMcLxnaLarTBYjRh7+5j/vk/+xP+zqvPMx/NeJIzj+9kDvZb4kSzd/NdvvDSNV554+s8euL5wtcsf/bH3+D3vvdXfPB37vDrv/obnD17hfe/80Pm6Qib7nH7g7eJ3RZbk7M8Oj5h92CPw+MDrh0fc/HMZZg0nB0t0GGL2ckd3ExTb27z8O4u/9v/8SfoczOOBot2Z5nYxHNf/jTj85dpr1wh1pZv37rJzU7xOI/ZmlR8+nMv8+jJE+6894hXz73Oa698ildePsv7/ibvvPs2Xb/FyFziyeFNjrLm3JOIefsR4+drHk/v42qPVo6l/hVak8j0acbi6AEnswOuvvIKO8+/BLomZofWHq3mwBRxFdnAFEtsVIAUQDv5mx6o0dSiaZRVcQeQNR9FaQsMxJCxVcV4Y0PYR3pZYeVjewvPBOkpZdCmjB8tbFUUmxub+GpBRvrQravIyjCebGGbhpWAoFqqCv4sY7Z0qawKoBliFGHMEHA/6bk/xzE9mXH3wX0+vHWLH777Lncf3Gdvf78kkRmnFOe3dthoatGKq2uiq7BNQ9O0VE4ETp2rhO6fl+LxCldVNE1D24plthT0Mk4bYVBmaVOw1koksF71/Vmv29/kyECQ9ozD3Ufc+uhDZosZurESY7uKHCH1MAwB3y1IfsYQB2ZxxtTP6fs5efAi5J/AetkfvcrimkEkRU+KQSy+s0UnLS0hQcQ9ycJGUdqiK8t86NA5c+7yBba3Njl37hyXLl3i9kc3uXv7I+bzY5SR66idZjwZ8/Krr/DGFz/Pc9eeB9MwpHIRjS2C+oqUI0aLXoNeJYsSU0tL1nK9XPsKSsKZy/XKy42ktGekhCQTJcG3VmOLhalWAmCcWrqXp2VhUqhiuLA+7Jfi+ixZ4bkAKsjrp8KukLvUWtv32hhiGQeeJsvrc36Z2ApA8TSAsd4K8bTrhryO9/60yp9P9fJkzktL85J1sc6+WL72U+0UORVCvbhMmlwS8yhMdKUl18haLEW1Lsl6aR159jVXv5c/awCGUktHHP2xz3j6+RTPAizrk/GTQIFPAjF+Wsvbx0EQSr7GyjZ1CWSQkoBQJp2uMWvnFGP8mMPas60yn3T8rQAwFBmnNTiFzhFPgJQIQ89sekKtPNYkXF2V6pjCR0dQomQ/KIc3gaquqDc2GFtDjJF+0dN3vehAKU1AhAxPjo+plGHsahTgY0TNNEkjG7ZS1M4xqixNZdm2DTYH0JqqdvTWUSvFSY4sdEIRUHlAYVAqgIKoDaEg1hpx8DC5iOoojbEGZRQ+waC00NZTxKWhXJRT/9yk1IqyZNSpOKdWimhU0StYCtas9VMZoT5Za4p/sCPFgNclyVRSQSdHody7ilwZsTQdtWSlOF7MWPSDUMG6QH8yp+s6uqHHR083LAhJrEwjiuQFiGkq2TyUFjcEY8Tn2moDGYIfSDFgzYiqdqQsbgEUax3nrPRWFiZNyEsLqIjR4JymrizRmUJREpFRBeKLXdbOldWrtacJdS507qzk/Uq7TwiS8Is1KCirGULk6OiI0DuaWpgaOSZUNlR1gzLi7pAKg0NpzWyxYDab4mNka2ebne2zuLpiCD0+Rjo/0A8dGfAB5nPPYu7Rqirnm6mcxViN95mDk45RnamdpdEG50Zsb9X0boQvyV/K0v7UB0/0gRAXKJOpbWZsKqKqmM9BxUI3SxGVNbWzjNqGnDVa+bJJKawzxbJpfcEriPlKc0WhlVT+l/cvF0JjTFlsi6ZNWeyMUVjtqJRB60RWHrQwn+aLgRCiiJkmIyCTWfpKa2LI5BSIaUHKnShua7HQHbUNzqgC3mmMdlil8X0kasP5rYbr127QqjmkBTF4nK0xClRC2CtWqJ9KZbSOOGXE/stIkh+1QhtxMBpVltpoQo64JfCoMsPQE7wXHZtUrpjWzGOUqoN2ULUok0hKk42j7+b4IHOB5bg1BmW1LPwIBS+HgnJrjUezyPBg/4iYDtCXzqNHDTTi4mOMKvHJUulaE5VCKXHeUCQo87GyFhci0nMe0MljVaStKib1Fot5Tzcs8ENPDBlMBQaG6Fn0itl8zmLRF1pxQ+0qDIZ+0RO8sEC8jxjrsE5RtyNiPuDR3mN2dKbeaDG2YfCG+SLRWY9Vmc2tlu3NERcvXGToAk/8E4Z5pLVKANKkSQEqM+bCuXNs6Yq23mS+N2Xv/kMWswXVZvuM4rbYmR3NplRHR0y7RGXG1D5xeDzj0IvIaMIQszhMuToz3tjh8cEugx84OjziwaNdckxMxi3JDyzmC1KGzc0N/FzA0qZpOH/+Arv7++zNFJ9++RXa2pC6RFsp5lbor85aXOVo6hqtNe2oRalj+r7n3LlzVE0jAWCpnn3CBvr/2SOxZMwJZdr7yKxf0C16fIjcu32P3f19fuvv/hZtZejnU4ZZz/mr19i+OOLSp2/Qh56jg2Pe/uYP6D6a0fX3Gepd5tMDUqc4d+YSvWlxbsKl8xf4yqtn+Xu/eZG//GHkzz+6z9boi/zab/4Dbn7wHe49+kNm3vCj/Z5vv/MhzYM7TOoJHx7W/Mvf/xccHN/hyewYVY9QuafvMvcO9ujmCQ5nzMMhXTMQzZRh90Oqdk4eHM25C6jqDN29q7z1B3/GIu7z2c89z+Pdh5wcJeZdoD5jsOOWEwf64ojvHj3mU5MLXPjMV/mj9/93bp1E/tHv/F1+47fe5AcP3uH1j3p+ZfzLxJOb3L/9HX54610eHB1x4zPPc+2VT3G1vUKaXGXUXCMdKEx3xKWzNXZ0Dut2yEmRsyfqwEl6zP7hXdo48Ny1F6jijjj96ExUAaVmZJ6g9ByyJfoFs9kBPk7ZnGySY4XSE0yVyHRI6DmC2KK0K8BEIsdBqhApY7RC1w7tKrTOhd1HidGlGrmcD6XLfwXwJaAbAk1blecpwhBxdcvlMzuArHemrkhJUj9tarSV/0GhzM83tZbF59WkLYH4L7yFpGiBLfqeg6NDHt+7z8njPRqlsBstVVszbmpGzlJbg2ksuq6xbowtlnwtWwAAIABJREFU7mKQJUazFmPtKokFRBi7qdmYjNloLN18Ru9FvyFrSx8kSTOVVOBLV3T56CUh/b9lbZI3jfOOBx/e4t7t2yy6BX0MHPsFi+iZdjOmszndSccw8/hFIMQeT0+fB1IO0lpujNhHBgRAraQgYUwB1xKYVGGixWQrbN9UKPGq9PyrIjxr5LtXKVOPa669cINz58+IdtbWhA8+eI/joyO0qzl78TyfffNNXvvsZxhtbBCVA7VskSpMypUIo4x3paSlR7THYmkNXf6WgqBagQAl3n0q0c+rorp14niWVC5SuacPTUn2xI9ddaWlQqqljVznZR1enbqTaCPGAIV9sXQ3lN+nha9nD9mvS01/fWJzugWuMy9yflrwMucshgJrApxyu7TxPyWwucY60VoXIVK1+l9rvQIJ1ltE1kU5dWGPK1XcVgr7Qil1qglDkSEul/3HMzqWDJny2KcYGHwMvHhWwPSTWkyevczLa/dJWhef9P9f5yine8qhWb3GEmgS7ZSnznUdhCrx/Pp5Pw3OfPz4WwFggKDWpmyI2WpM1hgiYegZusyQA7bvpedOaXI9QkeNMYGYPCkmauNJ3Yy2qrEatE1UrrAWFCTtyAZO+p6QIZvCZiBzPJ3iybJpGc3CWxbeM7IK6+fk4KGIZ1rjaDQEDZUSxXrwaJVJJq4s/JKyUvXPYJdVJCV+xxhpaUlIch4BlRK22H+iDBRFX62RxGHl0lEGN6CzKouYoGynA3q5OMiENcZQ1ZYcNTk0NFVF4yqcUeQQxYZdCX1q6Bar/vacYkkMDbo2VElRW8c4j0ArksqEnDmez8TaNmSMtVS9Z9HLAiLWpKYks9L4Za3FFetMsTkVsCPlTCz0riUwo1IRJU2gE2gltrJWy99GCbVtuSAkSiVZi46C1pq2bcXZZghFPRlZYFfjTxR++26BB6xWBAONM7gNocJb51CIewwxkv2AxuB0UVn2A9lq+mHOfHHCxQtXuHjxKn4IDENHUomqqWnHLShBZheLgSdPTujmT9BKFNhVSqQwsJh7+t5TVw0+eGod6Qw0WtNaQwwZP0iLg3GOUV3TNoqYBDDr84KunxNDlH7kWNSMUYXumXHO0jQ1foBYaUHClbQwCNLLGgKu1n6WALuIGGm9vO10QcprC5JUzYQ2p7PG50xlIRvZiNUKsc4oZVDaCPsgKbIWzYycRC8jRC86BchCNww9i/kUZxTOiObKqK0ZNyNxVKlbrlw6y43nrvPkwU1i7BhVDQkD0ZN8JA6BZCPZZ7TNJTaWYE0rCQh0TjhrqIzG5EQaekL0qBRpa0dTV2BFJNcZg65rsIZAAmUIOWOVRVUayzLoMbgmQRQ9DoC2bbCV0BAHH4g6ijZDFPAzakOXMo2uwGW66ZwnR1PG25t42wjTpgBRy/05g7TSGYPWDnIgF/0arRR+GAheQd1QqSw/OkMIjIyh2RhhUmLRJ6Jq0DL56MLAyXTKZDplkS3eNMQARpkishqoahHvbNqGpDyj0YjzF85zuJhjrME1FT6BNmOa8Q4YzWx+QDfMGekW5xzGVIzrTSY7Ey5fv8bbd27itEdlQ/QDNmX6vuP48Iixa3nx+RdY9DPqtkX1M7GIVlIZ6oeew+MjzOGIaW8wWBE41T3TbJj3PdN5x/HJnIXZYBhkXQNF3/fs7u5y785d+q7jjdc/TV03ss5rg3ViBy4aMonx5hYmDzx6ssf+402uXLpMTjVaGUbG0FY1+z7gB7+icAcf2Nzc5GTRCehlVGmZixhXAiWZUmWv+AVswH8rD4XK0vYklUfwXtFPFY8eHnH/wUOuXnqRL3/p65zd2eDDW3e5/dGP2AgDN66/wLHPZFthW8ejH77Ln/yrf07cC/THC5LbQPkzVO0RL33uEh89OmZ62HHl+lW++ubLXAp7nJ9rRnsJv3UP4o8w+x+y2UUOb+7xb3/vd/nh3bv4R3uMmou0vsJT8d1v/YD9R3MMHXUdyGqT776/T5+OGe+MCWagI/DDvVu82LxErTq+980fcGeqmFze4q2/+hcoc8R/+p98lk+feZHFvQX/6g//nG98/x36occeBJrnPb/9lV+l9oaJOsNoz8P7HRvdiMtxG3t3xmeuXyNfbDn+q11sPTA6d4XXNy8y/+53GL/6GexL12k2r6DHlyCPiFs9MT6hqbdRagTJiYYOcw66W9ydvkelMzfOvABHNfhtyBtgNQMnhPSEkRpQqYY0Inaa+VHHfHjMZFQzdNLyoxEns5R6lDoh5w6lK0iRuJgSfI91GtO0GNOyEoLMDukhOeW0igORjJRVSKyWFn2Zg8MjdswOtRP2p3ENDo2pG6lSpwDOFfqyQcJhg8rq2a3uZzqW+6IE5EChoS979U/P+Gd88aeLzMTBc/Boj9liwRAC46aFomthd8bYyYhx46hyRudEaC26adCpojIVyzYAAO1cES2VOFPcCTSusmxvbrLRGKYxkuNAJq9a3lTBZJYtJFKLNmvA0icf6pl7nuELnP61AoI++RqsbsuK6YOHvP/WW9y5dYvdwyP251P2F0fsz46Z+wU+JAwOHQ0pig5VJooTQolxQoiiHxUtWmdSMlhVCiPGYJVFBwODQVmL07V8x1mSf6XB50hKQ9kDYDF01KqClHGN48ZLN9g5s8nm1hYffPABo8kGn33zC7zw8iu40agUGhSRSI5yjqo0CqPEaS8MsTCZ1epapqiIcSgOcKk4/p22sIuNuBQ1UAqVl8L10s4lHyStiqCwHMfI7UovYUKJ03Spoi+T4fK3FLYkiV9aoS59EuUhJTldfdNribRGwI3lV/sJrSHL2HL5/7qY5tKqVERIzSe8jvx+ai6qU/ZBTBC8X92ldWGzrzEBPgk0ANDWnD6maG4pLQCGWNkuU/tTlsLHjqcADCRHWfusSq07Ky4BnXWB0NPP+BTY8gmtQc+e//r9P+345Ofn09G4DuCug2irhxYHkpxXhO5nrXHXQZofd/wtATCKWGdaDmqNsY7KVbQbGwVFHzBWgdYYZZj6SNefoEhonXFOJmTsZ3hXlUq5KE/XVUVdVaQkQbypalRGkigF48kG9UYrfCytiFksurKXADx4YUUMYeBguiDkTEhGrC7hFHJXUjWIKWGNElcDpSDqsi0IQis2N1FMxIqbhdIGjCbqChXFaskW1FR0MjIBCmiALJhZ2sisVphlnKuWWh+qADcFPcxLGpUsQd6XHi/n0M5RW40zCmKNOJd4YoxUpV8t5VgWpExypWrb1BjnQMFlc5EhBub9wMm85+hkzsHhCbPpQtqAkM8otH3LaDymahuyEdACo7GmQgEhaEFNs7TTxJTRKaKUBzIhIBWb1UQWACMj2iJCNZVquVICfjSuoXfSgqRiIEcBa0zOYr+qFU6gWVIulHhtS2UhMaSIyzWjtqWaWBwaPwz03lMoPsQQODlZcLB3KNV9V6EqR9uOGIZA53vm3jN98oT5fCasiZCYnSzwPuGMtEkZLfaPKhrmi56j4zlt3TAZtaTKoZy4xVSjCRjLYt4RQ0YhdqgxiqCt0o7WNqAiGc2TFnQf0RlsjFTF8UcEuwLWCkquS/Vpie4rVYSSMmS0LJL5FLAQNHm5wJ9qr3Rdz9KZJKVMiJ6cIKiBSd2Ic0blqFpHQtEHODrp6ecLlGlKgCX6MikmjLJlo1zSXI0EiyGijQhChRTIwROjtJ81rsFEmG019ClyMF/gFzOs1YwnW4Qyj1ZBJyCtXVKJUUphVKQyFuU02QcU4pADmd53xEHoiJV1wgBrRys9l6gyYbFAGytBYaII9kovadd1GLLYQ4dEdpmqKq4sWcDD2lREk/BKk5OojddtJRtrjsyGgd1Dz9aFM5iRoxqiiOIpTTJJeg5zInlPdBWDzuL6FTMqKVQ2ZGXBCGgSlaIPA2kWqFVFXY1IRqylZ4uBzlZiTTp0dENipgLHx0dMk+Uo9RweHuGMEUAnJfCDtEdpg6lh//iJWEYWYWBiQlvHyXzgyXTO+euXGG0YHu/v0sYFtTOMRiNUp7hy6Twv3LjIO7ffxXcOtkacDAnlI23V0LYWR6apLWkmrUL9fMYwX1DZBpMVo3qD82cucenSZbrkMHabybji/IUJuwdTdsYb1NWIjfEm7eQMR2YGVYWpKzY2JwJ8W8N4c5PLz10l+oH5Yk5/csJiPhcXm6pCo3lyeMRrrz3PUXePh/dvcWYyphmd42g+MPOQcIRkiWSM06Ai2+OarVnk4sWrvPjidY4ODnFtg62FgL50dFpuPac4xi8OyVivzDxbpXk2oHj29p+nevPjD336WRW0jaWpt9jZ2eS1114mK4V1isOjjrd++C7f+863ef3F6+z//h9xEBqC0fzK179ETo6vfPFr7N95yN7ejMP5wDw27B0NnLn8EudePsN7tw5odOLCqy/Rbl3k3M1H/NaXXuL5L32W51+9xsNJxz/93T/n0QfHzD+6TeMjF8YbfOrF5+iD4+bjxPv3b6OVYchTpv0x1y68gB8UurFce+EFzl++yDf+7PfZfbLLO7d+wN57D/joew947/6cR7Mjzp5TfPnzr/GVX/ptztuaWw//nP/wP/gNPrp/wo/u71JZxQvPneP61QmYM3A/8af/+t+QpgNf/9xnubJxlnf+8keY400uXnuR0dWrXLrxEjE9YPHDfW68pPjg4QGTyxWboYdb77L9wnX0TgtsgN0mpy1UcuQU2T845K2bb5HaKZ//3Bs06hxmaxs2tiAbhsWCeqTJUUGMpBBJSWNVxYXNEdiLqLpB49DRomwL2qDzHEIPsSf1c+bzE7p+hrGKDTfB6JqcFwIyWGFbyJaz7KnWT+N3quiDlVtDyJycHNO0DfXmRB6krcRhAUwt1s9SsVomXkA+BUZWrSA/43CW8yvJitKkkEQcnlMw/3Tmnr74jw3Tl/NqBdjIp+wWC3b39uj9QN00XLx8mZOqQRmF2WpxGy11ZcEPJO9JusRgyhWR6KW4dEIXy20AlTWRiNGK0ajmzM4mDZp44hmUpQtJdKZUFFe4ACkkYgjkPJBL9JmXrGBOhU3l9XNhBxTNDKXI2Uh1WgkF/6krUxLopy+SpMQpJ3w3MH+0y5/+2Z/zx9/8Mz68fZcnsxP2Z8f0KjD1A0ErqtGY0XgboxuG6UDs5iTfEUJHjgMRKepoBdlALra7NiSqpEnWknQFXqMGjVJGYrxlpTgEEf92hto6KbTERNs29LM5Td1A1gSv2Llwlq9+/Zd4/fNvYJ1jNJlgXUNQokeVSVg8qAFVtPRyiuQYpBsrJSlaFjZDLvt5Ho7IqYdUkZMi6SgsV4W0yupMKo9funRppUj+FCBZyulqnVft72nFnMiotEyqRZco5UAJulfFYqnXSuwdcipONbEM5fL6FAYQy1aYvMIr16vvS3bFsuC4zqpYByxykjZ2SrGtdqcFTCEhSDVHcVpgW7WY5FPr0+KLgFKiZ+GstCnD8jyQNnqW9qOaED1GmVVOsiqSsnRRWSblupgH6BXIKVPglF2yjJ9lHCwBj/I7ZVCn57p87LMs09XfQtVfvc9qHfkpx3pc8fF75IyeBTFywSvUCpQqcXVhuy/bgVCSZ+RcGFtaCdtb6VVhUl4vFyb3jz/fnwpgKKX+R+AfALs558+W284A/zPwPPAR8J/nnA+UvNN/C/xHwBz4L3POf/XT3iMjvft9CPghy4fNog3RJcVIGZxriCSMs9R1xVg7YgikFLBOUzmNQqqzfhhIIYryqdIMPjBf9AxRs/CZoR9QZKHXNTUhixVkVRnqysqA1JqgAyErzNZZotaw8AzTOd3gCVksO4OqpVofCpU+JUhihqmVfEMxQ5+Fgm5QVFZLG0SU/t5GZdCJhXLMTU1joEmZJkV0DkQVsI1iljKDVkQMYcikpDEocuqwKmFygpSWhmeSZCZRLM5l0ZH2AItWjoTQylHgCdKzXjsIUimurBXWRo74OBBiZKZ7+pMpiy4z5IQeRETT6ERVV2y1NaN6TOWMLGw5kbSlriomW5uMJhOqUmHWVlDfvESclwuWwMakVFDVgvbqYoGmjQx4VPmIRpGVAFsyuWUxtBbqWuOswahIXRkG54g+4wMoLLVRTGrR1KidpaktTVNhjYiNOquxRtGFwOLoGDMzVMZhjCxqVhvqqmE0aui6jtkioXDEqLD1iKgdT+Zz9vYPONg/YjqdMZvNCMGXhaYwUrRlc1JTty1oOF54tqqWsxcvMz065OT4SDbE8YiQDD45Jm1DO9mg2Rjj+54cZez1AU5CZBgCsY8YI1otXmU8oCKMk2bTVCQ0AY8xA5UyxOJSIYwTs1qkBDEvi7OioNZlIU+qgIMiQCoaGJqqsuLxrQW00zK1MTlhjQBiMWi0bqnbEfW8x1YG4yCmnpSWFQSD1rZQGVX5nkt5LCEbZ1ZUxtE0DqsSk80xo7pG5cxidsKgIjQtamOLk26O73rscIitGlRTY9oB24imi0+ROBT6IKCSwemKpAdpu3CGmGKx0PWorEhenItGTQ3AyWxGyIm6qjFa9DVqK8h89J4+CNvGKYVzYl/b58SQMskHmlpov5aIM5qTYQAlYrnoTIoDKkHjLHqygR96Fgm2tcN5je7FgSSojNdJrOFiT8JxbDRJV/SzjhA0MVmSaVB2ROcHUl2hmhqtI37wbNSWEz8QrcPrRD2ZoI1j0o7ZSB0uJ1LfoVzL4eyEWfQ432OoSD5hQ0BpRW8tQ1jQmISpaipd0WqFyYph4bFuzN7xEfN3HvPChXM4q0gmslhM6XxH1Vp2thucmdHWLTO2OYkNFkWbQceeyYYV0MQNxKEnJBg5y/7xHDdp0F7j5wmbayrjOOmnaNeQVCIny7kaXDdH55pKGXzqqMYVvlLopiIZhWkqaAwxZXaP9jl6skdtjdjE1hULnzmz0XBbSRtKMpobL13m4dvvc3DvFpvPj2hcjR+3mOYsye4QnEWZhLMwcj0TOydS8/t/8C+J//abjHbOc/Xa83zmU69x5eIWo9phVBZJmhIYGrNkK/xijnUlcGDVB/x0Regni2z9zQ8R9tUlLIopl8BSWhbRmpBgvFnzha9+iZc/8yrntjfo54EQRxwcHLJZNVx/48u8euN15rMTvvUXf8Duwfs8fqhJ7ybefVtx7bUr3HjlZc5fHHPhy58jnrzPK//w71MtErfv3ONwd4+d53f4R//VP+Tdf/cOf/inHzDvPV9549N87c3PcuG5l3nrvff5H/7pP2PY2uL9m3uMXcP2RsWrL77EV7/2S6i4yTvfv8kbm5f5/NXnCb7h5r1DXnj5dT68923SyRTOnufgwQXe+uOKM5PHcO4Ml1//Gmfevcl3D/aptxXhOcWd/i32P1pwIb/Cld/8POP73+H9e9/hzeE1vvI7/wW9crTNNpwDNva5ffM99h4dMlZb1HaTOt5geueEt775R/y9/2wD9eJ1PBNS3sF5R1xk7t3d5e13P6TauMgrV3+FM/mMaCnZWoLi5Kmx5ORQagsYmN38Ho9vvsP5czuEEDEXL8HZM5z0iXObHscOqBGKbeYnT3BVYU4dL7h84zoYTeg7hkGCdldVkuisGBIl+fmEMbcCurK07d64dhWjjTwjZ7QyGC3uZFmLVgHZlikTKUJbIiy6qlj+rGN7yX7TiDWrYm//iOmsY+NMopH0afXaS1Dmp75qcbIrb0H2kd3dx9x+/JBZt6BqasZnt8i1IaVE1TYYZ4jRMyRQpqIyFpOc7MPFiS6nADlKghk0xjhUVtKOmyKj2rI5aaiC5uFsgKFCxYCKA9pGEcSkxlCxmM1RKQCRhIOsVvpiS1KLXJUk4EXowBpyNhL7Kbv6fKqIiC/VXFXOkETPLsXA4uiAWd+x9/Ah3/rmt/ijP/4W7753kyf7+8JYTp4hepQzVBmccrTVmGa0TdIVxmbssEnqOtJiytDNIAyo7Mk5AmKJ7bTGxYzpoB9b5lkxCohgrTZgjcRZMRTmtcJkUEnhVCWi5MOAcZo+zsXdUGWGENFWsXV+C0UmhI6unxbwS8T0fZhjGMShbfB0fYfve9ELKLHy0A8SW6Ho+4G9x0dE32PNc5xMp2TdEXUHaFQCW9ZrT5QWC6UwxmFzROWijVVarshFDFwJ2GSsk5g1ZWHRpkxWXkIwdWqTqpSWua8o1HpFtgpymXshCOiyFIBPoteiUialSIqxOJxIIS+lSGW1aNCpkhcMYdUSrpUixiWDVwmz27qVWOSS/XCqlZFPn1vAjfVE3FAKojmLnlophGstu1BSBqvtCpgI4hKx0tQjFVBmxZQshdbVXIZEXLlrfXz2F0U+tRQBXYMSlIASkQwxrFryc5Q9cgnESI1xaVkr64cu1XZZD1lV35/SmMin56P0KZPq4y0nSzFRTm/PwqQWdrG43MjzRCIh5oghoY2wVQyOmEQ/R6UleFFyPbVkrnyc6bJ+/HUYGL8L/HfAP1m77R8Df5hz/m+UUv+4/P9fA78NvFJ+vgb89+X3Tz5yLr2uIj4Xc6QbAskHjEpoIm0tA03HgI0Bpy1OayorlommWGLqIpSSWQ4gTUxgfCAOER0jTTMixoFF3zMMPZU1tLUjBsWwELxRKaiMpa4bgnMYW2PxuChBda0t3kfm85kkYpI7Cn3cWkJGlGljRsA4Q0TcFvqUhNmgNM5odFnme3JR9i3VhiUSpwzWQKUjEUXIpWKgRAlaaSRRtIqcROTUFGqYDMfT6oKMPumxT2Ri8LKZk5j3HkLEZotVYusaVCIji7rVkpTWbY1OGW3rkpwqchxQMeAXkYCldoZx29DPBnI0VK5i1I7Y2d7GNrUo0OZU2CSsTVJV6J4OkwJ4IMU1RL7AdpQWE2OLOKopk08AB6NlYcwxgU3UriYnGFyg14GkoHI1k6ZiZ+wYNRWustS1gFha56JHoVcWrJI/K7K2hFINiTES+0zMYhMrbAUn7BgUj/f3uXn7No8eP+HkeMYwLF0i8qmgD9LmNF/09DuB8WiEtYaj444YE+PJhNF4xPT4mMOTE4a6IjUSCs3mc5yCyhgZgEmq2bWrsbYh2wqtekIM0hqhIMWIilHotNZhnSNVCR219P0vKWywWuSX7SBKSdC1TtdboqvLY7lRuMpSVRXGaGIMLJl5VXHJSVHcbqyPJBNYdMJoiUigsgp5ckH0V6M5IdCdKpZ9omI8bhu2NjcYtY7z589yZmeb0PfsPnrAaDIGZzFNy+TMOTbGLX3XieZGNvikiVEzpIC1TpLBJEFTTlKdSlE2w4hsDqaqMCh814ufu6kY+p6ul7VFGYM2FmWMjIng8YNn6DtxYdEFvMiivdMNA70fhLoaB9rJGG0NtbX01pDQDAGx7IoQhoFBaywZbY1MlWKvlrO02/gQCFHWIa0TQ+hJdc2879h7fMBCOfrel7EjlsKEjPKRyim0NcQU6IeOECXAsDlzZmuLebfgYt1ytla0GxOeRE216JmrjE+elAoYVlg8IWdCTqCz9JtrAyHI5qstISa6wTM93qOKnlFtaCeWlAJZgw8DQz+nrTaprKWnAVPh44DvPXWxQl46NeUcMMrQWEOtLWkQYdc8RHRW1MaQQk8IC4ypsAq873Fao3EY7UhKgdFkKy1NIScZI1WFs5bj2QkPd3d57ZWXOHvmPMezDujxg5fYO1lUstSN5YXr1+n2Z3x0833OvvQZjDZS8Y2KytbEJD7zuVLoDY3ve2699SNu3jrEmw12rjzH9U+9zZtffYM3PvcSz18+w1ZtRcAuZ6HX/wLBhHXwUilxs+m6TnRnqmqNtvrvg3khR2ZZvQGUaOhI9TahsrT9LUUXz188x/kLZ2m1Jg0iNxNvbKKUBKCTcYtaaNrbF2jifa6bCZXfZnqU6HcfcWHnRa5tX2Hvzgl3vv1tuns/4FM3LnP71i53bk24dvEcxju2d67z5pe3OZgG6naTzecuU13e5NX21znzB+/w/Q//gjTtYXOEri5x/trrfOoLb9AdVsTZFrc+eJ9HHy7Qw4JXPv1L3Ni+wje/9x5Xz7zIxavnaAbLv/nGN1jYx3zh6y9QH9zh1U+/wje//UN8NTAzlr94/x0O7nh+59d+k5vvPeQvH97ma6++yIufexO1cY6tZovsIbiBYBpG2zd48Y2X2ajOYDdq2sl5Zu4OL954D21rUl9h6zPo1ECER/fv86O3P+KVV17h2gtXsY2RynkWIUNpAUmlguvIVKBamu2znLt2Bdso+idTjnf3cJsTkjV4f4gawDQabEuzvY0xgWpjk9HmWZRz5BxJOWF0hbYVSteAI8sqtwy/f/yYRQJ8p6SVTxIcCrOi6CiZjEvCjljNF6VgyQhYG30/M4CRy7MEJQEU4/EGWmmcq9fOMp9m9X+NYzW3SuKRY2K2mDPvO2IWMVLX1lRZ9mTnXJmzEa2lNU1TFOFXSYc47S1PSQSdhcmqFVS1ZTJpOLMzJkxnKDMn5Equko5kFQkpMcRIM2R8VEQs4CAbSUKVgEmGvHLFUDnJ9q4rQIvmSFalVTqAKQL2lDYVlem6BfuP99jbe8yTB/d5//13eO/d97h39y537z3gcJ44mvfSpmHk0gvLUcS9k3VYU8mabl0RARawoUaqwX1KwuZUqRTNFDEG8BGrDElp+jig1Bxr5oToWXQzFAofinZdzvhSePPe470XbbXSIppCZBg83aIjBbkOwRfr8zCQUiBFSc77pIhJkZNasTlSiOQUZe9EWAcaRVU7YVhkuHDhPEop7t1/wO7j+1SuKuBvWol/SnQqucmSibw+5tdHfkqJVATB9brGXnnkkmUrpCNDUlI517AqmipjhPm8jOKzIoWIL7lFIkIKAmCkVOJnGa4CYDSrfWjpZvHxloNTgdGUkhSm19iBS9bIs+KT639L7nGqTfFJe9p6C4c8Z8l2L4BFOYmPv7eMD1W+gyXL48e9/lPzfvVB176YZfFg7SHrqf7y+qTCwC80EJb41OnzT0GK9ffJ5XyfevsPFmYWAAAgAElEQVR1QKPcv8JCVo/JqGwKOKNX3/lSIkKYMwGfFTFJDFGUBVbsDdau3U86fiqAkXP+Y6XU88/c/DvAr5e/fw/4BgJg/A7wT7K867eUUttKqcs55wc/8T2WP4riDywqsT4ssHhGlZyqUoi4Tq9wyuKMpXIONxiMlQUQsrgbqKV6rFSBrakYuUwz1lSuIqXIYj4lhiA6DFk8MGLOBc0LdHgYerxxZLOg94HFIhASaB3IWcnmkBOKYtVH6ZtKCZsyIS3tXCFrQ8oKP0Rw4IxaqfqmJOhUhVCEI5leZYozpogSZkMlK84KmUsZolqzpNEi+pmXZhHLfe+ZgRBTJEQt3t66WK9m6WFqq5bKOCprCGGg6zpi8ihtGWKZ6EbE54zVKAwqG1RO9IPHKNgYjfARZkcdfhgw2qy+L2ulyq0KZT3FuLItSlmgTEVxKDFpKWKMdQ4XRfPBmlRcMiSIlSRWF9AqraH9pW6TM5UxtJWjtwPZBzTS6lM3jrpxVLXDOY21poBYGW0kqcuZogchwJM2BufkuxcVZ7FXbZqa8bilPz7hyd5jZkPg+PCA6AcUIozlnGPJn1otkilzeHjM0dFMmCBNxWg0YrLRsr09ZjIe0Y7GKDR936Fzj9VanGtqh7aOFCRpzTkzxEDyiTQMKDUQER9max3r1kqqfDZRRNZPJSUppQIK6tV5aq1X7Uii5CzsEWAl2AlLu6rVSssS6dVaekljTgwhSavOvIM+cDKdS+uM0qCsVMJWtdcsVsIkUThWagXUGaVo6pqNjZZJWwGJfj5j5pRQW6OMhxAkQE1FOX105oyM97ZDmYqjozkg5xhSIEexItXGCDOJhB+ytH4pjXIGlTWhD3QhMqSBNPQY40TRXWsWfS9jGiCJTsrgJQkwCkIQMc2EWTlk5JjwwMnJVNhajVxzWSuEnmi0IvrIoKL0shrDkDNdCMKIoHiTp4ROEjgmwFY1vVLMuwWuqRlNdjg6mbGYnmBili7wIZFPPMEkbFPhTU8Mg7SvaE32Hp0DOfQ0kxE7myO2zmzRUtO3gdHhMYePA3mInEyPOTk5JgRxfQlG1kAZD0tb6VLNypqmqVkMlhBSQfGVtA9pjdJCXbZGi3Vf9pCsgEwxoLMRIA+xnfNdz3i8ycVz5yFYDg/nzGdTptNjyEGsk62ltq6AFkDOWOPwPuF9xDsRPnXGFbBJicNKVTMatWhbYazD2IqHj3bZOzzBNdu4qqKuW2q3gUkNYbZg4jYYVM/B3j59c5/xzhVsCuQwYLOSdh5l6HLkOHhavcFnX3iZ61uGXm3A1jbVhbM0W+eJdY3Xst+YWHSVfo5868cdzwZfSklr2mw2K5ok5pme/n8fR0lXCzV3WR1aBU8pgUix4EsFLEXZLCqT8TGi7UBWkciICERjee7aq1y9sM35ZgfVQeiOMaOWZuc8fQePbt8kLRSj0SYf3vmIoCq++JVfph5fhK7HjAxXrDARdr//Hg+HKeNzltHOy3z91/9jbn30fSIVtZ0wPn+VMBnzYL7HzuQ5Lrz8Ald/9EX+6u2/5Dc+/0t84fNf4PjOA770a1/j7pOPGOaHXL0wYjMbfvjgEX/4r7/B29/5M5r6GrUb8WTvgP/lf/0/+eLf/zxffv03sOMtHjx5h6PFwKe/+GUuvfQyiy7hUkJVmqgTyrScufga1bkNVK5ESCpqxlev8oL5PJzbxNgNabFIgflsyt7uXV7/0itsntnCNgqMxETkyDDM6fpOhGrrlqadELUBPcJeeoHJ2R0wkXrIbGZDGjVCiQ8DyupSte3AihAiymLqunyfmaqtSjJiQDkyUqVfNSH8NYCy9QQnF7pzSiJ0bTOI9fNylK1nBflvOIdKsFK48DnDaGNC5WoRyVy91/rPjz9WWhpKr+ZABoZuwdHREV3Xyd5gluLNwsB4NrnTxSUipUhVuxJzLu8XgJ1sCoU+lCKXph1ZJpsVPVOUnRNyR9KWpBJBS4w0hEQbYYiGlGugkhqsEo0ylWP5SYIsFJHkUGIPFcVeXOW+FCesCC0fHnL79m329/bY33vMzQ/e57133+HBvbscHjzh+Pi4JIoOn2uqwurNWZq7jTFknQFNMrYINBbNB5NRyWDqWlqk00BKA4EoTIDC9IxZ3Mjm3YIN73FWsfvgNs6xYjXHGFjMxAlxyY7IKRPW49ookIEuoFbKqWhQiE2pIiFmcnLdMobkdoh6TNYaW2ucsVJgKLGZtVZaEZYtECFSqQXHJ3u8/YPvM52eAOLS2NQV2khbqgB3knXllAk5lqJgYSwgwLGiWLAi7e/LVvSlg6DSEger0josFfcSH2tdqAZrbSrF1WfV7JUzMRXgQvqQJJZHqv9Gm1KETavYUSlFXLPTXgfQ18d8jLH0gD39mHVdiOX/y/RbAIhPZhSu6148pQ+ydh7r2hI/Ccxfv//HJejPvvbqc/Bx1qNae8yS7bG+Rq67sCgE0NBKSe61xgxh7RqtF5WfLWSUG2Ucrp//6v4sS3V6+hpYIwydvFaEFr228j6o1ZL41y2G/LwRyMU1UOIhcLH8fRW4s/a4u+W2nwhgoKQCGTKEJJSckCM6JdAKU/yolYKoRBRziJmu78hZ7OqqygKluq0l+dVaFnRrjFDjlBJAQ8vi7Oq6iK4ttQckYAphYBgG6elDkEvvezofAGkdGHwoCZGS52kjaFMZKJVWKJXodeb/4u7dfizJrjO/375FxDknT97qXl3V1ReyeWuKFClSEjAz1sgYwAMYfpox4AfDMAzMi/0vGH7wi/8EQ+8ejQ1D9oxhGbrMCCONLqRIic1mi91kd3V33asys/J2LhGxb35YO06ezC6SYksyPBOFRFZmnhMRJyL23mt961vf55MqSKI8mCELsUBnockYI4mZjaXiqxQ9QvfXStppRlgMGbdS1pUqoyeJc+HwpTNZixaG0kIhGkhIuSBFQrkalHkpqKeiMgZnLZvTDRpXY4xiuZzTxzlETcwCyIjYUSDEQpfMpVpLIoWAdpaRqwkNHDcNSy+uGs5oAXtywmlB+uPQcqPAWI1WFqUVfUG0tRZgJedM0hprLMbElR81MECFWFOqrzEiVrRGWDRGkhyDEqvcFFExoE2C2NO1EWsatKmxtkYbXfoA04UJb9B4AOM0zmmMtit6QEoJg1iSVVVFSommrrh+5SqHJ6c8z6f0QTEIDuVi3wSs/LFjDCyKjepi2TFfzjmdnbK1OeWlG9eYbGwxz3C6mJFiZGdrinW1OFroRCTSLlty1RQqYiKrgM+ZEHIReJLraYozjbOOXEXi8pOT9LCt9wzGvDYhrk3c6314IN7iXddztkAUVkAfCF2L94GQM8wX+ASz+RzvE6hCFVYiYquyLHkmC4VDl0nPGXBGGDe1U9RWtGCWyyXL+TGHzy3WWGKKjMc1R0cnHB2f8vxgn/lyzqWdHXZ2dqjHI+q6YTQGrYU9E9qwii1X1TQNPkRxF9EebYWJ44GoFG0MjFKiHlc01hFSZrHsWCxbck5iZWwMtrIChMRA6HsRe7I14triRNAueE67BdNxhbOVgDDWoUyZJLMmpkQbPcpIYHDadbi+o85Z6isyuFExgk94FQlZEVAkrdjc3WFj9xqPnuwxPz7Gdz1UYKPF9FL18TFjraH3ER8COle07ZJuPhcL6RwheTSJSe3YGjtmiwXHSoJbqahGtDFUVUXoRdwzeKkMip6D9OT6GDBmgrF2FRi2bcvR4RHPDxeMsqVrK2LfC2ChM0SPdlmYbIozGmoQq7nQ9+xeucyVN29yfDTn8PkpKkfaxRyrFFvjMX1KtKcz9HRMjpmqasS6WllEa0gRxSCpuEEJiNF1kY2xABUnsyWPHz2iHm/xyu3bHJ52GFOxM7nEtNqhbTOnh/s8fbzHbLHk0H/I1jzSL46J/YKwmDEyolmzVU3ZMoGrV67zn/5n/wS3fYOsRfg5NQ4zsiirsKqA/tXgHvC3p4LxoiqQMYbpdIr3oo9ky336WQHbpz8JASTWdIDJpYIswIU89wkwCayBpKVtKpFxJTjOxqA0xD6zbTWbr74E+ipWO+gCSvVkWnIFfXTMfM1083O8dPlNfvjOt8l9QN/aZrqzjcaQO4+a7NA+P+Dlr7zMo/n7fH/vLf7ij/8PODTsuMQyGGI349HRH/Nf/vrXuHl5yvMne3x8fMCD/AT7+k2uffWrbN++zfbUcfuLV7n37rd4Pj/g7ndPOX7e8U//o19l+9o/4Pf/7G1+5w/+ktmip/dLXr/5Ov/01/8Tbl39PFtKYfb32VjO0KcHpOUR482XhMWVodINITlyqiB5su4I1pFsTetb0kSzNXUs8ByqD1h0c65WN3jl9dtMr18WnQrTggoom4AeW0VszHQdBK+hrlBaie10rMluF3RAVQ0ugDcJqxLoJaSeWXdIpzsm7io2TQrDJktbg1acLeu6sBhskZkqTJy/BlD3osQg5CzzmbYluSn6KmcRvATPw1s/5SMtQ2Et6NcW15jVIWRt+xQ7XlVx4fj4mMPnz4k5lT5xyFmS2nVdgHXBQxiSmYjoUsVVH70pznRD2y5KRDyVDhgbaRrQOpIIElNqCGUcRlWE6HMil/YQlQ1KxJdkDSrxQjKGYG1ZMyWiqm1ApUOYPaU9OOIP3rrHvaeHfPzRR/zovfd4+vSpFNGCiKHHELDOoZuGFCOzeUvdNELrR5hvEucrQoorwJyh2KykSqytgahQyWBHI2oVUToT+kyOhkQQ61KtOT49YXt3h+tXb/H42Yx77+7JWpBLyp9h1IyoCzPPVqL1ZrSWfMRFzhhLulhr6rN7sMaIicmXglIihBO8F6Hx0EZ81+F7yU+ssWil6Pqe5XKJ73pS8vS+g5hKAVeeQ+9bYGCylYxgYE4Mj2QeBHBZPWeDhgQ5EQv5aXiNJPxDHD5oFa0l5qtYcjUoZHwMGhDlZgx/qapKYtbynkG7K+eENoNrjhz84nMN55NeiU/PEu6hCAd5xXpeG1jn/juMifX9/jQrz/VEf/j+kxgUF1/z05bNi6CLvOf8MdfP/kWgxsCSiCmtXKFFbKEI7CdWzjGrN57b83mdi5/ZMqo+sZOzP+Sin5KkTcSUHLWo4K6ONwAolALrT9v+xiWUnHNWSuWf/crzm1LqnwH/DKCuXakY5pUwZUYC2vliwbJraGpRg01KiH5aa6LKklCoSPCQciJ40ZVQZXAM1HdrK5wV28iqlSr4kHBpLcfUWZRfY1JgKqp6hHUW63t6H6kSWNegbcVs3nJyckrX9eKTXPrfBKRIOKBSSdwxtMFnaStJSouIqFEklUSl1ohAoU2JHD1RaaLRJCMezDZpfFQ4NK4IgKLlIfQhiXOLFvuenKUkpQo7YWDk5DwIJ8mjqo08RElJVbON0lZhlLiSjJsxTV0XX2uFM5VMxpXGhkQfCgVPKazO4DsZ+ClLBXnZ0rc9KlOYGrLIasqDa7RQEVM8F3hrfT4ZzpyfrJRi9bfh/8aCUa5wzqK4eMRI0JloNdlo6romhohJEUuiNppxY5mOaiYTx6hxuNpgrQRTUvlbQ+yVAYpoJEmofmSMcsj8fhbwm8HZIfbUlcNtTGi7nqbxaC8ir7l8DRUVBXjnhVbXB3rf0baeEAN919H7SAiRl27cYDrdIoTI4emxoN1KFYtaUepvfcDaiKssIztBGUsKkWreo40v9rTFahZFSJkYE8ZYktLnwIkyxleTes5nNluqAGHLbnlukstZ9r+xMVkFDIMYz0Cr7DtfFL+l/cYHEXoaiIkMk9jwXAzoeAGrBuRW6+Kw4wyVc0zGY7SG5VIAgjZGYkgcPH/O2++8w9HzPU6O9plMGna3t7l6/SbOVszmS5Sy2KoCoKqNjLOUSdHTdRmiIWrEJcf3qJTo+8jce0Jx9Cg+x2CsBCxGQKKYIs5V0sdZkG9Z3NPqmmEMGi0BaIzUxmBdvRIEFZYUZC+fiZTxfSDqIhp8coKbjtlWGl1XuMqRY8Ip6X8Fw3zR4banjKeOBRXKWlRlSVrR50TMBls31M0IEytOlGfZJU67nqPWc9DNOY1z2mXLtADAkEjBk21AZ6ED1nWFJhBCx2I+Y6EMfZ8IIdF3nr43IjxWQK2UMqNmRDUaEbsRVmuMqXBVgzaWxbzFuUachLxoGA3SyIZCYy3K+ClB6IPQbQdXHUSs95U7LyEteYp2MUORGVcTcoz0iwXBeyojdshVM0JVCtVputYLiKQt2lhyVnTey9hRht4HfEhsNiNCzDx/fsTp6Yz9Z4fcunqFUT0l6VNmsxkbGxtMb1zmvbs/5vTwKbE75fDpY6o6QpySF4H53jHz0QmT3ZrmUgH03FA19sU33ZBVRV96c93fAYYwzAFDVbeu69Xf/j/RwJA49GySNOVYSUI4rRQ5ZpyVWSEp6JS4LlRawNPlrGXvWcv2dIemUWgHOEOfFMo5LJ4YF+KsExN3Xt7CMUH5Ey7v7mJSZLQ7xduMC5G9jz9i8fQttI48nt1lP+3z7oP3+OD77xCfamy8hq03OI3POD14zP4H32I8f8Z0+xWu3K44/N17XL3zBbamI54dPCQePODW9S1ef/0WV9IVdseK7hXDF37xOvX1Ee76G9zd63jnnR+yOAg0wK2NXbaTY373fd77vd/h1dpwrcrM9+6xvbUtiWWw6DDCGYMyYyCA7sXuHIMbb0DcJUfL471nfP/e93jttRuMdy7hJlvQHaIqA1aRuogqc5qxFZPpBuNxIkUpOOisCMvM/QfPcHVidHmTra2piEYSUWHO/OOP+P73v8WhTtz5yjd4+fY2WW+ViixgHajSsz6wDpRmEIoevj7tFqKwBVwCVzKxQbpy/WvIw/6mT7Uua9gQizJUv4FV+8jPAGMkHzirvAKkvmdvb49nB/t0XSetCfEMjBjYUsO2vn7Lz8JQGNae4ZMrZbEmE1MvMZDOKB0QIUmFTgZiIipp9/MqoHQuTnQ9IS6BRbmbDav0QmlBGMs87XLEh8jJzLM4PeLo0Qc8/tF32bv7fe4/3uN794+5/+yItl2isrRZaiNi8nXTAGoF0oxHG0ym28xnvSS6mmI9KkU2HyJ5AFoT5BSFgVRqEsN/rKpQalRABI+tAiSFyhHvI48fPSbnzNUrL/OZl++QEWe7qqqlzQQRcQ/BE4MUPEPv8W1PTB1Lf0om4LtA10tbiV+KhlZJE0kp4n2H9x0pBnTq0MkXMo8k9TFGYhLXNKXUmkOGwtkK7SpU0mgr7VhKi/tg33ZyK5S0pGQlbfLC7BlaS1QpFmlh56ih3aCIZxYBzGGgpJiIFB0LMoOuxYr5VNZjOW5hPCCFulWVfe3Z9yV3SyUOzEqXQkwsTJuzePQicP4iFgZrr7kIdlzUczo33obrtLa+rR9nfX+rfajzf/tp4Mo6iHEuyF3b1q1Dhxx2yOFSKvmGOgOILrJC1s9Z4mpWrTcD4JZz0dXJ589vdW75kxoUL/pcq2MXZo7Mnbrc5lx08ESjRLSTCsiphbWek3gXoQfNkMLQSS8Cm85vnxbAeDq0hiilbgDPyu8fArfXXner/O4TW875N4DfANjYGOeYZZAorVEmnwn/GC1f1oAtOhgZYgCswRarmqyU0FLMYCsqNyaWNg5Rgo4E39MWu5uchWY2gBkDHDZM9tY6KmfFxlOJSJpzbuVOAAOtShJAleRmWq3IeNHvMAajHRoLUfQrlJZAQPBqZH/a4IolqNeKTmu80SRlUMoSfaZCqm6oKP7rWdFpQSwDqehKlH3mXOg6vHCBXE0oCpwzVCoTfYdve/yyo2+WjEZjEhEfuuIAY4nZkim2qtrROMuostgc6Lsly7alzxpfpHzruiL6Yo+ppX2nqmoRZFUi+RLTef/mATUU8KAIdmnRLHbOkbKi6wNaG1FCKC0dpEDlLE1Vk0InnvIhYKlQwePQTJsGg8b3EWtrmsrgdEarJFaWOYk1I8W7XYtauTJCKRRGSwG9YiAXZW9lwOQyaLUiRLGpzFE0RIZ+XGHCqNJmIH3lIYSCPit88mirUGWB9gFBzOctIUZxarl6hfHGFtEHZkuh8m5tbjBuGql0j0Ysuo5syuKRPD4E+iDgRVZC51NFhVrJgME5S0jnJ89B6fkiPa/ve6kMxESKEiwME9lAWeu6lqZpmEwmGDcIdAUR7PWRtuvIDAm9THoCFKkCkgiQpEubiNEKcoAMRmmMPlOIds5RVdJ2UzWOelQRgqf3kbbtWLYtH310j8X8hBiWBVSZ0/b3sK5Ga4s2NVXnhbXlNM4JW8ImLUCkE3vXvg8kpWk7z2m3ZN62+BjJxhJjmQu0CKOhFNpZKCJFvReRYR9E4FaqXqyCIJTYOmekLcSY4oSTkogwFRRel8Ebk+jYaA1xBvbomMnOqQRIsTg75VyCKkTjJCqWvSdPxtTTDVTt8EaxTInjPrE3W1IpzchqQj1hlgI9NV1IPHj0hEdHS+pmghk7sm7QzhXARmiuTVUz3ZjgRpmqWwrY7AN9H2nbHpUtMTpCiOTUE4uDUOc9fdfTh4A3uoijZZpmzGg0wmRhuYUgjI4YE9YYyBHf9tJfraQfVTT5tKibpzK3dQsmly6hdUVVGTSJ+fExaJk3+pFBJ3ke264jhoCqK2HnKT3wr+Qc+57JdANtnCy+xqBtxXyx5MGjhxzPWiaTDcbNhN3tMbEPVJevcPP2LQ7mp9QmsbvVMB1rdrdr/PKUWdsy352IKn3dUDuLcwlMB1oNqwWi8yMBZyDjUUjj1t886TpbH84CoPVqLmUOvhjYyZT94qrTpz4HpDgT+0S/7NFGSXuBARHuheADJyczppsT0ZsBrBGWUSSIaFhQhKNTms1t8iTTpSW+N+ztdxwdnTCqj3h28C5f+4U3mN19yN0//DO+8NIV9NTQP3yfPJrQ9Inka06f7KM+3uP93/oXsKH5E7/P45NDtrTlK9de4SQpPuimHM4XTHc3eGP3Nnd/532u/v0Gf2vMk/sL3ty+Qto/4ugv/4Kua3GxY7N5merSmPF4h5s2Ym5P0Du7oHumlzJf/dodHjz6CKUucf/9+7zzre/xhZsd/+Z//bc8/uE7/PIvf4lXr1/m6QfvUm1uM75+G2trCQ5jjc0VLBzJWXIOVLXCxoocd7j/x2/x//z2v+XyjR1euf1LqMURnWmpq8uF7VTRLTcYM4I6o3CQa5RZoK0nZ0PqDLkXkDckgw+iq2FUJRy15YKjdz7mh3/0XXa+8Dov7VxjZEbk4voh81kuP0urHJ8SHFt/Ds+Ca+mnb31Adwo9EhbuIKR39sSdKxZ/uodWSAfYkhzkOBRpBhbnz7M/qVzmNCRrir5tOTw85OTkBB8joehRxRBKYSKvYlux95Q2XamkC4NZa7VqzVXKkHJxkCi2j8oolM2gC4POW+hHhf1XEVKHV2AKyy6GJTGeQj4Elig9IecxOVek6PHLE7rTA9rjQ/r5grsf3ecH7/6Yux8/4uHjZzx5/BTf9WSjiCpiVGazgBWuqkRro5dkTTSlKpbtkrbrRMRSu5VGGZnSuiFM3ZBVKdasCruyplKeAVORgyJGT1Yyj+sYQGt8v0CFwGLRcu/ePZ4+eUJTW5x1VJWj63r6vsOHQIoJVCZFYQ+mUHTCsojGa+UKGKfQpajke09GWI5aSzu02KaCUQM4b9YSdIu2FeNRLZprpeU1pkjSBmtraqNZzBdFe0LaLY1dK0bluBpbkmQaUnFcSVkKwTFJ60/MgZyDiKzqYsEeemwMROWkRWctcR/CxDOQQQaFFNrkWRy2VDTqUhSzAgq7HAoIpQsIiCmA1XlHimH9GRjpcKbTprXmLIo9P5wuzinn1q21YurqepUY+KIjxvC3lBLKnAdXLrZxDX9bBy/UCg365HYRkFgVEFlntpwHMF4ILrwAIHlRC8yLWJRqmHvWXrO6VvIC+RxQWknWzkGVYnmJx4Y8TpVcDl0EX5HuBAFkhgOVuGNoJ/opE/KnBTD+FfBfAf9T+f4v137/3yml/gUi3nmcf4b+RTljBgulrIbku9xkXQTpUiKFXKyORPwDbbHWnFXpVcZUlVRt9FCxlaRe5QxEihmptGCA9M0yDGy1suLJZFTwtJ3HGREJRMvAjlmzWMjkGZMIwsWCiKksvT5FSq8cW2yQrNZn6FI5hs8ZFaWwVJlBeErTMWBzRtpPsiR5NktSbVUQZW0taOrZBJ1XgIBWesh0VlVxU4Sr1lkNxhisBp0DKki1dkAVrbWEosgcoy/tPYU4gSVXDhUsu9NJ6WHLIhaVNBtVQ1KOvgtlAIKxRjQmUqmyayWWUCWJTknsuFI+62Eb7FRVWQyMHvQuikhNEhXjylpGzrA1nUD2dMsZlVHU1qJypnIGNx6zs6nxPgoErxMxt+QkTitGi67BQIEzWpLjZCLOCf108ORWSOVcKVvobWKLG5OoCEtPqlAQK+fEyjdnok4r4FWhMdaIkrFSGOfQpQLctp3ct6zwIaH7yN7BITklbly7ysbWNr5dkHIQyrvWIrYUkcr4cAytMM5gHaBaQECIodXF2QqqROiHiaiMyrVJcpi8Qwj4gbLofelTPC96NEzcbSvBhTG2fBVwIkPbS3uC0YAqAqRloss5ixJ0aTNSOWGsK1o2RVwzFmeNUoEYntdQ9mNtTdWMaVKmbjp836KIjEloRlSV2KD1PuJjC8qQ0hKthfqZSdR1xahpqCvRbanqRgSBq0RCEWhRXU/WmhgSMURy24qwrBcrXoz0PeckDDPfd3TtQq6/Kf2wSUDMnKWdiyyVkZTEl54Bec/SlpNzIg2WZcaRUiSkiE5weDzDPn7KeDxi0XaEeUtjK3ROLFJiNFHM50uOlh2TyRaH81PmvmeZI2HRc1IqQI/GDZPKYrc2OVicApFZF/j44T73947ZvXKFjeoyHk0yjljmJ61tuf+J8XjMzuYGm5sj2tZj/FyEIJctPlaEvseknlCEnVIMKxA7JVXAWE09mlCPNzBdJDX1RdsAACAASURBVGOYL9sSaEHWmpAz87YnKpl7QaONw7pK5uUcGU8arDU0tWW2WBLCBqO6oVs85tGDR2xtTbm0UVNVY6zVIr4WPSoZKtsIcJwTOUVC39N1PdNNXbRgAjGJY0LKUlFwzjIaNTSjhhQge4+PnunuDuNLUw4XS67uTtncsKjrO2wbOLr/PiezE3IQ7Z4UEsGDSpVUQ2IJEKXMiPSSs0pE/q42ab386XZmf1dbTpnFacdiMadpaqxzshYr6LqOk9NT2q6jrmuGGkTjHElrMGNSbmnGnqu3wE4X/Oj5MT+6/4xaTZk9OSEsZuyffMjx0Qfc2p1y9OgB7z+5z9vf+xakli4uefOb3yAdHXC8d4+H735A2jvgyekhOte4yYTbu9u0z2a8+z24duczTG8u+aU3vsrhswd84bWv8ODdt7h7acGV5QGXxls87DoefPyIw3/9R3z+tc/xtS9+kSlj/Nxz8PgpD378Lu3RjK1X3+DWG7cx24fceWMXZyvmC7h64xpucoOjVPNHb/+AWYb9+YIffvwxczSjm59lQzec9oGd7RtUborKmpNnC7RTzPUJW7tjZseHHHzvD7n/o7f52mcvMd0Yo57cx7x6nWVQmNgxn+2TcuD0+RZbl7dw4yPGo+uo3EAlyQXZYYxmc2eTzekbZAdRG3S0QpfNNaQanSo2zITbV24znVwmF8HoQoY4SzAZqNUlRvvboEMgc+yy7XFjA8rKfLWC/Yavc+/4FAcpYt9IO4Za0Tn+ph/gDJ7suo7Dw0NSAXCHVq40sG45Y6nKKZVKMpI8DAnfQP0PwTPoX0m1VK0q4cOhjarQSUQiey86UsohAFdSBKvJ3YLQzaDKJJ+ZnXbcu3/MgwcPeP7sEU/u/Yi9hx+wPHrG8f5jjo+e47OGepPJeAo717GuojaRurZ475nP57LWpkSnLb0P9EHaWKyyhCRuKiGF1dpIFtt1VVh8IcRVojVcSa0LFlNEdHIULkFWYqEumg6ibTdcS+897WLBrBQecoYQvMQ2JVYZDjDE96ViRaWHdjuJDXVp5dVI+7o2ZrVuqoHrbySmGYqrgw6ENuKsmJB2FK0VMQEp04UWeoo+HITYFxFyeQ6VEjFFcfwrDAWkZBSKBXJCF6HwUApOwjZO1lHXUVpey7mkgb1DaYsp4uuqoM8qJ3IatGuEKbg+qlb3K2WcsVjLGQPjLMo+z7RYAyHWgfSzNgv5XNqY1ZA+A9vPMydexC4YnpR18GC9ZXLY3+r9+ewYw/Yi5sa5Y/wE8P/i/y+2xWQlscGLtuE5yestMKv54Pz5/My2mJxhVTAZmBWq6BQNwMVwL4c7Ve5VBmGxq9XzP4AYhWIhRAzU2QyvL16Ls99dwGXObX8dG9XfRAQ7LyulHgD/AwJc/G9Kqf8G+Bj4z8vLfxuxUH0fsVH9r3/W/odNbFOEDirCIlKBlA+QVpSZQcxOG03WioRQhtPq4Ss028yqci9DSi6sXj3YSgaUVqQsiKjKkHXGKKm0aiXdQir2pRre0ntPSIrFYknft6A0JgrtOyIVOmvO2jkGSRytEk4JypoQy9DhEQkIK0OTMaW6rGJAU1olyg1MSVgWom2nCvIJVhu8SqueYFaDhDLB6YKSB6Iy5SUCuqSY8QSUDuhCOzRlkctKUTUjTO3ofEdMGRs1nQ+0hS5HDOA1Y6tRWsATHxMJh21q+tDjy2Sd1Nk9HNC6LPmmsCmsKRWEtGLFRERwMaZE27XFDq0ge2sVQnQWQVGViybCCB0LCybDqKqo6kpo6rYSRFhblAXtFDkFumIJq5TQAWenM0Lf4tslOUJdj9jY2MBWluRFeyCmhM+QbIUPEe9TqeZbQhT2T1PXTMYTem9oRqz6TH0UeuKQBCljSiWlUNVtLGCOVOR9SCzmSw61oqocV3Z3sHWNytJalRCQLCtEX8GXRTx7YplwUwG9+n7QGDGFBRLFIYWzCe7i95zLeRdhqkFEKsWzSfm84KfB+8Dx8Qld1+OckyDAe5TSWKuKzd2wCKqijSKbNWbVbqOyWGTlMj5MZWgqJ2ynLGBU8D2Hzw9YLJd0wVNVFXUzoqoqmtEYoxOxclROsbHRkGMqDhsCVKaUqSqNzpmu61guFhwrRV3XjMcNo9GI5bIjK0XdjBhvTIr2iCPPZizaTkAboY6RMtTNmJQzfd9jtCiOd10v7j/WFpqxIltLyoEQZLGojKKLAWt6EftMmZA6sW8ehLS0pqocffSEKGKYfUjsHx5xxTh8zCx7TxeiiBIbx6LPdDEwW/ScPDvg8Y/vcv/JE9rlgtR1uBA4Wcx4oDQ6JfR4xMHxCU5DRNNlS1QVyz7TJWhTJhkL1qKNw1FhhmAtJYypJDhxrri7WHKQOxxjIPqOLnt88NR2hHMVwYhjSEgCZDSjKRubHn84I2lLHxMhK3yGLoHTmtOjY3ie2NndZroxISEq+NYOOkgK3TisFRpzjOIuU2lLN1ty3Hfc/9Bw6/YdKitMD2MyPrRoV2OIOK2otBFKMzKOfXmWhclkhFWSM9H3zE9P6Lq5VB8ax/Mnx+wfPeell19i/+SkzP+eK1d3ee3yDne7Yx7vP8OIFACVdczmPTuXR3gPmlIxloVG1rmhnf7vEFv46wIXfxcAhwKcs2xublKNpK9dWo8SWcPG5oRtu4U1lr4NGKWxQUKqNlVYB8bN2bzasr/4kN/83T/nYD7hm1/+ZTZqw4areevdU4yvefs7d7m8ZXj5F7/MH/7REe+//5TZ4TEfnv4Zk63L6NSRiKhdy9Vf/QbXbrzEy3i2Nq/w9nfvs335m9z5ysv8xv/y37P/+CmzJz3fynf58fsPObHb/OPLd/j85THfbo/54MkDXr11hy987e+x3UzIJwfsf/SQf/W7/5L5wUOWs32mL93gtV98hS/8wnXuvPwlXrr+Em+/8zHPTzNP9zuUiXQbmxykx+x1LY9P53z167/CxmiTH771A+zmFqPJZarGk/ISVxmi90yuwfHyEfuPPmJ++pQ3v/4G08sbLGcnnB7fYyNdYfPSVVJb0YwsWBhXVzh4+pDZ0x/y6memVNWOBMsAqSQKKoDLAuiWYo1NIMGYxdRjmtGUyk4gO7RyK/BiuNtD++bZljkvSvGTn7EXPX9DRT4rSEmxf3iEG2sumRG9l1YCd46FceHYn4LXpEoMNsT8KMQ60rmfaz8XzwSAGDk5OREAIxcNMQqTIJuV9eCwDq9bIFstlfasBJwQMV6H74v7EQnfi85F6Fu6TuJEYfJEYvRoDCqJFboClm1LzppZ1/HR+x7rD3E5cLrX8fxpy3vvPeLuw2csQ2bZL7C649I48fpLt/jqm6+xu7WJmWzSmgmHfcXxacfJ3lNC75mlGclWtN7j+0gWCy5UlPZQCSOFnRLjeceJwZ4+xBJgDu41+UxgXA2AhRLlDmUs1lVk35NtJW1TWgqk0rIHTldYSq5Apq70uRjpxXOgGAuE4AtTQBL5wFmhZmC+CEBRTlUXlz691g5QYrBUkvpY4r6sJfaVvAdpfV0BaJTYTYq3WUsbc0zFbQUwOkvbpRJGioB7FC3BstZYx2g0YtSMwDl8afEo1eYVeDFc/8EdKhMLWLJ2PYZYcSX6KUnbxWR1iCOlBX0Fw6zi0YuFWK31ioUkINNFMOCTQMI6uCBrqfrE3y6CI+fuszoD+YdzGj7fRRbj2XnwiZ/Xz3O9fWV47QCWDPs6e5+M97QCqlixI1b6HMM/pVZ5olaDhezZfZH/F1AmRRkrq3lsACHkTVoNGoppBWAMV1hHibNSEsZ1NhZdQONUTA+GFpjhXAacizVQG/Qnrs/69tdxIfkvfsKf/uMXvDYD/+3P2ucLN3UGw5drtbZsSP83prxGCfUppVhoyIX2hmbw4D1DXFNBimRQGVtJED1U+wsooNd8GkXDQKj1CoVB+rV1sQrSWmGsLom1oL+EgmhlSG0k60RlErYSPYTKSDKuiShj8BF8SsVFRNwUIhk79BpnsT7KhQ2hFWQNIUnyLy1q0kJjdcKqKJUpKHbm0kPqrMUqEUk5GwyUz2fROmGMCHgaa8mmJ3aJmCLzxZykMrZ2xJRp254YxMO674WerpSiTwIUbW5toOcL+vmSuh6hRhPSwfOzXq0CKK1Tv4bWkpzzSrH5HNqsxG1C+rgkmDA2CjPGWaw2BBVXyN7w1AyWuiqLta21hsZZrAJFpHYi5hpTwmqHrUaMm4acI8YajAa/u0MuLR7LeSeLaAj0sSfEVmhjSqq9VTPG2FoANAzauGL0KR72dWPZSEYEIJUpQE+ga3v63tMVTQgfAlpH6WHOhamRBZyy1mIUxBA5OT5Bp8R4XCxgjSOkSFVVTKoNmjwiLFrwgZy7MoZE0BalCDGK6FpVyX0fkNALKPIwEa5PpKkIwA6OJMMEenFidq4qdquJ+XwhLKEs7CpbVYLmUlpEtBa3l5JYKgU5Bpy1aKsJqaeqRkDCKnleiWJLSs7Y7FhE8UhftC2d78lKoW1NPRqxvbnJtSuXcMawmJ+wOZ0y3Z0QQqDtWlwrbQEhJLq+x7qqAGXy7J7O5hwfS9Lp6poQExER4apqywYT5vMl7bKVFpMsFFW37IhJtHkErBCdm5QCoe2huIok7UhKWlCM0sTKkn1LChVGQR8kuEjakDG4qgHncAP7JUEO4Avd86Se4X1g6QMHsxkuJHSnmfmId47HJyecxMc8OjzmeDEX9fYYqZXCG81p9ISuoztZ4HuPy4kYM6PpLrYa0/WR/eeHXN+09LvjYhfrUMGsxp4PgePjYyZ6RB5PRVhNaepxA3qTo27Jsu0JWnpnq7oSurCrUbEnBHENQFuMG7HMS3zUKNvgMfRZMe8j1chw0vY8ffyEzedHvHTjGpV1+Lancoau7/G+R6tMDC0heHxhSU03Nrmyu8t8fsLTR4/Y3d0lhCXKjdFKRFZTMTtRIZBTIAdflOZlfA5A3iAuq5EvH1reeucvefNzd9jYqNF1zfPFAndwxGRji0XfkpTieH7KkVNsX9ql7xacPt0XJpxRtN0SpSNBK6yFGBWmMA2UAjsEsGVd/A9uM4pmw66CghhLAmIUdQHHVKn41Y3l+PCUxaxl3GyxOaogwPPHB3x48B0ez0759h98l8u3vsnuP9hFb0c+/uFHHB3BF29/g6ePDrg00nzulV3uf7DLhz/6iK6d8HBP8d0f7/Ps6AM2t0f8o3/4j/jSP/4KoxSJ4ZjHTwPXFpf4zDe+zP3n79PpSF0ZDvwe339wzAGB+OQJbx485etfuszV6w2Xnm/xC3/vV7nyxmdY7u3RHbR89623+PjxM+b7R3zx2jV+7eVXuWQqHnznLunaDu3iGKUye8/2+a3f/N/Z2Jjy+P59rm1NubE9hdjx8msvU1VjUnfMZ19/k83tLZTuMCyxV3dI0XFkPXcf73Pjzuf47Ge/QsWCRfeU6Wub1CfPUU2gPfmIpn6ZZmPM4vCI5V6LjRtsNdewaoTckICUey0Zu2rZiSh6EFbncOtChsbgtjbRkykJhxIlios12bWvi5u68PVzbBmUsiyXMs9LkSLi7Hn0Qq3OYf18fn4AY2WCoODk8IgcE1u7O6Wq+POf/7C2tssle3t7K8cLH/xKWH04+LBGD9OBVuKkpgubue/FltpkhS5FpZiDJKJa2rIWbY85Tew/P2H/4Ihxr+jSjHmbOe48p92MZVhwPJ9zetrRzk/4djhGxVMBwuOIUTdH+RPixhWa21/i2iu/xM07d/jcnev88meucXuqqfKS2bN9PvjoIe/f3yenJYsEXR/wnSf5ACEKQyIEohcNiIG6n1KZhwcGY5aWBAEqDIMV35BAK60xpWU1FTaEQl6WC/tZKQGwpU1NY7LEoFqLE5pTogWSWU9Sz+Kn/Ilbq7BG3GEl5CmClzlKodYWHRlBHlBaYmKTFDpK4i6AQ3l9aRkZqtRy/sWAQAUC/bkEd9AT6Lp+VcWPpahOOa5KEcjF7UtiscponFOQo4xIV1GPxjhn6LP4HgomtD5e18ZOPgMkzjdmqNXPwzo2WGKv7+Es/jy/2xe1cVwEKiQXWwMmVqCExBoX2y3O9vtJMOFnAg68yNL1k2DWi1pKPnn8F//t4pbywIpgFVentXh6ta/hdYj0gnQllMuZisBUASmyonQqDMutOvuuFGjRPEyUonGUZ0vGQi7dDHK8hLDbU+mGyEGKlbnczFSc8jJZihEMLJ6BeSOfx5ifiC4Dfwsinn9rW8or8GL95mlkgGktyVfIiqTEfidn0VFIhnKjpDSl1ZnI40BRVOUlMZWLvlIH0+eTaaVRKqGUVDR1FuRVl8p2RpO1YaQqsoJ22Yn4DFAVmz1fHCaiVTRaURuFSEAKWKJQZC1d/qHQgL3AJOJDjGJkRLAzRFF31kqRdCoWQsXGEYNRYFXEKo0dcDCZyckxEmNBZgmA2DWRM1YbclagxQ503GhqqyB4unlHyoY+ikhh0prWJ2bzBX3npV0hi7ZHHlp8Cv3bNhUjpTGTTcxkyvZ8Tu8jXduTySu9B2dLZIMCo8WFJkaU1lilVnQt770ky0YzakY461i0Hc62BR2W5BeQyVxoNig7TMyqgDyKyokqszWK8ahCa81y2RJ7j1WysOUMKiTROzAGW4lmh74kYmK+8yyWc/rQ0vuek5M5x8dHZE4x1QjtanwG7xPKGUJOIhzqHK6yECRhtVahbSUCjyHRFiCj9+IZ7nuPMY7etITOozTUrqKpa7EcU4rFckHOIiJqbMb20pNqiiNPyBGiJ0aPV5pQaPnyvIsryVBFU6jCWz8bf3lVQmL188VJ/GyiPlNIhrPJWimNGtyBEPtdozU+9Fg7ONNoNBEHaKdxxpERFoRRkdFohDI1bd+jlaJ2DoM4mYyqmp2tLcZNTcoJHwKLRnO6gMWyZ76YM192OOu4duMm45HjL77zbf7qh+8xnY7FrnZjQt2MRCBMaWKILBcdwXv6viPGgDGKuhJApl0sadseH6MwMChaFD7QLloJpBBdHmN6UUIX5aXSBZ0ZrHdTkmpKUhVZi76LRpOCFweA5LFaKLQR6LNYRjrraFzNxNU4hDWlkMjEd4nlwpOVJirLaRewOaCT4TjMSNZxcDpj5j1kzcZkk7br6Ap7QDstLLRKWn9UHUnzUwkgIzhTkVVkMV8wn89p2w188DgdsKrGIO0vsdgq+95hJhIUKiWMFuNGLJuG7Gt0ZVjmsKoYxJSJfc98uaQNIiwaswFTE5Shz5qoLbreIFeGNnV4XeGV5d7jZxzPllzZ3mRzYyxCpiqTCFirqSqFslrYUTExqhpuXLmK35qQaWkqS46erBeo3JLDgtb3OJ0hefGyD9K+F30geE/0nq5rUUoVVpAAWyfHhxztP+bDex/x8o2rjLd3qLZ2OW0j169c4uB4weHJku/82Z9wq6l57eYVvvDFz3K37Xlw92Pc8T6XLk9JLHGuImlNNGeVjrI6UpWxN0yn/yFtClbFU4qInNas6M/GaFKEHGS9TznDlmbJKeqZ5k//zR/x3sc/YOOliNqErW7Gr3/5VV6/VhOnr/DZOy9z9NFv8/Z3f8CvfPXzzPaf8Rf33ua1a6/yvdFdZtUJftnyp3/ypxwsn3L95ZvcfOUhN6+8CvQ83vuY3/v9v+JHH7XcuP8d3vzmZ/jFr/8qex99gLWG7/7Ve/hs+fj+x/zfv3/MzWkgGQi5ZWtng5Pne9x963v84e//nzzZu0+qLC9du8mv/co3OL73gL37T5iZOePFfRbLAza3alSOPL17lyPnUF2ksZZnPz6mctdpH36I3en5+i9+jtHlMUmdoFjiu2Pwnr/8s+/y7z74c+58/st8/vYbWBVoDw8Y7W5jVE2z+zI5P0J3S7LtyW1L7iONg3r3MsvuSBLDEMh6iVAsWqKqpDm3VKaHlCZp8KGnqTMbd67xJftVLn/hi1jbsPAd46rmJ4EVw8r0aUCEi1uMpUsxKmIQ8ePZ6YK62lxT5y9HziB9tJ/usCmBNgJg+Lbj+fN9rDZsbk1RulipDqXxnwU6ri2qOWdOjo95+PAh8/mcwFm1NpakfaCKxyDzacpr2mKFrWBtTVIS/0pCGyXB7T19L+C6fHRHt4T9gznd4SH3nj7m4aMFz54fcTh7zqI7Zb7sWC4V49rRNGB1Zuy2uXnzVf7+m7f51a+9hrv+KunS61TXX6eZjth0is3UYfpD4uMPWZyccrr/nO7khNS2tMuW+WJJ24q2RAihCGRGQgxFyLJoyBVW6QoYWk+mS/yfk2iAxKLLNlzLlBOoIuOqlIjxK4sxjqg7FGbFDrBKLMSNziu9IaE7DBOvtIe8II0HREBWDn0e7MDo0gpbtMiyJHRaKbHHDgLQWMSuXhjZwhqPZLIXDbxU2BRBe3rVkZGYoNJS4EjxTE8gl++qODw6q2msLqVzI+2gSVqua2tISUCyhCS4OSaSimSTV+NjSKIppfOz1gq1es7PjWQ1xI7FelXL51q9Q6niQnJepHLYXsRaWB8nwz14EQNjyPfO3qNWw7DcynOgxU9i1ryIUXGRHfGTGBxDcr6+24vMjp/0mQf2+bBPrSCt9n32Wnn2yzpJ0aEooNcZmyOe+4yrL8RsYbiXOUVJr1Fn17Uk1TkWjSxAif4AGSPM7KzAapFmSEG6D5QSt0xVGEbqrBVlfcqX68W5OfDi9v8bAEMq7ao4YZQe3zIhpSi9x7n0huSUScGjtcLVFSlB8MJmUGqtQqVVccvKomuAaElkWIm+GF2sMDkTStHosr4UyyklIi06F3FBnUW00UDW4qOssl5NCllpYoCAIWPRWJxScnNVIuIF+TQGrQ290kQ0XidsyrisqLWhIuGzxxNJWhFyJhTkChQ5WXTOWFUeUBQ6s/qeYxK1YlN4xwWgKRAa0UiPtVeZXslkSU5UdYMxFTaJQ4SyhsbK5Bm6orwfgKxQMRJTYG9/j9PZCapy0IzJeo5RGo9QfTGgrEI5Jd/N2SAYpDqG6UtrLSJ8yGtMziJGVJ4Vq0NRTz4bqGc9VlKhG2h5GqFXilOFo3IOazSjyhaBVY0qugfkRNsuCL4XG18QN5D5HK0LgGJEQGnLjgkxMKknbCw6upiJyrLoPMfHx2A0o1paVWIUCiEU+6ACyGWlV+KX9aha0cJ1EuHarASM0llQcGstdV1htTB5hMIVISessVRVBWbNLkoVdF8ZcdgpAX5GJrDei1WwD4M6uoBjsHZdCyIPnDmIeEH4q6oqLSRxNX5yPptkUwpl7hkm6kFZPmO1pramPKceZzSTumJne5udrS0yiaOjQ7quYzLdYGt7k/3nB/i+xalM7RzjnTG7W5tsb05ZLuYysSoIcczJvOHwZMbT45aTNlE5x+XLV9janLC1tc3J8RH7B4cYo3HuEOsczahhY3OTppngmoa6GTNOUUQ3+1Y0YILQME3xKSfJdVy0HY2r6CqZj5KSecAYixmuT/Hi1APGnA0pR5IGbUZkUxGigpSwVmOdxaiI1lBXwtAKbU8MvTgudR3RVkyMw2FIJqKbisrV5KxJClRdFzVvxyJGiBmlEgufmC89SWmqpiFmKyBkzvRJyG6uqqirhmR6fNtSOU30nioGJtMx09pRW41KntQtiLlGa4fKgeADtbFYW/axonYOT1iirh0ju0VfG5Z5VoQ+e9q+Iy07Tk4XtF0kZHFh6hIk5RhNL/HKZ3ZY2Ktc2jT42TP6Rwq3MccmWPjIo70DUk6MRqInkym2dLHDh4TJkmg465hOprjNMVWTUJXBmkSfe2bzA/aO9ol5zKSy5L4ldh1ZWXRJpgehtuB7qVRlTQg9OXh633Lt2iW67Ln36Ak3Xr3DK5/5En6xJPewuXWTqtnh4Lije3zIpBrxOTvhtS+9yWK54Oj0OU8efsSdyzuSLCSPq0YYV2GUwSRNTY1OVoLwn16s+PdzU6yo4kJmKwG4UfhO5hdr9EpMuB6P6KtIVMdweoxfHrBtX2PTbvL++9/mn/zaN9naWPAXf/rHbL78BvPjBe+99W1OHnzEwZUFz44e8uN3v8flWzdou8TVy4Yr44ZudsRWnvDkg31+MH0Xc9Ti45x/99Zb3H//mHxqefu7T3j+4Bvk6jKPH+0zP+zZdpvs5MxkY4uHD5/yP/7P/5wbm9v0yfF//eY/51J1leXDfd5/9A4713dpsuPyBjjn+a1v3UeNJ5A/pvuruzze7wXo7AKxn2HGY3QI7DYTrjQO18+5+1ff55U34NLrX4b2CbreJIdT4skJP/i9P+Q7f/4DPvP1z/GlW9cxp3f50Q/+NWH5nBs332Bj43V8rGnzY7Zu7OJnhyz3D5lcvoHayCxPHnJ6+JTx7g5mIkWgHLIIPRpZV0DiD4fg4TqDs0BoWZw+44N779FNRry+fYvGjlYVv0/c9LMolvNIwqd7wI2WrxikRVNrTV3Vhcx/FnuodUGZTzmWSrFSjmsNO7s7Ep/YAbgYimc/+wAZVgF8ipHDw0OePHkitqLOkd2ZyLO6wISEgV8gRTGdRfehD5GYI95kMX5RRfgTSDkUTR/PwYHnhz+8y+OHT3j44Ye8/9495jPN6XxOF+ek3ErbA2N8TNy6dpNf+IXP86UvfIUvfubrvPHyS1y6ugvNmKA1vZL2rwqPSTNUPAFalMuokSHYzCJ6+pTwKREKWN+GyLLv6IKwC0NOxAIADWwHybUuFFcKMLG6jgXwIJdcQQt4YJQpaFtGO4fyFRErxcosLaWawmIhSxFQ5dXxGCTHV+dwUTxRrURYpW1FekTEYbAwUF2FNkraKtOg4SCCmyFIY68qRdSUCoCTEzGmYhWbVs9IVKWVwFrySsNjJZVbkl/R0rDO4axhXBtyTkX/Quzi9TD2cibHQEyJvltSVY24l7GWyJbPSR6SzjOFhDVKxScAu7OEWaPXzCxLerYGwNmfCCasJ94XdS1+7u3CWy/ue/gdw2cf3jaASPEMEBh+/yJGxtDisv4zfXNCvgAAIABJREFUnBfQX38/DJpwJa8dGOqrlrE10I5PHk/rMyHN9W1gVAz38tz1K+DBAHacAdMD4FOe88JEVSUEGd4nDQml6LAOnA15hZUuABGvKgKyqWS3eo0J9e8DA0MurlTBQ0m2yUJLEfpYBG3I8gsgYZQoyQ+0rVWSxLA8FL0EKMGdxWgrCUZRvD0TnkGq9zkXIb1cKj6lpcAIsBFzEv/qIedT0utTZPYkWdSGbCuyNmR0EfKMOC2vDVkg+qS1MCmU2OTFFPE5YDLYpNBJjqMVdEpaTQexPIb+tqSE5iZ4McM0pZG+ImOKj/NKZEcqw4WkgWj1RLzO4CM5RLTyoPpCWVfkqNFWPpezgsKa0ossWEggKcXSdxiVcc2IPgRiu2DeLll2nbQFWIOrKvHwXkMTMZK565zxSXQfXBHG1OZMgbmPYU2NmxVQYYzB6NIfrYoY5JqgkDYKYyR4kOpd4OT0WAZt0qAc1poSCItAp1OaunKgRLchhgiFZaJTpl94slY465iMLVWCeRdJsScWlwRjHcrqIq5JeUZzOT8Bw0LwdF2Hqxp5hpRUE4wxaFsWWGMgUcA2qQKonISBYoStMm5GjEa1iMBqAQmUiZiiWdFFRd1mnO1RFEGqtpUFsKiXX9wEkNOr3sIBXQ4+CHU1SIuH0aZ4jpsytoaJfhBvGib9srglGQcqiX1XXddsTTfY2tigqSqaylC5GktkNp8xnoy4fnmHW9d2mc+OaeenOK3YmoyYFEBnc2sMZLLS9CnSmIxOgXmX+X+Ze7Nny677vu+zpr33Ge65U89Ao7sxExRIgbQ4SY5sRvKDY5dju6I8pir5r/yUpySuykuqXFacyKqUFFmWKJoSCRIgiKHRaPR0+05n2tMa8vBb+5zbTZCSJaeKG9Xo7ttn2Geftddav+/vO7QpUlYVbdtyfh7QxjKZ7hBDT4xCw13Xa1b1itPzczEALcaMqjGjqsBqTVGWWF2RENmZ94Gm62TTo8SA146sRIImdYGBUWTfHp0lB9IKVJkxFsibMTMiKkvvERNIrXAqQOwxObM+kIjKgDP0MRBbT9dJ1JrXlrKoGBUVpS2JEZZNQ59CTj1KrGPAaU2lDViHMh4dEnSR1AS0l81uCOJXY7I5WFkUFOMxJiba1rM7HnN46QDHinFlZV5LntTXoARUVSi6tqdUWYccUpZayGYxBAHLqqrEVBpRBGWaL5qYEPZGL0k867anHE05vHKVF2/d4eC1KyzNJUxaorpr7O4dEhFmRbdeirFcEqpsH8SRPiGmZp2PFAkk7QDxtrCKwmZ5WGyJGOrVOUdP7tP1JZUx1Ms5jx58zmj3gORGOKOwRlMVBYVzsrGOkeg9RWGYjEfsH+xz/eZN6tMlx8uacm+Xy4cH9OtINZlRlHu4cpfUJJ4er/j+D37MOy9f58pkynEX+MH7P6U5vMaf/vAnLOueb33969y6eo39cSWeGLl97FMQ1sx/icX4V+bIm2Mta+u2OJDluY8+d5M0J2fnxC4SdM+5/gyvTvj8wVNipbh54ybnyxP6ecBOD+hUxecfP+TswZyffP8vWH7+PjcvzSj1imU65+13XuHT0yfEcsk7b97ky3sjzj+9z2JekGYvUF69Rn3ykKP5Y86fnFOvO5zSVDh+9sc/QNsJuhzRNTVjCpzSjNmhsw2n9ZKjRcPh4TXe+8Ejru+Bf/oEXQB4vPKMDg5oSCStWDees0XN2fKM2lvU6DpuOsN0BV1h0FXE70xQM8eHjx6y+NPvEdUu4zsvoLRnfnafxdFdHn/yIeVc8bu/9TY7L77E/t4lfvjDv+DJJ+/xO7/zmyyWI+5+fI/7nz7kS9+6RYo1oe9o1i3+wVMe3/sBShleeett6NY0YUm5M0PbkpAaVNQUeoIJAEJBlzovkXQLtHR+xb1PPiCYgjtvfBNbVdtKf2jLpvz783+/ePwtBvkAF1hXoJKGKABGjOrCv6vNsPvbvg9DRzSbEhuj2d3bzUkkF198eIOL4MwXnze58G19y/n5OYvFQuTLCKM1RDE3tzlme3jiQKNPbFMiYkyQxPcqpmyWjicET9t2LJc19bqlbta07ZrP7o0ZT8b0refpAtpaUzeytsUUsDbShSX7l6/wnX/wTX7vv/9n3L75OtbsUQinMvvBJSxRDNhTh9IRMMRk6XH4qCU+vm3z3tgQlKaLkbrraIJH3DkiUV1o4pFAk1M0dC6UcqNTqJDS1Nz4LCCfOZlna+mkBgQCYOM/Jy8l6+IwRlKyF+aj4Rpvr3tiAKqG8ZQQaGALSOWyDm0UzjnKqhTj9lYkjtH3hBgw+ZOG6AmZbTGUheL/lzbXQKnMGElqE186FLmCQ3h5vNI5NSPXBSqnn4SQVUTiS5Z8wAcYWNsxBuh6Qu8lCWqoshKbxtX2enLheub6anAjvAgKwAbY2ZgXqgugolyw55gMWxBBLucvSNB4DmiQx32BhwUXvTfUF96NP884fva9vwg8+UWSk1/0s190DJ428rwLzx3e9+LP8rDbAJ/52qoEKmYT2Txedd6TG6WkoZ1r7pR/j8NCO2Ajerg6wroYGptKfD2leT58hXmfj5LX11pv5jKjBU2Oeuhcy5OGf78I7qY0fKgvPn41AIwkdNyUDClKEdmHHhMjTkuXN2lNMIqYzfF07uD3XqQR5AkqxQx8gGQa5800KRG1mPUMPgxax3z9dKbesc0tzno4DbSdaKkxaZDUMRhpyo0iyJh4FuRJVKk8AYP2XqJdAZNXmCE+KKoIOqJ0IRvsJFGrSQkwobP+zmRZi9IyKcekgKG4HybL/EvpzQ0VcxZzSh7lRUOdsgmT1YrgcofeZAodgegT61r02ViD1wllNYYMciQAK7q1bDpZWIsxCuMKqlHFeLJDKEtW9Zq5EcrbsB912Tk7ZhqgsgajLMY5TKYI6iATUMwRYZukCT2sNXJzaC0FvFD8VG7X5Rtay6S4cUZO8t6g6Tqh2VnnZNxl9I8krIYYFMGDtbIZ60NPEzrKSuOKkoRIWwRIkDHlonRc5PMYnJbI3ZCXOvGEiHjfb1JHtN6a/8j3lD1AjEIbKU5SjNIBGIACHSFqkgoopSXm0UgvSR6nM1OI/LlLjILKRkorhmt156nbPgMKEpXbtVmylD0uFAJgWKMkClVrdiYTULBcLem6XsAm66iqCmtFziJu1mljqLQFNLabxSp7klRFwc5kwu50mkGxHu8VZWkZjUf0oZdud4pMxyOm5Yx2bMF3TMuScekgBUrrSElkFm2viL2hGYlrtukjzjpC21D3SbxTigJNge87YcUUVpowPuL7wGp5zplaoBU4q5hOx+zOdphOJ7jS0PUdESmyQ9/Rtg1ajfLmJW9qAiIVi0JXtVo2DimonLiRKZTkFA48wQtIZHOcKikJyOFly2SMoXIjShWhDKjWY7rIyFXs7h1iy4pyZ8rK96zXZ9S+y9pGGauVdYxDpGkaovdZexpENiXkElRm++yORwQTme1MceOK1HnqVcP+3i4HuzusTueoJPGpSilIEouafE8KCWcte9Mx+7sz1lpjo98AqxLVFuTeSEHkOt7iAzKvxUTXNtT1miZoClvy6u3XeOP1F9m7uk/pDlBph9BpulXPwY0XeU0b+pB48OknlCoy3d0jolgsVzibOHAT0CZ3I7SYGCtIWjoYavARChHlNDvTHXaqiocnpzy69wlOa5ZnJyRjqHYNEMQTI28KNDk5JXgMAm4YaylHI3Rv+Pz8jJPWM33xOmVh6EKiqKbs7l7m+sE1Ht19n+WP3mWvW3BlVPLSK6+yUgV/+P13+eTBGQd711DtHqNuisspQ9FCtHlsDELW4Sb74sV226nc/P8/r1L76/pbv/jV0oXf//r3lf3TsxHOafNcAdYG6yprS7SB88WSzz/7gGsvjfj+uz/m6IOGf/xbX6aajzlaHvDRwzMev39EkXZ5+vhdvnp1xrx4idfeeIWvf+MrfPbhfyLqJau/OGbxyTE71U2u7U742re/w/q85NOjmrnV4BUfv/8zwhxKVxKTxsQRul3zwrSk9QkbDF3yuKpCp8iVvUNiXLGrd6iPNGFcsq40qhrh3Igu9nz48C4PTj7hJz/9gPVcPH6uHe7w9pd+jXc/esxnxw2msmDHLGKPsobPup7F6Zo6NcSzFT95/zNW/AfW9YL5gxPufvR9vvHrt/nqW1/mwek9nqxXPHq44pN7DwgdHD2qmVy+ib3imanAzsEhhVHcu/sB737/Ls255vO7H/H6K29x/dIdFt0T2nTO1Ru3mV65jCo8Ru+hg0b5mNunBryV9XcUQHlspbF4TIyyNg2bY6W24/b/x2M8hlsvv8hkx+AUGCN7Pp2bVc8AF1mqK5Nn/CWvClvxCbk4iKQg8rK+jdSrJSnBbHeXoqq2j1Wb3ucvfj1kS5OI1Oua49NT5ssFRVmKNDd7hqn8eSLSGBF3h1xk56ZZioneJ3ql6UPCdx29X9K2C5bLM+p1S1v3RA8+CA1vd/8yhzfuMJldZvTwnMefPcU/uk/sEn1fC8tSJUwF04MRk/2K5BoCNUHJ+q9waBWJ9BgCKnXyGbUl6RKfHMEblJfvImQGRhcDbd/TemmQJS2+JRuhxoUhE33IcIbABDF/F8SIsRZlRYIutZLedHj1IL3MrG+dzfuHInozJGLKEgcFyuTUsPwztR0qX4hHKalXVAY84iBj16CMwZUVrqxk3+elSee7Hh86SmsoCkf00nQCYUamDOxtPAtyVx6l8F6agMKGGCQYeSzlPacwwNVGcjT4AcpYEiDcew8piPWglnrL+4DqO4zzWUKyvXfTUGvBti5JWVqwaas+O+8PslIBhi7UbirvZ/OtkL5w1dGkOOw1L/54aOJtzTCfOSd+HgAZhguICbHUdHFT68nzhnlA/rwFKLYMg83n+gLWxvNylhSGtKWsFGAAXdJmzzy8vpQ7+fNEYXKrgTFBZhZlwE3GZR5fZE+uSAYUtp+XXFM9Aw4x+F2AiVvZmTAths/OhiKjMliiUwbLnt9fpOFxg2eYWA6kmIhKTPSTihumt1biIDawMbggy/qi41cDwEA0Zt4nbIKUIsvUs6sVNibaruOks6ADXmVDRu0kxSvIRXbGQkiErgctRbYgPSajk5poNL2RTaZ4RESc0hskSqNlpgF8Ejq1s5YYPV0UGUs0iaQNfYr0KeGTJmLFtCkqTCHShbYJmGSy+Y8MSh8jlkRRSJeyBEwKuBAIfUenND0OhUEFhU0GYwvQAaNaXBLfD5UMHkcwThgQ9PR09DhwGm2s3IRGENkURLtOjMReDFG97mlCwnQOqyyFrSSSMSR8COIa6yx2VGG0pu5bQuhQCkLXo4lMyzFGW1ofSR4BlzqhOY6JOEYUeHQMqJhwIVBhmNhSDEm1xmfTrxjlfbU2zKZTWWzbjpRaWZhUInpPH0VDrAuLKjTKgPJRgKpeYTWoAMEntLb5RjH0fZDAlM7LbKAleQZnUEqkAFqDwaKCyJmISbrRGPpkqH1gTWCkoShKUtMwco7JqKTTCtN0tDZi+xWus4wpSEVBqwKeQOeF8heC0OsUCQLopIk+CBvBWXyK4quSciqMMWzokFqjrCX0ibZeQbK5w4KY6XjxEFC2ICZNSJ5ABTEySS1VEkmUL8ZU+1cZzxdY1WOsJ3SJdRfo2pBBPyl8rU64GBmPC6ajirLYQanI07NzfCeBol3Xbdgwm0UnQQhpAzZKeoai1JqpEW+Y3cmIg0v7tJkiOpqMJL1GJRarBW3XYoqCdd8Tlz3jyjCaTVChxHctfQrsTEYU2VujbltCikzHFevWo0wixJ7L011u7M6IJnD/EehRRWwCxkSCh5ACZTXCFiV9G3G6Z7lakYxG24r5uuHJ6VlmBWmcK9ibzajKitHIYe2YddNjgqLtROKhjUFpYTKQ9/QDC0rnzZQa5iZk01i5RO972qbO8h+YTKas12v6EJlMxWi2LB0mRlLvSb3HmYpyUqKKimQsO5Mp07qB5TlFYSidoV+txJx2cYazhqg8fR9ZtyuCT0yrCcG3mNRTmp4r+4fEoqT2Ld5ogjWE0tET6bpO0nyoqL1l0SucTTRhTd01pAiKDmcKnOoZxZb92LH0Ad8Gdg4nnC/O8Nphk8cp6IqKkEpUHLEz9uxNNNcOduG0YXz1gNff+jIvvPICjV/QpIRKPckV+HKH3iuml67y6ltfpmsb2vkJtihIKnH/wWM++WTN4cEet2/foiwOCU1P7z3VpCT6QLI9pDVt3VJoDW6Hyu1w5/ot9hgxPzlnNNnhzVs3idWIk7bm7Pgho+lMNr7Gsl61WG2YjMacLZZYoHQCDu/s73AQep6cn9A0S0IhKU22sJS24ubN6xT+jPuf/oi/ev+c3cMrvHX7LUpd0D15yDde+zLvfP03uLY7o/KA7knKEIx0upPvodj0+Ngg7RcaM5uNF8PmUkDw/5zSMQFRPfuTi2Fqmk0vZdM927bSLgIYF86VravH87sVlRk7SpnNa2yAl2zGp4DReISz8PQMTheB//d//3ecf/yEG6ObTFyHdiN+7bWvUo8eM71yienei/zk3b/i9o199gvNo0d36Tll3p7xx//P/8XDh3dZnM65P3nENT3lbH6Oc1f5y0ef8/rX3+H1a2/ywwcL5p8+4OnREaOpw6qCqBMnBbx06wa33JQ///H3KQ4Sv/X1V7n/+TGPHz6kbwIm1hgfeTo/x44Mr994iSY2NM7TrFu6Zc+es7z2wpTffvsl7KXbPHzYUy8eM7UdzGvUZMRKK1RZEEcN9cmCozDmRx/f5/P5Ee28Jy12eOebv8PS3OfBKmBjwekHHzG9WqFPIj/76WPM0Z/wzq+fka5XTK7sMDp4he7oMfX5GU8e/ZS0LqnWS9af3Oc/tX/AtTcOuPzCmOLJI0hL/PVEs7rLZOcmuqjoFk/BFPjlDiodoqopVhlwimp3RnSOpAPJDt/+hWHxd8Qxnu22brXeOor31eU7YwEvosSxk9ao5CE5iFbWZqtRyktdOnSRFdSrJcooqqrM41HuMXnHCxWU7wh9ywfv/ZQY4fbtV2ibnpQZCZvPmYZny6/MlciXQt5XM+AniqdHx9z97D6LrsPlNLvogzS1MkvJI9LgLgT6JLpznRRaWfrGc7aumYeGetlRnyzo1ieQ1lgrDDzbWcZFiR2XqNmY8aUX0Fduw5XrXL0RSeOPaNs568fn6FiCVtSpxRNx4xGuGGMxOFrxQtIWWfgChiyzU1KAkTxJyVpp3UgKThJ11+K9p2tauqbd4EnBe6KPGfdKWSKun+vIJ5IxWz8FlUCH7BYUtiACwgZUyUhxqA24iPea5CQRQTknHngp5OogSz7xGYC44Aegh97ZMJdJ03QwLZeiLZBSnz08Eq6sKIoSnEO5CoLUDKnxqM7jrPhuZBxA/MOslWjulJNY0qbm3fgiJC+miIRIsrI3DCnkghZSBuRSkvS9EBWrTqKvZGfaS10VpXEknznitSHansJqdGHpYsCnXqQC2ch/kAekocbaFP0KjEYZm5NdDAmJkI8hbmQ6wmaHTMXcMHcHw8eN/ABNCjEz0KUpGSMZvFOkixKWzcjYAjnqQgJHTDLATD43hgZLCFnCLcW2MdIkw0uTUxE3IQOg8LlxobUWlrGWhmLKi5TaXAn5kxnGipK0yxi3HhrSWB/YHgLEpQ0YoHLNQpYUZVNWrYlKrqHRSPGfY4b1kFCiNistBP9MqoicY2JgdsScQkJuosqsJCbtKdfJiu13BBDiFsmL0UtNgDTRrbL0QYAlrcDHgFaeZJ2wPzJDOW3sGIba/BcfvxIAhqDHRuIjg3ShtVUUylIGTeo9y9WKehVpU8AYy8xapmprTEJRUtoCl61+N1QjrVA2I61WgQ6ZmREE+UlS/KZeEGqV6S3k1AsxOK7wqRen5s2XK0VyDAql7AbJDX2Pjy1KlygtN6Mnm65og7KK2nuMEi+EQilsDPgY8crQW0uXDCkZMe5RYoxkjKEioGLc+Ev5KMVqGwJdhD7JSI5ESqVRMRG0xM4aFMbmOC1rCMqTdKTtPYRA7AMO0boprfDRE7RCty26KuTcY+5WGIuOcvOVRUXlKuqmQVlFUIm2aQjnZ+h2xeJ8Rd91jEyFwdI3HbVdYYqCYKAjys1glPiIQNaSiVuys7IAhhSotIbkSF2HrQpMka2dlcxC1jgqa3HGZi8SRUBubmudmEa6AlIQbSGRvm3pYiNyBhJOKUbOUBYjyrJCaU0XoFdWkG0ULYhpYfACsNFTE+h9JBmFGxW4qHBJ45HoQ1kscwdaZ7ZFdgo3ZtCiDfFgedIfGDeZaiixwpLu0LU1QyZ4CIG+bSlTkkUkGkIXcnSqImCIHooEDsn2TsZRjGfs78zYn40xJtC0rWhMc5KPVRprHCObGJcFY+ekEFaw9gVl4wSQiWKeaaV9nhdVoUYqJckBMUXxf1Ca0ml2RyWFEdbMajGnT5FyXFJNxmhjWC6WnK0W+D5gypKR9zRdTdNr9qc7TKuKyrocgWcJyCQbU8JYQ2Eq3LrHuIgyhokr2SsLQhEoCks0GmXBqgKC3chZTLREnShsknx2K2yhEADtqTvZgBjT0TS9MHpSLshsSQCss1l6k9HmlOUTeUJO21U0O8vJfaVSwmmF1RadnDBzkK6JcQ5XVezv7ckGInn6phFKrbYYa4g60rY1Vmt2pztMxxNM8qTY4VcrypSorGXeNrTrltb3WFviCkcIHcv1Ak2g0J5iVFDYwGg2oT/vWDcelENVJY3vefr0KVd2xyg7IqiKtQeTPAyZ9soQUgexA4JENDdLbICks7xOWxmjXYuO0DQ1WlkUDqIkOexMSnwsmV17hRsv3MS7klWoaUOk7WraBNE4dDnCxMhktsd4MiXUSzGBLSx9gKaNPHh8zHLdsb+74uU7Y5RWdCnS9i2l7XAFuF4W876D1BvGbsxof58DW7Dse07mK9b1krX3xKIipIR1FX3VCgUXS/ABqxTOGkLohZWhFOPxiEvM8GHNZ58/5fadNxlPR3ifaPvAtWtXKNM1Hh495PF6zaV5TTj/lG+//Sbf+c5vEO0UQ8KUCnxDHwuCKXFKDKS3G7btZv7Zv38xjPC3O7avIrPsxS7b80e88PiLP+PC43++z/I8mff5TxGDsHlSSnz80ed8/PE9jk6e8t7De1w+eJn/7n/4F7gmsjg9pbp0ndOnJ+zvOB4++pgHJ0+Z03JK5I3XX+ODj3/Ej/7P7/Ph+x/w4O59DncdFFP+4ns/4Qc//EvaGGn6Pa6//DLFr90i2KsscKzmS0baMz97xE7a4/LuJU7WT/j884+YKM1Zc8psus+LX7rF0WqBG1lMOSI0HpWWWAzeaz6752lDYjKZUqeEG1n+p//x99jvzjl+713+6A/+kMcPFvTRUzdQrhJjA02qcSNH8Iqxu0TbV3z28JTj+w3Xdq7yu9/9Lt/4p++wtPc51A7Wa5ruj7h8e8QirfnRecOTj3v+/Mkfsp60LCcjVr8ReOvLr/HKm68wqca0Tx239l7hwd0H/OCjn5COzql2LnH0sGbyZMaLu28w2dlBmyWoObqcY4t9Cl1COsTbApUaqskOX/nKV3jhtXcwxYiaSJW38c99wX8nIGOQQxqToxcTEj1sBjZbxHUJHRu0a0h0JDNCxamkManIkFUcvcQkn52f8vv/9t9w/cY1vvWdbzMeT9l2lJ8btwbCqqFeLSmKMQDleCysqefBvS2SAZA915BNfFS5+aZom5ZHD5+wrtdMZjsEDbENWSorngx9lHmk81EMmWMkhp6mXjM/XXB+smRVz1m2T6l0yTiNGNOhTYNVnp3JDi/ducVrt+5w/fZL1NMR7583PFQjViMxXi8uTRnvTeF8QtPX9NGTrCZZTY/sNRwOm6UVJntJxCRxmik358R5d4QuJjg7IsWCGPWmaOn7PqdH9XT+oveU3shHLv6HjtnfLoMa2pBdB6XozBIOrTXWOqIqCGnw7cqGhSiiEpNBZQsp3kOPCjnJcGAIDHTqAXRKMae+SA0Qhw5zTkpJUVLEEiHPdjGjDlWuN1yOcwVjLKW1KCrKyqGMsGdUCBhtsIXDFQUxJXQwm+jMmFm6w74NpTOzUPaIBAk/GIzZVZYqq1x8h5QEyCdmxxSRpA9GkDElIjkBBgE1lE4SHKAEKBrYABuPlwGAUIMhJ5uCPSlZK7bf5LOHsAq2wLtSW+A8xQHcy25imqETBOSiW6ctuHPhVTd/SkNgw8BsGJgBA8DPFuMf/q6jsB8GdtZwrYY5JksmhAgp+zmdv9efO/KYE8VATnRJicHKQpjY+sL1zOdMQm32nPkEBUUQawCVm6MZdFAXWC3PrMwpcxkvMDAY/CeU+GIw+PYNYM9wt11krwDD5JVS7shpUBnwSCpu5jaFRqXBS1LUDRsxWB4nSmtIWyDsrzt+JQCMBOK1ADklAYqi4KCa8Mpkj2JW4KeGle9Z1GKyuGcMEyWmNV0nJnOBtSCTSehmUcvrKiuxlhi5KEYZjFI4ZSmNwWkj6BeRAZDyRqZbrTUhWXyUBBOnNVYXYCNWrVFRdORGJ4oUcFGhtMpyEkG/YoAuKVJ201conFGQJJ1k0NEJz0x8M3y6cAPnDlTMk4ol5AhZhe9lWIlJ1UDZi1I0GxlsRilU9jGwRrwe2qYFRBeurMaJLBRSxCSJa0QJjSyuJB1EJY/NNDHvRbPel4mqKLDjClNkJ2VvwEnsZ1H0xChAhU8yQVtbCBJrQOlEyJS2SCD1nm69Bis+GcZaYSIkKeQsCuX9hZsi+2CQTVGtAFXaZGfjjCpKkkxW4WmF0Y7CajExjIKOG6IglSnLPPqemCQhxiuNMU5kEtZgTUFpDEXv6aMk0fgESW3zqkniDi4eB/m7MBmkCUFomshGqyzL7InhEXWoXCuvg0zQWnxIlIbge3zoIXbopGgKS1daeiXmkarv0K4SJ0ay6VPyaA2mkfIyAAAgAElEQVR2yKoOAd91JO9zNJimKgtGJaTMXqlcybhwTErD4d6U0mlsYfFaEa2lCxDjOe26JcQk6TsZ4LNWoofFE0MARZtTYwZPicpZlBF2z3g6ZW//ALRmuVxyPp/T9bJoR8SLoa476toTWg97u+yOR/gAtW8FEDRCPbO2gCRSEWPFM0QrcdVOpcEaARpdku6z0TIOBq2e0YmYBLjQVuKF3aDjddkTpffU6zWrTWSbsJ4GWchFgyVg2zlQQxdg227c6pPjZiIPcSudqr3Hx4CxlvlizqSqKIy8T1mO0AiYuVqv6KKmso7e94TYM5jGtV1DVY0ZTyb0MdAu+vz6ciauKLHasDebQKgZVwZbVlSjCWq+pGkanNM4Z+n6jtVyzm5ls5yvAK3oUoCoMEXJaLqD6ddgS5IpUcmjTEHSCbSlbXsm0xk704LFmceHnma5JrYLLB7vG4JX1OuamErKaoQyjnXdkbREBodkCL6TDUWUTlnhLOPxmL4qsRYx8B3GWb2ibXt0Gmf3bWG9JDTWloBHG40PAZ8EyDXJYEaVxLKuVsRj6YSNy4JOWVKIeN+wMgsKW+KswoeWEHvqZk3XB8hSMleUTK2l1wII3fv8EU/PFgQUuqoo3JSbt18h6cRHD454cPcjjo/n7ISeda3xZsLudJff+uZXGY/Ftydq8G3AFNsuyLC5/vljEJnlvthmH/JFj/3i49mNkBQGW+Bk8NG5uPGIPGta+At2c8+fwgZ7ebaqHTrWCaFAK6DrIg8f3eejj37K0emcK7ff4J//8+/y8szgV0sIiu//8If8b//3/8zXf+Ntxnt79MFw5813WJ2dM5+vmc0uszM6Y2+yorpT8vqbM85Pav78z95j6R/SEqmV5f7yhD9973vca+Z43bCb1rjYYEaOy6MrHBS7XB4HLk06lotjdnfGfHa04l/9L/+WkQq89pWX+PDTE86fJsZR1o/90tGt5tB40tmS/X3L7Rd3OHr0E07byHFbcr9uadOc1szo0pixVfjG40Yaupq+1/TtJeoAThuuljd4+eAyO+NzHh59zOGXXuKzTz+j9Mdc+8YL+PSEF3Tg5Q8ucXz/hEs3X2V/OuP+Z/eYLO5Sugp3cMj++jbV3i3c9S+xt/szXr09ZVydU58/4kxF3njntzGjQ2EE6RUxPGYxP2Vvto/uROonhXuJXyjmD4/Yu3xMeTn7Ufw1Hba/zfFFBnr5B7z70885PXrC9dAzSWuuXNnB7Y+o+yOq8oDp4TVsWQzDjcFM3hrLnTuvivePq3gWvHjuM6SAqxwvvnAdW4yYz88JyWCsYTabXnh4Bi+GUZ0gZV8brWUfqbKBbbNa8/m9T3l69JikIj0R3xuCly18iD1d6KmbmsViyfn5GcvFOfV6QVOvaVdrCuPY33VcMh2Ho4Jrsx2uXZnx0u3LXL91ib3dy0zLA3RyxKLgSYp8+sFnqBZ86rG2wk0mjHZn+NmErl8Quw5MoIuJpuvpQyTmXS3RkKKVbrgCZUZZi49spo3FVInCnhH8E+qmp25alus1x6cnrFYrKaZS1ttnucNgkfmML0Fu4JKywaExuXEd5DU2e8EheUVYCkK3H/bZWxPDoRYjF86RlBUpWwj4otlhzD5iQwf9IjU/gESMK401Yqgp/lh2E21vsrRZu4KyrNDWUVYi6fZdsxnLA8vCKPkcz8eFXhz/v+wYzF43v7TK7F3Zw9kMDG8oC7lYHhoyG/NONRT0mVGnZD1VudOvNswU8dBQKW5G/dCcEeYNmYGhtnP+5u3T5vVkNUnZUy6DF/nzRJUlLGpbtH+xSfAGJZAVcTBkTTF74gyGlxqUAENaKQEU0xY6g2y0ryClgCaSM+SknMtrY0obV5bNtSCRUyAy2JXBNp194wRIyXL47YjL8vnIkGKktv+YWUZsgKxt7Thcb3VhysnyouEFnluCty2Q4cyH7ys/90KPRC6xeuZcL3ohDwCL3Ef5O2cAXLbjdhiTKaq/8brwKwFgwDAY89SUkSYHTAvHpb09yss7dMkzX61o6jX7RcHUyU3WtC3z5ZLVuqYNvTgYK1j3HW3X0Hd5kQgB5QMWhTWGUjs663BGDPAkVdSinEWZbG6SHClZwqAolMBoSEmykrWhTx7teykKVZQJyUkChbWCBiet8UkTgsK5Ap8/Z0yZUaGGdIqMeCoyYipOmSkMyQWyWTcxZuaGIkVNih4VvVCGJOIjd/7VZjRGJO87xRw1mzTOGYrCoJxkaCbtiUq6yEXh0Frjg0gafB9Fgxg8KSRa5Wm8x9QCdrjSUZQFPvaYwuBSIvYQ0JIw4HuUNrhSqIceYRgM7rjKadCa4CNYK/4dGSnVClIIG2Ah+LBxrBWgQ6RCUQ1ksy1VWuXJM/iePvspJJVQzhCNAeMwWjEZTRg5iYiL3ouzPYnkofW95KebDpNlRaMYGMcEhaKsSmxSrHuJg7WYTHHczjAbX4kLC+/QlTfGUFhHKAI6x4H2wYvztPZELbphAaUsYzWCYChNoijESVpnmY0PnnYxF/mDkWm06SK9l2QQSyELvpcISAOUxjJymtZFUhExtmRcjZmOCqalZX9/F2eUuP8rRdCaVddT1x2hHyZAlfWIUlwPEU3DZ5UFWP5srBWmgjHYFDGFY72uOTk74+z8nKZpcUXJZCwO53XbURYTQrdmteqwao1FkktSku/dWCsgBtD5VgAVxGMhhh6VhAGSYqRtWmIwWZKVXYgQvaDRmi5coCvmDYNzDqcLiqKgWdd0sDHnjCFTAPOsLc/NetKhE5F0tsdQkKRjM+wRNtdJC/jmrCXkDUrXdRJz2nUcP41UzlFYw+50wt7OlJ3JhIktKKvA6VJiX5tmxXq9IvqGymomoxGFK6iqij56+hjwSkyBVdTsHxxw+dIVXrnzEr5dUq/O6Po1vQ9ZDiIbpr7rUD4SQmKxXDFfVOxMKsamIiQljzclk9ke/TwxX7fce3hE33YcnS15suyZ2h329kpuXLtK4eD0+DGn52eENrE8e8JuMcIaRdvUPHj4EF1d5goqUzI1q1XDvQdPKIodpjsjtAr0vYBxmoTN8561YmscQ44ZRFFWI8aTCYW19H1P3QdSlwiqIClLjL34kLgoc04U3W9KiWQdxXRKVZWsQ6A+X9GvO3wf8OuGg/1DnMmLu/L41HNyfs7x6TmFLnDGYpyhGk04uHSZ+4+OeXJ8inIlthxz/PAzDkeJg719zs5W6Lrm6Wf3+Y/zBX/yH35Er8bcuH6D127e4Pad66RsSqzsF3Uq0nN/vlhsqbz/STzrpv83O7Zm8dvuikwAgywkbja3z57HUPRtN5C/9LR/6TGsDeJf9Nrrd7hz50XOFh3MdljOA3Md2ClHxGSYHs74h//od/h7X/kWbfA8OTvmjRdvsfOqJZx/xNQtuXVngtGX+Msf3OPkrGS9TBg75YW9t7j/6AGFnbJXHfCtV77GlevXWfiC4FvW0fP+8Yovv/GbvPnqa/TNz/jx9/+As9OWkdvleBk5OT/h219+hf/2n/1L/v2fvsu/+/d/zPz8mDuzCX/vlddpJ5aPH3/Ow3v3OH1yynvLezx47z2uHFxnZ/8Kp60nqpKmT1id8IWn9gt2dye8/ParnD6dc/ThEYc3Cr701mW++/Z3eeHyTUzV8dmDe3zyf/yAj+9+DpXmd//Jb7Njam7sdPzX3/n7fPSzjzh8uSIuztmfeOb3HvHZX8KLk1fYOXwJpRy4p+y9dpVYz2jmnzKbXeFwH/RsTFJnpFjSBYfCUVX7qGBpntxFd/dxO3dQydPOaz78q5/Rqz1mN38b53h2aP4XOC4a3nmfKcy5Kxg6ePeHn9Cuzji4sYvxLfWqotjfo65rYlgw2r2MLZE9FAljRIY6nc749nd+80L3HbZw3rbgEoMyj3WGK1cuoV3JgwdHssfR+ueGt8r/k8JGTOylas6vl5sN69WSpl5iVaKPnna1pOsVTQNt27FaLZjPz1kuzmjrJSn0RN8wKQ03D6bMXrzCpf0ZN64ecPXyDjcOrvPS5Zc4PBgx3lOYsSJGi68tq3lLpy2tNoxsiaozTR1QzqKrEXo0QhUlKrVoBzFptCmEdZMBTClQ8hxgIKkGhoSM1AI1SZ/i9ZyoV/i0pgsNPsreJyGeYiluzR4Hkc3PTRO/cN6QPUfePWevh4DHo7TDaCvwUS7mEtsCPUXx40gh0KuIipoQ+03iR0oS42ytNK0GM3SlyAknsv8zSmOswzpLWeQ0vxhRWliZJjODlYWUIl1RQtfkc83ASAZVYpImF0ptmEYKWad+2T3xc14HF/Y2Sg2NLRjSSiSxS2oKlfvkyTwPQ6ftrxxmsK07wxaMGAD1ITXvYoLMBq/IkoEtPLUxhExpK7SKaZBa5bUr5Qkk10ppeO1BhsH2dh2mGpFniZcESvp8gitEVNJoZRhUvyrlpmcGIYZxJo0AYUkopVASBij1DNs6VtbagakzGGTKa2z2ioDZgGi5ptmcc9r4wSpyTbhpCmyvw3DdB081UNvlVW2/LTIQlFTKQAGCMsW0xaDyfRBjTpAY3kkuiABw8eJKrjLjRGrM7ZwuHiYpg48bECU3rAfgFsUz41OAQrnHnk9Vev741QAwMnVE9GqJFAMhdDRpxUo7RhV41QrCFnqKEFAWIpaiLCirCUVlGdcVPgRcVZK0YtW0LNualIuC1HtS2xLaDu+jGE4lIAX69QIfIlFpklXicRFlY6vLSyStgJ7OKcrSoSL0bUfMdOHCOvFM6Fq8b1G+xxVIkoSyJG2JymTZsSOmSJ+7gKL/MlilcUqKsZCB1UCky9O2TkLBGVBDZyIhKpRPEAMpZo1fFk7GKEjdQIMaiiiSwpoCDTjnKConXefoSRqcs8JYsJbKOgC8cYSipO962q5FBqd0vCUjOkfO5oiq1EfA0zQ9XYgYZWn6wNPTU3wIjKdjdOmkoDdSBBq9TRTxqA2AoY3Q6n2M6Khz/Kze3IxcQJEHt1ShoAVC7PFB0lSMUlSFUK1D7OlDoO89bVhDSnRNSahKDGLE56wVU1JrIDgKNK4cUYwqjp8ekYKn956gxVG3aTqWTUffdbhYyo2YBoPGQTqQNudrjLg9AxuKpLUWQqDHy+StEkmLf0QkkrT4vRQjy8jNcCoyrRxVWVA6iy1l7jhbnNMFLxuPkGjbnqaFtm1wthTaow9Ce+97YttgokYHjwoebSxWS0KDMYrCWayVpYwYN0kp1jqcExBh2w2QmFhMZvAMVLaMuEaVCKGn93lh0Jqu6zk/P+bx02PqpqXrI0UpCTZN39N5z/XLlzBuhG9bVsuWQlsqW0mShU64qoAUWTctq7qh7uTOMTl2ViUP2GGGpO8DOiUxRVUD5VPuyU0qi1LZXFUWMCOGHgI4FcUGwOjalpTNbJ1zG/ryQGMcklwuTsYqdzmCv0Djy2ZczgnLAOS61nVNW9fSfeg9HdCva+YnJ2KCurePdqKNbZo1SUPwnQAyRlGOK1RItG2L7z1FWTAm0XnwQdgBk+kOl69eZ39vwtnJEz7+5AOWqzkpJqpSIl7bpkXHhDOaddPw5PiYmDzTnQnaOqLS6EKRlGN5tqA5eUKo54Sup/bQmzHzUPJ42aKsou9W1KszEhpizcnTRxR7l6lsouk9j58cYSea6cNH7Fy+ji8N9+5/wrvvfcSNGy9z5/YNlIkY5DtsfCcSNt/jTULplKPYBFSrypKqLLPZbM/T83PmJ3N02OPl61MCcs+G4On7HqsD1miCViKTKxy6KAirmuiFYVdqw8g5DJH1co6pLIGI0pHFYsHxySkOx+7OjHLk6E2HUor9/X1msxmuKEFpghKm0aSsuHPtCp0pqID1+ZpiOsEWoi7fme6BdltIQitC7LF6qAhhu7kcjmcLrS3uoPh5k8K/rqK88NppKOK+6DEXD82g698ShtUvePzfDMVQSjZvrtBcvXoJawzXI3QG/vW//n2Kt2/w2su3WC877tx+g9defZuin9CFjtdeDhRa0c0f8umP/ozj+z+murzHwRXFrVcOOXm65tHRGb/5W/8VX3v723zvz37Axx9+yLe+/U1+5x/9N4z2xyx+8mc82VPoy9dY/uH3+MZvfoM3v/U1Tj5UPHj8Ix6d1/QPA7r3XN2b8tKlq+wypkqOWy/egMMR+vER1/f2eedffJf3n37E3R//Jbs7h/z5n/yQu+9+xur0iPHhgmVULFoB/fvmBIWn0YF1C2cf/oT2dM3Ng+v843/y67z85pibO1MUEp+8qxUP3/8Zug9cvfM1fH+FamxZ3f0R++Ulvvr1L3OiP6YfJ17bv83PvveQ5nHNz/7ie7xw+5Td/RX68CqeS8xmLzObzkjrx6y7x5zdfY/pQYfZu826LjCqYzab0Z2s+PSDv2J3POLKqxalRxgCOkCzrDHaoaJCfdHQ+Tscw0Z48GMSszwgQN9BszK8eONlvvrrN0hnxxTWUE73KCdTTOmwpSOGbLaupOOulEgbmqbezO0MoPSF0ZxHpaTHnJ+wXrfM9i9x6fIhKEc1rn7u1trWGHrz/It1IYAPnnv3PuXup59w9PgRdbPi+OkRy7plsWyJXpi3vm3R9IwKmM0KLu0e8GtvvsrX3/kSd166xu7eiNF0Qu8NLk6wwZDikqDOaUMr5tJR07U969BRKysKQJ/PS2uSMkRridaRigKiIySPwmKVI0ZoQ4dKBmsH43wIKpJUjabHmISmxjdnrFYPebJ6xHF3ylm35LxZ0vatFLPWbIuv3PHf0NsvfN9DF0AjDFRZU/OXPowJjRStKmVTfGE7a6UZpCZDuZvIxupB4ZH9re4R2XXoN2u4MCbdM4CAzrXGkP43pESEKAzRsiwxxtB5T0zb9DZtZP8fsw9cnyKx9wRy8t0F6Uwi+4HEuGFkDF4BWjYbG/mKnNuWbSFj7ec73GJWbkhJEaMieGnICGMiSj2QX0snqfi1UgQ1FPFpA1gPLFOpWmJG5zIil/8tkxkyBqg2JpVS4gqqoYZ1agBBFBtp+DaydivpiUMaj5VUFYlmvbDfGn5PF3w2ZOO6wdo1uShOAiZBQkcxwRyk+8MrDT4N+c2zX4YSQCQDFWo4z5SLd4YlN8v1VZZBblhE+T2zx8RmfiAzPXJjNubrqdQAcKTN9y8sjnThySJPV/lSojJ4oofzTJtp5yIBJooSKd9oUjcymKPmEIUBq7g4tozW2/fSbBiwGaMlf+jNKaYLYNrzxxeN1YvHrwaAkSS54KJ20SAa4tGoROtE0yzEBNCIK2+DZ9nUmE5jjSV5KSYJkNYRVxSUSejNo/GI0WiUET1Pu66p1w2p8zn2UFDsLniJbzKKddfRrVY0XYdfeplMtRggGgMkTQiQPJSuoppOsLbCq4TWEqWnU4+K4luBAZRBaUNIQvIxA2qmNYqAVQmFJ6pEj6JXoj0LKYkhkrIbbZFEJyhM0livxGlWgbZGUhasYatLy++jokywVpNa6aJGK2Y6yWjp6GXKtclIbAzCkHDGUBYlvRGGhwAxOg/AjNqliHF2Y9oZ+kTfBWLWu62bhkdHR6wWC/YO9tm/dMBoZ4yxVrTi3jNo32JOZSENcT6AVhhnKWIUer8RlsOWmpR/6QGb3PIwUGSTzALnROcqxkRaKOm9fFcp9Pjos8mMp28jHunI+5So2waWhhgDOifJaG0YVRXaFJRpBdRy3jEgCZKSuauVEoTVDyaZcoYhBJJPuXhFQIWsMTRWNHQpdw5ijGDzvVGVFCpSOjGLtVpTlQJmTHZKlqsldd9L4oj3xLoX4CJGmtWK9WJObDtsAhU8lRFpgsVjksepiLOaohDZkbOKPsZspLXVVypjZVEDFCFHvRqc0/RdS/K9sHqsxVlHUTgSAkzFlHCFQ9mC0XjK4aGm6z1t17FqaprOE1cr2r5HJ83udIJTjqarOT9fMi5KyrLA2YI+RHrfUXcdbe/po4x3ZxRWCxODKAuFNeJHY6LIVIIms3p6udYhSdyYEmqn+JJIgo/WFudKlPIbWQjK4FcLrIbCygYGth0jlKREqA0NNm9alSYYNvHAIeZkGWtxuiClRFEUrNdr1us1RaYdqqTEf4RI4Ryz2S7FaEw4X3B89JRlvSbFgDMQfRStah9pmlaeMxI3fGGOwLquOTk95aOPP+H2rRfkWijN2dmc1WqFdoWkFIVACBGtEl2KnJ239H3HaLES2ZcrUG5N5xPzo8fMjx4R6yVGGWwxokkdrHqK6S5JJ9arM3ZnY0blhLOzBfXyhNRD5QKzicPULfHMc3T6J3z64HN2r11i3q9oF2fEZklo1mgrAFXfrjk9PmKxOMteI5EYZKEVQ09IKufdh0AfAotVzd3PHtLXp5h4yGwkmvUhXtdWGleVBB/wQNDSqdLGsDubQYDToxNOnjxmeXZKEz2HN66iK4ctNOPZDrdefAGHpXAG4xS96lm3mhBF+rdazFksFrIBj55mOSetV5iy4mtfeovTRU+rxqw6xY2r1zfFHxtn+8ENfJBYPLe4DiMxPfMjmRQvxv1tjl9eVcqYzjugi2/3C3CJTZfl+RfatnC2T1LPP+CL4RSlIESh6CplKQqJKy+0+Eb9g7/3a9y6sYuxBZPZFO0SaEluKVUlHWEdaM7OmT84Zmqv0K+n/PQn/5Hbr1/nO9+9xIMHZ3zlq7/LtYO3uPP2t3jyoObFOy8wvV5AOiG9OKObvoCd7XGTr3H5nduEsqHbH/P3/+XvsXv7Q977X3+ftD7CzCoO3niZJ95Ts2BaBsZpl3O35vP6jG/uKMarSN01XJrtML5yia+8PUOtO37y8GMak2jwaDchtYq2NvS2pLUlO5MxX//yG/zTr/0G3fnH/NG/+jfUj/+IV1/7BmfdEc2TI5rTc6avXeWbv36byzcLzPyMh92K82qf8cFl2rMj9OgKBy+9wrdHP+Ph8Y9pC8fs8hWRiEXQo0BUn2O9SDLt9Uu0TxrUiew1QnOMKU8Iek6zgD6ALg5R7AroenKfw+sl+4cWRQ2q+IIB83c7Lm52l8slRVFQFqUwMCJoM+Ng/zrjScH6DPlcFFTTAmX/P+re7MmS677z+/zOkpl3qaWrem8AjY0AuIkUh+ImihrZI4WscNiOeXCEHXaEY568vPmv8kTYoRjFjCeGGlEiqdFCSuJOggsAohvd6KW6qqvqLrmcxQ+/k7duQ5AebD3QF1GorqpbdW9mnjzn/L6/71JKroSuZ4Ky5SiySFspIyP/IyMzZ2LXcvToISdn58SUuXrrNsOgslRfVaSt3x7/lWQE9zZ9SeKQaFdr7r//Ht/4T9/kuz/4HmenJ6wWZ6yXCzCGIQFUKFPYIF7NnJ9/9UUO9neR3UN+eRx4sLpLTOd0caBPFTJUuCA4u0TcOdmuyX1COo/tDUksT43lwSLTucsM8x1M1TAENaDMxmJcjXUN9B2rxZof/O33mSJcnsyYVh4zndP5GauhZt0NtP1T+jZAL5w/esiweky/esyD9x5zfLTg0eP7dN0SyX6TLhTHVLktifl4nUfPhTF1wRo1ZA8pE0MosmpRU3q2GAi61VJG8lhzbOafUlxZ9aYQa0sqBahXgWCL5122Eee8Sn3DoHuaTWNnLMiSOn8Yp3ulUqw55wjZqVG31QI2USQCCJtYUiNYsSpFLm1vay0hBEY/i/Fh8kXB9w99wLPyER2yCtgbYy/Oa1bfLmcK08AI2Tmyb/CuArElIMFqc7dIVTXIJG+aM6MvmeJfhWW/AToU9BjHuzKU0xjitiVNSOR8wV7aGHsWVopTWi9jGphkNZos/fAPmyXKXqsYY2bdJ+aswMKFFFLl25JGt42tvyco8FEcQ1JWP0WTlU1xcQCyuc83h1PGc9x4VIxAgdZxyOgOotchbf6K2UAX41jZvJUCviDKDSm2gDqODOXVR+CHcr4KBPQMUFTGhREcVsElNodS2GwGm/OGYTNGuQuFRWMN3iiIkrIyccS5oioYwajxmn34tdkeo/nvP2nz+JUAMHLOxCFqEgNWc5Grhslkws7+DpMdR2t7cgyKgFeeVAldL6y7DhMiEtUd1hTxmo0ZQsEcBsAUlkAOhCGqM7OvqWtFYeMsg7X46QTXTGhT4Gy5oOt6KtNgDHShZblesOpaui6wWPacr1pdGL3HiXb7GmPYnc7wziOVJ3lPsq5Mho4hRKwRnOjkJaRyswX1t5BSAGUIYkhZiFnIJTdbSlRszGoqGYpj7qiZJ+sGXIv8i6icEX0DcNaRclSaXPEuGOlIXTcwabxS8rOarVTWkcUSos7+YSxkjfoCVHWlTrPWaLRi0g6/rypcDe2qI/cD4jPeWhaLBfW0oZ5McL5ov0yZ/LIp2vRyo8dIGDRysfAQiinQs1rulBMxiz6voLXOqsEhwBADy/UKWRdWR2XBVeCFqmoUPOqBpDGeRvR9EHVWMhnWQ6Rre43wQymGqR8wnW4mjBjqpsHjVONoDN4bxFv6IRCGoEZAAFk7/SGEwsZQRXkBLst7VxAGKfnnKRETpCRU3jP1hqkz6ueRI10bybHH2EQcWlIoPhtGZTZVpR2kru8Y2pZpU/Pc9esM/R6ni44UIA0dGMO08ezOJ8xmNXVl8JXFRBhSwmVDXblnWRdjR0oEJ1DVtb6HXv0lppOG+XzO7nzCTuOYNDVtHxBjMb5mb/+Am8YScmYYBh4cPeL45ISua2m7nqPjE7yr2J/PkBBo+4HFumPaalckhI5+6NQfAU2GsDZgjC6uOWd1rkZZH76q8CXaM9MzJDW0HTet42M0acq5aBW3osdSShirrKDpZKoeJ+VnG5ZN8cIYO4IXchrdANgsF7FZYQS6tYh03tFMJhsAw1pL6AYq55lUjr2dCTduXGf/0j7tELEG+m7NYtUiRqicIGlQpgmWpmlophM1TY6RdduS8VQVrNdrfvLmT3n46AFVJYRhzfHxCavVksl0B19PNhK2kAPBgElZk18QgvREaXF1oB8iJ8ennGCH3tYAACAASURBVD1dkvuOxtfUkulSYLV6il8NzPfmiK3Y3b9MVQnt/Xus20DbPUVSy7UrOzhjqD10x3e4c+89br54g+deeY7L04q8PkeGNSTo+5bT4yOOHjygWy7Z35mS02gAp/IRY7Zjp0sikBjaCPcfHePSOW+88lJhfQHEArIpcCeVI5IJYQBUUtR2Lc5advZnpJwZVmcIiaFf07dLRDx7k4raWMKg8Yq+goPZhNnEsTttmDUVe/MJMdZMTIXpLP3QcvzkXV76+Bf4wpe/wO3XP8WjJwt2L+2zf3XKOEnkMKg5ddlEfAAVKOsrm+99AFso//gwwOLDi8oR7sjbz/vg/uLD67rNU8tW6u+DFx/yBz74kw8ei96TPdb4jX6YPvCRl25CGhAy1gaisWB03s8GsApG7j33Kp/8vf+eu9/7Dj+/+zZ95zk/z8z2bvL5Vz/PbPdVbH3AwaVd5jcGTo+OYNkyn7fsvXiNh49OOTo949Nf+Qx7+4dYcVyq36Cpalb+MvUffZ3ZacUXP/tFXn35DY4enXL1yg5vvfmYw+ktdl65zX/85td53D7i9uu3+elP3uVb3/kZBwdX+N//1/+Z9mjB//Vv/m/+9FvfYkgD1JamnhPWgZQse5Ndru5cos6e2Efu31lw8/KnkbriYy/cZuAyJwcHLPslr/7mF5nuXWf1dMk0G+qr1/jOWz/njRc/w4uf+zJv/vU9vv+9Ez55/ZCD66/D1V1+8Xfvc/2lfWr3gHtnP2H/+Zc4PLxKOj8j9ZYonjtvvU339i+5+vwhk9uXQCzza/t8ZPIRnOyDv8TZ0dv89Jd3eeHVN3j5n/0GphlIucWa+h8ca/9fHqvVip///OfM53NeevElKlNpQ0AmCDXtuifnRL1/CNM50EJYkU1JjxJHjv1msx2GWCLXtSgTO6aQUBoR45cKmrZdy2Kx4OjJEZdvPK8NJTua8m2PbNmoRQByzAzrgfOnp9y7d487d+/wR//2j/jb7/wNq/WCSeUYVkvmkwl7E4uNPVYmYGYMAXCG6d6Up8crjk8D6d2lRlWbnihLQh5ou4q8tsoii8dgjgnyFBMCdfBUITGERNdU+FuvsvPqZ4jTPZKpiOuWpI7WWONxrmbKlNXTU/7sj7/Gt//060ytYeY9gzGsTUUzu8HOpUOqGirXUOUJO1WFSWvCesnR3QUnT9as1xZMQ6LfyJdjSmXfWgrWdBGreFGA5Y1B5yhdjaMum9K1TlKY3YFoBkIamRwXBZt+Vsl3SBcFqEpT1TMvR4dFveSyZJyzGFPYm7EUa6JJbGZLDmR99QwzUwEx9UWR8dgUoSmkNiGjklNJkSgQY7ooHD/kHKSkiRn5H/iAC4DvGZ+YrMmC4hIZpwb6QFU5au8Qosa/W0906geVrNVuvLWbcj/ntPF4cK406HKhLuglfNYUc+u2V++DuHk/F8/SuuDCELAwSgpoIVDuV13ThazsGkSjQ8nPYvTl34KUv5kYDUAla6NQ924jk0sQd2GCGcfzto3Wb4DHC+h/Y445yiIuDnVz7l3xVUs5MBYyxrit8ZA3II0ZR/KG/QDbUs1n2DWgjdLtwn9kS2zeP88+HxR8KMk+YxTtRgZUwDJjBGvsFsAwPofN10YEZzTiNqSgANZoDzGObbk4h6MPhowecFsmnqOnzD/0+JUAMKwxTHylm8Ne9dmDRFZ9xyr2WDG0OeAaj5nUagDpDJZMJZbaevUciAoEqF+EUE+0Mz2EwMn5ihC6wp7IEFM5YRqfQ4mjS31gnVb0SVMlhMTUdtSVITbCTtOwDpZVm/C+JUQwtqGZzUk5YiThK0tlhcYaonUEWzRC5SZTbXzxuaB0cLPBA1WOZIlE67Bi6bMwZEMXEhqxrjSvnLWuTjluiiPn9HKKPIuybswES96uNeZZm7WoN8K20aWCIGnjFhxLEe98jY+Jvl3TxwHjNCYn5XDxOmVeSAl81WDaqPTDNJrG6GvmWLr4RhHlkfpknS03dzFsioE8ZPq+o4sDoSxkiv5pnJiYsjkoRXRISTWbBWxpY9IYJ2fp2zWpD0hvSLbHOI1WzXHAGWhqR+4HrDVqThky2VqMdTTWM5k5pWpZS+MrBg9nfcti1bIMmbZtSSvLjIZkVROqbtSpGKnqTZ6iUgCdtRdoMPkCoU+F7mgNObFJ9XDGqJ6+dP9jVHDHWJ1IhjBQAdNJQ+4GVsu1Tl5WzTMzyoZYrpZ46dnfmdN3wrSZlrSUzKLtuXK4x+XLl2kqhzWa3GJRI8eJMSxcVzqgxfkbUGNaNSutnCHVFaFVdshsUrE/n3L92iFWdNlzVc2TJye4BHv7l5jt7DCZ7SBGuHrjOm+/+zZ33rvD8nxFHyJPT86QmJg1Hu8qQoK2D2QS3ltsXZNigKzxvEMMtN2aGALOG6I1DDHSdYOmCJFwLpKtwfoGYyrIFlMl4nq90VEDDH2vKSfWbsxKQwjEnJQFVlgpH+x0pMIY+iAVLueEyQZrHBg2Oe8GIcdUzGIdhq1ElxBomkajjyuV8KQYadcr2hAIoadpGtph1H9nci5xWYUTWBcJxXTSEJMQokYtd11HVVWcL87xXtjZnVI3E4a+p123LBZrUsrUzjKvHXs7c0K/ZrVcYXyDn05IMWOrBoktfRKyq8nZQlXT4wkZfOUIUfPb68mE1bpn3Se6KERbE6Qh58zxosdJZG9aEYdIM6mgPWVurmMmDV2/JCzOCCbx6MF9Ht6/R7ta0NSeMPQ0ldNr4xwBivRM75u68rqoi2Wye4DphWZnCsYpQBojbbfGVQraWu+JiwVd3xETNJOZXqecmc1m1L5mtVpgjOXo6IieQLtasjPbQ0JLTJ7aGSID5MROZZEA84nDMFA56I2ydJq6oq88t67tc/PqIZ//0he58tLLrFeReqK06iS6SbIihJRxhXL69wGMra+Lcd1my5K3nrq9wRv7ws987+KpEWXgwAXNdfPUXLpHeVQyj7vW8mJ5ZCSJRq6NLzJupLbfrrDlt7G5a8r/82b+11/TtZWcsS6UzakDelKV6I1nyAFfBYxUxOSIFppql0pmXP2opZ9Grjx/hdc/+Tmm+5eJscKbHUQsXfuUJ0/e4d69HzM9annu5j7L1Zq//A/f4PrtG9x45RM4EVKucf4K0HPp6iVmOw1Vsrz1t79gcmxYnJ7y08dvMkjLarIgnK+5enjAL79zh7tvHpF2GmqX+czHXiNegudfeYM/6C3dAv7qBz9gIZ5lGrBVZjpzDP1jFmeJ4ypTP3+D3/rylznc3+PeD7/Ozd0pj+8Kt17fw+7WHH70DzCHL5JcgnzG5Zcf8JmXf8DP7v6Mt986Znd+i0/82msQBmaTgbfuvMl/+u7bXH/wC3ar+3hvuHrlJVJsWYVHdL84482fvM0vF/exEjnc/xJPfuKod6+S54bDmy8TU00vhnNm3Hr981y9chO7+yJJAmJaGKNF/wkeF40aoes6njx5spk3UVstRDySlZWXJBLbJSZeUiBwciFzAjCuopg3YKpxb6VF7tZQ1E955Jer+fuly1c4uHyd6XxX1wFjNSbebUm5ykNQNhEIxMBP3/wpX/vqn/Dtv/kb7ty7w8OTJwxJUzm6YeATb3yU/+Vf/StuX6qo+6fQN6Q0Z9lmggWpDauQOOsdq9CQvWOdWlbhlLqekNqatGz44d99n+9+989YDXcRmZGlw1aeyiUsA9FmfD1Hk0Myw2JNbjskq6G5dRVplUh9wmcHXSIOPW2OIGoMPvcTfu8LH+d/+J/+R5o9tKkXHBXCvK5ZnZ7wzX//bb721b/j4eMjlnnBuT9l0S8Y+n5T8CeKfwUwhFBMMMefjZ1xZRKMYyDGSN/1Oo/4iwLPFIYo2C3PKlPIFyoXiqUZh9UIWucMkqO+/5iKX52yIVIOhXWq+xwDWoyXOS/FTCaUApCyrwQxTvGNlJUclimsVqeG92ZrbIyMV3NR3EkpLHPKG/bFaAY+egiMXlzWWvq+L7KTsdi8YGHYIrFBxj2M2UTGu9EHrw9AJgyRxEAUT8xCGuXc4so1GeuA0sQxFmzW67YphI3GfpaMWZEid2ELbOGi+y9cNJHGxlCyF8amKQa8sVCkN4qkmE2c7vYyl3m2fpCszViSgh3KqzDEApyN51QjUi9YAaOsKWVtO5rCuh3P/TM3+LimcrFeSgFzRnwApHj4XUjXsoySDf09Yy3Zooydch2tEcQmUmlWEzXVUht1BZ+xF/vPD7JvNvdEabZtmmfOb4CU8ffyxntKntnfjkDDyDdp06io0JpHvO69yovqXtmplEtTirZOV3lvG4+XD+ybtx+/EgAGGSxGY0etxSSdWJZ9x6PjJ6xzw9p2+KZmkmbUVQMRTRKwFY0rumbl1KqURDR60FhLHAaSEeJKVaFOFH3LUcNcrHNUdY04SzcE2nVLmwaSCDYFUr9i6AMDioRaW1FVFl+5ou/xmLoptXPGVlY196JaJt1kqbkTUmJcRTVFIWuHXf0vTHHNzUge1Lk/WUgWkx2CK6yDRBQIUsi8oujraDYnxigCutk8qjYqo6+ZYiL0PZKyprNk0YhUMgwUxF4n0nJ5NGFBTAEGMlh1KhYjkBSMSKUoVSRTp++ImgEZK1SmKjQ/XUCkFADGWKzzG+QQlPaXMrgyyXjvSVbI0TGsW0UHt1HCglTGlOn6AZu0q23LJJAFQsz0KkbEVpoukY3H+UnxMgjAgAiEpJ3bIajZU98PLNbnGFvhqkr9NErUK6ij9GQ6ZcjCeRRcUMBhsJacEiFHpZldlA86GWLLBKYrljEOEy2ZTDcMm8livHbkcZId/9MJOWU99lS8HiRpAayTvUOkeJSIGjS1baudJJMIfYcXLSyv7O0QY6I6W3Jpb87lgz2cFYZuxRApoJPS5JxTs8nKaTycbJgYGUkRS8aRsSQcUBth4gRvwHsFbQiaWW1yxBlh1kyZTWeYyiHe0oWWPvTci/eJ68iQIu2gyRPTSjO7rbNUTYO1Jf43RPqoHgohqbFTyIEQAgOJvg90/cBq2dNYoakzUmtBZYZASkG9EKK6n48LaOU8QwjlPkv0hfWUyfSmxxmVY1mr58OMCHtS2q0p/habMYsuVDmHrQ2D3TzHWEPXtrRtS7tuN/nbIkLtPZO6YlJXGNT3YtX15JSpas88TdUkLAVS0I1BZaeIgX4YCDkwxIQVECsKhMbA0GdyGlhLYOiWDMOAd1XpJgVCGnACjXdMJw1+Z0Lf92TrWazXrANEU9F2A9l6xE+wHmzV0K57xNoiGQvFkCzS9gFj1Lg2UyOuoh8G+pyoKkfVNCp5yR3D6pSTh3cYkmfVWRanR+zs7XJ6cszi6UkZewFbl8z2LYAt5WLwm1PZYOr7qud71MmydzCnapqyAYssFwvOlytsgt39A8IQcMZt7tflusV6z7DuqY3648ysoc+B1K1JQ+Lo4QN+/pMf89JzL2GamnpiCanXjWG2SOwxKWIFDJoehUDXtxxeOeATn/oYV27fBAOTucZNj5pqk1XOKKJgp7Hb3AQ1IdSN0tgNijqby9gvYuvz+GVZM575tj5f/5/VVHhDbL0AMRRCVt1zJpTOl8ZgSwpk0yMpql7YVxcgtbjCADSMhm3PvDQf/IZqrj/oPgD61pOBjMWKJztHb3q6Yq0muS259B5oMaZCpGbv2jV2b/wmaegw1QFiLuFyBHoYBmK3xOYnHL31I6psaN+tefj4MZwN3Dy4SWV3SLkiJ4fpe04evcf3f/Qdzs4WrAXeefqYh99+xJ6teLQ8I08C+7vH3H7teQ4+8wbxvcD3vvMz7p4umF3Z4+fvnHLvX3+V3/3yl7h1OOGFG/t8/2c1ixgIQ2JqplQRprVjJ3fs5mN2eI+bB69BH7gyFbIsWM6Egzc+QXPpJjJ/AbAMsqRjiZtV7N9+mdfnc7733R+Td1r8Sw39ap/kJsxzw+WTHluvuHX7EnF1xvzgOkiF1LB32/HawUdI7/2c7ugxtbnF4c2Pknb26IYF5Ak5OdbZc3jzNZ6/dBVCDblWLwFTaZf5713F//ePcXM+n8/52Mc+xmw2wxqrTNOs1GvrLDFFnp4+4eToETcmuyQGKgNmSvEfEy1+/oHNcy7dWjFl75GjRpqHSDOZMZlOy1p7oT+3zm6KWnmmhysXFG1juHnzOl/5ypepJxP++M/+lCddy9OzE6SqCWJ47uXX+Mrv/hfs7iQYTmCYQJhDFrIJYHuwlsCUkBuSFZbdmqPThyzPHxFPT3n/rfe5Y+9xMD1lGgOxqsihwvYVtk/EYdDilEOS7JN7gdySBmWuiFHvMms9la+L/9uS0A803mrTRXouXzvkjU+8yMuv3cZMICeDxAZRjAM32eWFl0+59eIx0Tqa+BRChlViOTbRSgEpKCvVSIn9TLpmqKl8xDtDFo08z7Dp6Ou6KiWVzBLM2M8u6RbbXHwdRNoMTAmsMkXnTUXoO1LXomxOilwCNmkRY0FZ5CO2FJRSpL9DGDCSyF53RZISKSdq55QRje4nY84F0EoYM+4xdc2JQb2ZNgV0Uobw2O0f2RjjR0qFafiBYnC7KHXWQlYGW8CQYzELjYGcI0MOxAxRLM4VmcYIL5RiXmkCedPlv+jcKxMmjwyTPILYebyJLj6n4q9WSnw7dvYpCXaFNZFiUtCmAAA56Z5t9KFQRnu+YEN88N5FWTKby54vrt34SOU+1aLcbgr1XO5VI0blJYXxk2JUlwBTGlClLlDJdlkbRX82viH1ARE2IpoR6BBRdmU5h6O5LLKxU8WJNr6MMUUGXIApYxBrcN6QcRtWhDLG/j4Y8I95TIz+fdsMCPUTS8+Mo5wvJOVFwFIiZAWKHFqs1R2DbK3vWfcmKfPMa2TS5p7cTvL7sMevCIBRBnVBt8dIn67vWa1bbAOtG+iT5lt7u2bXTXBZgJ5uyOQq4KsKcVaRM2PUMXnS4GhoKotdVLiux4kgUbtszliaqmI6ndLMpoQUeXJ6wrJrwRocgaY/Z+iX9G2n7v02s46Gvo+EpEBFoiCqBpKY8qHMAyOqy7WijIYQI8ZovFSIJUnEGZxYXHYUCAFBA6kco56+5FQnTQ8YkhoMknOZ9DKjx0GKSelG4yRdwBQrOjEYZzA5IkTykMgRjBNMtlgrChyg73VMNhHn0DRrXcAq60szImPJZdDlMjClmPMkRcWjMk4oOjEpvgKj9CUU+pBODjrwBZXkkC+8LERkQx/boIYuq9SlOPR2/YBJaj7pNUsREaENkbxuGanhDAOZnro2VN7jrEaXjqiltYZkBiaTGS5E2iHh6wmIMHQtMgTyMNC5TG/1+mdTQKZn4rY0EsmKygZGTHikq43GPaNRz2gAZc1YNCj6L2VTJYyMh6Lzs7poWicYHCZZvEk4rxVNh2XRQ0gr1l2HJJ0UprMpM1/TmY40rJBsqPaUCh+GgWnlmDaVgnKmwkXBBKvpFSFpKoe1hS6XSmmRdSJPkdh3OJOZ1Z6m8uzPJ+xMKpxJhNBjrMM7w6xRJgCxpKgMvXYEyEynDfOdqRqJThsmTYP1Vk1wo6L67TCQ12C9tiwSButr6knCLjNsFoiSDy8qycJaQo6s2p7QKzhpBo+IxTqVYllR5tBIDzXGYrP6mmnxWMC2GMliGEIsceBmA1gY6zbAxIhyj9OeTvrPLiAxJcIw0Pc9y+WSmBNd10EG75xGIXtNEHLOkov2FNEOVIojFbN09cq9FkikIbJu12QJ5ZxYyI6YLGL6slAHkIF+PRZ9AsZR+Yr5dMql3RnXLs1xpRPvnUqx+rRmHXqMEXZ2d2maKetlS9t2TOsJh9bRDwMxKhCyf3CJZjqhntSk3OF95v79J/Rtph8CzguznT2uXrvBjp/RrU9QS/ye46NjHjxecXlxzksvv0QeepyAt4bFuoU0MJs2m46PFKOuXMDVESg1rqKZWSZSMd+bYexF9ySEnqOnD1mfr7h8ecVs/zLzZsZ66DlfrhliwllPGyM1YF3FxDlcjvQx4Yzn0YOHfOuv/pLh4y0vv3wbI1PMBDxW58yUygZATdOyRUEeb0EC2Ah1sX8vAEFEyK6gGDkqAJDLhhzY7JC2d2hEBTBEuyJQfHZEdeOMv7edHzg+ngE8EsKKTMTQABNEXHmthDE90CHE0m7y+hFbJC8haoqUtXPE1rq5jYLYChHPxjt+7OKVde+CqDG+l2d7auPnjDCIJxpDZSCLoacChAqokyecntCdnmHsU8z+HpKvQQ7ILJfYvzXIHjmuwK0wuaGe1nz/z3/AD/7me0g74bO/9inaU3jjpdd5/aO/jthdEh7pA4tf/JK3fvRdvv6Nr/H0yQmdHZgdOJYnK3bshOduvU6XzjmcZPb2p1AHdq9WHF6d896Dnvfeb3n/ySN2ZpbpOjPp3uetdx6TrRCWPY1YTDswtJGPf+pTvHB1ShPep737A+53ichVZDjmUXvC4vLzPH/jJdLsefreU5uAjXdYro5omgOk91yaPMcXPjohzz3s9cwPDugWNfvTV/gXt6/h/Rl2eJ9vf/1POfmr7yH1Ph/7+K/j9xsu35ryuVc/Tn+2YJJqmOxjKs9E5kCtMllBdzJ2AlIDHnENfdKh/U/5GLujxhiuX7+u8+umAoSq1jl4cbbm/ft3OT89YU1NNZ9zeG3ObjMrDIute2B7es7PvJiuNzGQQo+YCjWid3qfxlGOYuiL7Mz5ahzRW6M3k1PEWC38r169wtUrV3jxI6/xyic/wdf++i/4t//xq9x/+ADvPG5+iVzN6CUgjSW5hth7ag/GdGASfb/k/OSEB/db3nvvMffev8vd93/Ew/s/JJ4+oDtpOTvuCaEDp/GrXeuQforpDW1ILKuKZhmYLALOdipnbVtCGIqpOCqBTkLoA946Jk2FSwOQoBZe+uSrfPq3vgCTKYEI4rFWWTAkNfkM0zltU3FuI22OJW1Kf07KRU6ta32IQ2lQBIah1720gDOQbVVYFAXAKJ1rje902mEve2QYP+ymSAYpjGPAGOKgQEXV1Ex3ZqzPM223VuuHzRgo8oJxrd9a48exuEnnyFH3wUYLSh0+Kj+1TqUaQcwGhBjFMiMYoF4Vkb7vy1jM5Rwp+8eM0+D2cM0XNcH4t7YL1pG57Uyt4zCi5uH5YjXJFKZCYQMrY11B5w34NgLP5Vi1CaMjPKZMKVM2tR4pIbGwNMb9b2FAXIB8ZekqV8eOu+FMASr0/Jix+s8UD/+tHdUFMnBx25Zbd1ta80yEa2EaUFJKpFzbUWZkjcWakTlRAAjRGFcjpkT2joPQQLlXoLhr5HKeUiKjciw2oI+ywKKM+xZbakgd2MZkssmbfexGapISKQa9Pt5hrb9omIkQRpxoC5T4sH9fTG0KfGx7zmwYHIWFfcFEGc3mbWmpSjk2rcfGhtwwjpUydnMZv3r/XMy3ssXI+8cAFvgVATDUSyCQ84hQ617LYtjb2eXg0i65AXFW45ViYuI8XiwkjRVqh4F2rWY4y74jSCZZi1SObEQ76UOgSuARJGW8CNOmoXIGKWaIjbF0fUXOPeIsE19he0ffN+BX+BQZjMUMhvXQIkTMBg3ziM1YI4WxYBGrnTU/xtWZjC/yyahsHwIJssFkT8ZiZEAkYqR0p5PFRINE1e3GpAtejqFEHWnRpi04IWdDSmqMmmJB02NAUPmCt4a9aY31RiMHSdiUsVGQGMFZsglELNlYZQY4r+BJDKX3VrDDqBIP4/w4h2zRnvSm897RDq1KJqzDOVekEa44epcNg4x0N4crqGaOikbHHIkpqiSg79XDYRgUQCqjxhRn6ZCjmo86i1ivOr2UaIdAzoqMu3JThSgMqzXeDerbZDOV1w6sc44+DNgmYauKyXxGVU8JIbA7nyGrFbJuMSbhvBAiEDRGNQ1qdrgxmmLUqeVN9yanD0wgIZCTUsNAJ2JjLJvIpgJgmGwQxmutXfwhRq1nUkRST7ZFZmT13OZxYsy6KLRDz9HREW0dcWmFiS2hz1T1VAtTElay3htWiMZhM5jkiMYQugFnNaLOGzU+q5zBO483QuUts7piUs2Ju1NMTjSVJXYrzo5XuInFu4qcDc4K3nksGVKEGMhBiEOvyLYz1LUjDRqN6bzDEXHObhyOjVe/F0Rpds4YfAJfFwNelN1iK4dYRyhGbSHqORvoCYBLpWswZJ2krSH0Kq9glIJYZVUZ51X6I2w2OxlBjNOuH7kUZFqQK001XqD5qfQftxbSlBIhKFtk1bYMw6B+FQX1rusab6yCBiSGoSOnTueTQoOVnIpcSwE5K5CGoDQ9sYhRh24djypPsq5weXLCWQroAmEImthki7GoNRAj6+WCg90ZpDJGvKVyjmkt7M7nYCtkbrl2bcJ63SEIs8lUO/Bkun6N854oMNuZMZkY3njxGn/dfo8nxz2Teh/rE5evXOHKlSvQRtLgcM2E2c4O5qynj+fEEMhDx7BeEboWV3ucCHXltes0dn4wW7pLNX1LOSsby1dYY8BWGBu3ahSh73uenp4ixuPrOXu7e0yY8vTsHtka2mEgkOlixONwlcoZ62rCpJlx5co1qrrh+z/8Iefnp3z8k69z5dYhx4sTbH2JJIaQMl0I9DExWN3Y4B3ZJJbtGUNcE01QloaxDElAKqzJ6KQD1spFJ3Bka43r6yavDkQimR7ymphaxk7aqN3WrtpYVY6biu3vRVI+JdFhZBeROZJrIEPsQNZkM0DqtT6QBskVuT8nt0f6+33Asg+TXUQq3eQxgTyUrreD7MpxmAJmlCuymUMvju9ig6Nb2kEzabB+tBotVOQuQj/BLZdwdMw773yT52/ssXflRVJcYF+6QjATcrxEVe+TApAaTOU4OrrH9+88IBxe49XbH+WjX/znnNy9S//eHeSXp9x794Tpzds0tuLhO7/g5NFTHt0/pTGWIZ1R96ccuh1eqC5x8/WP84vj91msj/nLP/s+y+V9XnvhBnlvHzkxLB70rBcd6XrD2794EUEzTAAAIABJREFUh2tNy+HhC1wJkcX9txjaU2Q4wzRTXv7YJ3ju+hUe/PhvefQ48N6je9x9eod7xw84Z+DVz1bM3/oul6/fZTa9xaFU2OP7HCxXuEZIk0ukuqG5OqUdnjC0p1RujyqDzHYQ2UVMIj06Y3c+o5MD2qGmayPTgxnIANWCyX6PDYAVVg+fMr10QB4ASUxqIQQDYaZjycEgawYiFRNGFs8/xWPDWMx5I6kdGx8xZ8QMaJxjVo+fJ3eJdofdK9cRd5Xp4SVwGSPTMg9s08G3SyPduEuCGDr6vlVfQyOEAMv1iuPjE6azKZcODxXtzlugSL4oqwRlM2rzpzSlAhwe7vCbv/15XvzU68jBAf/nH/4hxw8es8LSZotgSbmCJCxOofFwfvKUN3/wNRYnD1ierDm62/H+u484Pzsiy2NOF/dZt5F+ZchDTXCGdU4cd4EQEz4bXEokm8jWgj0COdDUi1hpyl6OhJKUl6zgpCIHNULvQ2Ayq7m0u8Nsd4fXPvJ5blx/jUzFkFu8sYQgeJfVGmHIiPOInYDMMHaA/qmaLHedRtI7tyncY05YUcm5RehSB6QxfG5TPGe0ERDL/kGZCAETo3oaFK1/Kt4DG5WblCsiUvATfX++rmlXKyIZL4WtDLpnKQbdVtAmVTZY1FsvoQlZI2tEC8XAxnugvHGxpfSzJXmlAClKiCtNu3JMhKDzWWHjKiO3lPljkbkBTy7m9w+7V0BBjNqpx0aIuj4L6v3hncHiyVn3jtZWWOPI4qBYW0rZ9xRKwgZ4lvFcjq+VQbLZgBRxw7rQWsJKkZCMxTaZ0Rg0DxGxHmeNFvBlD23G9asUwrrT03ORLqrlD5koYOMUu3mKgNHmcwZNvZTClDDKjlLZhtmc11SidmU0rSzfH19ybJyN1/Liri9JIyZrU9NqPYLo9TfWFTDDbEAVxURikXBS1mQdx85YjQbOkIMalGfRRpYRi4gy7cfUkY3crsjQSRnLheUARt9DHhumhs0YHP0UtdF6IbEBiqWpQGF8x5w2vjXGuQsTUdjswZJofC3PnJ8L8OL/BwAGDKXoVFpWOYkpE9uACVCZGu+8UsFzYDJpmM6nVL4iBi0w2ral6wfm05o+BNoQ6M5bRTJH3ZsI/RAgqEREckTSoOhntyIbRVn7bq0XrJ6Qe4jZ0qe6SAE0TcQa8LZHRMEUjb5J2AziPNlm1QrngGRFpYWM8WoA2SfBeiFGQ8TQ5Yoo4KTCmw5k0G62KJNBkt5AuYAhSZLGJY6MBau0t2xGjF8HZ4qZodPO7Eixyp1nb2dCNZtS2TLsUi7Rmon1EFmuVuq679X/IYomakgM2JyoSvHqyEgYdDI2imiPySBKi8vEFIkhE61q9mMYtYq6OY3jBCdjF32Esi48PAwZk80GiQ4lK3zULY5JHyrgiZTfUJ2ddVvdTY/xFnGWqa1pqhmSIIS1xqvmSEqR5XJN2/WshoDzNV0f4HxN3/fs7+7QhIEJUNc19cTThcT5uivvNzC6ImuhRMnzjpsFxRQ0F2DIgxqCxsKtLKIwSSBJvY6VdaEdHXLR4hkpHkS6kqVigppiJgRlKfQhKViGGnAaPWmkHBmGHtKALcBgTkGp6TIaYwnOW4x4LAaTMl0EV/w7TMHNDFB5x7T2CmRYw950wuWDfWxOhKHDkBn6jpgHbK1yjLPTNXU14/DyIbu7u8xmc1zTEE3GxUIVzwnnjLraF+8oLdBTmc4z8/lMKbyoBtmlBFXNvIO6OSGjzFQRQ0Ro+4HudIkn410kO3R8h1QSQVTvaYt3SwihJHBEBTCM0Q1cSgxR5UF90onbuTKnDWGjOw1xK9Jti3mjiTQ8oz3cIOFmpKIqiLUdDZhSpO06wpCQFNSsMoHUU2IeHcALiCFu05aytkivxCE2k5MQQ1n605jsoGyaFBR0UdCoYtI0OJPpuxVPu4HDnYbKW1I2dDHSrhcYO8Ea4cnTE1K2XL8+Y3fvkHbdslx17O3M2J1PGLqGs+WCxfk59aThYO8SH729z/G99+kXD0jGYCt47uZNnr/5PE/uPyalNbaOuGaGVCuyqwnDwNnJMXFQ/xp1MR/d5UsPqeyTslJeNudYqZCVzpsSiAnwuv2JUWVCdVMz291hPp8T1h3vvP8L3M4c6xx7lw5YrTuWstL0qgxOLEYs3lZMqgm7u/s898JLvPPTd3j33Xucr875zBc/zfRwlyFlfNWAcwxRyLYCGxgwrIYeWZ9z3i64++AuT87POdidcfPaLWy1y5AVrrBWiAEYAx3Y3iCUr1UOjEpJejIrEguQDkMq+6uxuCqAJwXIQ9dM2RRfkZSekExLzi2GDpgW4HENYQFxQegWpCHi3Bzj90A6xJ5BGPChJz09h+UEaXaRyW5JgBJSn8HV2GpKFkfGb+a6i4MbN1JlU5i3t6iZkcNoYmJIID4gdFibaY8DPnp2rz9HeG/ON779d7xy7TG7L1znynMHmGkixHMqOUUqA0lli1euvMjv//5/x59/48/4/Fe+QjNr+It/820Wb93j5+/9krdP7/DiZz/Hb//W7xOouf3ar/G/ffJT/PG/+z/4k6/+a65N9vjC62/w8qXf4Bvv3+NH799hZizxxHClvky3jJy1D6hixeUprCRhUuSXd8/g5nWq4FgsVxjXYH2Hy5k2L/nJm9/hheu/zeWrN0jLFe8+usOPHt7jbG2YTvf50Tf/hu7B29x88RLGzzm7f4J5csrrL9zi1gu3ufVbv4dUiXx2ROxOqPYOuf+j/4BlyvU3PgumIbanGDPwyku3qa5+kWwbxEU1Sc1rnB0YbItUFskLjpcPOV8uyOdLLh3uUu9dxYcIC4Haqa1ETsVs75/use2BMYIXKj0oBaCBzICxAweHuzz/wg3OTu+wtzfFGOHsfMEQWpxkyNPyV0cWG1uftXiSsg/ztadtF/zkR9/nyfFTnpwueOOjn2AynSK2wZSoTT60O6wPK2r8GaJQ+6lagwhY55gdHvCf/cEf8KQb+Oq/+/ecD5lFULP4nIQnj+HJ/SWnR/e4/+63MOkeuxPD/mzCzq2r5HM4f/SY8+U5R6dntLamXTtSH4g2k2oP9T4SMt1Kk8rEDNoICaeE/hjxnoQ2zbLJZG+I3oB3tMsFWTKHVw75nd/6Av/yv/4vuf38c6QgXLp0i73pLikJ3lSQwdtxbork3BOGlhh6Ug4aTZ0vmjpWDNNG48GNMbRtq3N7YRLXVaX+FCjIjrii91f55TD0F02H0pFOZU3NWUHtDfIhF1R9KUaF2VwUUbLxLguYze8929X+4Fgc56tUpKwpZeKQICS8a/QyiymM7ELNLyx00Eba5jW2xveI6F7wN8ciV3+2XfzJ1t5CD28LVNgc/ojg5A2QM3bhKccXUyb1A+IHknhS8fAQo2CaxqmOUufx9QooN35vBG4yY4UynjBdfcq6NoIzo89ELrWLQbSRVo5d78Woa1WK43e08y9bRrvb88QHjn37EXPSWmR8D6LfCympbjqzkZJs1iFMSWTMBcgolz3nYiRfUlFKw0/3/hTwIiNSNrVGmwgJPV+FgKSvH3XO3PjClnRDY9CIV0bWi4xFAxALFjbWDpoO8sEUmu1xse2zkrLZilnVsTHKStQcu9wPW6DICH5RvGAYr58xyjUpCIZaDJT/JKk5vlzURRcS6w/4iXzg8SsDYGRUX5OymuZ4o+ZmoQv0yzVIhMprLJ5VkxAxCakNyVpiMuRgkKD0lal1TI0j+5qqqpjvzjGVZ9W1DP0AMVCJwRmlJIW+48n5MUimbmpMjiwWS54+PUNkShZlf4QcyNYScYRYNHnG4YzDGtHNVqFfRYofgIx+BWNusxoMWjH4ypOTYYiGkDwRR2IgAz5nXA5IjhgMThK1ZD3ucpEH41hHoTdRewVZC1hjLqjqdV3T+EoHf1LNWOUjTe2oS+e0sQ5vrE4aAsu2Y9l39Kkn9BAZTWMUFrAhMGSojFBZNZU0VsBp4koU0c5kVq8SKUY3MQa6rlVz1SEwDBEqRV0TOhmpaZEid1JAgHGMAMVHoyAkBQTZaKtGZD3GMulGnZBcpWijc5jKY1yRGFmnN7gFI54cC0MiW6yvmdU1RhQN9V4TZOqmZr1eQ9K43BjXSKwVa49K5wupTHrl5ldUcmvAl8eIxFvnyrqh6K9saT91UlCE1IzFRB4lgxrvqtq0SAwDMnQ0dUUIiV6EGIvxkXc475Fk2J3vcOvWc8hwwtnjBSH0zKopzlkGn5lNGiaTSmNZJxP6wRLSACHiQ8QHh6+80jvLTCvCxszKijD0LYbEtPZIbZnUHu89WRLLfs1iteLs6YJJ47l+9QrT+R62qoi6YjFpGtZDU7xCcokHdoDqMy2GEJSSPp5LfW2j/iwuMpup1KWPWuRX0uCsRp+17Tl9ihgZSFZ9ZUxQLxbn0WjfqAyrHNOGsUmMhBjp4nCxmXIK8vUhElZrUkp0fU/cMqfNZfFLI6UzZypjqK3DOo8uEKk4m+tGKwbNCh+NUcmace+9xQrUVYXFQpsI7cDp06cE48E0qH61VdmYUTBPQ1h6yKFodQ05GawtmxUjpVsU6Nq2NPg9da2eN7Z2NFXDzmTG7mxOigN91PjqYejp2sBkdw8rwrrtefj4iKae44wl9gPn+VyTaWJPJlE59YhZL8+5NLvOK8/f5O6dJ5ws14RO9ZGHh5e5vH+F1eIpg7T0LpLeX9Alw9Ozc1K/ZDqZMJ9P1W0+Z/q+3yQ5bdbfMgvnnIhp0E2xqMzM4sjG0vWtmgKXgsNXNfN5Zj7bRYLw+NEjbu3ucP3aVc7aDuMdtqpwtsLE0VMoQ9YNQwiR+XyHl199hdOTJzx8/IBv/Pmf86nPf45mB/V06QPLtkNSpk9ZvZDKpruZTTDecOe9d/nx08fcunGTL3zhP8f4nU0HKaWo/k8XpOOLTe3FTFN+3hPiOVlWONMjouA9IxV2A1SISm3KxidvGDsJ4RTiipgHjPSI2dHfkQ78ktQdsTx+yHrRMnFzdueXEQ8pn5P6jvVixXLV00fLzt4V5peu4KeXwM0gW0SSAgfJI85sgGh9XyMqs41ajJsd9S4ypkdSS+4HXBVZx1OerO6xPB742LXfxcWKVO3z0lf+Jc2rv87l3T2uPPc8WQbghGrWksIjzp4+hmCo86ucPkp8/9vf5e2/+Rnp/QUxPeSnb/6IXi6zd1DzyV9/nauvPsf86j7zT3+JGAeavYANn+OtH/whv/Plf8YnX/gSDM8hZsHJ/Y7ubMAfB67tHNANA6/cPuS1z97im3/3V7z3dMXjR5Flv8eV13+b1ekxZz9/h+NlS8IzzQlvA3444sZey8OjY3761h04SMz2zwmDJz1c8PLlA8JP73H/3QdM3ITVsufR8VPa83Menz3kF794k8s3dviNf/FRhlXHW9/9C9793jc4OLzGwWWD6Wc8+OGPufbJKyzXCTM8Rfop7fk5tQuYSxX9eomb7RKkIYRjrtyuMOuMnSbW3S9ZHb1HlWuqpxY3bUjBcdbPme1e54J6/uyO8IPmrRedO+34arNuG7YqRZhs0ZTH9VWEHDN1DXv7FXUtVE3N9Zs3OD9/jluvvs6DxyuenD5lGDo8TkdaKk3OUoRt30rGGLqu4/GjhxgDjx894Gtf+xPuvHeP+f4NPvHpz/HC7Rc3YzWkoBGEZQg/A2KMQEjlsdkiSUhB94jJaufz4NpVPvulL/Pmz35JdhOcN9icmEjP9HLFK1dmrNe3efTygoNLH2H38iVI+3RPZnzr69/jSUqc3+3B96zjGX2TGVbaBBpkoOs6TLI0riomIAmTwEaLDNC3HT0RCQoMJiBbo9LnSc3e4Zzf+fLn+W//m/+Kz/z6r5V5XbDMiEFIEXJJAZLxgpbOs5GANR3eLQlxAWlQeVxU+rkv7N4QAsk7TF0xnc7IObNarRjigDFjqoiyDp1zuhcCvLUwMn+dIRYGpB6F2ezBMheFkxaj+nUcvTbyKDFLOi+arX3neDlz1mNNuXgc61yaRuABbYakHDFNKTCt+l2Nry8jjpC1EI+MsvDSBBklBdsEA2FTRG4X6M/cAxtGxubNbszlYzE+H7GcnCJxgD6OjZukksnskKpBXKVeFBsfOsMmcj4Xmc4HpIgj43OMjzdb97PJF+9//FoPSzafR2+9lNXjwhlNH1Fvq1LZC5to0ouX/iBMUXbaIs/8bNMyNQImM7JUzcakVDbHYQtbwjmVqhtbaa1nzFasKBeeZuOYGl9PlImTtWur9W/MxKS1nxJTFEDQD/XTEJuUKY7Kxa1xjManptKkJY29tYhRib8xjpwqRApzeAvASEXqcQFilaU15w0AMfqrICCFqWHsaNpfChFU+q9exhfio+1Tbj5wr+g8Xv62vRinHxyz/9jjVwLAgLI+mILepUiVtMBfEznr1vjcUXtHjFm7XSmS+oHKLbWoS4nQ9oT1mol31NbgBEyOJAKpA5cc1dBhg+qOKlfjrCeLQYxjEHXGtbOpFkzujLBY4cVgBSoLQ0hka3BNTV0JXdsTMFgv/w9zb9Zj23bd9/1mt9baTXWn6vTn3L4nCZoUG0mWQ1t24gi2Y8QvQRIgQF7yWfIljACBIfghDxYCSIIUybYaUiIpUuJtee89fVOnTrW7drO62eRhzLWrqOadGzj9qV1rr2bOMf7j36CMGMxoDT5FYpRH1GU0de3ankF9pcjNlnhb6KBRUaj60Qc8DrR8DmVAEdEqYKPPhpPS2LZEsIlgotxgOuW1U24MZywlmtKIpMVHT6VhsyopSyd0+7Kgcg7nLJPxmOViTt3WcpBa4XtBnQ0ZaIoB33tZ+KIi9J6UEBphbKl7T+07mqjwvUQajUcjCudEXmMNQcvG7khYZzJzZLhhNdGntSFTiBCCUP5VVOioMUik1dD0Jw3RCI3PamnwTMpoZ17Y0WLaakuJidVaEWOL0grjQDtLQmOiwXsx9FSIMY5DUYSIMpboEzp4fNfh6SFCMkoWDWXoVWKReqwXk1WrpUESM86sWSNPEEGoBSTxgchAHoiOMOXkAqUEBJKFz9F5T0KiMmMXaOsFXb3CBM/O9d0sT5JFxxFxKlI4g00VlXJUxuKzD4uJBt8HUuzwfST0nugFxdZaU41GNJ2mix3GFpQjRzVqMc6SiBgnTbC1CmfAEpiOx0xHjsKozOxJhNSjrKW0JV2lsNUI5wqm0ynl5pQuRkLo0VF8Y2yhcdbgtKHvxdG7j57kPX1IqDiCGLLcRK6vMnINiYkqJUZaGD6dUugkEa+OwGhsScnhgyFFj9WS8CKmSIGu8+SaQQoSyJpm2Y5iNkU0SpJXCmvxPtK0HW3f0fUS0eqMxRkjm3qWDYnHiqGylpEt6HyPcxZtHU3XEYLHFIagIsEHkTz1EhNd2YqJqdBFYjJxbBSatq5ZtQHO5yyDQptKWr4gPgraaogCzujhs+TiIybR5GpboIwS09a+oWlWNHVPipGm8dSrhq2NCVvXd9jZ2WE0ntKsFqQcUxqjom48CcP1G9coZwtm8wVNTGxv7zAejUnes2obrFWMx2NGWxuUVUXT1pzXno0ru2xc2WQeOlrvefL8BdevveTOjbsENyGZsURZh5Jl0DRtT90GqrpnvGqZTEqm4xFV5Yi+z1ItyaJXaDAKhZj12hgpYqDMf47K0oREn1R+7i2jcosQFWZc0DeRamuD3WtXGW1u8vn9j9i6coXN6SbOOhazOaPplPn5ueivQ6JenPHy8T22N7a4sTvBmS3m7Zyf/MX3ee3trxC7c5xecnj4gI0iMtUGHb0UzHqDxdJzdnDC0eMX/OwnP2Krcrx57TavvPWesK4SGGfEl4gua1AjCitTjpR1tDGQUgOmQcUlmDlQk+I5JA8MXhXZCC/HRsqNmqmtyFpGWmFUTwrntH5JWdbZUT9C6CF6lA/otuN0/wnFnqcYjVjODmj7mmXT0bWGEBTMe8LpObaYsHXjDczeVVANMcnAQKeAcVN8tJBdzBUNTto72VNjThRQio4a3z6na/cpTKBQjqPTZ3x67zNiO+WdW7+KLnYIyTLevcsbu3eIvqXXHk1Hc3RMqQLRjZg9OmLz6l288Tw7ecR//uEfcHD/AWfP71O6SO9bZt1DfvLDZ/z65Ff46ndvYIzHTcV0Gxt49cYtUq85WRV8MddYY/nNf/EbfHLvr6k7Rdwu2XrjOl/94AqnB/eZbkx4561vYg+X6PKEF8dnXLuqeevr3+Ds0afUz54RTIFvPEFpplt7fPzxY5588YAnD57y7u4tpqWmtg5zZcxbv/YVntz7grP9U0ab20wnm5y2mvv7p8xCQ9c+pHpYkG5OOXh+yqc//ZjYHbJ57ml/+FO22OHFpz/nnarlw88/57W7Z9x95V1eHp1SbZQcfvSC0+aYV179Kns7dzieP8LZglvX3mO6cYX5/hF9SIRUs4XBHp/x9OOnFHe/wfb7e+gE0Wh6gAhWJ1ARHRCg3rfgNMlChyWgqJBhqCABa3csojIXgCX5hwZSIGb69Ku7mp2yAV2SrGK6u8fG7W1e1nPmJ2cs2gXTtCnPRJSJZshApwp5tqugndd88uFH/PBnf01KiWlR8umnTzmcLRjX2yx7R8gVn0qeQkVp8pL6W2BIlGZG5aYz5O9rdZbaQB3hPCTG23vcfOV9bN1hAtiUaz0XICjGG4671U1Sf0CiAArsdMxoe5dgJwQ2gAkqLknJE/UFS81EhVKZSajEqD0kg/EK3fVE1RKJqGDRSaODI0VDTIkQG+68cpt/9T/8S/7RN78hppBKDPRJua5SyAhmGDytC/8S4hTyPq5Sn6e/IqtTGqrQkVKg6xusM1zd22N7e5u+6zk5PuHg8KUYtCoZMFiXhYIxYJTwgCV9MGbwOhJUICm7BimEdSH3S86ByNP4QNM1tN7Rhx5lDdaUYjCZ6f0peMRNThrvSMpDgAsmJdFkbz9/YRqZkazIIKeQRkhHhfKQiOukicughlqzL7iE50a5/8nM5xQzYyMzDfMxqSReE/L1itQF+iBMvJRk6KdCRMdIohc/wRAJIUm0rG2IscPgIXlSzOyC7EsHg4QrZv+6uK6TUmYJ+3QJis5UbYWWOFHWDy2J7HOnLsky8nsOJs5KKzAmD/A0YQg2QGc2Q36nzEQRwFRkv2ufvnW7Lcag1uQGPTfRAojlQIggz6vSmTShDc5JAMXw2VV+74GFE2I/XCTS+teYh7rZ/0EJIKDz8KOwNpOw8+dIAqKhERsAa3FWEupiEOY1w5pHXMtfBk8NMggzEAXk/w6gVkQpIyEaEVkbQsq2AJlBwQUoJJYPEFNmwV8KM0jDUDlfYc3Q20u4BbD28ZPbX6+boAGrUCofYzZRvgS5/Z3XLweAkRIpSFcfSSQfsF1AowiVQVVODAqtBQfWFtTGsqo9y9hTFSVVUYgWXYl0JIWA0wmrIjE2xLCk0BoTIykpkrJE16NdBdYRlCHaEUErQswyBjdGl4lKeyoDGov3CuUco41tll4xXzUs2kjSAfEY6AWQCkM6hiIHz2dkLa7d4oXNEKSpGv4sw2diVEQsfVIEFVAqQOpJCPPEIm7uKMVKJ5SFaBLai2GRzTGSKSNbJkUqa0hOjqdMFmdKtBLT0zYEfEqYvqULHe1qAaFjXJaMbYlzjkoJCBKMEhTbWGGm9IGmaQGND4lV1zGvaxZdR9NGjlcrYkpsjDfY2JiiraEaldiyIKSAD12O70SQ6CSz0qCzGWZmrYAY/6RoMElYLzYb2AkJIKLX0U0KhxKJi9G4S+kOkoSQ2QMElA4ZxZXtfFj4yZIjMS/KTAkjWkBvNdE4TGFxSkx1QlIUQTEqOxZFwzy2uNZTGoVRDu1GYE2WD4j0YYicUsYQk5Io4ZAktlYJcJKUF0lK7EElQtT4KDo38cvQKO8JbcB4GFnL9sYGNQaiZuQ9rl+y8j2rJmK8xUQNvSeaCFqTksGqgU2UMNpSlhWbm1uUo5JVW6NDQCCRPHnI1Ddl5HwLZS1itEiLSmckccQoImJE6oNHJUfUFUk5knPEQRpVijFuSINPjUxJjIICLRtf0qIxtQ6dvHzf6JmfHUvhqsWbQgkaRWpqlO/oU0WvNCaIx4YNDdYkonFEryAYSmuwKeH7DpRda2BD9mHxMULvBTLTUFhD6RzOCj01ZeAjBNETRxBvHGVIQZBqFUUrq52hKByVcUzLMfPFnI2NKdV4xPHZCU3T0PtWzqVzOG1JIaJiQHnhDJrSoZRmVJRUSWHoGZeBthMwsdDCROlNTzIJhcUmAfBEziiTi2gtpiizb4/ClQ5XaLq2petqgjc5ts4xrsZc2dnl6tWrOJvzJpSla3owlqAiUWk2t7YpyhFlWaCVZTIZE2PCjkvaboiA1RRlwfbOJoXZYmPnJqteMdndZCt5lquGZwcvCX/1E45eX1CNJtjRiFnjme7c5K33xhw9f0zqVjRdy2q+Ytk0xCQU8tIWhNQLUwr5vPLcyRrqYsKFQEEGIdWIqK14iURQyTIqS7rU4yYVdWhQVcHh6QnxbMbs7Iy33n4HpQwnp2esmpZrVYWpa1ID2iia2Skf/uUP2N3d4vYrtxhNKq5eu8WXj5/w4POPWNQdN/dKlrMTlo1np9phrDTRR/pY8P3v/5TVn33My5fHrGYnLHXHx3/yR2zEJXuvvQbaoSvZzxSBvmvpup5xNUWrApJChZ6ke5TugAbDGd6fgF2iVA19S4oFsXdou4GyJamrUcVECkbJowbjAIdRhth3vDx4TgiRvb2awlWYpIlNT7dY4OuOImkW9YrV0QHuyh6lHUtqURFweo921dAuTrBpTqIhVVdgZwI6kpxCuYmAcCpIgUsk4LGpwYcVNnbQ9FBO5P9qh1UB0pKuO2DZzjlerPj0859z8GLO17/2z2j9MYWboiizOw0o4/D9KVU6ZvnwPs6NSTfu0M819uoO090t3vrqTSY7ns2Njq+8cRPrpgSb+NndTfGpAAAgAElEQVTHP+DpvQMOX/8GY30Lp0poXpCU5t5PP+TjP/tjVgv48SfP+OaewRWBb966wbs7O9w7DcSbE+ztMVc+2GF67RZH98954/XvELc8YfMBRz/9L/zsL/6Af/K//x+8/dorPHp2j2XfU/c9b7zxCm9/8C1cr5nuwFsfbHH48kvMxFIWWzw8mPG7P/sx/uSMaWM5O39K1yfMuMKTmD0+o3OQmsST//hD9AJMp7j77tf55PlTTuNnfO3OG+zevMaPP/qU3vd8+cmH3Hr1HW69/RaP733OT370F+hxhz0PfHn0V0xuFtx8/S5naZ9e34LiDhu7E8pNiwkrFo/PKF3i2pVdnEcKYi3acRR4JYW1TgLmgyL1PX3QNFZM0stfKB5DXse0SAKSzkzTiyYxEsUHq4tcG0c2bQdqRN1Z6n4EymEqRzEdEZNDpRGgch8lBsholR34pM56/ug5v/+ffp8fffEZ7773Pv/9f/Pf8tqrC/z+IX2xjSp3CJD9pII05zoPsYYZTUZZEomeiFMaokzCoxZQpwcaFHWInM5WNKFgagtKDYUyoAoSAczAxkqETmFGU6KaMkyYfVAQHGUaM2FEiksgSiR9CNkIUZhpXiu8EkmbMoXw1mLAKCuDo+RQyaDoZJJuYXd3wt1XruOsAL9quEq5sREjy6EJUgLcRCXrTtwk+jEpSD1GxjjEMw4waT38sEZTjgrKSvwQNqYTzmcldd9K/7DOY5RG32iF1VK3xSTNeSISlEgCRM5LXgnEPD/lhjumIPLnlP8+s1hVENP8lI3aUxrk0op1hsYlyYb4BAiAFZMMZo3Jhvo5IUUgE2nuTNJorwQ8sOIQo/OQBKWwyuQmfvioGSxQmVEyyAgGoEPJxN4iCYQitZBrknyiU530HTHgk0gnyfXw2pQxDHLMiETIeFSWQMgwNUKSdBWQz8X6XIZ8bCLPCEqkICkJoCceDTl+VOcpffZ3y057GVBJa4kBAzgThJkTwuD3oEk6J15oLf1kIhvk5ijRlARk03otFdKZeapjQKeQfVTyACBLfJQWLxVpsD2+9xjTi3VAvJD3yL0+gANkkGz4NYM8IAbHDGyDnMrIwDfR63tZJOmKLgUicqyiHLgk27gk/YDsxZKZMfJcxwsPixjW92ZCfMIiIkWJIQnzOAZCBpQu+ivpx4Q1Iix3CXlI6z6JDIrIvZ1N740wreIwtVfy+XRmy63BrKznSutnKoph7PpG/7uvXw4AAy40SUlu+iQoANpoRqMRIyfUdGUNo8mYTgcmTU3XeZz1TMoSU5WEShbbQcuvdSKFHt81+BSobAlKmk2/6vCpFeqw9wSl0M5kOpcYixK8yA1Kh9UyHTdy/XCFxRUWuo4UItYJmuRjJBkFmYooUXIBS5DNDIFqVEqYJLotSyLQyoaioqSEmBLwxNRnXb48gDoFNDFr1qGyjjpl8COldTJJilIcoGSRtMaCE+Mig0x7tdWE7PkQfaBNHb5TAgTEQLtaoX2PHY0IStEjaQtN8LjRiKIqMjukwLkCYxxtiGz2HT2RuoPeP6PrhUp97fo1ylEpkWIqok02WOpkSqyyfl8P+qu8GOg0FBAZX1WyqItqJy8YKj/UmWYWSHjhU8hDmnJaS4o5+UQm5KWVjUWAD3kkAoHe99IAZK0p5M3AOYKXgsRqAUmUAh81oYtrylnXdxhVYqsSrZXEX2VQPsSYjXuyMWtegAcDJFCDDQbG2AtjI6XR1tB5T6kqVEr0IVIaw3g6oWTC2BmWqxWddrSqQEeJ/my7nrbvqUg45wSYcQWuGkHbkLRMuHyM9Dl2TmmDK0rKjFr3MbHynuRDRqzFjDVLjEWjmKVZJtMFByf4FOW+Skkae6tEOmOyPlWaCYXF4hIQksgpjBSlRiucM5TWiZQ6eqajEVVh6Zp6DT6FmPBJioll42nrGj8dE+KwyQmoVZSGqAui8FTE3BXEBFNJM5+SxO+yjmu7yMEWd2qDsQZrDL3P/hYh5u91ydsiUzmstZTjAlcV2MKhQqKabNCmiCocUSvqtqXvO7a2twFJHiHENSAaOtCjglQkmtTSRiichjZhCyMx0cFgEa+SEBUhn9+oBreDbN6kTJ6eZ91lrq4L69iaTqmXPQ0RbS2jUUExKggpsqiXmJFET7tRRWkLpttbzPozZrMZh4cvUUrLfa0Uq9WSpmmYTqegJMq1bjqKzjGelEw2N+l7z/HpjK7v2dicgjYcH51xeHzE3u51efK7DmzB1sYGbdviXIEPPaZURK3ofc18vmJUOKqNqRRaKjc1eZ8RWZbKxYNQjLVyWGdl8jpQF1OesBSFGI6mhqKsWNY1s3OJmI0hcHp2xnK1Ym9vF60SG9MJq+UcYmS5WLH/6IDJpGSxmnH7lbvosuTO7Tvcf/KM+59/TrNcsjXdoF/M2X/6nDS2OFtRFROeHp7y4NkxZ6dnjAroTcNf//DP2NtUbFydUG7vQppjmAAOqxxDXLNWkaSiSCNMQ1wd0LdPsdUM52agOljW+E6jbcXi8IzJdikRbE2TvTVd9g2RpIWEJTQBq0b0K03TdKzKjtH2hNi3xK7F6EDXzjg7eEk9n3F61POafoNyMkU7aOolvdbMz2bMz16yPZ1QFlNW8wOm/QZqLACJrQwqbKK8xlpPT4NDo6OiPpkzsR7iEvojmGyjq10qVZDcJuPpHZrTZ3z64DEPf/I5i2VgdfWI6nWPSjXKe1Ca3rfcu/cJZw8/4dVRYvbkC7a+8g7FlVd59WuvYEYVWkcmRcWtzjA2hm+/f4uws8X+suOHn22wde0Vtva+S+FeAZ94+fJj2rPHLI4fcXL4FKsMT++94I2vPeRs9iW/d/oJ+4/2OTmd8c6bb/DBm68xefVVvvHtf8JH//73uH1nl/NrLR8/X7K3eZNP/uoj/t+tP2Q0mTDa2qD3DSnO6fqWk5cv2Sk3+M1//k+ZXt/kb378h5ycH/ODP39Ec9ZT2Q3evfkV1MkRL/efomxHVwdCLNBum65NhLZgbK7w2s4dvvL6q+wvH5DaA37t21/FdaeM9IIdAlevvst//eMv+E+/+yP+xb/6d+i4wx6bvHOtYm865S8/+Zgw2WXke04ffMhLf0RjNtgaGd64+iaFusnWmyO23vgWxt2h8xZdyODBIp5CbX4ujQYdOvqyhOhYvGh4eT7j1hub6ML8AgYw/GrI7Iv1Xw5T0aFlcIzLHUpTQhjh1KtMiimpvsqVzU2Mvcvu1g4qlBIXbnPBfdkhMolka34+R2vD1WvXuXHjFuPJlJQU88WC6Y1rJK1ybCsXE+p06YCHg1bDb3PjZiUha6WhAeYpMU+J09k5+8+fc3x0zHT3CkioxoWHgBpo5nkimzSSDpSwGgqrSLFDB09oWklg8zI4TCFgVN5rK4MtChksFGOmkw2MLYjKEFSWhyYthCwtsc4kTWkNKnlC6rDKsfYO+TvNx+WORZiNwWfKfIhr6e9A3R9CQYJK9Cmg+o7ed1J7WIspHNpZyH8Xo/gfrSNMlXikDTXZZX39UBOyprIPTX+m5CPNtVkDaoHko8SGx5DZ1mIIbwbzxyhFuTIpx6mzNjKMuYk1ZAlF9rQavPnUcI/lOkp8IyImp7IMjbuQii7RWHKqSogJtNQxOkRhfyaFTXkynmU5KYNIwkMXGDcYkVamDPKnDDaJk1yu7PLlHFJctL4E+6R8/rK8ey1VURe+Bil/fmE36F+MCVUCOCQVL3wVojwZ0otdNPPDeRvShobfD35hgwmltZbBkltriagfXgMDeqixh+MVNr9a30sihZFGX+QXRjzOEvh8/WUQevE+Wl9E6Aq4cAFqrL9XEqaHIvdsST6rzv8nhmH9ksdIa43DMcSopijSIpXBH2GSX5jBK6WyibkGLR6Ew32dgl+fS5UZOsNylKIk2Ylcxa7fL8SU02QGVpFZ9ysqgyoJ1udCD++vBwPQbMQ9YBg6g4cMpqH64t+4kOD84oL5d1+/FACGAqwWUx20oElJyxTM9x2+b+mSTHlNtDQmYW2kiitsipRKMzGRonBQWLqup+8Fe3dOaGJd0xB8RJcjymoESgyB2rYlxogtyzxwF8pPCL34IpQFIUITErHtiH1P0h3nbaLFsVrWBD+Y+Eick9GGzjqZ7mrxgkAJVdsogzMibVEpSJQeEXSi15qkevogSKSyFtF8ZIQtBWxmGRAtRsmD5rTCaYPVhqj8BaNFy9TUGSsNpbNQGJSPWZOoUMZmmEVD8qjoKJ1hczKiMIq+rgldS4yBXiv64Akx0YVACC0szul7T/IJZxzWSVqJT9CnSOtFd6h8RDtNOaoYT8aSeqBkSjmgvjo39CEEmVqnJLIQ8t/Bmga4fuVFQnNpw4th3WArYymslRQWJXIHYN2AqgS+l4dTKTBWPCxiiCgyayMqfAz47GdgnZw7kqCPyQiCKoeSRIqQv6cxhrIss3FjBpeG+15dILJ/nwlUXH+NLKZ977FKNsy+l+QJVximo4JJOWZiDaVSlCrQNjM8Bq8TJqbsyZERU5fvrbzAuLIkVWCMk+UxaJSVxiUpQaDLsiJpRRs8uq4h00+zOwpWO8rCUjgnCHV2De+6DovEylltMK5CGfFJsSCRoGYwGZJ1QBlNERMYhe2sINxKrT97YQyTqsDgGVUV45Gj2t7EOUuIUDcNi7phsWrwfb/OQI8xZR2rkqQSq/FKr6/BUGDqtQxl0GfHDH5JUSa+CZLoozMFUSlFUTgiChMiKviLyDNtKJQY5ZalYzIZ40YlkUTb9Hij6Yj4pqaIoufd293h2rVrAJJfbyyj0Yg+JM6OzqiXNTF6Ch2hGIl3iwnY0uCUwTcpAyl5LRkKBS5+1dpmeYBsfsaJJ44zmtA3tLVEllqjsS5SFpDoODk7Yn7+kumoYDSusOUIrxy6dCijeXH4gpPTU8geEEY7qrLMfiHZvdpASlJoPnv+hK3JhCdffsaz/eccHB8y2dwWoFVDaTTNcgEhUo7HbF3dw6vEYnZM38s1LozCFY4+dALCGEsXxNsh5vZAqMliaHtReOUCKzO/hkz1FOR5d6nIUc0iS4rKYG2JKyPGdTx9ts9iseT2nTvs7Gzz6OEjNqdTJuOKzY0pxhgm0yld1/Dw4WP6EFk0Lbdff53X777Ol58/4OjgiBtvv8P2K7s8v/8l57MzuvkC5VaUdsTGZML56TH1csG3v/0V3n33Na7sjFH1GWmsSL4gqRpjNzGmZDSxgETthXZFoseOwDczzg6fsTFdURQLjIO4SPjO0YUV9z66z83bnuu3b1OMxrIlrBYs6jmt7yknY8bTLUiaWAfKqLhyZRdbiTQorFYcvzhgazwRh/HeMxmPmLcyHV0tas6XZzx7/oKdK4FRUTHZ2OHs7BRrAh0TRkdHaCrqVUu1UWDVBFVtgI5Y7VEkfNdw/OQ+z0+fY9KcamzZe/V1yuuJ6C1hto81Dd3LGWbe8PaNu0QKyj7gz2eUZgvNCJyjcpGNUrNsex5//iWn+x/z1ls3UCaiS0Xs55igoE1s6Cl2OuXqrqPf0fz04UPs+AovX8BHXzzivU8ecufGiD/6w+/z8v4P+Pq715jNTmm6QGDOH/ze7/Ls4Iw/aXsmNsGVihs33+VXv/ctrr/3Nqrvefv9d/jLL37AZ3HOF599HzefUtpr/NWHD/nmb3yNVI148eQA4wqW3rN78wa/9b1/ys5rr7M6eM7Xv/Yb/Olf/IjZ6kvefu99fu0b3+J73/gqD//mB3z82V/y0Zd/I+yNt9+k6Urmz495/6sf8O67X2Xx/JAPP/oLVv6EnWnFZz/+MTotOJ8d8/TgjMXyh8R4jWpU86M//TFvXB0R5vc5+xLeeftrbGxuc+/JGana5yuv3WZ67Ro7d9/kJD1CUUMIaLNFMpYYLbqQJsqqgKElIbI3nSUWPgqI/+I0cO/pikWzYvPulFFpMmNVgInBYDblJ12SbFL2zRim6VCO4OatnXU042R3g8neBjjYHo/Z3B5jhoo4M0KGqe+61NDQt57lssa5Emcsb7z+Oleu7ACJxfmcYq+mjz2B0VotkYbJ+NC4r4ELeWmMMEW0oUmawwiNhjmR46bjyeNHPH30gLPTE25ujAlIU68yNDMknCiMDKeSINUyHFoR/YIU5sSwwCJs3MKJrJUE1hqRl1pNWY1QZUmNRVVj6pjlhtlAXCktE3ENSYnEpm9b+rqRlCkTSH2DdiWDbPoffMnodd3sDXr7QatPlnx47+WzmEQXAz6nkaCl+ZVeP10M8GJaMxASuR62srdbK8zdkNkCa+NLMlCQf17T73uf2WILCD06CeKSogD7KAEl+mFUbaWOER8OL1LfmNbpGSgZWJlc8/ngMfqiGR1MvyMB65NM3FF0QQZvISRinqIPhpAqAwgpQOylRtZKo11C+ySykJAuOvb8edPQEuvsXSFdfC6H0no6vwZYuGi4Y0xELewnUvY30TqHGbA+t0MjOxihqmjWgTxJK2HikBNWdMysAbKfhGHob621AmDk6NfhWl72SljX1Er6D5XI51Nkx8PLGIMfjEnj4CkoDbHhUnJGBkWMsQJGZsBEGytG9vnPw3kRo1i19h8Mwec15OL4hpePYc2iWCebDMefa5QhxZA8DCNBJKy/Blj3Dn3f4/0Fu0L8TZSo05Vc6xCEDTacO5HXx0vMluEYL45zACoufsBlHdhagpXraDGcjRIjnQFEZTTGSQ+xXgRVBjnXcPT6tln/EvPA8x96/VIAGORFI+nBBEQ2IJ3B75RCPhlZY35eoxEjOq0NJilabUg+obSl7T1tpqLbpHBFgbeGPnn6aLB2RFWVmHJM5YViXJUOZxMx9LTNEt83WKsxZcnSG1Z1Q1svSUlMfZbLJasOFosWTCnMkT6AEuTVaDELCsg6GlCoqDEkYlRYIjYJm8Io0ZwZZ0T72Ht8kEUuJEXwgv7ZbHxUIDGRxmlQkbrtsMpQaEfQAZvZCynT1dY3Zj7XookyF4t/TNL0xyALdPTEwmFMgXYFUStK6zBO0aWOhGJSFfgYaOpGWC1e6PEpdiLTSOD7lqZRpOiJSIJD13fY3lDqUhgXSlFoKzGRenh44kX0FZllQfZYyN4mVotzd0qC2qtsGKS9GBKJNwVYrUily/4ashHWdU3XtcJAUJoisy6MFiaGRsBP0Qwq8S3wkejFSTolsKOSGL3E//aiZfMYYrKUhaNyBSkNBkCaED3WiqwhivsmQG5y+/ViNYAWQ5Smz14U0SeCk2SRNnWEGGj7FucMwY9QKeGtoQQqnSgLSxyaslzaARn1lmOKOZEjKsBZZquGECNtVPQofP73MNwj+SYSimJaA0lG52l+ujhvWl0kZgyfKyQhgg8605g3lyHuTIWIT0GSZoZNKTeX1hpinwZoOhsZSaHgtCZkv4mQ43c1ItVQKqGNyCZ+oVDJyHnK6PGaUaHUmo0DmQZ4aSNOKebsdCn2zACEqUFqpNeADAS87wEvz2024SQlfN/T9C1NH8FaFk2Nip5RYZmUBdf3rjAZlXRdS1MvKaoSV22wOZmwu7fD7HTGoxcPODw9QNVnbLoKTSEmksL5l+dBWaxVpMKSKNERNAGDTHYwkpqRlGUYLbSrlmZ5znJ2ho7Z7FgpCpMd5JUwTE5nJ5wvNcaVeOVokyEQaLuWZlmjUHgvNMC2KNdblbUGUpDYQaNpVkvOnebgiaJuVqy6huWqAaWo3AhnFOenh4TxlOAbuq6miZ52OWNSlayCJ/QdIXq63lPk+97HhNUaTZ7Q5IIYLqRBXe9JRmJjQvCX6JWiCdZGqJ7WOJK2dH3EFCKpsa4ApWi7juPjY7qmpu9qpuM9VisvLJqdK7zylfd58fwpT548ZH//gKOzGWfzmldef5uNySahizx/uk8zHbN35SqpcDw7nXN+vmLhW06Pj1kt52xOLFolQt/Q1HMWJ/uMVEOPphhtwmiBspVMmvJAoKln1Ocztq5u44oS6zWrwxW9XrGxOaI+CzQrT9tGuvNAv9kzPzjDjQxuakG3qFhTWU1hArpfYNyI7nxBt9xnZ3Id00d8E2nnS4wPqC5QqhGTcgvVJw7OZ3z28WPqLjBfnXEyO+fa1S2uX7/B1saISGB39xbaTNn//Dnb8zFNgqPHNXfe2KKYbKCCyiyuFenkEbp+Snv6iMXZEbfv3MHUc/qD++iqwqkVaTUjLF5ye2+Du7f3wIzQdpfQrUBFlDX5WdS8+ua73NrY5r7vmB18RH12QnW0JPYWqlLsQaox9Xibnelr7L3/Ok+ePubs2T7NIlC3Hc9f/Izf/r+/oD47Rjfw7q0xk6Liu//4e7xsx+x/+YBi8gq3X32d715VnL/8OffbOct4xqp5Qep2WR7Peek89tqY+uefsKnO2Nm7xtWv/GO+/9GP+Z0/+c8sFitisJSlZdm0PDx4QWs6wvEzXn75kB/8+Yfce3zKr/za9/j2r38DlueYHce3fuuf8/Z3X6H4r1u8mK34le9+h7ppKD++z86NDV52H2KqBcX2KcdPn/HBe9+g0IZVv8nL40Dod2RynDxm/oTN2GAWBdPNglnf89f3n/Pm117jlbe+RTW1bF3doNoxqNE5O2pMSolutU9/Hhjt3EEXo8xL9lgTgB5tEqUuMVFMk60tYB75yV9+zocqceuVO8wKy2aezg2Mv6HaVwl5z6H+XtPX5c8pAS5PiiMoI3r2gbqhUiThSH1EO5fXgUFTr9beBU3dcP/BA54+e8qsXRG6nqauKaxlb2+HqCJaxVy3yDRZXyrSL1tgDHWZUhlQVZpFVLyM0KbIrFnw8Mk+9z7/jIMnj2kWM7puFx9Fhz/kza0NIJXF6AKlXNY1RHx9jlUtN29uUm+uaPsRfUoo49C2EKYgMpDp+g5tDD2KPko9rlJC2UsNVgYbcrGOTuKBFrpOhmuhQeuCy6GW/2Dlb9Q6pUG2xmzimD9PiFF81XqJUHW5ZvUxkIz485jCQX1xPhm+Yx4oDUlvwjDIDSFSG6zvFYQlqjLLJCSRXYSczBdNh/IRQxJwKJsg2JzwkAg5DUL815x1aCXvI0bg+f5Jgy9CNuXMtZFOIndJiCSi6zpS6qSp1m5tbClT9oA1IkUmCENAK/k3lRImy5G1loCCoZ6Vj/uLc+3sFrL268hnZuDPXLpQGfRfN7DDe/0tJG7NIs4Y4KWmfG3MqKQOVfnaOQcWi7UjtM01KgJs6MyejMln1nZuajNo5TOr9u/cVyrXtcNhxQt3vQFE0EqKSHuJBWxkirFOLxLwQgaZPkv2lRqCnwWNkppwiPqW8zMwqlmfgwsT7DWrIXhh3GcWAwzAh1oziYZ+YLha8rVSgzrn1oyHkI1Wh2HdUHsba0QloCW5zntP9KzrWWs0ZqhfGRghcuw+XgItYD38FaBLXfx+AA1JeJ/7ghggBbSWuFgdDRiTAwhiPg8D60flVKdL8qcBE7j0vP59r18SAIOLG//yDwXWGVzhKG2iLAoxM1l52pBQSgwT2zpwtpqh1AptCrEz86JZj6qWbGWtcEYzrSr0qqbzgRR6Yi8pH76zlE5hjTzShXO4wmJGY5peQ0go7yUBI0aMisROpn1GsW6slJZN2RBwaAGCETpYUqIDkpSSzHvIG21KQb5OJUqVMFbhBzzYGILPje0gQQiQPPRBKF4myWKVksYwxPWII+5gqpOQKFmtpWlBZ/PLPHEkSgGvjKFtGlToL+hxSG3QJZX18BZtDC6BQ+PQ4PP0Uin6JKwSHxNGi+GoeAP0xFhmMCEIK2VAf/Pia7SGmAh9oI8SiCoNh2yYZVlSliVF4bDGEJI0KkP8YwJSCHTeUyvxUNiYjIkR2tazWHT0fY/SUNqSUVFlnwGz1pcZIzTVC0Q3N6ZGJAMxo+0qDg/jer8U8MT30rjnzcFYh4CfsiihhigvhTHZ5To38t7HNYAh6LCg0GVRyqYYZVIjvjDSrPQh0iZBhAsjYKBP0MWIDjKxiFo+hw/ybGhrUc5KZKXTJOvxXtJzkjaEpPFRZDdDtrpSCussZUgioXLC8DHDfZRkY7BaUThHWVYURhN8m4HIBN6DFv2tD4GgJOI35dSYmCIeJQGpmRoo7BwxjlJJQDnxTZKNxlpNjIG2bfAZ8DNatIDOWtE85vtocJHWWlIpjDEka7HWZNO1wTMhrX8eFnw/aC3zcyF1XJJjDT299xf/hzxFSLJxDYCZAvHDSAlnNSH2FEZTlgUliY3KYvuG+mTJdHNKUWqKsSO2C86aObtXrnJtbxM3vku9mnB9XFFhOTqcsVx0At4Yg1UGEzXRSKKJuFwnVPQCFAFKG6EHx14mEr4ntitSX5N8S+WUbEJ4TGhJvZbEpxQYV4UUlrGjCR3BFFitKZ0FlbDGChiU8veJURg3haXvsqRGZ1PaaOhjwFpLpSr6jN6PyoLpeETsAsvZKYvzM0xV0qXIfDEH7fA+4IwR9o+InZgvloz2rmCdJfqe4DsGSnFMiT4EuVYxq3y1TBJF45vHZPnvZYOXBBfjSopyTFysxLDXXDjiP33yhN3dHZbLOYv5Oc4ZxpMJt+++ymQyYXtniwcPH/Lk8VPqJrBcSoLNlek2xwdHnDx7xnuvv87udMRoc5ugDHUj0c5aK5q24cNPPmFxvk/bLTg8PcRUJedtw/UbN7lz8zaT6ZTJzg5dUsznNc+f7tPVHXuHW4xsZHF0wlYFm9vbaLNJYTr2j/Z5cP8x3kc2Jg1O11TBUC9qdOGxFUy2NzBGE+slvj6jUJZrmyWzF4/QWK7sXaPwntnpKauip195lqcrQhu5vnubs/M5h4sDtnc3GW9tcHR4St013Lx+hcoV2KrAasvs+IywajEKzp7PmU732LaKYmsLtEf1pxhOmboZ1Q7E0Q4bk4r2+JBZ+whdabZ2Jqh+hbMdW7dv4FOiqyPF2GFGJbgAqWaIiI3BE1XkzltvotsPOFvWTGYRvXOVWI2JxSZEy7kaE/tjmj7x5Y0q1x8AACAASURBVL19ZmcNNoAOR5we7bN8ucDEgt3N94hBuJV9MeIslszChN3xXcpizL/+Nx/wX37nJUcnFffuH/HHv/8n/NtU8pMf/g33znquXttj/qSn6idcu3aNf/1v/0c++M77/Pv/6/+kjQtcWdKsjplEx+L+J/hnH7CqCn76p3/Gw5+f873v/Rve++Yr9MWC//Af/x+2t/4lN3/9N2ACv/rfVYz2ttjZ3WMy2eD1z3/OvF7h+8TiyUuO7FNODx1np47Yzdk/fkFVVmwbh5latu/u4nTN1Z0JJ8sF21vXaGZw3nXoUcn1keGjD3/ENN7iH13/VcLsjN7PWfU9xm2TuEaKJSToV0tOHn/GjhlTTbZobu4QS4X2DXQ9Nmp0KgjplAao66vomPfZ/LMs0Opi8x1ar5RAiZQYrdBaao2kepRqwXRAJ9G/SrTwBguqIEUNagRJEVU2hM5DtYRicS7pdKPplAnw4P4DumXD6dkJi/mMyc4WSfnM9JL8sKFJ/vt7eWlfTBQZXJ3gYOk56+a8fPmEn3/yGQ9+/jmz54d05x3J9xefc/0Wg3eAlh9RSSPWd9TzUyaV5v13PsD7Wzx+8oxF3QgzKOU0uLYT9oYp8SHQ+YgK0kQU1lFzwXKJCVQMa0klEWanM37ywx/Snp1y/coed199G125v+/Druv9X5zQX0yTh0ZqACFiHAwppdnvvWfVtmjV03eSDpK4GJ6YS+kXSimpEfN7hxBJJl0AV+qiCZW+Mg+tkvRRKiRUDJgkUu3SOkLoMwMjrZmjIWMhWsmxB+/FGjrLy5NShCg1kkKYsC7mKHo1gAoyyYbMAsVgdQbqYkIncEqGJ0XhxETfi/+EUkrUPEoY4EFdJBVeus3WQ6GBYTRAgUOzPdxHKl+jy61jlIuRSRwXA5/LaSNRunf5Aq3W0s2/fSwpD7KsszilcCp72WQzTLmmct0NEpebkvQXl2UjwBpguJy0IizaS0kx6aKOM8YIOJAGQObiU2pk0KFyutwgb5D2PF+/XD9aa3OrehH7e/kVUxTw6xJj/OL/iln9Bb1gGJgN50s8MMRTbQAx5OsUWQKuNMa4S+dVQI/LUprCFVSjUvwhg0drTX/peC8k6/n+iNJnDcDC5XvnF67hJdbLkGQSs8Q/ZX/GgfWqsunp2ikmA4cqA88pS7dSBmgESMxATR4A/0OvXx4Ag+ESXpygGAWp1MZQlIayKOhjwPQery3Klihj8V1P2/VoJYutdQVVqfEp0fT9WquUVKLta9J5ywLEpT4DGFpB5Qxl5bJmJ4lz/7Kn0QWrpiO0HmIvCFtMeeIq+c0pyqTRaQ0q4ejxCkKmHUdliFoWu5iy67SKKDwpBVSU5sz4Xppk9DqRIiWRUPgki2DIi7Q2jkQ2nIML/V2OdY0mG1Yaiw6CYNrC4XQieXL6Sjb1cwqrhJZfOYuOEasVpSvQWuFDT9dFOiXmKsvZAsiOyCFSYSWtJevPIInev9RY16OaLj98IhshS0ViTHnqHdEpJ4g4J+hchD4EiUId6F4hN/br2Ke01pxpJEXCqIJxWRBDoCoc43GFs5rRqMRaSRdJMTKqCkpXQhJ5Q/Kepqnp2m6tlRzyt2PSGfARbwhTlWgFpU44O2yag/GPUNaCl/NVNx1VWeRF9MLsZ3glWNPQBo1ZurSwRUHB1mZBvfeS2oL4YRRlRVFaDJk2aBXKCbVWeQMmYLEUVYUrPckLsBYVNF3H8WyGqRMKQxsirU8sm45V07KqW4pKZEU+SxK00jkeKienIKZIRU6x0QNdLcriaF2Bc4aUAn3XEdHES74QwwRIK01hnCDfKeHDL05MhlgxrYWJo6PKG0EgeJEh9X2/3qjEjEiQXa31Wo6DGoyRWG/ia5ScYXEdNpOLiCmtLwBBvS64sjEp0tx67+l8R+97QogC7iiNSSmzofJERENRGDEV6xv2tsa8euM6W+OSK5Mx0be8PNjn9s2rBBJ2VLHsOoJSvP/OG+xt71JuOpb1KdtaUZ+e86d//iOenS4y2KnxAbq+ZVGvaIno5GR9GJIiEF+diMZHWZdUDDjlGVnFuCrZKBVlYXDVFFdNwVravqfrPL7tCX1PMXIUWtHGiMmGxBhB94cCSWcJXYoRZ4T5gUoYPUyoJOZOaS2skBAyCKMwJEZVIeaFzQp0lDXEtzR9I2SmosCoQkxTyfeO0mhjhULqZfM0WmXGT8wU0qEgEXq0H2Kc40DBFNZVTBJTnTKA6CMUZQVK0fU94/EIVxRUVcXBwQt81zCqKkKMvPbmWxyMKorCCmioDYcnZ3z5+Zdcv36Dq3vXOHjyjFCvePL4CfXOFKU1o40puusoRyXTuEmzOkOXI3ocj58e8sX9hwSVKMYj3nuvppstubJ3hY3ZjCcvXvDk2QGnZ3NCl9gcjbm9t4X1K/zEMNHbFJXm9Lhj/2DBl/dfMJ5Mse6Ypu3Z3R0T4hxlGqqxYawlUSDM5zRnc9qmpyxKXNszn59hW8/mZIur0wmhS1gFVyYT4khx5bU32Xz2FIrEZKsAa5kvnlM3cw5PO8bVmNUnS0o3YTQKXGkmVJXj7tWSk4MvSPRcH70BcQXNMdg51p9RL49ozlt2r14lbW+gHh5ycnRCnI9xNhEITJcbdCHQdpEQC+g0G5MpqAqiSJz2959x/nSfXQKjrQmbV66idt9k0WpMNcYUE5plx9VX3+T0wQH3Pn/Ip5+/5Iv7R5hkGOkOWyU2neXu9TfY3v0qd3Y9b767x18/XnGeCk47w9Z4i0XbsuxXOK3YMFtMpjf48v4hf/Q7/x8//dknlF/9Do9/8oTj+xHnd/Fe8/DRh4RwykgFTGgx2jCyEVUvCceHzB9/wbOzQ5Ynh/yTX/1N6kVNf3bIja/f5H/6n/8du9tXwRaUN9/nrTvvkExNjImTk1PuffEFq6bn+aMZLz99jppH3Oh1nryYofpTdnYL3nrtGs29I+68+jof/NZv0nZLNre3+Pz5Mde232D1rOHThz9jtjzh8R/+DavuiO69MacHBzz54oD52TMOl8cU166jeY0rW8dQFMxOH3P05Y94zd3k3be+TbE1hdKB6XH06C7BSKHMCdWypzjdo2x2sZVhHcvwC7toHnyR5JntOup2RTIKU3Tit6QjXTejWZ0SQ41vpY7pfaTrAV0wKje4ev0umDEMcgIgZuPJxfmC+XLB6eyc+XLJ7Zu3sNZyfHJM0y65e2WDauQuyv9hopzWR0mC/K7yb9K3SXrCovU83j/h0csHPLr3CS8fP+V8f5/u5Jx+AQUJa2Xqf/kVBxAnBPlD7wmrJSeH+zTNjBs3XyGpkpPzM7oU6WILSZMwpGQlTSMKY9EpLVJCrdbeUSqxnramJOtkjAFC5NGDR/z2f/htbu5u8xvf+Q7/y//6vzGtJkD19xf7l5gyQyk0rLdDFzecv/W02FpsUaC0lvoqJGF+XPoavd6nL/kLwJrlaS41oEmJP4XONZbK5y8lYZWkzL4dzLMLpamcJWhF9J4wnP900fDHNFD5fZ6ei0Sjy8C4CmL12ceI8/6izsvNpNaaoigYj8c467Amkv5/5t6ryZItu+/7bZeZx5XrrvbXm7ljMQbAzJAEJYYUAknwhYSkEPUB9Kn0phdGKBShJyGCDwJjCAoYiwEHc93cvrdttSlfx2XmdnpYO09VXwwBPs6JaN91Kk+avdf6r7/JnthLs6sQgKIyYoKi8uBBUHqLoflPl55v5EQgEYYZ+oBfFCBDGBoKrTJJK/FNkkkURGFyi9BdbuCE/FtMUcxQtdoABcO9HmMxCi29gLBYZSAwML9jTuU9JMMlpn4oF6TqyhJ9ILLywQhVUVUVSilCkYQMLInhHgJeATDkdhMZ9nAvCRBSnskrLII83DNDs168U4Zr473UlMP3DDFu/m743oMcJRXAZbjGlwzrQQafNuxfXeqPzeMx9AFcYhyXT8Wl5Gr4fmZISLnyfQCSSQWQumTADJ8fClMkxY0XyyWR5rfzHjZyui//Q+ltdBn25M1gV22YFsPhC9411NubT3TJ2Cnf5xJI+y0HUl6/EwCGGppWNEFldArEXk56jIm2a7GmklZGqQ31PesGJWNWtBYqe2UUk3GFdo6cYd2uafuWrBJVoXyHtsV7j875ygWTyXPISvSIMeF9JKzX9EYm9r5dk30vN0BWhCQNT0a+tyyaUrwRW4zyKFMTDXil6GPGo9CuFnpOEgTcETE4XFpLPFzRUF2V1EQt03CvIOQIOZFTkKSGjauwuO/6FLDJiJmT78khkJXEZebe42NAhUylrcgwUkmPsAIAqFhQMsQ3o2kaVu2a5Hua0RhtDBfLOTFEGmuL50SSKFhEw9fFwMr3LPuE7/sNooYa0EPQ1mCMTD8s0niklPG9Rxu3cQ7WWVI6lIaMxoRC5dIaZSF7QZWdMeicqSqHMQ05JawR34GchD3jtEEbMega1TVN7aicFRZNzoS+IvoOpUTGoZSi7wOL1VocplNmuVqjOkflHF4lTKH0RWXxWNZrDykyakZo68ggkZrabdDjQdcJZUJQNtghoSSWhTF42eRijHRdR23dJtITlPhMeM/WpGHkDFUGazN97PAIgGaUNIzGOElR8YgxV5aosohMClJSrDpPQOhyh8fHmM/v89q9O+zMJthKb7xefPAbNoNzjug9yYiTsjaa0Hu896zXa+rKiuFTVhhbobWmi2zQ9GFT0lpJEo7SYpSbI9ZYlDH4wWl62ChyhuJgTc70fV+uu9kwXEA2kb7v5NzVFUpdLs4CtlmMycTgZZEtC/zgkbWZTDBMcKIwOqwVo2BtBJxJMp2LeUCw88ZwSlzcL9XQgwmtSUAU6u2N/V2+9tY9bl/bY2fcMBtXLBfndMHTeo8djxjv7DCZbrM12eH29dtUM8fF/JD+7IiX8yVT5xhXlnAxZ7HsyAFC19PZQJ8jKmiyDzRWzJv6LjCZjsv+IOvXqK6ZjaZcm40YmcSt7Yb93S2CrlCuYdkFLpYr1u2K5WLBaDImpMy6ben7hE8CPilsocsmtMqbgjKBUI3LuU1e4mtJEYxMFarKYnMmxUiMnq5dUTUjZpMROXt86GnbHmKgXa/R2kGOhL7FWYPVir5LjJqa2d3bWKvx7Zqu69DOyHOnFdpYchIgy8eANrV4+BRGVyoFlq0MbWH2ZDRt61FDZF2S6xxKMdr3/eZ+WSyWPD54xvnFgtt371FXlvFkzM1bd/j8wWMePHzK40dPCxvIoKuGs4s5635BNTJcr2t07ejniT5FlGs4Ol/Rdh2HR2dYq7CVpao6zg7/lmuzR4xnU8zIcb6aM9qaEWPi+PAQkyPtvVuMleeiSaj+GtcWS355/5D7j49YJ4ujYh01RydztE6MR4mL82PGjeL2vTdJpyvC6ZK4gvlJT2sio1HN6sWSs8cnvPH660JtDgmrDeQFWin64/u4ypGNZdVHtsYTrt+4wePHB/gU2dvfZ366IHcehefFs3Nev3ebWTPm2ekZy8kBuTecPvsNFy+fcmt3h+XJGS5r5t2Csxf3GbXnWKVQoebhJy9Yry/Y2ppy+mJFUJGtvV0m2wo7CrAzgdkOZ88P8P2aoyePuNZsMT884eEnv+T7/+SPcZNrbE3GkvJIwjWa73//Ozwen3Ny9oRHTxasuzHTxrA92cHUmp0qMB3tUTWKs9UBvW74/j/9I/6vv7iPHR/Qc8ZZd8DDI8+8f8k3P/g2+2+8w1/8+K/48UcveXJ8yK2Dx6wPA32nUKYi5DlH5z/hRz//aw6TIrobpE6hTc3Kej6dJ/6PP/8x33jrDXZufoW9a+/z7DTzFx9+xv/0T77Flh7x5MPHNJMRzd4uzsnUELdmy3a8NruN3kkcffwpJw9+xjfe/R7//H/9t3zxxcf81Z/977x1e5tvfLCPfvMeb//wj9F7d9BuF51rvvf+hLRQdDcDb/3gq/zs5/8Pd2++ga4WBJ7z/P5DHvzNCYfzZxz7Q17+4lf4i56R2WftbrP1+k1UPefm6x+w/Z33qepM9qf43MOzC47vH7Lan7K/t8N3mo46zJkuPPW2JhQGTc4KfCAXeZgKHpIHK/WCNFIaZwAlTXfONc7skXPAuT3ImZ2Jo/MdGEU9mYCKdH6FdQ6lpInVTkvicMqs247DkyNc1fDee+9x/+EDfApMZ2Nu39xh0jjUsLJmvQEv0L+lHk/CytWShsrZyQWffvQZnz7+mJdP79OdnJBOzlCLNbavUF4Gb6YyqGIyWJbwy8l6DGTT0J2eMj87JaWedb/C1YGgxGTejRraLoingFbkqLFJ5JvtYk3Wop/3fU8IjmSd+EMYOWZttCSRYViteg67FbldcXZyjE4CkmP57Q1IYS8OmNNl816jYsB0phiNy77rvURRNpXUDzGK1DRmNjXEcB42fmlIhDnp0uxRKQVJ4lETStJvEFmjSiKFESZKRVQdwoMoMm4Sy0UrzJYo95IrNceGoRkCXddt+pqhEQPB3CrrMBrGzlI3I2IImOK/NkR3jkYjTO8hrzG6RFpqjUJtmuLBQDoP+yRSq2atSBqSLsaLKhdz6ii661L7iHHmlYl6KudP50v/uaQlr3hgwCCNpvx+kDoIO8AYhTaFWVDO9/DKmY0nwkZagQzkjIPKFBm3Ktebge2QNzIoMUDVl30RiIefUiIHHFgsymz6p+G1kQ4XICIWf6s0VGOl4Y8xDqmhVwaJHeIBV73CsFiv1/gr/mohXTHGHBggr7BOirluGeppJccsSR3F1DRfAQjyq2ySoQ4VgO/y3ho+p3yu8MpnHN53MPlUWkw5Y7FNgCvyb0R+PXiGDDXy5tkqw7w0gDxXDEMFENPSQyEsX71JYpH3M8ggSRfPkawSufi+DEk3uhxLpgwaUaD/jpjpldfvBIAhJyYQs9kY7WWtiSmzXLcs1hUpefEiUNCGSEgaU/XUVjYKmRxqbErYqNG05JwZ4XHGDxhgSbYIKCXaSImO1ILmxowPCmccyhXrwQy7szHOGVT0+G4tlDBt6Xzm2dEZy6XorzOA0miVIXToLI2CVjIRiMqSsOWm14WemAlYTEqQE44EUabLtiCA1liMSfQx0YdISOUG1xati0uxEldmjCZH9coiM0yZyRLHE7PcSDEWeUYMaC2yBEWm63uc0WANbdvSl1hIeQA03ifI0hgbXVHXClSQxdlo+hCEeqcSzkJTJXqfsEqL6eJ4TDICLoUoPsFG6fKrQHRKG4y11EaaGZQYaXZ9T0yJqqoAyiIiZj2VqYs/gcU6I94YRc8liGnxOACiD6yDp10kkRoYhSJBjDgjkgRnjMQs1QZXTXF1jTaOLiRWa2HOZN9iuAQwFn0k+l6mytrQNCMkRkvkEjnkzWY7MAWGRecqpWuYOAyoMVkAlaaqGI8bjDUYp1Eq44wuBqcCmss5aAhJQw8h9oTQ07Ydbeuhl8bLx0TbywRDW8uoalAu0Cdow5LFYsmLF4dUzrAze0eaLO0kVEeHEldaYo6Gz5ii+HsC9UgAnJCEBqiUsJNizvQh4GMoDKPiklzob6oAgRrRSVprsXVFCkriU7VkY2szyHtMcUs32NDLFJ2MbVuAVxgYvW/xvS+rDpfTCIYNsCDI0mHLM5RFf6qzvry/rCTDGMA5MULrvACJg1Gr3mwOqdxPJdLXGowV+Zfyia2mYlYZXjx+wJNPfsXIKra3JHIyZSlCkhFj1WxqKtVwffs6Ozd32Ls+5vZ0xMhYRtah84C2Q+cldaYn0+XAKFoIidGkYXs6FZNKV9P5SMgim9uaNNy+tsNrN/cYm8SNiWXiNAufSLZBnQnDYzaZ0k2naKNYrVtynNN1c/plS58yxtVoLDFnjDIYezmtisgEDMKGRhmVIvQLQoxUTU0zauTaOieGsG1H5ZywbPqO84tzTpcLtG0EsPMdMSasFaZeZRTz+QWnpw1WQQy+eOiIPtk5AfBCCGJIFxNt16ODHJNOplAbJRaXbMvUYPBPKb45xqKUKTRPmbYJsCqFcz1q+PCTj9mZjrl14xo3bt5kve7oA7h6TMyKo8OXjCZjbG64OD1k0a1RMZGqms5n2r4lIP438/MFeXcbYytUF1ALz/Z2zcjWHB+3dL3Gjh3ZWaweiedMtpydnvMwHHBjZ8xxe8rZ0RHf+GbD4fmaszZg3IhqtkvrxdNDqTnj2lNpi46WcLjAL5bkqKiYkXvP2WrFSZyzXqzZmo1pL1pcJaD0Yn3B5188ZDqZst11HM/h9CKzc23Ky5cXvHyxYLnoCLHi/LxlZ/cOsYUcTmXC5mZEn1EEpqPM+cGHPHvwayoiZnvEbDrBJJnC9T6g1j2YGU3l2J1owkXA9hVjpmQiTW9xbaBfHsL+NdCebbWkyyv2zRrrO/Zvjpil15iMazHYtoZMpF+fcX7ynIef/gzVnTGrx9Rmyutv3OHdD97g8PxEGq/VC754+ojVo2Nq/ZiXx79gnn/Ck8cLdFzQcI5Lp/y7//PHvDe1fPDtHZRfc358zEXn6WLN8/tHzPQu0+kuvj3k8dNPOEn3Ob0ItGFCPb3GetXS5zW2gg8fHeEaw7/8V3/ID37vj9DcY3bUcy1e53g+50f/4c/4+ltfp96yZDpQ4k2goqKevs33vrtHaI+Z1YZ39yYcPnrB7bua2zff4fr0X1CPEm//3rdoZm9CfZPkdjBuCr3CVg6fwdbgGsXXfvBP2R3v8dlvfsqz52f0eYukNfPzJzx69AW29rz5+g22pjXnc+Trt/e5IHBx+gXuZU/Yq/nk6IDTnz5kcmFovvY2o/1tJlXmzlbFVjhFxxmVVZAjyUfuf/IpTx89ZtRUfOMbX6MeVxg3RmnD1va2JLiJkx1og6011DJd3pga+g47NQX8AFSmKrJJnUvNIMsBzlbMdrYZbc+YVmNm29voynB2ccbZao7RHhU7LCMMyLqkBmbqf7EERpFJIXP+/IKnnz3h8Nlz1hcXuD5IfHeIkrDno0iaGeq6y+Y9l1k5RpFOT/nsV7/i2dOnwgYNgaCDTLeVEcN8Z7DG4fuWvm8JvmO1XrPwkaVPRFujJztoN3yffFlTyhSKhMGoiqpysvbWVs7xUJT8tpe6/KchwnKYXFPYHjqXaM0ofhRSnxYPjiJlyFeGGjkmIZ+kRB4GGSmWBAwx0TaItDalKAamV0e8G0qm2tRdOSOgdGipNOTUS50y1AqlWdZa4s4HU8lhQm+MKWlvsneJaWMka4Udj3FOhipSw3pJO7tCzWeTO3HJ3Ek5sVh3bIxKVWEhY0iKwprJRAVeS4x9thpdOalpSj8g7AhJXrPF6wSVCtNCvpvKYoSvcgE9qhql7YYVvKmd1DA1l2soviZsBrybwVwKcu7LdTfF286YRIryPTemnyhUkhvFFMb2MMQazvdw7ofaOSWpsQeWwfD3MabNeRV2rkjMfYivsJ4viV2X139IFKkqC18CPFKSeNLBA+Pqv0l9YDZyl6vMCFXkzcPxlCvChnaQLwECuVwDT4FXvuaVR2pI2xnuzQEMSRJtf5XDcSmNv/IgluMfXlfBmMEDTxXGzuAvIrYPBXTYfGVGHn7pAcsBXYI6pQ9PMZHQYm6r1eb9/r7P+OXX7wSAkaHQcjNxoDJrg6lqpltjtnf3aJwm9D1JwdiI5j/GJOyC0KOiJ/aRNZm0KoaPzhRpAcQU6JIiKCcnPCVySER6tBbTm4SwD1xW2FqSCBKZdr2mcWPqymFTIKiAthI3N2462jYUmcGG7E5trDTFRku2ecnBViT6FEAJ4hgL8pZUwqqMz2ByJqkS/KWVpJYUd1ulFERx6I4ZclJ0Xcc6eProJTpdi0tuMrqkpCPmkwVBiyERfSToiEMWL/F+MFQGkpOH1TpLHwKr+QVZGZSx+MWKUBpNrRRJ9URtxOHYCSIdchIbQWPElyOI2y4psl4tOb8QgEhphXYyYVdKS5NYHkIfZcKekgAuSYH3CR8TxlZUozHKOhJ6E8uEKufJXMmhLvqsnIUM2lQ11WhUYj4ViYi2cl3a9YLQRSpbQKgU6Ls1nZfJ62q1FFNVNDFZAX5yz8hZqroG68A45l1kHdZUVYUrvi0xBJkWDfd8uV9A7o1hcb5KORs2dFUytFMKaF30gBvgCVIM+L5D9+JM7KgwWpV7ejDVtFhToXUmZrVBUcUoFowyIsMgFRNaIxKQojUJIWKCFnlChJSVxHPKZRKdoIIueFQx2wpJDGZjCrJJaYEJQpKYUx+DLPpJosmqEMFaWXBzMboq4NVmApGS+BekiFLgg2hKq6qSTTvmIoku/hpX3LpDCCLtKIylV14DfU1LAaOGMcAlke2Vaze4MYsOtLgsX2FtiC+HRMVapamtE5+LymGtABtGRaL3aFt0oEajm4q60minSSpRNQ1V0xDRLNYdi8WKLvdsjbawxjBqpNG31jAai5RIK5EGtb2sbbYy9F2gtoZJXXP35g1GTcPx8fGGfmtKwgspYXWiqQw69ETvCUmRo0HbQgdWirpuADGvMsYKK05BjJlVH8QETwkgbbQAPlDQeKOLnKIphavc7/PzOadnF7RtoY2GSK8NjCJ6PBKmQgH3hlraqCzMOmMIQZ6h0HUkA31fc3pygiFTO82oqYCMsZq6aRhPJqy1AHkikYMqpTKBKZOiUhRZrVCFZnxJQZY0GzVkypd1bNAEJ6Uw1tKMxyzWSz7+5JDZZMKdO3e5fe8Os91rXCzXHDw7YDQaMRtX5OxZrs5YdHPUxZw+SDxiXddoNNdv3MEZTZ80tkyWc7T0PlBXhmTEV76uR3Rdy/HxKRcXK7Zn+7h6RNdn/LrD+4R9cMLK1ERT4UOiy5r5fMnIQcw9PijevHuT1K94+NlzYtuTk0bpJU+fv+D45IjaGprKok2FdT3pIhZylCExxTbXUdUOq37F2bwjqMCL5wes5pHFcsXZ/AmffXbAt3/v+0yaa9zev0E9Thw/v+Dw5Aw/mzK/OKVxLZOqYVpr7Nhiqgp/6qSKygAAIABJREFU3lGNr/Hk4IjzgxdgFmxv7bE72mJrdM7WZMb+9j4pejF+fXnGeDKmvf+ADITVir/+2c85PT+nmRiM9ugYGU/vsZVWJG9Qvsf2F7jlMS8+/RmrZ19w7/oNTEps7e7hrt0Qo2WVeOO9dzlaXfD0w/u8dW/Gd//gh5ytRzw9+gUPH55w/MWndO0amHF8lvjpzz9jMpthkmNUz6irXVwoMZ/pBNcEpqMxZ+2ad+++R1rPeXR0ga8kAn29WvJ7732V/+Gf/YCvfv272DfvofQ2r79ZcXtpeHz4t1x7fYutNyxMjsj5GtlUJCrs2tEeJnJoGN14nXe/t83t2zc4efQJRx//iLvvfIU//Df/M503GL0D1T7ECmU1ySay8aADGE3tNamaMbr9HuQV1+/c5Ma9f8727Fu8/m7i21+8z0/+Q2LZPuPeN9/htXff5/yTJR999JzTM4eZ7fHxb37Fz/7TT7j59a/R3txj6/oO733lHjfffofz1Zpf//JvQD8lPK+5Nf02bmeb6BPdOmCtZTKbsr09Yby3hXJKpv8oUBalLCQZvkgiE4i5Z/G7ycMPjQg0DCF5GV5QhlBZDP+UFa+B4+Njjk/PqXcdT54+5otHDzg8PWG2M+Vr773DbFQh3ATkfdWXgQauFOq5LGaa3GXWJ3POnxzizxdUGXQo+3AuEZcpFVNGXdInZDor8oAoP7JHWcPe9T2m0xkHL+d89uAxPl/wxWePJQY6Qh8izlX06xW+W9Gul2Sgmm6hTIWzGmXUxjBVlwZVcJOBHm6J2ZbJdi4S33jlE/6XX2pTs5kNW2FDf8+J4IMATboYHaZE8rHIpjM5pGIVKuutymXwUU60mLavyFaAO1309mpzFS4bp0EqJA2W/Kq1JhoZvGgD2jiUlcS/YfrvnCNnkUy/CnJfGkDGXJjORSYTkdsPKPLKTI4CzAyagYQwGnIuknOtig+eMEWzkcFWKVkEINOapAS8SFk82EJhlhYaLAM5XythIRqlqJWFnIqRrLB61FCPK/EQCVqTqwY1asAaQhn26PLj8ppenl0ZAg317GUNp680wwo2DXLhsZb7aqjDcgE3LuurgfF41XviUp7xJYn28P9QmwGUUsKmvsqikEadDRPiMhJ0eC/96vsNzf6m7xukIV9in8TL49vU9kP6maKELFwydQb8aABTrlagiit/4NKH4urxXAUvxBBW2O4bBsXV8zMwO0rN+so1vMrwuHIuZcB6CeQMX395VJrBl0W+UHPpaqMZjH2vYEUFs7n8LKoM//4hCON3AsAArjx0gu5YpVHabkzTqtqiTIexFldLId11a1aLOQGRQKiUyTGw6lrqpsLZhmo8IpNZtS39WszmhMYlmcM+RAgB34fSpDvWbYcyFaaqMVZjq8wKTzRK6DeCuNAnI3/W0sikoo22SuQcqqDjKmWUijJVVknSQkpDmrIkAGht6cvdalVCqyhfkyM6+ksmXsnP7chEX5BFpUlaEc2VSCmtilOsJGhEBdEmVFISEZrkIdJoYXEoRKqRxXyxaSqq0QjVd7QpoYxh3IwE9MmJqq7JMdGv1xCEshejJ/epHEemD562jaQi13Fao1Ii+B5rpQHGZ2xKJGMupxRKMpZTLDq5nIpuTheD1rjJPM8lZSUm+X+pLJCi2xR0VBIsPKHv6QFlBTQRI5+IbRxKJaLPEHOJN5dprYpSWChXk9DErFC2YtV6sKWJUJkUfEHtndDPYySkiMtpA25pIwv9BrzIv91BeUBaN6gtg6HRoCsTWURKAes01FZMh7KYRSWvCCrTZUuIBhNLs03x6igbiTHFZNNVKB/F7yQlQtaFUlo0l0pvklBygpSU7LOFwpuUgBNZC0vGI5G6be+FmmkqEvJsoJBNQg8UOkPwkcXFnMY5mukESgJNKqDO4IEyaBpTlkY5WUNWBvEFFfOgmEEbiyaK34AxAmaEwsSxFmcdl0vy5YIvG4qsC18uvtQAcKgr/19fFipCb0yb4dTgEl1bg81gtS5gpCl+KbJLueJ2b+uaN997l62tMVpHcuqZbs1QxmBdDcqxWncsVj2Nafjgva9w7527xLTg6Iv7eBIYLYDHqMbMxYRq0H7GkKlHlv3dXW5fv0GMgaPwAh9iMaesSNETfSRFoWGHvqVLiWY6uvSsAZJSrPpeNi8NtrJM8oh1L74paCsRegXA2PhbqLJfakT+4EqErpHixmRN2wpIba0l+oD3nmVe0a3XNHUjMc4q40NEW01lNc5knDVUVpOTmAtXzjIZSSyj9y05KjTiNRT8iFW7Zrla0fWWdfJgPDGZzXX3xSAtxohXPRVi9phLnroqG79gdxrrKrnvjC3MNgH3mvEY7TQjM2LhWx4/eUTne+7ce4PtnW32b1xHW0MzHVM3jsn2DFtr4pkYxOViPqq1pXKVUE+RgrRyjq1RxY29bXZ2JyQbWKwvOJ6fMGGKsTXn8wv6PpFGNecXkUXOqNRQW405VZhdS9aW8/kZMR7St0uubU04o+W8yjT1CBU7UtvjsIQu4LlAVRXrLHKa2e51ohkR9YS+73l5eErGsGwt65hZP37JFwdHdMnwRn2N1q9ZLpdA4sbNGdqNSMbz4OAL+jhDuRE29qjGse46Pvz1b7ixO2F34ohGSZR5Npwtlnzy6REffvKceZvpc2Z7e8zt7RFpecF+e52OxGQ0pnaG9SKgY8vRkxecnZ7Rdz0vPn9G33vYqljHCy4Wc07Dj5idTAhuh63xhDGeiwefwOELtoGjZ895uViSR1ucfiFpUMv5CYfHnqdPH3ByvuD2rTd4cdZgTMPIWWLniRc9VR5jZ2PO5i+5ieO1t17jg2+/y+7ObXzaI5tbXHPw/OMf8fL0HLO1zU8+ek413mE0ymgW4rNlK2KVuPn+e/zwj/8Vs1v3ZHpbnQORVV5y7e4HbL/9dSqlQY2JpmKdE4nI2DrmocVpx8iMYFQzffO7TG+9zcXBcxbzDnXSUO/cBTsCY/AmE0wQfwkSdc5YJUk9KkGlEmTP1u4+zk6IyTK75didfYfpzDBfPCbtWd782rfQb89wo7/kp3/7U26Ox+zMbqH3vsKb3/hjtm7uodszLl7e5/Nf/jl9B/N5T721g1WO/RhwscfaCrs1483xGFdbfGjxsaWq6k31HztPu2zJuQJlCHiS6tHGY03C6YwKEZMUfatog2LlI22C1167Vwza06bBSBFil0hZcfvuXT544x18CJzOL7h59zY//OHv85V33mRWOUwOaMTXZ9NgbFgYQ7M2bDAS+UzUxGWHWnhcSzGnLskbRurkIcWBYWK7GZtlQOpGckBPdrh+5y7bO3usHz/m8fMjtrYNMWSOXh6xbj0pI1KNnBjVlr3tbe7cvcOt117jbOU5mi95MW9l077STQxHn5VG24bUr+j6wGrds+78JtXiH3wNAMZAH0+X+25OWaSpKqGspiqeDLHvpX4oko/Ui5noJnY+iyTDoAhIaoyqM9pUuMKsUEUymVW+HEAPv1UiT06I71lVV0waQ+MUNmcBprSRQcvQuiYx6R4SyXKWhIyQUzHpVBAlxQRyGdRJIziwWZRSkhuuC29BSxOZc/l7I019BkypYeSd8+V7GI3Vcs8OEl3KHlVX1RXUTP7OaFtqWGG9RnKhm14mGOYkwzBjBcBIzuK1nLuh0d2wCK4wiinXYdgjMWIArtQAooj8RSJjC6O51F6C1wmoIz5mUBXj/pyh63vatr0iQx5wn0vZxfBZN8emzSuMjau/v3o/DgDG8KY5XxK1Nvfm1YZdKVK+BOxUObe6RBQPD87gdSHHMgwWLxkRKV9eHKkQ88YqZvNZylXfsJW+dCzDny+lJIG+T+go9+aXwZcsb/gK4HN5Lq/0IClfAWDKs38FMJFnSQ40xgJUFFBQvD0MOUmDn1PBcksfcun9cUUucuW9/z4Y43cGwMiqVLYayJpIIKRMFyLr3qMUpGTIuZwIreiyocuGpAbqVkbnJBT+ekSezMiTidCqbEtSS1TfY+uaxlpUyhA8OURSiGhjUcYRotDcbe2omooY1sR2TVvMPo1xxNjTBUpMYtk6ckLFTNSWPilM1psLazRUpT8PKuGjp4+RnI18ZmPxykr0p8k41WNiwCRPjh5FoSEqK4yRqOgLGisbpEwEk5bo1gGxzQwLqWicDJcL2iZiNZWFpCDbGI33CqwYoWajiWR832FSwlnDqNLkCLmT9x+PRoIWK4WpHco4/Br60FFXjq5bAZnJZMxka0Yq7z04zKac6VNAD5GouSJm8WjwMWwmDCGKu7ePAlYobS4dqsvUPsS4ifq0ZVpqK2HexD4UU1dD6jva4NGtE0/BFFER+thjjCYoiRVLWaJbtXMio3A1rhpjNVQ6irQo9MQEXjuM6RnMPCU+lMsJDGWRL9cA9CuTB1kU0qV0RJXlYjCuVIqYhObetitsr6h1YqRllc05oVKFioZeV4RkxShycESOBWJOMnWvq5qqqkltJ7FsQdy1yRlrNI2raKqmbCQZYWXKrzHmoiMspkdFhxxzJilJEcFoXFVhZFcdVmAyhjonqr7DL9ccHh4yVbDf1NR1Iz4KV1F0JGZOtJ2J1ntIMHKil7uYL2TjVRlbGSLC1IABsZdUmLquqOu6XIdLU86rC6UaEGZZ2WVIR0Zf2fT+zsKah2KieLMUsKiyTmSkvi96YTGuzFYa9h5FFyLK1mzduMnOtSmJgNIZ6yS+eZ0UzlXUoy22b0+ZTre4fvcO09u7zOeZUFvsbEK9PSVpKWJG4wmhV6zmK/ocsUpTaU2ldJlCJWprWXcdq2WLbWqc0ZjGEfue6DssEVOM09ous+w61t7TBvGecEZTYaiNlXgzRNs4xKNqLQCGQqK6cs6iwReYUe7XIVagXKfaOTBGmpAkEzZrLMRI7z299yQj4GzVjIp+VjOqHbaqN8CfNZq93R1UirTrDDGSQiAQefbsgLOzc+6+WHH93vvMrt9AKUXXd4yqIt1ScXOtU5QiNAZPCoFkhQZLoTiLHhRQBqUt2iS0Daiik67rCpMNOY4h7xFT5NPffMLejdss1iuSSjSTESlHlNU0zYjGjuS+dJoQPEZpXNMI3Tv0VFqxPa64Nhtx8/oOO/tb+CrTvwjEds6qX1OXQoesWbWedh0IrWfU1IxHjvXRkm0j+0LwifPzOd53xBgwKrBuNPOPPmN/Z1savNWc5BOqtlSTmpfzwLhynK3h6PycZnaD+48OODtbsOoiKTv2bsw4OVnx5HBO0rDoXrA9hnfefY3RqOLF8TMODk/4/NF9zs8Dy36EG1+Dfs3z56cwvs6LF4fszUbc2mv4xlfuYDjnYrHibA6//vwZv3lySusN83aBtoF3XrtBrRIHy56PHr/kxrVd3nrtHjolXGOZr3qWy5bjF8cY3fCVt9/j1ut3+PD+J3x4/8f8+OFf0n54yNbtt3j37rusHz/m7POPee/2Lu/cu83B6TmtPufp8/tcC3eYjqfsTKZ8/ujX0tjeus3ByxX/7v/+S+7s73F8ciIMqrlnNt7l+p19Hn1yyPnxGcpk/uCffpc33/kmua3J01u0Dz4kvDhh/+093v3BP2b8/z7kP//8iHZ+wdQEsrWcrhaMt8ecthc8Ojnia9/6KkqvCYuHKBuwzRbN9hv4PMUU6UNUEiuqcGSX2b3VYGxFdgqvnMiSqh2mb71O0wV0rFG5Aa/pVU+sMkFFUuEWGDSKCKpHhR5nJZqTeg+oheY9y6BH3PzWH7IXvs6aC+z0Glrtc/frPdXNinuvv8N0+iavrW+we/sr+IuWk8Uxnzx+yuL4gG999Vv8/ve/y3Q0w1pNM24lkYpMDp6u7Tg6Peb0/Ag30YzHDb4LrOY9xwcnPH96zGqV6GKiTSs8S5TtaVxm5KBOoDEsl5HzNvDo8ITX3/8af/qv/zXXtmYCOGcte1+CyWzCP/6jPyJXjndv3kONDPZXv2A0nWCtZr04J3TbVNVEcJSQy5Cr7H3qS829gkzaTMhNyNRBU3vRzSsl610yimDAa2ELy2J3uQ9JrxTJKpANKO/FjL0a0QXFqJrxz/67/5bzZ8/593/27/no409Z9z1VbRnXFaNak5LH5oxOiXZ+Tr9qqbTDbNgXlw23/KqJSZGSJqDw5Rz9V41Ph49/pQHOV4GPzeQ8Q0wi/cwrfCfeFClmYi/7Qud9idjUV6j9unhraXAVOBlcplJ/Xf5UQI9hIypGk4kkAIRWGGcwlYYQSoxqGRSWeE5fpB/GSpOcyJfsT61F8lMGAArxi8uVSINMTCQtCRx6A57IOcxWJOFYjamdDNOUDESGxlErUKZILowwYUOQiFZjqw0bWYw6S5Wih4hS4dW4UmdqUtnHB2ZAaaRBmCMxkqICc9k6XvUfKd0/g6moDOkuG2E5vcKkFGZFxCcvnilE0JcSlwHAyCmjnN7gdYM31VAXD6DRADZQ6unNMZTD+rL0Y2D6yL8PIEAx/lQih2EzgHy1yf/yvSuDycHE83LgVf6XvLOWNWRgXhT7xvK1bNJoBgAlowUZLhSMDbDypeHacPxXzTk3EprEZri7Gb5dATzK5Xrl8+Qs4MjQV4kfyhXQ40ufn8KvyGWIr0rNLKaFYjegMPLZ01XzYpGCDz0OG1DkEsT48vF9+fU7AWAMaK4qzX5MSYpN33ESPU7DbNwIWugcQa/JVU0fEz5ocnKb+MOcEz4obGc5XoDxEYwlpAatwFlLB2g0tTEYZVDKk3QodGY5wSkrrIbagBtNRBuZPHVVUTdj+qwwa8+8Cyw6T4heJsrayuKkarK2JC3IpbISz+m0wqdcaG+JkDRZidFUbyyBGoOnyooqJ2rKlCBKrm4Ro+GSpipyhoVf06ZAn2SpyUomwspoks7kkDeImtDGtHijJMm4VjlKw6QttZNmI0TPatGRsCQNbe/puzV1TtRNTc4dBi0xZQR8KJuvs2hbUVWGRjdkDGGR6dvAqK6ZTCbs7u5STcckM0yIIYa4ycVWGLoOEgrb93RefC98EvAiJs9y3dIFv8kj1sailFDLBcWWhlkWvEztLC4rKm2Y1jWjqib1HZUPKCfJM7VTZN/TrueXSDmWmBR9G0gd+ASepYBBKjKpDbVViCu3ggoqY6itFS8VrcmhROyWB3EAMDY/X0GvxftCbeKQJGFFbsqqdtSVAG+uaZiOGpSOTEc10/GYKmVcilireXl2Smsb+mRxKRFDy1nbsVopGlORUeL5knopDFLCao1XmRyjRE8mRd92rJcr2N2VIlhMxwmJIvlKBQ8ZjJuk8U9KlVQJVczADMZWAnDEiFKO2kATGhZ5xWKxwM6mm4XY6KIhzRJdK07UhUkUPDqv8FpL7LA1TMeNTAI1aKNIOWCcxRS6oGxcAahKJKtMQJK+BC+u7jeS7V4mb1GkOVpfLq7DlGXj3zE8XyWiOBYj1lymLZTrPVAG83D9tcU0NbGqOOs6UldRjSxVU3Hh16xSFt8BrRhZQ91MsVvbnJNYnZ3QtXPOfE/tDFv719i7uY89W9GHhZiXFTRfG4NJmUopspcUn8Y5GutYscZpg1K5gGS5OFNr6lEN1oi5mXWkPtAuA+vQc7HsGI9rJjSkFAkpoK2RaU5JJNJ6QOHlfss5ls14APiGX2VSZq3DVI6Nb4kqEwdk8x/Y1DFRChcNCNtK6jRJBfEJJuMxKkdqJ+kvoVvjuzUheA6eP+Nokbl97rnx+opr+1P2dvbpS3JNzgPACF3X0fc9OZW466EYy1enEmqz5hI1ufi0NOOaru8ZWcVoPGI5n5NzZjKbcnh8yMujQ9q+oxo1JL/GNTWqd9jkMFoxGde0XUsXPSZLfPdyvcLnnoqaRV7wdH3EwVHD2ozwOaL1BB8Szlqca1imBX3sqMc1636BcwpfwdOXB7w1uodWinHTkMt1mq+W7O1N2b93m+dPH3GyivhVz+J8QbsOuHrGfH1Ov265c2PK6fkpoV1jm32eHM7JIAwdk8jtBSfdOd4YLs497dpzfWuf/euvc+/uTaYvdll2n/Hw6RlK77LqLGcL8MvA5w9OWfQ9KQeO9UvS69u8/84dHj0659GTl9jRNVQ9YWvfsDq6IPQNMSk+fNLifYvTczSZ29dWnKeKWZ158OKArbHhG9/7Bs8ePuI//+KXfPHyCxZbE37ydMHPfrPCNop6vKSv5jzuDjg/PqP1iuODp/z08/tMR9vU0x22TeLkySPs9j2u3XyT/dm7uKqnO3rBkxcvSPUW29u3eH64JrgJy1XH3q0ReWuX7VtvMekTB58/469+/iHzteGr73+VRj3H54c4d06eNbjpFt/64Fsc/fo/0m5rHvULzsI569AzjhPevvZVbo8TR/d/yXTSUY2OWJw/J6e7jCd71MZBqsEnbFSYWiSNJgWs8dIwaEtKBpKlshZ0j3GOEBpyD05LnL3GUydNVFYi3jOAJppM1A6rLKzWkAJhMpLBkgqcvfyExs7IZh/lHEaPyEHhxju88Y3fZ/vGXbIaw0efcXLxHMyIcO01bPtHqPg5urnHtWt3qHuRR+S0JF2cQDXjxdEZv/jrX/GXP/8xj549xDjQKtGvevwysjhZs557UJpAok0dXerJKmKVDJXSspWGSmuCszCu+d+++R62juQYQLnSlAEmix8a8LNf/DW/9r/gm3/we+zfuol1Gu97QrdGJS87RcwQFNRs9g55XVLNMxQD9FQMzTU1hipbQoJOCzs5aDGD92Qxsd+8lwxrpJIWkAolPhi6rqmaEdrWJG3Zu3aT77z3VegS43rCZ/e/ECZw19OFRAwdn374Ib/+8NdQjbn79jusY2nuLVDiOeXbajIKHxJGVbhKUTcR7eyGmfAPFP6b5uyq4d/QNA1eEsOEPaaAbzuS1iLhyBqVMpU2qEqJ70UudQdFwqk1VVOTjCGYBuMcUV8Ok4aDGCShMjkWCcnQCPsUab0YHhrJ3tzsAUPKxUauqtgwJ1Qx5TTaUNUOYhS/pRzEB8pZAeeVJGwMYMjwuUNSIukgC6hf11ANQ5QrUpUii9IF6Mo5lVoaRBaF1PrFLNQoVfz5kM+RAsmK9CQpuYOGSHuysI4Sih5J69Gqwbi6gAWDR9vQx+UNAwEy+UpQTs4iJjBD/VPOpSpeH+VtNoAAV1gGSb9qDKpKffl3bqkrQMmmYS9shMxlg32ViXAVQENJuh/DAE1L/WmtDI4Ho/erX6P0EF5w+b5p85n0laf+KoN3aOHZ9AJDrzJUi7k8Y6rI/9kc938dMrgBloZ7u5y+S6BkuPdfBWcKFsTm4bz6fuVYE1w5j1f/29VBIFyVjAz+ckUiUBgmA5MrywBVfUkWk+Lfi2D8TgAYw0sVwAkgxIwKiV5ruj5RV4lmrMlO4ntW66WYWRbNcixodEqKHk32kTxfwyqgK4exlipnfIy0MbBUmVobMeoMgcpajLrUB2ljpFD2EZU8OQeM1gQs2VR4FKlx0ATCosPHKNFGymCVxWsnPh5aLoSKYpyptcI5Q0DhlKQuhCyRb1EJip0y+CwRh1ZrkgXopLHMoHKmKpuV0pFcO3LI9J3CIwhvzAGTlZhIKSWLkxHYz2RD7DwhR8ygvXIONx5T1eJsHUNHjh5XVYxGDXXfEXWmSjKZ7Ffthu4XfAEetCUkBV1HCoY29rRdYO175v2a+dPHfPzsKclqpttbTGczMeIpdD5tNKaYSm3PdrHaCkAxLCQ5kWPg/OyUk8MjLk7P6dtWNhbrNouD1hLzKXo2QVtjDx6R8ixJtL6nWy1Z+0DTjKhdhTMjKltDHbFaGmWlHDpKwUCJye19RNkK79uyUVmIihBlg10ue/qux448KjXl3hbGy2bbLJPbVFD6q/o4+QJe+TxJKWlIrEMDtTPUI0dKgcpZqrrCJJFDKaO5ef0avbK0UZO6jtU6YbseQ8ZZUFpyqP26J6xaTB85a9esuo4YNbH3VKMpk9mUZjJGVxacQWVbfAismDNKVQMMrtaCuioFzlVYbdAJTBaPB9lExJnFGkdlarKV50Fbh9GSapOKL4JBSS67tqCLkawWdkVOER8CzokzNcaQVSYk6KMixCLPMo6Ipo8ZG7N43RiHClFc3CmLdpIiKKeBAqkl536g8SUuta3WiI4RkSmRKQWCwMwpR0LsidGBVbhSrGjlAJkShZhIGLpkePj0kPOux40k0jgSUFaMyIyykBR9n2hcI0kTlWU8texNK2rf8sb+TfZvvsY31ZSHhys++fSAvktY61A5ENY9CWhqw6hxrLtINa7YHdV4ozlfLNE5MXIG33u6VYtziW4J3XrNIipoNBcXFzw5eEbbeyajUQEqRD8b+lDGb5ZYNk+dIYYehQBQJLPR5g7rVPQCECgqqrrZbLBWyXpvkKmAMZrGgnYWF8UIzanE+uKC0+NjmqZhNp0xm20xnY6RoY2iGjc0dUPX1pyfiYxuOobZzpTtkaU7f8GT+QFpdczOdMTZxZLUw3y9Jleai1WLqlbEpEthm0mIj1Emi47YOJRybFbm1BHIXJwtSsGWWXUeN56yVZJb3GTCoxcvUNYwcoaYDbGusSZRNRKP7eqKxXrJ8ckpCbB1hTGKaWPpfMdRf8H2qGZWj7C2YjRyVJXm7PykxLtJkfD04ClV1eCsZbnytL0UMuuLFQqYbe/gmoaYI/0ikrCcX3QcnXY8fnLG4mKJ1pb5vKXvzzG2YdzUvPz0KTp7dmYjnvzoJ8wmDbYyJDK6Mrx8/oLD4xNms5uMd/aIveXZaU//t5+zzo56vMONO+/xycNfkGJHTJ7P7nd0izlHZ5FgKrStOF2ecj3WvFhpnj9dcnqaseuORZ9xI8vuVs3EOM5Ol5z5zCo7nLHUJnO2Cnz24CnjKmDjinu3dnjrjdexTc1sb4uXz4948tFHPJ8Hpvv74geTKkbRcPD5I07Oz6lHyIAhZE7PzvDzC/oM/TJCtcXho4dkl3m5eMHRk09x4ykL3/Lw4DGnqzXzZQBIo4nMAAAgAElEQVRjma8WHBw8p+4jy7bjwYOn/OrFI/7TX/6Cf/u//I/cvjZm7C/Yfv0dpm/d4/RUcfDggMXzh/zRd97ip58rfvSrD5k2I2xY8NXX9vjq1z7A+5a0+ozjLz6inmS23/kA/ClK7QIanMXESOyimNEpD1UoU2QknUtBjkomotaSbMYYWReV0uDF8k8phbEF2LVIzaJkymb1FCpJ04iAS/D0wReMd+9ynCY0LvAVM6WuNNu3bpInnpWtQCtuvHmXrbs3uIiadQfH3TZ/86szbD/l3bc6Lp4/4uNf/py9a5ovHnxGxPH5o+f8+Je/5ODlC4KOpBykTggRnRzKg02OnHtCaIXFV5oPawxOGWpTQUrC+o2B999/i3/0wz9kq3YYv4JkwDVEpBY4e/aUn/5/P+LR6QV/8i/+hO//o+/R/scfc/DgPkS4eesGo9EIiNInV2IgKmaiZT9TMiKRiXzxqkKK+pAiXQoExCshFEA1pywG0VEYdGyml9IsGUAlDakCLNk6VGO5/dZr/Mn1PWa3Zrzx3lfY39vjT+++wQ/+m/+en/7k59z/5Dd89OHf8vLZU7IyBGXxOfGd7/yQf/lv/pQf/+oT/vwXn7BK0vhnlUkqFbAkYR38/8y9WaylWXbn9Vt7728659wpbkRGZkZEZla5Jtvlqe3yUHbTkhEgrBbTE088gOgnxAtP8ITUrwwvSEiN1EJIWM0DDYLGdMsYGtxu7Ha5XGW7quwacs7IzBjufM75hr334mHt75wbWYOb5oUj3YzIE/ee+437W+u//kNY1nR3Vhx2juWdE3K4HT8y/7lvbuzqEMwRXOcRuTWB5SfEO6q6tahtyagGBIo0s6YOtXmUOMfN2JOdEKciNQUQS6Grmsau0Vu6essPnIcQBvOrs7XdqPYW1e2DQydFNaJqvnYOVwCBEsWJYRY2hFV8qbelNPO4khyYbViImgSabD1BcB6nxddproNrRxpL0YGt1RJCibt0t44p2KjFTBF3posz8EEZshQmgag3S5bi5zRH147bAURRPx9/u9YkaWmshZFM9JUxj6sGrRpm1KFgITszxpSsLxMzSMNJMEMYzSjehrxAdpiXlNoQ0LQjYqkjWtRbZR8qXmQZ2J/F764wmyx1Y9+8u9I/2HCzgBlOTFY/+4vkbAyjwpzJJVhgPva+nFezCNvLZmBmwDirR18AT/ZNdxnPs+OyFLY8BXCiMHN350sKwFZ8XnbIzu4eYgeu3X4pc0qI7r5t/t0zS+W29OTFe5PdtfLCP0kZvMHewkdsDZtjdcEYGraLFagjy2i1MTNYAoEaIdh50ohkk/UJkP2ecS7zgAubVuUXtvfF1/8vAAxBCN40w96LxTF6DxIQZwVM1XbUi5pQG4LYqrcIvKJ7m/VDilHb53QL502DGOMEKeLLWplU2MxGntEQa1twZHcjBh/NTM9FkpoplK96xN+gzhOjsulH+pzRKASfaTSZNEITvnEGEMSE91AFIGckYbGK6pAsxZHWgAnZoWUelSWDsyxuCSMw4fJIkGzRqz7iMdR36keWKbGOsWjKFZ0mJLtiVpnZ5GgXmIOoEzlURO8tVSQm2A7cDDbBcGRcMC+Hqe9tQi/e8sezRWsF72maDu8TIQSqtttJWJy3SM+tJlIQhgDX45bnNzdsponu6YI7qyOWdUvlPFkzfezZTD0xjixxVOItdaKukZJ4kbNydb3m+vqGvu+pqsBiscCj5tvliubKGaXLO28eDzGWNBfPRGY99YxOoRLGnPGaeXZ+QeOE1aK2tJdoGvyYkgE8wSNOqaQsntnSaMTVIDUeAyWCRIKAFvO/JIUS6BzyQjzSHmC5jS7nHHcgAGJxWDvJRrLEk6qqqOvGAnjrQHTC5eUN43rDsnK8fGfFgXV7jF3gpqmJeIQeF5RBt2RRDqsVbnEI1cB6HCBUbNYjIpnjoxM+82OfZXm0QmrPiE2BJFRo7i3BJ5sBlIpdt8Nkk+JF8KRhtCSZSpApEvNkzWdwTDEh2R48oxj9MWZFY7KUH7FkIh0zOQmZiqQTCQhVhRfzmsmS6ZYdy4MD6qYm5mwAE0J2PTfjOaG5MQkVVpy50BRn6EgeB7w6yJkIVC4Y+0ANbKRM3O15k0k5MqaJmGoqX9y+k4GbiJLyhGoy5oFkVJMt2gXpNuZLiWxOwpRNFvb0+TXPL9eICDfra2IaSzFVHhrzg9F5XKhZHBzSBeGwglePD3l/+R5f/OmfIYUWYiamCMGbjGzILKuKw7amqz3OZ6ouoIOQ1CGLFplmyQM48Qw3PSn25DaAZHpXwSJy/vw5F+fn4Cs0edII4zbR1p5xY3K8QTOyaNhse5gGtheXNMEYUl23YtMPNIsFdWtsoq6pLC3IVXSLdnd/1AszKK1CZc7j3jH0PYvFAlcF+qFn0VVcNI7Lc6WrG+4erzg5WFFVFa1TS6gIgW61xHctTy+vePn0hIVXFM94+ZjQLghNy8fvrPnO1Q0pK03V8P6TjzkcDmm6huuriU0/se57fB0Yx56m6UqqTENKjnESkgakgtRvEBdYtIvio6O4asE0DmaIKhE8VIuOrIL0GzrvuMYRZaJZeobtQAoV6zhyM00kFToXaL1nUkv2qbol7ckh7XLJ+mZNVS/w2VMH2Aw9Nzdb1puJYYwMw4aToxPyKPRXG7xmnm/OOFgtaOqRg6MjEommacnZcXHZgy5Y9wOjLMnqWIsyYNHRm+0aL5muabguhoIxCpU4+nEkbzZ0yxUxrPje48ccHBzjnXIVHe9dbvmLJ895+aV7VMGaLefA157rdWSzTrjugDEHNtNAWJwyrF7l6+/f8NHjC5bdgmrMvP/BYx6cnvLwcMkULzhdZP7ibEt0LRo3uMZzsjqgrTynR4fcnI3068y3v/0+XRXY9oGr68jJ8YrX7gemmy0xOZCWm7Nrxustbhy5WW/p64xzkePjBZ954wF/+id/yuZqw+Mx0TYHLA+OcDlxenqfs+tLXjo64OT0mNA6rt8diNkzbgby5SXO9Vy5SO4j11dr1uuev/s//D2+/Gu/xK/84s/jwgnt8g7f+srX+cY3vonIDTFf8XQb6et7BFUaEi4NbM6u+IPf+0e8vLogXn2AePjC8QWL1zxQIdS2htXRks3UkMXMADTEJKTxhto3OHE2OEBsoIMzOYIK3rU7MFeyosGGKE7Ao7icjLKqQp2xQch6y0tHr5KOX+drXzvjwXHHZx8swAvhpOYqpWIyCEN3zEdRePvpRJCKD95/wuWTG96tn/Lf/Y//B1/589/nu+98k3R5gQ4DoW4YxowLDUevfJ6jk6NiFK2QIsOmN8+tYWB79ZyLpx8x9Ftj5amBq1kjA4qrHFM2KeTJnbscLA7RzTXx6in+8IRJakb1dBrQdM5BnXFE6nunjCqky57nH7zHyYMFEpQkyYBXb9Pw4Go0z4aAsptazs26pyodIIweNhIZgsV9xphwOHwSY2aIM7krFepAc0RQKnWQKogduBUpNNSv3OGv/Pqv8AvNkmrpURdtinxQ8doXf5o7D36Mi+fnfO0Pvsrv/M5v862/+Cb9zRXt0QFT9xKv/8Qv8+aFo/rGx/htvzPPTpqIjDg/4mTAHde89stf4OcevMqXf/ZnaA5OjAn8A8GLUqk7a1IsSWgkxgzizCvLO+quw9e2LrgCKohYbHvlbXCSs0kKRB0xTagvMZvZ5KsTio6T1eve4WMka2SWvSJhl4ACM1tUyC5Ti0n4wNFUjiqUganfp5fkVOIzwfzpNJOTQU9JC5jigaoxRkz2aJwp9wbmT2PENVXxXDPQK6n1JMEJMekusl1Q4jQZSFK6+yKUtVSHMgiLOTGmSFU3VI2x1ftxKswH9vexCk5nrxW7Vq2WMyYuRT6JM5loqLzJYkt7akbupT7auYnuZQgiviT/GXNA1eRY4gLqndV2IlQu4FWgSENMb2UM8qTZ1hgxsGZ/CVmt7yQYKFMY6iLGlql9MG8+nQ3dzUtPdDZdN2BRill9Ksazs0+dK+fYScJJRspnGzMAUJOwO/HmW6ZFJj1vnuru/2cQZmY9ZBXG5PDiCWr1r84Zrkrxu9t/v976O64MArVwzIWdd2DGzr/DFenQHkwJofhzpbhPBNFbXhpoIWyU35nt3VmqhBbGRJ5ZIHprP8uuaoVSobIhpwGvFYizBEG/IDghh54xKZK9Db9ChYSJXJi0FO8Zit/dj3r9pQCGiPxt4K8DT1T1i+W9/xj4d4Gn5dv+I1X9rfJv/yHw72D31b+vqv/gL/sdUChYqnYRiBXR6uxhaLoko5SHSgguk6L9U8Fx2TkIixCC4ONMw9eC+tkFGEQQb14GczxOKvq6Gf00/ZFdVHZRmKl1UmUasyVvZBinyDClwiDw5CnSTwpTxreJPAXqIDTB45uAV4fuYp1sEfOzGY4mMplqbr7Fk1SYEgxRqaSY9uREJQbqh7ZDssX/Be+NGkY5ZFJo8mLMgJQT/TQgvY1cshZ9X7Zs6TEp/eSYiIxDT7CBtpmYBo9zQo2UB05mipmUBSXivCNqMYj0xdxIbfEKVY26DQQzn0tYQsI0ZioNdMc1BwfHdIuO6/6GzcePOTs759nNtjRiZv6YxRYLnCcXU8qmaTg+OsTlks/ujX7lXDHLBDQpcUp0PlCHyiIvBbxkamcRj40EGufJcUSnkZSV2nu67oD1Zo1ME1XXkoCbzdo0l0NEgBgCKWa8twnqTHE3o8mSOw+7Rcf05nG3mM5mj+M03UJIb+dIFxHAjr5V7ktsqp/j/PiCTb9ls76hPliY1MmbF0TEcpm9ujLliEzJ0jh8tigrnGPRdVQ4KtdQhcid42Pu3LlDd7Dg8uYS8+DJO+nE7t4qDzCwB/w0DqxTZIEwhcDkPOIVPLgczaRThGkYLK86mGTAF8lNSomoxbiz3N0pa0ndUVvoPZihqQFVoQ60XYsihKiMMZNwLPqRungjJEORUDHT11lPKFr8GMRUoIiSdWJ2ODIaaPGOucWiyRRXeDVneNWytULRi5oLdHSBUCQRzhVwNmViUsaSJKMKecrmmr4e7KFQWCjzZ+Ls4eEqxfne9rsSrpJy+fEzrq7W1Id3OHvyzJoJcQiZ2ntaJxwsO6ogRhlVAzlu+pGb9caSWQpTQLNSVxXHq47DRUvUZEZ3R8ccj3BwM9AsDnEScFkt2rdrSFnRfoMOkaEfGLdb3DRSeeFw2VFXLVXT0XQdq+Nj2rYiph6XJ27Wa7aD0nXGWLJ12aYaIRit0zuHak3WSMBkWnVVc3h4iFclOMfx0RGrtmXoeyuGiu54HEYiZn4W6ppFHWxtF4eKI8WRISYqX4FY5OD5xRlX11fUdc3i6JhJA8+ePWUaDlgsOkQnpn6NU5OLtcFMN8UplVP6ODFstqQpESpj22U18SCqhKqiaRqqUJnni5r22FcWkZx7ZTP0XG82JFWq2kxMZbDIveBqQr0giyvnUNlue7ZXPZtxw3Ya2W4TwwSu6fDZc70eitxSIY48fOMRXVtZ2lS/YTts2Q49snY0oSUmBfEMw0gfMzFLSRGarLgWhSkWs2TzfZqiMkSYUmLIPUk9Vbdg0sw0ZVIwDfTmesPl+j0OFgucWlLM6vAQh3B5tWZxdMQkHVfPejZn13z7G99htQr0cSDGkbvHd8hD5P7hCX69ofeeGyIuJK4vn3J4tEIlkSXy8PVPsbm+ICxPWGflT77zASSlrms27ph8HVncPeXey4nHHz7l/OKa7XjFEDPDMNAuGsBqlCkJl5drknqoVlyPmV5H6sPA65/+MbbbLeN7b7JYLo3BkCJMCVEhVIIvngiDisU+Tp7+ZuStN98DH3jw2qf44k98nsY5fuFXvgw3a37nm3/Ie08Sm0ERbQhpoJGE33zEszf/gFdWwqdffcS4WhFOjqiWR4zaE2SDdy2ifvcMsfurIYsAFlF/dv4O9+++DNricOQU8U4RV5XpfzEc3I3DSnFe1qi9eNBAVxPiZ3S7YXz6nJfuf5Yv3Ftx0Ap1GEm+YnIBkRpJjmfnyptvXRKXge645aBJTDfPuHfoeHj3gMWi5pX7n+KDJ+dcPUu07oiKwPFRy/2X7vHowas8fPASeey5PHtCGtaM22visGG7WfOBHxjWHf04IJiHgNVGiSTgsrF466rhCz/+k5we3+Xxu9/i/J1v4NoFa1eR6pp6gsdvvsXzq/dZrg5JqTcKuY8slsK9uwc0YTbvs2dHzhFKxPy8nhcCdRlyamkHy787Y7ZQYQMuNUYpoaYqz0rV3YC0nFdLJjGjvCLzBJquoakK00HmBAs7g857lodHLI8OOb17n6N7d/mtv/+/8r133mITR5rugJytQXT2cN8N+cTvZZ7qPdk7Du+/zJf/6j/PT7z2Keq6JhPsMf0DX3NzV5U/dVdXOB8IVU2jSkyzt8AM9djwKLmMiCdpZkrRzmPKZWJcvNtSGcQJaDF1LO0jmotHgJvlofMxLVHwDpvSp4TTvWxGC3uiXPZ7TyzMf8N7hyvm4lnNfNRVFSnZJN3Say3SfTYp94UFkIhoiqQUSTExTRPiY6mrlDGOzNKVNMUS1y5Fqul2z01VZUqRIU7WPntPzNn+PyuVq3YeeLMxizXYBXyQWcpS2BFlKDhpSU2bIq7VndeXsR7KV5F16kyq2TXevDCN1wJ8gPlu7PwjyvfNPzH3ye6W18Vtb4ldrewd4uoCMpipfBCTGE3ZQCG1uL3dsZLkIBkDJSe7aVQEFfPymgGJucacJTUm8XHkZKaqVjs5Y5Cwb+g/KU/Zp6EoTt1uyC7hE5KUmSkyL6y5HLRbPcCOaX7LpPV2uoj5vtm1M8uwdp996+dmxGSfqMLuXtzdqTpfH7ozyrXrmd15mntmyn9lTu0ppATnw46FwsxazsVvZTbpdzN7yK6flOc0kv1w95OvfxoGxn8N/BfAf/OJ9/9zVf1Pbr8hIj8B/JvATwKvAv+biHxO9bYS6vtfiklGYjF8mZ2EHbZwe28FYhMqqsqBU6IoKYFIIhWtd9kG4m0qVdELlYQhglgahg9uR0fKTlg0rdFyVMuNVfR33pO1MdPIrFbsYlqwQUY8E0E83nlb8KYI08QmTsQQ6LqWcFiTQ8uANeOVzpnkBcTI5rLlcagE5iQNUZu6p6yos6Iv+BqcSU6maSQmJYsHFxBfUE2KlspgUTu+MaH9XrtNnMzQr22ovKdpKrq2I4hR9IJgvA2NhmgWxLsfBsZhKvGkBnzUbUNOiXWciEkZUjRKf5H/bPuBFBOSbWpITAzTxPMhMlyvWV9ec3B4QHZKnCLOVYzZkgPGhHlLSChyBUfMNhXPScjJlwk9u+bLUSJeMdqmJYJkIoJoJuZEn0ai5DL9a8zazJsONaWE+oq2bREnbIeeUDdE7NqompqDlaeqasDoct4Z4NRPmRATPlQGWKhak6RCjhNSrs0Qwo4yOPs+ALu/3/6aKVt7DZoBBw4rxLwzf5VFU+MXHV1Ts1mvyXVtut7sSjyWNeAUJ2QtqLn3HhGjJgY8WglxMj8EL4YV1FWFE2XKucRDuh2d0WMLaFV5CjWCRqBtKuoq4J0ZBU5xIo92705Z2Y6Z9ZAYo3Dn9C7doisGVuYrMaXIGCNjnNgOW9sWJ2ZCmXN5uJX0lWySEnE2CdYUETUfBxGLUJ31j955nAuYR/kecd6vRgBpdx/tH5x2T5lBpaH84qwY8QLOV3R1wzCaqdgQI6QNTAnXdARXqPXe453iJkceB5w42rYhhGAN6NbOT4yRGKPRMcUeAs45cIJmo4Kf3jniwd1jxu2GPiYunj8j9luaEJgiu2ji2glV8MxRfIJCzmw3azY3a0LdlomJUWDbpuHwcGkFoKsRF6m7FQ9eP6Y6uke3OqSrVwzbLWkciNPAdhggJWTMTP2AjiN1cNy/+xL379xFfMV6O+CnyPHhiqZtGCaPpoGkiWnaFgZaNsM4L4gE6jrsqJtd1zFNA84JIdQM42j3nzeGVF3VNHVj4OI4mb+LT4zbLeo9bWUP0iyOum5wIYCvySq4KdH3I2fPn3N9fY33jq6sbfnJE6I6Yyj4SFcp47hFh4GqWoJA60HHDT4InQcNShx7uy6lsmvHie0PCXWeuqoMoCngHCVZCRyhasyEq5gjz8XgbeNZp8LmZs1m01PVS5Ku2cYticjNtkcJqKvJMZGGiEM4XC4Joaa/HvGVZ3GwYH1+xuXlJcmBryrW6w2DDFxfrlmvB8ap3A+5NGTOJJY5WVEbp5G6DviqtgI6JqYpsh1T2SchxWgJVH6i8oGcJrSYRzdVsEnzxRWicH51U4y4W+7dO+HJzTNke0M/Jg7vHnH64BF5THzm05+lP7vk2dPndE2NW66oVZguznCVXWMER/Ke9z822aHETI4ZjTaNHMeJwyFwHNZ8/Oycj5+eM6ojFrO65dEhKkpKA8vlIevthmfffpukAb+6R0yBMcPlWPH0ciKlTL08IZNZrwf67dbSFDQRncP7FaGyZKxpyFRuga89/Try7tvv8Xf+29/kX/tX/mV+6ed/hkp77txd8kt/7ZfRCb559S5On1EJLGqB8ZLQP+Vzjz5LXde0B/ep33gDXSkbqYAeISJabBilJEdpsKkq1jAfHtSI3pRRcii1gzVJIsHOdzbAv3TNu69SYZUi1Cji5jduhrjHZJqb5/zyo3uQrwnTR+T6lMSSpJ7NIIyDsr2Gr3/ta7zy2l1+5ec/w7/xL/0Mr/wLP8npssMHxz+3+Sl+0ym//db73FkuqELg3ukprz94QOMdm3ff5elHH/Dk8dvkYc20vWZ9fc6m33CujufDZBNE5ximSNPUtG1bor/t2Ny//zKfev3TXJxf8Y//yVd451t/yM124HpU8BUCND4Qq4q69jz/4H0+uvsST6+e8fKjV/jsZ97gqDvB58qOjQtUwbyUUjJT5N0znFyOnUWB28uXaW8q71mjkEtNquLMqPJ27OJtYgO3fXkw5k2pge0pZ7JiCl1bsSl8d9zxC7/2Je4+uMe3v/MdPvjoQ1bHp5yslrTFQDwEV56HFL0/aPaIVhBrPAvunr5GW59Yk/Z9rIsf8irsh5n9PPtHmdmilsbQ5Laz+aJzs0GnRwXGWIAEF4qxuw29rPm1wRf+xUbfgAtfjDf3htNzU56KxNc7i8OuKoe4jNdQBhSxJIqZTNvJPpHMJuM2sc4xMUVF08QQE0zJ4Kou0C4gVFa7S/EUSSkxjIOZtNdQeZOSbrdbA1Scm6cxti8+WGV8i8VL1p1MxIkl8fmSsLZrlstwlhk8L0OTneSg1EXemf+DxLw7/jOGUJQQ5UvKsZulFvtr8sXXfCXuG3IDTPaN++5P3b+/++LF90II+LqiqsJ+WzDph+ZsCYSabaAxS0ZKbO/trZvj2eOtzf0k+HDrX3bvM8sdfsjrBU+H2+DGrW24/fuEfSKJFlb+fNxUrY7/pFxl54fi/W4fZwBj7il2gIrqrhb+wXen1bq39/GFPRSY05R2CTu2Icaa1oRQgFLZe4aoy2RnAxEE1CdyHvd1j8oLw1pbYL5fKnP79ZcCGKr6f4nIG3/Z95XXvwr8HVUdgLdE5LvALwL/94/+MUHEF6YEhTZSnGQxCUQQXzT3ztzaCyBhlCSb+Ovu026jToVRoRmfJyqN1MHvMpuzlhidcjOnFIupjFHJQgiMY/HcdoBYA6Wq4DzeZ5vAY41N0kCKkZxhyCPiPU0SqlIUJBcMcHHgtaDvGnE544suklw0cmporSFSRvCJlBOdIUbHOBnFavZoUGe0rCkZwu+87tDpnKxwcwKSIhvdkKZI5YU4BNIwGsUnDmbm50BcJngPRdaTnCc5Z/GUqiTxECpySowxMUUDhJz3xKT002TghULlA4u6YeoWDG5CkhnkffjRRzx9+hTf1qbByw7xnV2gJV0jZVeckM1IR3MkZ2+yikxBThVLOVRr3Li1CKJmStg0NAINLVGS+VLERIpWVHvvGOPAejMyTQN1XZFz5vr6iiS27E7TZB4QZaKSUtHSYQ8gu/Y8SV3xVXBF82gMIDO3LI16MqmKOPfiIu2csYHijIrvDXN0Nj6MEyGA04xTOD0+QA4WSIxMU48vDy3xjsoF6ibh+4k4OxPHjMxuzMW4M+MgZjyZ2jnaumLRNiRJjGpfKRsibk08BC84Z6yVummoFi21KMu6Zdk2LJuaTCJqIInFHa7HkYgy3vSEesHD11/j7vEpwQtKsqSTW8VbLhN2KSlDWoxnk29MT6eRHEdj6WTFSzYAxntr/NWukRgjwzAy9MPuIfHCg1NBSCUcp0wUvU1OZFKLyyqo/Zyg46SYrYoY86Wp6aex0EsdMSvbvscBdRNoaKnbmk4SY44IgvcWLWpoNQi+6KjtWgohUNcNwQeqLnB0uuDewZJPvXyXV49WrC8vePr8nA/PL2jrgBfHVGintQtUkvFOqIKjbWoInmXf06zXt4ChffxrqKwQxFdsxonNlHESiK5G2iXt6piXX3qAB8Zhy/nZM86ur5E4IW60qMtpwoeGu0fHLBcdFxeXrK/WDFnZdg0xT0zTBu+sCPBeEE2lMPQgSkoTm6knRXs2NHVNzpn1MIA4Nv0WEWHVtiwXHRTmRts0bLdryAnnKshm0rxszHxsiBlfCd6b74aEiiaBczfkj0aG7YYgsOpattsNm+2ahOPo+JCaidzf2P0+TvT5hqZbcbA6QhWCCo4Jr7H4cNiVZEVBRlQJ3jNo2oFjOedCf7f1ZJgMBFalRN0mdBypgk32xiGy1UhcdKyOFnjf8vxyzc12Q2gC6oSr9UDVeppQMcSJYUys2o5J1eQpKfLW22/x6OF9pKloFi03wxacMMWIeFvr+r4nxmQAbUokscJL4zxFnBgmoU0BX1VF0lkK5JyZJouU1lv01cq54sQuiExsh4HD5Yrrp88svha4vLqhTY6DgwXbaU1dCT/x+iNWIqTn59Ttgldeuse3b244zwVoC7PkEkkAACAASURBVELVCkd3X6JZLHDO8/TZBeP6z7h8+pyQBB0iJ8sDVu0SonJ0cog/PuDJdsvTZ5fcbAeqriORaepAt+jIAjc3dgxz8kyjp16d0Nx5g2fna0hwcO8h19PE9uaahw8eojpydXGGw8y7U7a1erVacbTsIGcuLy5BM82y5mp7ybOPntFvbvjtv/8P+Pid7/CTn3udz/zYI774sz/H1Vr4vff+Nundp4zScJYr/vjNK156OPHa5x+aQd6d+9DcI7kWR8BJIJPBbQlUZZpoiU4iCQjkpKxWL0HeQFqTr0a0WaIx45er/ZS/RFKbh8P3AxjWFJk3Qhbz0pIpcvH++xwcH3Lzra8zTmfc/9WfgoOKp/0lNxtHSodU7YpXXrnLH3/zW3z09jX58/f56c/d4fo736IalJM7d1k1Gx4sPuTYv4MMFS+/9Bqf/8xDxukpb7/5AVGVfjtyMURyrrjaOM4ulCkGpAuIGGsyBG+x1k1DqCteffSI5WrFZug5vXeXb/7pN/nDr3yVP/v6Vzj78H02NyPDJhHqhvqg5a98+Rd49NobXJ0NbJ8NfPTeOY+f3fBrf/XL/OqXfhofO/NsKp2ZFEvwlN3so2eNnpp3kNEGJmYmgugIeSKnaLIItWS1FCNjDIwpG5uLnT3erpKe6wMv3iCRuZsr3xLEyP9a7k+pys8B7UHL537ys7zx2de5urohZzg87JBpxEuh8VNmrGLgMjqZ+Wu9ZLW4w0FzZOyelHCB/S/+gWW/yadvJ3sZe1FvNWi6+7eZMT03aNM0kZIyTsOt5nK/s1qAnJRSmWBWpW9wlqDjZ6kxu8myXeYeFbdPl8IVvzKrs1SzGYpHNeoONmwYx9HuAY8BnqVuyYJJJuaUvcJqq5rMbN4plIFISQyJUyweD8bo8Hnf7M4RobuGtKSmqL1pgHuRg5jMpNhguxKXWgYv89jG0iHMV2X+PJHCB5J9Moo4QW4ZEsxTeZ3ZNDvaxQ9qOU1uBuym6roDPPbeDDZtzzMRYPc79tf37fN8C8igyLIoZqWFRWDndQbCdHfdzc1+colk4bGok/3VIzPYlbldl++vv5J0UyQylii5B5VeZIr8oEt/X+d/ct9us1Y+eZx3LA53K5qZPTti/mx3q5+AvcdeKKb283vBz8xWO287VrIUOzNmidZ+u31h2sy/V3e9t4JMiCTrD2Qv8XEukFwCXPFhUbLLoBGLtAg2rEELiG6sf51R1h/y+v/igfHvici/BXwF+A9U9Rx4APz+re95v7z3I18i4ILRkc3xv6hxdKYR2/c5dZCKDmc+aPNFXhIRMkqMad8E7pAiowx6yoEtBm/e75tDQ2ibwtgpZ08cIdQ7M5msBgjYwp2YUiKOAxKqYpImZFeREIacmbKwHRUXhaqpcbUnpYGAgiaCS7cQ94KYqk3WYkHCvBhGbw8xc2V1YrZNyVfmkp/VdP4FxVIRpHg+OIzuR54dgtkdF5vwYkXjNBmYMRqQEYIU9Bl8P+BcsOSJKe70VU4g9SNaaHsuVLRdiwuBdb9Fh8kaaB/wwZM68OIZmok4JfKUiKM5/xvN21gqMYoZ/lFCF0sxoAXc8r4m1DZtnbeFQuHXNMc95YLgeqrgDSEXR9XWaHBkZywGn1PZ98I48MLY90al9ob0T8VlOqlRilXH3QNLi2t1VDv3YzQaYs7FOEn87lrz7BfAeWFy7gVlH7PmTGYdoHJr4TSnaC2fX0FxOlK6tqGiZtyuqZoVwXtD9MXjNBCqhPe9Gd5ya6Fz5sWSoiVJxCETh0QaR3KM5uXhxa4tZ0CMaQ1nxL54t6QJX9uxrtWiMp2osQ3sN4JAJZ7Tg0OGBJtRwTUcHR3TLDqmsbcHkHc49TifCtW+Jq8HQ7uTmerawMCTp5GLs+d2rYcAEphSZoiZy+stm/WG0NQ2VUlWDMKeeSHzRHvXaiqhEnIBGl1haymuYBY2OZvd0U0f7ixuzluBud1OjMWROKfMqBnvRsLW0y4XNMuWVtQSdlKiqj2npyc86pbkDF23IMZE23R0i+XuOveholnU3Hv1hLsHS+6tGri54uMP3mfUxPmwRZwZZ2q2Y+9dkcCoWgxhHUjeEVz5KgV9kGJ+S2HM5Eiol1z3WwbxuKi88/GHPLu64fTeyLOzLV1dk+PIOG6I4ghth9/0FlOtNQdNzZ3jQ5rK83zasu3XjBk2m4aQKmIaaJuSVlOMWXOMTKln6AeGccCFQNs0jGPEHx6xWHScnZ0xDCOro2OWyxV3Dg9pas+42XB2dk5wwnLVUXlPXdfUYs2X9/agzOrIOBIlFSrb2u69p2kaFl3LomtoG0tNWLQNU1YzQMwJTRNN3ZpkKmfyOLC5vmI7bKjbQNN5KrGidBgHQrS1McZI3/fUjUBdqMd5BtJKwTRLCLMZjcWc8L5i75xvz65pmri6vMKrxfDOfk/dcsEQzYC56TqmyZ6hi+WCg9UB07Chn3pWXY24EV97Hn76dXzb8p23vsfzszOcOPKUqZuWRWssuiaYDdfNMNEXoH8XYZ0UmZTzy409F5y3RJlg+zH0YxksBFSh7y1LIXjPOEWyJqq6ZRhGck50bcOomfHqnCcfv8fLL52wCpH7R0vaIfLk7IzVcsU7b36Pul3SHR3h2xWMmeHqKYfdPSrnyGni7PkZV6x55d4paRi46s8Yr88Y8shBtyQ3ytXmgvP1lmlMNI1FeCOZtqtomsD1Zk1d1UzDyHq9ISe4c/IKd17/LCf3lcPlIScHB7z71nchZw4O73B1+eTWNFwhm4Y8Y1HDBwfHNFWDIHSHS5qLZywWLfdfOeLy7IJ/9Lu/y6ce3EWahuuna6S6T8DRb64Y3CGpOeDP349c/M+/x3ro+NIv/xyvPHwI3tZsdTVZ61L73JqoOVu7o26ppDFvLnXk5Pne17/G//lbvwXieeMLP85f+42/TrU8Iqoi0piBobD7rLnkl73Dmw0SSFaDVBXPnp/z8jvfJl+f8+z5Wywe1SxPXkIivHZ4Dy8d6pSXf77jxz/760DiqMlcnr3PP/yHv8Xn3niVz/BpHn/4Ptt4TX3csVoecfTqHcZaueo3XLstMUGqM93LB1R1hRzVcFKXxjchwMnJCU1ds91scD6wWC5Yb7aknDk7O+fxhx/yR3/0Nfqhp17UDP2GOjdUecHCLakPDvjCl77Eb/yLv8HV42vuNS+zzpFeJ+pFx6I9AA3olCkUSVIEX4MLc/oUu/pWZt28ZNDJnplEhGjFvUab5GdjGmdVq8FUdsuBqr4AE3xiXrqbluqt/87NsRSQ1KbeijqlXTTGNtDAuI00IkipN9SmirgCrHtfIT6SokmLBSlsRBs0/dAebh67I2UY8uKU/YVayEkZFu0jUlPKpDSSsxKTJY5pNpmxuEByWqI+M23XmQeGMxaSZnu258Iinn+PKrv1DPYgXUqJ7XYijeDJSHbG4ErG4PXe74DelLPJf7w1YLkMYMzPAuq6pqIAJMFYH+M44kqN6MrauYtqnxvWXb2yBzD2x8ftakNy3jXh9nmzf4ENKKLurwIDKqwBJ6cdECbcHurY5zox5l+o3A5IQvdyJHafOm/X/iTP22Y1bL79A8zeI7fZGnY97uUWllJWfE0+oSaYgawpJ2Q0I9BdXQfMy96O1V/6wLnG9s6ZFa3mkvjpdtvz/dt2a0/1xb/fBhLm/brN3vhBrxl0mIGR+dzeBkvmo0i5Pssl8X2fM0tGZnaSpaa43fVxW05SeXeLyfQJoEX3vaH58b/4S92tXmvevl0NQAklEDNKzyLkIiORpEhrzwiXPVlsACglQWdWySiy84Xcyed/xOufFcD4L4G/abvL3wT+U+Df/n/zASLyN4C/AdiUWz95URgiqDmZdEI8QcwpO2smS3GHLfunpYnTlBjH0aaIzpVNnI0THc5bOoiq0fvN7KfQVIqZp13+xZjGS0n/2J/kmBMpT8RU6DKCodo5gpg3geBJWfB1S+g6cqgYCTgxmr0QS5yiNbBBTP6QNVkSggiTWmrKpIlYFl0tLICsBthMMVkhruZWHbMdFx9qKyCdLw18xZxp5B1Icla+l+vTOUFCIFQ2gYWMF2MtCPbgXG+29FMsRi65UGXsAvShMtK9d4S6NgOllEhjYhomxjEhOeCz0tU1la/oGYwF4QMxRjRGM6cS8yJJTsqAYqZBCmgmTpPVgwVU0GymjyZpMI25lkbVF/3kOE3EcaDfrAlNhVSe5MCRab3JDgYxbapk07slhH6cjO7ng5l45shi2dpkK1tDJC4QU2LIQpbAdt1jI3uTa9iD6DZarTswbIei/oBVcn5HZyR//v7iRh6cxxWEuA4eh+Ik0zWWhBBTZNuPTNkRJbDtY5nmziZigpNg8qDsWS4WZq45jRaXheL0lpt2mSLP14srU9Q5ycNB0R4ayBGCgRkWd2UIoBQHqbHvyYVWP8XI9fWVTSJEqUJBpsW8KnI2IymhSGbqhsoFKi8s2pq2qYhxIqYRiQF1nk0/crXecHY9cLPZctzUiBT9fgE49wBGocKp7UvWSEpT8fsQKy5c6R9lT30EjN6nViDEOPtOzBpQMQaOCBTwZBgGpsmmbd6LATMZDg5WPHz4kPv37yMiNE1L13ZUtVFLpymSYsQHT71qOXnplJfvHHHo4ay/JjkltBUSvKHYAr4K4N3OTAyZpUrKOAxsNmvGwdKNXO2oQjBH7TgxjCNT1xJTpj444uDomLN+4unlNeshsf7wCZ95/YCq8TTdkuN7p5zev88HH77H5cWlefV42QFYM5hVFxNgi8WN9OMAZR3S8j0pjqzXa6ZpMgr64SF3795js9lwenrKvXv3eOuttzg/v2R1cMTB0RGLtiFOvRVcqqw3G5bLzoClKuDEploqjillXAi7qFMomuSsOBfmm85YY87WMxHHmJVMpmlrfLCiQADnAyknxs011+sbulgxTvaZw9CzvrmmXhzQLY7wYbTCvjC4dpRYux2tCHWU+LwCapTtTFPR2hY5jSD025EbEZrOSNt1FVi0LQzKy/fvs1gd8fjDJyTJNJWnawIBT57AMeE8HBwucB7e/+A9hsl0023bcf38kq5qqULF8nTFYrXkZtsznV3Qb7dGy53XsWTeOpVicsppQsZE0zQ27dVgaweemCbGaDpzHywq0ofAdT8SY8Q7oV+vOTk+NpA5KD/7uc9xWisPTg5I08Brj16lXR1TtYe8++FzvvH4KY/zE5qDI66vJlKqSD7jK4+TBa4Gt1wiq5q+PyPHHlph7DL18YLLsy3nZ5cldjewHga8E4ZhzWJpLK+2riFljg+O6Dc9zz9+ylR9yN2XX+eNR4/46IP3OH/+nLpSLs4vyXFitVoh8hLrdc/19dao6kT6acMit4Qq0NQtx0d3QIQjPWS58oh0MF3xp3/8ZwwXaz714KdZX3/I87ffoUkJXy+YkrDNK64H4Vvf/Q4/94s/zrvf+yqpEpZHr9AdPKQPL9EtjnHOWbKRDGXqbHKirBOVhzz2vPvtt/md/+V3+frvf4UpbXl+dcFPfelLvNQtyRIwWrDsGq35KbWHMgQoU2pKotPqgC/8+q9z8fafMPoROey4Xm+ppkw3ehZxS9UCtRCZeO/sO7z1wQd88P7HvPfme/z5V7+JdxXtYsE7jx/z8fk53ne024k314/J+V3q4FjfXDCOGxZtxWpRsXQ1G71Amw2+bmnDIV11yJ07p4zjtGN9juPEOE2kbP4QpuP3OxDALxvq3OJuFE8m60B9UnFwt8X1Ww41EcfI0d2WZiH4EEnbxJN3PkCqwL1HryJVIDt5wbPN3X7kq2LU0X195p0x8WazRPEeX0HQ2iQS8CMnk3PT++Kb+3NmsrUiSxPz/3BCCUTI5BipQkBypnaCl4BjYq6nS8SbNcyi5DyR80TC5J87A2z5IS4YemuDbg1o5oFOKCkmWS3pRDUzm3h+suFrQltAM8qz9nYDac9ldUoUcHVCXQbxVm+TdgyQXJgQVt+WI1X8HMbR9JiVl+I1kuZv2EtM3cwosGtoxhmkgNLeF/mqODsuPhR/ueLFlxOiWuSRgawVzu/TLXK5JkUEqSyRxe/8O5QUU4nhtCGtRazu/eBm0Chn65+kcJTFWcIdmph9WXJOhdqfqVzAOaEOFVQVrqstIW3eb24xCkrDnLP5pexOse6lTbcZNnad5l2Khc73AwXE2DFjrN9x5TPm37lr3OPsz5bKdWHb5cr2lLKbNKcSRvOz0FtSHPF7Ns5s4Hl7281T0W5a7x0pFsuB4tV2+467zYh44Z68DXTcAqe4dQydczvGw3wc99+fd+DKJxkeIQTzTZFZFr6/T0IIO+mM87dX7xe3zbEHSnLpV3bAJXtvEpG9P8mOnYF5JoqIsf28kp3gc4N3VUmmEiSFXcFjIIWYErzUOfN9m7PgfsB+vrDPP/RffsRLVT/eHQCR/wr4e+V/PwAe3frWh+W9H/QZfwv4WwCLRadzBJA1e5GcJiRFtDSXvlCYdvGTmosmN+8O6Hwjh6LN35ucuNL8hKJflzKNNRBCcGaISDaqbDE6cs7h1BV60P6Gm1IyY0xNthB4ASek4uGhzgxInK+pm5pQ1eAqojo0WYqKudeafMT6DcGRCEbiB6d4FVzOJiNCEedJGKobkxn1THFiSlPRPJnWUoI1f1mxBlSsCUMLo8MJHpOszDd62QiL9ytAQFUaUCkXcXIVWkVSMo8Bxc5HygkJFZU3F2d1xaTUeXCYjWRZ6Gpn4Ix6TyWBfpoYhhEVofbBPCKSLbBOMe12LEkdEqzo9dZoCgk0Ejw0xWtBMVZJcdsoXgfO6Ht+/vlA03VQmXmfxgE0Gx0xRXKMUNDazTBys93iijmTFACpn3pDr72SmRinSMSDtySMpHlX0u0mlKqFMul3i/NMA7y9iMGLC74rUZXeGdofCu0yBL+DmH3wFtWp9hkZtexwvLGWkiDe/BfmFeoF3VyyxtY725Yd/TInhqEnOotOs22PhMqMoHYPiRI5JtgDWKNpRDXNKR6G4qvYJscpkgodbRLbX19Zk2OPrr1ecf7yZVJTO/OaaAIs25qubcnFqBax6TVghm2zs7N488bxeZ8sMx/vrBbVVkw3jV1i5cL80AwVeyCqIM0xCcRInh9sk5nUbsax+PBYoSKFpmrNsjAMPdPYFs+XZL4xQ+T6Zk3bXRKCY9Nfs+lr2ramH7ZsNptdXK5uagY/EVxkCo6b7Q2X62sub66M0YFCEKPqUSZAzuGDJ1SBKZpOP2um31pTNT9IfQFPMwbwJhWagyOWx3dYX284vnsPt5nY9hPn1zeIeLrTO5zcfQlxysdnT0GEuqqoNdHVFcuuAc3UlaUYTTEDuTiwj6CJrq7LdW5fOWeWyyXHx8fUdUPOmaZt6BYLELdjG0xxYrNeI8mSX3wI1G1HThN9P9B1DX1vE9YQLMI2ZsXHRM6u6KVdWS3YTS6s6Mklok3wobLFxQndsrX7YrOhqhrGIVnaiZj2epwiUS1+9uzsjMcfvE+SU+7VS5q6pvZ2LY/DSIrJgCMolEsDMaYpEUJl7KdQs9kMdgyKG/wcwxZCxXK5YrlY8uzigq7y5HHL0aKlWS65vN5SO2Eik/obxgDeJQ46T+WEBy+fslx2PHn6MW+/+y6TYkDnWLZB9s7kwzjuwETvzCA452weTeUZhrPYYmWmLhemXnHQ74ep0G8L4yVlK+JDZSa9Yv4kU4KbfmCcNhzXwrDZ0HQrHr7yMk+ffsRmMPbbk48+5q3vvs009Lz35CmT/winKzwti2VHcIHGOWrvoB+4unjGSuFTb3yKuhIkRboiK4vrtbnuu4rGZZITFk2gayo4WNJUHU+2z0CVR6+8yvnNyPb8Y268I750QqORO8sGGLk+f4r3lgg2jkadzQjjNJGxZmgzXNKEBSIN5EzlazbXa7s38sDRsmO9Fr77vQ9I/YLT00fcPV0SBG7WW6rFim2c6BX+/Htv8d//3f+dy+sn3Ll/yBuf/jyf+sIvoocjD99ocXVD8MqUjKF1cX2F8zUHi4XpvmPmze++zXe/+w5Hq0N8WLJd33D2/Cl3HzwiVA1xJ1rYVX/si/yyzM6KCDEfT60qui98kcWjOzA956FXaI9J/gS3aMmbiW//xZu89+R9Pjr7mD/4o6/yvbff56PHz9jcDOQx0w9rnM+kPJAdRN/x4cex1ACZOnimYWtyrZxo6kBTBfJoZq9WBNfEsTTfGJvVGJJQNw0xpdJ0GuCesrIdRvyyYtuP6M2EVhMsBs6vnnPdn/PhB99l1FN0taLtPItlizLy0Ydv8Udf+wqhbfjFo1/l9N59JsybzfuqsFhcSUFRyBPb9SWLrrZaVeYBXmnqciYERyreoBZBPft+7SGkXW2dC+1/f3rKs66cs/zi5Lzg75TMGUCLn4A1v14Fpx6LSEw7aYUmS93KqaeqV6yWFZVLiBvK1Nh94nq5vZG2b1ajGdU8ZwPIcrZ1XFGTPDvPFFOhlO922oYb0Y5GwmRnqrH4hABFsjZs1qh4tG7pmiXULU4cSeZJr+xqAS2btpdn2D7M781mtuJ8MdG0Y2osTr9bK1GT0WXN5pvmKbJ1Oz/qtHD0SwyoD2WdNF+OPQjjdrXaHBfqvC89jt/JmGNM5FJrpfm6UfPfmBvQ2+wALdvpvLEQlm1DTmNhM8TC5kilOTXmYVU3uLpBm5pY5DfIDn7fDbl2QBNQXDYwKUY51jKzUsq51z3bQ8pxt/ujMOV1BrD22/9JQ0+rx1IZKAvMpt+wb8B135TbWXM7MEXK83QeJNh+3P6THbthvl7LhVwGc3NZvb+xdj4TL2znfj/mWmM2iN+df3HkMsjdyapugR/z6zaYN//pvd/ZJ+Rb/cX83icBpz1IVAzzZb4998fEGBlu3lVmIGPe0+znw2By6xACnWtMci7KgVsiBK5cRHF4rVEsSS1IYIiKBphliK6wYGZe2Q9jsMA/I4AhIq+o6oflf/914M/K3/8n4DdF5D/DTDw/C/yTf5rPtKgeVxqe2e0YQJniwDD0VBUQzLl0yjZ9z6qFcuV3J6YqhjimA7Opr3OOJN7iW1LGBykUYgdZSGMia4k+AotSyhgVEjs5UU1LNaVoVHuKKQkGYKja7erEfh5nLIEYJ3zV2O/LCfWCU7tQDVyZJ9kCKdrFo76cnBLnGJMxPFTsMZNLXFOc7HiVdATvHcHNNB/d3XRzgbH/r8VRNU1lNKoUidNEylZ0WVqC6eAFaz4rF8gh46ZIzmFnJjezW3zlkSClCIVxHFGd8LWiashgcKbBMuNRx6SZPFIodw6nCZ1Ga2BLI5s1mQ6rNMzKbBLjQBLKhCrEZAhs0mTNmnc4D9NkWlJHOcbThIsViBDjiM/ZiiHnyNko5QJ0TcP/w9x7xFqapnlev9d95phrI26Y9FlZmeW6a3pKbabNtBloDYiZZjEbFqxZwAoJIdjMapAwg8QCIRYsWA0ggQRshgEJmhHT091V3V2V5V2aMBnmxrXnnM+8jsXzfufcyDI9Eiz6hFIZN+LEMZ953+f5P39DNPi+x/uEpeSCAz5mjBW9uo8RHxNZa5HbOPFXibE4Saed8/GE8E4La7mfgJcXt+nnaRGcpB7G2BKTq+W1tWiZQ1BEbWRikzJRFdNZSspMSAzjII178WHx3mOUZxgGGD11bbaLBkzUziJjSR5lxeOhT1BVabfo653mLqdyt5TmtO97idizMnSIWgolV6j8O6BblfgquQcnAGMCWCawJIdEdnLtVk5tr4mmrkmTI3mQ9KG6clRNjVkHMjCMvlDaY5kSSeMeYixTbbl/jK1IKaLLfb+TlyBpC1rSdTQCZo6DSFsMhtFH+lEAgslbfjqmguJn/Djgh4GQA+MQyUrMaUcfpOmeVSijiGlg03fkHNk7qNjbW5Jy4qrzXF5fUulMnjWonPHRC3BGBmswlSOMUixZJTHKknM/MX/k2IeYBBgtjaixDuMcWEtUCh8T3gdSP1C1M9586zP0IZMwOCwqZ6qmEnPj5IkZbFWhXUVNFMqsNeQka6LWbFONYmE95ARGW6yOVNaSqkpimZ0jA6v1mrRaCaPMVFxdrVhvOjGKXK0Yh5HaGJbLGbVrcUYTDhZ0qxUxZ9arFTFG5vM5Wkuj7EcvCUEZQvCktIscU0omgHKv5mIOa7had8Sc2YwDdVOjXY2rWyIRrAKspOvEHp0y3ThSNzX90PHw0UPO1wNte4g93OPwaEnbNFvTrbOzc/b3FqhyLaQIWWeG0Zf7MePclNajCvidcVXFYrHH/t6SEEdCEoDAb9ZcXJyRsuHW3iHaR1ZXK/qVx9nMnduHvP3mK7x2/w5Ka05//AEHB4c8+OQZ682A1YlaVxhboTN0Q0/YbMSkF7DGEY0AfWDQ9oapXlk7VLl/JjZjjGJKLWZ1ieADMIKqsSljncFoB0qMkjfdhpw884Mj2uWCMSWen1+gTMXQrfnTP/u/ePD4OUFV2HZG21jGTYerHLO2JvhLNmMSo9v7d7l7+5hHH1lCt+aVgxOWdcXerGFzvSY3huEWdDGyHnvO1wNj72lmLXvLPbTuuLq8xo8jOiusMdy9dciAY716zsff/XOqquHzb7/CGDq++e0n9KHHR89qs2EzDgIIkknKY2qNIlBVwoZYr9eMwbNed/QD1LWiN4a1UhAyP3jwgEeXlzy+PCVYkbUqnbi6eoEOkeb4Fb75nVNW3RXHK4WqM6m+4N47+8ThGs/As7Nz3v/W+/zSV36Bf/pHf8xy74Df/o1fF4Nw01BVDcEPDF3PbFFxuDxgttjD2IqwLfs/DWDItblrlsX7wiiFB0Zj8LqhMcc0yTBeD5yfJp4+/4j19cgPv/st/vhrX+WHjx5xvtrwyePnGGWpjCPFjA89xmQaq2hsBSpz0fU4o0hB/IN0zNiUcVhy0uQV9EQUFaQKnyMJX+6NLCy2usaZipTZgoVaS8xg3/XkrBh9wA8DhW4KEgAAIABJREFUtrc0o6FCoYbEkweP+c773+Dig08Y6jW5XbK+XtNtRtbdyNn1C6gjo+p48MmHbMKaerFP28yxpVFNJEiGsxfnPH74MY8+eJ+vfPkLHN/9rOwF41iS3MQAXJU4ghDj1rtpexamY//SdPfT52h6rrA5pAPZyVDUNKLeVruTCaRCTB0cOZUI1i3TQM57XRnx2mkVWgVEDq2QhJGf12JIw6SNLo34rnlRCoZxYLW6xjqN96NIMkpNRKlzxlF8MLQFtJ1cRNDGYnKZtEcxvceIobCA09P6JGBRmiwcbtRgqvjPUUZRKQtokhMlxnQnARCwZseMdli2Hlml3bNWBnQpp+I9Hpm8FDSF9VFSQW7S8snCLlFKbYcQTVVva64oC2sBtwo7FrMFKl7ygitA8+RjorXIRmezlhhK4+shhyCfO7Pdi6ksuOKBpwQ0SEoGySgBL7MCyrAg71rQbSOutRKfPgWTdHe6CFMSTza5LHaeHtJffPqCVzd+3AEy278u53aLPlBAoJdfiDixCKd7YBqEczNd71OeEtM9o6Tn0/onjT9/WtN9s86fnnMTmNgNL9NP/Nubj5xvgC43Xnv6jJPPxdRPTGyMT0talFIi/Z5+v/0MZaWfavoiNeIGCJZvJIOk7QERA3CSwuFkWKrBoiAE6lkDydL6mk3W+OLplYNHuU/L6NmCtD/v8S8So/qPgN8BbimlHgJ/H/gdpdRfK9/0Q+DfKgfmW0qp/wH4NpLi9G/nvySBpLyHNNHFKZYcpUizGqVl2unDyBDEHyLrspAXSQXsNE45SzRaysVgLKUdBqjFZDHHVBIKRIuWiutxLpNiYzQkuYhTliY0o8qCApC3Wvic085HoCwOxggtPyTI2UMSk0GtwBfHVW8EqRSKoBUNMBIppBOSaQzbRaDScoOFpCALiGNywCCvO5ntGGVkmjdtaFtoEG7C8VOUzoTYocXtPoXJ8X5ajHf+BUYbMflMsqFqrXFW2C4JKQyy3s7PicZibCJrRcgJk8TNWltLRNF5LwkTYWQMSaLeomwiOwOhjNYiY9BEodHlcKNxLn7eeUomkfQKbYVOna0hSSlD0JGMIgTRrOeg8KFHx1EKIa3JIeK9oJ/GZciapAxJCWwigdMK1zSFASTHxlpFVhZbVxhlabtR4gsR2qE2hhAmGmTZ2AqooZRIJW7eDzcXpHJvbel0WUPKYtRaOyt6X5BjaAzOVpA9MXrGEAgpF58XWXiUknvN+0iOA2M/gh+ISaRIm76nG0a6MTD4gM6Jqq7wSpWFPqBV0bhrzZik2cqUqVu5zGJM9CXOsqotrrFCh8+KOErTmAZJrgnjKM2BRuj+hcJolcYy0TZ394O1lsoZNJHRj2hViempVsXBPMnGa0sOdZa1wlaOummoqkoSfkK8cf8rlDhwMflwyChDifFpMe5SJpaN3ZCtLZMKJfIcMr5EFOcp8UVJLGHKGYymqWpqZ4ndyDgMKCusoLZpqZuGpqlpWktVGfp+xWyx4OTkmKqydMMGN4chV3I9BDk/4zDSDwMxJaqqom4bxuiZstcHH7b/zRcLuiCxm9bVEgWtkdWnMFiS0kSlSUb8dNZdz6gD0dYimRo8VeWIIbBerbBOgQ4kInVTE4ea1oBzuqzVcZta01Q1rm4YNx056wIkbS9+lJEpqDT30mCMPuD9msvVhtlsLvdMzqQQqIwl5yTMFg+LWYtzjnY5Z329ImWR1I1emHOD99h+ZL7cl/dgp9MFkRjt9gMpXH1ONLM5F1eXbC4vmfmWpp3TdVdY26B0hdIa17TYbFE60HUdy4Vmb7nAq46+77i6HNg8eUTdGg5fu08KUsx89OGHtG2DOrxF07SSiqJdaXIbRFgtUzGJwM7bQjQrzXy+5O7tY779nW9y3W/ohoHNMNC0C6g9TitMToShp1KGxkBbGWaVAys+SrP5nKaZ0fWZnAwhyrGvrGP0Ees0tnKMOVKVSFSlhR2JojRGcv9N5cgwjAIEljVOl/2CKE2ctuJ/IiafU8qPsMRyysxtjTEVnVZ8cH7O4+dP+PKbb3Pv5D7f+s6POLpzh1VO1E3Dr/zaX+fD732fF+fnqEqkY2jLbAkXm1OuHl6y6lYopVk9PWVzfS3FfYzYlJnXLScHe4wZ1KnFX1yyWQ88+PgRrm64vFxtQb5np6fcvn2bW8cLDvcqmsrQrVcc7b/Gi/NL+vUF2mmsVdS1xHcPPm4lXePYgUr0ao3vVhgtU+JxHFFRUVUztJ4RoyLguE4zvvfwgo/7RNpb0qo5ykfimFE4Nh66IdFHxfNHZ3Rt4P/59td49f4/4w/+4Lf41V/9dR5//DF/8s/e57VX3+OTh1f4uxUxWfoh0uoFn/vSF/g7f+/3efD9H1DVNe9++Ze4c/8N8dqKGWscZpJybjer7UAcdrVvGapkIpoOx4tec6+ao+fHAjR88iH+6gX/5z/+X/nq+98guJZ2ecTBrMHqRAhX5DrQNIZ2foBVM4bzkavnF9ioqFRC6xpji69RYQtkC32S5KqQszTbSsnGxNSYlKS6LPuvD0FMa6Wkk3ZV6xJ7b7G6paprYbEBz3/8hO8uv8Xd5TF9iDx//AxGx4snax63V9y5/y637rzJ9eqaEDPO7bM/u401tTAZgKGLaAXPn2z4+MNTDDW1bcm5gL1KDFhDlDoh7dptRGqy8zr4afX0T/2LG4/88iksNd7UcGqkw0b2DyWsKqNCkYsWOfYkIVWQcsD7jpgHvC+edoVN8lMfU6OUpx+FGa2T3P8hilfQ5eUlrjLFgL26MaFlCyDEGLem8rkkHikl6Ww5511yx0RX3x45KVYmaC6X7wvia7Y93OWYbEcRqvjmFaZx3ja2atsMTsCAsDdETgsCgBAiSeVinFngou19s5v8T5GkU7ObEE8lay26RPVOgE4utYXJZiuZMM5inS2JfMLwS9z0JSmAEMIKFdPYKZ41FTmKfJYQAiEn0ujJTUVyFdFUJC1eN5SkrMnXYGIQTNQHOTzlYpmACzV5bCSSSkWOK9eE1JMvN/fb/278fHPod9PzQevCQi7AxSSrMdtrZ2KlIOdxkpCqyV9kBwZOx2sCAqRW372nNqCKN+Ff9rgJWqTJi21iQ9wAM27+f/fn+Sdeazo2kgLotp/p5p//xGe48XulJd0ypUnives3pC/csZDIlGMKqgROTADZ9Fqmaog+kgMYKymOtem5ffeAbu82tZpRrROPz0f6izUzo4CODXp7/HbfK20Blp/1+BdJIfk3fsof/zc/5/n/APgHf9nr/sRj8rAoIAJaIrm01lincJVEfcqEPwuqw00jI7UtQmOSCYBWClXobruLW9Ck0qLLsqSk0MhZaFg5eFIWk7GcJV0hk0llgYpkxqgwmS0inmyhe2WZbEcvunNtLIaITgEMOIU0QyhyTkSlicoRlSVOPh85FlOdBGrXsKkMKuai3VNUVpGSYQyB7AOEACkQsyGFgKkqJpMWrXbopNYKq+QIei9RjWnyMbCu0N6EZUAWI0OV+Ul9YUYoWJRYIgTRiwW3ttMNZKSB1FnAIVcADBSMKTKmyBBKckiWBsoiRbpGdH5JT3uy2v7aNh1lITKlkZnkGyInkFI6xkgEnLU0bUO7nGMaR84BVaJ8UpDmZTLVIytSicoyqlDgykbiS+KKyBbE4DIkT+p6Iob1akXKGrLGD2WaokuySAFf8o0bNsSdL8NkVDUBTFt5VJq+s4Aww+AFWMmaISd0ijilqIymWVQC9miZllqrsVVCDb0cH1UWprgz8Uplc9FVhUsaU8k0vqoalDOMfqQfejGrChSgzpVNXG/vwVyafuscrnHUVSXmT9aCKZvOOMr0BUWlDW1VM2tbRE8byGMkFBPMnDPJB2FOOTErnC7msjXRD4OwppDc7xACPsmUn+m6UUqYRWpnYqS0oq5rqopyfBWZEh1IWdCNw5oa0zrCIDntYfRoLJWtaJyFrNhsOoaUYVRCWUUADDH/zFTOUFtYzmbMm5bgRxpXk11F3dRUdY0t3jVV1eAqSc1Z7i2oq5aYPHW1oJm1rLuAyxEdEyZBbZ2sDSELuKQcKnsxBUYRY6LrezbDwGL/AB8hK0Mzm7G57ogFEOtDpI8Jn5hC/KjqmtnBEWq2QDUzrtcDT588p64r7rx6D2LAWOj9RmRMzpGNJauIq4QZs9lsJD7WicTDNi3rfsQYR+VajDEkIwClsGM0s/mcxWKPdh4YfeDqekU3DCRg1rRoY2mco3YGpTNXVxf0fYe1YsZ7dHzIEAP1rGVWTFGHYcS4SsxeCwspyWCu4L2Fa5OlaUhZkWImZA/WsL6+5vnZM6q65s7dO1jTslg6UgyyfmmKhE9jjea6X1M1RxzuLzD1Hut1Il6+YL265OKDH0O1FNB08BJFPWSapgY/0rgGZ2TaloFN1+GHntoaamuxWmjuT5+/IIwDr9+/w/HxLYanIw8fPmK2t8diuaTve/zg5buGgf3FkpwTp8+f0TpLzAjQ0wf29g7AzHj+9IxxGEljZlZFxjGw2Dtkf3+P4fkZ1+sVKYRtYxVTIg8jzlpSjNRukuEIcKetFWZVMcPWRlPpYrBYCmQfxNenqWsp1E0FCk7PLvje9z6g1p6l03zzwwccH6yYn9yhUYoTC5VRvPPqCbO0xs3e4dHzpzx5/oIxwma8ZtyIKXZKhq4b2Kw7TDLsL5eobKhiYNmIFjwlsHZG08L5uuP0wTNmyyV11bA8PECj2KxWnK2uePriEzbrDfP5Hn6IPHz0IWMaGYY183rBYm/JLEPnRXYlXiyRrosMKRJsZtgE2nrJfO+A+d5SCnejSdpSzRYoY+nHlsefXHG5toxRY8c1TcjsVw0qeerG4ExEjRd86Uuf4b0v/wr/9x/+Mc8ef5NnD++wefdtTh9/Qho8zjhm7RGafaCiqhUqa27dPeFv/Sv/KqtfuySh2bv/KuLl5KiM2YL3arc9CktJUQYM7HyCcsASqag5D/D+9z7Gn+yxWvd88xs/5upH3+PXfvE1vvLL71AdKLpU8/DxObf2X2PuFJfXn3DePeMqbkj6uvjRQKMNKy8AxNHhAXt7Cy4uz3EarDH0Y4+LkRDylrEKbCPlQTwRfMqkPIo8w7mtNMqWpjzHKYlL0c4d+4tD9vfmfPbzr/LlX/kMX/ziZ5jPFpw+2fDNDz6gqhfcvX2LN954C0OmcpaDvmPoeg72D1BK4fvEZtPTzhwzJ+Ds5997gy984Q1ggDzi12BMg7UNob8uTbfZNoJaASkzmZK+/Cg1nv7ZjdSnmwF14/+qVFegUNrK+dYZ44qBtNEif0GGcBmDVpZhCMRVx/V1h0+RnIVF9rJb1M94qJenx5kiL81FOloaqdl8xnzWspXWAuNQpJBJwFPxepDPZbQVJrSSOjJnVRgV/ARDZeqrKU1u1rujsusbVQFZJjncrtGaQJSJrVk67NLYT8+Ruk4VD4OcM4Vic2NQpbaDNKPFQ09YLrtGNKa0TTwRAGliw5Qa0U2AXcY6J01ouWaMKuzt8j4JIEHMgcvLDaq4bKQin9WleQzRk0YYUiYaLUNWJdeGmoanujBOSnLEJKNR275Dbc/v1GsITiDDVaUVhkmijdTuaGFMKJgi7CfWwEuXkJoSLxTcAGh2gMfuGJUzKUybCX0tz/1Jic3uuvg0g2EamCtVpJ9aat6fJ3d4CYQp50sGcY6JSSOSzPSSNwdTymEZwk0gwta3Qu8GojdlIzflJdvvrlQZeBfQ4qWh9nQcBcqUdJsbzJNiepFzub4/DS6VKGJtLLWBaMST4/BWze/93i/x9t/411jYfTYfP+UP/+RH/PM//x5+fYrvB4QMMAEv0zGfAJWffUz/v6SQ/P/3yBliQGkwKpNVIhER6QeMYWC1uSbkHuM0WFnUp0m2GBzuKPgpZjEqUQVJLQ+lkDzrElUEovm3RhdnViUJDVkOntHVDhVCaEYhZ3zIoGSqHZWRtIsoF3OKqRgPdlR1Q1s5VPIk30F0ot1OSabdWgnIoQ0+w5gUOioMGpsNRkdJxVBJnKdjJEQBF/IWOU7onCGIK7zJCAWp0LFU0gKeqR2Cl6GAIBQUtNDainxmWkSUMuicULEgzUlQVmvERCrHRApRFpiioEyIP4kwHssNooQylmHr/KuUomkb5mRGpUjGkwOoqLBJig8TiypTyWR80qsZJVrMFBQxaFLSSJ5oAamyQlmDsiXju4BZFHMlUzlc0+DaCq0zOgdJihg9JhSDPa2JQYxkp9SanCUhIaTI4BNVWeC1Ec2lDwEfE5u+SBVGAaIyEENk3fVbypreRnjJOQkxbqlfU7RqJAuLJ+Vicjih1RqfAyoo4ggxCxOm0hUZmRbTj8Qo5mRJwRig6we6vicrocomii9FQYA2/UBEiZs7avtf1iUTvWzkbA1V2ZrvTjWBFBDbOw5rK2FEkcQgUAhWkjyjkJQTzM4UVgtgp8tCW+50Yflkmc4bY0nF1FZbi60cMZTrTpXo4xDFnC3G7RQjlnPc9/3WJFJ0d1pMypQuG6cUKSLBAZ1U0UbXLBaZrlsTg8ePEW1dcXLPMoHebtKTK7N8LmsdzlpyHnHGspjNJBLTrrjoBi6uLuAxPH32jJxjMWQaJL99cv1WGVcJNU8DrYY9qzhZzsSIM0iahomQfUJFEDKpxipLKtMpjMi3bFXRzi1uhMFLoTf4SDd4+hDxEQIeR2Q2a3B7CzY+cX72go8//pCTg1u8cf8e7XJBxqP6KPIzI8dxCAMYkaFcrVZFviRJMdY4nKupnKRPWKMI2kuRaERvW9ctrmrIOqBtZjOMMIpMZQyJrus52tujreT4jEYV+Zaku/goOuTBB1ADzlXMl3vUlfi3tG2N04YxxS14MY7jVh8fgqy3IgfO5NRDCviuY3V5wdhtsLbh8OiEulnStjOaWYMBEp4UPMYo9pd7zJYV6xHIicPDQ27dPuDFsOGT0xXDMHBycpv5rOWjy06MXtcbjHaMIbC6XtH7kW7o0WSCBpslQSWkxKrr8H3HxekLDg72GMfM3sExt07uUDVz/LhC6SA+gci9nIF79++TQuDBo0eQYL3qqJYtSjnAyDFQwhoMSdgY/TiyWa/ZrNaEkFFWALo4RdUlWTOdtlSFGp6SAOQxJYbRy7GvXWHYJEmfycJI1BZMq2jbljxrObs8Z64tly+umTuw+3Pef/wJl9/7LpWx3Gpn/O3f+k1ev3sLP65YzCx794550a+p1h2bqzXDGNjbO8b7jB8ydVUxDzX4RBsq5k1Ls4BXXjvBVg0/evQE1y557/X3+PjpKT/46GPOV4GjoxpvGhpnuX10iB87wsWIjjVYw2I2p9t0xJIcselWzPdmVK6SuiaOZOXwPjNaQ5UN2RiZNFmFdopbR4f4GLm+vmIzDuybPXof6Vae9MJQhTkxdFTjyCIrTtoD2vsN7/7ie/zqL38FrT/krc/e4d47v8kvfu417Pg5XrlzTJ1rNhcXqLSicp0Mb/KiSNwAFVHaQX3E4v4xfrMGVbHe9PjgMdoxa1qsudmS5tIBy9qUshaPI5XQ9Kg0UuPx14bvfO3bLD/3DpeD44/+9H0++do/4Z37/zK/87e/wm/+3d/k8dOO//q//Ed019dsNh05dRLNnjqy3aDUGufB2sSYa9bJcPfuLW7dv0v3YcaScSoTzkdi0FRaocIUdzjVIGXIpKZJuWi2UxK2nlYiS4HMrG6ZzQwHR3PeeudzvPrmu8wXLa+czHntpOGoHbFLT31wzMHHDobIvI6kPOIDXFxcMq8bDpYH5FGi5MdNz4MffsD911/h4OQ2ySuUAW0y46bHOYNSFVo3ZGSPU7Y0cFCGOVnYuT+DZn6zafuppTa89Ddbi6gbe/a0x2cUWRuUq4VhPPnhbF9FAxZnGtmbc41lTu2aLWuXn/E5br6bKSkj03Q7xECe/LIEhZCpfgG3p8YtlFS4lBM6223jM4EcIYl8e2I0TPWTNK+7xm43IELkVFswRW2HY8LI2MmA5Te7ib8ypR8pzV8uDUMq61rOmVjo9EYX74VpGDgdozyxDtJuSo8AD5O/XwiBbhjEF3BiKn56yq6UYI1W9nlJeChAwdS0Kzl7O2avGGhPgBKA0rup/HTeJwNpZy1h8iS5cY6nz68moGv711PTLT1SztP3nT5ySUoqqOh0hU1D5+k5E0D0kyDFrqGnfNpJVr/7cDvQaIIytEaksEoY51pNyRcabWTILDWY+RQ74mVpy2QC+7OkIzevM6CYaZotA35ik8QSl/wS4FKAsMmnLJUB5E2T0Jts7ennT7/37ufd55rSDG8+VxfgQoZ55f3Vy/4zn/6Wcg9osjZFqh9QRnrHug289vqCL3zxHW4v7rI+3OfhU88PPzhnHdas/RUqh+25E1buTbnOX3EAQ0FB2uSGVeWmVwqsVaQc2fRr+hGSimKSGcUnQlAmSlGWd0iRmuhJE1qWMAoqVwCMLDKFyhV6mhM9dy7ad2uLl4SaaGLFjK+gm9kHso+oEHFKDHUkYEGVfOGMNYj+PwdSVFBccmPMhKyISoNx4pehFDpqTLIYZWR6kRSWKKkOxWTSp7QjEJYbQhNRSRBTW76+LpITUfCIZ8YUOSKAjzxxipISXwABHKyWuFFBwW6maFAQR1X8ItL2/JERtksKghCm4gpcNhJZRHeUt6QVVVXRKkWXMz7324m7nt6sbJUoMROcwJGcRYZAQfpTtqRshaKsoegQtmZ3WmvqWY0t+s2EmDWqZDBAKNdCKhuRKektxso1aYvmL6dQzCIzyqctvUoXlDslMVC6XndsugE/riBHaR4VDH1HV6JX1XTDT5ttoTlu6YJJZAgxKYmPzHlrZhqVGMb6TUCNiqapaOoKXTToAD6M5BQldSNGei8eGDEl8Ysqz8tpt+iHlPBZEULGR1U8ReS5o+8F8DAiHfEpi0dMaYZkPypFT0G8p2vNR6G9+xxEYpQyVeUISTw7SPLdwugRWE18TyjAzUSPG5UYJeZShIpPixQNKWdiSZewzuFypkaju367CW8BsBKtaYyAjzEWuVmOIi9CJjahTHqMcWw2A845oh+JccRSIlULcqMKMp6yXAPTxp4S8vMEOqbIvGk5WO4xhoFRKdYhstmsipQlcX21YvSe63935PC/WBSDLgFlBSH3zGpYWsXxvMbcv8f+3h6tcSxcjYmZNASh45ZfzmpcZTFVTSiAr0hr0u5aRNzofcqMMeGjRMJJVNlI3Gw4v15z9uKU9WrF0M7xY481GW0SYRQz3LqpGIwmRy1SmnJfhRCYcs8VGmcrnPOImRbb9ChjLE0zoy4sC5WyGNcaR9MuaJpGjAcTxBSIyRS0HmkCtOwZddugbeDi/IKziwuWewe0dcv1VWTW1hwf3+K1V+/Tj5Gr1Zqu70vyiSvJIhkfAikkUImQAscHeyxmFevNmtV6zWbT8fjjD1G6Zr7YY/9wj3YmEiBD5NbRAZ95+y0O7+xzvvI8e3KB7deE1FMTMabDGMP+/gFtU3OoG/w48mIY8MNIPw50nUw2rRFTZVOM15QuICgicepCoH92Rrtouf/KG2RtuF73XK97UlLYukVj8RHW/YCrGq4unnJ5fsmApfewDuf0o5YJNpqcNf0ovjIvLi65XF+zXvfkKNd9jjJwgNKEZAEwYvAkq6idUJ37IJFt0qggJ6sA/inGUjLK/ZSiJEsZY5g1M+Zti+/XnI8D47oTNYBrqdqGy82Kb/7gu6zP93jl1j53lnMeP7tgtYZ+MHS9JqSKi/XAetOjcVhjOTw5otIakzP7iyXd1QWn5xeYquVqPZCrBYuDE+a9xrXXXPSXPD1fc7bqOLl9wP6dWzA41qdPWRweUruGpmp49c03mc8b3n//L1htruj6NSaO5OQxKmK1Y+wDlWmwWjwbrJH0r0wELbWKTyO+H1n3HTplhuEaxVOS7uhSoDE168Fz2m1Qa80Xbr/NB58Evv1nf8Rv/ca7LA42fP1PvsmTH/1v/M3f+DJf+eUD1pcvaFym684wuke7nkQgYcnZoJQlhSjWUnUmZsv1euTs7JL95T7L2WznybftTXOx9sygEnI3R1zuUWGFShX5DLpHL9gc3uFFr+kGT0jXtLrnreNDZnfvMksf8coBXA49UWUGGmp7wqK+zWgkuj10G7zqyXGgAioiNgVM9MzbhhwD1hqCKeuZMaSoik+Znj6w1GFlrc5liJViRFvNfNZyeHDA3du3uXO85M7JAdXymJHM5WbNrY2hDS2q85gDTXW4Tzd60lnPhz/4mBeXKy7OTjl99oT33nqLX/zi51FDx7hakZOnu/yAOMiAx84KgJeVeOjotsQng0IkJOMYca4A5FoaLtFfhW0j8umH1lu66k99pJunj5tPVbtJBKUZ1wpVVRImooS1PKVhiOTSoqlxxlHZJUY1kGaUYpif+SGnwaqiGOtPSRzFr46XE0e8Dzhnt03q1AxKE7/zysoYNKW+yuWblonxzQn6jqVyozkqzZ2aps+qsBQmqhF5W8OKX1fe1uAyfIJ04+Xkawo7VZrw3ZeemsGbzJOUpmCCnYH79C+2gEapn+2n5cVTfbHFnxQaYXJMQIDKSgwxS4UmnQOQhGVNeY1UAB5SKszrHSiw+zXVMxmMsLCFsVxqJj1JAqbRb37p91Oblm80/VtQYwJ91A4gedlsdXfVvsyKmF57YgRM9/vL5yRPQIUWeblKEZWFJa4KeCeGvsLK1/rGHbK9jnbX06c/x6f/bGJTfxrI0Deu75tm9TfBG2MMKu3Y/5OB7/T6N1naIYTda2u9/TyfBlW2+Fu+IV166ftNt8yOJX7z+0z30/bP9eTPJ4A8KRDHnmwbtDWEeIX3zxmHa/TeLaoq4FTGZo3JwnQTY1x58YICIBXIz2dx/dUAMJTEOgm1KJHKZqMVtJXjeH+P48N9qkYTc2RMgWEzQpYmUxYVtovJfLEgpiS66dHjo+j5DBG4zKOQAAAgAElEQVSTAmQpmoyWyNMUPX7sSVE8OBJZmBY5EwBsVehgghB3PrAplNCUFct2QVtJMae1oVq0uLoBU5A2Jbr+hDQitXEFCSwXhZbvm3XxWSiNekwIIyAHSUlI4micy8I6gRACLE4bxtT8iz5ZXlomD3kL5UvzF6JEkobgZSM3k4ENJUWkuP0rJNc3e1nUUKiU0GUKMGnbxbOC0vgJeplSIAYvbA20eIBEKXnGJCkqW0fw8tp5i0rr7ffR0+ZQQBetTEkVqSBrYgSlMvaGoWTKpd7SWixBczF19QHlPXhDtqUpNEZkNQYxkisL2eQvknJZOrTFGEVrd6ySstrgCmrvgyThKKWKIWomx6KrL9o7JVQZMjuNppieZslW1wrvI8Pg8SFRKU1wkgVvtTTsYz9gqsIyMUJhxxgqUybAeWcwGsQ2RDxItESuhoL2Dl6ojcZJ2sM4jIQgccSjl3Mni6x4CKSwM72cFvPpMYEYkhGj6L24QyuyTJOyAAnOlGM8Ic8+FEaEGHAWi/btMdtREEu0sq4xxdRtkkOkbRRxKLnXeetPA7LABx8ggdWG6GXBt8aQNIyDTLn70YMych0XiZJsFBqjMk1TCaXc2VIkia/JroBQRf9qhP8Q0/a7Ki0mXOM48Oz0GQOSspSCB7UA1xDNQNcPPP+Da+b/6RKdHTFGNt2IwTJrDKaW622/XbJs55gMNkHr6mKaFDFZYUrsmzEG5wxOi3nS6Edho2x64iju+AqJq9ZiiEMMwmAJnJKUxi06xggHiznzz74DMbFZX7G68lgDL86ecnl6SvIjWoGpHDFnbFVzcHhIvrgk9n5boExTtxBjkduVdYRMnpr0UjuGJAWzq0Ru44PHGiWJSNkUqxEpyYwxBC2ASV3VWFcRonyObhxYX11xmA6wVcVy/wDXD6Scaeqao8NDrFU8f2YxWrFeXbNerwA4PDqiqSyLmWNvUdENC1CO6+uOTTfSDyNPnjwixJFZo9EEbh29xtmLF8z3W+6e3OPV+29jho6zs2eYZ084fbEihRHTtGhjaJuaxWzG5vJS0oOssBnEHNXRNDVWZSqlsAhg3PseYuZgvi91hakZk+b56RkhZLrOs1guqGLi8mKFNo5+iPz4g4fkITCf3+Li9BnrIdIzQm5YrzqatiWQSf2A1llifBUiqawMY0jiPxCE+eTqkviUEZlVCMybCoWm93KMjbWQs/jehFESfHKSoYLKpNGzSomxHwtYZ7geE+hEO1uwDh5iRKFZb3pOjg5ojvZ4trqidYrlMOMb3/6Qs6AZwsjxrWO0qfj4wUNmjaOdNeSUuP/aMXvLA8Z+QBFZhxXnlx3nn5yRdE3fr+h+/CFd1OztH4FreHFxymqzYd63nF9eMQ49fUh055e0zcjr9/f57d/9Xe7fO+HJ04eMj3v6TQd6II6+NI2ZyjU09QKbE9pWNPOKo6MDYZJFT4qydgXvizxCo/OAdWeM6YJNHNlv9umT5nqMjKuMP/osD56P/Pj5Pp85OyZVM/o0pxuXdIPDLvfZO9zj9PqSveWc/aOKk3szKgMGQ46KmBCvpjiiXUVCc3B4yHKxwBlhuVk7je9kX9xZuMl+LZjGCGkD4QqiJl8F1Oqa1bNzTq89jc4QOz744Q84qA2f/WuKyyeP2bMj67Ri/+ge19ce52ruvf4GZm/G9cULPvngY87WT2hyIMaB4cUpp35gc/GC48XrjDGISaYR+VdUimhKXGicjOHL4CcjKWlkiarWmjsnt/jcu+/x2v1XiN7TXbzg+nxNvI6cDZHRaIbzGXZ9wVcOvsjdg7tcmX26dWSZNc8fPeVHH3/Eo6ff5/7tI2p9H6c2VMtE0yqiz7zmW2p7zqMffYyZV3R9x+HBXQ6PvwBJ9pPKOYll70eaeUvIXRnEqOIHFolTbfMTxXTZh39evb2FMNLuH7zUyGumAbrWlBhq8eCJKm6NJVVpYMeQsaahsg2WjI4jmFpAjJtT9nzjbSReogzEEkaV1LGINJ6pDEKMwdi6MB2NSJRLPT9RPzOSXKeMIRrZfyVpT5G9KoaRbP1Q5BIo/zaX/eYmCJCnBjsX/KNANhOhQJnt38vunwsTJO++79Tolvd0xmKU1J4pi5eZRgZuxhSvqUwxTYUtIl96ga3EWwsDdWKTwCTh2jXXqfy7bWKG1qhc6qqUP3W/ihxdam75glNjLcECcj6UUUU+tDvuExB9g2shxympgkarAnZo6X2m99XCelUUb7KYSVrOz266v/uUCUPUlqA1VgNRo7ITCX8W43IVskSsmgJumRumkDdBNLXzbGDqy6Yh1HQfKAE8pd7URf6TJAIXVXyaFMGU2reAXj/tcZMl8RKjApG8adjWuCklWb+0MG2m8zfhJ6poXUW+o4uPYYlc1hoRYsh1aXJGhVTSMiVZcnrv6XDEGLfWAtvPuwUwpzmw2nlgTOf4BvAkR0rq3owwzY2CoCIxDqRgCXHA68Aq98Q8YMIG7Tek0EuSZ04YN/VoskikVDzpSiLPz3r8FQEwKACGJWTJq1XR4VSmxbJnDIcOnBGDPK8zY2VQSWOdbEIhepTW1E3FbC56rDFEuo3Ch4CzNTOrcSlKOsIoE9XZbIbW0Pei7Q/DUIgKihgCm+DpnMNaR60tXT8Q9UhnDFEpshfNT+takQdYDdZhGicsCJUlMimXuFZtSXi0MWUh88RRTlbWGV1uQJXF6yDjBIkPgZwNKEGrxMhtwJf4SOMsKgah6yqJyksqorQmpsA4BHJWEuOlDbGxWyObybHZh5EYelkkGkghMtrIvGlk888JR5Gm5CwxmQAqMcbMZASaJ+OXJN9Dp4AiEbLiqg+oMWGbGtNUaB0heCwyARm8fE5MRiwB5XVlzSxSF1WSYZQBm9FOGt6APM9mTQxCC48WspHoRBRYLZ4LKE0K0hhZq3exp1lM3TTSaIsJ7O7GoiDBqjTYEiNbplBCbSD6ADERxxHlHNomjE44q/BhtzfFKK7eUy6zQuFDoh+GgshDigYVp0zvCqUqMR0CIOLaiqqtcFrROMNe3VJZjXYzUk4MYWQMgRZNPU88enLG6AeS9+Ly7gPnw4gm4HzAOYezNTEEzs/O+eF3v8vq+j7Hd46pZhUpa7xR5KSwOeG0xtUSkxlCFBNYH6mMxitDj8YiPia1EdPPoDy5smjlSKseEMNLP45AwhoxRVUIuDGEgI8eVKAyLdZoUmmcsoE8lK1R21IwCOJNCMQgGllnKlTWjP1ADpEcMsnLterDQEbTh8hV1+FDQtmKGFPRjmZMKgWGNqgMd0/ukuLA93/7Ix7/O5dAKWSaRPXfWqq/74phagatCCrjVUZpTShUO7TFqRq/vuZwMWc0Db07ICwzVaNR+gJrK+g66n3N4//ugnhcvmsFv/gPT3jla2KK62xpPHLAqoS2gc3vRy7+s2tUkILkk5Xjvf/wHi5rhrrhtF3xnX/yFAa5+nKd0Ulx7196G5s8ecw0TcOwvuLZ9TXULZugCMpyve6IMfDhj76DU3BytM+ssSxzYsie0UTCMBJzXVgCmuAjxETwvax/sUTz1k6Md52icoj+PCds9ugs8r6sZDKldMaaDDHgdGYYwNmayiTAYG3EkInjgM4SD6xVRWIkuwxWkXqH1xV9MCSEceWMgLI5eV6/exvGDT6MqJx48NEPqdsD9o5f4/atY3S44PR8w2xe0ywOSPqMO/dv8fz8mqwNF9cvGM4fU6nI80cf8b//4w1Hd+7wylvvcPeV1/jCO+9w97W3OLh1ggmZH33tzzg9O+Xk5A7Kj0QtkYzj1Ybjdo/OdIxhg0+KNASOFzOWSmPiQB89deu4XPecriTWlWFDPu9AGzZ9VwqSjnHoCjhr6PvAMDr6fsEwdKw2me/9e6cc/Y+H2K9DW82gNvRXK/ZMLY1/WLGsNadDT0boy4rJUR1CH9BGkqZQmuwzXTditUz3nYVhFGBDGyvrnhFpV0wScCJbZSYlj1aKqqqJfSBlRRgis6bCKC3x5y4SUuLZxQWpG/jw0TkGy+XQM6iBN1495G/++rukLnH9+hGLWU3OG2LS+NgwDBVvf/mXeHH9nHl9wGxxwle/9nVhqjQN3//RByhXMa8rlvMlKl5zETeY5AnjyO2jY9rK8cnDB4RhQOfA/rwhDhsaa7l1cIgfI2cXlwQPJIu1NW3TUFWaWTOjbRrqWlJ/tLFE73FJszANg1YwlpoCR1XtUXHN/kxkeesxsXfnFao33+S6PuTd3/wCs1fucXjngIvlknd//2/xyude5f7JAt28zutvvcfi6Jh6NufWyS0Oj5ZUSrxztIakE1FnJOxZkiSss0j821TYRlDCAb1ZvKvsyEFR6wjaQ97A+Jyu67h77x7HJ5qoMy2Zd472+JW/+69zdf2ED/2SP/+n3+bZs0e88bnPQ/Wct97+NS4eP+Cr//wPsWtNq2pu1YHOP+VieEHwHcpYxuh5cXHOkBPn6xXLvSUuZ1SS1KTsmVy2USaTchSZrTbbvSUokbC98c5nODy+hZnN+NP3v0HsR/zqitx3JJXYYGB5h1d+79c5+vKX2HvrPovlMSnc40vvfJl39xTvfeVXia7m4bPH3D04QV11qKhQCxiHK1w1o22OiCExpoRWHUn1kIMA2UZhzEhlRpyVBiX4EeVkrwh5lBCgHOizIgA2Tw1ZAl0BqviC/XQIQ0YLXs4dxWRyajSznMsUIkbvPNfqbLG5IitHp68gJ1qlcTrgGemBSmWMWeP4ELSDdIKiBeNk0DM1VVsYT1KetAZXBxq7wRpFXS3IfiX2G6ZiTBqnLNbU9KMMzZy2pCwSvZRGVIrYCNEoxtZga4MKGecTtgz8gkKMM3VGI9HnGIPGiXQk70AdVQxolS61p5Z6R/wHJEEwEsgGhiQxvabKqEHhV5GqrUocO1CVoUvOEi3vg0SgFhAlJknH0c7RtA30vkCCYq5opkY/ZakntAZVTI4nxrIGkzMperIyGNMUkNgX75jinxF98SgQYFiY2SVNxThQHoX4B+6EwAm0IaiJHVY8ylIQ6Z9OLyVSANsQAGESFCaGorA8vfA+sgYv388pK5G3ZRooTHCxEFBZE3RDVx2xf3vGZ05a0qbh6cMrNvmCTfQMOTJTnn5zTq4t0cCQPMY4zGQOixKp/cTUUAizIkPOkRwKA30a+BoDOHK2xajWSPqU1qACQ44kEhhNUIo8yjDMKFNY4hQQqHhFKF3kqLk8TxV/Mvk55iQARbkKrZZ7VaMxZS1IGJJPkpIohoE4I16IaEXb1HTdmlw55slih0zQkzTmpqxMlZ77JrAjYGNUIr0xWkgFE+Ar8q28BeYURWqitPifaFEpGOVkeOEsGkOVNMYd8jTWHFfwRhqpz16Qzh8TwiWj0aS6Jee+YF471v9kyvvz4Ni/EgAGIEgMlpw1OVtJCUESOVLfM1wlYpXxSqJLbVDoCDbKlNtmySy2fkRtCmIdwPmIzQobkyC5lQALlRWTQj2TKDtVdHa5SCNUhqi1RJ5aSXZoTYXWDtUWKv96Reg8s2bJ3nyf6BNRg55VuErQ8olBMOn5JvPGCegSLwr5YVQRn0WXH+PW11SmlGnakzSqNNZ+jHgvKSTiiiyLNMji5pNnHALDmFivesmjl5gQlBbpwXxWM6sshoRKHhUjiYgn47NMukJbY1Do5Km0yH1CCGUxNEQrJqe6kmjSnArQAPJZYiweFJJukBEZj6sq9tuKnCJPnp0S/Vj0/uBTKqgsW2NWAS9SQWmz6CSR5AcxEpoaHaFb25Ji0PcjtTM7XaZCjA4p7BjYakEpkZp5e6Pmbb52IqNSWZiLdlY+l4AXVgklL/og76Rkqqy1xF8ZNUkAdo7GCQEnQp7ohPJdhFotm0uOuWjSBCAyWdJetqagWsbUOUSUTRhrZOPQassAMmmrrMFpoS075yDPqGdztIo0GgyKMQdAGBFXV1fYyrHYn2Nrg9HgjGEIMimMiBGmGI0JbTNlkSJ0QYAmq8BqIS5K9KgnjD3aVQxZGCCrzZqmbagrC8hkN2WZzCsrniu6MDBCyPSlQLNa5F7Bj1SNo67F+G8YBq5XG9abwDiI94VQ1UUe5KxFta3cgwzEDNpKLGU24lEjVNwkAIbWmDJ5MsbQzBse/PY5q9cHvvy7r5E1rGcD3/+fnpDnk3s3lGw0STbSEIpDPlozny/YDIlZMyOGxMHJHT73C3+dR2eP+frX/wixsonMF3N+/J8/ZvgFz+c+c4+48Vz9B56v/cef8Oa/uYf3gUorrNUoX+6J1xNn/9XIrf9ozvF/v8/ezPDt/+UT/o9//8f8nX/4JVxl+Nr//Bh1Da//jVsYXfPsPznn6u+tmVeWWW1pK4PRhd4XJTJtZKKfBk7PnoskprIcL2vqdkEqCTIpecY44L0UXMYWeVMSBo84rym5d4uBntoyV6SRJQWCN4SoyMoWeaEq0xIBljbdSNdds79vaYspb4yRumrxXtbHnDWuauRaygFda1Sl8HmkDz3EIBGwwUMugIhrSbHsBarF1Utc1bK6uqZizRtvvsFF7wmm5s6dijgM3Dq6RcAwpRHN8sDzFz3dOPLgowc8ePyc7L7KX7zxJm+/9Tqv3bmNiZEvvvcOf/Hnf8GPP/qIdrbAzeegDc41VFWNdTWMA8ZVtLOa1Wc27O/tsZwfcfXoki6smH28ZAwOXTVs1h3DGJjNF2jboEgMKbHuNrSNZb53QAo9Hz58Qt28ymYt0rYwS+AUra3wgD8O8LZiNWx43p/x1vKA18MxF+uHxCAsuGkynDPEpAifT3giMQXIkb2HLU2U4t+HxHDfExcJrX1JJomYBwa3MmWyJM0USnyMdGXxY2IcI9GXddvK9Eo5uOp69JUjR83VdaLvNmATrk7oyvLg4QN0n/jsa28RujWnL56y3L/F9WXPZvR8/RvfYn7QcO+Ntzm+/QYvNoHr62vQmsPDfS6vryElhi6i4sislmJbpcTt27dp/l/m3jxYsiyv7/uc7d7c3lav9q7u6q7umel1hllhGCSEIWAGZBsQ2A47FKGwhC0hR3hBlpFs2UHICMuyjYTkcFh22IC8SEILMhijGcBCZqSxWKZn66W6ppfq2t+rt2bmXc7mP37n5ns9gxDWX5MRr2eqK/tl5s1zz/n9vr/vMhqxu7vL1vqM8WTEL/zizzMdjVksFhwdHjMazxhP11l0GaVFotb7HtsnlBa+aYgO30fZk3LGakNlHPXUSl3Q94QM4/EmW7M5i/v38WnJZDpj0TS8ef3LLN0n+fyFl3ntS6/w0Y98hKc+8Bz/29/937n7pVf4vm/9Zp547CrHB8c83N3l5s3b7O8fAiN49CmMsmWiLHNSrZC9/NQUVM7N1fj8pGnJg4u9MA0hoGJDVkvixGNsy53bX6DlBg8WLcfHHWF5RHu0z/lHLqE31xnHdfz+PuOZo5p0vP3wAf3hDm/ffI327pucOTPj6cfO4+IcS4sxMmWOpYhWxhE09DnTBI+Phak60KdzKv6jZbKeYmEDSGM5X8y5c/8eje85nEx56+ZbqBDJXYcJgfWNKT5GctsRrGN6+TLT7W1G1RpNMLjsMKZD6Z4UFJPxOjlZDg/mvPgPPs0i7pFcZOImPHr2CnZqee3uDY7DLnG55LELT/K+3/sUGxubaNXjQ0NOgaqyWFfRpkaElVmhUijSUL0yWf7KRy4T+ZMJ9MkfirMDpYJaTU6HWk0hQzRUhiAsi76Z0zdLfApkqzEZlJehXCahrOPBw4e8ev0Vvvxqzbm+58qTvxe38Zg0iIWpUESrDDBKHmovHbG6R0zwRdaVBoZHYTbItFhjlJHmL4BOAZMT5IhLMtTwBGGrZZFvKxAK/iCNWBmYy7UQ77xc1i4r9vKQxjHQ+LUSjwitZL0ra1EuEWIvYEqMIqMxNSZplNX0MRG6gK00ISqMtjhXo1SJdy01TExBvFeyhsJ6TCWFTQmqxGBWLo2iliuoxeTSKlAqFhPyIZVkkKTIGZsKxSAXaFKXXgItDNCshQmXh9ADJWyQjBkIF2WQJ1+hSuLVl1GFCpTLr7NFfoOYphaPNbn+uZj+n2KMrLLdlXgfJgkBEAiHYpqvqLcu8m3/4u/j93/Du8nLNa5/7jaf/cw/4kuv32C/WeCWByhd0RRgxzpXTFtPkkpCTpjyAcyQojHgskqkZILpCWMdbQtTZDB/z5jSaw1srlQadzHbLU1EVifrbMXEERn/8LmHhzn196kw0TMn4IfWJ/4ncgOXfXlFZxIOEIURbaoat7HOVq4x6Zhl71mGXnzc1DuTDfXwPtSpDUMBp54jsjElkcqr/aT4uJTrlAd5j9LiuagM2Aqbxdy+95YHx4Gt40MO9JTtwyPC8pC2O+DYtzQpSqJcGYYM/heDz8cqVOG3eXxNABgrDdDJLruiZXV9z6IJGDqUy2Sb0U4zigkXkhhhOi1+BRly17NcxmIuKM1yzgqf4cBWdLaiL1pzrMYuxdCt914o5n1PDqK/H5yCtQJPQ9AOHzOhsnglPgqhSE60EbvBrDMYXcx1ZIGJnmugdKkVAphTaVZzQQStxpiKmBVRiRmpKGOMNP8pFqRY3pM2FdoW5E4nBufeYSWaEuMUYyjTLfHgIMmzptaxObJMakdlFONqwshZmeCT8F2L90EaIxQ5SPOrlaLr5YuqXCWgQc7YWt77omto2paQE32M9G2HD1m8A4tWMMeIb1u0kwmr1ZJIMkhbyHKDJSWbwSrWEEEEByfifGoNif+DGGAqMkkLshlTJLYJazTUFZUGrzU2Z4zJBKIYJaFW9DidFVUlMgeTIwX1EIBGDbpt2cSyMUViFEtfViaSMdF0PYPC27iKOkkihZiNikngsG+saIeF8THEgYqBpymHkzBLNMDgiYCCJBr9EAK5sgWkEkqwVUXLpoKskbLZDK7swwami96uaJ4gJbwPtF1HHwKm90QFbd/T96F4dIhMxZoSyas0VsvPsMlXlaOyBmdEj6mzweoIxjIaVyzbBTs790kpcuHcWcajSoCqJA2tsxXGVGTl5fWSOHHHGHFWMxpVRfqk8FHMgEIUj4SB4pkQ9oN1lqqWxI/YNKvvO8Xi/JwzQ2CaMtKqi3EaxWRKUj7CJPLiv32dS39ug9b3AkgdZs7/+zMefnzBcNLnKtH+AU80Hm80m5/ShQKfOL665M0rD5k3gdkvbBG/e87Vj7Z86/I7OfNzj/Iz5seonOUoBgKZtV8aix9F9ExeddT3bElbCQQn0+xkNMkoSJrxZxyb/+tYpCPZ8JF/d5sv/qUFO1cXmFdMKWjAq4i2mcf+zFle/ZaW8aQAm7WAt9o6JmiCqVBdImoHVrFsjiFHplXFbDaiGjnaJpUCLJPjiUeKNhajHcYkiAllLE4bdCsJPcYYUjYoW6N1oo+NsLrIUkhoCZmW9VaQeW0JvcgER6Mp40lNCmIkrGsHxtL3obCjNDEEQmwJfkHfK6DBuYiymsZqUiemzz4YMmNiLjGG5izOrkshT2Btveb85cd4+MYt+l5zZrpN6/e5cO4cbTKc33wM5Y9R3SGL9jrTakzAEY1j7/CYV155iRvXX2ZSabZmU7Y21llb32S+uM/e/iGm6aUJ6zyzmUJPasZqxmh9wvJfmnPvvbvs6odMxyPufHCP3vR84EOObBVdWKJrKbIX7RzQVLWccThHMoqoNV5plvNj0sFbaOW5fHGTO7OO+fyIcbDUT63x1g/dotlesrWzhreBF5+/x+W/soZ9C1IbizcUyBwJFh9fcu/HHzL75BgULD/S0f504NxPzQge5u/qOfreZWERKeKlSPeNPdt/eBP9S+NSpJdtyQrg18VOihsNUYEnyhTVOpJxZK1IZiLMMDJeRZquIXaBF1/a5ehQc2nrDOr2Q3bv3qLtjghpj4cHPU89+0GUhboe02S4u7tLPRlztFwwX8xXcrCMgMuj8UjOkxjxXc/+wQF9Srzr2ee4cO4MTsPtm29ytNjluOlIxmBGNXWt8Hv7BCXJaglJsQrzBY1qGNU1k1GQ+GNnyDmuIv9kqAIpKfre0x8vcCGytuaIKnPcHOGqMWupo9u9xfzODfbeXic2PefHGntxi631mtwuWBwesHPnNpsXz9L5hN2uEMNyVQatWvbdLOfeaVp0HgozTJkAr0q10tzIZ1N5QU5zfLPLnTufZ97usXO8ZLL9EOcU0y1DbFtCs+Cpd8945IkpWxeuce3yGW781ud49LGrjLfOc78OXH3XuzGbZzm7vc2VMzO8vsGtgw6XIl0oxroZQkg0i46cFF0rhplynA6yw1O+KyVuXYGcnVmYJsv5nMlkzNkzWzx57XFm9ZhuseB4b5fp5gbHXSCqCe3xEQ/u3Sc/fhZKQzSfz/n1my/z6tu3OfSau3vHvOuJx3n+ycfZWe7z4hdepM/SlD739DNcuHyJ3/z8y9y+exOTet77XOLSC/usrV8eOkeyklqt921h8Mr3Ufp1vlLX/rt/KE7KfnOqb8koJQy0HGV6TRQmbd/tsuz3iUni6TWanMXrTJX3Ksa/U6rxRe6+/RJbFz2b67/bd3RS94jvQkQT0VmYeKRA9iJNFjuGTA6e2HcQekxEIklNhFB8gdJQ2xSp7wBgJBmkoCxZnTSGg6+GrPUTxu3gV2YQk0mjhCGokhi0GzKVNVhb0bQ9OiuccoQ+4ZyWuPYUxXzUOpFzJEiE1WBzeP1cmDOn5Synv7ahkdUMoIY0kKLGEeFuplzGLBJzUcCqIi0wBUwqIiJF2eOk3l/ZliCAiUYACFWkfCmLRFsMz4007uXZMMhO9IlEpEzRUyxeHgWYEq91eY7WWoaCOf1T13QG1tdnPPfeZ/j6b/ww47TFM9fmbM3GhF9zvPz6Dbpujq1qjEn47E9SSQogI+CB/H6tFJW1ZBQhrybDRZIh++1Ak5YBsvwYLcaeOukVoKHKPYRSq8942q9k5UehhsF1Xn3XAqycgAqngQ3gRDod9IAAACAASURBVAK0+vd5dZ2H9SDSYIvShtglKqNZW1/njJ4QezCHx+S+rJfyGsaoFQvkJJ715LWF+aPekXAjbaV4cVBYQLn0DiepPdLPDsyhYSDRdS17D/e5+fpbvL7esrh1m93DA5Z9Q58CMQsTnXd+/N/V42sCwABp5rMeLqTciFnJpFsZIxTLCnAK7Yz060G+GFNZqlGFNoaskKSFDEYbrKlIWdF2HamP+MYTKbFvfSC0HpREKVpdkZ0lKUmlGBCwnCMmJHJIkBJW19SVwXlPCrkYFQZyEmNO9Q6cW8yQNFlYDEo0S4CgaDmh8rChaFJB8gYznmEBaWuIEUIsGrtcEC81IJ5x9ZpKFQMfJU63KiuYjBg5J94RQPYtGyPLWm2oTabSmbXKsjatmU3EEKtrNH3XITubxpqaUT3Cak3nRdNbuXqF4LvRiKQU86Zh2XeS1hEi2uxzvOggSzMUYsI3Lc3S41OPqxxba1PG9YQQ4HjeCAOBd5rcKE7iiqBs8KsbUCQZvm/xXQt5oFcZRnVFpQBr8Cmy9J6waGicxdgMKp3SmaVSpmmqyq3ACGMNxtoVlX3ldaAN2jmUtgSESZFK8oW1DmUcWVm0tcxmhskkyQGMOGr70ohHFJWP9FWk84G+D3gT6X1PDKHoMdMKeR02VXIWdLQceDEKFU6nExRTlY1ETBspunWJRvRdT9d1GALKQGWF/q0KmwVrUJUVMCp4fM60fU/n42qC41NEGSX+I1Z8DIxWEANaK1zlGNVVATWgUo5sJapzkmDRBdq+4/DokOl0jKkMWkMfE12MYmqmjaQu5OH65+LDIiyXykmEbtv2UjDkjDIOYxXKJIb4KbGNKYyewgLQWmOKCa78lDu3TDhyHpBuubdSzszbJdVNy5mfnUkiTOFcuLc1k//TyaQkZ9o/3WLuabLO7P+rPd23WJ79ywlCpAlzbnzPXQ6e7jj/7p5qOuf/eeFX+U/3fpL3PP0hRuMxH/qGj/EPf/3TJAWX/+I5cm7BJLZ/ZczR9zV84Q/u8L7/5VHQ+sTgVyHGmYpVAo/sPYoHT8557YO7PPXSGTIQzyb2fnSO1R1Wa+J6YjQyTMeOSSWHra0UQVt6pehTJllNSIr1aYWzlum4Zm02obZaIkytMHz0aIRzlexh2lDVNW1XXOGzFOMi9RokcxltHFonYmrwMVFXFltNSNqijcP3Lb2P6JxRyjCpx+TKUleWGBQpW7I2AqolSSPJJKwFo8X4zimDSQ6dHalXeB/o2lBAVkPT93TBE3Ikao12BnQi9kvstGKyvsayT0RdcfHSeSbJc3y0i272We4vmGxf5Ph4n9Qf0zZzzqxNybaiXtvi3MUL7B8eMj86IvUtb9++zWvXX8Npx3i2Tp3FfHC5f8DBYoE3Fl1ZwjLy9nffZPeP7fChb30GYse5rXU2vsnwxX/vLqPKsUxikuqs7EltG2m7ntAGSVyZjOhDz958gTGQK0dVG2LfYJwS13WVcZUhPhXZ/fYDrv3p81z71AWatYZP/8oNPv3cK5z92xVJjYFwomtGs/vDB2z96Bpn/voaSmXm39Jy/88fsPZTY0JMzL9tiX8ysPlDa5g9S3gscfBnj2SvQZKYjDUY58q5G2i7pfgwWUfKEZ86ai3mYE3fEaImzz0q13hqcJrew9rGOULuubUTuffgbbYm97l65QLzJnDn/gOyrlm/fJFHrr2HkC3H846uV0IHtoZsDaZ20KjVUS1eQ+V8z5ndh3tU6xtcu/YUH/i6F7h49gwPH9zlaG+PT33y73P71i26nAkx0PiOqBIja08Mc0OQvUMNsYkRpWox0C4NVeUc1hmUdrjRlM3pGv1iIeB3avnwB97Lhz/2LTz5zAt44MHHfy+PXDrPYxsVP/ivfzd95zk7HjGziqefuMqFc2s88vwLHLee9a1LJwkGw/k3gLercv9UjcZX1Jin+ystjaLKGWUtXcjcfPsu9w9ucv6x87zwwSuMxjN0MjSHS/qjCcnvcbz/KpcfucD7n38Pz155D3YyZeEXvPHyFYx2NMqyMdvk3HRG1DX3D49ZvP4AHwMpSmMfQqRZdsQyDJCmowD0ahBIAMjwhRTE/FFrKJ5q7XLJ4f4+2xubPHH1MTan69x5+y2a5RGMRmxuzFA+M99/yFtv3iR+8DlySJiUWSzmXL/xJocvfp4HhwuwU6yDD33DM1x5zxN8/rXr7N3bQTlNP3bUZ86ytnWFrWND7I44PA482N3j0uWGscoYq3CVxjpF14sMWCuNAA5hVV3+c9T7iCZi+K51mfaWGipHun6OX85ZG08hasiW4A/w8YiYLSRNSiK9NQXkzzniqjHabjCZPYYfHeCq6apO+6c98uof5c+FcaFzEgAjRXRK6CyST997og9EhRgF+o6cAzoLAyg7jYlgsgAOK5DFUsD6oWmE8BVX8CThQppwa60w8HIWD7AypBQJTxS5dAoonbAafNOTiqG/yxVWZZSGTKKJLcoKzT7KSPUEuODEl8UYg7bgi/HmyXuT96TV0CeoAjTIxUvl6xuUQ9JAQpIJFgz3uDalCZVXHij7Q+6GlJOKIW2mCAVKk27Fhy+DwWGyIQgtFq0MgyRl+GJtkUUP60spmbAnyv2ZB4hEPssq2rb0PEPdorLUrm5kCXj62DAym1y4vM5Hv/GjeGeIRvPG8phF6mhzD1lM4a3RcAqg0EUaYUrjnzJSO2stsjltVmfgkH441ItZIYxAg9TWwz05AA/qq10wThtoZk5ANBApUoyJWBjUShtJfTllqk8xGs1InPsKMBBIdmUe66qqSOp6dAJrLXVVk+qKylU4byWUQBUfN/0V0HQBdFfXqby+XoEeJYEo51UvoYosOCvKepLfqJP8bvGkFPmRj5Gjgzm8cZOX9D4719/k3t4eTezwipVh7yBjOw0q/rOA2q8JAOMEAxq6MkGhlZJYPFNVuFGFrRXJFWppdugSbRSdRk3GuLoW/we7lJm3cVR1DRh012EWS+qmWe2ZxWsXbQxbW1uMRjUaRd/19H2HygrjDFEHYueJTS9Z9RtrLJ1F1wcc7h+jsxYmRoCkxIipL9MBQeoEXc6oIQjkJL5KnXz6RBQNcC70N5WRqKYyTs+ixYuFiTC4ugtBwJQt6YSBAVJQaIrJtZWISavAx4zLEZsDNmt0jMSmpwlL8lKawRTEgBMlNz/O0edEtq6gc5CilwiprMhJYhJr5zDWElLCeU+7nshpgZBeRvgY6PqeHDOLtqGyhvMXLqB0TdsE7u3s8eBgr8RdyUMPnhqnCqvTC1wpVd6vNPwxBPoYSHXFyBqRAWlFbQxOgYol8SKDtmLeGmMsU3hhmmQvCLNSYvaanRXwJXiMs3Te4724JSvrULqij4njxrNo+3J4WFofwEecdYyquqSbyIoIMeKDREOGEOl9ovORruvpOo9pNU2zlM2NVMAkMS80VmyVtNJUtaXK5fsdkFtzMoGwSWGdbJQh9bJ5BvnMKSS0Fs8Ra00xQRMZj0+iTfQhiobVGpQzpF7YRyiFtkOE0jsRZjkgZenqQg1PKaFsOdByRBlwlSNm+X1N1+GaJdZZFm3HwgeatqXvw2qv0MYIWGIM1lhGoxHTyRjIdL6jD56swPSBeWqwy7S64QTIoMgcJOlAjJJEJ2gH4FELioxWJeO9PJQixEIzh5XUCA3WWCYHI7inaF3Ah4T//sDmC+tYMrNf0ez8zRbrFBtrM54+eJTrD/Y4eHqH879ykSvzpxhtjag/VPP88x9gPJnynd/z/ez5OXujh0TtsK7HeFXY3Jk3PnGE+psWUzmJDs3iCxBJNB8KHH5fS/V3KmI4MXIakHIAtVCMf9FS25rd//iYNMk4C7VVVFqMBE2SPSWgsUlKMJs8VkXGVc1sVDOqjPhWaDF5nI5qtBrjjKayDmJiVI+Zq4WsUWMkNSaXSUNWxCTQ4VA6Ka1xrkJXjpBNiSsuxq5ZgMa1maOuxiiTaLolmIwxlr71jKcGZa2YxJmM00a8WwCTJ1SsUZk1iC1GteXA1vS+waeeSKGe1wFjI87KnteFzOu37rK3aHHOsTi+xxm1IMyX6OWc0VZg9/gtfN8yriJrs5qjNnB49BBdTZhMRswmNU5r1qcTvvSFL+IqRzWaSCRyVXN4vATn0NOKjY0NUva8/R03ee5HHmdtUvFgb5+9eeTcr0ywf1yzOZuQug5TWW788A6Lq8JcGH+yZu2vTli0EWZw96d3UAou/OQWR//CEv9EZHZds/7fZOaLBVM7Jis4PNpn/VNjNv/JGm3bkUPmiR+bMnnWMVsbMT82InEKJf5MqnU2/lZNVlFMUX/Zoo8Vd3/igAs/uIXSmuo3LQc/dszGH13D3LTUn61EE26MSA21AKGDabXVpaCMHu87UjBMxpaqmqIjLBdLjo72qN0UZyf4kMimZt7ByMxol0c4AhcunId6xpVrj1BtHpCM4qBvUQcPcfUZAoaQPE0KVLMpa5Ula8VoOiHFyK1bt2i7RuIDSxqUNoa7O7uMbt7m8WvXuHbtGptbW3TLY37rxRe5ffee7J8pY10FnYDVzbJBjyvxoyoT0Lbr6Y9bmqZmMh7hKofThljWfTaG2WSD7fUt9u7dJ0ePrSsuntviQ8+8i2qsMZMRl888ytmzG4z8PucvbBGzRoeIaVsef/oprgJ2tsb5akrWNSBFuirnEQPIy9AgnWLGAoOATGo1Vg1ojIMEUkxax9MZjz32JNF4nLW0cUHTL1kbT1nbtBz3mZdffZnNtXtcOH+B2RNbrG0/SlSK3Z0H3NnZ48tv7zIPDRe2L7ITHW++9Qa7D+7LuRUiyScwmeQzIYcVFbsoPk8NPiSO3QyeRNlgtMVYUxryLJLHxYLl/IhL58+zubbO3dtvEkm42TrrW+fYe+MN7t/a496dczSLlvvNPXZ3dnnjzTeYh0SwhqPFMWe3N3Fjxzw1dCpSTddAL0guMz5/nvOPX+PSw5b9txd0KRKzQ9taGKSxhxzIWYxcjRmaVoNWFoUvddA/z0N9xf+e/pN8mZpEybOHHAlNg+8XJFpidqRYo5LUe9Ify8AxJcViqTg4ssw2H6eeboO2X/Vapx8r3/my16+o7VqhYj55AqXpLU2bWa1OjUnlvE7izWayxmaDKQb3MZ8MLRQy7MkRolKSYIZaDYNWtPWBto/4oOWUijS7nFVkIgKGX7lynvd/3QcZmTVuvnaHlz93neWRpx7XeJY0y5bxrCY7K9hRjCuPuKwHA36KXKYwcwtAMXw7A3NbgIuTeheKAWUavr0CwBRvB/HCkybYKI02fiXdlPpTfN8gFt+PtJqgDytMZjdDsyLy9bI0inRAABNdmL05ybVJq4Y+Q4rCOs3inTewiVjBJsNPPhnY6gFsVKAzbVgSUif3rxa54qXL5/n6j349DxdzlvfucPP4gNh2cm2TfL4sOtzSa538xBjLAFidRJkau2LIJyjs7/LfFPm/sKdPwK7hCae/m69a56cYNcN3LHKcVBgy5f4roOvgx5KHn4G5klkN1VHplIFsGbwZTclKl77TWJy1VK5CpUGaMQBVg7xueJWTflF8C+WNqQJ2DcDSKkWlGCUP98/Qv2uExRoLgKGMJubM/Kgh3N7hjW6X/Tff5v5hTxMTvQKfgvSQqzV3AmB8JSvlKx9fEwCGLGVNUmLIuWrucqD1irbPuE78MGKXydZQmwlOOZnUd4lRVIyDbEpdL3GjkLFeUiVSzBAT2YuxjXgYyIFtFNRKM3EWqy1dzpgQpLk1ml6J14C1DmPAjUfEkuSRyYQUyiQdkaWg6LMYFTktvgGCyxSdT6GBKQaqI5AjFqgpkgQNOelVGojQtzKDL1XSmqAtXkPX+ZObagDv1ICfUgCIjNIKqyRX2o4qof0XpsKoqqlUhuxZHB+XNI+CqWb5773vWHYtzjqqypUmWDLUQxaAJqHIRpDfrvfM244mQN9LlrxzclPNJmNiHmN1ohrVTCpHNZqyNtbM50seHkoEYzqlQ0Sd6NneuVkISmicxagR46oWFLbvqLRmWo9YH41Zn41Zn46prRQyzmqqSqYdKQaSD2IgqDW1dXRdJ1NBranrGuMcPniariOqTNt1tG0vaS450fmOtvM0y44+QsASO89x0+JDZGttHTPWGGvLoS1IeSyyEGPAZlXAjOIwbBXaSsxbSDJ5FsfiIHtVClgFYzMWj4iY6Pseg4YEkYxXih4lEaEJQBcKm8htQgigPaaCkLSYexYWQ8zS7IecitGprMUQw0oKhbYrZDjnor1U4gR+ujDIOTJoDVM5LGOM9KHHp4wZ5D4xk/HFuLY4Z6RC19MaZ0TmZLXkkVvrZBUU6iKDCZBKxbXbUKhPWGexzqKtIiJu5jlEchRKqM7gjBz6WgvlkiyxzYN5aiCLj8VQBJWIU4ywS1Ki6PYDG//KhN0vHK32uXgx4/sOoxWbGxvUdQ3AmZfGTC5M+Oinvpcz/SNced8WShsuX3uWj3/iE3xh67M0KKZawLTBht60it5HfCWFUdIiIbFva7Z+2LHz5+Y8/A+WogpyUpfaUCK8PFz8eAX7MK4dz/7ARb7wc7f5v/7Sdf74j3wQm4SvbHOAkET6U3S5NnnGCmoFlYZKK0wGnWRfE1lYAQ2tIQ/7iYbJqGY8cqS2YzKuqMdTMcLtBVhTKpe0kRFaQ+g7+qhIwUsRRJb9THmcPaKullLk65asHKgRWUUxVx6PZKrhPXQG37X0Rx5lA/O9Be1Rh3EGqxxeCXsnxI5MEKAvRVA9So/ouh42pig7QmvHSBu8P2a+c50z04aqP+SRNY1RDRdmu/RRsbbxCFuXzrGZDAsPuwdzvO/F70DBZDoVOVPKK3adzopKy/T4aHlE1oF2eQA58vz+Va5+8FFeeaPm3r3bdG3Hd/3Akzz6+BW+8OYNXvpj9/j2vW/m3Be2+eTur/LFP3uT6sAy/pmKcBhZ+8sTHvzUATef3OX5/+RJXv7PX6dyNfV4AigmkzWqukLrFr2r6PZ6prMNRpVi896Uz//QDu/+NVj/pTP4PgpoHAd6bsZMM3ZeCq9SLXXvFXPg7Z9cI3aRW3//Ibuf3hcD3s3M6E9W6ImkYSiVCLFD9UokmMoItRpJX1IpkLslqTXMJmNGM8Nus09ctoxcTdKZ5DyqNthqRBOOaQ7m3Lx1kzcevI5bzphubXH28nna+/f57Ks3mC8q2i6Roufa44/z7LPPUFlNNa5ol0u6tuXu/TukOmG9JuWSJJDlDHjl1evMj4744uc+x2xU0cyP+fIbN3HVSFgVJKaTKctFQ9/3NEvZ28eVIRsFKtJ3HcfHh1hj2NxYZ2NjnWo2QztLQpOy5sHBnJ2dA1KfsKbCK/iN3/gMd994i9gH1Lhinhomk4onzmyzublJcBUbrubZcxe4duEyL792g0Nl+Mbv/B4eufauUjSe6NLzO0weI8Uae/UMhaQroWzpYEr7sTqOe4iHGN1x8dJFMh2f/q1/zEG7w9mL6+zkTH/smT/wXHvsCZ5/77NsXdhAG097tMCMZ9x/uMvnX3qNz7/6FltnDU9ceYQ7r93h1S99iS4sMaouSQC6eHEU3TXmpCHOQ+E/mBJqyly+7PuFmYiwIGWSqPC+Z21tyvaZDZzVdLFntr3N9vlHaG7fpHI1G9M1aldz981bfPnGMbdv36K3PdXIsn3+HDbBwd4+t+4/4M79XUJKTKdTjnODGk1ZP3uWtbUNDu7vYHTP1uYVzm6fZ2RrCEtSCnjf0vULMl6m9xlI6sQX61S6wf+fx0mr8tUPhaKuJ1RKoYwjLpbs3b7H4d4+MfcCZEVbrrd4KcSSjhGCIqsJR+2Yi5tPYKpZwS5+hwmqGr46VUBMi1bSBySEbRkVZAqLQCPfoVIoPDlKs0TOKFOm0rnMeFKpRbUwc1EKnSVFQooSs/pvYWiWyrvNrJiseWjeVpP2LGa3KaIrzdPvfQ9/6Af+EFcvPsNLv/Uyn/y5X+Jzv36DBzv3OWo81lgqW9EZhasNNiFgbErS/Bu9AuZTlNqHLDV6VsW/bIAM1cmk3FjxCyGfsIuQOUrxeZBrZ5QML2NpRrXOGGLxcShmvDkCQaQ7Sq3YyKtpeIlKpbAkBqaMeFjIEwdmyzB8oPifKXI5synj1eKfU7z48oCNlDtzBVitsLZMJtD6BT61oGQ/6iPkILHr6+vrTKdTrK0kbt4WnxQFCpHWD026zqpIsvPqtU5jD8P1heLLWCJeYo6runJgQcvTpM7+6p5kAJlOfu9pT4yVt0oB7uKpJMbTjfvw51WaiSoj3FMAlqSB5BUjxBgZIkdrV557g//POwCBFIv32ODvdgJCCGgm729YEBmkzyySmOL6ccLiQ4u0KEmQgkKhrCIlxfyopb2zi24zy70jDlpFGzPB6NIT69XbGmJr/1ngBXyNABgwNNwU8OLkyEyUJscriBGvE1kbsoOsnTj75kT0HdG3KCN0mRQDPkSaJSsquA0BmzxEQYwppj4xeQ5279POR1TOEn2ga1uZIleWXGtykKierA1937PMkaZb0PsekxzJShoJ1qBcRdKWoEVCoLSYDw4L3yigbB6KVCK9pJG1WUCNIVJI/r94LkjhHomF0mSybIJBD4hlucEGZLsYK6uC3JETWqUBTaEPnsUyoRhJ01Y5WZQ2CGCjZRGmLIZB1oDkIlvceETuerrQQpYIq1CQy6qqsFVF1gblA33ToIqDb84Rqw2z6QhlaqAjpkjfLNBaJmuSIiEf/TTD4h2MxPzOv1NKDHG0c9gy9Y29hxCojJPDIQRS8PhyiHRE6lozndSy4kJE5YzRTswhxyNyTsKcGI+xzuJDoPMdgUxICbISynrILDrP4bKnOl6waAPzPtH6jIRZKJmi6CGeSTaMlNIKXR02VaUG7aVilUeeE5lIyrHoYCPNYokymRzGOBLZiK7PdxltM9mU9IucaaNi3iSWyyVGVRLTGzw5BFLo8fRCY46Rvoe2Sxg3YjSZ4EY1ylqRKHS9eGL4Top4NRiL6jJNSOTSfKWQCQpC5YnWFLYR5JwkQrHoAPu+F6+B8RRXVTjnSKpESllFXQlTIqkeo7VoS53FlAmV0VBVjpTiqgLRxmCdI9PiQ48LVkCfLOagACf6wnIgIwyWVfSqFlZAVOLFolZmSooUIY0z/lKEm8jnjZE8hbiVyK8m/FOe5d+KXHh+DWJkbODWpxv29/e4e/sO9WRE23UAWOOxVmPDBnt39pl8RMy8duct7/vAh9na2Obmu3Ywb9TUykrzSOabv/8SnWnprYVKprXOOezYMXoTnviOdaYPR6xrzfRdPV/+kZ6v/9lH2M1LuQb7ouk3ZOyh7Bn9TKYlOmd0AgLl2hZ5TQiYlMldT1CK6CTSzGmD0waLQiWJBtOuElhTZciBlANK2+Inkqi0YlI7uj5gtPi8ZDJV5ZjUtdC72xafNCl6NDKVtxhSyBIj2rWSaqEoXjQSTef7ltqN0FoRSgGTQkSlSOiOuP32lzG6ZzwdoaxIFZXWNE0vBsltFCA8GhSO6XSDyfomytbErAgp08c56+PMxU2FalrQkeP+iKvbFjc5w/1mnc5aVJ/Y2NhAuzHGjZiMxyyODrm7aGT67jvWdSXrretIoSOljmbeMqoTF7bXuV3v8E0feR8XJxfZObzNwYFma7zGJbOOCpHaWjb8hJduv4R72xIPOy7+jQ1Ga45pXdP1AT8XJtNTf/Uqj918jCv/zkU+8wd+nZ3dI/qQcFZAgPBkZv7xjtff/4A38y6L9zSrQZmdOMb1iBSaIuUBlROj1w1v/PIe1/7wWcxwH41krzMZVKuLXh0ufOMW3Qc8e//9nAc/8ZDDGw66RF6H6T+wXPmvptR9xbSalOIwQmFukQLt4UNMmFK9MOPFH7vLh771HDppnFK8/hdv0W8HXK7YfmXGmb8Gry9v89r/mPjWT1wjH7VMNnuefPwJ1s89QtvOyNpxizdZHva8efMmKQW6Zkn0PbHv6UY9X/zx13n+D16TArGq8amnf6Rj7zd3ON7fZ3GwT/QdvlmysTaj77xEPivNyNXCAMoZ0ASfWIalsPsqRwiBvov0BKxrcXXNdDrDuErAIFuzv3/Ew6M52tZ0IdLnzP7OLi/9ky9QGUVHJo0VmchGEq15mFi2bcW3ve8DfPxj38wnf/FT2HOXeO6D38SVq09Jh5MhhQwul7q4NEoqkBGm4jAlPJmTplK/yJ8rC9BCfgBqh9Tcxs+Pyb7liStP8Btf3GexHzh3ZoOt7RG7X34ZBdy+c5vJxjZudEy9fo0+Wrou0fWOTM3XvfAEf/SP/Gu88ptvMN+5we7eXczsHHd3jlFKE8p0UhmDtnY17VTKrya58lnk/IUAw1Qzie9RXVVCbtcQg6dtGpplIzHMoxGbZ7aZra+xsbbGeFozGY158/XXefU3PsfDHQVZYaoxZy+e4f0vvMDdG7dJTpGDI3SRftngTMJh6bvIctmiVWA2Kftt09A3HYNXnTR9EVNMVYfIwnSq2T6JZ/xqgOB3ol2fQFXvfMioS/Y5ZRQ5afrFnNs3H3Lv7gE+RJI2UquW6XNUwghWCFMvJM3+ccJPZ2Jsvprg/vaP4e908ULQWhK1UjDEAmRE5chWZLgp9KvRv3iAKcDI1Dl70eInpLRWGmUMKYsvFlljSVRK4UuTnUrzPVyzoQnNWT5PHqbZZR2hlKwTBaqyVGPF1vlNzj1yjtFoygc+9jEuXnyCT537x/z8z/89+odzrFZ0uZM9YzSiRtO3S5qmXXkYyLknkgJdjPGttaQgzMcVKwMQVooYHudhbSBSHtCoJEAEIP4uyZwA/llGjFJaS5OQkzwPXXz0Vq2+gEOyXZValIIj6fL7NERdatOYiwzCriTyqgAq4rFRWOAaokoYpcnRC0tZGVShdYgQvqz3UpsBGJvp+jldmDMzYsy9WBzx8OEeBwcHq9hRow0SvRnLkEPALz0wDQZTykFS43u5VQAAIABJREFUHdOqDs0pE8t1jln8MSQ1JGGjAxzp1N0zvLvfTm53OjJVepcTZgmU2nNgfpS/W4ERp+7fDKeMLAs4VIBBVXySjLUyXI2lb3OOylWEElku0bkn95jIohMoOxzpg8XFyXtTSgatWtjVZPkMpnyWYfcRYEYX42Dxd8lKYbIubCYIGdp5QPkjxtFhOk0TwecoPWJSq0H16ev2u/H5+ZoBMDKSbCGGS/KBXO2YTiZMx5aNtRHKwDJ2JDKbo5o1Z7HaEXJB0RFt2mRSUdUTYsoslku894AwDZytC30ISWHQEtvTtC1Hhwsqa4XmrzMheDGIm6zL860moDhczDnoO7quPzlcUsJa+V05Rkw1JpkxQUtEpwYs0mxJ6o1BI42DLgiZ1poqhRVtZ+UJoiBkSdZIxhCKSZ4HWZyjkaSm9D1eSxxl9JGoBNSwShMHGZySZsTHKB4h2uJRtCGR6bFIPKVNWcAOZANXWow6AwmdAyoEiaGqKmISdkeICYxFVwZdGzGBsgWVU8i1aTuoLJWdMhpbYhhzcHzI4vgQYxyVG+HscJOrFToZY1yhdEIVPUVn0mUjUhFXCevFKrmxUxIAorYl+cRZRk4Te2ncSBHft4xGtaD1vRgmdililCbGRK8amnbJYO6kjcHnREhJjAqVSHKakPBdIvQd3idG1RhPWplm6mJ0qZSWZrqwhIwuSHpmBXJpI9HCfdAyBS43eBa7d6bTCdPpiLoWbeLmxjpTa5lUFdn3xNQTiGAtTYwc7h2yXHpC72WqlyLkxPraFKM2iGGJdYpl07BYLFguAxcf2eTxx6+xtrWOqqCPPeQk+dXqxFVZa9k0c4zM53Mc4DRM6xqNoWsVhoR1mpQiTRuIuScgUVUxBFCWyWQi2mRr0QZQhraASlYXXbqFyhkxncoRpyHHjhz0KpY4J3H798XjQ0GJLhMAoutlmhQRGUsuIJG1GlVinKvaifM8gjALSyavCpnW97Tv7rn3R/a49J9t0HU9KXma5wMPP75k8icczU9HsihbsNYSU0/OInFYLpe42p06NTw5ByZujXbp+eznX8d/IPDqjS9TP3uVZ/SH+NJ/8T9z+f99N3l3SfvcgvotQzxI+A3JWN+9umCx4xnvjhk9OeHVn7/DhR/XrP+VKSEF3vx9RyjGEDO5D6Ay/ScU658coVOmbxqImUf+7yk5gnEVSStUNlht6H2AJIyz2lYrRVPyga5pSUbuF3GLF2q2rawwDpwt4IqlD2KKa60Rt/+c8cHLQamKkSCl2inrVJWUlbbzGKMYVyPa2FNVGywWC+rRSI53ZeSedwpbZTJL8SMxPWY0gb4l24VMxiY9bTggd2NMtGRlaLvAfN4wP27xITOZrlNrS/CWNmSOli12NmG+aMHk1RozGS6du0DXHeH6Dh8a2sM9grpEcrCz+5BkF7RBsbG1jQKm0xnb22epXM1icYz3Ae8jfQxoIpVKNL5jUimefuoxXp3e4dn3XGOaJmyujXj8sUcwIZOWkRgDF86cw79Ss/geza7fZz5vObrc4H7WEluF0w5X0iOccRweHBP2O7b+xJTOic6594n59y147U/d5fxf3+DKj16k6muu/9hb7H3vIY8fnuPR9jzBVszTEpUzlZXm4qkfXOfOf9kw/4GOlFuh5s8Sa39jRN909M949JFM3lTMjP6RY+OnJuz/yTlX/81z2Dc9/e9P3PjvHnLlMzM2PjPhfS98mNFoxL07b/Pl115hbW2MM4qmXXD45BEv/qmbdBuB7ZnBVZF71xb0Z3su/O1NtvI27ft7Xv+ROyzPZ5780lne89RT9Mngqhqjaq5efpQQN1n6wK/9nl9F/Qz4m4Hm+IjQNfi+RaVEV7WFDSaFesqJ3U884JV/+VVmP7FJrpekG2fJ9yQquJkvySly/uw2k+mUvYcP2b13j/mHezZ310nLxO77Dlj/tTF1iaBuvWc8GrF8KnDwdQ+YvLzOKCFyzGwIyhGUw+iI1g50QmlHVVXoDLbEzCstUzsNqJjofcvOnTusj8Zce+QKt5Y9Tg2NfeFVWEXWWdgeiUKhFwN0GUvI/DSXKRtDvF2KKCUMPtjjcPdF/PI62T/k6LBhuaxY7ificcXtB4dw2fKua9tsb2xy48YN1g63UdM1nptdw7pIyjWVnmL1GtaOsLphYz1x8comtUq8/9nnefJ9H+EXfvkfcvfuPfqlxHCHIDWW1rowFDPOVdIQxFAmiQAak07F9FGaF42w+YyjXTYsqgVt3xNzkkSZo7eoUubq1au4yvHZ3/os3d4hbTsjxszh0YK17RlPP/MM3/XN38Hbt++y2yw43pvTzo+gyFhu3nib82tnePv6y1i7xPcNOXTEPmCHoVNO9L5BqUwKffEzUqSYsc6hjcYHAb6HmkFRmAhK6jTz2xb/Zeo8dGArI4bhXwysGodK4KYXiP4GzRJiMmUymsXoUyUylpQ1OUZsJQOmLjmOuyzqkd+h/1hhBxlUVqc8qbQwD6oRbhpY15rN82cxGFIX0DHjsjQuses4OjxgMT+E1Et9ljIkha0c1mqSC0yqsYARfWRUDLmHhBOj7TtSHgaDRFUm0EmpMnkukZggZtlakazGjA1uXJGNw2TLlauP8sGv1/z6Zz/HQXuXedcwm65j1yZUtUWHRPJd8WGwUvv4HmUnpUexjCYTWmvxQa3MHo0xGOQ6VUauORTvDwXaGoTRmnC2eGikRFZBhnJGfMViL+CGUQqy+C/UVYXGY0XPVgBAhVFOmtVEAYOK6MMYtNVgJekPtAx4Ss3tqgqN1Nq1c8Xk1FA5V2QajgpY7j5g560vM9+7L7gUipw7UFJjD4tEWVAEcmzFW4RI9EuOj/Zp2wVkDzkA0jM2OZDJxBiwKhdJjQxMpGCV6yTyJ1Y1bMwIA9vI9z58VjLC2jXS+BtbIsS7iFFFlqvUCggZHu9gUfDOhjylJD2LFa9GjcKYtGK9SMKgLcPOVADYgXE09BRlnRbQwgSxHsjlXgq9J3R9Ye+c/KRiZGwG09KcBIQo18g4I8zrAneasiastQwxvAbZj1LZQ2UYW5JwivwrIKAnzuCXGdcFMCOinuJzRwge46Qv1OU+/ErmyW9nbnr68TUBYORC2UpFVKVKUy90sIRR0mijwaQoU3xrMU7o4yoZMEZQKq1xboQ2khWtjUZnQSFtpixo+eJdVWEqob9bZ+m6Fq00k8mYqqpIIdAGmR5PRxPGw+SjWTI2MCYT+oT2w5fPCTXICgMhKTG5yaaSm6osRqNl0piI5BQgRpzS1ANd8JT2NGdxZB4QxKyS0PO1ZF+nlKS0KJMTnQtaWszBBvoSBShBZYll1ZqApk+gfCJmhdMJsi6SD81oNAJj6Hxf4h9Bm0x3dFyABXlNYy0xRRKKpu9QVgsDpot0fSAFcLZQmdA4o9AqE/qO+fEh82VDVgbrRgVlBlZUJkXORddWACNVNoQB3BjkClYpnDXU1pGUZC8PEY2Vc9S1wxlQGCoqnBVjm3Fdo0eKHKJsLEHM1UZ1hbbiwNx7jzGaejwiNUtcXeF9oA8BZx196Ii+QygXhVmRMjFmfBC5TUoZO5hE5UTMYoYptKzCqokwsAJSkkg4M/halM83GY1YWx8zqisykbVxjSNTlTWnegGAos44DGuTCTF5lssgHhlls3LaMBuP5CA3UsTFoDEmMJ3NGM9mzNbW6GIn2ew5krJaZZkPRj/ybRUWVc4QM5UxbEynrK/PqJwhJU8IQmestCVmze7xktAHzl68wLlz58Snocg2VKFS1s4xHlWgA5WBFFpC32FyYqTGqKAJXcJVFZWhTDOTgHjek3wQ3VXOktpREoe00WWCcaJNrOqquEcLa1JWYl79MybQKaEa2P6f1pl/bMmdP7NffkeCJdR/V5GKl0qeZg7/QofRiM/Kpcz1/+iAxa7i0j3Fg6fES+PGv3WPS//He7l2+SKzR69w/a234AOZPvRcv7XDR+y384uP/h3u/of3Scue5oWGx/6HNaqjGnvOsXNlyd/7N77Ee3/mMmvXR1TF7+L4WzrePruHVZn97+r4jv/6EcEEIrznr13g83/hDuH3dOQoOdxpknnuvz2Lf0TRZ41xE0HqtYHc084XLPqGbC0RTdsHsuqZNp6qcnQ+0cWMz9B7j/OJPkPOijZGPJqgxE8jKUufenLnCVkRtRF/HS1Z8x6ZwiQjMdLChNG40Zi1tRnO1fTJcdQEZmaKMoPsKvP/Mffe8ZZmZZ3vd4U37b1PrHAqV3UOhCYKNiDBAEoriICgKDjojIoZBa8BA+OM4cLoOOg14DiOV1RGEIQrM1wBhUag6UBD03SsHE8+Z4c3rHD/eNY+Va1+9Dp/sftTn6quc2qfd++93rWe5/f8QmiHEo2qHB5oo0MFwzh6GhRGZ4zawNb5i/QHA+YXdyFHtsYrjS0KTCbrum0blIGJ6xi3NXZ7i5XVDeYXF8lVRVPnDIeKlbbDdRVDZ5lMOibOMxoEVBHJix7O5ETfMRxPxOMmL6jrGlDkeS6pR0qTq4yt9SGGyOJgQEbAaAE7f+PYn/Hmh76dflmwiaKua+573Tqv/8Jt3LXrUe58yX38xF3fxfaHVnnggYe469kP430g15asLPGl7Kz1ZMK5s2Pa4KjygTQuCEh1/N9eZP+fDNh4+oTJ42vsHTmHfvkAay/b5Clnj3Lwwhz3diucfvM6ng6lYN97e6x+VU2xnnHN3+7jgdsuSKJRhJhFVn5xm/oWh1oDvxjITIYKmrHu5N7yHf2yYP9Kn+GnWxbm+1x71VH2Lx3gCU94IhfOnaQebeLCmLt/6CI+epYfN2H7GofuFLsWKk4dXKX9Gks1yNl7ZIZQOr74dSfYfW8hsX9ecc8bL7Cxuc3c/+zhHs2YdAWjySbbzYTNW7ZZMAtEFFXVY+Xx2zzw1EfJs4xgQpItGOqm5exrjnPqey+QLWfML/VZe9EqX9q4H72ihJqLnMtne8s844+eQHQBHRWbrxpRz3oYR9a/csjch6s0sIk435FnDc3jHNtPmnDwDQcpQsfdr/gcXlnGtWO0tka2CVe98xDgpHuxGa4L4s8UJSWpi3rHdM8qRWULrnv6M5gbzPGJLz5AlmuUiZfHiGmDE7NAK5JbZUFHnJcCN9MVRIMiGYMHJ1Pb2NBNVrhw/nOsnLuDfrbGoIpUpmT3/iMorfjQo/dQO0833KbdOsnJhx5EZ4arZudAawItIfkQhVaapyLPaUfrGCbQbGCUZ2NlBa0Chw4u0bY1TXeRzkNTt+CCGMAmuW8ILgExViTDBFS8rPNPBdvOay/Lkn6/T4ywsbHJZFxDVJw/c4bxuKXcXMeWlsV2iaWBYWX5EqNJJ/KvrubSxUvc8dm7uPmbr+a6q65h8sDDrJy5yGhjnaqfE2NGvbbN6tmLTEbblH3N7OwMC7Oz9PIeBkW9vsXa8vIO28BoRYd0qUEhBtTRTcPj/9UPgS89UxnI9LVPvU2unC975xmOPG2rCDEDNDoE+flKEtRwBqsihA7nJ0y6VuLT9TSq85++SvWYP6vHNC4ueKJVVP0+2dw8R6+7hpmZWSyGSucsDmYotOHcqVPc+7l7GJ9uRF6YZxibQdSEqDBlzkxp2TO3QGxqts5vQjMmL+bIVWpYr5h6X9knTSfkUxNMYR5otI6iflBSn7vY4MWGUN69HOYXF9m99wCnLvYYeU1W5szOzqJUxNeNDNfSACj4gPYBlCczBb2ydzm5ArUDpEwjXacMKdIgTSnxKwsBfBAqtwvCJvVRQTQExJsmL/pElROiF0DEGrIsoywsWnnyIiPPS7S26UeIQe5oPLnsF2gtNs8wWUnI+6hyhrwoMTbDmJyirCjLipn+LGVR0u+V9MoyJdFloCWMgK5j9fQJwnCT0fryDgM5xigDB2CaPth1LblvIbQQG4RDoxkNN9lYW2M03qJzjZz3wYkHR/QS2xuT78mUXZO8lbRJiZCCTqV7Q6FUSDXsdGO8zIrWJkUIxxSrmhr7qRGr1hK7fiWrZ7qWZKH/A1aButzDTIGPKSNjh6l9xfrc8dLYWaRpfVj5LPM8JRs6x2QywU1qYZUriMGL5DzqnX4ocpnVhVFYJZYIcWpQmhUom5EXOUVWEqL45RVlLjIRY4Xtm0nPKuEAgI+oKPt5pxXBRFQ0mLZEjQJNp9FZRuan77vbuaadJKB4uSb/5x5fJgCGIGI+SlpA9EI/9t7h2o7gRA4QlGjvnYpMWqEwWi+omvNiFkJQ6GBQXcS5SBuMbPUKgQuUkwWghE1golChGqNojIIQMdFLPWcNnkDrWnqqQicdt6CneidmRpB8eUwbzTzL8EoQK5UMB2MIovUGXJi6vJopzwrwCXxINMhpU8RlBSqkw1drMqvx0dH6IE1VFJ+QmOhQU2RxJ3J0ukkQ8SS6fFFiMoO2KiGmoIPHdS3WaPr9PlmW0TQtbejIcnGI79oWhZJNSUUmk4lIeWJImb6RoshRRjMab8v1TKllMWCUTNLzXFPkluE4UNcjxpMhzrdMTVzlZjYpjvEySj7NT54udGOMaO3CFOhJtVnSizZ1R5Mp6hqCVcTQorUjOoPxUuntmAl2HV3bJnPMjJxS4KQkA1FKY/MibVgRk3LG08xqp1lW8bJb+PTc2fkU4+WDWyd/hhAD2usdMEYQVvmcTBAgTOIpBcDqVRVVleF9izWK6LvEAGqF3ZMOvGA1szN9Ah2bm2OIwr7UQXTlWW7JrERmhRDp9yIhOqxJCRJKDlGrMogKYyLWGqzROxsw6TC0vT6VMeQqkitFaS1lZskyyRP3RuO8gDY6Kxg3kTKrmen1KYsC104NdMXUFGOxSpEn1L8wyQvHBEqtmaly5voFZVlS9fq0PrA5GrE9aWDcoGMQb5N0T4SUsT5FeKebeFSSDW6MRUeZ+gtfUAA/QZrTe0SERrH0m3PMfiiXwyExU7pVh7/L0cbIzPeWhL5oEDMtKuzFD5TM9EsWyz6Vy7npPxxk1DpUY7EGrtq/i6u/4on83T2Osix51rOfwcPn1rj22ut59d++njvv+CyXzp2n+uA65UlDGyTGdnF7lhf/6U3wQGS9HaEvRq5+ufhoZCajAK5/X58DawPiwBCC4tAHZnFf8EwmHSiDiXDgg9BhqJWlzEqizgnRgLGgK9qxYxQ8lowGDQkMmURNCIqxg1EbabwiqIyQV/isJChNozN8VuLoqDGif8wC5BVlXjDe3MabgpAJY8dbRRs7vNVkeUlfWVReMljcw8KuRVznGI49F0eONq9Y+epLzIcB+z+/i/F6jclzog5kRYk3gVaVTNQEn/fRZY9aGbZG6wxdi89aQpqEr62t4VtHv99nbmYOnQXyyhB0SHHdHdsba/QHswzKHhujjIebGtNOcF2HN5p2LPrrdrGmyidEMpTKsVlGWVYUeU6hFC5rsVZLWtK0AA+OoDUWC9HTzwoOHT5IUZb89d47eOND30ZRVBiVUddDPv+cc2TH57nmm5/A6v4PsO/8Qb7p22/jU5/6NA/Fd7K6uo5SkV2LC/T3Be7nJMPRiDkzS1n0GFQDtHNos0FRVugW9v92xiSOaY+1qM9KQsiTu+v4weZb+PP4N9z/8yeZ/Zt5zr72HL17cx5+2wbNfk8xsjz5gxVZYTjx0lUIMPOZkjPvWAdg96/O0d04pOscsZXEpsVf6mMuKQYzPZaG85y9f5V7v+8ST/71m3jO85/P1ddcx6MPz7C8eobfetn7+KXiB/j7ufs47s/wwOpZHpo7xy0veyrvfuG7+fbNF3DL720zODtPv9cn1C13vuoMz/2Dq+FTNefnH+WBX93m8Q9fy9YpT3t2gzZkBCOJOEWWM7s0y/v/3XuZzE7YXhru1ClmrDnz2mWW3rnIytesE7NItpZx6L37aG+qOX/becxIc8tP3Ey/rHjwVY/y0NNPcu07DlKPJiLFRLH8dRs7z7n6msvPL49m50+juuOv3/xxYqZ56v/9NC4sr3H2p07iFjq2nyWMEOcdoQ3MfEMP32liNIx/vmb0lVK4BiB/V0bzkZbm/EUGRcHeXfNkNhWK09Jj5zeRAopXgIzRCy26dU3O9EmD8yhalG4gbrO5+ij33vUx5qohh69aoBlvsrqyxR0nP8WZS4aViy227LMeI7lt2L3nIEevPcieowc5eOAgeVagkLOh3R5TD7dQsSV2LSE6lpfPEQhURc7RI/tZHW5x/sIZMefNFH4kjDKdWYzWBK2JkoeITgkQMgkVs8LUlkDyMqv6PQ4ePszi3Jy45m+NaJoO3wXWzp9nPOlY1IqmdezZtcjNx/Zy56V1Lqy1ZHlBFS2T7TGf/vQdVJ3jq259PjdddTWvfMlLGU9WUAaGrSbr7eXgof0048eRxw0ypah6e5k/eICN1TEnP3MnD33pAXzbEmObYm2nbZT818WWTmCN/43HldKTywxfIEkGRI+uEjN51LR0UaNUIf5QCjQepT3B5KA0Jo4hTGjcNsNmyLiriMw8FqX45x5XfF+MQaj/RiSJRb/H4p5Fdu3ay6AakEWFamXY15udJe/30IVItmOWPOOQz9TklqyK7N47y9E9u2Gz4/TxNU5teuhadFYIg+TKhjPVk1OmpVLpXVLsmH3HxKCO0dG0Y7x3O/5YKt03SllppkMnzG+tcG1HV9e4piV6T1CBkAZmWge0FUlATEwPn4xJQaj8JjWWSpGm/T7JMTVpXoLNBCwwxpBFhbWFsBONIY8wE8VXzVqbYu+VGLjHFq2VnD/TibspsUXOnrwgL3KqqqIa9Oj1K/KyB+UAXfTJ8xJlMjKbk+cV1uYYJdesAXySDDuPCyLr0J2nGcwyM5ilLHtMfE1mMmKCSqaSlaijpKM1E2JXo0ILODJjaesRmxsrbG+t0TZjYnQSsa3kXimMlaFuCMI4Jkkn0qJL3dsO4CCy7RTvOu3DZBKc1kNiPCBMam0sMeqdhMSIT4DpZfBi+rwxFf1XNuRTWdAUvNiRbqTh09QTY+c5pgPqaSpIet7pnawTq0d6PmkrrTYYJI0nOZuCkn0x4DFWAN9IMuiXV01e9Rgs7mVp/yFmZgfM9AaAkAkGVY9ev09VFPSqHlXVk14gRJyX16ldSxedDIxCRLea+kLDw194hFPnLmJ9i1EO8OQ6J+jLPfS/JiL6ywLA2EGcgiDiOwsgpEl252hGY6F9K4jWsjms2TYaaztUynQOKEHMNy/ugOuSpy2fptFemA8xcRuM2snm3THAjBHtGvLxEKuFql4Yoe3UaoRH0URoU6PlfYfyMq6d6oMk8EDMZnRiYEwTDZSSqJ4QPD45TeukY4rB04WpVgu08lNOIaFrp+07Ucfkd5Eio5yYAk7d241Gfh4y2VFpkh9JWiel8FFMilwItEEkcN5EnDeiX0/FT901YtSkFbkpMFoSSjKVUxYFVVVJQ9hJSJLzHY3rIIq3h9USq+l1SIhjikfV0O+XLJndVP2S3kyfSYs0i0laMT3Z/iEId5lNcvkLKr02RYAg9LHgHTF4IpnQ15ToDMk0NjeE6ESOA7SJKmyURVx5YDIZoUZQlj2yzGIzAWv8pCEomNQj8ZGIkUnTUrcOgiI6J54pJojBYxTyrZlSQYNIFwIRJWOKhNymQ9KkOMouOQdri06glncBbzwxeGGbGJU8TgS4yUyAzKQJm8YrQ6c11ivaTlHmlhg0ZW7JjRZjPB/AOwFpQiC3GWUhAEUS86CStGu6MeYpunSKLiuEaqa0yA0sAauAEOmaFkJ6TVoTvMfYnDzvMT9r2Ry5pF2NafMNKLywTbQm05pcAzrQKwxVXlGZAbNVxfxMn8woxqMRNjpc9KjQEV1DUw+JvhNDPi3XWxYFZVFQFDnb46HsPVZDtGht5IWERDmcmjUl6Cwkat/Kn2+yfM3GP1mfXYmUX7FidwA1KYRqjttttJaC3afP/hF7nr+qPkRe9XAv8Kzbi3zbdV9Jd5XHWk23u6F7tsjhvO9Ydh0qRu6yyzvGRyHIJNZ5L+bhSu0AaFrBnWZ9pzgV47CkId9h0cDDZh1rHrmC0jdFA8XvJITkpD09EGHngL8yOYgoAJxOsoWpxtMV3c5NLQkWiqzN5Xm5/D5dLqynB7h8/5363p3njEhzrZXCVR06arIuk6/oSGOaK55IUzih6uqdny8+QtPXP1FjMexK+4xSCttYNFLUxywQrEyGlBaTNdVEcm92Dt6pYa0CAqdR9naiiTz7E7fypE88habxWBOTkXJyiFdiSoiCiQeVl2QOFA31qObRk6f40Q+/ip99xe/xLc/7WfxzpuZekV/84JtYOHwVq/oMgzjgJ5/0NjIs7qmOSagJIbD9Exv83Bd+idc95QcZxD6jn2l41XW30T+zi9hGchTvOfAeDh7Zw/HsOLdcey2ZucTdP36GMz+4SlSRZ40fx+FuN9FYhkdrVt+yRXF/xu7fnOXc/jXa/YGuDHz4d++nq5LXxiv2Un6hIP+Rkq2barprOtxez/k71iFCmI0s/eg8Ohiq2R6DuT5ZYdk4XHP902/k5qc/GWMKFtr9vP9HP8/KUsu13dN47/BTvP30m3nd0lt5xFzkaV/3XL760EV+2ryBdzZ/wgNb5+hfHfncS87xxD88wNG/3E/0MDNf8wB38sBrT/LQa07zhv/+f5A3A7SN3LdwJ3/34x/lM03BbR/4ev70Ne9+zL3te4GT//YiZ75jGddPXlUh0NZjnvC7NzB53JjhrjF7H97NnsVdXNhc4WJcZVyLv8HWd7ZsfdOEY6/ey8n/ukwsZb3s+al5Nv7NkENv3Mfx953Z+Xmf+ZXP0e7qUEFx/IbjLP6vRQ68fC/n/+wCj/uRQ6gQ2WhHPPynF6hviIz/aiiA4mIEA4tPX8A903HybducffOEp33FGwjzkswQqt/i9/Xvc5t6ieztUyQjxkQzA2ILdImCrfGxw6hM7ibjwEyIbBD9Msascd21++iZjno0Yvlcy/ETKyzxVSiEAAAgAElEQVSvB+794kUmraXIFPX2hJk5wwtf9FX0ZzTkhr7NMDEDpfBNx/Lp01w6f5zxeAXX9WgmgUtrWzQxMlsVnDj9KCdPPcTGxiW8q2lbj3MNRTWDtclnCjnrY4wYbcCKRBkVUFqMPFUUjbYPgV179nD11dfgmpbt7RGbq+t4F9FB45shqguowSK7lw5w663P5Lp9M5x9+BQPnl1HAXl0NCGyvLLB3/397SzOzHLbbUf4imd9JdCJ2W3MiRQUvYLAVWhVQ+hQFDhdcfz+4zz4xYfZWFnDKEXoHCYXK9WYijePp/MtLnT/WwyMy4/LDcOUZagUaXIdQRmiiQTToWwkRi0sptihTEewChMkPl6FEZiOultja7LKpBsQEAbj/18QY0fzHgIqOrQSuWGWK8pCkxeGSMfa5jbDlXV807Jy8SKrG2t0Qa5H/LggT1HM0YCnxebw+Juv45ajN/Kle07xlx+9k0vLGymQ9l94j6bneTJqlJo7sVUCTIbbdE0tce0AHppJpK2F9Wm1QhPoJjX1eEK9PaSbNNB6QnR0dYOpwg4LfTweE0Zj8bxTJPbEFW+iUC1E8hAkPc5aOZ8ybcnygl6vwmYFxubplyVMPTbS4FNPB7ARYmzJkxJCG4Okc2iq3iwLCwvs2rObwcwMZZVjrCbPM4peRQsEK8ycGDXa5Cid70z6VUDkBEEYz0qBtZrMFljrGRclg8EMs7OzNJMtum6Ew0m5YRVJVyKS4GZCNxnhuwlUjth52smQejwiBkeeG6rS0styrI0EFSmiRjmPc8L8nTK4p1GlU18Zl6TCSsM02vVy1ZdYAVoRVGKhpPRHYzQxpHM/XGZh/COmBUm6D4+pEeTjvAxQ/EO5xD9MWRR5nOZKhvpOsaTA5Ja+NQxmZplRPZpqWwAxFyUCfFrP6WlVKz2CLXJsZpmdnUVrzaSu6c/O89wXfj1f+aznMjc7I7YKSpFnudzXQczuM2PITY4iSrueBuwmerwONCbivCVrczYfWuNj/nbGzefZ2LiIHo4gaowKBKbWCTzm/fmXHl8WAAZKqDM65e9OnXCNkfSHIs/Jk1tpkefoMidoT9RJO6MsSluiiKXQY/mAbW7J8gxUwAeH1gprM1kIClwMtK7DeXFSn3oR+M7hAwlR1OQmEHxk0tagLboosEWOqRtByVwkGJ9qZoWOEV+PCYn+hclEBjKloymFVxEXoph8QdLji84tWQyREudRhJ3sZmKiDqrpRtOlRaRoEi1qR24Q0waCoOuoKNeAIstIjYyj6wTAUFHhO/kZeSY0smY4gRjJbI7CEnwQOqxWNHnBJBsBEedbfAhymESZSLcEatdQty1dF1CZyEayoNBG0e/36M0UzO9aoD83x9rmkHET0VuTdM2X/UX+oX5MXHcvL3TvPVmKUFRK7cTR7lCRjNy4QQWhiFsNQSfEX6LxfPpZQr6xEA0+eLpOEg0Km2My8VwxmUE19Q7i6UPAmIwmKNaHNUSPD47opwaRlx87VLnp5CsBO1cyTKYmniCRqYS4Y+QjJI8p7grTnG2lA8ZY0eV1tXiQ6Ih3kdG4YXuzoZmMyWwlqHTsxDvCtYRQUztH3Xk6Z/EddF1H1zoxs9VCMffBCYih9Y6MZPoeT82ujBaqaa8s6Pd6lKXIArTRIiNRijIriCiZ9gTo2pYYIc8yjAKVzGaNzUEbelVJYEKRafqlZabMWZjp08syguvYtTBDlpeMmhbnHZ3raMqCKpe4TxVBBUlAkY08vfdaYcxU+pLe2yhAjhh+ThlFSQkeFXEmcvRF++g1lkwLu8JaS1O3jCY1W8MJTSuu1RgLSlNklkEvpyhgadccT3zc9Rw8eIC777+P+x58FFsXLOzazzVPfgovef33sHjkCC9deDx/uXY3Jy9dYn5ukW5jRHN6jRuvP8Ttd/2/vO9df4hbPs8zb7yWvpKCcXVzi/tPnOKLJ87SRk05mCHPCzIdWeznHDywF1uWbGxvs7q5zamzl2hbyAvxH8lzy57dsxw+tJfduxaYn9uL1j2CUrgY2RqPmLQtGC3eQ13LZDImSzRbQsTmFVEX4pmR7lMpkDVru1b55Ov+ni6TArzeNaKdqXnJm76XuGlwXY2Jjn6VUZUWtKbzEWULAgbXOfIUhWwyQ5s8Xvp5yRee+ffsj7t51qlb2XNgjjtv+hR/cPi/sdstgTKs2Ev80oMf4UZ9DaWuIbZoK0Cx1p4z5mF+89h/ZMWs4jvHsrnISnaJ1/zat7GwOYfdq/nssz7Nwzc9QufEjBRleNJHrue59zyVuvbkgwGD2T7Di48wyBwnLqyzdNWNHH/WMqcHK/R6swnIUcnLSMBaldzgvY8omxGzgm4yocpyLroVLnV3Mz93iP/w0BuZ7c1wYO8hinxA9JrmG+W5njN7Ax+LLwAN7faQfKZH7Dpc16IzjXqa4UPqvcRWJDXjl3Q4lUEHPZtxe3U7CxdmsJXlqpdfS7Y2wP68YfdDBymY4UVf/yTisyFazcFfuJazP3eSOOc58c5VukMdz//hJ3BofTcHDx3kU19zPx/5hs+ihxqMYdcnFuh/1LO2tsHwSROWvuYANmg2f2gDW2QEFdmutxm7AqziSLOXF3/Diylm5ohYjs3fQEGfPwy/zMuy7+N/VL/OpWMtk6IjqsjZQ4485oz6ik98/2nuVydpTYOrAmFSMml6uMLzgV+5HYBr/u4G1gdbvP17fwHlFPmJim5vTag8w7zjvbe+j2JLppHNbHt5784jLveXz6IqUC+N8aMZqbdNZOu6bexixrEPH+b8TRdZv26IXlG4MhJzaPY6prEdekWjz2hw0J1zFCcLmqPCwrju393AF991HzGPPPjyB9h/ei8rr1pDmYhZ82QeNn9km7gJo7/dJv+vPcyqpXn1CLWt2XjvFv0fnIVNzYd/4xyHT8zx33/lu4gL83zka0/ynU98LfdyH4c5fFlNEDzYAH4EdKA8MWpitBhV7Ew5FRNiXKHZfoT1tUfY2DrFxsY5hqGi3azZWpuwb/9RZvdoNrzhc186TTbomJnrsbC/5Oqbl9jYOMvW+pDlsyWlOkrWD6gOSuXol54s69heG/L5z97PIyfPs7w9pPEOdf/nuXD+LEVpmZ3r07gtitxSVRILSwI7k5BWGCVJchumA6GQ6imkmdu1axdL+/dz6dx5mqZjNBoTPGTaUhkvsZzK0p+bZ/++vSztrti3fz/VTGQy3MLXE5TOiFYzbjtOnT3OZHiRuWof6BxtB1hlEziuiBR0usCYFoOibRQXzl4ktIHcZMQwpm1rijyT605XGwhiHhtaroCK/xUPDVdYEe5MPQHwEteeDJaV9ehM1oMLkiagYgvU0u2FGWIQEz5Dx2i0zPL6Oerde6545n/5cWXjFnxL1w4pspxcV2Q2SoPjawKWqrKY+QFbq2tMmm3aboSyIpXyTO1m0xpQgQ7HaDLEdxMOHT5A6frc+cVT3HNpTYZsJrvCnHs6w5xKDkgM3ihpQYCJEheutcK7yGRrm3YyRvXZYTrjQXlJ2/KxFL+AzoEP5MaS9weURcnIJ9PI9O+890yaDj8e47xHKYMx7Ezkr5zYi0dElLUUpUsoqx6z87vIqgE2LzBWQAwQTFJpQ27TgC54kbIkaWvjatCKzGbEqGi6ji5YsD36s3vQmWFYN4zGm4ToKIocXRVUs3161QBlc4zRWKPxCtpGzOY1cv15lqGkjCVGldKrPE0jXoJ5VlBVhhYxh8ck9rmP2Dyjv2uRwog5OARc1zEebjEabdK1NcG3hCCmw9rKMMpG8a/w3k25FkwTVKL3KK3xztG1LS6m3iFAGxVdiLQxEK1Cm4jRgV4xI75cac1qRKYjr+ux9fyVUoj04Qk7/ApwYzrI1FOmiro8WDJTBlAa+KUnhmmPEqWGNUnGkec5xlZYa5idn2cQclQhaU3Bi7zapoGjSx4hyhjhuyjoDwbsPbAPayxr62v05xfYf/gI19/0ODLJNEQRmYadpiyix97mO39OkcY6YnQkkJFlinLXLg7uPsTiwjK9tiHbXMeHRjwVBab9J/eEf+7x5QFgRHZcYHcYEQktC1OXGqXQSqbgWZaT5w6omUYziuOsmE2VpUw8q15GWZUEPF2ncV0keENmxNfAeU8dNY0XyMBqcbHuVIsxhkHRwxYGZRpwDhc6UQ8aQ2E0RZaTWUvEJx2TlyhBpSgzI0Wjzki+umgZxROCw6iYTOuEwqW0RsUMvEmUIE9M0IYiJJdXEJFCRCEZ20GFBBg48dKI05jRy02/LNKk27IWi8aYJLWIgcwYyjKnyo14YHhHrywwGuq6TgaFHotBRwFlsiyTq3NBTBVtRtd1whYwkiJRtw21d3gnporeiHmq6K5UQnsjGMVgZoCPhjisJQ45LYyp2U1M60ArqQGmm/7UyXnqyEySpxijCE4Ma7quJfgGrXKMyYAW70EpB07kPMFJvK33gegdVhuZ2AAhxan6ECmKAh8jbWxxXSuMHS2TaefBBSiKnDo4nFGSOJeoZyFtPpmySV+JMDrSRr0zeSZtfMlsZ/r/0wSMCCneURrw5LUqG4Camp/K82eFxHrGYSOrJ015o05betIdoyBPvgYxamH/eCmbrNFEI5M752QTnRoDwfSQvzxNBykeJ5Oa2X6fIhOfjs47mralnjSEJhBNznDS0bYtgywXrXlw+ChrKsszirIPxjI7qGj8NoVVFFYx0yvZszBHLze4psZmlqwo0duwvunwrpG1naQuIU5lIzJ177zbmWBLHLBHp6mKuI/HdMCkdzZCVFewK+LUqzv1Ij7sUBAF7PEJ1CJJz9INjFCaTVGCtZSDAXleoMZCYX/g0Yd4+P7P8bXXHuWZKy/k7IUL7NszYGvi2HfgEKtbgSZ0HL3mao5cfRVnJ1s0bUuZKHxWSQKP1YY2rQttDHmZEXKDyyVBQxUV5YxmsOAwWU9ALS3URArLZutxW0MubDpCzPEx0oWISzuTCwFlFMYaXOeTPjUI+8ZZWi8HcWaNaHVRbFx3ic+8/qO88Ne+Db9hCAEuPO8E937zx2jJyMoeedWnsIrMQudb6rYlYLAqJ2pLUc5ijcHVE7AVId/FTG8PM1VJNXOWvlpEVfvY6jX8+rW/wYtOfDPfs/ZmTDnPK258In/8xB/jd7Y+RO4jKmYYKwZYRWH5xexHea56Ad83eSPN9oSP5h/iLfNv4pXf+l0caPfzkZn/Se/iHfzsf3sNl1ZXyWd2o/MZ1tc2aIuc7dCRZQZnIuuhxsVAHQJaJ/ptr8fi7r1EoFdYCh3ZDGLMB+PE2pAY5dqD0tK8bD3PMXmD5p7BSd6+8Me8Ur0MzZ2IzlHzZ+rPeDmvJClYZVXOJDmmjehC7wBzKmmrQx5Q/aSzFeyE4/Y4q4/P2a4mvP2r38cNj+zh/hee5xW/dRNL44M0L4IZO2D49JoT3/wlnvn65xPGE+rtNR556yluevxN3KJvRCnFPb0TAFQzFSrXeBw2z6gGfZTWOJVida2mfZ5jz6MHODy/m6uvPsjZPRPetPUt7BvspcPTEkllN3/EB3iBeg7vKP8CSs1ZvYqPgXfxIWLn+S/5n7P0F8e4bf3VLC89wr//9l/HFgOcmaE3W3LkroOceupZvvQNX2D3H12DfpomP9fn2Hc/lXNv+AJbr15G15pjP3WI7nsadn9ujnv+zYO08+4flS37PrabC89b4fhbz9H/zRmR0/U9n3zHnY/5vnt/5wHscUNxrzQT27dNiGnimX/RMjjbZ0MPGTSzzP3qIve944vyxcQyKlYKytWSrVu38DMeFRSXXrqBDYryIcvet81x4f/ZoPfTfbqfaFh8ywLF3/U599nTlLMV/ffkXPj+i/zk77+Y/vxu6l7J98Xv4W5/infbd/Mj8Yeltgie4Ca07TqT4QWK0tDrV4wmQ7YnHYPePINqJvl51vjhcS6du5fh5Ay6GNOf86hRR2vAqUjelzjzot9y4y1LxLzg8KE97N2tObt2PxaJjtXjknBAgF6jAvODHrt39dm1MUOWKx546DzjTjOze4ncOMpehTWKPLNAg1JIepxrUTpnqu/WRqH8ZZM6JR7BKH/FeSrRRdL0GCv2VSiaztFMWsoyZ6aqwFraYIkEtrbWaWZkGtk6RwieflGAzhgB0Rowjrz0oB3EElS209BFD5gpRzfDAKMtz/ryqsSIJ+Zxnsm/EZpkTPi6x4eWEBpiMleV+lInX49phXDlY3r2TOum9G8SO09OOKkflJ5GWSqUatGZJ6hOzr/pZDr65N/gwEuzaBRMhhtsrl+i85OEk8Qrr+AfPXb+TilAJtkRL7LWxBIATz3epvNeZL4eQt2xsbHGeLRN8C3etcQsgMlQ0Qiz2DlyJGp9Mh6ysnyRjUsX2Fyb0DY10Tl0FlOSSbqaOK272GH57vziiqlwUFilBHQcTgiTVkzFA8Sg8V3LZLxF6By5sRhgPBxCiFR5RlX06XzAjBuGQT43lRifUpP4y412nE7flaSzpZQ2YyzeZugsxyMgvzShh6hmd4HJMEYYMmIgKaBeZoyYdU7rZCKuazFWUk20zYQJMmmwWU7Zm2VtY8TW1joXLp5nZfUirmvICsvS4X0cPHaYffsOYouKzgZsVqKwGJ2BluBiq5I0wYUUrqgIuiMvix058bFrjnH4yBLDZouVlWWG4yEhBqosx8wMyJcW6JeV9IIh4JoJ62uXWF2+wNrqChub62xubTIyHm1KbCnhAtE7fOeILtXSCQkMeLzWO8OuzkesFUsfFaCLEZcGDTpEfCfZNTrFiCot72cIKWBAXQYrLn92MrSRdcwOG3ZnQaXn2YkrVVJLuyCm5cpIOksMUZjFSqONkhCIFEpgjAyDtTGURYbJMpEQdWYnNMBqGaobazHWSJOiIrawKJtRlD2KQY/ezIDMZjRtzcLcHDODAZkyV4jO4s4eE6OkpkxDLaf3y5S1Mu1Wk+eoDFOVptebpT9YoFi/KGEA6GmbccUA9/L7daU9wz/1+PIAMJRkSkfk5tVGKERdcAzrhiqTxkobRebF/dSNa1QQerBOtHUl5DdSd4q2kGXiLUDboj0474iuIVgxSzGuhbomoIh5KdfQdSgT6LoOHx1ZpsQky00Xksg5VOPQnRcGh/GEGMmVptKWXpaRl2Iy6ryXGCoEaHHKE/T0tQNpgq5lD9uZtGudoZRN+ntBHZ0TDVRUMh3yyuMMuAw6C52OtEp0ntJ4GryLhCiFqnfSUNGlmxGFzkQnX+YZRjmU1vSqikwbdFDQkk44ARNQOgEByGfhI7bICU5SYIqqFBfqsWLiW4z10DmUSv4bMdIFxXjihHpnNVrl5HlEqxprpCmXPO80DUDAzysznFVqCMUTw6BDwAQtaVCJ+eCjp/WRyhiqXsHi3AxWOfqlmBeNhmOa2qEykfW0bUdQUvD3emVqcKX5bRuJwyr7Pba3xilGVQ4CQTY9Hsj7BZnSuKCJPuKNxgfRxAc8IZq0cYleLoQWhRRYRC+sACuSI4iY6TJJmreAGKtNnEc7SaTBGLTO6NBJ1iTovG4jDjEtjKFF6QyvDF4bQlbQKWFoRJ+a06hoXUPTdVRqgFYtGjE0lcZdDFUb7xk3LV0AHxQuitEiUYwXnRJTqc16gjcGZZJsyYupWtd5Mf7qGoLvIPpEm5T7te0CtjDo3GCVRWeKwhj6VjNb5BzYNct1R5eY7efUkxF13dAGmEwgswrficGd0hKvl+V5MluXFq/IS0BMbutJw6ge0XknlLuoBIzy8hrEk1WKRS2ev0kWpIQtkpapsRabR5RtCEqy1rUKMumIHuUMWVlgbUkxmENXA7Qu6BcD3CBQzfRYH4+57667+dqv+Tq+f/WnubB5gWNH9nPi/BmyvGDu8AwPn3mUowcWueWWJ7F19iTOKBoliLezgNHY3KJaT1BgihxVlHRlyWqnxZBTZ8R+n9n9A7TO0kRS1lvQka02st1JskoIGhfARYUyOTorQJeYzFKYEnKRTOADWEXMcrwRMCtmVsyMY+D4rZ9h6d4b8W4gMdhRc+COW3j4q+6hUwZtS6JWPPr0e1m/6gQxBHqr89xw+wukOFWaz972V5AFdj94DJ97Vo8tU4RFnvS338nIw2qA0+OIvzhiYesgux+6lfubEQtzlpef/yHOHribI3M1VdzCdA7KPi0tqxtDmmKL5dE5ynmY3TPHq7tv5b3hXRit2b1nD0eWjlGf03zoCfdyev40Ni85eOkgt3z8eiIenWua2DI6tMnHbv0MpdGMhg13zp9ncrDl2Klr2aq30LnhY0/7JK+476X0Z+YwpsBHMT1GadHxmoA3AWfFxO+mz93AG/f/MHc/+fP8tvldJKzW8J94OwpFQYkh8CpewXN4tjAOjUmzVtlBPJGTnODtvE0MDdH0Y59fc/+R6DNer7+LGz+Zc9/BhwTQ9wYV4Nab9rFo9/KfDv8Frzp+HZOXD+kWHN/1ytuYr/qMRmu84/o/5vl7nsFT8scTAtzd+xIAX/HkG9lWG+Qqpx4FVnoVZ8xJkW11juu+uMSj33Keb40v4trsGuonarYWc549+wJyu0BH4D51HxfDMijLr/HLHOOgJHupihfxElZY5a3xrfzY9g+w+9MzfPzg7Zz6ivP4GfGXCMpSo3jmM57G7f7jACz9/VUsbh1kw59h3ycfx/KbH6W+abRzJuvcElXNgY/M8eCLin8MYER4/DuvYf36Lcr1guGTGohw7Nevxi05zrz61GO+3V3lcVcJs1B1l9u5+qtaLv3SOm7Js/yWVfQBvfO13qDEjiw3/ecbGR8Zc/aG0zJRnAucfu0G+989z/LLRvAsRVFZnvfsqzhxzQpL1Qw37DrKb+46xaFf3cdV61fxHv6Cx33jbex1Rxl5i+8t4bH8VPxJvmP0cgyeqsyYTDZYP3uCh++7m5zAgYVFhlubXGqGHLnqKvb25hArpJq4eZHtldO4okYvavbsO8Lw5Aan186iFxbYbGqM1+xfXGLf3AA11+fQ3ICVE/dzvL4EdLTbgZmDFu8mxLBN6wJnllc5c+YSvjPkg314M4u2ntmFPUyGG3StZjIKbG6NGE4atLJ434nfQJ4kiNaLv5l3yR0/UZuNlel57HDep2ZGUdcN28Mxk7alndSMm4a6aTFKM1icI+tbShephxeYrK8Td+0m6yzKb6NsR1HMApF2UqNUjtee2m1QsABECW/VEKLcl1aL1FRbQ0TjJqt0kzW2iTRWoW3AmiIBoBlRtWR5pG5GFDFgm00KarQqJTmGHKuErUBs0aFLtZLZ8VSQ8VeAKH/nCNjoUYjRPepyDT2NFddkdCGThBrt6KIClYkfBh1Od7TaQ2cw65FudQPasdQJStihegqpTIczckckZp4BXRL1LDazKBXolKLpIs3mmPULq5y7tEXQUm9aNNp72tGIeriNm9Ro74km4GmRJBWJ487JyVyGGrasr0x46PRFNtc9q20rgzatccEJYBGVyK6VGFX6rsHHSDQ6pZSRmLbC/I6+pbARXRt041F+jBQ9OY07w6Q9R9eJ1Nj7jtH2Fv2yICApUwENzqOVIYsGMAngUolAEgmhQ6fhrbx5UuPlWUFmtAxDjaFOvnqqyunNDSgKYVEo7TFGpPXTQY2KeifNL8aIC6kvCTJQiEFgtdwqMqNRXcf25ianT5zg+PGH2NxcReOI2nPq5IOcv3ANNz/hFvYdOMTMnEbbDK0trfdkWqGMRSmN70SyZYyAgMEaQqYxuUYVkC8ULBzZTVz1DMcbjFuJ6O1VFVpZYusZb3s2NyPzxZh6+wLbG+dZvXSarfUh40lL04HzidWQCQ2mVxmi13hv8F0kU4bOi4ws4ogqAXZREZxJvYYMM/VUOh0jVmVybygtw8HUyusofVtMn5EAF0FAvogMp1VMvhk6pTHKHWB1Sje5PLFNg/o0po4SBZsZjcYIIKOSwbxSAvRlkahlCGroIKo0REdYD0ZRIR5yvrC0GRSNJ7Mtg70VM/NH0NkcC0sV1199Df3Yw+/fZmnvXm7cd4Ssi7Lfp/tWTwGK1HtFc/lrMV2/iuIFiQab4lcx4HNoqgxnI0RHqRxONTShZqpNFw8ZqVoi6YX8M48vDwADkvOpgiDmg94oQieeF02MaaF4Ohdp64Ycj4myAWjt8UoYDibRamIItOMa3ziRCaCJOtJ6cY02xmAymRBYHeh8oOukEWm6jtDBpG3E1FOJ2VhMekmdtwSl6EZjaDsxHU2pIVopcm2obIbVgnDKNaXG23hKY3ZQpZhibGKI4Jws3NSoSpOuiUrTBYg6Qxcp9kkJbTgajcotKlj5PTMoL8haSFp3F4JEIaWYpeDBKkumxeQmdBK50+AxdOjoGQVJq/CtR/mpq7HD+Y4uKlzohLYXhT1S+hLXtQQCtW8xVom5kUqLWymiVuLh0DYsr2/ggaIUNkwXHF3XMhqNJZZLazIVJSfYCIF/Gq87nZDHGHYmFsYajLY7v0SDJEhlioIW3ZpWKA/Ga0pdQB6wiIFf8IrcKoLPdlgi3nv5OcmIyHWGEHKKokA5QwxeaH5WgZcJvncKYyOqTVwa73FePlNjTJKGTM0jQWtLiE42xnhZS2eM0MRkM53OSMSANWjNuGmIFkASNXIlUZBBgTIQQ6BuHM5HacQ9KR4JWhROG9oYqdskC7JGpFEOTOexBogO3zY0Y0c0Rpg00aB0QVBWqP3K0vlIrTyVVigjdqZKCXjSeI81mTS/JhKVIYsknwaRzhhjqaoeeZ5ijgnkVYYpJDYQHfBtR68asH9xkeuOHuLYsf1k1tNswuYwsjlqMdqTZ4L4Bx/pOi+FKuxEoSqgyAv5VZSM7YRu0tG4htBFOu9xpDCZRHskToGyqdxE0PKASFBE4KklQUbLoaIRbxJ8Swha3Mtdxrhu2J60ZHVL10FmcjrbEU3EbU944N77ePDzX2Tf4aOsekc36SjwbG1d5NDVxxieqCFErqpQIFEAACAASURBVL/uer60Zy/d9jJ1DFigUxGnYhrOK9AGZXOcMgSV00xCOnxEGuNDJIRGWE4xyXbSQRy8T/488tn5aPFdRHUKnRvoLONOkPUQgiQeWA2qpXV1WtvCSIkxMpo07Pr4Ec6cWt1J6EEpdv+fT+HihVV82GD4rNOMhxtkf7ZI7Hse/qmPsTHs2PP+JwOK0YdmePRn3095zV0svfdpXFi6Cz9wmN9+IhcOnWO9HlE/uJswtwmXKs59OOOCuZ/dg5wD56/ng6/8XX5v+y38UPNibOeoo2XTWM6fXeEFJ27hCNfzyev/hp+/5RdRGTyoHuAbT76CrOhxujnDp2+5h2+69+t59umjrOiLfO4JD3LrJ29iEiNlmXOhWuGemz/L0z5+M31jObWyyl/+zMdAwYn+ae44eAdoxaW9F2jDhBd99HlM2oYs11S9nElTY4FCBUa+xZiSqqrYNbdIHnKI0DhhS/1n9Xb+Pb9AwPM6Xsn7+SCvU9/NEktEk3xNDPw4P8k3qpewpYa8lJdxPdfzo+rHUcCL4wvZttv8lv5d3rT+/fzAc99AaxxN1nH7Ex8F4G1f/9dkpuDR4jz/pfdRghcmwW+87HfErNp3HM/O8Jb97+AoB/kZ9WO8T38UgA9992d5+S8/g0NzS4zXalw2z93llyhMRmUt+07Osry8zm9/43vIKRj3Wl4dXsFRHg8ETvvjfKd9Hd+hXotGY9Us0Edr+L/U7/EZ7qCj49vU6zgx+wgPPuk4vf9xgBfO3cbsvjVu5w7yMmN29wx/8E2/x4kjpwEoP9tn358f4eFv/wzr15xh/l37iPMNa9eOUUBZFIz9Fk3jHiNf3P2Jea7+k8Pc96aHuePn7qObd2zfPGL/FywKza737KW7uX4MgKG3FEdft5etF49Zff02sx/pMfzqcdq7YfuZQ4jQf/8s+oma5VuXgdTsThTF/zKsfseY0XPqnefMLlj+P+beM8qy86zz/b1h733Oqdhd1VFSS61gZdmSLRns65HBAWyYAXsYBgYbE9e6hsu95OQ7OFwGhiENAyyiCcZmCAMDHnwJtsc5CFmWZMtWbHWrU3V3pZN3eNP98OxzqoVh1uWbj1fJq6tO1ak6+93v+zz/5x/W/nSJQ48s8+AvnMbtC5z4rjPYEfQWehw9ZFEKegsFq2oJgO+98z/ypvf8BKOB55j3NFc5ogr8+Z/9LuVkl7X1FfCejSdPcfaJE8TRlHWTsVhkbNqK1fVV1rKCSTWm6BqOr61jDPSZcIld7rz7Vo6qLjEkTm9dZCVbZd3uw4YuRecAdWY59ehpzj/yNIdvvYJhWXF0/2GiKkiZBV3jkgAYZ85tUtYNoUlMmsju7jaD/i7RO3TcYutin/G0xEWI2uK8J+9anK9RSeQiQkMOUhcajW2HBDomXAvwJ2NogqNuHFVVMS1Lxv0hjXPEJKadZYwEPCZOKMeX6JqMjlpCOYuJJSUN05DQWaJTCAPXFAZdiBll8kKWcki8uG6n/JmS4cOkcoz6F6mrbcYkKq3wvsZj8IiBtwB2ARUnaNcQRptkVCJ/JUdgiIghkNyUFL0A66odkpAwtObUyRKVZC5ZGlSSpr/N45QWJUlsvU6WSE5SgagCToFJmUhq8ATraUxA+wIz1oThCE0zr/ukfhGAANUqaKSyaiUXhkiOj13EID2RTIZLhklZs7k5IG5PQIuHmdWaQmtSUxGbCuUdmiBx6CGiVQYIOzjHYlxGqGq2Nic8dfYS01AwDFHOxQQpiW+ZTjOfKpHuKqWEudx6H8SWwZaSJy+s9FsGRltTyv4Y1BRfO0KlqeozTOrzOF+SCEzLITE6lMpJwdM4j5eZKmSWFFILVNAawwca76TSU8JSjihcSDSNAD9Bg7WGZJUkCaJwKqEyjTWtwWcLRxkUPoWWd6OYTU/DTNqsdCsFSmgJdMQkDcFTTxu2Ny5x8ZnTDC9ewjcjNI6kA8NpH29g37419q+tQwoE79F5LsO4toYlSt1uIiQl/QhWt3VKIJqAyzy1cQQjBrEm06ys7OPo0gF2+322dwZsXRhx5tyAlXSB4dZpJqNNxoNtpuOa2kUimdQtuaGzvsjx/escyRYZbU3ZObfL9oUd6R1SIipPag3aJfzSQjStH5iw361CbtwknoMaO6MbMIvVRYlhMEojFsEtS0FpUK2/FsLQsMaAtgIkKQl6yPN8TyYibQG6ZYiFKLWaMVqSYZzDxYAyYghvSJhMmPzaWEz06CQRp9YqskLTySx5UpgYiZ2MWICNnpWFxHNuv5Kbb3sl3aWr2X/UcPzIUVbqJfKqolhYIO+ty+C0BU6SasGLJClUSrZQAWVUC6IJ5COJhUpkzSoK+aVOMI0R7wKpCaQmCrSb0vzeuwwRmHM5nmWO8Q8eXxQARsvSFoxRS6awxBsqjLYtZUdoNjFF6saDtRI5qmw72RbfAm0MK2vrGK3x7aFEiti8IBGIrpR0CCWFeWYMnd4CVV0zKWuhkrdxOGVVC/XIO5GuFBIfE0NCZ5KBrJRGZwplMgEjWuqPNUJ6da1BzMwrQYyGkrBClJjGgMb5RgwHlRXTHcSMDxTaZqSWnqy1xsVI0zhCCmgTsUluLoVBY1DJkUIkqSgBT+20eOYDQPRtyIKgg0RQXjRRVidyqwl1hY+znGxwzoNRFN0CHyLTaSnZ60aDNjTRsbjQQytDWU2ItZdYQJ3hkyKZnKAymuAopyXj6RnM6fNiaJoiLgbJNw+e0bQmuIwUZZMwWmC+mSvvzEl4niTRfgTBVFtPCLmpAlLI18FTOc9gMqXQieAaqnoqUW3OU9f1XHflnJ8bHllrsXlBbBpiFKBrMpqI9iwkScogtH4nChsSsWxQdSKLhk5QdJMhoCS/vDVBalwjUZ5WpBKhbu/yluonCNYef3H2u80mGdpoiqJDVuQElwRYCA3JGGiaVmCUcCFSN4FJVTOZTKmrmpSJ3tK34JbzgeQTTV1jvaKuPOOxw5iS/s4YYxbIOh2SS0ymFdPGERSERqHSjHobxEfEzNySJa98obB0ckWiwbasHeeEatjEhhBnQEE7sUdhMktuLTbXFHkBRpBqZTW9TsHavn2sra9TrK6AcnRVxBYFOivZnTgWp5He4oSq1euKhMnjZxG5UeJUy6bGZJlIubR8xCiRt1EJU0g2bD2n+YnRp1yTmKSwSbSmucbML5nSSkziWofqLMvIiwKbZcQYmUwmFOMOzjeSjGQC6EDwU86d3uV97/lLnn/3C+lPp0wHW4yriq3+Ds3mBc499SRp8zz7Ck2nyNi9VMlLW9uCisISjGjQwuASP5N+C4PJPhpaYDNKhYv3/jID3RnjUlEsLLC0tB9ljcQBNzWpCSiVyaEdZxMHObDF/0XMRmeyGlKiKisGW7uUFyQZaLauzZZhoHdoQmBcXyBtRcxn1lDWsu9td3Lp+adpTu0nhkjYlkm4fv868e0rHPndL+Xcb3+Mc488xOj2c4wHOzQPRNg/oXnNlIuPP4HJMsa6YTpwDL9+yJPuaSaNxB9rBTY4imbKq47cTX/q2T23xVs7b+Evr3g3Dyx9ih972fdjMPR1n2v/5krWPrLA8SuO0jXwJ9e8l7+99++59+MvQXVyfv+738HNT1/PNWeuZEFlhGe6vOHXX8fvv/Gd3PPoi7j7vnswPcXbvv3NnF89Q9Mdo1drPvjzD0FHEU0k5Ik7fvR6Fj5k6C1YVlcXuenq6zg8WpbmGscf8Pv8BG9CB0Wta36EN/GN8d9wRp3lpD7FR8L7uNe8EhMtrzffRIHEeF8Xr+c36t9mSS3ireI9fILvNd/BGVOykB1hY2XIQljgzX/30zzxxJj3v+xP+PwtD/Jlb/pxfvDrvpGPHHgn71l7Fyg419nkE+X9ZHmkUwWyPCei6Ngl3jv6IE89+QRPfO7zXDAnyZYOcs9d13P9tXfw+8v/A+M0V193NV/zDa/izQs3EZ+puHRqm1tuez6HDl8LWZcqTbjKXMMn0wfppn28Vn2Mu9TzuRhPAYo38Hq+Uf077lR38pvhN3mpvZeTR89z0/Ao+3bX2D+OsAaamk5e8cy+p+eTrsOHC/YfrFAmUh3eYvWpA7jtliyrFAuLBZ990RZLL98PyL5FgHx3mXNfMeDqX7yFx37qIXpnFjjwgYN87o2fI2aRh/7qfrTfY1GQQA009sEe9nkAI7LTLRW6vc8O/thB+t+2i/1URljcY3pcGl8ixMCF4SXGozGqhFTI10xlIWakRxWqUlDB5194EUzis/lF/mb0OJHEyc8+zu7GOb5s+wU88FWf51tf+gZIMsCZZiV6Au/7kz9iuLNFXkBKgXFVoH2OmtbkZc3h9TU285rxk2dZKzq42LC4vMC59QqfAhfrHTprgWK5y1bMuPY5N7N99izbl8bsjEvOb+yyNozE5Q7Dpy9QNEuEaoXB9phH7vskV12xw5HDL6BXRJqqZuP8OUbDHUKMnJtsMRpdwIcG3zQsdDsYlRNTDTisNUSCGK37IOAAMmXWVqORuHKrpDFPQbT3l+8/WZbROEfRKThw4AC+ahj1B5JeYjKapBlPJ2TNhKK3SNFbQumcxsO4rBn5CoKj6FmKbo42VlIesoxQ1jhfYZa6beMEKURUSCQdGQ2H7I4rhoM+0+lEWL8+4JuGaMSEMTQNKUaca1AkmrpiPBgIw6Q175bUBFqKqpe4WOY9EXKyzh7qsnEI8+ddVo23wIOADKqVJAtNT9GOSoU2rwLRikdWE2pG9ZBGNXglNYAch/+oqGV+r8XYDhp8K+tsW5mQEs57ofFb275mJKTZ7y+S4pAkYjukVtR5GXhP0jTOs7m9y4lTZ2jUAsPJdJ48NvtbZ4aWMUlixeX1VluWzcGNSJDBTvRUTUPdNEBgMh6wc2lIf3CJqh5iM2GATqs0990z1mKVJZQVKUqNKWCb/M6SACNy4xAizidCDNgsw1hpoGMIVI0nywxEi1dazvrZ38+eSXUIXt7tNJuRqzlF38yo+ug5i0BrhTZ7HmspJKqmZlKVBMRzMPimjbGD8WTIZDrAGoXNRMptc00M4n+gjQiPjElIq6BIweCV1AtGa3rdHstLy9z4nBtoyqOc7y1zcWsTnRcsqB7TcUUzGnLxwhaPPfoUcXOLwfkNzm1ssLm9xWCSqH0AI6yIolNw7JpjvPYVL+OG1UNcOHWRT330YR74xIOMBkNCsnid5rHNewEOzO8IpUQeKxKcOJeqz8w7hb3OfNgYmXlb7H2/Nkbew3YoaYyWHk1L/2mtWCJorQltol9sWd3SD6v5+gTxNvRKtIeqTc9JSRJbssyitdwbSum5N0aWZWSdgryXk60ssbx/gX1Ty2o3cN1113PXnc/n4OFbyXs1Xa3pxkVwod0/Cln40QMepQJo2xaGpmXyKJRK5EJ7J6lWstR2Y1EJi4uksDXYsSIvO+TNCqFaprE50YxRaoISt9d5j6OAWTLQP/X4ogAwFIKKz3gMgMQGJbCt5ivPW3dZHfHeobMcW3TIc5kGzRaJspZGZ/R6PVTmcEEK8yYqMmvJF1db9/1AkpG4gBM6QzeiY8uzDBMjKdWymSpFpzXurKMXnVG3g0czrTwE0FYm341vKOuSos4wOYIqa9qfYzC21ch7BwqszdqYVYt3U5RyKOUxRuAIYZA5bEcxS/mITSPu0CqhMMQakgOaJOkXDpJJoNuNM7X550RoF74PXtJR0gwhT1g0GYlcG5xSBIWYQMaESw6tMmynwASBj2NKaGvEDCcG8m6HzFoCHh8UNsvxMSPqiqgVHkUVYNIE3LhsG12RCoUY5hnuzseWyvXs5TlbzMaYtllSc/2VUjKlcC0OqiK4GKljIHpFUolpU5MZRXexS4iBUVmhs4yi1wNr5TAM4OJUdJ3GUnS6WGOo65rYmlmmIJGZsuGJfwJtTrSOEBsxI9NJoYMia6UVuk2GSe30WQxDzWzPk0nJLO4zzqhosb1/5Xtnd7fo4YwYPEUrh453eB9IPuKDp2gBL9O+jY13OOcwJm9/B0VA/CBUCBgrKvrGywS9qjMGw118Cqzu20/tAxe3thiMR5g8o2o841Ef7x29vCA3CkNo5RUQgyP5ChcrYvQUi4t0uh3qqBmOp1Q+iQQFRe1FkpJFsEa3xZ4mT11Bn0NkaWGRxYUu3W6B0QblHJhIsjnYgLIOFxPjqmQ0mTApBYiyWg6bFGTiFbynnJZM6opuZwHvPS54ASNmbALVrjfZRZ/lQQLI4eOtEN3agmrmi2FasCMESWLRSuG9o2lE80imuHjhIsPpiOl4SONrQgqk1GB1oBxu8elPfoTtjbMoY9BZTlSwO+jz6Mc/TN009IqMBQtMB6jaUapIvpAR0eJj0rKQAorKeZz3lFUpgGVLf4yz/7T+ONF5vN8zkVLGCmW4ifQidLMOebdDTIaApm48wQVCcHO6Y/ARncLc3FXNAUWFignlA9oJqKuVwlqRrxlj6OiM4pNXsv26R9n+Lx+Xe7rjWHjwMEs2w+Fx7b1ia01RQe7hhn/zImoqStegq4Qe7pKyCa6csnXicRaXllne12WJDj3XYXWwyiOnzrB56TzdPOOFL3wB111/Fec6W3zJ0u0Ep/it4s/ZzyqvTq/m9dm3cjd383LuZb23TKxKYmo4Uh/k2/7ma/jVf/UnrF+8gmtO38Rys8y3/s83MIin8d4RUskffsdfst7fh60jq67g4r5LAHzu0OP8+9f9LIPvHKG94t4fuJaNFwx47Ju3eOBXHuO533OcB77/BJPjFS+afDn3DR+hjDW/svM7/ODh7wPgpz/2U/yHe36KT138LMoVvCS9lA/c8D5eYl7O8Z3r+bKHv5p33v0bNAOYHh2yszXgT//fvyWzGXQyTuhNPv3aT/Kd5RuoiimPZU+go+aX7/55tq/rUx2cgIIPvO2n+eiTv0JeafZtHGLn0CbH9FFeyyu56Df5OfdmXr31UvTSAnp1CT+A7ZNj9HiJG2+4h8aPyPbt58Cx4xibsb+3n0MHjvBlr/xqjhxZYzzsY4YbrKijFGERZxVBdQlhzKrZh0o5z+EGPqw+zP3qU21AkEWpnFvSLdwVXsDv6LfzjeqbeOxNn+K7+Jb5ubFwvWV04iJR75lv3vd1D3D63mfwC5643HDxp57B1u1ksht4+Ace48a/up7ymCN2ZdEtPbHC4mPLPPGDj7D+d1egUJTHpmy85hyx0/5sk7jmN67gyR86NX+ttZctU8bIDJo49cdnLu8YqVdrYpYYvbDP1s9sYs4bwtHAxk9eQA00G++6SPFgzr5fWmb4+gnaam78/uvke+uG5OGqbz5I3EyMXjBl8JYJB752CfcHu9g3lmx8x4TNszsc+r4Flh83wIj9K10e+tma5/7clUw3PWGa0d8eUjY1ZYp0ig6LehHfaM5uNWxmNaVJDK0j7xb0J5pxMyJZTb62n6NXrHDTLbdRX9jmqVMbnDq5QTNWnDuxybQ27IQl8tVVhudqDi4sk1/STEddjDpADItMR1DXihBhdXWZl335vawfWsO7iqJr8a5huNtHK1hfXeHw0QPs7AxofCIly9b2Ls+c3pibFc4S6XwM4hcVZSIaYpBY7bDnB7OytERwjiIvWD+2Rmgcu1tbuORpQsKiCMqyuLDENdc/h32HjqCKBUIyVC4wrQPROaKGrOhiYqKTZUTfoAsZGmmE9q2ZJe5BaGoGozFV3RrHN65lfEpjZWh9s0JrHh0TmbYkV9Pf7uOcmB9qlePboQGtGLuFry8fgTAzNf3CR7upipkTWs0asYhODpM8KrSTXi0SZq1mQzhF1JHGC/uxiVNK1yfQkP2Trzc7G+QRgyRFhFkil2qbai0DQvEyCBgrcgSB2GeeIIqA0PJjUkQ96yNmMyBD0pbxtOLchUt4vcC0bggtJiPquhm8o0ixXSNpbzimlGpT/gzid+dIKdIET9k4JmVJCp7RaMBjjz/K008/w2QqUclN01DVJVEpstqSFQZlEo33ND6gaQ1BEVDfGukllNHEoNoBiSHLC7LCUVclELFKZJnBOYKx7VreG+op1GUDP+ZpcbPHPHVMSV9ilZUhR2xwTpqCzOYiu8ozTJ7howwydSurSMiwU8CVPSaqUgmbGYkw1RJGYGx7H2hQLSPD2pyV5X2MBouExnP65Gl6meHo4SMcPnIFl3a22Tq5wXQ8oZzUbF7c4bFHn2JQGCaXNjn5zDk2dwaMYw5k6MyiEH+59QP7ufN5N3PH0WvYOLhB//w2TzzyGNPxGEvWMlSjNOUgNIEWVJHBC+3fIrr1GVBhWxBDADI9/3xo548z4GdGGpD3Wc9ZPfPOvGWTh9SCgjNmr5oZ+O8Zy87SQyRFUczURRYkkhmbZJ1rrWii9Gsqk/5AawtG06iEspqrrjvO3Yeey4KtOXj1MdZW9rOysEjQIgOOaIxRJOcFrNDtPRRlYDUDh/d2ldlWsXevK8E35Lm0A/I6YSce3e9jR2NyL5KiMiXcfB3O/BFb8KZ9E/9XLhhfFAAGIA1L6/zPzK1VKRrnaZzF4ETfpGJbGBqiTngNtHT0EAKohjJqOo00ZpNJifdekHatKKx8wwzUyawly4XRMKkbmqbBODlEvPekGDEhUdUOHSMuRmxSRONxLoo2PEYIgdjUlHXDuCwpXUlvoUvR6c4vjDEWnRm8DzSuIaQoN39mWgPKElQFiMtwZnMS7c9H4ZOYE/konhqudrgmUg4C5aShKivq2hF9wiqZAOvUeovA7EySf6tI1EKTCyGRPKgobIvYiG7UeY+ra1wMBBQ+enQIaBRl0+B9wMSZP4VhPJ2ilGI6nSJxZYYGg0tiiiPUogxsLr62s+l1bDVnRqbbVidU2DOKTCAHS5BipGmc0NtNWxComReXSI90Sx+NWtZQ1C2w5SNV42h8h8JokjZCJdWgTQ4q4b0jzoAjWjaQMaL7b9dlVBFshmIW/dumV2uNTwmMJaqAT+JV4XygiQKsxNZgClp3aaX2Jg/tgTP7CCHNE5NmMbhKzSb7UDcOk4u+XQANK2wVpfCl+IzQXnutbetC7J5lNhRSEADGOwKO4KGsJ9RuSpoEytNTnBNn5xAT/dGIsq7lQAuRykHeWWap6FDkOcpVLX1RWC7eGWxmsCSsimQEGoX4Z2AJyhCVISjRT3a6vbZYEIpknudoNHnewWY1CUXjAuPxhMwGslyRFxlmcZkOOaazi0uKhiQ+N8aglZhJaTSZybBG6NV5JuPMGROl8cJM8kkO3cudyefvV2v+iW4PmSgSlZCEwhtnzB1jxBC2vTYpRrzzwiRJEvta+oq6nlLWE2KIVFWOwVPoxHBzg89tXcQaS1U3rfO4ZjKdkvW6mCynY2F9MWfRwFI3x+qMJhlcVNi8g7VCZQxzlkhqCw85bU1bpyptMLq1gGwXnFEKYzKhMUfFtHKozJHrDihZj5L9rVp6sEEnkdGp2AJG8ymgAG8axfQll1h4fBUa8d8xCUYvOs/K3x8hrTi2vvthep9e59gvPw+0YnzzFoOvOEs+A2Hba2KBDolCz4CmgNWiAS90I8Zzhxq4YwfzVE6qE11TcGv/Wt5w8TUsHj/IwauP88EP/C0Hzp7h+c+/gzdlb+UubuM11Zfzn/Qv8bPNT/KZ3kN8g/o6ttOQX4hv4803/CTTtSGj8RCzVPDZYydAwePXnuDwxrWyUJRm45odNvadZlgP6dYdbn7mOOeOnqbct81vfuVvseB6vO7B11JMMt7xwj+j3x3y5MuHJBSLJ3uMj0+58KoRd/zwzTzx5mf4pdt/HW7/dfCKtz31C3BYXuoP/vJjNDcmrvuZF/Pw9zyEirPKCS5u9XnsN0oO2hvQO4azr/4M58MFfvEzb6f32XXxRFpy8Fp4f3cvMnQxLPIT//PNvOOd/43Pfvf97L7yEnpoOfSdd7F/Iefw1y6x+FrFu/b/Mucff4ifz3+Npwcfoa+XufLW2yHA+gLcdctz6B+YcmDlIB+5/0M8ceo0h9bPE66NjMdjRoMJk2lJg0X11lg7vojureCMpm5AZTkq5iSlCc7zn/XPUxjLb6vfJYVA4wM+Kl7VeTVvN2/nAXX//G+//PGBuz8Fd/+DekPBXZ+/kfd96f3UpuHCXdvP+vLoyjGf+7ePPetzfl/N+HlboGD8kkskG8l3ClY/v8qFQxsAhIX4LPCi83cdSJaoI6Etlpffu0zaas+Cmz2DHxkAsPm7l+h8rMO+X11l86e32P8dqzQvd/TfOoBcoR/ULH5okfGrJlz62iEg6V/ZBzKe+W8Xyd9vWX/9ItVXWqrXNMQl2P1hWG4OMPnaCU++cJN7/sVdmFgyeW6kOTpmOCkw44zoNImMvAgkctbXDrNW9BjEi1RNKezMDEZVhStL/M6IxbygWOyy0ik4MoWtnZLx7pRQK46sXc3Zss/5zdOMJrBTbdNbCox2Jux0Petj6BYGxTrbW4H//ufv5eprTrO0sp+l5UXu/bJ7ufm2m6TJINLf2ubM6bMMBgM0gUNXHmV3d8igPyZGzYWNLfq7E3b7Q6l72om0TobYTqbFRG9mqC7T8QDUVUXHLXDxwgUuoRgPR2il8SESdCQDllb3UfU3ObtxkXPnN1g9uEhZeeom0jSB5AKuMTjnuPrYcW675Va6nS46yynMQtuItjaYMUHrKVVVjvHU4X0U1myQespoaRKjD1ibt55eihQ10QU2zp1n68IFukcLlCkwREgeopOP5FvJgOy7M1aDmt0f83tEvJ3mncjME4AISQYQKYifhm5llOoygAMgpkDjp3RySJRMqx18HKJ0F+jwjz3mo4CZgV871BEZoxamggkydQ4ydFCtDNmnRPQe1QLtKRlC8FLLKloZtsg/AuLPlZpIfzAmZBCSSLBjO3yYDcGEcdhKe9k794kit/TOkZLHFBqTdQiNp2wCJ585w7VnznPmzFkeeeQznH5mQyQ8WkvcrUpUTdMOmwQzmUynlA3YvCZ5wBKREgAAIABJREFUh84CWd6hUxTEqppP/G2msJmwspOSWkWpKIPC4ICWSWEtVum5z8vsnNwDKvYAjMup+jOJpw9e9icVaedsIofILPvW1zh0xRVMypL+rkerDGUjeVexduAQ+9fW5g15XsjA1Jq8RZBal0ctayUkqZVMy1Lq5AX7lvdx5PBB9i2tooNjsN1ndzxks99n9/wmo8GYybTEGMVFqxkHR7W7w05/zKT21EbY+FonDLZNdEyQahQlmZXY8sIY8kxYgn7GFp0xMNr1r1rwYV7zXTZdjAhLeD44FOqOsGYwYnyvhIUyNwxWwn5RrZQLBPhr52KoNg2lvUjtz9R75pWXgxhakxuDVWACEgSAeLaJFEvhfRCWbKFkGKfEw0V3DAv7V7np9tt51T23sVpEdHeJTnEFMWmaZEV+pTISATIr/aGWGhKToRG/j3lqwOU3s9zEqCBvnklJrnny0HhSo4mbG6TtU6jJWWzaxuZDgplSUVLA3pAwIYO+Od7zDw70yx5fHABGEnRuhoPOaFshROq6oTKGGLwYEBlB/lxqqEIiqxrQap7wEFNkWJYkWpp8q7M32mC1RiObntES+WOMTEu983hf45wjxRKjDZmVyaBK4n2Rokwls6wgKYuLFS5EGh+I2hMSlJX8jM3+Np1OQVG0AEaMoMWINEZhQIS2aTdWzGLkLpGpr2qNW2ZSkjiTnSA3TQyJsqqoyopqOJG4yyQMgSLLMNpiY2wpYaY1G5QGJsaEazOWlVJYRAJTFF16RdvcEdFNQz0ZMXENLiRcUsTYRhKlJLr5JkjqSq7Z6Y8JweNdI/Q2ckKuWk+PiM0zUkyU0xJlMmmaEmSpBfDUnuussXtUqpQS0UjucIgKYiAgwIFYYIkCNLW0eNMebFq1h4DR4sGgLEpZyrKWyZG1TGuH9lEcnmOkcY6QBGmO0TFtHFkmpkjBi2OyNoagahrviF6o8glBvuuQKENkHDwuJioUtU4tWNSyQ2ZMHDVLFJklx8y2zXYa0F4rIqTWkEEr2Tidd3OPhhCCsAvqBq/F5IqYqJumBfUk8itFoSMm7+Q6eUf0DWVVg3dUMQlltjYEX1BHw2hYMhwOWuKH+K64EPBxSuMcyWQsr2b4XolTEeUa6iRGhJm2hKTwSRrawbSmPykpHdQhJ1lDMoIaT+uaqnFkuUenhCORp4yqqog6kecFpfNc3OlTu5qtnU2WF3PW9q+wfnANW+SMasfmYMr2qKRfOqZNomx8K68RUNIYQ5ZLGk1oSkaTMXXtaIJMVNIM4IttY6z3LsuekSl7gFOQTdqgwUsSSGZzFhYzsqbBN15ilkMEPFQVJs8IuwndyQBP8J4UFeVkSnKBTm7letQ1GsVoOBLAIDM4F6gmE8gyVnoddqaJCZ56eYlx2ZBMwahqSFaAn4AWp+k8Q6eAmpnS+tZJPgprwtWy7kNC7s2sI3TpziJR52iTkZQ4vNOaz6KSMMWUmK9pxHhLxRaFn9lLI0Wi0Zrtb3mao390M2YkMc2JxOY3PUbv/n3Ua0P6rzhD71OrBCdxatE1RO8kAz4EUi5Fm0oRoqP2U2KKVDrgo4MUcbFCTwLLn1xj+PINek+sMHEND37FKV700duwV3W44prrqWLFX9z14xx7fJl0y62QKT716fs4Plrgpnuu5d7hXbyz+FN+Iv4oXSritM/yYo9OkTEaTvnEVz6AznKef+ZONm7e4K9X3gMKssJijeGjX/4Im4d3WZkuYk3Gw9d/mpc9fi+ve+Qbecfz3sWp9bP45VYS4zU3vPUmklac+MGTjI9PISry7S7H3neU7dt35HlOc/APjzP838TLYdKyWTw5g5svPutYrQ+NePzbPkR5/SWmR3dQlWH5Q0c4/T330Xl4jRQjWVcoqcfP3Io3jjNHn6AyFf/1nnfw9PITlLcM2rWv2N9bZXzXBR7WJ3nLfW+meVlOZ30N6pwqVawcWCBfMOArVjo5+uAqvcVVit4KG+/fZvPkOe68/Uv43y98D3/c/SOqyZjJ1oDsOgs2p3NgiagVLoGuII+KaBb4eP0Jfs/8NlZbFFEm08jeH5PiR/QPU+ryn112vOelH/tnPb88XFEevgDAiW84AUB1pOTCkf/Fa0cYvWWMVlP8jX7+ORXVniHAZQ9/nWP66ikqweiHxpT/Unwveh/MOPAfetgsY7ihOfmWkyx+uMPy+3us/lyH8eun+JsD/Z+Z4G7xVK9wrL9tmSNXHuU505u4f/UB+nqXs2+6iEqJ4Y1D0gcKBhcSBR5TAORorUi1Y6VbsL+3QGkUVfBkSYZJOiV6RVdYVT4w2h1S4bi4Enn404lBv89zb7mTtcV9PHOyZGN7ymiiMP1L5HZEVImtouTCpT74iqQcCkOIj3H4yCNcceVVHDi4ju0U2F6H4BuGgyEbm336E09/7DBWE80CxVLBkl6CkJhMEyEqmiaiTWwp3CLPZc6g3wPuBQyQ4YJzNcVCj9PPPMPu7i4LRZfoZSAWgE6n4Nprr2V0IWNxeYmi06VxYtLXyTuMyilVWaGSQyXPVUev4PDho2R5B3ySQQdi/Dyf2gCuCcSkyLIOZZLzvv2N29+1BTOUlloR1cqKE5c2LnHiyafo6YzVg1dhs17bkLVNQ2qZGKntiVoQec+UjC8A+magRJqxOJIjhYbo61baoZlJnyIzSW9AxYglYoKHeoypx2RhIgwKin/0trj8pbWeTfH35JlSI4kUW7zjhCmtlSJEL+zfNPOL05AMKPEaEEazeHHNh1BJM62F6eGTMBpnDak0p+KTN29mtWqbKOlKYgz4xkn0fCvLTNFiskUefPhxNs7tsHH6HI99/nHGw8nc1Dvp1E7HkYFACNSt7MRHQ4pe6nQgyzI6vS6pqSk6HUKaSu/YspxTO5W2eS4mjbkFawnaUiXT1ryy2Gf1zowhkNIemDE792dfUwpCdCSiDAVtW4cLksbi6gpXXnOcpC0XzveoqhHawtqVB7ji+FVcdew4vYUVrMmxtpBaG6mFop617fI/rYSZHZXUZSppjh46yt133cmxaw4zGezyyP0P8PSpU2zv7tLf2Wa4O8GZTKTNk4rgHG7qaaIwQaNSYBShlaH7mKjKKTGURDdgMtyimg4hhfYeCq055MyMU0A5iYcWRkq6DPABWVOzISKtAf98fbR9lzACRT6xdz/NlnQ7yJpJw2UayeWxqvLclmnhhJHE7GfP7hOtSVq8/Kw1rbTZChgbPLVzKOeJSYnPi7EoawgGVJFhux26ywssdDSRbms5AFrlcpVaUEb8Oxrxs3FTghujUiNS4RDRyspeMDOJS77Vglvkz68gVeA9VBGmhvHZc/jRCfDngAm2GJJngapxRK/arTG19xxtf5Se9f78w8cXB4DRojezqMGYdIuaa7KiQ9HtUVhB82xmyAqLtlYupDESoZjnLeUM6qahrMrWvDIyrUt844WmpTQzZ+aYFLGRBkIhUVw6U4SmweY5S8vLdLMcN63w3mGLgnyhR3dpCZegDhE1ngiqanPZXFNkWpWMt7dl6mjMHIUL7cWQ9ImWAjc/SDSKAk0H3U5DvfOiUye1Cz3OJS1AO6V3hGZKCA1GGzHF1GKQE1TCqESW5yKRQWJ/oldkijbGZjaezcF2UG3kZdHpkBuI3QWmu9uMRyNClMl/8InMtIhf8BiliE1oUX9QWJJX2EYOkiLLUCrQ6xaUIYjDs4vEVtuQUhvnpwUD1YBS4iYcgqRTxBmYgcjvkpopOIWxMzP2NEpjW/AJbdBJWDdWaZZ7XfYvLxLqKSoGjClkgpV30FmGrxtxxzeJaT0khEQTPCYIcOCcxIllXcPIVzRBtKnWipOwi54mRhoNpUrUeOoIZXKAomkdnk2bgBNJ+PjszWvms6BUaIuF2XQi7iGTKJyP7OzsMq1yYnJ0MksGYr5T5DKhUBqTRazN0E0gG1eYdoqhtZmn0LSvTpH3wBZEb6mqJAwjr4jRYoyRA0IZMpMIrsImKTRSU1ONxyhXY1LEUAgAl2dMvKKOIl+KlUhtYjS4EMgyjbKaJgZ2+302Ll5gMOhJjG1KmNxgc0NQkd3NS6jRkD6RncGIC9sGqwMrKz0OHj7AwvIKpYucOHuRjZ0Ru+OacRWopgHnAs651uNBWC2uXVNlVUsxinhehMvitoRoMdP5ydRgxgK83MvGcNl1I5DnOYvdLrVzDPtDGj+dZ7k3jSeORuhmSrHQodfrYJTIyIKLRBfEP6dFp5RWWKPRec5oPKXXK6hdJM8NBJHURa2YTGtGlcOZnLGLeFMQWxkY1ojvynTSAr1CM0xeDH19ihLcZDNMnlN0l1hYXmFheQWvcxxGALwkni/KCPvEe9fWeuJur4htIQApqjZCay8taO1d1zO+Y4uTv/QxiTeUxc2+dx0njpLE8gGbb3iK3X91Wu7ubiCsNExv6nP039/C+Z94FIDBK87R+/gK3Q/38CrSqIygIloZolUor+l+aJmdtz3BuXse4IIGe2Xk3/2XezmXbXBN4/i23v/BJ6//DK959x08c90p/nV4CT979R/wY9e+nX53yr/M3sDT5gz/z6XvY3vrEa4vl3n+lc/hT7/p/fgY2TzS58VP3cO3//0buFRv83Nf84t0Q4eQHIdO7WNpp8fm4V2yseXgA/vhNghO8bErP4kaGpb+cA2dDPk3P8HN//k4n/rdh0kK6qPStG6+fJvn/Mdr55O22Vlp9GTvX6luP7e3j9z7Z1/Px7/6L7DDDld+4DrOr1UCYDjF+u8cY/8H11umVmI37VJct8RNv/ViLnzLo5w5+gRd1eGN+ev57yfezfsPf4wLV2xy1898Fc0tiXM/8AgHf/lGPviJB7jjilt47q1Xs9oc4arVgiws8sRDn+XznztB0MtsTWBj6Fg/di1PnT1HmOwwHA14Oa/k3Yt/ia8rdN2QxUSJZ3sK2hasZrAM2ASljzw8eYxhGvLG7DvZubjBI498ho1L29RVZGs4he/VvPGDbxa2UnA8ffESn/imP+TnzvwGK7FGN2Pe/8n7yNZXuf2Ft7LuI5cePMWp3YynRiVNZ8zFW5/ggX/xwX9W1fL/51G9qvqCzw2/cvhPPt8fDgxeJ1931+z5YYy+bkr5okoK3EIK2upGR1gdE14TwUK8MjF9Q7tWEoxeW+J759nq7rKz1gcN57/q3PxnWp1z6s5S6lV12TnUwLU/cBCjenRyxTA1pCqQd6wkHMREdAEVPapp8P3Ak58d88yjJ1jc3+Hu57+SBz7xWd77gb9nc3dK2Vh6RZfSjWl0QncUx1b30S2WqFOQPcfmRNtlGhO9fWuovEPtEoPBhDOnL3DmzBaZ7aGLg2S9nH6/TzKR1YOHKWzGpDYo0yGm1gug7RFCWyeomXY9JlS7t4YoUuJioct0OqUsq9ZvSwZMSiVyY1he7LFvdZG1zlXc+dw7OHL4EEu+x+FDhzh25RV4PM2ojytrylTzyGcf4diVXfav3MXy4hqpblDdTJJH2novucTTJ05ybrfP6vrh1ntIkWU5Rks8u9KKwgjTMTg/N8PMbEY9rTl98iRFjNygc/YdvAKrI4Qa14zR0UvCiGoNtS+HDL4AwJgh9EArQ5FWwhNCIx9JkjNC+70qSXpZ8AGbaCWdE/R0xEJw9JJDRz9Dbb7gMauJUSKZyLMMa6UBjHHGAtR0spxOx5AVHYwVr62mLil907I15DzXSiTnRknEqTa6ZcBbbN5BTOi11DQ6SvpGMjJzTy1Duf3r0UqibpUS3wNryaPUy67xNKUn72TUDWz6Ke//4CfR3tNMpviyxirL4tIyzomsOkaFNhkmywllSVmWNN4TVE70DQWRuqlJytDJpCbO8pye6mEz6HR64oOXRCqTkiIrMpaWemSdDlOX8NN6731lb5o9Y1jEmOZDl+Dl/2fPFQDJ4HwgpChDCK2weUaedymyHvvXD3PV8WvZvHie4XCH3kKHxX2LdFeX2L9+gF5vCZSVRtS0iR0pEuOsSZ8NJ+WcD8qjUWQmg9AwGYyZDKY0ZUNhC1aWlrm0u0tV1fQ6HWFt0JqNKkAXJFXiERPNQCR4J6mGCVxd4+sp09EO21sXGQ52cU7M+p0PpHzPR2XOUVK0TGbpQWeMCNWybeNlkiL0ZZ50z17ZUrer2L7HSF87ex2l2v1WPwvAuPx6xBnbvGVqz9g4sy1aJVBoDOYyWUqbztn694EYf5rWi4dcETQ0KYA1oCyaQqR1CYxY/BIVLeDVoBlDs0szvEQ92kS5KSY6GSo1vpUER/AR7RoIoZXCNfhqQqwnUDtUDbHJGQ4048EOlRswrWtcMxX2WJQ1Nye7aPamhvFyp54vfHyRABjM0eKIMC9Cu6ACiJttXhCTF7q/zbGZFGBaSdxPZrSkHyRp6mMMuKaWixmCIKgRMltgrZHGK4lJkHeezEqSglYGkxckbWhCJDOROnhQ0qDk3R7dhSW0D3R6S+SdCZUbUzUSsTlHdREHaCHAtDcC8iWh9MvnY+v2L+yKGqUk533GcAgtyi0mRrIwZ5vR3DRGa0gZnoiOcU6PCwjTIrpaoklbtFVlGZnNsCYj15osRrxWTFwgKAEkKhVJRlFFSzAdovVtnKgg17WP0B4AMSQSum2yhf2Qm4wYM3wj73/HGjpGo/KcjjU0PpAb2oOlZQbM9PhKqPmKiNWi5kxpb1MOidY5WJOioyonWCvRZNFC3u2iQsI3ngyNxZArAz4xGU5RweHrkr4boKwiX2zmzVkIfr6BqHaDmP1bklwUqqyYIlG4KQZiqkgptIY/mtoFysoRyChLR/RicGeVNH0xFmRZJgZLKbWJJqL1RFuUEvR1pptTSs0BujjziqlrQnKU9QR0ojSahSxHBVgo8rmEIXhHVTeUjUeR6PY6+GTk8+WErHVI9tGhlSaEmqxIrGSWpmmom0je65BSwpoOWgk7xXsr6xeNUpY8b8EwEOf+LKNs6jkDSplWK5iivB8qIw5GqMzS1A2D8ZjRcCzU2RBRMaCtkUjl3FBklk5Q5CTGlaZTaTqFZlCPOLMzodPtkXV7bI+mbA9Lxk1kXDZoZel0u9Ko+0Bd1/N7tdPtUdc1dcteksSfCJG9vPIWR1KzPOwo8jPnHDm2RccTWluca2jqBqtlemTaTTi2E7CYIlopmsahVSTvdAhNpFd0mU4nHNi/Rl1VTPxEQKneAo1rIC9oYiBb6FDGKJG5ylDkBVYnYnI0SRGTZlI69MIiKWnGZcXSyjK9Xo96OiWiyfKcOlZUddVSlTPwMtHWKiPvLLG0dpDu4jKx9TAXJLz1JaFVWF9mpiv3pEen2Bott47tMj4kmYjvePTYcs0PfSmhzTafFdBprGg6NfZcl+Nf85I5w/nyKZ1CoUvDsbc+tyWqRVSlcEuVxP/qQCoSqRtxvRoXavRjBYe//bmgLUsdyyu+5A5YNZy/9DSf/Ojf8CWXbiLcv8t95Qk2P6E4s3WB29Q1VAtjTnz7Dj/80NdzaTpga+0pgu7QCYrXXfwqXti/h7/90EcZrTn+/Lv+ivuvfZCYElVeMWHCr734N3npO++koQFge73Pn33De7n77+7i3Te9h5NHn2H/5ipXVgdoyhrbKJ54y+d58f/1Qsqq5sy3nuX8qzakuF+O6M5l74RSdC7s44rfuoVz3/l5zvynD5OKwIm3vW/+lNXRAbJphy99679ltD0g9RW3/viX89j//WGe+PMPcdX7r+d5f/Ji8sVV/uKnfhW/1PChH/0j3LIUwSPGfM/6j7F+7CjZdBHYZOXsVTS3bbH4gRUOfHA/F4un+b3f+TV+5qd/lIWFLquLBzj/wDbv/tO/5uTTW6weuJ6h65G6BxhNJgw2Eysdja+m9NYyiBUKw7nTT3Pd7g1MbIdPP/Qk3e5+brzqapZXO0wHDZ8+8TTnF7bo5Atc/PtN7vvIx9nZ6dNb3c8dz7mF9ecc48HsPr504ZWYrMPmoM+dty/zcPZubs1exFqq2dk9yT3LyywcuoI7Dz6fEw9+HJ6acPetL+NLXngDZqXhw0vv4CH3EaKJ/MJH3g7DLpd2xrz7zt/jc9fftyfNoZ0Szaiu6jIIWM35o0QbMUaTxdakLQiIGoqIdroFSNsJHRAXEmoi6zzlSVze/V7dwKIi3jibTkNe5qgViCsKrQzdpjU5nN03SqFuVgQdmKgJBRl5yJgR/UIIcIUUzr4FYme/T+xF/vqPH8IghoEzX4KkZgbNe4+5T1D7zmhb8mDxq7hXNDQ/5tp3wzGmap8h/+2bSy2INudoMTO+e7f5G36p82uyl6wm0nKiua3hmz//f/KKnX9NY2GrnDLe7aPDmIUi55kzOzQpA9shpDBPaHBOvBOKTgdrEmXTSMFuhOqd5/l8Gj2ZTljo9qTu8h6rocgVOjWEekpBZH11WeSQRcHxq49x1eFDnDt/mq41KOWJKXLqzBlOnzlK9M+VvzgvhNmnYssckveVlCg6HWZykl5vgUG/jwtiIpl8wEVHRAYyvkloDE0TCE1kd3uXRycTounygtU1TK7BN7jJmNxVzKUeMzp6SND6FyjahAAALwlYYhJaYnORIMR6SlVPhApuFC5FMWdMiay95pL3pVu/r8S6zZicPs2lp57i8I13fgHD6PLHbNnEEKiqGtc4mWwnRYpiUtnt5OSdDnlWoLTCx0gZHTrPcVrhm4YUAlpDYVsJbfAQ6hYgkSZeznEDRuOdTOr35uRpPhzSWtO4OL+fQxBj2MXeAqt5zmgwZDAtqesKbQ0hJEbDCbGNc93X67HY6bLQXWRSNwz6U1RmcaFhNBpj2mvbNA2OQGdphRA8tgCI7Px/zL15sG3ZXd/3WdPe+5xzzx3e0K9fd7+eu9WaB8BYWEggxyZYduwijiHgIJexi7jK2KZcRaVMXMSuYOKhHCpJYTAVcGIzCRkbQ8BgJLlBA1hSS7S6Wz2+ft1vvvNwhr33mvLHb+1zn4Rw8qdO1VM/vfvevefsvfZav9/39x329jAxrrzQVtKnLMbtVVVhawdGU4/XyErRzWfFdN4W7zazks0rNUiUT6f7kmqhv+zr4uE2gFjeB7CB9UnNdLJJU6+hlGbr3BmCb8kklLNU44a6mSBpKRalDL4D58TDI0aPUYrKVTJ0TJqqqUXmai0kiD6yv7NH7JfMjw/YvnaV/Z0DYp9Yn6zhu8CarcQjr/QCKTtSNqBN6XUixspnSV4zP5pz49p1zoWOW7dvMZvNhP3ie6y1dNmvgDJVJv1GaYwzaCt1X0IVj0LZoaq6kvdM6QlSLCluGR99+Xt51aucmsGKb8YpI0b6iqxYyclXBp6F1dt33YoxrGx5znLxhzO2hDFI/6u1JpXa1ofAiCyyo6rCWiMkNCuyqT6mwgrKqGL1Tz51x1FwarzpHXQNamYZx3XseB0VlmS1AL+AriV3EdVF6AJxuSAsW+JyyahtyScz8rInJ8PhMtPlEcFHFiGStCOnCuaK2tT0WdwLgZIOlAtT6PRc+kqvrwoAQ1Hcb5WCUvjG0pwHFG1KqCAFctCQO0+VI2TJMFatIKXDAdt1Hb3vi4PxgPpFfFT4oDAmlo0yCRoYhc5kjbwP0SyBD4HWObIv7vxth3hfa3RV08dE24t0RN+BeFpnGY3Hgnx/Gco2oL3DBnIKRABZGoUhnkdA6lJUFEPHL7+hCUXKEs2Zc5JroiQuFp/RcVjkp2WHqBIUta2JriKQWcbA4VEQNgPizaGswSMJISEkVDIFyU+EGrqtjua6LKEQxaRSFc2Uj4q47IhdJiiP8jCXT8fWxhSzoTFKl2mwxJTGlBjwthCjJLpQCsOBajWgyIPZVaEfWq1xRlFpTey9MDGUKVE+CoL4PfiU0SkRk1xrHxPz4xk+yqQ+hi81cMqFJiNuvxpnK0yVyUZ02cF7vO8lpkprwIhm04vLsYmw5moqV9MuFvTdjK7rma5Psc6Rc6bve0LxUvBBPDLEKX0o7FjJWyojrIUcE31MaKsxVokEx0dhkBaT0RQ9RF8AWsNkNMbUY7pQcpoZgE5FXTdkrQWcKH4yXdcTU8Y6YfUYrUvR7nB2iDAWsZ8qwFoMkRAhpIgxlqQkeUcol4CyWAvReyCilMVYjUmamAIKkXoZDCgtMcDLnr4LqGZNvh9CCc1JE4JCJ5h3LcwDuhqxuXUXycwZTwI6GlRQq2f88OSYtu3IwHg8FonOsitTO70CFbmDQjhMzWQt6oJP6hUwQRb2xtAYLI6POZ7P6WMk+YhWmhQTlbU4a0ga6nHN1sYZ7rvnXqyyvPLKy3ifyUkogTElln0nKS1GvEKCFuqnTsiTpB3GKcASsqwHqoYuyp45Xpuytr6OMapko9eAuLULYZaSQiLPLNqBa9DVmGxHsk/c0bjJShl+U4w5VRK2SDl+8gCgFkVcBrrHTnjtH38Sd2Ms1/NL/+eO1x8yrVtd/9PJqvywoUAXkDOc61ABFn/GAiWJqKzvI6P5N9NXJIq7b/EhEO/N8C4BTF31eVxTUzc1Mz9j+8Iu3/NHfoTJnmN9PKEyliM7J0w057szvPjeK6SUuefmRay1pJS4fv4GZw/O8uxbXuTZH3nxFKDREOrA81//Ml3dgYL9uw750R/+8S+5qE/+80/idh39vQIkpCrxn/6XL5DPnl6LVEVe/MefZfngAfXtNfx6h+rh0k+/hct/+zO4W2v8u2//CVRSbO8dc+s7fp+Tt+3y0L//WkCR1jzdxZaTNx3jRpk8Sdz15BO8/998Gy9+35N89o2/w1qe8E+u/31+bfvjfOShjzG5skV3dMR8fwd9byDOjpkt57z89G1+7ec/xPX3XubShTHHN3Z46L77+cCf+nbaNOHX/sPv8eLla7SzE8Y50i9bXv7iiyz3FqTFguNFx6c+/UnSWoWdnuXmlQPObCy4HRLVuQ1C3/LzP/eLPPfE55hfvM6tf3GN3dvbnD17kW/75g9w36OPsyzn67XtbeYnni54qvk2/m09/+l3n8Sb3ZJfAAAgAElEQVQsTzg+vM2DD7+JNzz2GMaNuXD/45z7povsV3dxOx9z+ZlXeW7rRd5+7V28/jVX+KWf+VUOrypmLdycXOfsP/sTTF65F20MPszp2hPm80PCyZL7Nu/BZgU5sLVWkcIJhCNu/rnXeeM9l/jWa+/lzY+/iddeucYvfuiXefq7XuHuTzwEr1kO9/dQ2bOxPuHFX3qVx/783dig2PueOZvzM9z/ifsYjdcYTyaMNjZw4zEpg7NGDMmtZVRZzm5OmTY1a41hXGnWasekqWiqEWfOXWQ0WQNjOTqa45Pl+KjjhedfYta1bG9fY+9wh1vbN9jd3eNofsxnPvQsX/ddb+ZMrDja3eN4NkNXjqVOnPiOJinGSKpHlwI9EW0TuMz6xfNcmJ7h6lMvsns8Y+EswdSYaBglxVz3BBt4/MJ5HnnwMfJkg2WfUBiaZsyFu+9iNB7xzq95F0or5ktPU6/zqxf+NS8d3Obsq9eYhZajo31St6Qms+Y6rt7c5eB4QTYWZ51Erythi2EzVe1ojMa7ltD1Zaw0JAiUBiJEgg+o0jw6o5k0DpsCB7vbqMqytbHBxuYGaaG5ffMmh4cHbG2s06iLNCPNeH3K6Ox5Hn78jUy3ziHSBmmIVCXDFPrEwf4+Ozs7HIZI1DW+68VEsZhZ5gHqUJwCEKWZzSmTAvRdYH8249lnnkHbhnvPb3JeH7FYzBmV4UgePAiGOioDPqMyGBdR0ZNNRdv2vH71Ck3TcvGeizir6Rdzjo6PWbbiy6aKcbl4Hon2X6OIfYCup4qJUdLYtsMsJer7D2Ng3HmgqCLXGGplVZroFBKxa4lZfO9yTpIk5j0mCfwgXgOaFEvySvZSE4ceYg9ay/dJciZJ7Ts0mpGUFCab4U8YojCHejvnTI6lJitTcKc0XdejcTSTCWPd0MUZLOfUpqExNS4bHBajKhnuZU/oS7pM6Ag+kN0dqRalflelzljM58xP9mlGDmNq6qb4qKhT2fH27o6sXVvTjEfYSjzz1B21/pc3fzmf+v99+dfvBD/LzBXrKkZrE+pqjNIO5ytiHIm0PSnqekRTjQtDQZcUtAhYnDMYbaXHKiAhyhDTwHRFJHYHJ1zxc6zLLGdHzHZ32Jsfc+w7aD2pT/QxUmnIeURKAj7FbAhZ4VOiVhmtMzZlgo90s5ZbN/fYDJGbN3Y4OJrRBTGpxMDKeB19x6cvkhIFymisUmIcqwWMBk7DAcvVGkBrqX1yWTPh1IyyhCAQIzoN4AaQwVZ25W0BhdVU5L0KqXssmkpbnLZoo+mGqNpiVaMLG0oQqjt6xCQ+HMaInFW436r8ks8t9sSyVkxmVYcIF8yg1Aap08x290jHh6xbT02HShG/iCyOW2Ir54HzmTRL5EVCzQJqHjBLhV5qljFyPF9yMrUsgqLXjp5MCAqVLMYplJIBq9R28szFwkJbeYR8hddXBYAx0MiEBpbQOZGNxkfPSbsgp8jSWUnuMQprFEaL270M7QfgYWBwFOlBTiv2Q86ZkAZKYUH7i28BKRNUKEmKarUIzEIcWVUpliOKg8WC7cNjlHF0PtD3oTQ4EotjjKGuazFl4ktBigF8GMAL4EsBiaQHJd6KXjSgyHeaWebB+agsyD4I4qYUhCg6JXEF1ojgdrjQpyYplXEYBOWPSkGRh6SUi1wACAImae2o6xqddDFpyRw9MuPGf3vI2374AWFRDOaGyAEn11eTdcLmhA898+NjKlsxaUZCGdSmNIzFRToVxkkWs1RVrpMpMpzhWg7gxWB2qVTRg+VMjsJ40EYMWrWSUyuGiM8Dqp3JWdyFA1nSMEJcNe+qsEBiOSS1NsVU1VE5ScUJIWBQ4iyuFA5pVCmT+ohkyNsMxtbyNZ1KrPRpjFvOSVhASf7bewGL+j6IiWdBI2OIZJdWlEAxlYpFDS6TiQDSsRX0UpGFyaBAGYtxNU3TYCJkbSWDOvaEUrAZ68heaO4hQt8a0I6mmshkA9ENqyjf2xqLsRml4woIoTIFjVd0PqymBynJ+pDUCY0tRgnKKKrKkJUjhiixxq7CJA1G7kEXZJIXtC1GRYkueGwbcRqsgpgCPiYm6xtgK9rZQn5+cuhsxXtGleQXLWyXtm3pfI/3QWKJo2z8wg5Qq2dmaJJzVqCKcKmgGtpojDKyJlLGmoo+9XS9pw8Rax1N3VApYahowNSWc+fPcc+l+3jogYdJvUTzphTp+44QA10IjKZTkpJ72/qe3PekIMk1lWvQVYOtNSkHfPD0PqCso4uZbCzrGxs0VUW3nEGO1M2I0EusmtZmherHcmRlpcTM1lRirFqOFDlM5TqsDhnACD2qoPmaTJIiqzA1yLmA0Ym1j1/gwj98h8CfeTjohz1J9jVUyaUnF5pkOR6yyAtd8Sui7IMpeEwQ+UubHft/8TWqPcOZX91Ep56kFF02RGXZWm/4wHu/lo18wvUrl7m9f8AyBNrWY7Xjwv2XOHv/vVx65EG+cPQ0P/kD/5LHn7yHd/yrC7zvHe/k4Qv38JGtp7j5dsVffPHb+PZv/n7aZc/3/rPvZn2yxryf84++78f4jl/4C3zs3b9D6AKvvfE15hsz7v3d+7n+Da9z8eZF9s7tstd0jLoxb3vpa+nanpcee5b5xgnmxDD5/JT+PgEwCHDup89RbYx45e+9JHtRZ3n8H76P3//xf8vFD7+VWPVc++DnuPy3P0N9dZMHf+L9XPvuT7B8aI/ub9xm5/3P8+hP/XGmu5fQwbD+exe59fVXWE5aRtc3ufCRN/Pwv3g344tJvFeAY33CByd/jXNn1zneannrj3wLG1GxiK34D1DSk1rPL//fP891e8D0wpzlp9bZ6Zb0tWX3qOP6rcssjg8J2xHVGIKBLz79DEebOzRGsXNyzEc/9SSffuk5qvoMs51ErcdsrE947E338fATj7K3v8PR0SHL6TEjb5lubbDoIx/57U+hP/0FvIXZO+f81m99hHe87Y9w17nznNmIVMbwjW9+BGc0X3j+WR656y4e3TjLHI2ut3j1+Da//Dsf4oX9Iyqb+eJDn+P44FWWD89gCWrpuWfzHIvxiPsvnuFsfx6VEvMZ7O/NOIyeRe6pTEdOitB2zI47iEtS3+O7xBefe4X9X97mXe98J+9593t4/Ik3MP5/zqLWz8DjNaRA4zRbGxMePH6M93z3uxiZmo993Se4N1/ifU98E/VoQt2sUY22mC0Tr7xymWvXr7Kcz5jnwInq2VwfY9wYY8BZxfp0zHRco2LH8vAK/bHFjtfRvqeu4ex0xrvflaDaILdn8F1msezYO9xhbzHnr679Q5qzF5jdOmShHH09JufMSd/RuxF0EZsMUWW6BMrVoKUh3L51xO5re+STBRFNSJQzT4BNpcT5X+lE1JGESEhyFhNnW4/pYuZ43omuOxlOlkuOJi2XX9lh48o16o0RMWmMqjAq06dMH8WoOuVI01SE3Emhb6Se6/oWpQ2h93gvLNOYioeCUagSrd33HSpmSEkgmuBxxpC9px/O7ZjYvnyZJ//jx3j62S9gGkd7coCmp5mtY9vA204eEdq7tpBFp6+QeEIVM8H3q5qm7HiF9qdWrJSsJJUvIa1VgXBJUfwzgo+kznPl1ddYdIl7z2/w0DRg5jtsvKFjYOyWUpFyfEGImJzRTtGfzPF+we5R4nOf+zzjaYDacHZtjd2dHY7mM2H46iGytTTRSkES9qXWBqMMtXHUxmIT6FQ8zP5/1f9Sb62O3KLfVCmRQyfDodATg5i4q1xMAlMih1hyVIGUSTmgdMbmgNMZoxW9Lo2pcZjhHFaFKq91MXxlxXZSRgvjShuRtRhhIRqlqZ2l7zt0lpjTUGQ0XetRXSCPhVLfL1upJ32ibz3ZgjHCOhCJJXitS80qJ63Riul4zLRqyIsFsZvROHkPgx+IUkqSQJwi9B6Moa5GUKQurqrKkEWteovVfHQ1lPsKtyCV/kKfgk4ilYCk5BxXWqGskeurQCWDdRNc3QBi6O0LUzkGsJXGGCf1kypDoVzMUrMMg1JIHOzsc/zaHiG1hOUx/XzGPHS0OmNCkiCCcYN2JXklKwGkSs2ScyRL9poseR9pT5bcvL5LPWt59bVbbO8eMW97+hgJBpHeludLWqzC8k5S3wwmv9YKyxyjVwkjKLWqw7MaejW9Sjwa0gOVGh7B4p+IDKCG+9Io6bVMYWQMfhIqCUsrAykEuuWS2PegFB4ZpFoMaVSXhCMZ1lilKFU6WmVs8cywWqwNtJJ9KJ1WcJQR3NBmllquvILC6AmT5iKp1xgW5DBDaY+papxRGOaYrFChR/lI3WtMp8E34HtyvyS2LfN5y3ZacugcczItSHJSyqikUHbYA04jnmWNyLX9w15fHQBGKXoFThKNftYGn3tOlkv6tqdSapUjrDVMRo7aif+F0WaFTFIojcZoechWjS9YFL5osVIWepZWokkyZUHKtxD/hSFLO6dUDIRkAfQxivGdD/gQCTEQYiAn0b9bI87XAGq1QMTIcYhiPMXtOF1QOhQ36by6JoNMxBhhLChbDrgsE/qYFDprch9Bg9OiQSdJG33rOw5ZPNadXmcyd//sFmeuWHKQyX9UBeVScojGsqnmkFeNtlarmYX4KBQ/B63SCkVOObH3phnXvvWQh3/2LqY3xmg0vk30PtEtFlSmR2dFt+y59YFDjr+mG1pENj894sKvT8k541Nicclz9S/tM+i87FLz2I9ekPehZRIRYoAMweiygWUoE+8YBMAS6pUVT4thE8olMkmDrmpxbjZRvBeMwRgx9RQPAiteJisNm0LruDpwUylsThFdTYyIWWhSOFfLPa4SuZIm3lgxhvoS6m5B+kWiEVaxYimJ9MAYaZSt0aLRjAI6DawLUKXJ1mgjJrVWUYA+KRB1VZHLRGL4LNYY6koabes0XefpAqAsCbAO0MJiSiSRWSAHh/cJH7siIxK6nCrSKfFviQWYCnJ+eSlUQpAY3mgNy+ARXEzhE2ICmsqhkTN9Enfnk1knm3/wqNhjidRWU1sRs6BgfjIjK8O8bfEx0weDj5rp+pStu86xtrZGG3ry7cTRyVym79bSa08Oohm2pqQClSd4+DVQwckiR0lZ1poqzK3KOVAKm2o88r5V1lTGUluHzhkD2NphjGV+csLLL71EijBfLnFOiqWqaTCVkz1Ny7ShCUkSc5TCKUulDJVREi2dAtH3WBeY9ZGoDNONDcZra+TQonJkbTQmJEXfemLoMSpRGQNJnqNccsCsEeBT9lPZpe5UiwpOleEOuUguFAmlTCkihQm22tcHZlWhVJ4CIYXZVPCiXPangV0h52mJsVOmSMukiLZakY0l+Q6i7IejT27hOmFYyT6qsMpKQRECVivG1QhbjejCESlWLPqWLvW0t29yEj3HJ0cs8owHf/kir799h9l4zotbB5xdX+ccm/w37bcyX5wQU2QxWfDhD/yKxC+nwHw856Pf8B8BXa6JrKFcCsIXn3jhziOPpJL8vbKPhPOegz+9e3ouVnDj791i9OLo9N+5yPX/7ikAdt73MuPXNk7/voKj97+Mv/uE5AIvvv9j8vfe8zzLR7eJlZwR60+f45EfewfVtQ2q5gzd7Jhzb32U8dqUyY89SnXdU90+4cFnz/HaDx+wWCxYdBPCyw318hJ+7PDtjBg6rl55lfZm5hPXIlc+vUk3avjNZ65wvPCobNF9gtZLeoDWLPd7DjYPyMYSjeLm7jY3Dw6p1DrqpKY2DVfpee7y77H52XO89Yk/xt3nzvC6uUFdaQ4OZihT8eLLV7jr0oNMzkxk7wwt9951nne99R0c3XoWlTPdjVu8sH2bNBrz8MWHWUsV7bLl4x/9JC899UUuv/wCuXFo5dAXPGtrZwnO84Yn3shr4QZbZ7a4OXH07S1m+y1hseDk4IDZ/h5x0WKJ7N46oBmvQzD4KJ5LKkLOFSkblr7mhcs3OHPxKhv33MO5hx9l456HufTIY4Ruye2bV6l05J1PvYsZ+3S9yA+v7tziM08/gw+Z1id8SJzMF2zf3mb/8FCamNJwffYzn2daW0wKuBzYmNTUBtp2JkZ/OLSuMU4RmBM4ImWPNiNyWsOaddbWN5msNdTrDSnDH/vG9zE69rzw3Bd59qUXODk4pA+RhUrkmKnReDLLFNFJMSrG4bFf0i8DjRXmqlZmFQcZlNQ6qgx8hD1ZEbKl6wKDbnu5WHB8Mhdt/WiNdm9G1gqsxo5rpme2SKlHhx4XeqoYqBtH5Sw+deLP5ZWkehTT4sV8QbJWdOWrGuy0ZswplSFHLw2E0ihtUElK/L73HMxart+4xUP3v4Gd/SNu7x4QsqLtPPP5EnKLSYnkNfsnC/qYqYYiQcsDmhUslwsODvZZLOdEXdhiA3iBXk15h/1RWMTD5FTOeB8jbeuhD3Rd5Nq1G+zdfJ3ZeuSedcOjIQ7Qc/ELY9VHxqNj2tRjthquXX6V66/dZHtuefaF59g6qzHjinPTKTsvvcTOwSF9LubjWcDv0jLJUEEJ5TxrTUiakKFLsSTn/X+9hk80sAZkQJJzEtNLFE5lVBJTUhMlXQ8lgz8fvaQEZhjMOTJioVgraIwks7UDO6CcYCkVL6wy+BwAjIHWr7WWiXXOxSOuxNzqQA49VkXGI4fXlj54FvM5qWupUxDRZRbmZeg9vgssQ0RVYGqHqQzOSsJN7wMxeGEPoFA5UznH5voG3eYW7ckBxiapH1zF2mQiZ2mWlBnjLLqqUK5iGYOkqK2a03KFh7U+MJi/7GtDMg9ZyeAxR0hqVWOjIKdIzCLpznqQomtMdmgjNvrDoE0rVcz5peYTPa70YylJYo9YXaXVz+67ntnhMW03I/ZzctvSqkBrMjaWhlpFqqYuso/Spg8+ElpBTuSQ0CmjfSbMenZuHaNPem7cOuTgaMGyD/RJjHkxEEttKnWGADCxOJlrnTF6Nb4S1tNQ4d8BYKTyrApodCer+fRQHozhT5EBVWpgMcRMOsp+Q2GLayMBCcOAPUSpr1VJQBy8C5NFRt7idWhLep/RYMugXysBEnXO6JJeGAgkBHQ6fZJVkYDLcFyG6AnCEXnxKv7wNXy7T+6PMKoHvyQvltB2xD6Rlz1qtiS2HXnh0cGQIsz6Jdu+54COvWg5NA2z5Om0I7uijlDF782q1XA/5VyGZor/3OurAsDIZHzwhKwISuOTxBoOhpWhTOZzToKcGrCVw1YWox1ZG0JGkhgKTUeyqgfXZHXHqpLvc2qQIlN0OE2DWDEJShEaYsAj3gshyjRbKUOMkb4P9H0x+SzsC600vQ9kBLW901hneN35ZwODRBHF52O1+ecVpSwVWpMpPhaDPigljWWC9z0okRRoq0kpcuvPH6GOFOd/bkQGjr+u5er3H3D2N8ak56y4uJcDKCFmfmhF09QlelI2K4OSOCsfSuGj0SrIAtdemnutmV/yPP1DV1le9Dz4kbNwK5YEFY3SDmVrtDagHLe/6Yjn/sZN3vh/3Mf0SsPs0Zbn/tZ1Kv8AFz+xBXXHMz/6KuuvjnnoZ8+TcuLT/9tl4ijyln90SS6PUWgtMgyZTHhQGWtkgwvF+BIUurpzA5fmLJZGqVIaZYqpaYmUNMaerqOy+Xof6EukZeWcXIeygQ+sH5ANbmUyXxrQmESeUtXy/QScCOQBdRzkRWmIUI0rtFbWi0Q1DakjIQQxlbRC2Qsh0ocAPuJ7L87qlaOyBp0FCIlZk4wjK0szmbI+nZD7Jfv7ByS/QCG6PR8kkSNkQBUpB1k20ZjIcQDnRLokrCcpKgqxTp4rrSAHFFEOBCPrLQA6KXyWtJG571GVw9qK2AdCFwSgQa5dALSxq6m+Ch5DYq02jCZjaidg5njUEKPcp8namKg0B4vIznErkiojkVIU1Nx7z2Q8xeqK0AViH1dGSUOcm5SUUghpLSwr+a9DhcEPQkxBXTmQtdJYqzG6lsKgMGlS8YjJXnF8fMzB4T5ZGZyryEn2thQDXddRVa4AiuIwbZTFVBZrK5nEFJ1wMplsRPaSUfg2MFqfsLG1BSTR12rJM8pKEX1L7Jcl1lb216Qyyoo+2BXgKw2FXSyg4B2gA+Uw/tK9cpDLyTRM6nX53KE0WkVxKdKVXEC3kqw0UKOVXPzhJsizrVVha1GKC3DakpWm1x1RC93avTLBEsC0gEy7Oh/oYyYbRyCwd3TA7mzBcafo2455TCzwzA920Dpxfn3K3eMt3v7hN3L9V27hTMVoa4uvf8/X8he+7t1c8vfwO/ZzfPDDf45XXr/KSDtyiDz5nZ/lG3/s3bTbBp9qjJty8+w+bM258Uev/oEzr60XfPrNH/8Kp+GXvuJGYPZ1J8NxQLaZ+msy//vLP4Vbm+AfSfzd/Nf53t/4u+zuHnB4dMjOx99CyIH773+AzrfcvHGD2ckx419YZ/HAEf5NGnulog9z5vOeaeO4eH6TUVNT/8bdNE+3KB+I91WkpGijZRktaX8TO2swaz1dd0JvNGm8RjAdr9444vCaIjaB464nYumWJxACU+dIPmBwtC6wfzinDTPmKZCUwqGhk2lyMIpURRbLE/rtnhujl9m79xbdxTmhm7AxnbDsLEnXNHUjazInDrdv8vrLz3Ny4xYvfu5JZm8/4f/88X+Ou/tevvG/+q9Z27wLkuK3P/IpPv17XyDMPU1jyXFJOJphfYRGGHuHB/u88vKLVE3F7h/fZnZ9zs4rFarrSF0LXYfLiqa2LNUCZxzjZp2NtbOMmynz4wU3J0um62u88z1fw2Q6xm2c5y1vfRtve8dbmJ7ZYtFX/NZvfISPf/Iz5NjSWDja26Hrllxeu0y+Zrn20SOyMviQyalF6R4fZdobogIl+8BhgkobVIzoEBg5CROce4/e2EA3E46P9qisoe1PWJs6IOL9IZoerWbEeB1jMvVYM/8rLb/9W/+Bh8Znma6t8f73vofsI89fe5XPXnmRfLQgzFuCVZhGl5S94mafNSEKAzFlhdMOn4pMQ2kBtTIoJBXMGTH81kmMtitjWSpNt2xp6gpXGXzs0VaxvjHm+KVd1vUai/aEidZYl1lrHGe3ptSVJi4CBA9BEpeImRwz0UdhQZQGS6shVaxsN/nUDyTHRG0dGEcsMlPlFWHR8cprV3nrm5dMpls8/PibmK9v8MKrL9OGVBiJNaaZYEdjlKkERCjD1WHvWyxm7O/v0bZLYj0iRE8fPJ2XQVhMp+A4RpNjAZlLLStnThYvpZBQ2rFcdOwfb5N2Z9h7Nuj6bsW8GIAT2UMiy919ru7egs2Kl575As8+/TwLvcWNg5ucLGFB5MxkzOzKaxycnBCpIafV2QiFzQhEpeQXik5DHlVU61Ooqv/svjZcc7U6P0o9nCI5Rxm8GHBa2DEmU3zRBGDwMYhnRiqc5ShXRoibCZeFQaOUwmpNyoZYBpky3RVfPFJCKwHNUxrWQ16ZNqYiOe59YOEDfnlESB1UjfQmvhcjeKuolEZyMQRc1DmSYk+KGZudyNi7CIZVDKzOAtRo5DwMnYeYGDcjRnVDTj0GQ+VqqqphMh4jkeEQCSStUbZhERPjyUTu9R1DseG6Dr//Sj2IylKzDNXO4C2olV71LyuZTxaZuCnXVJfaI5YBiCT/Dd8nEbNIA1LO9KHHB4VWTZEklzomCJs49AGCpEzJwCKjS4xyH1pi7IRho6TfUCUJRKnilxCCsAE0hNazffuI0PTs7C1YdomYDeiMtplk8rCUV0O3nCUVJpXBGyXxEBIxFZCmDHuVGdj1X+7RUCrgAoQNf3Yn20oXaTzDcx7TioU09CBOyxAtr2pqVswPjMGWQbJSeWWirvWd47ahd0yQIiYVJnSMeCTQQqFL8kr5/hmgPA9kVJqR/W1Muk2jdtBqD9QBig7yApzENqvYoWhBi4cOeNCWeU7cCHOuh8hNFPuq5oRIRySqDC4RifQpE2NYAUArc1S54Hcws/7g66sCwACZ4qUkyRkhygWOyIOUTaF2ZYn4qSpH0pouZVIfyTkImpUEPcpJ6DNaywMIA7qaCbl4XsS4csjXBVEUA1CJnTS6RF0aRdVUxJzxfSCELKcREoElEnGZOGut0Rli9AQvxp95KLyhFOTFf6CYeIrUQiaMCieHbh56rMFFGDF3SRSGgUxyDYDRWFURlVjZaCMPyO57F7z+/fu85X+4m60vTkgps/nihHQ2i64qJZzRMNK04yhGpRnUiSFGLxv4GIxT2Gyoo8ZvGZLS1EtLX3kUGaMiSiV6F/n8X7vB4x8+x+9/302S9gQ6QlJkU5ExGAtoQ9SW/izEUaZ50TF6vqL3gTBKLKdC8VRrisWlngufWGf9uYoUI3oO8wdaQt+uehxVGqmB3qW0Jg+TgowYgwKhY0XrQimyKpFa3pOP04qBo407Ze2kgl6XCKXgA8FHIpFg1Aq4IYsJaRriblNp9kOCojPLKbK+OWaznlBVrA7KlNMdPiADaFE8HgTWXn3WmESjm42AWdpqsimobYr4EFl2HX3X0bYtldNURsvXfE/nE10ENxpz36UHRZpSDpb50QlWSdPXh0jnA9V4jLGO+bJj0XaIPbAUqSBofVSUZrdszkBloLKa6aRhXGnqSuNMxuqEsyKzUGZCnzIz37M3OyZqg7WO5WxJN2+RW2gQ+EOhrV2xblTyVAo2JzV3n9nk7MaUzfUJ49rh+47lsiXnLBOwo55ZOMDaihAC29u7HBwf4L1HqVPWlUKhM18CGg37xoC2G2uLU7og/zFnkj+dArmciCnLVCoYstXlEMzYrCS+tu/RzlA1Ncoo+tiS2lkBEzJOS9pLSjL1o5ikauPQusKnjmwM2lUolWgahzKKLibmXUsymunGJnXd0Ldzzm6dYa2xHOxts2x7maKlDq0tVZHdZY3cRxWxOmNUIiuJHBO2zXBA5zt+L6yHATjR5eAlCtovjqdSuAyGqHp1iAuVPOUhXhZ5lgZdaqJM/PJQ6aIQ7XFAYZVQlhOBaKCchiMAACAASURBVMCT8Vk0k4kAKaCTR6tMZzXBKGIFrQrszw+5sZizlzUqaY6PF+QmsjFyNER+7gd/Fc4bAQR7L0W71jxVP8VPjP8vAb7+y1A8c8TxWwHL9Y6jv/yUJBgqYaq10zlu2cg+ZAqq08m0MTQ9ZuHkugz6Wjid4qyucSabSKx6/vvP/a/8zKP/AGOnTE6+QZKncsTgePPmNzM9d4aN6SZP/s5v8wsf/gXmTx2gnSalLZzZosoRu7nLYX2Z+sxF6hx5/OGH+BPvfivvfecbeGr6W1R+n6br0dawd9AxbwO12qKLG+gMul2ylh0b9hyj2rHb1xyrq4QI80WNP/ICuBGpchazbS3pVA0VfdTM+pZWSfx0kw1p5mn0GDdZo42JZepYLObE1PLiM0/jH+wxd3lCN0M72Ntd4MbnOdzbIx33pJhYH1WcW5+wd/M20ThQmoOk2dg4z9knnsCtN7z6uWv87hdeYVGtE4i4cYvxc+bzI5aLGRvrcETEti2bdkxMDU6NWJ8+SLWxRvRLVGpJ3ZwcO7QKpHbOxDq2Nic8eOkCF+++j92DfeLFQ2gNB+0Jl3d2qG4ccfVQ8ytPPsey7Tg82Of6a5dp54c0LuN0KkwyaPsIwXA89yQiIWV0XFIbj60cWIfW4mMVo1zjmDyKnqgCKfWQAljNgw/cx9rGlGtXj2gXC0LfMq3PsjaasJyfcP+lc9x9YYvt7Rvs7+1xMpujcmR+6xqvtdfwMTLeXOeh++7j7jNjHo7nsGc97fYBu8sTYpVx1lBZR7v0WBTLEAhJ4WxFwOC0LUMMSRLQyqNUBVhC51E4KiNghlOGSVXTVI52PuPGrZscnMzp2jmuUqBbXB05uHGDJZlxhmp9ndpKMlYKHX0L5ITLBp8MII3iKYU+Fe8f2btyXhGpZf8PgawNKefi52QKFbzmlSvX+Nwzz7LRTWmmG5xD8dL16yRT0cVWZMC9x0fIWZqNoaEpu+DqjBmPR+TxhPF4TK8UoZzHKbNK2F2xE7KAx8PoQHQ5mpyg9xL33vY9x92MvTqyWC4JOWKVXoEXw/c52T/k+aef4VAt2btxme1bO+Q1Ix5dacksdBxP18h7h/hM8cBaYJEpMAUYyFqRtCZZQ3aaZCqmd1/gnjc8ytpd5yTt4A+ZoA7SbnlfZTCnT+vhwVspBS/7jpb7aApj0pSzt4sJlTK1dhiViSYRdMaS0TmhClNQZwHIDAqTRf7ry/1GU+pHiv+FMJ5TYagaY4pkRIIBOn+C7+Z4V9MnR0wek0sfEluij1R1jSGSY8Bo8WXROZNCj6hrUpEm61VaBUDfDrWbY2M6JfiWylh5387hKgcqDO9UjFWtpVEW29SEnLHpywEMtaohdfEkG742sCBykZDL0DsTVZTrf8dQd/CoK3gP1hnsqpEv0ohi862NPgUWkidE8YYwtqaylZjfl58fY6RvO/q2Q5NKj8MK3JK6nlPQyYg3hSS75RXTihhQWPCJbtGzs31EGHuOZj19UCRlwICuQBVfMGOTyKCDJWdLIkv/MIAyOkmtkoaI3lMD1OGmDYbmwyBV3/G1YUA93I/TkkZYDoORroCD4sODSuK9MVRcMQ1z2ALaIEyTAgBK/yi9Z4oe37X4vseFgELhtKbP8m9iiPjgSUYGZn/wNbAwNNmMwW1hR+eFndGPUIsG8pIcFtAuQbeQOlTnQLfkakruA4s2sBc9N0Lkuu+5EROHGHpny56oCXh6DSGvLtfKEmDoj04TXL7y66sGwLBKFxZAQYQKeh5TxmmLwqIN1K5iPG6oaluiZTIxBHkoS1ShMohuz6iSBJLJY4U/11NfH0GKqCgLzqxQeUfOkVgmfMZYnHOSL4ykWRgzDAw1MWZ8jJLPrR2OhnFd0VSOGCNtTKefheJAK25Rq+JUZTE2VAOql02hZcvGqnR5kJUiJNHopyLdGNyEFdCmjpX5URCAo1OJe//lGSYfX6OLskFnnzGvGPxuYhkzfZ3Y/jPHvP6nDkBJLNvb/+r95GeFXvXyX7/NznfMGO9UPPSz53nhu28R7op847c8SjcXnf/O3glay3Tgke/ZYOfPLgA4OJjjDyWqKsQe7yPJ9+ScWbiK2XzOPT+8Sfepju20JH88c/EfTNm97wi9SMSuZ/x5y+R/hNfTTVJK3P/+Na5/aMHr1Q76tTs36CzZzvIn8lmLj8GQ9uKsFTq6LjGsORODJ8WAzvL1O71JgJIMUxDTO9Fro5j5DozQjzOJZBJei7dG7hWVh9oZ9AiycZArbFVhbC1aTA1ZCROoDz0xgU+ZgsFRtkIBW8jEnIhZqHxGWypn8KFHAeOmQtcVeTwm+oDOmcadxxkF2ZNSoO1b5m3gZNGDqSUVxRjW1tYYP3AJfekCofVoYzmeLzhaLLDNCKUsef+QFIWJYLXFqMHNQfSRutIlwUSmB9YoxrVjXGvWJw0bk5rKglGR2pW4VjNiGTKHywV97FkWs0tcRTUyqKzFk0MrIgLYJDQ5BrLvMSkyqWrW6oaN0YRzG1s4o0hNQ9fU+OCZtz3VIsgzZDTeR04WRxwdH+G7iMGUiWEEVIm3TeBZgRhGadCSsW5AAIuc6NsladEJdTFGASmseEtgJCc+BgEvcopCh9WKbCWHPC7bQseEpAI+SXlaVRW9j8wDWFuhMBjlsKYmIUyYGDPkDlMJgGaqiq7t6YLCmpqRnaCiZW18hje87S2M1mpeu/IqNy+/jDFHKO1EJuUsKYt7tsqiRcrFAIpYKMhlYrWSdpQ7L/9fAAjRFJviayKFQlodOsISy1mGGafPkjyrZFUO0tWIEIaiquyRElmbhCmni8RQCZU5qRJJnQbJX5HapIxzBrQieY/3Hl05zt9zH/M8or92TMch0zylTTNi7FFOEevIj/37/5krN/b46G98nLCE7Ma8+23383c++CcZjx3X9ha8envG779wjU9++gusrZ/nI3/z1/m2J/8K/vWKbBqMG/Nvv+uf8r5f/0tUe2O++PDHUZdmbPyr+7nrwbv5pb/8T3jv3/xWtGs4e+kBgjN0SdFMz9IZy9wLc+Z4b4+dr/s8z37nL/KZTzzPYz/5QV74Oz/DT/30h8j0WJOYP7rkF//dr7NWX+Ds1jnaxTHveNtb+ZPvezf33n2OkBXGOqxzvLj2FL+5/ov8rYd+kBA7cnvEvWsGv9ylWxzzljfcTb97TE+iNTU76gDigtBratcybjR1jvQ+kqxDmQq0Yzyd0Ew2mKCFBdW32GZCVpEuzKknDcZXotEeWZwZo9OUJgVMnbG5IeWaikxTj1nLI7RKrNdn2K9vc3RyxPFRLYBdzOTuiPYEqGTl3H/pEuubUx566GFyeAO/2fxrvNE88MgjnDt/F/OsuNp6TpLGbJzBZE3fgcmB4+0bjM/ei11bot0RjM6zdfeYZZ9x9RXOnLmPybmzdMtjfHtExyGhnZFzy2hsGTcVY2OpY83N127z6eefYvu+Wzy88QTpMNNQs3/Qs3/0RZSGxWxG4yy1s9i1CSr1hH4pazQrQpQhQ0IRgzxTxtVFwpbpfE9IiKzVgDZZgEZV0iFiAU0N9CcHHLWHzA9u4VzDeKQJfkasDecvbvKBP/tf8M3f/EfZvnWN3/vdT/Oxjz7JU1px9swWTSvg9uHshN9/7hmCVVTnNzmzdQ69tok93OFwOSeESOMsxotfg46grcO4piQ+GKF7a4m6JEPCgrFkBcbK7yNGTNFTwKrAwc41Xn71MmfvuhenAuPpFu964gkeeOwB8nyX9uiAvMxiBKcsoAlJ4Xvx51G6x5he9hhbzDTLLxlcCegaQz+4GUsjRonVNAbdOFJI+FkktZ6d7SOefeYljq8fsn3rgPHdd4FKuKqiF90l49phlYFsxWBdUajasOw8V3ePeOnGDjHMqdY8ya2RgcoY8dTKYLKkcQw7Y141FsJIi2hissROcbycscDDqMapKRaDbhHqeSXnpiogTc6aw9mCK5evcmO2Q9/PJBFCyb3LUdN3kc4lYtClaQ0rIFdT7qXSgEcR0TGLabtrUNMt6jNnMaNaGHilC1NS+q4mw4MfAnoY0hV/CmUxypGz+FT1uUyOkSQ2V49wzQgdMq0+Ji8XAuIZK/W+yyQdCFWFLyzsmJJ4uunSH6RyVQtokpSwZkGM/XPWhNCTfYCYhHUg3aOcN8bR9T2978CIOWPynqSygFDaiO5WR4xSNFaSUYZwgozCY+gRA3Jb7q/O4Pue44NDXEqkLqBiJPU9wbdgxTNMPIgSpqpQQJ8MBsPY1YybmtT1UvNw51kLsgqHWPPVlJRYWGxaFRZKKOyaIEaqWY5p8cFADNu1sljlMKYSj4rBaRvxIYkhYF1J8WNoRo0MpaI84zFntLXCrtVSM9wpG1BKSaM+9E9DLWKEAWIy6OJXk5EUtriq7SPzeYtNmi4EASa0+O8YjQz/giEiclOlFUkPsla9iipVKZe53el7yki/lhTEsrhjkaTL2F2q9+Hf3EnQEIZ1Lr3IwFQplU9OxJglEtZ7eZ8FEDFK2N59TIW5rfDRkrNDaScDrc6TetlDj0NYsd40jlwA75R92eMsNleQ7enPL8NdhvG4cfjesdjuqI4WjLLEO6Mh9xk/C+S5x84j5gQ4grRI7B533FgsuOUD1xaeG31gOyWW04xSDm0Vxid0ENmPUhZl9Wo9DmOypAD9pQEUX/766gAwckbFtEI6KVR1lcu0DSsHQIQcFSlKoV7VDgWYGKnLZ/RRqPWRtKLi5ZxYPtBz8zt3ePzv3482Fa6W+LFBR6qQ6E4njOY7kMtMVFaMg5RMy3KUh5Q8sEXkvrYhoLQqwIc01TGk1QpWZaOMPq4ca4fNdNCqxdKApyRInC7/pu/7Yl5Z9IEDYySJgzdq8PMQ05NZ6+nant2jpTQhScxq7E86ltGzXUN/IbD/zmMe+LbzoDK3fuCQZ/6nazzwTZuklFn7gZr9b5nTjj07txbc9UMb3P6hQ67e2IMEfRfZ213K+ldCU5zNJIf+4GDBfKeXzxblgXZOF4fcXpr2EDmaS3yq1pq2D+x/7wLzSxp1JRBi4nC2WFEn0wjaNwVufnDO5g/W4lMCq8CIPCD1Oa8kPaN6RFM5LIrKKqH5R9HEY0xJL7FUzhGiJ4Qg8gejhOVgFKOmEWOwGIX2mQKtt2QaUA1ZBezUspeXxGhRc8N0kah1pp1qemMJvUXbCnQlWtEYysEq9MSsTEFZ1TC8JmUBCmSgnUg6o5wCFYmhR8eIBtbqycqfYR4DtXHctbXF+mTEbHFI55eYFpLxLELGuEYKtxhBZ2oDlVFkZdFVQ9YJrwKmlinZeFwxaRps1mKkqGTyo5wulDx5+Np2SfBePBfGNaPKMG4co8owqg2jytJUFmscIWpy6hhbTaMVyVjqekSXDH3sIWYqq1CuNKgaaeCDJUZJJBKzMNnkR65B60SfE1Vdg9WkvpeGP2cxOU0SA2d1hVYdISZ8H/DeS6xZDCgElIlyTMs02dkVpXTQUGuU6ImDpM9EIkFlmUDEANFIlnguCL4WbbD4jpiSMGPQucfYTJ8zPoqpbDIN1WhKMiOy0mRlieX+ih9EAjw90PsWoxqO2p4UFWemG0yrdbou8Phbv5Zv+tMf4JWd29yMNfX+HM9Noq5JWoN1hL4Xl/fCdFg5WGdVdJiQcigRsAMDRyZUOSBsBwWOjC7540ppqMQzKHbdCswIdxhOyRGlV0WuUsUdPEaZMJSYa/5f5t40xrL0vO/7vctZ7r21V1evs289XIYjihIlS+YiApJsyoIVR1Y+JB8MBzYQODEMyIaEOPASAYkNKAEMwUhgIxAiJEBiRYBiIYJIUbIkUxJHFNeZ4UzP0t3T3dPdtd6qu55z3i0fnvfcaiqm7MBffAGiWT3VVfeec973fZ7/81+MHGqt92I2miImiomvsRatS3RosV0rxlVGEVJBGxQFNSoFbHKMyhKTNM4rpsenxNkEayJrG0PcdE7UhrGTOOUbt97l/r1DiUc2YhI7PrzLyck+Zdzm8miTcQkbF64yXz/g0kd+gGrnK1y+/gNcuLyL1YHhVsUXL+7wiR/6s1zsHqed3OfYvMlf/Y/+Yz70PR9ixx7z+PUNXrt5h/nxKWF9yNQrTiZjvAtZixyYTs84eWxf9tQH99hePiaxfiGidUFoI0RYnjqW5Rn74wkj47lStlzUMz59/SXsYERQhkCiVHf4OgM+unGBd++/x7yZcu/uEU9du0zSimeev8LhnYLnPvAS9x6ccK+8xbVtx4c/dpErFzbZ2VrnjRtv87VvvkZda9bMOlvbm9im4vITVxHGahRJUY4176PjUkjYUkBJHwNGQVVYaawimcorIBVairzJZMG4muG8QelNUlDoMMOGyPz4lGp9HUi4AOO24ZMf/y7K9hhrDNYmXrx2hSdGI5oIaW+NFz7yYQGUlSGFZ+iWHc8+5hg+q2GtY7KzYPTEB1hbL6iritmVd3nyqSe5op/ELxe08zP8ci5sKjrmYUKtHNc2dnjx2nfztW/dYDjc5eJewfWdl7iyc5ETN0Y3noOzh8Q0o4iOsGTF5EzE7MGks6xBijjxYpJYeW0tHpEP6nJAmRLGGrx3GJ3jnn0gqUipDUlZUhc4e3gqU06n0EMFRtHpJc++/BF+5LM/yuPXLnN/PsVubTO8ehlXVySlGGzt0E4XkAaM6iFGa1rXcXIy4Y39WwyGA9Y2N9ld2yHFyFZR4E+nvDM+pbIGY0taH9GmIKreVweUNhLNqg3laC03Rpa2BaUtTluCT3TtAkXLeP8uT1y+xPbaED/TPHjrJtPjh0zH76OTZ3t4FcOIyfQ+ydQ4LIYKYzRBTfAsSKnA6AFRqaxLKIih9wuI2MyiJATIWvaoNB1igu1dQEfNcuYZVZvcu/eQN199k/2H+3xy5zOMCsNJCFhlZYDUNSzHY9zcU2/I5zZRqO+zSctJo4hre4zMurCMTZmbt5hlBPL7zCNnf0iOpCR1T2tD44I0MHFAMjOc9uhRze7GNtttRx0ltr2VNpkiFojRYmTaOY7PZpxNljgNwcIgtbS+JcVIrRLOAnpIUktM8MJaocBQyzmYYvYhWaKdJwVDSJb3TxfcuHef60/u8cTWlX60LP1yArSckalv3JSATcYU0hBj0Mg0PJkCyhFd9LQps426wEZtUaVmUlS0UaIofV1SDyuR1KqAqysWumRU1lBG6AK2LDAuyT6TFFpbvJK9qFSWQllJlvMR7RMFBpUMhITrAsOqpPGaRbAENFqlbCLqsSi0EV8MV9bEoHFRvMp03yCTxJxdKbnuukApQ4Gi8AGrFQNbMjubEGYL4mJKZbMZJh5rClKhCd6JtMw5EpJaRoikzonXQWEIUcDOkIekvW9EP4fo09RiEvq+LkthLzupn40yqGgJnjxMFV8nrS0GQ6ErdCqJbQ9sGOlJFKik6XwjyYVag7L0qR9KaRnGRZ8HzNAERxs8LptcEoXlnJSAVxI2IGzWlFmzUXupf7uI1QKEeq2IPpDKLBGLitmiQZcaZSKmVJCseNIqQ+girXMSVpDEgBwVSDFAMiQl8ax9vZuUoihKYebYQkATQUJlqCOmhJxzp1gNRb9NYpu9LVKEkMTKQGWmarYdQaWwCkNQgvgiycsGZSqCSfioiakUhru2EGqit7jOMQ6OJkYaFwlB4ZTEwRobUcaiKTGxRCWp4TNlFp+fE4USP5dOUZ9G1MMliQ5nWlALVDdHLRv0osMdz4inLZx1zNvEwaLh5mLCQx84cJ5D7zkrDMvgsd6TUol1MHCw9AldaVwMJJNh3h7IUJrYG6V+h9d/GACGEhp6VHD8n42ZPrPAe5lqahTb/2yd6k2hC3mfWC5EGW8b2e6iSitKUUyRrnNEFTIVWx7C5VKalNPTU2k+ajj8uVme9gEJLv69NZiLuWKf1pFUQhWlUO/+0oLm40J9jSlR/UFJ/SsVXXDE5EnPBBZ/U9ylJeZHGA+jfyp6OZX6iWw8l4ok1QOXgujlaWTK7yEmuQ5VWZJSfl9KkGwy5VAMMsgurtJkSK62Zz6by88P2bhUaYxWous8UFRfL7j3j07kGugctBMjVuUoRMDuGzZ/uUYTKdsNRq6gs0Em+INaUGDvsdbQlrIQSmupixyxmn1HCmswpqIsLG2RWHrJAgoxEELORgeZRDn5b+KroPPwt0c0e8kIWUISV+7BSWIQ0FozGNRsrI+oS4uOkY3RkFFVkVyHbzusUtRlQWktKUpMaUoRa+Vw1UZRVSUbGxsMhzVt1zI5O2O+XOBDpPUFTWeoiprdy1voMOH4eI5einSjsolUaJnIh94uRxDOEJyYLqUkZmHZkVqtEmf6UVVarRGl8iQmP7AKKfKNgqKwRKNpW4k6293d5eLuNscnmvHpsWhpTWDeQtJiviSGS5ItXShNUdeYohZfCi8T60RBXdeEVlhLKiXROGpAiSGWCohPATFr6jSl1QyqiqqUtJOysBRW6J+FtcQYsEZTlQVVURK0eJDEoiD5RIgdRilsIc7yLgSMkoNUWfEDUUqK+66TCDpjVE5zcTSuoXMClHnvMcU5HdJay2i0hlJL+hz03ntE4mojSVcURYUqCkLvhWE0ETEMbpXQOpNWVGWF1QkfFvkQS+cgY34+YxTn/ZQ0aChtRVGUaFVgCyiiTLGwNZiKarRBQkAQrbQUAN7laZYnBkcIknnuYyOU5NEaw/V1UqEoBkNe/NjLXLv+HOVT1zhtl9z8oz8UB35jsWUfHQdomfSm6PExyCOX+ohjv5qeJMSjQxJ5RM5CXpdK66wrz2w4BHT1riOjNRJ5p+SgloSotNrHUo5ZS9EJAy2P7IzOQCIIhUMlQeyVRGA750hJNMEqg9/CuBL2ilUKbUtqWxJDZHo65e7du3TLyOb2Jsu2I2uyaDrZV1597QaL04bghO3i2xmzheWdBxMCI7Y2DKP1bYanHm3gbDKm61qODo/wxx5jImaqWFxfcu/giIPDlqPhhNNiwcPTCR/TJT/DP+TXrv7vnL31Fot5YrS5ThcibfQMyiGmC2ibUCPDuBCjyuFgg52tPcqy5IlrT+G6wGKxQGvN5mBINAuKasDseMz6+ogv/vbn+OBTF3jihReJ2Fw8NaTomM3GzGcNw3rEYy/scGFri6KsWF8fcPmlD/H9P/hJPv9bvwcpsrtZ86ELT/PCs08xHZ/w6muv0fmO1nWMRiOquma0sc7O7jbWlJm9pNHaZEpoHxOYsgRLZUqupiyLb9vPHy3+lAJbDNgv76KNFTNk19I2S5xrSMawd/kSCrh16xZXn3wWrRUXdnZFo90GDm/fI5yeMdrd4oXn9njqiR2S0itGlTxX8Mv2Pc7UlIfmy/zAx59lzW9z6cpl7l/6HD+4+718YPndqzOiaxt57nzCtw49m8L4hLe/+Qa3bn6T733xOeYfmmMfztm5ss7J4YzZ/QNUiLgIRosJdMzTwnyaAxplkshLtUJn89deOhDIflnWiPu81qAj7XKByjR22X8VhbEoZXEunxdBEX1maiTPop2zu7fN4489wbydMpmc8vY779J6h9aa568/x/xszunJmPF4LNRzrbgyvMJ0Pme6mPNg/yFKa0bDEeubGwzqmsuXLlEPG2aLjuVsIY1bkGGSsYYQPYWVsznEgK4qaX5dSyg7SYkrR4RiDRUSrl0wPriPWzakVHN6NuPGu++wtm7Y28t7ZExi8DkweB3oev26lRStGEugkHopOAGJ4iOMMiPrXyMsjkQiKYuPER06+exeTIEnZxO8jxydHrPoliwWU6Tay/R5BZsbQ9rlnOV8zuamymd1wHWew/1DHjzc52w2JxWOsizwvvfPktQSYywoGZS5JD4xj1L5fcz7khfKeYoRXcDFKxf58DNPs/vwiKqQzyvv7TxZICmYLJecLhbMmiWpsrTJkboWl1mHMamV6aVPWR6bogySMhMD5IxTSoAJUVYr5suGw2Mx/j1fz4+8hFbHquhdvdRqn9ApL34FyihJUDMFxIgLkUm7lGuUWUzGOUxloS4yQKJJtkDZEmULqa8M2XxSfNFkSJjyBiBnTT+BVpCbfrVab4UuGQyGVMsRi0UipizHzMtLCBySdIIp+q6ePETGu06IUSFB0UtQ1SpeNOXaLmZpYtc01NZSDQvKqlpJKJIP4p9hFDZLsyMKm801UwzCzFb9beqBA0UMmdmthPlJz1bodQ0p5rHCubSkvzcxpZVPV1+LS0qflsGzEoCj77mKIlPjiMJC6u92zOd4EMYTMWWQQjw4VH8vYiT6bCuQEsEoTP6657CbDHBEH2XQsTo55P56H+V5UsK8VpBzIoTRUBhDaSzRqLx+yQPvkA02G1CWorLYzDLWyqwemUfvfR+28GjqpHyU9G3hEOfrIK2CEcjsElJarafz5zGzEfrFqwwJ8RYMSQDXpBKdb0ltQwiekDyNz3G93sm+FwMhOrxv8LHL2GGPloDE+EDKAIZJgAc9d+j7Y8KNe4T5Pk04IIUJKixIzpFiopl1mEUkzSPHAe56zwO/ZD8ljp3nNCYWlHQpUebPaI2hNgXWexxyEcX0n+y3YljpSv6U138gAIYiWc3hT45hbtj4F1s0yyXL710w/28WjH61wH6rRJHwLuJcpFnGlRssmRmhjD6nnyTRa/WatvbM47uW2fgYlRT7v7rE70Uu/ZdDtNI8/B/mjP/5KU/+xKY0MhnAQENcwuyzHcd/e8nuf11S3jC0H4rc/4dnbB+MKD9nYBPOfnrO7v88zPWCTM/jJEKXmQhRmnSTl+qKEpX3UaUV2iLfq9LqwU4kQtfIBpMP3dXmn6IYCiIxPb0ZJEFMgvpNNuZmWGlDUVTUpSVehMmzkWv/xwYasEPNOx874ureNv028Z4+xVrD1QtbKDzVtzT2gmG8PWdeO65c3JDNwjnZaLdm3OGUy3ubbF0b4CMcHcuhX1cVZVVSWMO0aOlaoU3aDLx0RWL3fzSMBQzklQAAIABJREFUbhakWqO1YzSoMyijiYNE9VrD5f9lk2IkHhBWi06/BzpQmph1XpW1FEZRGEVZifRoVJfQabwRkKUqLFqJ74QtMpVOi6mnImFLhVJeKOYE6sqi9RDnI6ozuJTY3VjjxWeew7gxzt2hnS5RRSIVIiOJ2rLQgc6JW7nWDT44lJECXmJRBX3WOtKbx/aA1QqFJZN58jOhe9kQ4qtijaGwNkuvpBix1mLLktoogkqUVSuNcmKVtGGMEffibFR5ru2TB1MbQ0BMSMm+LChBu2N0FMqsNmJS/8+lPTVoiqKkLC2kIFIHOjqXaIMwHdBaUraycZMxYii5kvSkc3dwOZM12bVrNQ3qgsMAne8EuHCOkOKKJqq1zhNNkxsmMeRcXSNrVwBGXzhpo+TPXGAoxSryaqVRVhpVFNhCk5pOqKcZXc9WIVhr2d7ZYW1tQNO0HB+f4oOjrGrq4RrDUU3SmmUb6KIwYUbDNXRR4EMuWl0A5YlepjkaDQ6JEXWBWim2t9YYbg6YxTmbW5cZ7A1Z6o6tzQHPP/84X+gWpCATW4XQVTsnsiExNsvsn/z5pMY/N6Ii9WakfSEhF8XHCE4ATImcy17wqUPh0VoKn8LmZ0TaaaJRmUkmjZX3Dp2CfLaU8NERI+iUTbtQ2dgtoQl414kXAQiTI5v2atNHLyMgT8+ayfeuKAqJHNMGY0rWhtu0oaMwA5TSHB8taM4ajBGpDSoy7zTfvHPK5qXrRGdpgpMUmHbKrW++wuSzx/zh7/wG9cEmpijwtebwoyf82v/9G+y6qxx+/IiT4pTf/NdfZm9jjT/z8ZfZ95Gxa4htw1Z4nNh0YA2z2RmqFYAnEVZTzMtXLrMZtrHWsrm5yZ0773Pn7l2C94z37xHaIza2dlEu8vDumCqc8ft/9Aob165Rrm1DiiLHUgXEEZd3n6G2DZVqmJ4tcBuOD11/kWsXHuf5Z5/mN37983jXcXi4zxff/CLv37nNfDrhrbff5vT0lBAjo9EaWot3jiQkFeIL0k+y83lkss9H/6cwddRq/1Hq2yP/QNb79vYmo+EwO9i30qirTCcfDDNwLdr46AI4x9bFXVSnuPveXb7w+c/z8T/z/by88zJlAamQAtQoMQYUHFaxlYcHBfD01Q22zAUu7G2zbgser7e5mi6x8GIoHJQwuuhgem/O7M5dbtx5jW/deh2lp/zY934XX7nwOl/51utsLHd4uBwzb86w5RCjBxjTgmowMQlLK5+1SvV7lTQYmUzY1+bo0BvaaqEsxyBjuRAxWmGVRpO9mEiZ6ZVyHLJIe5LW4CK33rnJb3/+C6RPe/YuXuDC9i4/8Rd+nGcee4JX6q+xe2Gblz/8YYL3vPbN13jnrXc4HR8zXFvjwu42e5cuSCrK0SEH+w85ff8+Vza3WVvf4MJgnXK6pIswWzTiXRQk0lSRGFYFa3VF7Fo2NjdxzjJLnZzdaHRRoOyAkFrWty+wsX2B4WiGSRs88dyzlKNNNreHLJdHHByP2V5LtGHOZHFMMo6AQVqrMrPjLCGA1kEMPAtNzEbYIQSRkoiSHFI+i6IWsBkx6pPv9Rwc7KO15cknnyTGSF1XyGCtk8YND8ll4CCQkiP6hM3UfNcuKYxmZ3uDNRpsYRlUJZOQDc/pAYQ8Pc/1az8579OhfBRQXIzLZa+4uLPNB6+/QGGqPIRJ2P5cJjdJwTPpFsx8yyJ6Cm1wMdCFDq9kEORTxOf62ceACzGf9Z6IJWpI5nwIZ43BeOHZLWZzDh545pPp/we7+E6vlZxQviIkl/2QlHgaKY21UJX1ilWgVMw1UDZXJOKDNPc+hmwymXKNILRq8TjLdcSjhtFJesN++NWvw6ilZkJBUVUMN9YYtUsmXSNAf4iIXW0vaRRZ12g0wiTxs0gpELKcue8V+zTDPkzAOYfNoIQyWqSshcGWBjsqUWUpZvB90x8iwTvKQZE/n5zZIXg656hUsZIq9LGlKZ1LSc4NJdO3fd37OvQefWJSr7NHk7DCY47SDcGhVQl9Ih0ibZFrnVY///zeqr7rETmTkoGeTmIS3qe3iheZJCsaJcM5i3hcnSd2qdX5opX0PeSmPyRw3uPawDwlXDYlV/n510kA3qqoV34L/fAwu6ygxJFeJPs40AnnhR0XY8Rq6VnMil1x/iyfp16egxjymJ0DGqu/F3qVSGCSMPV7HD9fcpFo57WRUAQd8hAsCP1YifdKjBroe4dAQkIWlOm/JxGjo3OtsPmr87qil6bRD8aRa6RiAhex0wZ7MEadHTNqj0j+lOgXuBhoFcwbh2sS3TJygGFfwwmOM6WZhkijFMEaVFEIyyLm9aZFvuRjJJlHrl8PrCCmo3/aNvJvBTCUUo8DvwRcyk/8P0sp/ROl1A7wfwJPAbeBn0opjZU8uf8E+CywAP5KSumr/5ZfwviTC+79jX2u/exjmDcK3Mwx/HoFexGtxeRKkQilJwzEZCWisFO7iu3xVcySHoVqIA4FFKgmmmTk4F8vCgDuvhCo3zJsvVGhlOL0qGH2UYdW+cbm5jFFKI1G7Xgu/HzB7r+sMMkQ39HoC5r2WkdtS8phyekVWL9dkepIxEDU+ENH57uMKiqU80I50tl7ODdNcjgJOJkVmLKoM+2oR3LROj+kQq1SJGlCHt2EAEPi5Kdbqq8mhr9dyIZO4uzvLCi+ZRh9fchXfv09dv9gxOWba2iVqDcK7hSnPPvEFbquxceI0XcprObxSxuApy4tRmvK7cRBNeXK7kjysJ2jqEpmQ5nKbq+X7GxWdA7mM4PXBrujGYaCwhqqaLn9d5fs3dxk480BurCkrTPskWFnbYi6APeu36T5x5oXfuEqKSmWV1vGpx1PcgVzTecIXUi5uRYGqCF4z2wxJfoOaxVVZamtRqUO33lUjGgT0dqjFJSlxpoCsHgvGjFbFLJhE4m+oUsd1lrWRrXQz4JmvIw0acFaVXNxfYv7ywYFWG2INuJNolZSgLoQhA0TzojBY6xme3uLqizlsPRxtU2dY64xHxDnU0n5jrwZ9xOFHsnW0hBipLGfLeY45yiKgqV3NF1LjAljhLqotBX2hU4UOhB9wvkoE6EodFajBNAxRSGFMn1zmFk8vQHXo2Du6mPIpCiEJKC791LIak3nEi6B1ybTC+N5saaUTFyUkveSkWbyoR+TfOaQv1dpjUsB5wLOd7TBEVTClJaiDCgDqY+s1IrWdUwmE5wLFEWxmrxIYo6YkNa2RdNhkqU0pfzuDGxqIoMwIXm5ztY7jC6yM7tQ9fsYKIU0aGtrawzXBnRB0mK61tF0gbW4hq5qykGNsp6wbAnR4XwrJqkhE50jpBRWbuAesswuoaNnMBqyvjYkFYFUGK6+eJWFWZBSh1Eli9kJ89kZ0XcYpNCLOYZOWZl8oW0GM/JsWsVM75fprbECRkGfWKSpByNps73QPo0W2UxwHZpIYaDL+lAVfZ7eZONPLeCVgKvy8MTsqA1graGsSqqyyGZhrJJcfOjo2nZltCutpdDCVSyASFFbnOtWoK6kw1iqsgSrGQwGDNc3qOshRycnjE/PCCFh1FqOaI6YwqAxjGeOO6eJO5PAwfiQ6ekRc9dycd3imwk2eeL8BOUsC18wbUQa5ieOdj5nMZ6g9iwP3jvglc//K57YWOMbr75BWCypXcDd22d3tMPB7ISmW+aiSDyPdFoCsFYnKj0nBsdk/B7HB+8yPrpPjIH58QFm3jGdnDHaHPLe/rt85IOP8+rrN9h5+i2uPPcSVVlz1zv8luXVb7zPl7/2dZaLexTMMb7j1l96j5OjD1K8r8BFTvYf4tqWB/fe5/Yf3+TtSxcpjOF4PGbZeaqqEsA069T7CVpfzq72JVj5C4RcQEo0pKQfxn/D1ApkJtSGgNHC7JnPZgzrgrIsUUpT2EKSH5TmUz/4SUw9Yj6dMW8rSdYpIken+9y+fZu9y1fY3tmmqgxGi5RQ5ykTCZQFZ+QxLAbXmJ0NOHxnwtGllnfGE9LsmKAkNtKHII3nYEjnWl698U1u3rrB+ycn/OQP/QifuP4Sv3v3C4S6pFEdU3dKVwUCjRh1alGxo3KyT3pk31Rk2rUUeNJ4KvGkCWLuVhibk4wjShvWRiOsVnldt0TfoqIwlcqqwMWE0iUx73+JyOxsxu/9zu9y9PAhL16/zjNPPcn21iaTkzExRtaGNdeff4bxyZi3K4vzDU2zpHUdCcX61iZ7O5JScry2QTedMyhqus4xXzo2trYYbWxxcHzC+PSUMHe4biHx6wOLUZEqBbZLy7IoOJ5VpOICna8owgy31GxvrfPBj3yK9c0tbg8PeGLrEn/+M59CDS5y4/Y7vP7aHxHqlmFlOZ04ou5IqiNhV/VXiBXea1Ls0MpB9CvfnkIb6qLEuZAlTCnr9RUpnEdDOuewtqCqKlJKbG9v8sILLwpzz3kOD1VmGEliwsW9XS7vXaAqS5kAazEWnI0PuXf7XY6OlnQhceZOGYyG2fTbr/jj0mzInk8P+ClAW9CWqIxIjXPDoY3UkVujmp2dbeLmKbowkL0SQMwsSeJxMJ5PaYh0KmKsRL67FPIQxWczcZFb+rwPks+zFRhi8tnT7+dR9vzJ2RkHJjEdn4Jz2Wn+T3+p1aRZBkghOEzqfTbCqh7yweFDoI9p996hlXzOrvMk5+hCi49eTG6z5FK8TtK5ZHzFxJA9R+f9KOZzB61Ekx8VPrMnky2wg5pyNMBMLcpLHdmvV5UTt3Q+60tjaduW09OxyEytzRLvnuzQG8jK+RWTDJ06Ai54Fq7Dx4SzjoGO6GQoCoM1IjUKzpNMiS4M1grdHiOM0H4YJqaS57Wj+hM9wrd/nbvKR+5H3owzg0Ca69543idHVQlTyOchqRhZZimCf6RRV2CUkYGWViiTaxqdWRf5sVJJrnmmX+bEO2nHdZV7JtGXin+EVkhSnMq1owAUMSS8DrSdALbB5JFxEmNXUHgXVxLithPGhY9Sf0QVpN5SAvqEKMl2zomMX1kZhFllsMrjso9hL+P+kwmT58/5+fVOyEDF9Pcn6bzG4uq6PwroK8geKgGUQYsijJA8MXlKW1OWBqUSPojvnclS+EhYAS0pBULy0mOqHsI6H4j3HHFZBwhIkjy0LTQNpu3Ae5L3hORogKO25cwlZi5wnAz7SrNvE2cqMQmBRst1tNbi83vwUa1qfTJ4qK3J6S5SE4YMJup/TwmJB346pfRVpdQ68BWl1G8CfwX4rZTSP1JK/Szws8DPAH8eeD7/7/uA/yn/+R1fKUHUkQv/2y6jL41wSqYsKkB1S1PPFLVJpEFk/FOO2U8K3WV63fH8Xx6x/nYJKO78vRkPfmpO8UBz6RcH7P8XS7qLkY/+4EVsrZjrllGVYxAbxXf91T3SQN7Dx/7mVf7g8/fY+tQm629XtG2L61xG6RJuADYaru5sSzNnLHEw5o1/cJ/t10eMjirSOkz+847JZxoSisVjLc9/9x4+yNTUGE1IQqG11orGMabVQ6+sJK6ITEDioYRlItPufpFk6BijNEY/csblxaG1ZqYCs/EJ5ffUlKpEKXDOUw4j5VJYCXGQCFuB5cdarFawloh1ZPLylNH7muWgI9lEqALNY1O27xfo4MEndOxEXx5brIJ6oHnw4hnTK3MAxo+f4RcLRt+ssUqxfNLxxj99yPf9jWcp2oInPrfF6Ydn+JcTYQcmTy9wzwWu//w1wihgfOTjP/Mkt/6TE5qPtaSk+do/uMUP/cSHsmlkjulUgryn4EACZIRxYRQRTVVo6sqyXldoIjqKyWShLYU2lIVhfVRjbYHWEq0ZQhRqp3MZXJLFXRQFVVlhdEHbRKwPaGswMWFaL34CXsz3ogGvxVNBA10MzOYLYisGR/WwYnPz3GU3xpClSyEDWOn8ftKbG7H6M+UFbhWrTTKGTCdFS5OGAmOpS0M0mi5qipmj9b1sx+ODpF545RCsW0AgYyTpR2mNLiyqi9loNv8uUja/OncQ19qsivEeIHEhsmxaVDZLKnRBUVd4FdBySuSD4jyROmUX6khOf0nZSKkv7FL2pkngVMIBjRNJhY9Oro1KYuCbo26NsdjCotqcR+4cXecFaOi3bSXgTGFLjInZGFKKJ41sqnpFFRQpSAoyofJdlgNlpoi4eke0EZPQg4MD9IlivpiTkmJ9Y52uC5zNllAuWNeVGAdXith2ONdhohhSJvqUGi/NIoo2OFIM2BApVWJzUFEYmDUTnnz2Oh/+6AcIaclsesDduzf415//f5iNj4m+QxsxEjVKCi6VA89NUWKMzeyLBD07AgFhylyQ95R2pWA4HEoKStPSupbkfdaXi1cPVuJfY4q0QfTY/aFssnSq93yxhcU7Ac6UVlR1zfbWJlubm1R1SfCOZbOgaxzONVhb0HZefIaipDGpBG0XaJzEt+nMvlnJtLTN4IenqGq00hRlzd6FKyyW8jxqVTOoJZa5sCKzamLk/v4x79y+y7WdDYgy53368h46RL5RGC7vbWFZ43jpUZ0UyGv1kFEYMBjU1FuG0eYW7929w1vvvs3x+BiIFDpwun+fK0+vo2anFDqRcnHXhQ58B8DDe3fhjX2W8zmvf/WrLJcL1ispjIe2wMdEM1uC6jC6YX2kuXzlAm+//Q437k5ol4mbG1+n+2zgzRtv8y9/7deI7oT1oWKgA4efOOK1r30D1V1nUNY00zOIkcV8SmWHOB9o247On6c2ra+vi0SsLKnrmj7AZ5U2E+Rma5N9Bugnc1K4qEfo8f2+Js1TENf5zq0A+67rIAa6ZinnaTHAtRK/9qlPfJJXv/UWr7/6Ju3xJv5lR9cErr/wNMZUnE0W6GrAhhmQSolkzvJsUoRWwTKA19BqmM9ajg4OmA1nTI5OUKnh8oU9QHF8fMxsPGaux3z9G69w47U/Yv/OWzz3+FP88Pd/hpM3b3O8PsYNtnk4nnB0fILdvEiFQjczQuo9AHI3k+szOSsSKx+ZFSQs008fhMliywqtZcqqkkipNEHMBpVM/mMKqwLRxZj3pIiOSnAlAmHpuPPubfbvvs+/yp5RG2sj/F/23Hz3Jjffepc333iTw4Mj5vMlSmkuXbqM0ZbZZIE1wrpcH23QBM32xiYpwdFbb7P/7k12Luzx+LWrbKyNmM9nzOYT5vMJViUKEteuXuaHP/MZ3ntwwtn0VeZuRrc0FKMSU26wtnGBQdUQvGNYljz99EU+9sSTLIHNvechzHn/zi1Ct8BamVPG4MQU1igUFmUtlKBVpK4UVSEeSs1igetEXng+Hc4TSEEx0Cn/zJj92bSmT1s4PDwghEhdSCLMYFDRdR3awN2773Fzu+Lg/gfZ2tpDGU17esKdmzfpmgWboxEuwICELSy1NTQZXOqjvlOuAiJA/r0oOSvzISO1gVFYYyiN5tLmFoOqoqtrtA7CBIkKVCIGh/eB+WLOg4N9Fq7FxUCRkx18EEPzPokveGH7xSDMPNNPnfOTGlXPaMjxj0oJfOw90UUxwHwkzetPvnKrLMM5RR7w5QQwlWVSOdkqpIRLAYL4yhljSRG8F6aLRHRG0Eao9f0IUKtseF5BCrkx6qWiiaRlECSD/bRqGvu9Cy0y6l7anUzPvMx+EiqzgLHYLI0MSUwYi6pka3ub2XzGfDYXXyAtEncfI4GItgU2M0JFjgEeK6yXGJk1c+bJsEakDhIVXxUWS6JbdPhFhyoqUlXTKMUA2NjcpNBF3loe9V6QoUTKwIbUWX1yBudD1BBXTbVzktYYQxCwhgx0YPIwx2e2QeYHPzIql3UFfdKb0r0Rp8aQMptCrxjmKNBlgYlg84AGHAGR0IsXmD5fA2h6zySpCZNIdyGn2Rh6PxvIyR1kGUiSf2/RxAJsFN9BjYBYkUTKbF2TJI2yLKVv7A01o0pZhih+OVYbfO4VU+oBg3wGqj7trn/eVR7Gpfw8nQMIvV+lVlrYGDHk+yjX69whKffN+Uw1eSgOwkBp245a9YEQ6hE2WQ8G6NXtSkqt1iMZUFL5zaTS4G3C4amiRwVH8g4fI2cxcKgS75M41ImpVUxc5DhEDkksjGWRoANUiljvKbO/WsiAodJSn6cg7hsiRcrvMaUMiv17ABgppQfAg/z/p0qpN4BrwF8EPp2/7X8FfgcBMP4i8EtJKpIvKaW2lFJX8s/5Tr9l5TvRm2VWWqOMZe9fVIysoRwmmmc6jj7V8Wf/2lWU0tz4r054/xfmPPdTe6AVe7+wzuf/3C3SJmwzYvfnR7z5d47ZXhvRDD0npmF7NMJai9bHXNzazshdpB4OSIO73Pj7h/zY33qJxXIpho1BHLaXo8TRy0t2XttgbT4iWsPphhSWVSlShLAT2dyvePGv7eGT4Yufe5vFZ1vKXzWURZl9LMgUplKmzCnHNimNKTTaSgPZM7zEi0MOUKMN4jeVMtVNYY2ishJF5HMMZyKx+7Zi8I9LHnzfhMWT3erwvfD5IVuvVQxGmmf+r2201pz++FIm8YXh+a/ucvuTh3zwaxfpHg989MuXiTHRfY9n57c3aNsG3zkqozAKSpUw2lBvDvjjHz6EmPiuX79A+3ykfbxh9/UhdVkw/mjLhW+sUXqd5QqaC18bcfZyQ/OiI4TA5isDQtfmmCCoDjXloeLupw9JCa78+gbBdShjxJ8jKSCIrtU5YkZuFYihX2EorclNvkxHjMkRtAaMURgjU4mmcZAb5pjpmSazZFznaNsWYzra0udN0CD+PwGcJzWtTJ2VmKsFIkFHVJI4pECk8x4TBNE2+X6kIL4XIfgMQMj9Vlr+vk8RWukR1fk54YPHKJM1iLkR8CH7LiiUNbiFUOi1EelQf6DJNEZ+r0uOlFqKysoGlpu9lCcDPeqeEKQ/5K/FRDWRkpFTPh8MUmAZlJGoT2VLMTDNRj3YiuA6XAh0MdAF8W42KETj5wk+YK1CFTZrbMWsUJhKmmQ0XkMXI8vgKZ0neKH7aSOMjMZ5lp1stqXOrv5Rpp/GlugAPkjRFJJ4JQiQaOlSkgSihDRsSnK3hc89Q5XrUBuSD/iiABK+mVDkJjnkM0kZhbYaF8SUse06ynLIaG2N0iu66YLGKwZRMVwbMTKW+XxG27UslzORkJBnUHniilL4FCT/WyVqa9gcDoCAIfL0U9d48vFLPDw85NWv/D5f/v0v8cpv/R7MlxijKKwhdL1hqUyU0QXKGtBGwBIkEE1nsLWqKqy19L482gibwVgrRYZRFLpClRUpFITOolKkqCpYl8g4ZUrZn5Q8yEkLTz5lkFAouRZlM43eFGJWFhKxdXjvWDYO33mMKRitVaxpJfnvCoZliYpwcjrheHy2Wk+9b1BZVZjNddY2RhwcHND5BZUxTKcTEoX4ZijF8fEJRbIYLYDgcFixVhX46ZjYzNhav8hwd0BVGepByeH+MUYrNjZGnN5vWCyWUlyRWHRz3BRa74huwTItuL8842s332RrZ8T7J3epjGa6PCbef4dyOCB4hXP5+niDa6UROHxwRHE4kuJ9GVDeUmR2kDUlS72kix2L6Yx1PWM2OWT05GVu3n6LL371N5hOW0af0lz6VMXtu2+yaM9EajhNtGFB27Tcu3OXp+srtPMZKvvUOOcYGsuiaelamYKiBFAorMVaKfL6ZkRljbtS5H0sgwU9ILYCOeV7bGFXOuEYha7fdZEkPsvCNMhroG0buq7DGsuiaSi6jpQixw/3ee/dm7zy4CEX1wc0L3ZcuvAcn/jkj/Ghl76Hncs7qNrQJFj6SNcumc7mnE6mLBctr22/z3KYWKx3nM5PWR+s8fQTm2xtDvhAtcvFfcfRu6+y//CAWzdvce/ePWaLKcfTfXyYU2rHpz/yUYad4Yt//DrtD9e4akQa7qKKE5oAKXnKEGWK3oMTKq1qAtnfE8KfNLIW8upPRGI0RCzoiqR99hFJYiSXdJ7GFYQUshkvKITxVahCAO9sptl1jrlaYNHY9ZHo9H1Ho8S35K0336ZZtJyenuGduMdfuXKV9bUN6nrAZDZnPJ4Q4hTvHKFrORufMZ/PWSwairJiMplwenrG9vYWW5vrrK9VLBYDUgoMBxVPPv4EL730EariFjdee4vxcoYuKwZrlxhsXGUwHFEU+yzGc7TrmM0WHLdzdFWTuiU6OSqbQGu21te4uHuRUVEzrNcgKppmSbPweNUSY4O1JRubI1IMnKUO1y3wrqOoakA8ilRSq7NX6mjZz1NKq6bs3r17vPPOOwwGA559+ukcx6jRASCyXM65c+cOb914k3qwhY+W6f5Dbr17m/HMEYcSlVsWjuBbTtF00ynz5VJ8sciTSTLmh7DaUlLS5PcYi1IidVWKtXrItYu7DOoBqRLzYgiQSqIPnB6dcO/u+9y5e58Hh/s0XSvml87JM+YjKgRhUvlIykByEnuPzAbO6zYlcuiNMKxi9hpAavfSGklAe7Sj/dNeGauLmbaflKRcaFOgtJXkL5eNMGNaeS+EcD71TjFLB62VRCxrV75Nq2vZv5+ehYHqL/DqlfJ1dTFk01lhb0cNXfA0XYvzIk/VWtLrCqWwSvyafIKz6ZRBPWB9a5PddonSmvl0IXJELdQamxSmqhgNR5R1JYkiSmN1AVXAViVtaglWE40RECUK05kI3aJhvliIuWlRMPGe9Yszhmsjyt2dDArnG8a5p0XM1znF/gZKEywG3TKs6UULCRlyOe+gsCRlWck2kniHSVKwWTXo/TPav6R5F6646gGqJH4xAan7okLkOqxKesTlMPt6EHEhiKEuKYNnAgIok01fg1uxMPooYu8DWkeSNiQtPiFSh0hqC1ahiwJtIkUlrItowBOIfXBA1BirGNTiBVeUIksTB/MsXTSGmEwGxx5hMzzCuBAAKRMOcpncc6tXKScp9VXw+ZoXImz+d1KTh6gInacLkYRFqYIYFTEqlLKkJPtLpZKs36TxXcA4CB5CEEnhamCIFsZT/555JLlGKzqjmVktxr7W4JOmcXBDA3fBAAAgAElEQVSkFPcV3FVwaC3zpJiHwFnwnCTolCZYCFrO+RACFiWJQSriYpTkxSSAYIqSfINekYGQYeF33jr+f3lgKKWeAj4KvAJcegSUeIhITEDAjbuP/LN7+e++M4CRBAM3SlNpmQinKBGnO8MRG3VJScQtO9zb8K2fGwNiDqkUVIVc/KoSOUh9bHjhC7uEGNjWa+zpESeVNOmjWoAErRTrw3qVLby+NsiAgGF7c0RZwNwk2qah1oonX13j/o9MeeVn7jCYlSSlGD8mRkVaJcpW86H/7jKXv7RBUYnvwbO/eJm3f+4+V8p1Nj83oKxKgg/Zc6A3MxNavmy6ktRR2EIarRBkQo3owoih98PLSHFGwMnGM92Sxjne/G/P8qGQUb48wU4kTn58yclfWFLYmaSqKLKmEbASJYRKvP6JQ4nrCgIs3f3ghLsfnKx0o9165OjxJb/90w/odeWhl8Ok7D1SRr7ydw/FHC9T0b71tx/I5pOEmqiVbKohRI5+YMbxDy4k6tSoc+1nLnrjIPH6339fNttVY5/9TmI8P6yS/J1SYlDZx81qtboswo7SOY5Ja/rYTEGSs9lpjuUNPuCDZCprkzdjFG2CpQu8qQxf2nrAQVxwNp2jnZaGm0ilNUEpJp2nWbTZRAgWpmVaNZTlPkopQvQr2l/vwRJDjlXygs4vbcPEztGZc5dixBjN/Xq5mrA551Aobm/MKApL2y6ygaTB+cB82ZGUprRjblYlhQGdAoogVFetZdKaY5hUD+pk/WVv8NTTPVW+jiqDA32zWGRTXQUUVvLCe0qjNlZ8U2IkpMSybYkghWJMWW8bVsh9zFNZOQTSCuSRAuKYopAUmZTvOVrufwiRReuZLTpsMeb+8FCMJX2vf87Pat/k5imXRH/1JlYZUKJP+FG4xz0n//0EXH5Gs2wi+naVAiREjeyjoXuSY8J5h6JlUi0gaboQ0eaMWXVEVRYYbXCuw3mXXcaFIYLK+4CSyVCIARUTJiXGWnMyGpM0eBVpn1nyjct/xHh0ytHwgKNPH+A+3oLvTV9VptfmtZWBI2WnnJQnaFvmVByV1436dpCMtJIOoeRaxxgxwfLcP/8EYMQQVgvI4epGgApbyf1FImKHa2usra9zdnbGycEhlbIYk70qjCIoSVNaukm+70EYUjGIDK20VGVBXZVU1lJbi1UG7yOz+ZKFk72KJJNrHwNFWVANJOLOx4bajDg82me+cIQg+8BsMqVEUxSJqtIoLKPCssaSKyPNY3sb+NgxGq0xX3asb2xhtCWgOJuf0bWOwWgdqxSKFtdBN1sQllO8m+CM4u07t7m6OeDO/Iy5LdEmcXZyh13zGNrUBKOwdUVcOtogyU5RK4IVf6RoZVrbJkdMkYP5CcFGjKlopkvK1jLdX3BbvcvJwnF8501sNWC9vshksuTuvdscnYwZGE1QAetmdJ1jsWgYL8Z88xuvMj4Zy3k6EG+Qc611TsNCsZjP8c7TNi3euZ5h3hcM4s2QC9wYJXVJq37W3WfYK0gR532WAgromkIgBk/XtSSdcF5YNbYoZX/MQEiMid/73d/lvTv32T8e897aBiEpvucn/lM+9ud+lO0ndjBWCvWD+2dMT4959Wt/zFe+9Arjg0MmZxMe/ugd6icrDr77Pe6++QVevvIS7byhHRzwW7/5y/CHmqOjMzoXcR6cCyxmE4rU4JXj+vUP8OLONsd3bvPGdM6xUrQE7N419tKAs/19/HyOS4oUBXwQqnQuIkNaNVM+QArgnFyXmIJMwpWhCzCZNflslClgCqCTQiVNDJoQNCkVQpnWViID5SjNXjqCBLulY5bmuEWD0TK9PHRHeOd5//0jkUp6TdN6nIucnTXZ/8nRLhPNQp4XSWYSzXXTOmlEfFgV+ePjIxazAmuV6MiT53R8yq23bvArv/SLPDg+5eB4hhntMiqHqOUhhzePGXRXeeLqVe6O73NwdEh79seM3hqycekp7r7/gJvvvM2gKrh4YYeKgsf2HsfsQdsuOTw6wLUL2maO71pi8nTdgIf7U0k4SYnON6xtrKGUpm0d1pY0XUdRVqBCllsOpTY1Au4fH58wn8/x3nH58mWR2nonQ5TgUcbSdZ7x+JSbN29xf/+MBw+PMW3DfLrE6wGsXcAHxW4tkYttVOgQaZoFrfPSoCtWCXRKKUJ/LmUTxpigcS11EoPN9cGAtaqSBt4ICEzsQFW08wVf+fIrvHHjLU5Pl8ymU1JO3CIEytJgtZIoSx8xMRE6J95DEZTPdP7kkXQQxFw+SXJGpE9VCJBkD+6alhW16N/w6pmP9AyAFfVek6IGClI0xGhwXSf1qwrIMpEGOPpEYRUpSTSnVl5YFSYXAXkr6hkHvZQkrYrH8/cn6WD6XCajclpg3secc0ymUxk2GoU14rUmU3mN0omyEF7/2WyBNsfsbm8z3FjH51rXdw6UMAtTinTagOrThox42UWdU8EiuiwYrg3Z2NmiMop2NmU2mVJrGSgEH3Cto+kcPjgWizld1wkdX+vsVRXpPRkebaz74rlvsEV2I7XKilFrzbk0SvVghIKIGPCa/N+zeWdf87BqgrMvlRYwCS2bkLYKH2Uo5bWkh4RCi9TLRTyRTiU6FGhNYTQBv/JjkSFONnw0BpUCWcWSzxKRHKaU5VUmS3C1JIt0naOwhUj1UJBrfW00WIXRiZRk0BeSxhpFXVmRkZUlhdbEktWZprUWtlZUj1zfbwcwoAfownmPZA22tJKxmXpWq0gbk9Ar5IzMAHdK5CG2QamANjUpGZQq0LoG7SBZgo8Er4jGoCiIUVLvQlD4oOicxKiGkFYJjj1gohUr9TouwaxFR41Tmi6CU4plTCxD4qD1PIiJI6U58jB3wmJcKsPSKhqEJa6VzWqUzPjpjdm1JdDR+xfGKMMxg5XBX2ZoPCrD+ZOvf2cAQym1BvwK8LdSSpNHf2hKKame5/nv/vP+OvDXAcqiwGYAo1QKl8CmhE2JSisG1lAqRdhRLJ+M/y9zbxZr2Znd9/2+ae99pjtU3apikSxOzWYP7FHdLbViR0rccpTZiAEnQQDDUAQkD3IAAX6yDWSQgdiBkzhAEgc2EjuAYUcwHDmSE0eWFEVutaSWeiKbbJJNskhWkTXcuvOZ9vBNeVjfOVWtlmTlIUAOQBZwa7j3nL33+tb6r//AD/7vjzOkQKt6fvOj9zBKYsgaZ7Yl0yAN1hO/PQUyppjLEAPRl8IWBzZYVAoDttN86b/6EP16iW9XhF4M1nyG8VuWP/KfHtDPIGlDNhbzpUT9f2Wm7znMTHP0Yyue+dYBVmuGrLn2f+/yxp+7Q/cDEfWrctFykmE4lsSNlDfUIV0SBxwaQftDSFun2phT0W4K6pwpxo3WCU1KyaYqxJ7jL6x48af2QIkRT8wbo0LH4MVkcHcyFQNNLQ+ss5pxZWhqhzMaZzcmeFEij4CcNb0P+N5zdr3ltS8lvvAL18ogI+64PiaG4AkxkFEMynCyHOhDpKoq6soKbS5Fhl5cbE0hJqZQNF85M5o4MongZYjfILzSVAgTxZQCGlNgGIZCC5TBqh96UgpMJyOqymK1oqkdlRUaXmOdmDhutIJKmquu68hRDqb93X2MNbTLltVqSYypgCEKHz3zrDlZ93yk2eOTzz/Lq8Mxb99/QDuPDCnhdGKWE7113O8D3XLABqG4WWcYNTVVLY+g0nLIDSEQQsAPHu8jfe9p13KfjkcNs+kYq5N4SSgwObG/u0tdJEnWWC5dukwzndL7lgdH9xh8Ryaz7iNn8xao2NvZ52B/l4kDE9foPOBDRtcNrQ9ctG2h0Tl8N4gULiZJeSh010QZDjdDOyVFCinuTVMznUypK/EqcYVG3g8D/RDJ2jDEyKLv8TFgbYXJiuSLVEJQpiJpSIVuKY+xUnL/V85uD1lj9ZaOGXMipEjIlljc5QGGfmAYvGwKckYpcbEPBSRSSjOkTBckZSd0LSZFCAGdxdyp/1THY//LHmmVt5sw4wzL+anIxCJotXneAokg8ogwYJLaoIWkrBmNd5juXWY0boSGmiLr5YKT40OELJrRxsn2OQSUcdSTEcoB3rPjai5Pp1TOEFXiieee4l+6/i8Tb0Ze/tZLfPmXb8M750xdjanHBVyJBfwCskZZRz3ewY12mOxeRrkRbcyEKA2B0WqrNd40gyDJAiEEcesH3vtLv84Tq88KaOUsKUMfBzovG42AIeSIqxo++olP8KnP/AAozde/8Q1CVNC3cmhRNg4a4rb5UsSYiiGhpQuJIQ50/UCoDb1SrJXCaUO7lu2iNQ5VgDiUxEBuGty6tmQi3bCm7Vf0QwAln7exucibRAYSY4fykf264WAEexPN2Uo2SFU9YbZ3FW0ci66nj1FqUxpQKeLyAEmhgyd2a1S7ZEiJ46MTPnftOe5PZpwuVkzGjtwtiPML9P6U6Cbk0RRtRtjxDgB2ss/0yjW0rZheewpnrYC91nL1+ReEiaFqdOt5yiaeqCP9xSEvPvUMTb3DKrQ88Zkn+IcPfpGTmwnvM361JNtMlTwxJNp1x+HyhD4cMp8vSQmcq1BG0oO01gx9J6C1dSwXS7quQ7eavutKysjGdkyGaiWHB75EgW8MdUEYSjlJUxeLZG8jhcs5b8/JetTQjMf0XcsQZFgcI95COSfev32Li9M5i/mCrCUKdHr9Se5eBB68eg+jIjp23HzjVV7/1u/wta/8Gsfvv08ePNl7Fs+taI8C4Ubi7/43f5k3nv4s7aLl9X/vW9z/zR3UVzW22cE2M9xoyu7BFS7tjVncfoucFJ955iNMQuC1t95mfeky5sqcuOwI00vs2gMuqwn9asli6Fmvz4ixFxxhs1WP0uwLKFtjbEVdjVEqYyzEJKw3a2UDGIqkTLTDTraLJEgB0gRNxipJfRLQvtCjs3x2MQxApK4s46Zi3NRYY/A+os271PUOJDA6o3SgCpmuT9y7d0LOsnBIIaGVJXhP23f0fk3Ombqqqax4XaUUMQiINZ1MqGpLJlHXDUf3D5nfvUcejRh0w+r4jPuHp5wf3+KJa5e5uHuV3T/64zz91PP8jvkK7938LrsvVaTqJebrgdBFljlzfu8263nL8nRF3605nx/hfUsYevpuTsLjXCVDb5ZanFOgwjD4Nbu7e3zohec4n695cHRO1/d0/Yprjz9OXY8wpsLoipQUi8VKfHWK1EIpLVvqImE0yqCto/WBw+NTlu8fc/vWXUYp0q17vKpZ5oakFNdnMhCufeLa5StMx2NJSMkRjZh0G2TzLnKMzGb8zlm8zyotjN1x01AJzQnjKvGeMNAeHvPyS6/w+uuvcT5fcnh4JuB9kDqlorAttFZMqppqUtHUDX0nkg1nHD5GrEliPq9KJK4Whk8uZ4IsDAIpWsDgB/997Ibf6/UouzAVk/qUNYNPEGWjXNVTlDF0foAoPlBaGcgRpV35VQZqdEKZjTTSbJcgSmcBoXTcAqlsvLu2jDD5WRQZZ+xD0CgL22wlNz6T8YjoHH3fS08SIz5EWUqS6Lqetu8IKXHl4DKXr15BKc3iYsF63ZK1IRVPBd33qLajMYa6buScS4kQAz7Jlr3vxWB1NV/QXpwzrRqu7V+iqmsaBLypigx0I8XT5b1RttuS8PXQU0E+lyJ3VYroQ/EHKWwK/VCuvlmWoh8u/TYW0+WbyDUsi0aN9OAxpocXuPT1mUzWCm2spAQ5Q9ASpZqNQm2mAa1JyROQREStBKzIG2DFbgCV8jM+CppsyGyF+aCUzAuuqqhKzy8g/OYOLPeiengfUthXpCy+GBuJd/mzentvSA002qDTRiryva9HAY1Hvkq2Bl1XGGsF2FEKu3Fu3jAVlXjqqc2kmo38qhKjscPYGmVqtHJU1mFMg8ILKxorzJCkUNkQfKZtB9btQMgZn6SnlvM5FjyvAHjiT0tuA/hMFzJzH+mBVmk6LEdRcxphaQxdVPQxswqR1ioGY+jL8lzHiPEDzeZ9I8wm0RjrsihT5d75XfVhs5j+fV5/KABDKeUQ8OLv5px/rnz5cCMNUUpdBx6Ur98Bbjzy158sX/veHyznvwn8TYDpeJSVytz9yUOmr9RMv+zQCUzOvPkfHvHh717m+ksj/o+/9y5P/fYOu29Yhpioiz2301A5ca2Vjwgp5loVKh1UVlM7x85sQowRFzW//Nff40/9+U9ijKKfBEZLy85tg3OgmoowicyWjtz1vP2vLfmt/+iIf/Onn+PSWxN6pzlcrYnHFaNcYxrH3T9+wXdPDnnxf35cCFIqMf6m5dp/OUZZhO4XofdDYRE8crkUQunJqdCBkgwaAlnIJS4PqVK6PHdlYEP8ArIyYCzaK2Zv1mUDJvRH6xzGOfpe/s7e7oRRJWCFSgOGxMgZxiPR2uUU0UrhTEXOjmEQd2/MiBQiJmj2Tjoev723pVdWlUM7h4+BIUjKRq8r9NEFi9Ua5xyjuqKqHNEPDL0g/BpxS88lcxoyo3GFGDeJDlMrXYytEs6JX4W1RvT8YaAblMgBlMJYQ9VDTIqdnYZR7ZiOx4Shh5hoKk3jFJWVIi3/viJGqAeJzLXG0NQKRUR14LzDFPlFzpnxdJcTNP7wjINmxDPVHosUUYuG4+OW04tzRjqylzMLpZl3lmZomOkRrpZMZtHnb+QZAhZ57xmCSA1UO5DajF9KtN1op2Yya7BaADdNwmnF7v6ISknhn41n3MhPYtcNq36FPRwYfMuqa9HrgD+HlB2T3RG7B1P2RpqxbqhMxIeMHc1Yh8DRxQV9TmRl6Nc9eQioIE2NLrRVnwvKvaG2xYgwpC1V3VDXNaOmwRrZOiolSLL1Fp0akilO02EkxEVtRWebpUFRSkypfE5C6SwyDJAmamMmukV1C80yJaHeSYpKiVLDEIo2MKVMVdUopGHfMHxiTGKiazRBKYzKpH7NXlORuxU6B6Z1zS/lBS9eXCWcB9Z9TzsM9CHQ5CmL1RqTRKLSD54UpGFGiaZaR0NOGutG1KMZzd5VmuUe49qh00C7PCcce9Tp5j3Je/UpkXug0pi9Cl1lCIqDq1e5vDMjDB31qOaTNz7Ov3LpS3zjG9/gl/632zTfVTw+P0ChWecMVqQdqrAoyOIVY0cVk/0Zl69fpZrssxoiQ0iEYZAUD4oOk3LIp4BJCZvSljFHgKFrRdOYkUEzJWLborVhPJmSlWY8nfHshz7Cx178JOcXc+rvvIGp5Pnc6B03TCSF0N6N3bCknJg65kgMg+i3hx6bEzZnaSZ9JiQwJQ4ZrdDO4lPEh56YMq5q6LqBdn7OMAQBsophXCaURlqG/HY10AyGanLAxfEhy9WC6d4+utljV894+nnNeDplMXj6WHSwQeJjpzbjQ08VE2noGcdANA5/fs5o1XHZNLx7/zb2YMJuXXNpZx/95Cc4uPJhdi5fxVrDWx/9J9zh1/jQi3+Ma9c/zu3xr/LCZ/717XWw9m/w7Me+RF1BYxvS+TnXwwUf3jXcf/s7jJt9Ln3iWb76zd/mm7/9Mvc+cZfxsWa9bmmyGGmiM3qpePW/u8sbSo7ylDN+N7D+5++hwgaU2DS0ioU+4131JtlmPvM/fg5KDdM6IxGgwhRKPmxZZiEGVBIQSmvZeArTLBZ6vGxXMwKcpxLROzoYsffCJU5OjhlWnpwt3Wgg13OiStzt3mcwgTDqSf2aFAde+er/yjuv7KCNMBvb7pwYl7z88td498Gb1FNHHDyzyYy8Z2hGitZ6jt485ZtvvcRkNKb/N3rWpyv0icVNK8xgQNdYKwaQi7TiuSuP8+zODu++/z6v3rtPfPbT9NxBGQNuBwtc2b2E2ptxwYAfLhWaRSYn8TohI+khMREPjqhyzbWnniEj8dCb7R3FpDqEgNICUKSSOJaDJ4aBHHrIkkxSG7OtlZDk/vdBtopNRV1XjMc1k5FshdfrDmMMe/vXxPcnZQYftolFfdms5yFgS1JUP3hsVZONGCU6JxR+ow0WC2S01QREbmCMofORk3nL1UuXcLqiOzmhD3fxqiZRYZsr1NWU29/9Gpd2ZoR6SR8zze4OMQ1cNhW9hZtvvsH56SlpqEhREeJAygNVbRkGD0rTjGoGH1msWnIWXxtrNH/0R3+Ej370BQ4ODnjlO6/xta+9hKulTuyOZiXiV1FVI6bTGatli0I2oLPZLs5VTKdTuRaq+FhFqOyEp565ztmiZbkKjHf2iRfnrPsFXUoctyvW6xY/Vezu7TDevcxoXGOdIvexmCsXOYc2JXFGPJkkrSASkkSF5zRAnfE+gR+g9/S9xySDTpFXf+O3+Wv/7V/nyK947MlnOD5dcnh4wWq1phk5lI7MpjU/+INf4Id+8PPceOIGt269z6/88q9x891bpATRONbG0mlZrqlRTbalUqYoVHeF+E+kAMohJr5/gAfGBi14pKakWAzElZhAjiYN164+jm0aMIqTs3Pmi2VZ5oFCzLNRiWpU4xonzBmVGI1GYvJu5V5MsbAHst4CLlupRJbN78YXIPPQf4wyFKeYyFqG6Z2JzBCdc+QQ6WKHD4mcBpzRsqBc9yQN1WTM1YMrXL12jaZpODk5Y7Fu8d4TUFTbBZBILHLxmlBK0XcD8fyC1XxO8B2hW6P8QB559iZTMfguMheNsHZz3Jicy1BhxPm/sE3Vdo7YfPgP2SnCuhBjUgGSQnjIjFHlPMhJJD5KFR80MpUR0HqbTibmDdtIZzbSihKnnJHvlRVi4GcNWEvIgwC4zgoAlaX/3vR3j85LkmJRgJRHPCYkKSejrC4eW2bLHHGuoqlrjNZ0bbs1q1eq+GpkCkzwCPZWhvktCzylYpFT2LqbZDssWomsF/XQ00mugn7IGjdiehoJYljpLKbIUpQS+GYje9Xlulgr0coaQwpiqo7JNI2jchO0skU+otG40qdZNvHwukh/+t6zXKyYL+as+zVGRQyOREQTMOVeRwngQRfJqyVtu+a07zjyPSsVWWVFnxVnWXOe4SIY1iHTRQhKE42CqsIpSF58mpRSVE5SIQ3i5bG5jqrAFuqR/2/mW7nkvz+E8YdJIVHA/wS8nnP+rx/5rV8A/gzwV8qvP//I1/+sUupnEfPOiz/Y/0J+ZnthcSeW1Ydb0sLj2x6bEtpq6r7CVI5QZ1azgXc/fIIymVRBajKnP+DZPTQMOyuSTcSRpn8+s//BSIZ3Y1G7IyaTlieefIK+H/iJP3+Fv/NXv87wIw7rLP/wT32Df/cvfgpXwWw25fx6xz/5qe/yp/+TT2COBu7OAmGUWX0aqgN4cGPJ63/yAS/+lWsyUGfL9V/b5fLXJtz/+DlRKdbOM3mjogqGqrZb9I/NQ4Pamv9uotOUkptWa701aEEprBYjPFXgDClIckaEja7caqHfKIWrSkwQAoxsYofE1EY0ZTaZYm4j6FfIYhporSJFcMZgq6Y0n61QmOoaVcH1B5Yn//Zl3MgSYpQb0pb4S2VxWoZPoyzWOayrZKAooIveUqEo7sMZNgY3JbYMchkqExjHJgZxe9Ns79GiZ9zGj8qvG/RVHN+NbFljlkMvJbquwzlL48SpPcUs23RtMFYMl8gJbRWVroSSq4Rm55qaCinkm+t3pZmhdi6xjg84m1+gSj61QqLGlNOM65p6JNKlWMwOTRn+t47ZKlM0P4Vt8HCok+e6RFzl4vu1OVB8pO86ceuv6q37tVWO1K631ylGiXTt+x5vLckllNGkFGm7nmXfs+46PIqcI13bYQu9QheaYErCcIhZaOuursFkwjCgMFjtaH1iSD0kaYDJCaVK86GcAG9GDqCklDjFJ9kcVtqirCEBQ06FIgrb6OSQUEo2YBtPBaUePjPaCLPCOoNLCh8jwQdSAm0cWlewLZwikSAnSbsYN+TxmN3dGfujir3GsnxwnxtXL/H5T3+Cl679DD/9536aHSa4pkZZx+n8nN/46m/xT7/yG7xz87ZQqWPYUlhTAVLLSI6xNePxDq4ZkTP4mDAp0bcdvuuonSEMXmiaiObYYnDaUaFER+uMJG2oyMq3eBM5OT7lm7/zTb7z8iscv/8AvMKYmrYbsKMaXdntRlwpJQNTSHR9h16vGa1WZO1IWWOURTlDLBGlG6aXCtKQGK2orUPputBMFZOmKUBcJ7Tjsu2oKsdjV6/y1DPPsrO7z97eHvfv3acbBkajMXVTk9cGQyx1SrbGKov+P4ZQGKiFMZUFgMlRgJZcPFrCEElJYauaUJJqtLWMpiMimfV6SecDWlcYDethXTYuhofmWKE0S/K9hiGwHDx3jy54uo3kZkq1d4V1n5nMZoyaDu8D5/MlA4bamG0HpK0i6EQyiawUtm6YVg3zk0MOL1bUs11007D0gac/9BGuXX+B42oHNbtE1exKY2NqKXS6IURHjJnzuSeXGpJS5vx8zdgpUu2JyxOOVu/zmSef5fjsfe5891Xc3lVe+vYr3Dp7l/VzC1x/SlVpqmhRSQaQg78448ZfuszB1au4uqHPhu/8he/wxN//EDvv7WJtaTVyLtHI1bbBcs6hnWyj5fx62Pxv/pP6VnTshVkh9ZvSRObts7iphclkRusp6893tJ//gI2pl8qZebgghlPC5cCrP/N18SZSoEmEfc+v/vt/S+jG2ysLw9Az/FuSNJUtjEZjFmGg2wlUowp3r2ZYW9YpM7KGHMFh8H3HvFtjx2OMDSxPNQ+WpwyrY2ZPP8V3Xvomb31wH3X1Ga7vHxB6T6VnjFVFDiuyjpgqolNH6DpUVoVxqLDaoZE6Zp0RWaMxWKeRBOAkTIiUWK3XLJcrQgiMxmOq2Y4sHGIsfUCStJGcSAnaMGwNV1VhdqboWfqBdCqgsjYaqzV+6JnPF/T9wNnZnMl4CijW/UDXtaScxbvHOvwwkGJkvVrhnEZXNY1pZIsXMykFhiDAirOWfggsV2tCCqUhN2ilma8GfN+z7tYcXNsnaQMx8eDOHZZHjvms4guf+wFGkymDP+L+4REqd8ynSDcAACAASURBVLz31i1yrDg5usf5+TGj+jJNs4PSGQz0vgc34sr1fWzluTi/QGHpuxXGQuUU9WjM7v4lXvjoxzhfrvn6t16h94OkHgDzxZrZVNgXs+kefj9wdnpGSoHLB5dYrZacnp5LaoYpLD/r+OiLn+Lzn36R0w/e4c7dE+7dPeT+nUPZJDc1e3t7tMN9zuanskluGhbLCzo0q64nJovKUQa4HLHKCENTWP+ytPICBtZGJJYhJHRWZG1Ytz2mh7HKHOwecHX/Cn2nGU3GfPjK48x2Lzg+OUGphLOZysHR4SG//Eu/xGg0wfvI7bt3WLRrfASfFUut6bXFmRmVzhgn/iyJLENJ8UXYMGjTI4kUv0/Lv30mVRnC1ca8NEeM0YzHI3yKYMRDSu5VtdlhYIymrl2Jxs3Y2oGWtBJT2GJKSVJGUukhKKFM6UXKUKwK2a4AFxkknrh4RegMlbFMx2MqLT1RDJC8YigeWiklhpRIWJQyRG1ZdAP3jk9oh56D2S5RK6rxiIkxJGuYGEuzt4cdjTHWSU30ZetunNSIIRUJhDCtNJKEdL5ckmJmiJlBKfrCBIghSEJJAb902arHmIS18ggLYCObFsVAKuxMWaCKHFhYNcaUa5Py1v+DBLoykMVDSxcvnxSlN1Dfc5WFiZFBzvMofhMxBFBQVRWT6ZRVtyAOIgOyVcVIV0APfS/zRYrScyYkbWTjm6jUI2bg8o22xqFQEl6g7wdyiFtJeYhBmLfFn0nibpPIfksLLv3mw5lsI+HNxRxekl/k/tn26PkhOLR5bQCKzeeekyZn6VOrut7Ww5wENMqZrZdIRuSbYjFX2DFGWL+qSLNjDAy9SJ1CFoli0mX5bTQqC2u779cs1wuW3YLKDVR1TVYDqKEsjSI6G1AVOXQM7Rmn3TlnuedYJ04IzFPA58QiZxYpcZ4zixglecYpkhFWz+Y8c0h0tdNGGGrl/N5UggwS2VpuGWFElc/5nyHs+MMwMP4I8KeBV5RSL5Wv/QUEuPj7SqmfBG4B/3b5vX+MRKi+jcSo/sQ/+1sodr6zw3N/9QZnX5jT/fia7MWV9LmvHXDw1i7N2PCpX7hOSIHbP9YW4E7z/Ncvce/HeuyXNadP9Xz4V/YxxjB/MXD9gZhmNk2DnsgDXdXCTLA28cIr13jtc/cxWvP8G1cYZUdSgn7fe+Kcp1+awsqjgSvv1nzu569w/OSCB08uCVnx+f/hBrOv1vQ5UK01L/yta9z6k8eyWVEKlpnn//IlkhYTwdoaVEpY3MPBZpNrXchrkiK0zaEApeSAotCzCqK6Baq0RlkrEa1GjCqFXy+N24bW9ZDJIRSkmDJDikITRaxjfFaYmKmzAmVR2pFxUnyUJaRilJhFA5coT5UGWzl8ioR2kOgpJDlhHRXrrpdsboyYHyWhSskAkh8WhZLDnRHjQEFui3mhEsbCBundxFbJaaO2hXnzucqXdWlFhJKoTU1dOyajEVopwuAxFurJmGHoSL1QxpOKMvDGAv9kyd0OXpgQVVUTWsUywuAHghPw4cp0F0YN6sGZ0HV9AG0xVlNnoSJqqXmkJOajmfxIcSsuwVkVk6wCVxXa/0P9XPFCyBTz1oCzVaHIObSSRqAbBlarJSH2rNqWvg94H4SmZwzOiVt11w/4dmBIiiF1nLctaz+gm6ZQvWTQNYXdYo0AXyYafMpENK0XKYGPEP3Aoh8e6lxTks1gTjJkII1FQgAMZS0oJekTMRWjH4c2hgh4JJteYjmF4hiTJJIYK8yilDJKS/NgrRNkOUVMSoQoP4c2Fa4qoFYEpSzjyQhrHSlmnHPceOoZrnzoeeLePvuX9njqygzd97z10td55tplfuiHP8909tf4zBe/iF3BqlujnGXW7oFT2MqxM3uJ1964STpfoLTEqSmzAVcknUVrMSiTCDvZnJrY067X+KGnKmCcKTe10xpTW6p6hMsKfGBnuoO2hjZ51ilwcb7ky1/5Cl//6texKPyQQDuys1RuRHZiSLUBMED8XbR4ohcwUbTMOSaSEo+SWBqFDbUxBfEoSCmCscUwrfy7MaBSoNJQaSOGjySsVuyMGy7v7jCajNApsjg/Y9V2rOYX9OsVBnFA32xdKI0hbJ59YUVsoo61ViSlUVoaO6M1KospqKlqeV5yWXxUFZ7IeujpfSJH0bRnBmFfpc2Wp1iaBPF4CRs/mgzx2lUe//gXmVx/npNuySvfepU3v/0Wdz444ezPnjFZXFBzCYwV/XRWtGTWNtLqwKANCzQmeLqcePtixf7ujPrSHvcf3Ocjs13UlUvoQTNxgeM7b9O2Lef7dwE4uvsu3e3I0Ld88Pa3sc4UQNCzfPABUWdOhyU7Tc9EHaGbAzqOePfwHdLFMcEMJB3ROhLCKc6OoHf0fcDUDpUCalA8OD1nNNvj4PoNqrphZ/cSlw8uoYkY9RB8ptRakY2orTxkk/zyuxu5Te+cC1VcAOaNFDCX6D0BM6zdSEwanni35vrPPCUmeVGelZgii/mC5WLByz/3dW78meew2lEZzch0vPx/3uTTP/k06Bpja4nss5oP7rzPyekpoLm0f5VPfuKzzOctr3/xNfaeOcD9jSkXzT1cZQlGkYC+XwmrgUgaBlJr6C8iZ2dH6OB569ZtvvHgDR5oy7V6gr5zm+FDc9CK8WqJ0YE4TUBPODvHGYdyDcFHMS1TeTsspJTwcWBY9RyfHBJjj9aZ2Hd0qxXD4Gm7nhgjxlqO6xqjRIZD9KicirmvfNYyiJQua+v1E7/v2hgjHkpd35Ny5u79Q0bNnJASbdduh8oLa6lchdFKAPN1C2Q6P6CcSDqFDbLxTMrlOZTnSBmHqRoBvazDjWZc9AN91bDME5bHZ+jQgTunUzXt/ACv3uI7l97Brzu++/rbzE8fcPXyY0wnezw4vM1kp+KjL3yYtkssViv2D64SSBwfJTrv2d+bMZ48RrtacX52RAwdXdfz61/5Ki99+xU+/vGP8elPf5YbTz3DqnuXsbYcXL7O/t4VVsueFDPn53PmF0u8FzA2J8XF+Zxvn5ww25ls722jHas28N7t+zx//UnuHi5574ND0jDQuIpGG3b391kNPfFiRdt3nN56j8M7t6mNBVPT7F0hRoNS1dari5L0YFQmUIxuvceWxdNyseL86IiL5g633r3F9b1nyIMn9IHLly6zHhST2Yz9S4/hmj32rxwwvzjl4vwBici6bzmbn4M6oRmN2b18iXq6y+nZgjaI2R5ZY3WFsTIIx42QQEtvk7UipMi66+j7jhTj91HCv/+VSw3YxLEXe0GV8KHj7OKCVd8SE6z6Hh/EwFnSshSZiA+eoRtwoUKpXKImM8EnUlPOkEcGy01SX3oE2NykvQEbvrMA5kkGSWc0o6pmVBkG3zIkj1ZbK97So4pcWynIxopUcD7nYrngfr5LpcQUHiPS2WASqu/JzhUzSQFynLEl4ULhjGW2N2MyG5GS5/zkiNC2zLuWHIQ1G5TGG01djfj+ea/0/zmL70BhMeQSJ/rQ0wpKJMj3gM4iE/W4lOSTUSXxwhjQ8n59SNtlgwznpd8qIMImFh0lJ66KoK3I8KvCuiVTlrQQfUSXZWfyidAPqKowQECY9QWwECbNw2uL2mztdVFdZbSRXtl7T+j7wgZwDF7CA7LK5dptQDeJoNbGkpVBW4U2RUZSgGFhvovsW8glYguw6dF/t2zkUT8MWU4Xg3QtyoDK1RhtIeciI9swmmNhKJS5QG/+K1JuVaxQ8yZdKhDTwOA7uhRQfs0wtPQpEkKDDx1tt6BtL/B6TaQisaYhkvLA4AdqO0LlnkzPxXDKUX/KSV5x7iLn2rBQlj5FVs6wVIpFjKyz8Fc1Ii3s+0gslhC1dcIySsLGEE+PEn9bFvnb9B+lywwo/ZywMH9/IPQPk0LyFR5dd3/v60u/x5/PwE/9s/7dR1/94wNv/8e3hRaUCl0rCK3+9r96xoM/scQ9om8Xgz+IZjPIZr774xcF4pPYu1ufPefWZy4AaZDCHhxen/MPfuIbW2RYtkei/0sx8os/+ea2CZOiFPnF/+DdsnUGEFQpIw/unS+e038uFHfv0nAJ5CcFfpp4+z8/hZyxdokx5qHGCrYo26NI9Abl25gLfo9uKj98ECiNuTIylGz0wjEn+suBV/+zw+2QkvNDBDHGMhBYs0UXCyRSUryEXqmgbLSk4KWcBHndfBQbNojW259J6PtxW2hyzvgsjrhpw4R55D1ukMZNDncuhUE2fOIgvTWQVIVFwvYyF/MktveFmIeypbsBOHdRdHuGjfGc2aa8yOFpi1Y3FcM/yDzzW1Ne+OqeFECVUUYiS41R1I08wD7Idc9KkE8GS9CDoLNKo2KW92isGDgls90w5FRooWw+V/k8YmEKhBCFIvgIilueL2kWUpJIz82WQIkmva7qrZltpiRMKMVkMkGZhI8tMVqquqauaqxNqCiMHqUdQInsFPkASmQtTohw5ZoXOYECVQw5F6sV8+WafvDEDaCUBU4VfZs0EeKnoEmhND1Ggy1O1TmTfRD5WDFN8yTxQdBiNmq0bChjRg4BY1HGEYKYfCptqJsxo2Ykz51ONLXG2sIMcpQ0Dbln62ZM04yoXMONG0/xw//cD/PMpz7McVas25aDiWU4PeVODceH7/H1r85Z/Og5v/6rP8e+nbHuO6a7O8x2d5ifHzOdTfj0Zz6JMhUvv/wdFqs1KDn0YgajK+pmwmQ8w7mGwCMHXZb6ocuzbFSGrWGpEyaTMagY0DHiEMO6QWe8znQxMgyJ9cWKsW1ou4GsDbpp6IPH5ozbyDsLOyumXNgLsr02VvxvsoKIFs2xfdj0pBil5ihLTrLJyjGQUzEjDIM4gm88DHIWH6G+Z35yxNF0ymg6Y2d3H1s1LM7OOT89IfteAIzSFEr9C0Uy9LCxStGTvAeyMHe0JSOeAKpE0aE0IUpz4aOk2WhjGPzAfLFgueqgVQxDoOvknOmHfjt0r9ct2ucSHSfXQOuGtjrgKIz5R1/+Bt98+Xe4+867MO8hGIa+Z8eIGVrrNSqJrMoPoVBnAzEb1qvEeFjTBMNFr5lhmdVj7g2WwVc0s10O4oxmZDg+f8Dq+ITh7BiA+Z1buPuK7Ae6++/LfVXSi7r775Ny5iMfe4FPvfghrlQL6rqly5a1gj6u0GODbQS8G1YKUzksBh9bcpY4vyEm5ucXNEExu3qjNHAV1tWo2GGVyBFRGz188S9KERHe5+1Z8+g26ncbcWmtC4D6/WDH5jzJGZS2NM1YDBI1OF0XE8zEZDYjx8Br7tt8/gufgyhO81ZHXrW3WQyKtl3TNNJsWqc4n4sR33QywjmDInH92hVOrh1wkTqGrLj0xAEffuI6F4f3MJUFA6PpDNvURBTKjhiCZr3W4Bu+fXKKDxEuO85vvcTh4TnLpw+ZVTPO3rqKmk3pdzr26wobLVFrcGLAKwCdMMNC7BGZx0C7XOOPFYNvScGjg0eFUOIL5RT0Q6ZbJqwW/ymVApqMUZLmFsmS/LPpJWRFWZ77741QVJv+oIBLq35N23X4GIg5sImBT23kiceusTOd8v6tWwxdT06RiCIF0VNvapgMdwqbIv3gcZVjdzpjNJmgjSEkze0HF/Qp0Yxq5qsl5+dnTJxjb3qJy3tXidHSdZ4Y4b3bd9m7M2BjIoc5T924zNPPPcvRyXuoKuLbjsPTOxwtoR7vsDN7gWHpOV8Gbjz2JDneZ7ajWC5OcG7CwZVdHr9+lc985nO4uuEjH32RrEesWs/+3hX2dg/IUXP3zl2WizXrdcvQh9I3Vly//jhvvvE6wzAw25lQVQ7vI9996z1yyrzw9JMcnS0IWbEzu8Ty4hzTZEISJot1l4GIbgdyv6ZdLWjDkjooelVBPcGOwCpdDDKL9A/I2/hTJYNUiLx38x2G94957+Y9mg9dYv/inJtv3qRbd3gC9+8f8s6tIxZrjw+enAZy7phNGpKS+E/RrAea6ZS6NtQxY7GoGBmSQjEiOPCquCZq8QGIpZfxIXGxWLFarcSwlz/4tZ07eUSioGUoi2lg3c6Zr1YYW8nGPEYhTaTMMAy0MTH0AzElXF+hjLAJUBInmfPGm+HhIL+h6G++38anR20Ajc3gW1gDKQNR5BkqayqjSUbhjEE1RhiHIRDz5jyN4rWEIviIzxkfA5VWJeXGEnKipydoxdQ6XN1gjcUZi7apsFANGkXjai7v7zOEnvn5KUMKZPUwklWWng85D5v6ugkJSMVcUj7b7x/l8oYG/ghwsanZwlSIpa4/nCMMhqw37FdhKgg7M2yjTxXFVJONOb2AHE5JomLWBpMh+oBvO0IciIMnDQFyJOhMXvekwWNdYY4qjbEWEyj+F8VDqMxK2liMKQEPbJKxJOwgx+LJgIAZGzNNAVhDMYuX3hy+F8AAy+C9GElbs/UAScWbMMaNMXz8njPs9zr7tp+tUuSQ8F1PGiLGOjkLS8xQCJIsqUqvKgttLcoQHVHa4mOFY4TSBmMp0k2RCnZhgHbJulsyVIkQxwzDmuXqnPnqlJmdM06OrNZEFfDDisF7HAPr4yUnN+9x7/ab3D+9y/n6gsXQ0rpED3Q5MyBsoGgphqoKwgaMT3JPlp5cpRKtHFOZCYoioIAzm1kyl+Ur5b7dmOv+fq//Vykk/1+94iRx7e9dJSnw0TN0PanvqDNcGo/ZGTXU1qKspPSG7NE5YHLemlrq4vyfI9hyI6TCu7HWcv5ER/vHez72s5fKBklt6ZPKaKyVyM0YA+v1ipgCo2bEpG5wKhd39EwoZnR9Six6z/HFBT5FmqpGp6JBC5EUEz4Gur6HDOPJmKqqJHoopjKcywZ9Y1NijMZVgi5v0Lyt/0UpsVKYdCm8oJ1BWXGC9t4Tkufssy1P/Z3LpancbMkczjgxu8yZeuxAZaxS1JXoeaviSWCV6JVUllgbay2T6QTbWLrY4/ueFGORBUj6y2w2w4eBvhetrE8yhK+94sFFx+Aj41FDU4uXRBh6hmHAKI3VYmITfRJPghhommrb2Hov+eRKb/RhYqbpisaRLNQ2H6OkfyglD76CyWQiZncoRnWNRq5R7SpGdQ0qkPKAIpWMZ8Wtj5xz8qEFzUsNIACB5MwLMKWtIawGiZPVkHRkGXryKnKxhmG1glgOT21Q1qIIpBTIMUCWjaU1Im9JORNDcar2Ee9jATCiFIKC6Jpy7SlFV5VhwdlK2AopsupamuUCnTx9v5YoKSdmWINf07YdOTsW8zmnxhAbRYWn0gbjKpzVNDHSp4QvQAkps1y30oxqOQxSTnTDQLaOyc4uuwdX0KMVh4dHtOs1xjgqVxVUVaGygFuhSA+cLRKSTcebH9IZY5LrGKNsfnJxLTYqEZQXyqgVUxnJrBfZQCIIPdQ4bGkIhtQTup6UEn3XY6xjNt1h1EwYhpZ1F5iMpzx1Y5dnnn2OZ597lkuzhge338WvLjg69nzw3dd457VvUOeB41uZxWcv+JVf+nl+9FM/zKW9XXZcw+MHE6xRfPtbL5GS48WPvMDp8TlvvPkmqgwGMYkvjioAQT8MwspxDlPMD411ZO0YgqdShq38RGmcSsQcyClgYmR+MWd1fsqKIEytwTM2NXqIRKNoe0+2lrbtUEZTGyVGqkoaQK3kefKFPps7j12saaPBR0AZfAyFJSQAZfQyRIleUiRLwzCQy6b1g3uHEL0YcBXvjHRFjElvvv0Wt9//ANeMaCYTYhYQYblcopHce6NSASc38oNU7o9M8IOAdebhgR5xxCRDvUoSpyp0UEXSit4H7GiEqxxD7zk5OeH87Aw9GNbLlpAzrnKsV22hcGa6dU/uN2dLMeyyhntLz8/+o1/m3tkHxLRmahSToGAIxBjEZ6eqIG/YHRkGqJK4y2scyhtUG2hczXpIZO3Yne4xqi+4c/uYeuc2BwdPcX3vSR6b1aS54jxKXHdanrO89x45BMLJPRQlPSgnnt5p+NynP82/8KUvcOOJyziVuDi6x5WDX+fg0jmLmDg9O2PoOoxy7I+vgW5wemDeLkkxyBBgLYNPmBiIUYCihwa8WmKijUEbQ9OMcM5uGzdbzk+zZZQJnXiz2cw5E6Kl7ztAU1lpQDeeRtthRgllOiZYtZ7ReIxWlYDvKhGCJgaPs5J0g4Nf+S9+sXAYpWHuLve8/g/eKaknmgKpC3sHWJqeI3XG+9UdrHH0kw5PhD8mW8/36go/DKwvt5z+EJj2ISW5cN4LEwhJEBHSIinDCR+QL0X4769y+82vs3IT1HXDx248z2PVHh2e6DRRG2HkaekAtVEM6yVawbip2Nub0Xaa1WolRptGM59fsFivyyKiMKayUITVJi1AIyyLBGkDLCKf6WZBsHHo11oGoZwiqSwJQJiFOst5aI38GR8HXFXxsU+9yBOPP87p+SmkTN92NKMxq0GAS6MEgNZGRsIUBSDZ3d3nySefRGnD0ckZZ4s1K5/wwyAAouoYjR03nnyWnWaXNGRQiYuLExaLBdrVnK96HtvZ4Ud+9F/kU5/8BG/f/CY3//ErvBducjpfE5RhbKe0Q+byeMTl8SVy7Lly+Qqn9+7w2NVr+P0ZiUAzshyfXPBPv/ybSJJajTYV+7M9zk7PCF2kW/bcfv+2gDcp0K6WdGu48eTjfOQjH+b45IjF/IKsFFU9xudMHlpmTSV932jEdDJldXaEG01IWuOj+JpYZ6ldzY2nnmZvMub4/iFvvn2L+fyceRdw013G+1GS4qL0RdvhkkwA1sEXD5WKd27e5ubpkvUqsPPWNdad5+XXX2VIgfF4gk0iR+zann5oMQaqusI5jdFKkp9CKH14IOTN2SsSpbLDE1bsxm9Oa7IWcMUiaSr9sqXtxcQ9lzqoN1QFylmvovyehqwyAQ8hEoeEN754JQjAN/geBi8S5xTF/FJrgg9b1samvog8IZKCl5QuhUhy5Q88PFMSskjSsqDKxYR8M2j7wZNiLixYxBQ8BLzPGJ1QCZwzjEyFRkuv24oZOUZYprlszZMSRnbMmRgCxkLW4mtgnCwmlBbfqIRcb2s1k8moDMab5DQZaI2p5H2oDKbEYSrxhQrpIbsKynxR/BG890AozIhHPjP1iOwhxu0CQSM1z1qLtpactcgyfYAkg7wqUgpdWHgJRYqS+qWMgBrS0wlYYFDFIysTfGTwkRDkekQvYQHGamFFpCR+Om7EOvUig1ByrpsNGFSWwCkLWGaMIasoEe5O/Oy2DGclf3+z3Nv4ZoT0SJ9NWbipjamsMEZiQO69LAx6VeYWVWaUVBjB37NvzMVnDL7nmshLQ0zSP7X91hDYlpTDnAQ4SrH0Q1rYO7lIVozNxOmI8bimTjNwCLChErqw8UJWxOgJSbhSKkdSPzBfrjlbzJnVZ4y9ReUVOg90iwuCHxi05YObt3nl11/m4uZ9htNjLvolp+2KZZ/oUyAOkS5EOrJIvNmANrKoywUTiyrTB/HFalLpBywknQvzpSQbmod+F1G2VTIc6O+jFH3P6/8XAAYZLt3coc2RNvQor4jLgOsDk6nmyqxiVDsiA7Ey5LqWNx0pqChU1jFqRjRVTd8NrNsW6xzjyZSYM5kz9o5bbty/UrKXRV7SDj3d0FLVFbZ2MgSuZeOjraXSsFs5NIohRNZDpE8KkzJh1VIfG2zMTEcWTSLHTPSQVEVIFW4tplvTScO4EV+KoR8KHToXqYIUa2M0TVPocckIlaiwEqyWBnLTgBhtqKoaUwmA4cNA1yX6lDFesfdOszXV8UGML51zuF6TYmQyFdMonTOVFmOi6XSM1WrreG20RltpMEftCOMMre9oVyuJePQVKguDYW9vQggVq7ZltU7lADOY5Dg9HFDRMNmZMG4qrILkLV2r5e+XLV4IiRAMOVgmk8nWuKyOtlSGMuQmKfJVZambGnKm7yX+MyHa4d4PhOSZTB1N5TAGdqYN46ZCR5GFTJoGYxXL9QqjFaa0v+e7a86fVsQuiFO1NoQoLswxZuIQiCGxP27wq1NUvUM/dqjKUfvAno9chMCQI4Od4KMc7JU2jJzFKE03dLTdwOCDAAHAUEwmh8FvEWKVhLKvtRQ8neTaW92Qo8daQzcEtDZYrYmhZ/7+e9Tjmj56Qs4YVRGzoR9UoWnLwLVcztGpYnc2wtWWAZFqbFzPa+OwdY03lWixUaiqwqfMYrWk85rpeEyzu4cylrBu0c4ymc3Qxgh1TBvxWOi60gDJEFE3lvFohHNODrMs5m7BR9bLlVCZKdTP0khkkxiNGypXQ0aMPrUu8ilDRGPHIya7e4wmE0xVkQKEPrJeLxnUSqiakylUYxIDd45OuXpZ8wQwno0wJvHet7/BcP81ZrMa6orL1UBenjHZ26fZn6GrincfnHH95vv8O3/i03gdOD8/ZaosX/zYc7z25gccny/4kR/6QdZty+vvvE3QCd1YXFOhGwtOEoR2d/awxjEZNzRNw3xxmfX68RIlDKvVkqwyhw8OySpRT2tOjxYQE+l0WbYBAh5opVnFHqM0gwnEollNClJItCmUyDaL0lL6Q4msQ1sWK1iqjmaphbmhLSqHbawrPHTfRqstyJqzLkZWirUaiaTDRJQTwC+7NVkbViGS4wpWK9LxUTnsN1uKDHEoGxPRVGutZchSosFFG1KMDEGaLG0cXVCAQdeanAfIHq00RlWEkGiqHXZ3ZjTVmPv33mM+PyOlNYv5Bb6LWDdm1YGmxlpxgb9+9Vmu7F/F1pYHD+6yWq+Y7F6miy1xfkrqOyqnCUPgpPVYVREy6GyxXhU6bXlv0WJCQ5UaMh1a16xMw3o4o6oya5Npa4fZ2yUaxztv3vt/mHuTX8uy68zvt7tzzm1eG/GiT2YmuyQpkaIoUSqpDJVcZRkC7CoYLg9swxN5YHtQIwM1MGB44n/As5oXDMOwZVdJVMEWLVWpJMgqNhJFsU1mkpmR0WS8iNfe5nS782DtcyMoi0AN+YDIzEi87p57o8/QuQAAIABJREFUzt5rr/V9v4/VRebOyQNevHjK42fvs9qcA3B59QR/vSGlkf76ETYnDhcLKmf4b/6zv8+d10548MYd1BDAVQwkPvngI1x++Izz1Yp8fsG10oTKcet4STaW5C2Vvslqs2YcR/oYqWdz5o2jMhGVA5WOzCowTYNzFmWl4VbXMypnSjEp67M1Roj45B0noalqqqpiHEeurq5ZJ0mJqbVmb38fVzzAUsizizfOStEOvsiKPUM3EMdEY8Te6EPA2Zp/9D/9t0Rg0/XipSfxT//xP+Hv/A9/jyePH7NZX+HHgWHocc7Q9SN37z3g3/27v0HVLPj+997hR7/yfULTce9377JZX3Nxds52vcL/jyOz37Ycv33MerWiqhtef/0NYk68//CRrNO5iM1sKrDsJcpAGBKn+kPcbEl6L/PwvCWf3Of47i2cm1E1S/KsZhgzOUT29hs2w4BTCOMCTcTSRUPwI9sgg4OUIlEVyG1GIjFTKgpNmYrJ5FiAj/8/AW1Rcr6k8cvXTswesjAVDusZDANqjESd0ZVijB6zWPDgE2/h9v6M8axjVi9oh15scU4UICIBjwydQEHni4blclGGFJ7YBWLvaZqG/b2GGLYk79lbztEq0PYrtpuW7XYgK42PI7O6YnHzgOPDJdls+frXv8wP3/kRfmPxOdHUC5Z3HrBYnvDw4WOenv4QnRSqD3zq9oxPvX6Tv/zWt+lCoFku6J91rDfXJD9gFRwcHHD/wWvcvnWfG/MF2801w2pFai8lyliByh3eB548ep+/9au/xGc/9zm+8vWvcbHesvWBHEaanHg+S1zdOYJ+g+/WrLqO5d4e8/0FBwcNq+sWmzVKRQ6WNcv5kniU+OgbirOzM56entJvr7CV4Xq1QtcztK1QWeHHiG4aUchZi0qB7WXLe89bbsxmVMs5T99/xjtvP+TR6oxsHCpW0HmO6xlDHNFxkEGQ0tT1DJcttdL4lPHDQD1fYjIoEimOhDgSklDoFQ6rHeBRytOFHhMVs5iZA8eH+7SdJySNzRqPyPyNSuid9cKSsAxKEZqI2+uYWYuLDVWlGAeoGi1WGmq0hWEYMMpirGIcPRNw0RhD9CMmO2pXE3yHC56ZUVRGSUNNS5Peao1NCpMVtdUERbEdiL1alM0GZyN9P0BSRDSbscNf9FQqsV9J6g/IvqpJNBZGPCEFctakZHb8nUQiaCucicq8ZE6UqHBcjbIVddPAOBDGkZwH+mFDVrBf7xX1g8RiKiUwUa8CymZc04AGd7BgVDJ4IkZRnRpRG+vCUZA9PJepdi5rBAWcGsUalqUhO4YgNYAyoKzYKnRNzprJaqGt2DnGEMhJmgKmqpkiWQc/4r1H6VyspoYhJvIoyWSjrsglRcNqCSFQKpIJqCTXyYcoCnylCDqTDIW1pzAhYaKodJOWZldWCWcVhB5txCadiwUrZmkMWCuKjqSQVBtTfvfCcRmd3DQ65aImk5+h6gZtKlQbMVGau2MIMDHDdGkGqUm9GaR+1UXhU5L8ynST5MWaQ5ZGhw/jroE0KdlSEjWD0VoGncWGYYHuKDJPGZcl4lQbTd1HVB/Q8xlm/4iQFSMj9Am1SVyewYs7gb39S9TZliYOBKXw/YZt32KcwdewuP8adnaL04MnbN5/yPXzc7ZjLymCYSA4LVG4SlRNPpZ6Xb9U3fRA0Hqncp9pBVbhrUTBWyCkURQz2qKtwSlTuCVBtq+/vn+98vFT08BIPpF13sm9yNKNWtYzFlVDYzVeZ2KVSc5ijYWQiD5ilZYiyVVS7JZO0OStAzh+Mudv/5M3UDNRasSQGYKnHwYGL9nlDkUk0hfKt86ZqDV56CEl2jHQDgGfDQFNP3qJNs1iuzBKFiuiIubpj8iow+SPii+BNrzSXJrkbSln3KS+L9NpAbAAKu1sFJpETqLmqOpaNgRrpzM+udgAclGpyPUQ7FLKgZQsJDmypyQchIw8MOREjB5tDVXlMEaz2m6LfUYOlBLjqQXih+bixaWAL1OSTGYvtGJdZMZTd1tGzvKCJXN7ugKTXEggMJRDyxRxNRVrqcgcUWrHCVFlSpBGmdxLZBSo/PIgpAj0fUf0vTA/VCaGrkQUgbJlsykLTOUqalftPPDy+0n+cs6JejbDGsverEY7Q6dkocsRmqSYuYqcFUFZsoLaOmZVzeHBPhjH9XrN6ekL2m6Q313Ja5Su68QciAK8UexI1cIJEXBnNkJYzkBWCu0cVdNgDCgdMFExBkVSlhiVLObakmPCVZb9o0Maq+mGkU3bM8aeSGToR4L3NLXBOY01msViD1WuR7fZ0ofEEBP95RWrtqWuK4IvTT9rS0RgsScUlkFKqUxyFFVTYysBbYUQpfFX1DO6cpgszRtT5NLGaOrG4pwRDgYaqw0pJkYfMMayONjHzmcsDw85un1CAq4vOzolsb59GElAO/R0YyT0Ai9Vxooctd1wfX3OxbOHrJ68TZ5ptlnx/g8e8ujRj5g3n+HG8UewVYVZLHl2ecnziyte+/gDZjf2sEbxc7dv0dcHPPyjb1DnOZ/52X+HwztvEXXi4MYh+wf7ckBcHLC/d0xTizLLGFNAZppQJt8xeIyB66tzHr7/I77/ve/w6OH71LM5am6kmJs2xdLUzLncC1qT9QRInRYbmUBQoLYoQ1YWYxzKNijtqGdznK0FfIvCGonLTVGkpnIwkkhGY5xMbpFJ3Mp8hRsPXocsHIxJseRProjzFcd37u2mH5S1bnrmQewhkw9XFUnq1LwQhZ38XJ11ie2DWZrUDp6sJRrSKI3OFoPFKsWNwzlvvP467foZw3aDBRZ1zdZ3OJN5cOcOR8e3+ejHPsn/uffb/Jf/1W9x8eKad3/0IzwZt9mSjeW1j71BM294/tyy2Vwy9IHl0SEpOpQxbLcjYZVl2mEsIWXOV2sWQVQ1Pra0PqHqBbOlI6uOD8/O2F5f08WO8fwZKljOTx/zwx98gyGM/OIXv8D8I7d4Hxj8JePVihBGzi8+4ObePm998lN8z1nu3jnk6vqM6kOYzxvaF1f8ye/9Lm9/+69YXV7Sb7eEbcfYj/R94PTsQyKK2tQEL376hKKezbh56waHh0eYUoSlOBD8QNKiZGhchXWOyolXewLiOSsMCmM1Gkn+kimaI2fNdhTZubMVxmTqpqauG1xdY50t1hR20l6BnjopZkbHaA1DO4KXxrwpdH1axeHhETps+cEP3mG7XRN84Om7HxLHQBUdNmXmlQCnnauIm8A733oXHzMvnp+x/fSGVLdcP5Z4xLAaCdtIGhN+m1mfbfFDxIbI9vkKay3zaFn1vQBlM1LoO012gVxZmvmSw+NjrHZcnl3w4r336M/OubW6y/Hde9x5/S2Wh4dcrTsev/+Qi9PH+NUZl59/wXi6gccZZR3ttie2a3ToyRqChmz0bk8U8H1pmilFVKWWAPRP9A8rSFNEMbvByET6T9kQ+oQLijCMmMYWGK3mG9/8Bp/6mc/w2uuv8+KDZ/hh5HB/nxE5aGiT6botfd/iartTqFxeXnBxfkUMJRI5F1bTtkcRmM8Mfhw5PX2G1RUKi7EOWzlplLnMfuOorOb7b3+bsw8fsz3bUNd73Lx1h3sf+zif+NnP883v/oj3Hz5lWF2jhp4biwPe+8F38H5L123pUsJrjXGGrBwhDhI1njNGW1bXWwafCUMPYaRvV8ScqJqG+axivQ18+Owpf/AHX+ZnfvZzHB4e8uTZh1xeXnEwa6h15vr0FKc0h/v7hOA5uX2bejanaRqRR/tRgFgo2m3Psw8vabcjVmVmzYxlM2MY1mxXK9Rsn8o6bDMjpcg4DvgoBwZnhagW+p6r7cDr917nN/69X+f3/+gP+eo3/5IxZE5u3Wfo1vjOc//OA0I2bIdMNauoZwuCUowe+gheOZyt6WOB7aIZQuGqaQe5glShgpf9JWeqyhK6kVpX7NU1VeXBGZKyhGwYy/pONsiYqNS7yKS9jy3X22ds+0uMUQTvUVVRYiZhfM2bBSf7h9y4eYPrqyvW6zWb1UpsoVVNNwg7TSuNMa5AMAUqaawRsKwSu4Uc6GVHVKURkYFIKhDFJAMhW8l7FbSoUaJnDIFxu8UpiXCvqhqlMikGchY1XJwkT6WIzyhiYXNoBNafimUz5swwBqyL1DZBUVyMvmMMA9q68juWZzWDQuNssfFluHn3Lnff/Aj1wZJZPWPuZoy98NqMceiUpdFiCuy+2I9ksj/ttYWBhawjOxs4WZogaKKM1MuerEHH6eCCNQbtLDmLPYOijMhluq6L1XsMnhwVNulyYHVoV2G0k9eko0znk0IlUQ5L0ociVhI5qkqtVGlDZRy1kncv6AzFWp3zZNOY3gxZ8vQEmCxnCGBnYzQoAeGiCBaS0Sg/1TGgjJamRgHt2wkCrxVNMyOFkRitWIiQOOTJUpIKeXaK8C2ZBZBVYUaV6zp9z8nau1PGlTh7YzGAjeBMjTJOmj5ak8p7aaIwiITRaojWYVQmY2BIbLeRy1XP+eKcsFZUfc+e0oztmk23Qc8q2jZCMyPvOeLhHuPekm61ZtVt6UZPTBBBrIMJQi6A+nJNU4IxJiIRrRLaB0yeEcugIxR1hi4ogkQqitLSliyNJZVfwk//po+fjgYGsm8qDSZr0kRaTarAZeTFGF2YB0qhUyTFgE5RuoRFAutTwo+eMPbkFBis+LTiODIGkSt2veTYD0EONlklVCsdt5hlIh6CTCOcyuxXhso5QKbcKYIPkRzEry0sCYOos4s8M5bmQHmDxeMq0E45kgsXIE/kZiaZURYYxXS2V0Vmn0ta7o5Docg5kKOhLj0Bo9QO3pULZ4Hy/RWSUU0B1cSUiNmIzAvFmDJp8DitqKtKlC1KFnGlpTurtKaZzXDG4ocBrZRYZxRsw1asDFrouiFIBKoqzROUeNpDEHrutDy+SuedPib4DzkLFCazg4LK4vBK0RakyPYhkcrBVhkjPumsCFlyiJvaFeCPwtU1tTWkEIgpsreYY7Umx4RPXlgAJXouK2nqyKGrSMqUXP+kDMrWdOPI6YsXoBztMHJ+eckweiYWcyyTrn4cuV6viRFWqxV93zP6QA6heI/LoY6yEJVrl1UmE3d580pJTJSaFmElxUYIgZgCKmRy7AlkfFSErPFJiaRfTzFMhtligVNw3XX0XU9UgYTI+mIEFSPKe0A6+T4EBh/QxrK/d8im3dIPHaRMChFXwKBaacYiJ568bZVzQpi3UgwlpUpKRBIgp2LnidNO1gGVJh+jFqm1lXsmloI4ZgGlhtHjqob5bIZ2TixQWtMPI2kcIAhPYlE7+Zpc0mhQGGexJPzQ0W3X+L7D1Y6j27fJM8Pm/JL3Hj/hcrtFNQ37xzex1nJ85x7Pf/SCr3zzOwy15YZWtHg++PCCiyEyv/dRFIfc32/4yCcqtNVUjcFUAh7r+p71puNy23J484jtdcvz589RWTH0A9l7wjjSOEsaR06OD/nMm5+hv9iyateECQoaJcasKsVDzi/5L9pZMLpYehMqh8KUoUgpLRgnRY6xaG1xtRH7mBbY75gzxjY0rpINBQrYM2C0LbM18ZkqbVgcH5cGRtxt/N1ewlY1s6PjckhSL7WWuwYGO27GtPiV8qcUGsW7jFhfYoowBipdSbM2j6BrgVtl0a3qpAQo6iwHewsWjePujRuM151EPh5qDo72+eVf+SXuPriPz5EvVZr3nnyH737rh1xddxg3J9oaV1XcvHHE3rJGpQ0zG9hcw2yxpOvAGsvB4QkHb30EUy9RruZ6/5u89YtfwLyY8cEtD4eW19/6HEcHCw4OHE4NPH38Nt96+lVU8CxmFcZFnMvAwJ2be/zWf/Ef8a8/8of8Mf+M+A+uUL+oySeR8R+tuZ4FvnX3r2hty3+3+e+5uLrkBkfcPDrk/PQZ33LfQH0uws/JNG3Tbrk6Gek/Ezn7rRUZsAXuPEU5U2uu91aMc8+Fu2TzYFP81tLczTmRcsc4BryTZKGcBPBYOSsF5GS70aDLGh+joh8igw+EWKZcXWCkox5TSaqKUA7fKImYNloK4RQSsRD/ow9C1bcOYwzn52ecXZ6jbCXS5VxifPuENQ7nNMkYlE5FUpsYxy0ffPCOqCq3HcOmgxBYX9tyW06sJGF1eO+lkHYOH6VpFwrYrrT1i0hQQMRx9BjrCV1PVh6XJR3EqUS/vuRFHGm3PbrZ4+Jqw9PHj7k+OyX3K8LFJWoT4HkstZDjxt4eB7Njzq8vaP0oDKApdvEVj/Au7q80+l9iCv/mj78O85z+rbNh9AGr5Rk11hJjjx8DT58+4uHD97l/7zbv7M2JSpKmmspwdHTEbF7z4sWHbFeXjMFjXY0xiXazImfLYr5PM5uD1nR9S9/2KB0Ys8O3vUAT3YzKzrA2YbzHDwMmST22vbpmtJr57AZqkSF7Rp14/WMf5aMPXuNP/t8/w1rPgdrDd4l9a1nMGk6HDWMGN5vz4M2P8umf+QzOKL78f/0eFy9O2XQ9/elzsr5AKdlH8D1ksQNbH5gtFsznS8YQePt7P2Cx3Ofw4JDT0+dgK+7de8BRVXF8dMTz8xX7+8d84fO/wGy5x2bb4scRpTPjtiXHkbbd8PDRc56dXjAMgaayGJXZbHpaH8k5cOPmHvP9A2w9YxgHTNeRUmZoO1IbWQB+GOg3a3746Cn333nIDx6f8s7T59TVjFSt6IZAoyuufGBt5lybEacsfZRJdDOvSLZhHAZC1oxD3KVcYGRvUUlDFiuBFNWFWZEktrSxc4a45sX1FaerKx69uGSRWpRxaBImJ3JMzGpLPWuwlcJEaJTBkNj2a9bDNRs2aGXRDvqhZbtdoYzm+OYJP//zv8gXvvAL/OEf/iu+/H9/GbELa2Z7Rxin0U5DsNhZg64q8eGXg6c09xPZiHIivVJ7TxPjPD1TeUq3kMOjLZNhpT2Mirbr2bY9TROoa8sQklyXV0CY5LKDFQ7DVA8KZF5qSq00rgD3Q4joBPPZgmVdo5ShK3Vk3A3R5HuMfhSWF7JGHh3sceP+XayydOtWoLyvPPoppZ21bxqWio3sVbikKVY0UTgX+lR5HaU2zaKcUEkUorvzj9Jis4oJn4UVMoG4DQJozTkSU34J3FaFfUCxW5ahBQBGvp+zBoOSBpGWYcVLpokMY5QSCLRVDhUzZEXSmQk6yvQ6ypqOnqCrhcBQGhgKhS0NDGshaVGo66R2A6YJYK11KqodqYms1aRynBYwqpz7jJmu7QSqlKaRNHhiiaSdGkgveQ+KYkt5dV1/Zd2eBvTTXiVKmzK8zWKh195DkDQ8rFjn/TCwvd5wdXbBuVKMWmG7lq3SDNstm26Dndf4oNhebejXkbPzc67XK9qxZyz2bl84VKncx6nMpicmSlIvz2wxJrRXhBgkVShnefbKK939s6hNBKaudiEPKf3kPeyno4GhkHQDBSYLWR4lBW3XdbRak6MhaS/xRUY2MmFgCOBo8EXuNQGFUiL4wHotuUTaWKx1yEIRShyP8B3qRjaGcZQImto45nUtXbI4YhUsmhlutiArSx8y625gtenww1hkWCKbUEqKKikLM1pb4uT3Kx3nSTq9I7CiizKiLFJak4MQb6dJJEXaJcAa8fXacrDbUYPL64YyoZ8ULUFSNIxWMi3TxTOnCnFZKWIWWJS1lqaZiRS4cszmc1BJIEUa1HwGWjPGuJu8QSI4SySTwkifI72CIQW64MmqiOayR+CJeteYAnkAYwHhCIxHMz0aU9Z0JBHKBFgX5UEyBl+uYdgBPeWAlXbXt1h1kjQ8tJZJgjKWHMUH6X0ggizUSZIXvBd1DmVxDzG8ZGxoyVh3ZJSx9D7x/PwKHySGdozC65hyqNPoZcNbr/kwZ2KAMUaUNjRNjU+J2tpX1Efl0S5+xuD97uGOSZoLQQmvJJTGxKjABwTqlwLOJtCaIKUDaIdzhrqp2W5b1tstV+s1M1cxpoyuG4QH4jFZ7CrKVGRdpiZaE8eRGCLNfEHdNFRVzWp9jdLluoJMOpAIshQn+Z2kzkCJwdXSAAzlfk9RrrnWsuHLQQUyBmskE1wrSIj81BpRx1TGlghZw97BPov9ffFlOkceR5KXBkCtHHlR4apjssqMo6wjJlfEMVLbijh2fOub3+DJB+/g2xc0euCy3zIoQ+v32Ds+4P0nLafDd1n9Ukc/7pON4YcfDGx5RPX2ORjD9aZnvriBdUvxd7ImjR6/6fD9luQHCInV2TUPHz6iN5mP/cxbZBSPHz1mGDx910PKjG2PyTKtu3tywu2Tm9xeLNFkVmQpMIq/HGsK/RvxAedEtkqsHgWgapnI4MUXnyErYbWIjzTi+0DyvSRpZBh0TWX3RNljhR1k8iQ3l+LsZS9CoZqmdNWnAg50vZUpQT0vh1PKts+uwJjqFvG0vpwaawo4uRRDEzAtKS1KHW1FVp9hyhXOOUPIVI3DxpEbx0eYHFk2ji9+/rM8evsDnr33gpObJ/zyr/4Cd167y/Or53z9L/+C7T/Y8Ad/9PuoPKdqDllv14Rk+OT9OxztL9iszjl/9ph2fU2KicpWJC/JOLfvvMYnDn8VNz9iVJZv7/0vnLzxGfRizvWtCxY3j/ncF/4e88phcke3fs7cXNPoQ/aONbePDzFk2vUV81lNM5sxXK/ZfGnL4m8dsBdv0uQlz9S73LGfBK84f8fjh8if/ovv0I9rwthhtSRLOaVKalRiub/PfrXEzQK2WfHg5hvkLP1EvaObl8ShDPQZ4w1v/f7PMjubE6JMTiS6DsIYGOhkayoTpN6o3fqldPn/TOuWJmAL5C7v7Ee6G6iqCmedsGHyBLaUc4fKvigcskzksqwxMSbS6DHOMo49Q/TYumE+r1k2S6yx3L/3GkO7IcWecdzSDWvZs4goFcipw2iNNYE+BbFUBCk6jXJYE2SfyQprLJWrcVVNNZthjMN1A2qc7Btpt1eUMBtC2/J8vUGjWNQzlrM5B7MZrjL0/Zon712zakcu1y1D12JSwsSO5Adqo8ixY7PuODy6yVsf/yiv3b7LV772NdqzU2LhXRhr0QmK5G33HOVX/v03za9ehfX9+IcMBFzVksJIUhbXADpglWVWV6BqvvkX3+M/+I3/kNsnb/Kj5++QU4erE3HoMQbafovOYJxARMd+xIfI/v4Br7/5JjePTggx8PjRQyoD3bAt8OqANhWD9+Tk0TljdGbcbllqR+5b8pAZg2Y5k31oVFv80PHs9BnvPH5M119wXMP26YZj3fDZB2+gj+c8ujznuu+obcWm67lar6mc4fjkhOBHNuuVHEK1Zb48oHaW9uJM4tOTQPo22x7rbJHzwwfvPeRnP/dZro5vcn5+znbdcuu1m+wd32GMYm24f+81fuGLX+SDR4949uwZIXj6bc+zJ0+4OL/Gh4CPipg07aonxeKJNw22meMzuGbG/tExMYz4oWe7vmLcttSVwVSOqplz0CxpA3z5K1/nB+8+QtkFt978KMvlHv70jBAzF/2GzRhRxXoccsApRd9tUCQaZ9EaFo1YctdDT0jin48qFCm8lcl2FlVFCo5+AL/ZQugw9PzZ198lzX6Hgxs/oKkcNnt0kmbe8mDOr/3ar/Hag9fQyZJ7aMYKnZZos2Q2iwy5pxu2ZBUkWtiKxezs7IL791/nb//q3+FH7z7m8vKSi8trtv0odXuzpHaKvUWNbeYkpRhjLOX5dFDOZBVLI75ENk/tBZkeSRwoUeCDSGz0cl5jyKTes0qXdO1WYt+Re0aZUAZrBSWvX4FbTsrHwlRLQmnEFzBktXsuoZ7POd5bkNC8uLzYHYYnq0sGXOWwxhLGnhenz2j/vOPk2V3u3LnHcrYnZ4osQy0yJflCGhDkaVUocM2YdtP76XcQrmBRcuXJUq7QGHKQutkiTDSjlKhlRjkHScWoiVmUtWKpLAh4rdDK4LImRGl+q/LbyD4eSTqhzATfNBhVGiDW7gYtWuWdvUWGlWIBUsYIdFskcX/t0K92a+EuEpWXTVv5Pco/S9PBGIHGW2t36v4pDXF3NlOqNM6nSFB5v2TvkFX4ZcuqDECzWCamLsR01pnW8N1X5Jd/KPdvUpCi3nE7pKSaNEUv4a3ee9LQM/Q9yUZQFts6utWG67NL5gl6FGq7ockwti3rdoNpKkLS9FtL3wYuLy5YbbdilTHC9Eshkss9lUvhlqHwHdXL89euoSHw4gkoncuAKu2Uti9V+tKUl/8/fe5P+vjpaGAwDdlSiQOLhZIv0xuMFFZoVWT2HmtFRuWmpoSPJf82o7RMglMWm4hSivl8waxZQNZ4H0lhLCCyhqapQYnvlFBgmlpiGDOG2skDRIwEQPxOBmcd1lrhQSSKfMaAEnaEzuVwoV/+/tKsyOX1lhN3meRknSSVQWsiMp3WylBWQpmyJ4leMxqUlU5WGbuWakUeQWetvKaSrPFqc0NrVaA7L6mvImuSZbzvxR+plEL3g1i0cmLIiS6KFGroejQJ7wKlnSiRoiHI5xtNNpoYRilmTUk80QLpmR44sbOIPyoUH50x0jAA8fFmJRYRq3WRq5vC57Bi/SiNF5MVE0knkIqdRsBDykdpEvUjKWa6yhTJmKgVrFZY6ySG1DiJZ3TVzkMYgi81qmxWtpphqpqFrhlLhKhWCaWi2Ey0IcQk3AqtqaoKX9fSgVWOrDWUCbjSWg5l6RWacQjkIDFPkvQQ0UY6vcZKs0YpTYiRbuiBmtmsoaosGcl3R0mSRMYStcO4jM+azbZltVqjlDAsjFbMSmOKJJ3nlBM+QRw85EDX9aJu8oG0bcX6ERPejyheyuNynlQ1mujl3pPutkaa7ApTWbLQFoXobixOCRhQaYNWArhSRnz2rmTOV1asP5WxVNZRGYuzVpJXZo18fSGEjzFgtGFZG2KQzXexnJNyZL3Z4IdAGDVjyjgDKifOnj/j6iyRQicQSmMxzZxumOGouNoozroV4xBZbwwR3vhCAAAgAElEQVQnB28wPzjAqwX9WtQgihnrtuP8esWq3dINcnCyJpGTBx+w2aCioqoUXbclbFbcffCA/eajhKTwIRYVyyggwdWa1fUVa99T7S9IQ4cfR7SVzdwHjx9H6qoS2FZQkCPZltSbJA1inTWmbHK5THBDLmqtLFtoKgBOnSw+K0ZblEjWiWx9agqqiUEij3+cGhNO4HWUZitA0lVJDKl/bNN/WU5Iso5KUmhOWXCqbAzTpCSmSE4joewL1jkpqmKEZAWWBmV6JvLj5WzGnbu3GPotyg/cvnPCZn/OuRVQ4nqz4a9+/8ucXpxxvrmWa28cwctSfnL3BrduP+BTb32SGjh79oj11RXt5lri7lRNN0oTJQQIyeG9ZVSWlBSnVy2LYUbUFZGedetZXaxQfktFT7cZOd475mBp8MMaVMbESGxbktJ85U/+lJmq+Xj4OB+5/BQHz+7we/2HvPFvfoYPPzwldwP81xr9vx9gfMRki82JYbsGIjNXUTc1N09OcPMF3S8OhDuK17/6SVJM1BGSl9aw2smApWCa4lFzTignz7BRAqiLQRIBJE2kRCIXWXIulkf5b4FfJwzaOlCmgLOFSp41JEzxbSdikPVvB1RLIypKc0GV6DmdcrG9REzlUM5CTnTblSQTRYHc1baiT4lh6GnbLav1JcYqXKWxlSVPqQYEZLOQJmDMlAZLLg3kQG3msjZpi3E1MSWUFStrRFI4cjmoKFXyWJIAT61S+HZLFzxpaLG1ovUj69bTDpGA4Xhvj6ODPfrNFS9cS0oehcLohNGB44Mlrz94jb/8xjcEEp5CAcSV52h65sqDI8ql/LKT8W9bhyEJDqbqSONAyhpMxTBm3vzUZ7j/0be4bAe+8Y3v4v79Pf7ur/19uvPfZXP9mJQuCV1LUAlrFMvZjFASjlJSuHqGdhYfArpy1FFxtLcg+S1Ky8giKUNWFTFKaorsXoFNNRZ2VeDGjTv0K7FI1raC1BLPr3n6vbcJixnt+XNU5yFaApHed5w9vuD5xRV9yBAS7z96zOnZGZWBmTWMY9xB+DJZJt8JsBZrNDcODmiaOW3bst5s6PueuqppNxt+8N3v4X2g0oYUM0+fn9OOmRurFu8949hTuYobN445WCz44INH9O3A4fEtjk/usNlsefrslH4cAc04ZrRJYi1FprPbbSvS7ejpOmF2EQOb8yt6o4lj4GT/BmpWsW07quUhpEizd8iDj3yEOzdu8+L5MzablqP9BeuNJ8SeWhsO5nM2qzXbdgNTvOR8KbDsMYoKV1myiqBatHJF5ZbJ0UnU5Tji+xaVOnIaufrBIx5ff4l69mcsraHOHmLPdlxDrTi9+ID//B/+p9w7+SiOTK1FsdUFz7rdYOeGet5w7+iQvpcD6ma95Wtf+3MqN+ettz7Npz71GY6ObnC1XvOv/81X8NmTFaw3K7p2iw8jdVUiSV2FNlIT50KhkK2iKKhebkugc4F7agGNp4Q1mqZp0Cg2/RpsjaszVVPh6opETx5HGSuUPUuVYcFONZAK0jQXS60KGC8NZql/hQmw3Nvj3oN7dMPI5WYrQ7miGKAcvFNKDLFDa4HBDt2Wq4szlosltWmwtt4NBnWxUftRhhXWqDJw0qQcCzDViDIgTYOH0uRIr9RwxmKyLZP1kkxCgV7GcvZSJd2wKAFULkrzlHcKjzKdkn0FsZ845wpjxZARWG3MuVhUE06XcxAKptQYZYr6wpZrEsVqn8QupJ15pcaYGhWvVh3sVJ+y3yBtLDWpxl/a2vUkmyir5K6MkUk7sdRNKQVyDtN3L/0J+YlTUyjGVFKxHJQG0JTuMinspYtUkNRpUn4rsi22fKV3qo6cJsvMK4qTosjOUSxY3g8YXREHz7jpWV+sqUKiTRCvV7iY8UPHar1BOUvnEznUpKRo2xafouzVCpIGU1tizGJPKo0WRRR4ei7NwulPaeQllQvQNu/qSGnMlORNVZ7MVAC16sdf09/08VPTwAhJwII5hF1XThuDq2Xi0cwqlAr4HBiTx0E5xFYllziRhgE/DigjPqmYElFl8S5ZJ36+fqQfRkLwEoGJRPBN0VjCr9T4Qd58ozIhZrp2IDDikyJpQ8SW6E7Ey6jl4QNIKoqMVYXyRklHKiot9OYikckpyRulTVEzaLQRoF5I4CMiY1SqwDwFKJTKQxFixpuITxM518gCiSIUAnm5e4rXX6OKfFcV86wxRcIVJnqxqA+sUmQVGWJHUpm6clRKk3p5wGqsNGgG+bu1hiEoQgBbObTVDEmhomJDXw4mpbOY067bapQpD6LBWtEgWetwlSVmKWLE36uJiI3I1fVOYgRFvqQ0wXuJeURANwKCkWXPE2nqCmctMSf6MeKcpdKOiHRzs7aMWRMwoC24OT4V+nQypAIuDD6yHrZAC0qLnLp0Qkcv/z34iI+RSslBS6I6hflgtED/fEyEcmGsc9Kcm7ry6uXk3CP+yawUrhbveS4bSA5JbDLOMl8uqOuaHEcyXorvrEjKoZSlD2KdslXN4FtW2xZfkgf6EpcZwsg4jNJhTeUQmkvEa5IFPmahCZsChjUIi0LAjwW+qA3JAshBqK4k59o6RzOrmB/MpLtuDMY4MKbEnFa4qsE54UJUVYPWAsLt+w1D15JipLIWgxYol7US56iUAISSsEOcUoQodGttJV6ZmKQx5D06W5yRzdeHgDMZ7RTWNWRVkVNkjB5bW2b1DLLm9OKKGAPNbMZyto9qKs5W17y4fE7MPZvVhmETadyS6DVgqeYnKKWpDxryzGCWDfOjPe5UFTfqGfePT7h56zb1fA5VBU58jSFlunFg27W0bYsxiu1mw/133+Xhd77Hk4cfsF6vyalETOfioFSUjd2UA5rwCQySVJCnpqfK6CTFUaKQ4hE5ouAINF3KUqYoaQTmLIVdiGCs2mkGJUZPahNdpj+T6FGkuoqY1EsfLhMLY4INSnExSeBftt2zFIG5qHZSuc+sBWPkGTEC2M2JklQhslqjMsdH+3zktbuE9VPmtcOqxOc//2mIEnf49sN3Ccqy2D8ihD1yVrSt4WB5wP17D5gtZrw4+4B/8XvfZtkcMLZbacwZI/edhspIKpQfRq4uLun1QLILfJkoh7EljFva7Tkvnn+PPHSY0FKrjmF4ymIZUGpDP5xRLWcktaUfI8p5nj3/IZ/41Ke5cXOf2UxxfKMmhpGLi4dcXr7Aj+Jnvl6dggqM/RajYOYckBiTwilDROGHkX4IpJhL2lNmXs8wykrzUStpDpsCmitFnVIare3uPTHG4rQrTe5cGmmimowpvJzGJOEcyORLE4vVxBiDAOFMUcTpXTNzmrYB0lTOtUhtU2FBJYGDKqSZiUqMvpfm+WQnTbKPheOO7KRgiwtPczwTCwkRamnaj6MkvORlQs8M6paoQ3yBr7FQVHcqOFUEk7jx5i3uP3jAkyePiacJFrrAxGW6hE5k7TEZDpYLPvOpT9NUjm/+5V+xWq3oVMbWht6MdCrAnmN/uc/NkyU3jg44e9FT32zg1LLYm1HNZ9Su4vL8nBfLUzartTTelS7KtQKaLgePH9MWMw2G/u1qMGkuyrVLoZXowQQhe0KG3/zN3+QLv/J3ePLskuR/hzAk/pN/+B9zND/gS//8n3J9ORKiALizzmy2W4YwkpTh1p27vPmxT/Ls9IyHD5+w3nSQPI0Kcjisa1ofCFkTEhjXsFwsWDYVJo/kvYFFTty8d8IqNVA1xKsV+7HmJC04PjpmTy/ZbAPXZxuufM8YGy6HgN1IQopyNUdHC7Sr6IaR1eW1pK4d7mHRVMYWb7ewVvrcUulItViijWM2X7BY7rFYLnn29BmbzYZm1nB++oL5YkFlHb4fyKYiXa94cXbGYtbgx57f+9I/46NvvkmMkbPzC/ohcPf+aywPDghZM4xPGIaBXGDJVVVhq4qAou02opY1AooPYw/jgHeZKvWkMXG9bln5AZKmcjW+0hzfuonqAx+8/S6D77EpcDxfYpzFb0Z6v5X6q4Y9p2kWM5x1bLeZYbXGLfY4nC/pk2HtZ2hdoyi2sawgWAhS3VrnqRuARN+N+ORhoUlN5smTZ8T1lroyBJ2JDj683DKi6bcXXJ5+wMAT6jvXVKml7mtmyyXOCtyRnNist2zbnmGM/PZv/x8cHd9gb/+AX//1X+eTn/okixu3OLs85/EHP+IH3/sWz1485fyFZTFz3L5zi72DQyorpm6dIyYlgjFl3Xo5TZ+g+fIsl0NjOdRmJL6991GUr6XxqkOUui/EnXpMYNdTBst0UCtMJwR4nZFErbqqMDKRkqFjgm03sN609P3AbD4vaepysDfW0lSOoW9FqZMiOSa6zZrtesPxwQkTL2PaU33wxChnjOlAPR3OcwF8qjLMlIRDtWOXTTy2FD1avYygp/zcKV3EFitMLJw/qw3KZkLIqPL/KJYCh0Mjn+OcqEmElWfIykjjKMtZgazIMROcllqlDF6mlMnp9cRcGH5lzwIZuExL4K6fW1TBUoPo3VlC5+nrfvwj7dTP5Xro0ghRLxNNej+QQpDEOOJOmS5KRPmeU5IIIWC8nJkoNbMpjSk91UwxyvDaFK5gua+SViQle6M0RMrQz1iMSUzJjSklNEaGC3WFDomqbmicQ8fMuG5ZjZ4uZvz1GpeAlGlbT9aRTT/Q9deQteyHY5BrVRQYwliT4XtKRXGdlTBCjC73CKjCbpyaEa/uT3n6k4XXkYtdcfcsknc2nZ/08VPTwJjkMiTJX5ZOXKIPiTEmmqwwtkIrgykQqCGCp8SyJM02wHYQOqwq9omYysY8JOzYM/QDYZRowApFHj2Dl45ZLG/EFMtktEa7ipC8LF4ImFNlufHE0wVkQ86amCZVgSZQ6okSo5m0JqosRWKpNdLU5dMiP1JWoHuyiWpS+aO0Lr6qMnlHlAhBKVQSGwGZ8vkydfVBZPkSzSiTWbSRSWie3G3yRzq0hkobnLEoA65Ip2IMaAXOVdi6kXitEKSxkjJhHAjBE7xkLycgBk+OmdF76eanQExgki4NgEDwXopSK3IsYzI5lyhJVxUPn0jDYxaeRsyiDFh3bRGdJGniRPFE2wLwmbqlzjlmdY3RjhBHVEluSVmUA76AqoaJcjwMBB+52GxpR8/p9ZZxHOhHgSoqI6qCYRxoZjNSlGaRj0GaRUqaEgUZXSLupu4kNLNZmYgXL15S5BKZ+mqXUW4LtdtQJmWG+PYoyplUOpVgtcNWNbaqhdQ82XByko6ogpAjvjQ7pEHUyH0ShXzcDZ5IlNcSBDa18+Mldo0baUA0WCdcgFlTSxMgZYw1uALSzWTplCslColGILtV3dDMLNnEacQOqdh+skQKVgXWlEpnP8RYklkiXV8anbWmsoYcIeaITbJgJpV3fv6MRPNGH3CmktdkDLOqlqZLgHoxFxliDiidIHmG2IFRzI2lComUBDS62awZhlbWqxx4cf6CD4OnH3q2Q0unE6aaYQ8rFkd3Odq/xcnRbW7dvsXB4QHLwwXzoxn1npEGjk40PpO2A9ttz+V2y2bVEbTmcisTW4rS6OBgj/39PYy+zcfv3+XRjRP+4qtf57vf/S69HyDL+uXHQMgvU2vKAiXTa6MRQdYESTSg0m5SpEsDFpWJyUuEqqqgTFJEgipqKok+FtBWzql4TynxrACm/BwExIRCo6dFjx/bk5IUc8aUzawcVKepWI6lyeJLcW9tOVzJdAZVYKVksR/GgDWKurIc39jncH/B2VVgGDquLzKHbx7RHOyha0f0mZAcz8+3KDtDKcPtk49wcnSCipFHP3yPy6szsnJ0raKpK/b2jmhXEiNMHgrpXJHjyObqjE2wRDPHjwOrZ9e0px3Xt65Ar+nOn5KGNS736CqzrBXRVKwvrwkBNltJmjg5OUJbS1SBt9/9Ph8+fUJ6kdGnmX7oePL4bcYhMA4jOUfG7pKqarhxeEQYR/pui84ZN5vhXIP3En+XfHlPIigMwzAKVk+VJtSYUCa+LOTKCdj7QIoRYsLrEaum6WIm0ZfEGNmzd7DnLHuQNMa1HA5MhBx2Mldd3jejNVgpR3QW5YKzFpNFAWe0eMW1EkicH0dGP9KPAyoEmllN1lleT1Qc/XCfr/7jP5afk9NO1bGTC6uyZxauSjyJYHraX+uKhLpYK98ItJ/r0OsBpRTftd/l+/r7Jb45SIRzuc8pCozpiDDWPT988D5KwenjczbttuxvAhOVyWpPy4YL/QylFFVdo7XmznfvcHj/gHHscdpwcX7Bt6//irOzM7JRaFOmsVPzAl7KjeWkxHR4Ybcnsnv9P7kQM5AVMcwwWLTRzJo5c225feceZ8+f8S//nz/k/PQR/+pffon7Jws+9/N3WV39MtfnD9hbzrlx6yZn5y/42p//Be++9yMwmtt37vLFL36RD5+dEZPi4uqK0AWWx3s0TU07jjy7vKJvfVGCwnaUezuNa9abNcZZ2qHn8PABN/duc/wmvLmcsUyeelHT9gPPr65ZMfKtxw+xWbFc7HPte4ZeEmtcNcNWNcsmsgKGdkPuBkwMsodkxayZkW2FDyPWJGzluFpdc3V1TdM0KKU4ONjHGkPf9zRVRQ4BZx0+evquLbDhxNnZJbdu3sAaxQ/f/T4xZW7dvkMzm3F5dcHTF8+5ulrR96006kJAKbFyLA+W6KphzBqfJHY7poAOI7WDg0VFXfZpu6jpouLsYkXvPceLmxzP92ivVlxfnLGcOVzt2AwDAcM49HJoTrC+WqO05uj4mLt37mGqGSFmlK4YfOLhh6fonDg52gMV2axW5UCTiDHgrGU7RMBweHCDxbJh017zxic+y703P8tX//CPeb59D+M0PQM37t3k537pF+hizz//nT/ga3/8pzx99iFn3ZbrENC6pt0GLi5btDbUTcNyvoe1NVfXK2Bku7litbnkf/3f/mdu3b7HwdEDeh8Z+zVxjCSfGFKHI9KutjSuobI1FRoHDIjNQRQ/AnN4+fwIr40yJFLTdDjnH1P19t7j/UBvNTnIe6NyLrYRWV9e0TIAwnUQ5UCQGGUg+kgzM1T1DBUCL56f8ei991ldX8lgpXJiDc6RidrbNBXWKPqhI+WIylBbi3O6LNkTO0AOwMEHOezu6sxJRaDByKBTWBRiJ09RhqsxCGswhCBKaO1RqVAr8qRSA2skPVH+Lmui1WanSJvWop2yTuWXqgNegpsxpU5QUverbBBRWLHlYISPYYXZgZI1PKqpX6NQWs4wO66TkiGtNKjk50hcaWnalPfdKAF5iiLllftht4f9+Popdp5X/w5mx92YYlWnul3tvl5sEZNd/se/39TAkCZLiWGdlAyvDIWmrVlNjQ8loNTddSZhNVhroakxSVM3DXM3wyZF6gODlxpmXHdUWWq6mKw0tGIQi1KOhOAl2tQoNFbs3CGAEqWlZlLgCitJKV2G7Rk9gXNNGdQzKWnkd9VKlZTQaXD14+qX8mk/8eOnpoEhwK+SOpHldo0504fAdd+TDFivxXKQBeglLzYRGYUOPI4MIaBNFm83coOaqNiOrVy6UjQpII6BbpSi2BarwO7GKQ94733x8Y+F6K8JWSBaPsoBERSbti+TKgWF/J+AejanquWwmFA7TkOKqfikDMYVf5WRaWU3CCtC24qslUyVrHQwFZSDMZDLNRpjkaFlpIeiCFmRkQOJtoakFEPMRGWKgkNDKnnXKCojfqwQE1ZrUQeUdANtNEPI9NrTp0jfd5Dk81Lw9H0n3IXKocj0fS/xjTkzJlGKBP//MfdePZZl2Z3fb7tzznURkZGRrrK8YdtqQ7aapqmZwXAoYABhAM7DPOhN0IPmOwjQNxAg6FUSKAgCJGGgEQSII0CCJIrkkMOeJrtYXSzbZbIqbfi47pjt9LD2uZFsNOa5A0hUVVZmxL33bLPWf/2NpAPEDH0e5ICNie3QklNXhnsy0c1KiRaOWMzK0q7BFfKffMYC6Ba3dVUovEWALOaR0hAZYzC2pus61uv1dRGLaB1978tUUHbK1aZn03ueXq4KbT0XjbgUg1lZtq3EqmltMLbCalsOQdBWaJip65hNp0ymUzGyy5Fu6BkG8V/xIQmwYyUFYzzE1XObV96HTNNBoma1jjvqmLweCCnTe5FNxFgAhxgZfGKILe0QaIdANwShdOeS5hQF2Z1MJ9y4cSBpHJsNOSbRNsZE9J6qsdR1TVM3chDO5iwWc6aTCdaa0vAkQjHK9T48dwgVhFwpcSZue1JuUeNEYtS/oelTT7tpBbTLI3ouryMg5rCg6bwwhXRBo2HYUdqNEfBGGSPFsLbYerJLxTk4PCT6xGopdNjK1WijCaEjZYuxE5SphB7u5XPcbFr6bsmw7ckp0a23+C6w6Vqs1hwd3WNy/yVuv/oKd+/cZW++z2I6p3YNhJ5hs6Zvr4hPT3j64TP67SXJt4Q+krPEh3UhQFVjJg0XqxXnl5cybWkaTrWiKpdu33bsTQ/4wXffxuTIO+/+TBIbnGHwHqsstsh2sikNXO+JTozCxsZR9ocqUqdMVSlcVaFU8QmKSaRwwM6JGOS55iT+EylKdnzx3zDFKyGP8Y25gChZgOlcCqPnbyX5z4hgLsX8Ncva39FtYyrP2qBVEppojgXIFOpqTOCMpesGFIq9G3Nef/VF6lpzenbCo0dPCDf2+PLxKV88OmabFLlqUNlR147JdF8iH5spm6s1V1cXhKFlbuYE4wjVHtO9OUc351xaQ7e+RGeDNUbijDcX+JNP8aqhjYrQb+hO1tQnC0yXcRrmypPtQKUC08bStxldT7kMjrq+iXMWN8u0sUclOF2e8/TZMx7+3hOe/vSY9372t+R/HvHbNTlGbJSCsMqeqZtxdLDP0PecDr1MSlPCD4G+u8RUFQ2NPE8fUSrvUmqyUteGYQqUEgrqyIhQKZTirNyTCii+TSmL3FGliC57T6R+8gdjjOTy92OKpNCXaQzXjvfWoKKw0FIIBKWJ1orJdjkTXYnOGwbxndJa/q6sY5GeQETrxN//L35TgE4lCWDbrqNrJQJuGLyAz1mJqbZSXP3BFbEJ3PgfbpBSxFqHsYYv/7OHzP7lnOanNcY6prMJxljWmw2r5RK/7hiKN5K2ispZamWogTdfepn/9D/+T6gqy3/73/0h7/ztu2Rnme7fYLndloY0Md9biBQsZV546SX6fuD87JxuH+bzfSauor9Ys95ssNbSxkDIkaqusdYSvTROKY169fHcHad5aXenpMI2HQv354ENmRJLHTCtXmTYbNGV5Td/83eZTCf80f/+r1h3G07OTri8vOLRV+/xX51+zIt378EQ6FcbUgzUk4aYEmeXl3R9j7KJn3/yCa5quPvCi/zwhz/gq0ePuDo/xXcrHh8/4WK1QTcTFocHZOVomjnWOm7Mp0xc4snrjn/0W7/JH/yDf4Ltb3L+6JQvPnmHz959j9XZGb3puOhWtEpx4SE3CxoXqIwie+hXHSiHNTX4SL/dktoOFwN+7TEKps6hbMVkvoBqwqbfMPiW9WYLWUC2/koGNvPJlPlsRgrCIKmcQ6GY1I7oLCkPMsjJAxcXJxwcLJjPGjHA3psxmS3I2nFxtWK9vELniMoZY8UPLfqOdq2wTRR/qpipNFijGYZEYxR705pZPSEYaNIeocvsHx4y3T/ga/dfZX16wWenJxw2E2Zk+uWaXDsGO8GYhqFvobABNsuWPm1YD6fcvvcib379W1T1nMt1hz64T3X+Ga9//Q1UbvjZux9wenJGUj39sCFlg9E1oa8Ibc1LL96n3Tvj8ryjmnve+sYP+P1/+B/gTMdP3vsLvvebb/OjH/02w3LJg4dP+Mu/ep+ziy2trdj2HRO2aC3xqNZa/JBwTvZ89J34uRVZqTGZy8tnnJ6tyclydLjHi3fu4tLA+ekThm3LiX/C0HYc3Y64eopGpu1jXSkcQ0oUdPHvMeIBonPcMQDHiX9IiZhlAJNiYui9jA6NQRnKJF9JbVbuy5FpmEtiofeSXJIK8zlnAYktCh8SF1dX9JstOUdWq4ytivROKbZty6wW5nld1ySVGLKc55K8EtGqRKuXJts5J2d3qYu1vj4f4BrQNQWI9ilgnJUhBLk0y3LmX9/eedeEp5zIIexKhFK87jwabPE3kvP5WjKgdN4Bv2O9OwIDIj8ptInnpvJQWA2F/TAarY4gOjnsavydWefIGlDCJla6/HN8J6XpT1mGcSlKwz2yVEYzepFJys8b97zch3oHqChVWAlc1/LX5+8YXY0YAxuNznJHZSjAs/y9mBIphpJIUvwMjSgTbDYYY8v9mhiGQBXlPstSIjP6SaQUdyySHBP9VgyrozGkfiANER8yWol0OcaI9wkfI0MBr1Iqd30sr3XsoYyYtzuj0SFK31pqMUoPIOxoYWIDGG1KtLGw7kOQpJeM7BG9YwjJoH40pf9lX78yAEaK0p0aRmRM2Ap9TCz7niFF8X0o2piUpBmGYhSiNNk0KIvodVBQPoqYgCSeFCYmclngerewQKtCyU/itA7PoW2pbDpjyUrhQ8YXox5lLKNJ6kiRkQ0joAFcm3fKNsgY62SxaFs2LNK4kwoFTSKGyjfdASepTONHmhuASorQ+t0wGyv7PSiZCqJLozrqirSYIg5JGj+jZDo6hEyMA0aFol+Tg0OjwEijPsabyoaWJAJywpTIwqmdYKzC4BjoSQpMUqw7mVqTRyNHWcBeaYZezFOlmJINGcrnnXUBDpTZZUiPJnNKskJ3R7DU00nMfbKwN1SWKMqh7xBmTNpNy+SqkpQM00wAiqTB4ppEVgFVN8grkum1mHIqMWnyQdaNNiXaSV7LGJubyXgvdOymqnDOMSQvDvY5lBg5uQBiMecco0ZTkgZNjrIR/ZX1LBQcSVvJJhF8EkAkZhKanDJt7wkhsNm2rDZb+iEQEgxJinYKQmrrWgwyjeXW7Xu89MrLrDZrLs7OiT5Qu5LNnTNN02uGAH0AACAASURBVGCdeFNordHOUjlH5ZzEd6ZUmmNPTMJUCrG44Cv93OQzo7UY6Y155GICamTP54LOFxAq7/6pUNphlBPwC5ELOGexVSUFps1YY4WaB2JimkS+0ExnVI0jxaHsT2imhhAykZKyYCqRcFnHkBzJA0OgG3our5ZcXnUoLzRAmytqN+Pm7Rf4+pu/xte+8TX2X7yFqqDbLjl79oRnD55w8vSE5cWKYUistp1QBmuHqQ37B/vsL/aYTecsFvvcv3uHdvB89sUXTA7u8I9++Pc4mE+Z1xYTI7XWWBRt1/P4+ITTszP+vV//Pr4f+Pnnn7JpWwHsik8BSdanRhKXshqxBLlIVU4YYzHlYlGmAiwjZRaTqeuG2hpMeXZkQd9jGMhaZAo5l+QPwKRMJu5c00EaW5UzpMDoOD564OwKlBRKgkiUklqNrB9fzJYNRluUGumUUgiKx1EBa0KAnLEpYDPcWNQcLGpOjp/wySefkJXlcj1wfLricgOuWWCMeDfUTUNK4v1zfPyQ1IHBsje9QeUqNjHR6oobh0fcvLXH0K3p2jXWVFjt5L2EDTlULJdPUK5BZc8rt2Z859e+y/rvOYa7j/gni9/jyeOPePedH3P7aI+T45bLyxXWecmXtxqfMjFUaKVYr1tWqygMii7TDFJoqiAZ9SOFtlIGvGe7XIpvTgEN0JroPW3fY4cB68XkjOhRxkkxVXyXdlPImMqdCDkFQkSkJYXqq58rZMeCUgpfjaurnSRpLNqMLekkKYpunlwSlAR4trbCOoM1TpgPWbybUkrMpvNdoy1UY0NCGBV93zF4T1+8l0YT2xQH9hYTjLN0/QBKceRukxJcXF6xXG3YrltEtujQWdHVHl9vmUxrvB9KMRWERRIDMWlyyKzXgRgj2+2Wbttiky66qSRpLZRBQlZsVyv+6sd/yf7enjA7tZZBS8ooV+O3LXVd8cLde/iYWPcDzXROyB3TRWK97ei2PSoM3Ds44qU3X+VstWR9ecZ8seDOvbvsLfY4PT7m4vSMth/QhZYcSw1TO4fP14X8879+8WsHNmcYtgMpKfoh8vmXD3n11Zdpty2ffvoJXb/FWg154NGjzzg5/oqaCuUV3g/l7BCGiHEOpTTn52e8885P2fv8c/b3D7i8XBLjwJ2jAxngOM29e3f5xne+Tz1ZcHR0l/lsn5w8j7/8hNXiKYe3bvPK3pt8+G8e8LN3fsLJw4/48sljlldbLq8e4RvFpdVks0/UllV3JXdMb9lsOqYTg0oiwfBdC8FjU8IQcFpR5WLYR6brWrbrFVmLr4u1Ej8e40CKcedDkZLHVDWTpmbSTNBWEy3SxeaM9wN917PdrFmGK+pmgq0rXN2wf7igaipJzPM9ftNKIldSxDiw3Xjidk12NVk5tFJMKovV4LTGaCWAR0pU05r6aB+jKw4WN7g8OcNvN7x+8zaEgeXlOUPM5D4wnUo6lYoaVTwbGmuJXc+z9ROePjvn4eNT6tkBt+7d5/W3Xufbv/EmD5885eGDnuyPyMGTOKaZJULXk7eKWXWDm4s9/sHvfI/ZwRXzo/scvfA2L95+gdv7+5ydP+P3//4PeOmlF3lhcoQyN/idb/0WX73zFT99932erFYwBLbRl9qKEh2pEYNvkUy52lJVFuss9aQGLOt1xBhHt1nRrXp83+KMJkcPRnF1eUnbebStRfbhGpiKf941tT2PY/xdU50LEDhOzq8reiURtpWDHNBj6l+K0jSOXgajRKHU2b9oWj2eWdrI5DpGGW5RJNF+aIk5UNcO7SRmGAWD9xJXXyTppcUu51WUezKPZ7PBKGFWlUF5ed8FG8hqJxccJWQ5C6gjCj+5reVcC6QA2SesU4U0N9aoIlExxozklTLUlQGXUhLJOgIfsQQpZIRVMppsZiVMKJXVjiie8gh0XL/+Ms0tP4edcTS5hCUU4ElphTHiVyTMFGGBU9jtClUG45lYnoe1FqxBeRmojNKaX+yltdHC5kWAiRQjutSz1ehBFksgQWYXoVrG9WWNlbdRBtOSGHfd46Xn7lkof04O7HKWmyJPyddMD67ZRKOESA+a0ItJf0iKpCJhGIhDKANLCR4Y2fO9l747xrgLGEill3z+ztAjezeLfeX4bCSa1qKMKqas114fYglpisZAExnvp/E9slMd8EvuqvHrVwPAyNC2fTEzkGSR0UhxyIkUIp6MVZKFO2pkxhzxBLIBtGjgsxo3jHyoO01QLmBC+fzjuPClWoEdtlioT3o0rCtGL748RJRMKigPM+tyYY0HiSL5uEMHrx+ALDybxUxHj3SzIGY1IcWymVUBK9i9Jpmap7KQrsESqzVWlWxtRsqaYijU29HHIJVJvS7aqaHzGIQ2pcumGZvmUTKQlFD6tRE/jZRzMS8Vzw5SwiCmmzFGZvNEU7uSAiKTnJQywoR31PWUxhqshhwjddWgMVSVGK3aIhGKZZqV1XjalsglXVgXhRWCKgkWKRLJO/q6UWIKGos0KGeJ+Rp1iNfpJNIIidZSIjWNNaxmgarumcwmhelyfbiq8kzLt9o596vSAOhyyIlxkXi6yGkuhni7aCGkKE8m7w7o51NIBMQrkNcI1GWJ4tUhFRKWKhIpTYiZvg/FKb1lud7Sth29H4rxnJPLltIwVBV1M9mtzapu6PtAzobJZIGdW2bThtpVEu5gJBkmxIgPni54ujDARqEKrVJuwGLYaUqkpZLGZnRwRhuMyhgCWqVymFkBqIoJpym6QFl/ciHGDD4pfAFFUsrEIEwC5xxjZKu1BVAqzzhEyEozmc+wLtO1mZAkIaWa7IGPpKTQVoAUiCRToXItxV0aGLYDy23PdggsjHxvqzRv/tpb/OBHv8VLd+6xujznwc9+yocfvcuTh1+QfUcYBoYhYdycm/de48VX3qQ+vMX8hbu4/Tnzm3sc7C+YT6dYa5g0lm4zcFE3fPX5A/q64e4bb7DvYE8rJjoTO6hqeHX9Ip9+8RV//c47vPrqiygD733wATmKRjaGhA9evC+KM3cMSmRmRUdqjKaqG6q6kSZiV2iIi7bLgJlitaQLjawKcS73omstBYTeUcvC9aG+o10K3Zjkd67cFLaaGgsRjRgrF0rlCF6kGLFaUxlTJu6pTDBE2qM00kRohc6R2A3o0HN4uMcLR/uo2HF68oRnpyfU2rAOnvPLgU0Hs6wwlUio8hDZtBtCDCQ9CDAdMl0fIFQkNNt2yclTRb854+z4IdvVkv35HpNKF+DZs1k9ZWIrfvDD7/F/3vwLfvuHv8bBquLZnkHdmvK7N97knZ8+472fXvLy/Te5sdfw47/6mcRIxojvt1RuBlGaQO8jKimMMsymM6rasdKapqrJUeRU8vFl+nZNDB2K0khm2Q8ZJ5K9nMlBPIJUEsPhEUzS5Z6Sc6gAu9qgTTEMQ87szg/im2T0+JSl2M1afo1F2w6wLJP+UtCQxceEnCEKm844i9OauhKvHKtHMFjkKNI46OKXY8hazsm6qWm7Ft0Z+h5UkAQmTaYPA7URRlHXe9Lgmc4X7N+wuGqGc2v6TqSO3bZl6Hse/fMnPP2nx7tCEjLhVuDqd5aoTl1P68jFOC2VkcR4s4+0bNkWj80571YPMEbTDyJ3yYAyG0AmpUoprqqrXYH7wHyyK4vGgpiceOS+5N3qPTbbLSEG1mbNhTvFGEPwnuAlEnwEIeS5libl3zHB+mVf6SiB7qmto+tbPv/i59w4nLPZbNmuy3TcOhor5tOqUPG1zTg3k6ZaialezIltu6WqKpTKLK/OefLkIWTFi/fvc+fePTbdlvOrC2IYuDh5ho8nPPj0Ae1WWESrqxMeTD9i4Spe2r7KxYMV777/Dsuzr1ivPJ1XLFOmT7BMmq7rcK6i2Z9x//YR7VmLb48ZwsByc0VtHLXT3N4/4tb+nKPFlPm0QSvD6eWSZe8ZsLipY9utS9Gt2G7WtG0kRo/KCW3AOUPXbYl+YNLc5c6tW3R+y7bbcHG5ZLVcMXiZZDpXM9+fECKcnp+zbrfUTcNi1jBrGpbbTuqRSjyQIooBGTZlrfHDQPQDNkf6nBg2V9QmYoxhfnjIrVfm1EqxOjmh0pb7L7/MAY7PH3xGQrHYP2S9XVMbTciBg5kYf3ddR2syMWvqqOh8oLs65erqnIuLYx4/+pS7Lx6y3CQO9t7m3tERq2XL1fYxMa9IyUOuUSGg+p6Zjty/YfjRj77Jzdtfx+gKQuLA7vOtV15A+4Rednz5wSe89yf/mquvvmTfZmKjIUQGtEitETNmCgMvqyQmvFaAiUDEVRKp7XuFqQwxJIZuhVKJW7duMp83zGZzzi+vuFq3rLdbfNI0MyvpS6rYUO6AhXzdxCcBWqU1L/VYYXw5Z6ldzWxSYwvw3rctfdcKezHIPai0BS3eXiioncFZxWTaiGdDM6eqhe2JNoW5ZkFdp6OEYeDq8oKsBQRoaie+foWRkBLCmPCBGGVvGmvI/rqhLYfxDjj5u+eCwhTGSJn/7+7w/BwQLedaLtGWAYWwjmNhMqhSP4yMkusEibFyzgUVL411AYnYscVG00t5n+M5qpChsthalNekR/lFeV4q7cICyCKbzpniP9fQ1DVGG4ZhEN+jMgTe+VNkedayGkTCKLINdvU//AIAvAMLdPHfysVnJGFd3n0ehWxYGBy5sBTZoVjj95NzBnIqTA+kv4g57uqk8T2arHZ1stTQMrTNz/W7ArxLL5IKy8P7QM4amwSci0Fq+hjG3glh5gdhdURkkFD4IeTSc493pEKRyhArBTGyUCP7o/wZXXoailfU2JPmwghJKe0MS/Xu/irr89qy5Zd+/WoAGGS6tpcmElU00bIwQs7EpIUKbkwxZZFmOxdDmoigeWOcntISMWmK+2nO0tzGIjdAXzubijtwLJSqQlnO1+ilAB6mLIhrir9W1/okVDGbVIXVQaGbURDWEclVMrfq+qEUnRJJKA9f0MikQCmzY1uklArw4K4XBUo2uFbEqOhSoWsDycpiXba+MA1GyvbYXwrlWHwOQBU6tmxeVTZCmdQqhEJuVJHMZELyEm2nJFdaWBzgfU/lA9YJ4macgCrJB0IApxR+yGJgw3Vzr0Aa0Fx0YbtCcJRO6J28Y0QrR4f80SVf3te1Tswq8e5oNy0xBOq6FnNLCshVJAshBnJKWJVw1qGtKn7yAa0zRj+3DlKGdD1tVqNjfQrFy6JMuMv6iN4T/UCKA4QBjC4Rv7GsIdih4ONFMqKuI7BWkHvRj8v6G3phb4wgNDmDyaw3Hdt2oO97Nl3HejuAMlT1lMl8xnQ2w1px53d1zWQyRWuLq8Us07iKlBTW1rh5LUh1FAmX0hlrBVhKZNCaupYEHpImhuvXKowK2Rfj9I0C2oQo4I5BieRASSOrjAZjdwZAwmYph5w16LrCak3seihIuXICOHgf8D4UVpMU0k5XhV5X0GuliaZGq0wy8n6MAW0nWJtRyknxQyREjweGpJjZCmUi/bLlsj9lOZxhXUXOgRde2efbv/46g7riX/3ff87Djz7l0cMnuLompkg3RIzbo5kfYfZuc/MbP+CNb7+NWUzQC42ag5lAVJFLk6gryzIFmoOa137wNbqp54/f/RPMzPP9N9+iMg4A12SGlJlMar75zbc4vzrl4bOH7N2Yc/eFOxyfntEHj0+RiEQjC3tLI47rStgmKaGdw7gZ9WSGqxt2meTlArFAQlzHh9CTikRAZAWQYmA3GCgTpxgHkc+p8ayCgBffmSyGiSg5l9OusAFSJAa/oxl2g7CInHMia9F6N5VHCRAdktB4e99S6yTxrsOWWkdevLng9sGUYXvJ2ckTNtstvW4ExMmW2oDfbolJoWzCWMNs0chZZ5LkwOfIxm+lASYTU8fTB8ccKzn/6qYCnUlazlifOibTKf/4H/8+r7/xOn82cdSTyN/+5Cdc3vuMvSZwZa9YXbZUesHxoyXN5JA3X/4uV5c/43y5RKtIjBtIvfjz9Kd4f07OPc5WZDUAkZhXhCzh0pmMp5W1mUIhZSQxjibikyepiNGGkLyw0roWbS2uaZ4rBqVY1CP4lMQpvXa26OVT0UKLd9F4Lu+AV6Ab2XYU5h9lSlOesZxtQss1xhS6ckZyrqUA1+PEzCqR4o1m2eMks7ivD8E/1yyMSUe6pMgE0fFWhqwsg4/45YaDg0Myhm7wbLctm+2Goe+Z/W8z3vijV0hJgL9cztjT//ySyf9a4/7KSDFWaNzJB/wwkAeRbXoDQQE5UidFNWRuTxe89sKLzPf2+PTRAx6cPMEs5ujJgqEP5NDx2sv3uXv3Fh989DG913zjez/g4PA208mUn7//AScPv6TRmd/5rd/i6PYd/ud/+S94cnpCs5hhnWM6meLbjquLCwiJqq5E1xwDTVOjSzEegjBHjDYyCBmp1ervSkhEVhQYhjPamFDGcXSwwKeOjz/+kOlkTl01wpr0kabaZzKb4JzG+y3ttiWkJObO1pJCoJk4+q4jDD2TScN5u6GuKvYWU157+RXOT0/4ovuMZ1894MEnn9H3kZQdMchgxFaK+Nsb3n//Y/7w//nveXX/HqcXzzi5vKDbDCy7gD+ckpqGl159kxdefZPV8or28Re8enCD080zrtwpbU7is24yYpoeqWvNm2+9ws39BSEk4qdfcPbVE662K9bdlqGkqFlr8f1AjIMMgcRfD40ihkzbbbi4PKOqNH67phs6llcrVpsObIWdTIg4Ts/XnJ6v6Xoxo57UFXVV07dBAJvUM5nW1JVINZuqIZqKhGG72RK7ntBuGKLHe9A+421kjiFtPGf+DIvmt9/+De7sHbLZbKjPzph0nmwUg+9ZzBpCuyHnxHRacbg/p+9bnh0fY8hMmppsAsrUaBc5P/uSj66+oPWO/f1ISDXny6dk4+m6gYlpqKuGmap544X72B7Of36K/m5Ftb+QxDE7MF80xO05Z5/+nE9++i4fvvu3/Pn/92d89uUTspuAssyNwU8aIiM9QJcEvZ39hHj8DD0hRYZhgXY10NB2VzijmE4di/ket45ucPPoBtoYbrR32HSey2UraTRDFKP7UXP/3JdSz3kyjPVYGZyqLLPK2ipm04r9+USYjEoxWENrdUnji6DFE8y5hqqeoLWmsgqni1xBGZKtUVVV6kCEEVYVU/kkjnYoSMNAF6XG1HnGtJ7sWKiBREhJTLaL3GA04FRKpOeZXBiMevezxn2fShl5DRhI3aCNlSZZWqYCgBiMKYNmo4kEUvRgDLWVRt6H4l0XxyZ2TKVSpb6Xab8ywuQdwXAYOeryOsyuazEkPNexp7HUjZB1FpC39F46jaxddneNUqok3F2D4FQVsTA2d+xgraWBF9MNqTPJz91V139fqWsZtzTbSgbZZbSYIoQilxE2kbDIFZacBukTikTKWluwHSXeduNQQQn4oHdns0I7JZHC2WKs3skBUeU1QGGSRAhgkc9Dl6SwGKOwaa2WwfM4zEUkuSkriBRZylBkNeP/z4WRVJ5Vpnh2yIBMlZ4xZ8hR2OExix0C6fpzHo3fVcrk4qs1kgV2j7xgWpl8XWP+kq9fEQCjuMcj6JnQ6yFrJdSSJFFjEYXTAmCIdj/sULCITI5ioR0ZLZNcgy705WsWglKarGWTxGI4IwjXqAMdUz1k8ftQJobPNVbEJPS0577GxaSU6Kt2ze8YDD+CJmUCJTFh8iBTkRSgrKCMZSIv7sAaraMcNAVRk7gmAE3OVoo3lQVZBPo44qeUwq80+kJXAS36rfG0UAjVTKtRpiD7MSi1y+oNKe98MWyZSkQln6Gp5kQlaR8pJUxJRlAx02hDGAa22wGTA7UVA8aUpFWytuQsay3a4xLnp81zCRPj50YSDVihUO4QUa0kurSAVd4P+KGHrLHGUFXu+rCmsG+0RueEU+CMoLg5BaGzk8ihK4dY2ZVpdOW35FT0bDkWM0927IpMIvhB0nSSmOBkMl2Kks2s5KiOBZRI6TnqVzk0nx+ajYh4iuB9IMYRsS4+HzEXZLUgrxmmixtUdcN0OmM6nVA3TUndAVdJg++9lwvWOmkms9D9tBIHaqUyzhhs+exy8tIgkXceNcaK6abGXMcIFhxbFWq6EF2iNEqAwpA8O2OlWJpq4tiGjGa4CZMMORVJhHYYKweysQ6TQLtAytc+IUpplK0wVSV7OIird1QWrTMY8XggZZKSOFdtK5RzKCLGNVTWYEzNDAPrDXM/cDv2NPMZB8BX7kO++c1v8vjZY975+H2ePXiIbSOVcawvL1ltVlyu1mw93H7hTV58bY/jp+e88Hri5u05ySpiCnTdwHQ6wWiYZFcmy4mDasrbX/s6s5R572d/wyJn3n79NSpnJDFCJZSV5/Tt73yLP/6LP+X4/JijOzdpo2e4uCD5iCnRpyEmEpoYVJmAmGIWbPAh0w2JbPJuz6sCYmYUWadrhD3JBZe0wShFSGEsNyRGkowPA1GV9CcgIRFjOUd87DDayjkbC3KfxklNAUDKZe19IOaMU2LyNAwDMcRSiJXzIAuleOg7jFXUxjGfVOw3htsHc6Y2021XnJ2e0PeeVNcYO8G4jsN5RUoRTyI7R8iZooSm6wI6QOVqXKWIvsO3HS4l8rBFV7DYW9BMJyV2VPbt0e2b/MZ3fsjB4ZwnTz6j3a45vfyS6Y1MOqxopprQD3z11VdcXWxZnT9iby/wymtvEYaf4bueybwmDht09qQY0HEg9qL73mw2mFZkYr2PhelWCiZt0VbWtU9Joj1zJnvAGpr5hEnToIxIFVElQUQ+SAFCRsBBF1MwBTEE+pDE9RwpxgIlrq7cpanobGWiZXb3oC73125SVbiyaTzTEuXuFWZZ5z1EAeBN8bLxoZPbvaxHNfo3wHNsRLUbQGhl6bsBqypCygwx0kwn1BPFarPhar1CK8V8MSHGgU17xeA3JCIESccKg9/5xOSYSV0ktaW8NhRPEIWKQkkWL6FMzIEcixx2SOztL/j9f//3aSYTHv4v/xP9OmDwLJwVCvOQ8VcbVhniVUczmZM3gXq/Qneae/t3CU8v6FaXPPjwCx59+YzLkxUqGsI20act7UWLQZHbjM5ypxAV82rG4d4hR4c3yDlzenrK2dlZoYorVCqFaOkdRlpwBuq6Zps8s9mMCFxcXbJ3ds4bb7yBwTGbTFlercQbwhjmewtmezOyiuJD1neSpjX05LYtMjCRYuztzVEq8+abb/D6a69zcX7Gwd4++7MZq9UKuoGDyT5a1yhVkTFM5hPWh8dsl1s+/vmnPJs9pqkbts4wVIpbd+7gbt1jPcC0OUQrkTceXwXe+fJDfHuFVxE3baicgyBrbrm+5Pjxp/z1X/4Js9phbMU2JHQzZ7J/CCoToqffdIWaLre8ta4kigFKc+PwoNSbmna7IW3WVMawP53TNHtkK0acrQ8MQfadtQ11o7BGEb3UEDEUCruPpCFgdMA6kU6iLW4q91LO4HLi7uE+NypLnwdu33+BwQ988fArJk3D+++9z6PJAlvVXG1avjo5Yx0Di6MDXvvOD3n1tVe4fXQDpzPDdo0fOn78l3/Bxx9/whA8FxfnKOe4ees2k1nD1arn3q0XuX3vNk/OL3hysWK7aYnBst5umKvAxHr6jeXhJ+csmo5nD0+o9s5QLmPmmvXyjCcfvY9armnqmrsvvcT3fvQjbn/timcXKx49PGbYtsxvzAkx7Mzew5CFsTr2BjERhsTgA3WdmFYV08N9lqslKXuq6YRm0aArSRjMCrLV1LMpEyyTkEitp1cC5unitTCapkvJPE72KWcNxJRxcpwKmJkS282abrvZAfDDMOCD9CV1M6VpplJ7WQEplC5sAjU2rOr6bmVkvdkCHkgNVU0abFPhfM+mbWmHjqarhbVBJptSy2qRVaeUxOtybNYBXYYXOylMYT3svBWK39hoXrxLxtB6h3aM52zWGYzc35BK3TVO+osHUmYkVYAamQmQlIDuOpfKdjekky9VjqTMOOC4/n2lR3lqAKy0KUKfl2eVE8XcpDBHNCEE2rYlxigsMOS9ZZMlvW0cEmeRfgvbsOz1kRVB8WrjFxgYBfVRCOC+a9BVKorM0Xj0ui5WSmQ2KsvQxDpbJNh5V//nNJqM5t3QPOdcpFTCRNXleV2nylwDccLaTqQC5oyPQS7R0StEfsVhwKeS7oakXqrCspD3LpL9UIxNxW9MX68HJexQpQ1ZizdlRhVAp5ixa3mmRmmsEjPuoKWOM9pgiuSU0fOkTHDHe/7f9fUrAWBkBK2TXUDR88siDlkQNvmQM85okS2oLMjUeMCU7yUMglRQW9lQUC5opcjmetHuEB4lGzdTELDxU0uZrBI+iP8ESajLitIHcI3SXk8wyoIVjpKAECAPRJuCYlLkMmJYMgIYidGIshw2qlCztcaH0elc7VCwnMeFq0vhqXcFibgJUZphOYxzafSVNsSgUcqVIf5z0hhKHJEyhXZUjMGUmIlaLTpRA+QYGKInhSTuykakLiEGmdBZi82ySUxMQtHXCqVkel/XjSQ/IBObuhGvCJGKaKyzVJXbHcIxiiZ53Nxw/RxRwroW1LcU1DGhci7u9cXttjjjxyxgjEnSWIdeJpdJI7pv7/FDB8jGG9eMRvKMg49ilpljmXiWtTM6DpdmIMRI13bEnNnGSJcTcviaHRiluHZCHkGIXLRnsbgi5WJoE9OOHCz0sigXknHi1t00NbZqwE2xTgo2waR0uRiLl4dSwqIwlZhVjZ4iMYMWMMtZ0ZlaqwttX6GTEUmVKir4jDBQVNk/5WIaWU/lppIHpLR4aJga46rye+PBHcslIrnjRosbljKWAQsxyZ63eje5FRr5FGMsvfdIVKPso6JGk0mOkibDKoOpGypry2Fp0EmjjENZizNIsTBbkN0Cs030+Zw79R4vv/VNnInc0JmPDv6a07Mtf/Vv3+Px1SlN1mzXPRcnn3N5fkyKA66yaGVJlxXDScPGOEa74QAAIABJREFUac4/PeTmviU1hm3yZJNoppaDWU1VR1xj0VbiKe9PFizeept0uuLj93/OUTVj8dJ9ghI2jM+JmDJRS8zuk+NjXnrxFW4d3SZE6IYTfAriFp8yxtRiVqqt+Mgo8dbJaAafySrKszLC7hrPgoQHLRRGMdOUZ2lMSShiZN4AOeNTTyITEDhezk8xK/R+IOripL7z/Mk7Z3BjjKyzMrrX2hC8+NiMZ23MEe+HUtCAz/LvNkUa57h/8ya35pb9qaUicnZ5weriEoWiaztu7M24c/+Qb735Esvlmg8/+5L1kAgeknICoCcrk7nkSbknxB7ygIuKg2lFNa2ZzKcEIMWEqWxhEkTmewsePnnM3TtHTGczvvfDb7L39pw/nv0feLtkebZiuW5ZLreoFAjBcXr+Ez779COqmaGazLEZ8gAqGRozozZbVO4JPaggLuExNc8xWFqSqhlij9UScxxzFP+LHMkqM1vMWCz2aOsWlMJUFmdtiTwr90+5v4y22HEqlgSujFHuO6U0SRemXBhZN9dgPbnsz0LNjUUmgRo9i9Tu0h/9iEaT0JykqB+ptj4OxfdqHC6IXwlKzplYPH2e19aCRisn937RVQ8+orSmbiYiOVHQ1I6qsSgViHmQqZp1ZJ/JfRZphJKf5z3YrHYaau/Fc8pqQzZCfzVKwFZQVFozdZbZYsGbX/satnIYV9NMpgxKzjqVI0ZLilcMNZUzDH5gvbziznePODs5Z2hbhq4ldj2ff/opwRm6oaNPAZJnOptKksIgngFkRHZFLtNCjXNWzP6KwbY0T3r3eY2MK62v65fkM87MMHqCHwZm8zmr5RZnLFb3OKsxFiZzR9aam3dvcOP2HZrpgvlsxurqikcPv+LZ40cSPx8CTV0xnTbUlSNOGo5u3iT4wCcffcL3vvddLs/P+OiDD1CVuPCYnGhqiTYPQ0e/bWk3Lb5NzO/f4P7Xv8nqeM324ox/9gf/lOMnHX/0f/0pJ+0x58+esbo6IwyZSdXQDpc0ixnf+M53ODq8ycfvf8T6/JxmNsHgiU6TU6CPgZBhVtcsDg5AG6rNivPTE2JMaKNpTENTS/pWU9dst1uGvhPmqbWYrKisGAkv1x1eVUz2p1T1FFNrqqZGqYzvt4RuTQ4Dlgx1TUyKYZArddsN4jMQNc2eLfJGibMeYsIajdKOrgtcXK3Ydo+xswmJiq5NPL245Gq9hQQe0IspVc7Mju7QmgkfPjzhyVWLIXJ5esztW4cwP6I6XLI6v8BXCVvXdNrS9RGlbrK+0ih7wnSv5uVXXuDZ8ZS+HfCsMH5FyCsePfuI7tKy19Ss/sd/wb1vvcfk/m30rOLi9JTlw2fcrRYcNXs8Odc8bKdsJjMCA2kzxboLQr4i49E6UTlNZaTxBE03DISsMLZh2/UYM6GuJoQwUNUi1dCVIeTAUGSuMYihfdYaxia/sAHKbBPyaORZ+ogycc9JPVeXlUYv+B2zSXFdFzonDFcfosh5Y1t8ZEaGGGipTtBGoSsHVYOb7uGUk3ofjUoRazS1Ez8CqyLTpqJqxHNq27Z0fUdd1xgrYIfOqdwLY/rI9bnIjkmSdufv2CiOQMMYXa2Q+1jMlgfqICzLkZkxAjuZYhLq9I4JLYxmGWym8o1LaV5YBcULIolxY/Yl6SzLgHjsnNRz/5ZLFSJgOSJhKaCUMqWf4brtKeKUYqLJDmhQyGcgpXnGaFXi18vAefSfK51kTmDGwWrxNNmxckqtS2EcO6WJOqKUDCopoLoxo5Q5k5MM40MYPSUQOacJJYmxDKqFn3zdQ+RchvsZnU35bxkMjQYK4/sf41S11uiSyjfSbbz3EnOrZG2rMqQczf5DLACeQQZ9WuFcsQHIiRwoMm12viGK5waOaQS5ZK3o8n6MNmJUarmWuxQbg2svpuf6n6R2anQ1SmOeA7J+8etXAsAAJPc3ZUK+9oFgR2cFguiuQpnqKlM8EjLsYFLKRinARFSBhLr25kGhktmhjuSy2JENnMclMW7gEt2ptZP/Vww+FUgDkBIhFq0b7BYLCtHiGincZFIvm18ZI3TcLK8rlgKenARc0ZLte00NkqnpztRlnHIXFCySUSbtXsOYhKj1qFoSmscoUZeDCXKsGVE7oQhdI3UhQ86hbG4x9RNAoMfmTFNVTOoKgsdvNwTvS6axbOxIhqjEzFFpwFBZjcpiHumCotKSvlFZhdYJ40xhYiCMJPExGsFFMeJRFgXFPKukuOjrwy7GDCETfSZ7QSNSSoQIBNHjSlMrIM0QIzqKFEamy3J8+V48EshOJo4pk0IWP4XSYA8Du4llLuuOcjjHKJM8cTPuWKpBPj8F2Yyxtg6FFtp7SjtNdUpB0M4C1ox0QO99kdOIYWiIGWcqmumEppmgnaOqaqqqAuOI2WJdXUz3BCmtTHU9HbUWbQutTimsq4pBWdh9nlkZ8ZmJMhmiGPk5ra7ft7JkRsPavJtGyyUxNhUSnSTNkUPpml7XEnmZongxWAEeU4woI5niSttiYKtQRJLfYHUUDaAWM1lBcRUujw2SRSm5OGKCZEFbTTOpmUxqjNFgdPF0McLOyAq0gCKmqYTGSWbbeVpvme7f4uBwwuF+xZ19qCc1P/7rn7C96KHvOb285PzZMdurU3IcMEAcHNOJJXcd3flT0mzCsw/+lGl+SrVXserXoAbczDFfzKlvvMDipVeZ3LxFZwwaS1VpvvP2d/jXf/pv+ZsPvuLoxj32pw5nsqQr5IibzZjevs1qE3n28QlvvPoae/cWLNsVj58+ZGodOWsm0xmuXqCMRZssIEOCHB0oW9afLxWcIibxJgm+p3KJpHpi1Ci1kGn50OOqwpxJalechNARkd5WMsrLVZcF9JPdl3fT/HGtCeNpi4oKHS2aendhK50xLhFyi9OJMLQSOagMQStm9ZQjO+GlmzfYn2sa1zFsnjLoBd3FkrAZmDnL/bu3ePP+Xd58/T7fevub/Juf/A0ffvZzutbTZ0cc5XMhwxDQoTBDksdmzWw6o2kqjDVEn4t0MaMQKupf/0f/L4/3PiSmxN5iwVc3HvBfH/6XTJjwYPiUji0/vf03nP6HJyx/dwlZGGfbbcvyn11RT2qqSs64HKQAiynRdT3+25HwjcSw9KRXIus/XDJ+eulmYvXfXCHGuOMErDDHFPQmsKlbKndC2A/sP9mnqho5CzSkIOePgAcjA2sEJEoRqPVuWmhUKS3L1EZr0fTuJEMpCRamtTBucqG15lLIy2W5Az1CGQwImKGEdVUaBqvHovOapWmKX8f4GuX6LDrdrEr8t5ydOktDPvrpVNrRthtC35NzZj7dJ3olJmfWsDc/ZH8RWF4t2bYblOrFqNU0WKuLdle8WYacRLpmHbUGXSSRE1cxMRa1mPP52QnGaYKVlCGtKxySZND3A1ktqGYLJh7OTs54cdrw4msv8/6HH/LZzz/Cb5aYPAhgnDOTSUVuI9ZZDudzJs2Ei7MzktGkKMWxeA4lVpdn4Ldyf4TAfFaXdWFQxha2o6V4RpeCOeF0AhVJWPaNLVpuxXK55Nfeeotf/973OTk/5+xqxWYITI/uUh+9xLrP9L2kPlWTyN4io4LC7k2Zzxz1xIGCr339Gxwe3efP/+zP+fLzz3jttTd46+vf4ucPvmLwS3waUHmg37RFupvpug0ai40Wtpr1Zc/i6A5ff+3r/O07n/DZl8e03YbF9IAUBvqrS5rJDK0VzXTKd7//Xd7+/nfJXvHowTNWF62AwHZOrEErqfeyhy4ZlquArTUhGrKqQHn5zBTiKWVqJs0UqzTr1RU+CI0+GkfX9rR9oAsZU2mUMdSNJF2lFNisV/TdijRssSpx7+4LTOY3efDVUy4uxnQukeUab6gGS1U3KGUI2eMag1OK1eqSk6sl6y6hNpq92wfcuf896olh2mRU2jBszvn173yLl199lYxhUs+4fHrM5599zvZM08wWnD9+zAd/8y5u0mBcg6eii4rcDmz9BVo3WDTrTcsqBWZ+QbN3k1t3jzh5dkEYpvS+IeU5tDAw4aRXfPKzFff9Gc2XkfPlOTobVOdhu6IxJ7TDwKYbSNaQtWVwt8hTS7vcMGw3OK2ptIHgqawT08zGomxNHxNVPVBNplRVw9C1CB8h0aWOnBLz2R6TZk7fe3LWaO0Iyovcd+jRtikJCaZw7xRKXcvcpIYIUkPnQNdlbBLjw9o5nLGE6NHGcuPggP29fc4vLojHZ8QsSWzrjcR3xzRIQxhV8RQYyC5R7y3Yc0ZqMwXTakqOAZM9EyceBb7b4J3G1DW10fRZEUrqU1X8+sa6S+5SSy4s3RGQGaXyo1+NFHAaMdaPWCWGtGNMqyps7uSjmLT2HmWUmCREGQ5ro1EYGWAVE1OFSPwqo+VMVQrrHGlkVSLymMpaspXpvdQP18V+LlJr6WcEzM7FSLRKYJMmW4M3lqQdBvHjkjukWACQIUeMgsqI754pchpNpqocOEeMgb73xNJHZDXaTykYh4fFW1EpSiIEJKvJVuO0JXlhJWcte10x+nXI/btjsIz4mcq7waXKEUVhviMMEOuKsWgcP8+SBpMVoppVxJJGGvDo5Gm0IlYQbJGxFL+JVPwoiAXwIUsvqEaWt0ZlKwa0CpIqlqEqFpaK9E1KizRfWu0yOC+9d0YG/RKbKkN3q4WlH5LZ1X+UHnm0U6C8jlSG6xm1M2/NqQAkRpVG8Jd//coAGGmkjxSUy46I3DjJzVlierQmaE22f1e7NqJjI+Injf51Ecbu98pGGdGtghLGwmIYKVYjwBGzIox82fHblO8zHhhllcqBwKj9FjWxVoKa593E1+LH7q8UWKCkodIKZQwas6PvKBR69+PHBlEV3VomqbhLUJGzR163H4ZrVkiZwGOKSVuUBy8OxkK9F/BEXkttZZJ0begnEzrfbYj9RtgHWujdldWoqJg0NdqIYVHSWn6VhZq1UM1jTsQQCcAQMv0QMRi0k88vpgAxQNZkHLnIYHQsaF3ePYIiJ8l/5/DOSeN9JPiI9xIhGqPEi9pmguCWAlJEIgFZW10cJ8Fy0PsAOWu8L0ZkKRX9fSzsiMQQxpjI0dRmRLVBZD0KMAxh1BgrQd+TmIBFL599HovxGK/djovXRFHXoZUSEyJrCTlTactiOmH/8JDJdI6xjiDmL+L4rzTOTXBWUkTklYjZqym6xqxNaUqgOOyJhpEAUX726EOiDDjVIFNwWbuJJAeNul6LYtRYGD85FYM3BKxDAAbDQNADrRZWSooBYxSNq1A5Cu04I4auxhU2hTS4Orc4FbFG4YzCKSUeLFpTV01hCmm0tiKZSJlkhEq3jS1da8p+lubdugYfBaDKyqCtINgOsCmzWRlQc2Y35lRuQu0c58uH9EPLarPERcfy+Jgnx09YL1fMGyvPFU3qwQ8tw/aEdrVh4oDhhD13wbe/+xZv3ZuzvFoSTk85+3TN5K1vcuv+HBMNtW0423gW030WN2/w+huv8cl7H/Ljd97n9/7e94gjy0trDJrZ0V10NeXqyTmnynL00i3u3jri6vKUvO0xrqbrt0RVCfvJaTG3chXJWTl7ktAvhakkDCCjM3UllMXOZ3JI+NiibcXNGzdZrVdyLmcpFmRflgIwabISA8ocC6sm5R36r0Zz4ZHCiSfnLSYpVKog/v/MvVmPbdt13/eb3Vprt1V1Tp3mtiTvvaRJsVNDipRoS0Zs5UFCgtixAceBkQD5AEGe8hnyFMAvMRAkEAw4SAIYTgw7igVZkhVZihrKYn/bc9vTn+p2t5rZ5WHMtXcdSs4zN1G8p2pX7WbtteYc4z/+TUThiodHJEePq7IkTDROQFgU02bCsp5yM1lYXbDZbVnrFRubiMe3SL1m0Sy4ffsOX/3ip/n0jYbT28e8/MptbnxwTDNtYB0wWHw571MIuAy1tjg0Wtfi91NX0qSkXJziFSpByAOv//dfIc0rZosbbFrPxmf8f/02P/yHa5Y7aL9pUXcrFt9+jTvVZ3nw8QecP3vM0LW4FhZdw3Q2Yz6fiUlcJUy3qqpZrdZ8+F/ep/ntiumHUx7+1FNe/R9f2hvjvvut93n9f/4M2jqsc0KRTSK1c07YbmM8ntGaalczRr7JeSTGx6Pf0IFVWPaYsueN0zyL5LsL8KdQxXAuIx5D+4jwXEyqU1nLdGYvlC3r23MGk6U4ioUSnMkM/nrs52GNlVnBYU9OozQS0WsrQ2Fgys9Vlolh0zToRuQKKSVOb95lNj3i2fmZ+G1E2fumkyV1NWVXd0ynU6azibCTc8BaV/y2lICA2UAEp+SY5gzbIfDuwwf8b//ynzObTTnbroQWrjRx8BilSTFzfrUmGsuQFc3iiK/94re4dfcuffTshh2TSQW9ePNorZlPG5piNj21lsooZpP6x5zhIYRA1+24OF+jUNTNhMlkIsUwMlxQ2kozMXEcH91kuTxGEfjovR9Bzmy7gRgSk9mMGCP/6d/5O3zj619nsVzyG7/5r/ntP/w2XlccrxL6UWQzaFxW3FlO0a0cy+P5Ca+8sMTYyP2H9+nDwKuvvk7WE957/yPCbsebb7/Np15/A1U3bMMZlTU4A73fkn2Q+iR5VDbMJnOaNOHYHfMf/9rf5t4P3uRf/cGf08VIM3VMrGK13VEZTe0Sg+8wxvDxRx/z4MkjfJt49ugS36e9vLOpK5wDVSlsbUnJsW0TeuiJaaD3ApzVpqKpHM6N5vCaupqQp5I+obJ4huyKPE67RF3PaOYzlssZOSc26w6nAlVjcLM5JE/l5HqqKsN02tAPIhmzZI4nDqcCi1oMeQeTGIxlvd7ybH3F0fKIn/uZrzBd3OX45it8+o03UCZh64FHj97h/sdvkhtNyB23bt7lheUNJjePmbYbPnrwCPqWk+mU+23P1WqDrRvIMG+mNJOqpHw1YOb4aIlK4yZTTm+dMpkfcfN0xW61w2KY1zXLuuFkusAoRTKak7t3cFVNt9uhMgydGDU3TS1xjUHSDrq+p+9buvaMH/15z27n6bc7bPYwdMyaGjMVmFyjqV1NUuKzVVlHPSl7j9PgNHXTMJkuqJoZKXSEIaAC2AS10vQjEyOPmH2Z9mdQuZgMl1ZNK8RDbxhIQUyCc8oE7xmCJwPNZEoznaGvNlL3a4e2BmvEqyAN4kmXYplgK81Aj0otPg801uBMDSkT+h3JryDssDngrGFaCUu0a7uSrldi6o3GIAk1TuuSGifMypG5IGtCGWSOLA+EXUIqc/Qc0ClKc6lVqWEhhkgcInmI6CoJyK002ohPg4AgMiAr7U/p1wI5BelnSszq2BsJm8OgsKisCz6UhBlshWWZy6Bjv1cYeQ6XFBaRLARjSMpgkJS2SCCMrZXKwtTX41dGjZGwjBP+cd+Q1BZd6uGsDmaW43NTvk8x74egQYFOmhySsJKl9AdEZqO1KoNj6V2MkZ4qWEUKGWeEyWqtZvQmMcrso0ylBxvT+cb9TvZgWe4TkYBKHpUCSRm8TNdRSSJVRymvKXvPyFAJKZSeVNYxiRAuR0ZHqfXLUCBxGJxTrpFxeFtgn3LcZPPTIze0DF9T0lInFbZHjMIeTjkSGA1CC4Q41rYjsV5R2Gd/+e0nBsAQZ+dDgfI8nb7QmrJ4Kmgli5FSz7+x8W9H+ur1nwGl3yzgBYeJsXw6af98ERi1QkKNGsER+ciMVvuTUR5GScE1+lNk0CVeNYTCbshSssWU0MrsmRzGSvFHDCQlEVoZmaDprIvZXZkKlqfK43+TImuNzY6RhyAXkEabBaPDMkpiXSXuUx7A2aJxK9RHpY049xZbFl1oYXHweO+FalTB0Gq63ZZt3zJrGtxkIg7ZOWPQVCXdQjknIIasaJKn7T0miJN2n0NhRUQmaGpjZPENFIlCFI+QmA6fZxL91ZgpPRoEpUKFSknhfSL4gPee3gt9XvuIasX0KaSIzwkfA4MPYioaR9aOfJxdPzD4wHbblslfYWekcjEz7m+5LAKHc1XouaOUgv0GsgfHvCwJSUeUkXQQ7KifU3t678i8GFG6YRiYWMvR0YIbN24ymy2kIHYSlxsSoITyhtZoV/R2IzUuZQIasgXtiKTCbNACJORIip6YPCRh6sjLl3NbqPWF/hbHjUCMFIcglPIUQwEgZaIqRnoF9dYOoyWyMOQkPgkpkoJHawSRT2lvxJuzMF4iUmgbawstXuGMlq8xBjiLHjbEiNJWqJVFouJzLOapI7AoLKesDLZqhF2T5OfiGK6xJCyGnJa8+OLnuHk6Q91ekHLi2dkzBu+JOdFu1uzaHbPplJOTY7rNFWebFUY7XFnwjbEybR16Ymy4urxks7ri+Kjm2ZMznrx3n7mr2aXv43XLF77+NY5uf4qT2Q12DGzp+dbPvMSxa/nTP/4B03rJV3/qdY5nwj7KRlFNl/TVQM9DOHtEp29z89XP8rkXP8fH9z6hTZHdMKD9U3KyODNjOl1QNaDMlkzC2hqjZ2gzkevJdGg7iAkTDZV5icXUENWKXdsRdjsW9oScezJr2aRR1LYuoGyRFpTLwGrNrBJzRQF+5TPWha0UVURZjbUZS49KvRggYyWiSwmTZHMV0MsF03pBVSncFKrUUYVM9i3UA/Njze3TG3zps1/k0eMt37/3Ce1O8/hijQlbPnryhB/ef8r3fnCP88s1u23HkANDgJwylVFMKkdtHSaL6exBEjFOeiLKGHJW9O2AuleTteJZfMZ650E5/GVk8smMo+4G6mJLa3ryDzKD8ezutfhVgKiw3pGGTDWvaRZNKWzk+CyXM+ZpwvlwyfH2iOP1Cc/SJS9vXhaGi9J8kD7mpdVLKGP3HhFy7okGegT3DwZkqki7cimUDvB8HI1SEUO58d9j8SlrnhS3aVyzoNA9ZXqmRF82knFHUo8smjpfe7b8HCity2OMtNKkR9bFYSK6j5lmLKj0tX+XbSKlPeAyurGP8ohwzdR5u92SUuL4+Jh6MuHias3V6lK09ZWjNg3GOhbLI6ZHU1II5ViKJ4ew8yjMIgqlXCbnWov++t177zGfzXDOcfeFF8R0dAiFGgur1ZouRGwzYbI84f333qdpZnzmM5/hdLHg3e9/l8cXF6QcqYzs4drKIKLtB4YQJSY7hD1lPBXGXo7ih6G0out62n5AKVP0/GVNto7l8RGL5Zw7L94l+Z7V+SPeeuuH7LpANZmhbMXf/8/+Hr/2a7/Kb/xf/5Lf+I3/m84njpYL+mx56cUXWZx+jo8+viAOa9547RVeOHb0q6dszp9xPJ/z+muv8+TpUz558ADyhKePn1A7QzVt+OSjDzGu4u7tF7i62hCDJ8WeYQiYMiRKKVM7w41bt5ifnvDXvvEN6rMVv/e7v80HqycsVIXT0OlIHFqaSc0uD3T9jipler/Dq4xVNUbXpOTptluUiiWO1LGcz2nqBd4brlY9fdfiY0uOQukXfwI53zbbDe1uI3uQFglyirGkD1RYlwqtW7PZbFiv11TOcHp6g9s3jyF7jPL4fkdKmc1mDcByecR2pxmGHmM089mUk5MTJpMpQz9A0jhbodAslhO+9vWv8vNf+3kqGvp1y27zPmcXF1zttnzw6D4XmysefXLFMHyXW6e3OZ7NeHjvPdZXK0JK3H35VY5v3qQLiadPz5jPZ9w6PWEyX3L39Ji7t2+xOFlyFQYGbThfrVnvtmj9MbF/yvHC8vKdBZW21MpSq4jNl4Qu4HPNxdOB4MXkMqVE8B6jDU+Dp+t3eO8ZUiDkQNM0zGeOFz71GiEErp49IXVbIgN9iNi+o++74ruylLUuQKUqBqWIpviK+QQuyVDSiNtqVmXgpDXGWejElPqg598XafuaUsALaSIzUh8RpDHvUyTthCXrnMVYRYgDPvakNJCJTKcNR8tj6qohp8Buu2WzWePTjsGvUEZxtDzh5o0T2Xtzw9DvODqu+dxrn2OJYvXwjHfv3aPbtLiJxqKZ1g27bpAuLyR0kgn2yCGPOWBLSmLMmUyU/arUpjJX1EXGPHpbUeoiwTSiUsSUsRGyNqQC+GSliWpsjBU6CzMaXdIMyxBO1lxhug4hEYrHB0rYcT4HdCyvyRz6tb1Z/+gGWXzixKwzHWQMPyYtKJyA/U9kayieEcY816ulnOn9IP1NEPPTWNCr5x9znP7LCDBFykD4uvyuDMJz2oM0aAk+kN8RkYe6tkftJRQ/9jOl1H6QEELxpPqxnlhiauUNai0ye2MOAL/So3+JeCkKoygXiZDay3fGbifGQ38wvoZRupGigCeHvXVM8Czowv7AjzVAKgBg2YezpAdhBK4a0zCFIHAIxBgNcg8PqQ59U5bQhH/f7ScGwAghoK+dPCPpYDS8PNQ5ueiHJJpv7zJbDvz1eBvYcyPkL9VBpy+UKnnctDe/LJZ0ezd+uWCFIpv3Op/iTSuT6GJOc3h1hV6vJE4uFuRMvleF2ZGKUZrE/WiyJHdos9eeqz0wIpelscLOMIX2TzGtHDOA9ag3qjRn9l1u3H6FApsV9oVM4BKQcqS2ktJirPCakqJop3NZ4MrFaRVmyAxDEjMpBUPoabc7VBxYuBmmqel7D0oRi8zB2qp4LWS0QSom5UEZQqbEPA74mInakq1hYg7mL1FnshbDq5GeLp+nwpVmNOVMjokhePwgj+VjInqZrAy96Dx8jGzbjtFkM2XR6KckkLjOCqeNUKyKEZr3Hh9iccdVB3+S658PqoBWef91vSmA58G0lMYY3MxoPBRjRhDgsmAXhGpctFLOKKNZHh1xenrKzdNT6rqR8zb04lRtDZpiohiFGr3rW5mkx/KVklD9UiaESCh6SKUkHcWHUNgTlA08H66cXBJbnoddZcMoxySVqf0oylLFlDHFiMoaZ4VBQpKkChjlKkJJ9wrxLFGSYjL4SO/FbdrVE1w9IdpKkoi0JioYynMbLaBWFG0UWkg8so4kOcY5SsIPCM3PGOivrvA5CRCoRiGDTGBy1FiTMS9gAuXkAAAgAElEQVQpTpYLTo4WGN2yWl0Sy+uu6pqXX3mZ6WxCVVWsV+coldlcbQm9rGACMMHjx09pGsd0VvP2W/d49PgRfb9js+3wdeLk5SWLqaPqVzTDJfiWpWporGxoX/jUXT5450P+5E//iJduHnP68gnVxBDIHN2YcOtTt7j39H3W/UA+f4ydznlx+QL69gu8/fSZ0EPTDpU8wWe23tPvNOiA1tA0MyoHVW1wRlMZS904glZgp4RuAgzUbkKlDMlrnES6kzCkorlsjJX1LCcx9kyS0GFyokoBVxpnsoAFSSWCkuMdW4fVEWsHrBtQypMixGxQ1KRUcVxZZmTuniywNjKkc144XTBv4Xh+i5M7M9740qcgB+b1kqAu2frA2cNHbLo1pw1sN5cMSXO56vDBok2FTRpbKaHxNg6HhRzxUYwyBcSQSb6wTGTSkHPG9z1X63NQFc30iDgkYhRd/dBtuf/xiv7pOcFt+P73v0OlM37oipaaUpQIpd9WFboUy8PQ09dN0Tobjo+PmUynaK1LilBhymlF1TR7JpTUboeG/+APUS7nEYgY11R1KP0OgP9YWI2AiBmXAgEmshFAMY3kXyk6UkQq4LRfIYTxJZBpATPK8xZQf1xVR5qsDLuksDJjXOu117tflGSFgdH2rXQhilxe9/NF5gHQiBwdHWGt5eLiAq01t27dZnlyk6urS3a7HRTdc1VXzGYz5oslMQRSLrGOZQ+KpSAcYxNzOgDuWmtmsxlVVdF1HUNhRTb1hDSIaSNZWDwpwTB4PvroY+pmyryZ0nc9u92O6XRKVpldGNjueobQY5TIEupa9t5tu5VY6b2xtcZZw3J5REqJtuvpe3GVlzQAjXPyaW7blqdnZ4SUaXcbLi4vaZopWSdObt3ib/3tv8vXv/41/tE/+h+49947WKPpV2tW7QX14hgVPXXqOGoCQbVcPn2Ti4cX9NtLGAJX8xO6YUeMivnRHG0yIW44OZnQbwP9EFivV7z46uvcvbPl4cMHVLZiVk1wRuqwOL1gauYsljO87/jhd/+c3/z+21yFlr7fEncXLJoJu+0VUQGVpu13GDI+R0xKHN24gckO3yfioNCzmr7f4X2PtQLYHR+fEIJi1z5js+lJyVNZgx19MnqxK14uj6idgIHHywV15dhu1viYOd+25Cg1RBd6hqFIezS07ZblYka3uyIMLWQv+2tq2PXF3ygMaJ0JAc6eXbLdtDTNhN1uy2azo2ka6qriZOboHjzk3/yzf8rl+or11ZrL1ZrpfEkzW2DqGfN6jg+W9crzyeaK4TTz6Mljgt8RErjLBlVbYopMp1OOlkcEn7j3yX3ef+eexMsaRa4V1WLGpuvofCBrS+8j1lYMbY/JCofmZDpj6ipiSGxaeHbZEUOmqSuOjo6YTqZs2i1nhfGEFT8eUzmOT064e/c28+mcan5E3feSFuEsLgWhqadEDAOblRhZT2Yzegtd0qjphKSRuOKhZyieFd0wSMSjijLoCEL51yQo3lv7gkGu3NI8A7nwoLMkIR50+2IUrxQ0jSUTxXBYBayDTKJpDIvlBGcrLs56druWGFpy3gKJz3/+Vb7113+Fq7XlvXcv6VthBX3q1Rf4T37tF/m5z32Fx+885B//43/CH/7JH5OSwuFQIeC0mOATE8QszWMUgChEj822XOeKXOTRGiAFghaJhFIifY45Fk8/6VlQSlLekoAXubCpc1bFM0EiOY21Uq+HTDZZzByVlmOKGcfnhAhDlMGtsVLfpyDrqCROmSLrLfuSbIqMZgijD8RoeJ/hACLow9R+v28p6c8Uz6//goeMw8ZSX6dcPJzKrlIGT/skk+d2nFyAA2ElG2OLtEQVbzy13zevb1X7Wj6l/XOPA8/rgPz4HOMAE64DOgcQI0aJ8h3vH5mR6tr3WmsxW1WpsCv4seeU4zvusylT9jXZUzMyIJfz//q1IQMMuTjUc69vD8hoLZIepLeWmbra1xl76bcxGJMwZTB8+Bj3E4/y+Px7bz8xAEaMketal/GAHEbZFL+DAkmM5pzXvq5ZJlz7m8PvwRgSV7w29lMirqFXZq/5HBEwbYxQnvPhREupTKY5XGhKaUYcaQQy0HtMsLyITEgRpx1Zi8t7jnFP8zXa7FG3Pd1aKWbTOa4WfX42xTSxIIyqOOQarVFW3nOzmLEnS2mJpkxoUgzE0BNNKfiULAKpMEiUlsgwyZ+nGGBWkKQANViqSUM/DPQh4Yo+sZpMEIsiTRyByCzT/VwKKky50HMi5SjynRzJPoOKxCj05JQTQSvS9Q8ysz+yIw0tK8SkKnqCjyINyBmiIMAxRFSGkHooDcheNkHR6BsjZDYrtNycwdiW0XBO+nhVnqwAQgrSvqFX+4XhsMiMaKl67r8jzVecnIXPN9K0RsPO6xNQUDjnmNRTZrM5s9mMvutYXV0RY2A0b02FIbQ309MZnzwhBdHoHyhABRwpS1RBP1PZIAQnlevjuV4BYWTocq4oRtlMxhaZ1GiqKlOnjFYZa6zIonLGmlDQ6ITGo5UnqqGAIHrP7BDAxlDZislkgnENrqoxriFXE7KxMl29flKUaauNsQBwmpBCAQvHBBOhyeWcyEEomCbLa8vq0ESl0kSJztmwnM85Xh4xmTTsNiuePHkkbJhpw8TO0doLFZHMsT3h1t07xPiIXW7RyqKdoaoq+qHn/OKS6bxBGdjsdrz44m2Wn5oxqeGLX/oyVkU+efse87omDQNX2xbVnHB093VOpzf4ha99lf/z8W/x3X/3B9xx3+T09hFuZvn8Z17km9/6eT5461027TkmKc4fPmCJ5eXbtzjziYtHj3EpYRmI7AgZeiWu9hpDS4e1K2xVY7XBVQ3T+TFmeUIwidA/o7FWYkg7j9OQ+/UeSIyivyK1W1IK5BigsNFStyX6nu7yrDSqec8wGs93HWrqeIzOHlO1uKmnajzKZoxpSCHi+45bt+7y0ot3+cVv/Ty37yx4/Owe2nesPzzjeLnAzA2vffpT9LHnzT9/m9UmomxNGzd8crbigo6h2zFf3GB+cpezpyuGoaeq6v0EvdZACvgQhBGnxWDNjued2rf74jzf7theXaJNTQqJrg8MXkCKzeUz4nki77YoP9DtNmRnJMpM63KMlOw5BZAAobCaMt0dN3CtFc46QJUJi9nfaZ0Dlfdrxx60uGaqeb2AGT8D64pGFb1fq0bT5PH7EQwY/1YVHx4Vi2dUFi6u8LnUweSrmMmNGINs34eJzjjvGptueT5ZpMatXsxihdE1rsGHyPPrIMbh+8Px+ova2ZzF0Kyua1lPe6GvX62ucM2UyXRGzrDZbAq4LBF8xlpZEpMm5oCPg1DIh0Go8OXfKUbgUJguFzMBlHc7uq5j9AFKZX/PUZoyLZmOvPv2uzx9eo5OmfXZOY1KTKzGi4gZdMZVjbABrCUrg6snLJwTE1StykRTGhdlNM4Z6ulyD+io4lmiC/Nvs93y+MkTzi8viH7AErjzwotUkzlHRSr267/+6zx78oR2t+PB/U9QxlHVM2aTmnZzwcerP+P8/Iy+PeNJ7bG2x1mFTvD42Yd8eP8dcjKljjGEMNC2KwE2nWGzWnN5fsGknuF0Te0clZVrbvAD2hhizpyfnfHpV17i7NljHu/OWe221MNAVRmurs5oFjO8U/TdgGl7Tm/fIlaaelJz+/QOTx+fse7WuMpwtFjw6MGKnGNhfch1EUJiGHpi6KkcWFto2ylS2YqmqfYGd8YZmtkMZy3nVyvOLy5Z7VoGP7LPdAG3pIYQ08+Wrl1jlGj0FaBdLcktPhDiUBi+Uou1bS+yyCQNV0owqafcrBrc+Y7Hzx5x4TfEShPNQJc2qJA5nlb0qwsuV55tm+mD4dai4WTmWK892VlOj2ecnixYrUTi1MwWbDY71j2obOizwg8dMXmmMy9eW80UbcVcNfeZsAliTpgVqBmhi7TbrZik9z2h98RgGXRPbA3bdovJmUmjqeoa21iUMxjTs95ccHZ+gfeB49NbzK1m2F7Sry5IvsM6RQzCCk4xEvqeXdcR6ik3b9xkerygHTpZO6yT5BBXMYSBru24Wq3Z7nakVPT1OaAQc95cPJBypkR2jt/LemMw0uRnj9aqGBRLLbvdiiSt73e4SmNdxXTmsDbRthu6dkcYBiigt7Xwhc+/xt/4D36JP/32R3zy4ZbYZ7RTWJ24e/cGL778Mkcc89qnP8t3f/AW274XPyYlqVkpZVKIBTRVRfoSZWiox3VxTOSQdTGTBS01MkQdZRJpHMgBWUtUJ1n6Ah8CPniKEFhA11KfiodfgGQk+WRkxJVx9DgsJrFPODMaGVLGKLV7SbCKScz3EwdzfnUtqIACpGtjsE4SPJQWL8SxOc5l6DyCDYe6WJ77wNIfmYkJhd6bmAoLvewnKAEAVAHnc977S5Xq87BPluFn/jF55AjQ5DTue4em5jq48nz/kJ+7/wCalT65APujnP36fp4LGD6yKmQwOg4yuNZPq/2aRBk0JS3gSBpDEMLh/kPvLQL8UTbKtSORy8OOLJAxjALgEJN6ACWe//vD3j0ChLKRJ65LRX/89hMDYOQUSfrQEO4/3HRgWaB0ASkO9193htUp7X8Prk2WCrhQZt1Co0mUZg35fcVeQqEKu2I0KRHakZIKLBfz0NGjQ41/L5ju2FGJ6WHRFFMo+aUAVs6IUaDKBMTEZKQcUeQlh5u8H2Mt1lWiw9ZadENao43C2nLRZJl2ZjJB9fuiOKtUXJfB50BQQaKj0OichfqlxgpTfCpyTuMSJJpsK5FTZIlZS7MpfdvSD9KEOlvhY4LYk9A0xuEaYYaE8b0bA0aRlejViAofPTl46DxhUNhSKPQS1ifnwP7/lRQS+UA9Gk3rYpmwJ2UKeGvLoiJ/GUIoOjC17+XHiyQCOaaRVS2mn0qLJj4/r9UeL66cDkXJ8wuP+gsLz37hUuraxLG0/ONGlA7oMEoc702lsdoSY+by6orV6oqqkvjbnCPGOImoDMLg2PtWWE2MAzEGWcSuvaZRjz66HJPYO/8LrW0E5cpmBwK85IgqvheUa5AsIJDOWRoxikYSacA0qRg9i6kcZSPNRpF1jS+MD6U02ViykUZJO0c1XdJMJhhbF3mTIkb2gKBMgVORSIpiUjvRgqZYzGrLWm0yKCVmn9fpb8L6Kl4G43pT9HkxgdKRSeWYTydMm4a+1ezaXfFskIMnS03GOctk4njlU6/QD56Uzoh9ZNtucG6JdZar1Zr55ZT5fIazU4ypuHmn4Quff5nV2RW/+5v/mtvLOQ1wcjJnvetYdU9RasHi9oQXTyd882uf4p3v/Yg3f5j4Il/m5NVX+fTRHf7qz3yL73zlh7z17T8jrjvazcCT+0955dUFL92a8+TqAZcPrxhyR8ptOfcrjF6gqAoQ4UkEVNY0zTHL48jdxQvYxvL06kPuP3xG3mlU6LGqxbArU5maiEyk3vvR91BJPCtUuQZS3dOuLvn43Tf3hY/WYtQ65qA7KiZVYj6rmJ3UTI8ampnC1RVNM0fnmuXslFde/jRf+tKXeeON13BV5OfcZ/nD3/5X9FqTQuStH77L080ZX/ryT3Fy45Snl0/RxrLbeXzs6OhwxjKvFkzmN/GP1oChMpaqTFQNQZgEOaJ0hbKOsvuXNZo9EyN6z9C1+L5lMtGEdoNG01jDgMhaKlORjJgbV0Ym42Hocc4V4zO51XUt12Aqe1yW4zfKKmIKpXlnz+Q7SCg0mcj1nn1keo3n84jc7qc2iHTTaLN/3LEQOvhOHKR6z62BusAVKu+Be1VAWqO0MPuSGACr8To1ugAY4+srpqBm3MvheoEzTpb2u6o+yDZzOiTlMK7lZb8eCzABeQ8A83U5zGoVqeuaxWLGarXm8uKS2RHUdUNVN9i+JxRA+O3/4k3cyj1XKKZi8i1rAXvnfilUD69qY9cYraXhKs+/NT0KyvqcQA2gO6zb0A+RtX5YvEMSrTVcUTxXijTx+anUX9xrlGI/taTslWNM+f5WOpqUEn4YCNeYpM5oLuoLnKtxruKP+z+g3W1ZzOfsdlu6tpXiVJ2znV/wzLwv8ZF+ICWPc2JEN5ptK6WxxhX6csSX1JTgPc5oxItAc796gNaWrmvLeV9K5hQZXh24+b9PiMHDriM2jtndE/LjjN51XLQrmsW0+GkF4tBTa6ibijxxmGIk2PcddWOZN1OmTcVuM+Xy4hyoSCmx2azZbHq6drfXz5MCMSWMqWmaiqZpRKKTwcTI2cUlKMXjZ+dcXFyQgKpuWC6PcFXFZr1htdkRSfjo6fqBHBOmMiQS89mc+fIW+XyNHzx1MXRsuxYfIs7VRTMOoPEFLEjumFDNOL41ZREvcNUAOnO56elCxbBRbLvM5XpDyJ6Qdqy3keObN7jsO7reE3VNMz+iai7YdYEYPH23hThQuYrKJDKRvus43+1oplNmi4SpKlw5zyZWo7XIfWudCe2G7cUzlLbcWCxRs4ar1SXbiy3aCph0crQkW4XPGWxkMq0xjaX3LefPrrhxdMLdO7c4mU24fOZ44luiitS1o7KjjGfLbrdjvdmxXN7g9NYtbr/4gshGU6QyWoYUOHRQ+HYQA0ofha3kkkhtUyJT4r1RJUVBTMSVcWKGOIKSMVN83MUctNSB3gdC8HL9OIs1lqaqcM6w27Tk5HGVIUXxoJlOKxazBTkkVlcX5BywWhrJp8+e8v77H/LFV3+amAzaNuLXte3Y7Tp0VQlwkuQ8Gg2bYxkM6sKAzSXuevQiGpOAVU4ootT3KpO1pHLEsm6qVI4ZGVIgx4GcvCRbGAHbrVKQR68jaYF0YU+nIrNMMe7nfqJ6SOLNkBIqi1G9DK7BVhabrBhHEmTouR8aWowR80/UiOjn/f8oW1su1wd53Cd0YaDIHiR1rtyntIUcZC8p0gd5pES+1tuN4IXU7iPYcJ1xXf5ulI+AAEjX9rA89ma59KvFb2+vHri2Ll+v1ZW+zoA8AAGm1E1iQCvHSGsjvmOM+91YHozIVQEN9KEf2WMZ8gYYWSoUICTGvP87jSm17gg+XNt3GXuiRMwac4ghAfJe7RDzgelCWTtGhriyzz3o/t/Xj/NfdvvJATDyaBB4zZSxFB6HD7icIBRZQdHaQzlRShOWRl2vKq7qepwPq4JJKkBMK0e9T9ynQFCo7FIUSiFRUCil9if12DCOTSv71yzUfONqXF3hqopUNi5pTmH0v1AorDNiEpPGgnOk8cs0WGmZZIUoJjuGw0mvjZjeJDx70xslxykpD0X3F9OBzZDIsppkoX3n8QTT48Wq0BmctvJrBZaZVBMUmhhanDHQ1OA9Q9cTvWY5W2D6wOBFl6dixiRKXjQCPhVTm5QjxIGkxEQ1eTEKMQVxzUnT+0BQBynG+HnK62X/+YyAQizeJUJlK5QqhTTsMe0XBlUu8JgOGiwAwuE5Qon+GxkRP34BKaXEr6MU7+O5KgZ4coaOv3f4kpzksamWRTCKmWYBNGSxAqUtzllq5+j7ge1qjbOOpha/ixhKI1NMT43RuEqmeSFGVIxYLQ1EGkENU8AWLeiy3us6ZZCrzcj8Kcr18u9cEHqnx/uK9tHIdUMWQyJSIhUpTFZjqpAgxdqMqToaa2UC2aLxOFIGYxymcjT1hKqeSEqLcSRlJElkf+QLiKJGRLgsnwpmszmucmSl6IaBrutkcwwZPXpZ5Tyu1SiyNFcFoNMF7ZWYxkyKct1ZrdBKZDEhetqd6OZXq0uM0tyYzWW6bAxdt2E6nRRTpgQEfJDHr5wl+kS762jbDucc77x9j48+2vL97/xbdlc77t58ga/87NcYouH//ZPvYaqar//CL3Hr9AabYUWMA9/40hv05x/y3rt/xiuv3OZ2epkFFT/1wiv86q/8Cn6z4t6ffY8hKlZXO548esjpZ1/msy8f852HH9EPLd5vBVBUHp8CZCt0SASlr+opx5Mpt2+c8DNf+Ty/+B/+dS6evcP/8j/9Ot/9o++g/I5dd0ntJFo35VquvZzYXZ2JeVYuLuJKQxdQKaJDvwefddZY5ajR1EbR2MjLdyNvvH6H17/wBrdeus1kORNjy9mSoQ1YVXF1dsWLt27y+MFjzs4fc/NG5oP3PmKSJzx6fMVHHz3lu++9xUefPOCVWy/z5tsPWJ2vSCFhbUXsO3LWPHx8wdXlQN8N3FgcE32HShGlwCDrv9EaZSzFkIKyPYl3UM6QZHKrxkIvDFinIUGIcn1XNhNjR4oDOUd87FEhojT45CElrDVUrsLVDm012QuDatdtcV2FskLtVVqjC2NCDMfUfsohcahJ1pmcuR4vOvpe5HxI7hjXvRAHlC7eORwGAsLakFhbmTSy33MEhU+ybuiyrhfwt287jHWYIpEUeyhNMsKqu445qH3RefDeuM74UEqVvTwX3bCsI+KtMhpoU9arsQLNAp6UvXmc6EjxeH0/CYSgheE2nRA2LZeXV9y4YZnNZhirWa1WfOaf/BXiLOwNZ8fjOXprhKEfZ1n71zE6ug/9wNC3VJUrDB+NHzxXVxucs8yKOWjvB56cXbIbAreXNzi9dQdnLGcPH0AYyEPHdugwTc3N01Om0ymbzYarqytiFOr/crmU11Wo3X3fSzPtIzFElkdL5vO50PZzaRispErt2h1nz84Y/MB8NuXF27f58MMPuX37Ltu2Y6YUN06OSb4n9C1Pnzyhampee+MLuOmU6fyYudN88PabfHL/EVWzJCnFrtvShR0Zj1KRn/rs57lz61XuvfOAy2ctVve07SfY2pFUzbOLLdZOWLhjMUyMA+RAVVuUNegLRwiB+x99iJ3X7Jxm6QxUjsE0rEKLU44YPFVK6OmEbRhg4/E+0q17YozcPDnBdy2bzRVKCxg1SpXatmW93qJUYtLUBL8l54BCDPdyzmy3W7SWc2fXtlytVsSUaNuOhJII7dItjmC3MBdluFK5BlVnQt9htOLuCy9xevtVEp+wa7fcuHFMVVk+/vgjzs7O6PuB6XTKZDKhmUzY7XY8eXZGt9M8dgPLOnDcVOhuYDaZcNNNWSXLk8uAaSbYyoLeYcyW8/ZjvHFEe4TRGeycpGp6nxgGj3OO0LeoNFBby6ypmDVTjMucXVzRdxt87FAGZvOZrPUKrFVoIkZ1xLTB6J7j5ZKv/vRPM51N+N3/5/d49OgB9bRh4qZUJqMqi80ZnGU2bUhK0W5abi6nWBVYX50xrDO7kvIy7t2L+ZLl8THm/JLN/ft4OoZ2oNtK3K4Yo2dhR3UDJinSEGms4+byGIXiarulj77UhoWpoCSiOufCttAWI0pCPAEfRA5T2abUCD0xIr5rYaCqLE1TgSoy3ZDKvCRy8/SInDSriytWmwGdFfc/POMPf/+PeP/eA3a7gRwcOge2m8D9+2c8fXbF9nHLw2dPS7LPlLTdinm3cyI1VLlwLBJET/ADBE8OQ5mqCwsZbTHO7KXEWol/hZj+R0kDIZOyrHXso8wdTmVsjhgiKgfpvRKARWXh7TrEOyznJCAjWdJeQK5dLcNnoqSR6AJsa62pm5r5Yo5rMskMhNzh/VCG/QqXAm3Ywei9lCIhBIZhIISDh9N+NFjk++PQer8/kIufVmEuZwrrY/Q4LPtV6RfLbGrfootHU5HJUIbYSqLIU0xkJewEmTkbWVNUYTeMTJeU9kaWOY/ed9fADK554I0DDH3oMcahkDXFH7H0KDFljHVYWywFtClsegHCg/IlIcQyykFHlsbYVSv0HnhBi+xHwTifF8PVXJJR9kOItN9rc/l+3J1RFD+7hBZ2QDk2uswhZY0ce+jn+rHyy9flNX/Z7ScDwMiQc2R8rVIbHj7YXICIw30C+wlVxTKiSSGPiSVlKpWVUMrTOJlWaFPtT7SURD8WSIcLQZconELxT4DWdl+g/LjHBmUCM4Ide8TMWOpmStNUUpSqTD/0tH3LMMQ9QKUKHAMU3ZU0PKIHExpo1rIYYzRVU+HcRJrEXJxco7/G4CjHzYi8RJDDERWV00IrRQwHTXCKCWt1uRCDUGaNhRjRMWK1mMNlHaGq8GRa78XYR2tC39Fv11hT4ZQi9B0+g0sJ7SpMJRS9GCIhDkCUzGxF8SZQhABDAucq6oll2CVy6AuNOxXZxQHcUloiACk0LW0l6lYiUkU2oQsSa40U4jkWQl3OhwSNdI3RoaTAjzHhh0BO0mznoocmU3RbCu87xgxqOS8Pj7FnUgDXwQ9jDCpSDDel+cgZQkxY5/BDKMZdM4wxrK4u2Ky3gEEbOZeT9+Qc90wHwVESYUjkKFNH0TUKi0MphR8CQwoYJ9RXrbU4EmdNVMUjI8dC/RZ63Tixk42iZ6RxyYJq981HigVNMpa6qnElDtVHoeSq8pmk0dsjRbqsaHVFsFOqesJisWS2WNBMZ6Ss6P1IG5NFNY+pGGNKjbHFBC9JZFPjqOcLptOJbE7rNV2+IvsepSKEuPfH0aMmD9BWFtIUA6lMa4GitxyYWs10Upd1Rhb2fmjJZD768H1WXJLjXZbHSxKZvt3y4Ycf8Pj+A0LvcdrSTGty8tSuISmZuHe7lqaqpRi+aml3Tzi9OaOeGu49/IAf/eAdlsubfOnLX2Z26xbRdqyfPqCqF2hr+Ornv8zThw/5zd/6F/Rt5Atf/nnuTif82i//NVTY8L+ePWZ77ym7iy3PLjL2keP1l28zfPYF3n3vQ7w+xodI0zhC7DDGyzkeapr6mBvHtzg5WeJsy6Ra8emXllx87PgHf+8/5zemkW//we9Rz2ekQaO0ZJlnZbmvFXdOZuisMeR9Ska/aFlXnhdunsjxDaFslHJ/ZTXLKvLf/ld/i2/+wi9gl3dQ1REZg4+JqnGQOj548wf83u/8Bk/f/hGuWvD04pL6WHF+1XFnekIymlde+xJfeWnJ2z/6Dt/55Ie89dZHbK46dIikmJnoioRmMlvQbjuaeibnQpn0k6Vwsc7htCVgJXYOhcpeqJOoy5sAACAASURBVJUxYYQGIGCol1i9HDxDylRVjastw6pi9c+fQIY0iSST6f7BZtxI9pufNEfmAGBfo5Ma8xhtDP7I8+SXz9HeMP9ktr8WRxgv54i1hpSKr0wBLfZx00oi764zLIwxNM1Eir8fK6SEfpr3KSbexwJsaDAytZI1KEmMsRXvlNMbszLxM1gl5tLDEBmiGPWNHkA/zopwJb9+LMhymRra2h6mMFmi1Edmmdbmx95nKky2uDcs3UuUih/FwfA57b2K5L4pcbPl4vwZs2nD6Y2bspVeZcIulD2+7D9lemY0hL4V4+HrTNEc0VozDANPHj3AVY6TG8cYY9jtdmyfDjhjODpdihyht1w8WDPJlunxjEk7JYTAYrNkc3mGGjRVrKjmU+zaoWpNPTRUlx0pJVxTMbkxLa+hwlpLnRu2D3YM3YChYnH7hMViXoY5JS0my2s2vSatZI91OwtXsLxY4p8FKl1z4+ZNqtZg8gSdZjRbzdkn5zx7+JBbL7/Kk+ERH1w8g77jTn2LrGtW244qTNHKMoQW6xQvvvhpNg96Nm92HLmbbDaPiG3Cqw5TO471DaBiPpmhc6Tdrgh9BzrT+gGfPWmWsI3FbXck73laGtukshhtWs1M1ZiJ487P/hTD4MnnG9qdZ9t2nBwfM/Q9u92aOHR07ZbTmzdlaNIOKB0hSzKWNhkdM0Y7gCJ7kcYiJAHrg0+EELDO4uq67OmRMHguhot9HSk1XSJEiRc8XiyYnN4iBs/tOy+x3bY457izuM10NmEYeubzOev1Gu896/V6P5Cbz+cYU+H7DZvgWW8DD1QiBQ/DhkY5lpMFR4s5m3bFQg+ok4qrXLNuPTerKbN6Stv1RJ9YTOdMmykX6ZwQE7defIHJYkrXbnHTCTknqhw5MonLywtspZktZvhuR0iRWVOTgkRxxrTlzt0TjpZTXrr7aW7duMGjJ4+Jg5zzOUZ2mxXaQm3mZZLsqHRFHwN56MQc3oDyGy42G4Lvpb41tTRf9RQzXZLWPYOqiaphtWp587s/4IN797CNQxuN1YpaG1w2WGWw2qKNRafMxBiJ/A6BZrJgMl/S+cSm82jjMBhsYwhtx7Zt8V48wlTWhCRNoTWN1EJa0VQ1dW1xlWXoelJIrFc7NlfidzFbTmncFGMaKn0T3/b84Hsf8eR8wy4klJ5R2SXONux2nt/5nW/z+IMNJlo+efyE5CztOqLrhgCYypFiJxKPFKlwZKNZbVb4996FrKiqiulkymQypXb13pfOKEsxfZGmPCdEShPRKZBIxOxlbbCJ1G8gzKhqR/Qij9La4qqpNP2lXlJaBCS2+AJZJQPQ6L1ARF54HykrVAD8IOtwTmhnqWxDFwI5arR1EBNaGxrbUOUajGIymYDWJCj1LYyMYlWgqJhzYUxeZ1uXIXaIaC0S4nH9N0b6uxBkeKWLBFJr9ib0SlmcqzFVhTIiI4wx7f2PjLMCdCowdtzPRRZ4nQGnlZWgxSzvfTTZH+83SgYU4ksRnxuCmiKdGVM5Uj7sX9YY2lDAJ8SbL8SEjgZbBhQx+bK3WsbUxetkAWlnZYOLMZXYdOmjybnsF3IsC9sAUGIHkIURaYp0JCP9pCkDj31/NYK6WWpqYw0qCHtJFfBFFaxjhOb+/24/GQAG0jSM0xK5jQwH0EkoXBmuTUIyZh8vwx4BOkxDBEYSCYkCpYVdkf0+5QA4NPXlhE/q0JTqws6Aa8yLEaVjbGqcfLgc3NZHpDhnQeMkispS1Q5baYZeaJJ+GISuVibvqIMhi7wuMaUQvZPoCIP3kqusRqsVjVJimpQA48r7iIYYRv8FBQV1kyJdoXPGZKF4aaUwKqOLoVEaPEMIIu2IiaYgewawWS5ap8A0NY5MlxNDu0O5KOBRkGn1kAO2qkmDJijKZyiZwknJ5zfG98Ss8Bn6mEiDZ7FYotoNcbslFRG1QZOUeIiQZYKeoUgLygW376wzRR0AWWHKAjCycSi6u5HeNaK1e2iqMGVGRNRc04groKprudAS+4I7X7uo5dzK+8L2IDsoU2kFY4wRgPee5XJZ6Kk9l5eXbNZrcoa6rgglciwHvy/u5T3JosGYjKDBakdl6jIFCMJ+sTUoJYwAFUVTXRolawxGW0FaiyxHjU2RUdjJZG/2swdkcokaVqYsWHJcY6FSDyGigZS1nJs5FRdnSFajKsu0mbM4Oubo6IhqMiOhGbwwjfaAR1lABZcU01qUIhXzUWnMHD4bdgFyCrRDpA+JFMWcVVcFmCkAxrhGOCUGmylAULmYkCZiCuSSj06ZxisSKQW6vhWJU9vybOWZNtLIQOa9997hyeOHxEHe+6SuOFpMMShmE0sI4P3AbrdlPp9TV44u1NTmJs41fHD/Mc/Wa6Ync372F7/B5z73ObIJZL9lfXnGD773x7x696/wyufe4OTmC7z1wz/g3bf+HaezitPX3uD21PJLP/dlnn7wDX7r2f/B5WbHeujhI8XR9JjXXv00203H+/fuo7IiDAPGil7Zmoba1szqil/+q9/i3vvv0PkNL91e8Pb3/4Rv/+Ef8/f/7n/EL3ztS3zvj36bfr2D6IAAuicpme50mytIYwS0XA7DqqfvO86fPi0ovbhiLxcLptMpViuO5w1f+uJnqE8XoCfEUKMrgzOZOPTYKhLjJWfn77FYajJTHj29hJVl6CNNirzx+a/ytV/+JuftI956603efut7PHlwxoBjMlvQhR5i5PXPfoaT2y/yyScP2VxcYXLGOEfOMjkaZRyxaGQTYuZLmYCkkXFR4mEFZqMA7eJDcLRc8Kn/7hWssYQQePTLj7g4vmDyD2cFCBU/mRwTtTPcuXuHzeqKGDzb9RVtu8Maw90XXuDu3Rd46795n5d//yVO37wt+9KkSAJKYVDXFSn5PUV2nMKMdNJxr9MlIu85Wur1XVOp/e+Oa9j1n5efFoYKWK2wRkAo6zSTujBElMSBp2JtZbIh5Wr/eq8DGGMagByT/ZlTpqj9fj0eAZgYQploCXU7pYSyUpSN7IyRGZJLtt/owM9+wpVKwknGWEnASjnT9QOb9RrnLMvFYg86+BDEyLg4/lP2jaqq9gfrALRIYTkMw2GyVopIa+2oRAXSmGCNQsyMNfK9NYZkRg6kDGy00dRVJRLO0kAr5HebIj9CyXTVe1+KTUHkjFFUlZOCEQoTsrx3a/ZsucqK0r9vatAO6yomdYXVxUsoJCZNg9WGs/On9AmUrRjWl9joRV6rW1IWNlLOEeUz03pJ3wWG3jP0G3bbDTl32LphMpvhqjmrbU/wgfl8IrWJ3xF1hastkzxhO/TEmOh8IHmPDgndWJhUVMGDH1gsj3j59l1++W/8Tb7xq39TIt8vtygs//Sf/Qv+7e//G4Zhg+92pDhgjCGEQOUmEr8ehn0dNh5jH0QughJWpnM1dSXAtjUJH8yhdgMMVpqb4muVy9oARfqlFUpZTk9vc+f2LbbbHfcfPpIYU2vQBvq+FdlRmVJ77+mHXphalUOpjM8DPg6yZ8UM2WBtjaci5or5/CYnt25x7Fomx6AmPUY7Jun2/8fcmzzbdt33fZ/V7b1Pd9vXAQ8NCQJsQIKUSNGSRalcKQ9sqyLHySBVyTyD/DcZZOQMPEhVKk5iV5TESVUS2YpNWaLVkAQFgCAJEMDDa++73el2s7oMfmufcwHJHvOgbuG+925zztlrr/X7fX/fhsYtWG432KqiW68Ifc/R8QldCFxte+ZHt2lObgtDZ70m9VDRMF/UhOjJsWExm6NyZrNaYpJmPl+QQ4UfDAeLOxwf3+Hs/IL33v8ZddNwt7nHpttgKiMDlDQKto0Ml4KwHjfX5xgyrq4kQr5xWFdjbMXX3vw6b33z26QEH3z4EX3+AUP6mPXFOckP9N2WpEtsZ4romKmNw1LSMowhG0vSgINqWlFZzWw6pUoaU3mydigMOkEyhlor4nTKsN0wdF1hq0bC0BOiMC/mswlVZdEa1mlN33v8ICxEaxXPL57RuDl+2xB8JYyX8xbsFdVBTVVXKB0xxjJ0mcePVlw8/QuS97Rtiw+eIUSykRTEpGVwNA7LnBP2Xgye3icq25CUZhs3tMuN7PIFiNdIWmBTN1grTGJrhZ2rCktaWYMymiZO6KZTtnWFzgltLSbLaD17YTPmPCYFlecTE4MfCsshEVIxrweiMSLL9BDWHav1ik27ZfAenwf64Ev9VdizI+BeGZQ1GOtwppL0DVdY6KX+1WgskqiYjagY9Njr3QhEUEqhJCaOm8b6Me2TBq1SslZSFGuBpAnFp00Yiw5nHcYZ9KCJKsKYXlPo7qkwOlHshjkj20Df8Docz9cdgDGewXo/XB3Z/UJIFEMRg90zQ0qK4whSSbCD/PLdWRvFvFP6mMLcVLmwShRqlHfeOLN2X1f8SyTSde+1te93xj57ZIOWPxtV1pQunodjz1XOyyJpTzmj0g01RamzbtYpf9PjVwbAYHzKuSBnBenJY6NUUJtdkZCEFy7GKeMkZyzeSjlWpnyjvWdO4Au9UxaO3tFerHUoJcjeLopmnPTevLDsJ1+6xGplQUZ2dHspUAtqFaUZ0soUP4CMtRprlCBOpbGOQy5xrbKJGWuKQY9MwmKMKN8TB0eq7O57lTI42+C9oH1WblEsjSCAI0CTZcPLZaEaEwRAKAyN0QyG0ownZDKdQ2DbiyVPzsKgSCFgdSZbRdSJHAf6rkc1U6ytIEfiAEPsSaHG1JWYI6os2dhWFqRo7GJpfTM+CXhifGZ+MGXGDI1m27YM5TBXWiKCRvXbTUBQjYBIARKUomROC4CFSrK5lc0gl3jU8QbSOxPZ8XtzucH3urHx96XRjE79dbO4GD+LGu7W7I5xUyQkKoGSAvL4+JSQApsStdX3Hda63WR2pHLrouUbi3JhcAjN2hqhohtbMfSx+ECInEk0wCWeF2GZpB3OyW7tKgCddw2MGMkWs9kCYOxZRlpMUZMuiwwxJM0ltlRryU/PQqmPQVzLna2pZzPmB4csDg+pqoYQAl3X44N0PDsKfJZDTJFJWTG+tUohpmFooahj8CV9pu+9AKJ5RH7360T2CPn+HavEGHSKu2hdiSSUCa5zlroWunWIg1A0y1prtxvOnjxhaLcEH7g8e4LftGg0r7zyIofzOd2mpa4riD1Oa7QTTkrwPU3lWMyOWF7D5YXn6M6Ct779HX7jN7/JG2+8Rs6Z5eUlTz5+zns/fp+f/Pm7nHzvLhWOF+69Sh/+FR8/fJ8FLfeef8jLv/ZN3PaCV05rvvHmi/zl+oLNOuOHzMMPnvPV33iN1179IlfnV1xeXTL0PVVyiIxX4Yctd+8eMJ9b7tw+4ZcfX/OjP/l36InhO7/+HY5mEFpPGqDdtqjcyvpWcbc3D+0GlQ1Gud3BM+5jI9DX1LX4JEgXRWUdL7/8Eu36Gto1zE9Jo/TMlk7ZeFQT2MQLroYzkpox2MT52Rmz+pgn3QVH99ZcLLf8+Kfv86O33+Pq6TOGNqCdwWrRWx8fHvLNN79GNZ2hgueJHwi90CK1EoNMlBjbjpG+4qyuSQSRE5UiZAdWF8BgvDeEBZFYLObcvXWb1WrFZXOx82VwzlHVVSmaepyVSOB+u2az2dD3nexuytD2AxmJ4z08POT09LiwCyxam12DczCfikxxFFwVFmI5mgqrqCSuq9H/QgzfRubf+NiDGKMM40YRkQWoN0icsbUKpzXOaqxB2AfGYsxoOCgaa2l/9147N/fGm/8fH7vJVtnrRklLzhD1WLhTCkxhyo1AccypSKX3hc/IOBmnbiEE+r4nhEAMgcmk4vTkmNVqxfVySQoDxycnTCc11mjarqdtWyJxBxTE4NEo7A2/kBQjuaQVpCQAx276pkcTuYQ2BlcZ6tqRcsRqRUxgjaJ2FhwwSEOUTAEqtKKpBFBIwWO1IsSMM1pAhiIDQsnZao2mV3KGGaNwlcE5V96PcfHCkDuGtiMmiRQ9nE2kcSBRV8LAMQqskuSU7WZD8J6+6+nOnqNcRWg7agPUBluBqTKVc4TNQG0dd0/vcfbkgqdPHhPSFtdQGr5Dtm1PG7Yo4zAkNttrFo2jqmDbd6TgmC0OmB8cElJmdXnOEDOV0rimwcwaYjuQfGJ1tWR77x5f+fav8Z3X38S5SqRLEX7wg3dot/8vQ99jtKJyVVnPBmssQxQwzToHZHwUuY0YQZa48lIzSAR42jVAo7+MGY0RFaX4GEfAatdovvjii0wnE1brDUpplssVbdcRUyD0npQD3ncYY6ibSu7VTaDtpNHLCpomg5UmxyhFhSq/SpOosSd3Of3Gr/PqKy+ShktC+5SJ23I8n3Hr6BXWm54HDx+xajvC0GKNlgQ5pVmvN1Anbr/wAl9/6xsYZfjzf/OnPP3kEQpHDFu6rcKkGt93dGvNrJpS29vEwdNvaw4nxzw/3/Lp04dcb7cs5jO0hmw1ve9JWZOGgDMVztQoLMlHdDaQE8OwJWbP4uBQTLyrCae373Jy+y4fPfiU588vOTg84vU3voLKmgvnSL5nSAGfhUWQgid6T/aBhCLmIEkR1mFrR+wjgxfZz7bzBBx9Uihb41wtDIAYMCnKoMhqtNU0dcNkUoNKtJs12+2qxOBm6rpCZfHSySHRdR1t32OaQOd7FA3KVKTeE/vMdtujGoNxkd4HxBu2om3XnK2fE+NGGFVVjXaa6MvaK3VgLh42KU0wSf7cNFOOjo5o6ikpZsIQCDGjkAjTMAy02y2b9absRZBSkD3TiK+etrJf2aZiu92yvL5mtjikqupSS1tykSMopUuqSQE2UmTbdlJb5sJ6Fp4EQyqpYh6GZcvq/JLl8lqYjVruGdm3pe+SPT4TfECRiSnuZB+p+HyUk6ScfGWwbDTO2hsMBpF/jLWrMab4lozR2Hn/ORlbBhExKrxQGHeSC5FQi3REgHdDUkXCTy5fk4t/41h3jgNntfsYB/Y7S4DdwHyUdxRAZccaBKddYTnckMNH8S00VfHQKtdElWGufE0ZLkZVgPuRzf75s3f0tUoovQuAvXFGlxFOvsk4LJKQ0luOY9x0s36Az71OPlMP6LwfxkgNAqNU9j/0+NUAMBQ0Tc34psrC17sCSI5jueCjuYtMuuSmHN9YAXAEqNi/GXIzSIk2cmaQC6si4zxWAAmFMyKXGHN6U/mdAsCPkyFVwAB2yGI5o+RnjSgmkZzE5dhasMqQsyNaTWWUUJYSsgmlUGYtUuDIAh+1bWK0mcKAHzpcb7HZCSKZkshBkMhSAUwgDxGtRpRW0MGx2TY6Q+zQKmGsLa7kmUgkKdH2phil8ShGZTtqcY6k5BkGXwrygarWdL2YRJksmd+RhPc9KbfUqoYsMUs2W0wejW2AVBqFFMnFUVmliH46cLyYMZ9N0RqW60JhtrogupTo3HItCmgxOgiT2ZmAaaTQVePoq0gS0phUoVSRAhXDS4RObvXoRVPo5QqMkkSXdpBJzd5Eb5wsArtNdf/3SknBn1Ii33C3d1WDqWoANpstm40kOzTNRBJjxvcmSsLHWAyXup6YReNYVTV17cT0M5coMQyucmhr5GNcYSmRlRgYEeU9GELAGFBxpJeLjjcEAU76XiahWhucK5S4ci+OKGyxHiGpUshBSRaBGGQSrLSlqioq65hOJlht6IeBoQ9F5jOuf7nPxoZRZegTBPYZ2lIn6sK2EVRahYyKARMlPmqcau6mpOWeAAE/NVn0iq4ih0h/w4PHWkNdV9RNhXGaUOJ6xXwolqZzy1m7FflO37KoKn7tW29x6/iIg8Wcu7dv8fDhQ97/6U+xVc1iPqeuJyg84HFNjdoaYlIcLF7gi698jVdffoX18ozHDx/w3ts/48nHF1w8XdGvt7xw94DT2zVXyXHvpTs8fPAIu9xwffmUF750wu0KXjuumHznOyzPOt79xTOUhsvVMz59OOfO/Tt8+c3XePedH7Nde0iGw/ktUkr0Q8v9l47w4Yq7t084P7tEdZnDA823v3GPH/7ZH/HDf/cTGntEmitQHWQDqQYSG/WUo8VB2cdH00CFn/XkKnJweAg5M5vPZT1rRUgRHyNNbYmrC/onv4RFoLr7BsnMyCS08agYWD674vzBBWHVEJkxUNHGNb0d+Mqr97HO8Qf/+7/g+3/2L3n+/Dmh75hN55hmjneWWtXcf+llXn35Rc6eP4N+Q2MVXRAdsykmniFADsUPCSXnjEpE9kaNRltSFgaAGDYbYdMZQwiR6+US9+wpq+WSoe9ZvbEin8iyjilJpGYKpBCgdmJymwOqTO9RhpBgs+3ZtD0xCfhbu0rYcMVXZqR1VlYXGV2+UdTsY9tuyjUy+3i5lEfu1J4ZcfNg3k+IytlWbrySoCqsBxNRKUCAQC8G1cYRk8LHQhdVGmsKG6KckVrdiMKDUpTL3qbL3htvACgjGAkyAR2lIjlnQvT7oq905iNgcJOCO3pojECGtaMcTpr3xWxGTIFu27FZrzk9PcVNG4wWeWXfJ7SRwYEiyfVjb7aWtIBdOz2v2jeuk8lEwFGtsFbTNDXT6UQKZqcZ+ohRcsYZrfFulIQmrFE4qwTschpnxM0/SgGB1rlEIQrgLuCSFsaZkjjyMdUmy3RCrn0GP/R02y3DGAupMmHoSNrBbEYMQ6l/hH15fX2NqyoWB47ldiDEjKkXaO3oQsKqyHRSUdkGk7dMqkOO5y/w6YOHXF+2TKaOmAa2bY9xDUMqQlqV8L6lb69J05rGaiYTQ1XXTOczlG1otz3bpPBa05sSlTiI30BKmSFGPnz0iD/8/h/z9//272ItDBq268x2G4lRCm5rLFpHYghMmwkhyFqoG4kN7YeOlBU5CzPHODHP9jtPGGG5jPG5gntK0xR92JnlqXFYpjLWWg4OD0kp8+TZGaEfuLy8pq5qZvMZIQY2W0lxMsYwnU4wRrPZrHGV+Jp437PdCjuyXlTgIu2mJwyavs3k2LOYadzqjPXVxzzI51wtL1ltrjg6WfBbv/kmD3vD+x98RLvdUjc1TVVjJ3Muz88w1jDVGec3zHPPG3eOeeHefc5/+THLs3O871E60rdrtpuBMPQYlcRYMwZ815FtRfADj54/4aJbUS1mXG5kKHNycoRzDSmKLNrUE6pKjLpzHOU5icliwZe/9jW+853vcr1a88d/8qe88967/OwXHzIMYmD+pde+xKSekONA7SyBKJKhnLBOo6uGHAw2lXohZnyMeCCqyGTS4OoKnJU6RWe0Eba0DE5LDdttiV1LGjqIwtD0sSNFz2azwvuO2kmtYIwiednXS8mNNYaQIjF7Zo1BV5YQC2BktEhWbEMMSmJ6oyKQyEak0q6WvUOhaDctXd9hgMpYkQ0FYS1TpOdJQTVpmM4Xwl6NiH+Bkp4qek/XdWy3W3KONE0lLNoUiVlAdp8iPgS6EElck5XDRwXFQ8I4hzK1pPhpJ3VyFvZF3jEuSq1VJsopg4+J4AP9uufq2XOWZ5dsN0vqWuOazN6ks4QlZKkGx8p8HBywOw/2tbCkSkZSYYCmLPU6SgAHo0tqo9ZUzsnfhTH9LuFcKmw3mZlolETl+oFUJPljY64YhwP5c012MbXWwkJkZBeMPWjeMxhctT/LdyyLzwwSNCUQjNHPyVUOY4uxd/HtSVEsELQdvfX2A8j9aEIkI6nUBQJsKHxIeC/gyMh8UIxD2bjvp8ZXN6asFPClHDrsUmd2PHt2H2OHIK9J7Qa/42NkuN+Umox76phQ9u97/GoAGMBsNmO8wLus4RCFWVAKrqR2ohDRO2qJfhT5yQ1383Sz4Lm5uIqx2Hh1VSmiCn3VGI117jMLKozusjtkaP//m5/fdIvVSozeKqOwTlFijlFaUdcWqIjBEkOEJK8oz6D3A5u2pe+6kpAgsap6fF0ocgiyaVmNxcjPtuKvoJUmZgE+nAkik0hZTOmsSA20kedTa4fSEt+KFup+38vE3k1r2rYjDBKbKgaSNcpZidAjsW03LK8uWa8DWWXmhxPi4Im5kwQNBdFHQuiwfS+aaGOxyqKibC43EzjC7rpHVPTkPjBxhmbSMKlqBteLD0gWloVKqZjYmd11T+O4MY9MjM9edwW7fy93ncgcxi8c3UFvFO1Kiecp5AKclajAAmyR95PKv8ns8/MfcpdmnLVUTYOtJmAtjx8/FjmPtnIIJikWxUl/PANu3syKWKjXrimRo8bQdz3btiVlXTY7Q9bCGBk3yJgisaDXqjT4otfbo97jveP9sAMvPn9Pjbp0oxTjbZZIGJUYEZ8+RoIf5SNCG1XaUjVzbDUlZU3X98QE2jYoo4pfS5CJUo5FNhbL6weFRYiQ4nqiSRA81lUYDUMu02Wy0OpUSX8pAzFT9t3Bi4TKGPEH8FlSE1IxYDRWY5zEg2XkeowNox8GXDbEQdJeKmNRQ+LV1+7w6r27KBKvvniXV195hevzp1idqCwsZhXNpBGTxzQQFNQHlqFLXFxc8Sf/+gf8/L0f8vzZR5w/e8STR88YNnD7+C5f/crr3Lu/QNUt9+9N+fZ3v87/9Iv3mQ+BV+6f4qLn5OQOXzw8xlwpfu3rb/F0/UOef/KEuql48PABJ3ePeOXVV3h+9pjH/jHLq57JZI7BEGPH9fUFL7/0Ks/PnqJSJLYb0tbzT//7f8JHv3zCz957ztXlFrS4SpOF9osSANAPwl5B7+PGfAy7pl1rzXq9JnhfJuKJi8tL/iJe8v8dDrz55pfRp5/yxncNs9svlIMy014958P3fsH2whM2S1rfsew81UFgvVrihoYHT57z449+ztOrB6R+xf3jI2rT0EXNqu84uHXCV9/6BrPZhPd+8gkf/+I9UBV1vZDn6WNhNGXJtmcEppPQnLUiBFmLIUqKwuDDfqKByAsSmc12y/D4sXhlxES77IlHZX9LieA9KgVUTvhe0203RN9BEiAvFt+VkBLrzYa+7zm/uGByJkWPdRZbJkA5JdrNBl98oWBkXKQicSufJmXHFgAAIABJREFUFyBBWymOrNVlD0Gu4+fOuHxjb/vrshMKui9stpQh6sIWLEC8nJziBJ9CxA996Z75DKDwGRd2ddO0bA+6iGw0lueldmweWwzivB/lP6OkbW9Iutfd3vB9KqD8+LO7riPnzHQ64+6t21xcXLDZbLg2moODQ5qmIqUp5IQvv1uBSCvKxxg/m6JojcfXddMYdQRMVNl3jBUJjilARU6xOObLOSEDiUhVO6ZNg7NihidePlK1x+jLeSffnwtrziBm5+xA9bR/T0dGoBrjDvM+QSUXVmQSHXsYOkjiFdaWuMjDxQLagVUfqasJzk3xPrJu11TeMJ1MWcxuMXUJ3yeuL87puzVNY4mpp+u2YDQuV8wPjqknNUplwlDRrS6BnvnsgMX8WIZZaNrBs920hCApckEnYtuhN4k+eBIZ7SwxJH7+s19wcb5hdmgIM8Ojx5c8e3rFZtlhTETj6ULLbDYF5MyxxjGfzaVBaBOZQNd5Ge6kTF05jqcnzOdzlFJcX1+zXC6RqWskegElVS6T1FJDxtJ+GWuZz+eEIXJ+fsGd09vcOr1FTpmr60u6fotzBueqUpVE2m6LD71IlcjEINPYtttyeFIzP5jz6aqn7SIw5fDkiPsv3OXFu0dstp/gJkdQwbe++V1+9+/+Hn/17i/40z//twxdzxdeeZkcA598+gld39M0DVZDtZihVebs41/yL/7p/8DR0TFPLtf0wzWoHkVH8Csymfm0odY1M6fx3TXEgNNTUmhZba/xWhLsBpXpkmcbujKsLLJxo7DO0Rf2pDaOiOHLb36TL7/5NagaPn70Cz598pTl9RKyoqlEwvTTv/oRlbGcnz2nMQ50Yhg6ujRQKSuyDGukhs6SDBi9IkWPjx4dCqvCSXOrKocxFRgrhs9+ICRPu430Q4tOkaZyVLUipZ7Bd6ADi4MZx0cHHMxnaAVX51f0/bYwhsWjLcRMM7HcuXuKipYhXrPpO/pgcWFGkyuUaUhoqX1Mop4YoKIyRhKy0KTKoUttmKLHhMKy7mX9J62K35CsO20s2lq0MgQfyURMVVFpAUkgM53NmTTTso8n8XcoYIZSiunBnNu3X2C+OJCBr1JU9QTdTFDG7uRA0ptIsEJV1cL4RRrUpBHwLySSz1w/u6K9Xu1ZDUZjK7Mb1pGimK+bEutdwBzkqNqdE+NwLodc0lX2wPwNaH4vf443JN2Jveww7+tjKGzsnWxCejSzRxNkz8h554ckw7wyJ1ZFrqylsddZAKTx7BkfNwcRYz0d0973QusbkpcChkqfWXz/Sry3KYkkmbyzWNhLvW/2J4mYVAHvxVogFdZZDEVWsz/dUWaEHgqskdnV0Te+bP/5bpZZnpsZwRnK/R4ZU1hS8Q8ZZbqMQC8lzEONwMu/H7yAXxEAQwGVc2RkUxt1sSmNJgaC2OhxMWl20wbKUH0smMgIrb2gQyPDIiX2jWv5PqtEl+qcFZq9MRhr0MYyeiIIMyGUblZuhj2YMT77/SIWeozCKoRWa8X9V4AGhXEOoy0xWMiaytYYNEPvWW5W9L5j0BnnDJOmoTKVsCBiJEYp2KZ1xeJgwWw2o5nPMbMGYy3OGlCRH1nDq68cMXTikD6d1EwmNXUtTuhKZSpT0GFryUqxaVs27RYfxICqbbcEL5ujzjJ5r6YLJvOFTAO6louLGVdXFwx9K5rY589ZLZdgMq6yKCOSEEKPsw6HTPjzCELs2lDpd6MuN4rSuOxoty1aa+q6ZjadoZSi88ONJr4AFanE1OaEpiRnFGbMGAwqa2CMmxLz01ymnSNNOYMU8mPaRk4oZNpaqjzIsTSxN5Diz4AXN9HK/d/nnPFRNkxjxfDLWsfgBzbLpWiQnWyQI7VZKyTtJKfPbHIoJdPYQhuW4kbRDgPD4AkZXGUKxVRYB7F4A6csjWeIgxhjlrgpY2TSZCmyqaRkLRTwoaoqaTqsyKFyMctDlaSREUFOSUwlUkYpS/I90WeUchilRDNvHfX8kOym9CHRk8lGl81WQKmcxCBwJE2Jzl3hcokIS15AESQ+F2dpJjXaOqJTRJXQOePGZPKd9q/ozJUcLBqFK0ZcXgk7SKOgHJwSyyoovaDrcm21EvNGpQM6J8LQcfvkkFfvv8T502fMZw05eH767ts8e/IIYmAxnXCwmDJfHJCU5mq5ZDusUJUjxy3bdskH7294/IuaYdOyXXkau+Du7Zovf/UlvvXrXyLES64ftjTHR3zhtVMO7lrWj6549uQ5f/l//wVvfuvX+eLp69hbn/Czg4e89tXb9N0l62cbYoh8/MknvPrqF3j1C2+xXHnW20+5Xj8lhszB/ISnT1a89GLH8/MLzi4ecn6x4uDphE8+PcNWNevNks53ZBqMOSoAk5drlSEMwtLyedhNSWJh17S9GNPFPE5axHQv5cyDT8/57/7x/8EL90+5+7U3+HsevvXbv8Hh0QHbzRUf/ORd/s0Pvs/Ti2f0wznJTsnW4a/PmTU1H3/4U54s32ZoHPdePqVixkHM9BvPcu3pfOC1uy9w76WX+OSTD3j3Jz/i0ScfM52fcHii0aYR2RNigKvkRJUGMCYxu1UJYxQ5KYKX+LzZbEFOmnbbkkkMvS/Fk2YYAo2zOzAyhChTx7KuTE7FEHigb7eonKmcJpkJyUoaz2zaoI0lpshms+Xq+lpSh8w+hjalTNtu8Qq5P3VhL0YB/6VAg9F7Z+85MUZ27wH6cY8ZC8SxuJOm25T7R9hXUjwIsGgQTx49+lhohzEOp0zR7QasKmkmox647OGjj4UADbH4N5ShQJkq5lITyH7LnlmSi9FbU+0kJhQfqZsAxuiRNb62kTK8m6CXe9gbRTWbM5829F3L9fUlmcjh4RGz6YQYA7RinpmUNF/j71EFEEhR6gFrxbxaBjG+/D6/e50heNF+B19i1lOJzssYUxiGKqOtYjabcXgwp3bC/NDlgxRQSeSgVkNIGb1rQsTwWTZrActk7wwoZDqpKelfKUKMu9rKWQ1J/LtiAZBjHFgur7DOUjkHfeL46BjTzNj0S3p/SVSZxs1R2mGtYz7RnJ8/4cHDd+hDJ+hxVkymlpgtpqq5/9IrvPTKfU6OD9iszvnJD3/A5vKMw+MZp0cnXJxfc3G9og9WaOPWEYdA9omgIylHuhhEVpsy+WzJO3/8F/zn//V/xWJxxFdeeQPijA8/+AhnKzI9RgvDSWXN0HmcbTDGkmLEVQ7nDGxlYo82JKWp6gknJyccHi7ww8B2u5VGq1C/swplGLBPH0lJZK9VVWGNoWtb6qqhrmpJ/ahqckps2y3WOm7dOsVazfX1BevNmmEYODw8RCmJ3Y1RjGzToAirSPKKyTBFWc3tF+9z5+W76JniIl7BJHC+/IjvfOs3+e3v/Rbvv/1X/MH/8gekPPCf/if/kLfeeovHDz/lf/3ofT7+6EOaqmI2mdDUNZOqZmrmnF9ec7k8495L9zi9fcTV5QWXF885mEEaemmuMVQaYhuopw5Sz3o1iNH5fEqyino+ISnPptuinaKyNQ7xc8kk1mt5rQcnR3zhy19gcXqbH779Hr/8+Jc8fvwI5xxHJyeolFlfXXP2/AyTM9O6pnZVYag5XFOTsqZqLE3doHKUGjHKOq9qS04OFUK5hi2VstR2nCJrQkzENJDCQAi+MJPFJ8LWGmOlEdYuYwGtEyF0+KDL1L6TePsMwQ/0yaMnjsXikJdevkv0kavVJwyrhDYimw9emBjaOLIJVBMNuSL5LIM1ElYZplVF1Abf9fTrDdkHJlXDxNgiIVJo51CVQ/QoBqUdOYO1FSmK706toJo2xBipqpocFVlJlKzTNc4oiUxVino6pZkdMDs4xliRWWrj0E2DctUOwBDGdhk06SK5UMJKRMEQAiplnNKYqHn++BlVVTH0FmsMdV1LEpgPpCieGkqJWWfK8n6OxpnSDI8eCvvh2giw7IaWnxsuj2V6DPu6XLb/IncpfYHGQZEchpLyEYqfDVpji8RYFXma1hqddAmIYHfejAyRnYxFg9GGZD7LbBgfIvHmM4b6Oo2gfwEV1N6Ee/RVstaRzOifMQ4gVGGMjqbVwh7cJ3uK3ETrLImcN55OLrVP3v2ZXU811uli9C1y7/HaSPpeqRPMPiXy5hBh3BdT6Rd257O+0UcpCW1QKX2OhPDZx68EgAHFOZY9CiXRMBF5k6FAB3KgZ8hxjFBNxNLApqxKzJ0FU2LmxouZ9rQWMa7MaJNwLlM5aCZF9qGSpG0UNy2FLFCy3Iw72oy6ccGTNNJOW6pKU7kKZUR3aq2iqiyzeUM9qUiF1dH1nuilCImDZ+g3DN2aHHsqDbNmymI6RaMZBk/XR7LROGdpKsO8rjhezFkcThnyBp8DsU8kJT4aXXdFu93K4g1TVD4U0yTtQGuuYo+xiul0Ql1ZCsNMNmnj0HYidKGs2G62bLYtm+uW5eo5Y4xRjEH0t4sDjDV025a+7aS4rUQj5on4tsMkhQpi3pdzoQsbi7K2sB4UZC3U/2gwIbHatqxj4PbRESfzBbVzrPuWVd+ichJjzZSJWtZPzghlLilUHFHIEYkM5UaXoj2O/L6bgFRp8JPcocSUwJj9dVflJozI9S+ijJuNrUwkAyD+ECGLeY5S0pQ7U2GaBmUs3eBZbzds2i2z2UySZeIoPylTXTVKZYR+TZYmZaQkGyMNTNd19H1PRnSY8oIKnTrLfQMlQbes2VwYJ8oUdDXlokMUre+oD4e90Wy5m/Y3bpb3oVxUmRj6IA1EpvgIlHXnLKqqwTrRGw+CwI5Rxj4IfVHJDbvHGxHTTlem3DsUO5bDwidUqtAkjCqxbnqkTxct4ghIJUlSsGSapiIDdVWhtCIOFus0Jhqy0jQuMzMZGzKVBmsG+iiSgUkCksKohmwykZZmUnF1dS6gWfQ8+PghMUR8l7hz+wVe+cKr3L53h/nJIT5GHj55zKNHT6isI7iK9XbJ9faK3kyw2bI4OCWlDffu3+PuC/c5v1hyuXyHL7z+Mi8dOu6dTPid3/gW7/zR2zw9O2dz6fngZw/4+//g7zGoxPvvvMv8+JA3vvQ6P918wHqTeHJ2zuGtF7h3/zUuNx3UDcurC/q2J2D4+NPHDMMPeOXl+5zeOmC96ri4XOG95Wq5ovNbqqomJo2zNSn5slYLVbOYFBpd7YoH3wxsXmnRv68YbLc7QH0SJ26tFL03nMWGc7Xm5yc/571f/hMW63/Gl17/In275cEHH/HJnQfEf3QgpqtZ2ELGLFDOcRU2TKsp06ZhFZ9D6FmnTBgifRRR2Pr1S95+8Ud8cPkjfvGVR7SveOKsJUzPsa4hK02aJJbfu0bF8RBnP001UlgIDTNglOwnaR3wq45YmBWgdrGM67CBDPFbCe4q8u8FhiQRd1qJ9CMYzfViS/Aaox0WQyygWqwzW9cyvOhZf3ODPioTGFUaUK1JNhFyKXqKizk5Cm2YAoKOQD7jJCZAYRrJv+0nQ1JyKIzciKU5z7s9KSZPTDLB0wqCluthMugcUUpi04wzaC0eApQIU2s0FG1yTomYElq7Yj69ZyvoEWCJJZLvxq4zMjDaviNkcXLHimtbShm8xNOmlG7uVPLaUxb2SkljUlrhkiEFT9+1dDmiydRVxcnhjOVqRbu+oraa+eKAurJ4r0VyVHyuIImULgk4gA9Cpx48cQi7YcxYnOmyd4UgaVeDjxSo/IZGWBVTU4fKmqqaUE8mKFtJkV/O0b0hm0Fpi7J69K8mxhKdq1IxkyysO50kPSrlnb/XWBAbo2A0XNudPYpkLb0fCFFRT2ZgHVWdmU+mKGMJEXoDyRmapialwNXVJUYlrq6e0w1bIOKMJESAYdP1LA4qCAPrywt06tFE5vMFm+sL2iHgU8ZnAegGr8jK4GrNEKA2UjsMIeG0w5c41JPTI6yruLh6zi8//JAP334HZ49Q1nF0a0LfdlhjQHuGGKnsIdPDW/ihpe27Qv9O8nytkeFWGSD0fcf1dcJ7T7ttJakNYSFaK9GFXT+QEHkcKCpTcdhYDg8Oca5mvWmZVI4+DqTacu+l+6z7Dr/dYKqKvm/ZbrYkpZifnHJwdES7XJPDukjWIhWafrNmFXrMdMrh5JiX7n+Ramp4uPyIB6unrPsVv/vNb/J3vv23WX90wb/+f75PDInvfvPrfO2Lr3L5+DHL80vuv3CXi/NHWN1w5/QFDuY1p0cLXrxzDyKEGLj10j2iznzws/f55JOPGLqWzfWS7WqJjlnu92lNY2u6bUu72RKAZtJgnaYfPCF1iMfIIdpaJk3NZLZgCIG2E5nMyckBi4MTfvTjv+K9d9+mrhQHBwtSSPhNx3x+yKQGwxqyZ7Xa0NkWZWsmei4Dm3EynkvtgxVpAQqlhVGsTcLjoPgL+KEXWVZOheyvGPoehkEkQUFYq0EpGiugiyrGiFEN9L0mhiDpM1fXdG1LZatSvhj8kIm+GPuWxKiDxQHz42N0vSBmI3uy8ihVpPEB0iDDkz71YMX01BiDaiq0U5hsmcxnzA8WoDNeSZKfNfYz3m0pZVQWWYhCUdWVyGZVJKFpmkkp4eIOLM4olDM4W6ONE1DaNcIyzAXwyRq0kX1dl+ZZKxnAFZ8O48pAOXhySKiQsaYWGWbKxBjoh8gkWYTDm4q8O6ESBCDfYANYBc5IuoZCLAMy+35Paen0cjay/5UaEyXeTVkhQ7Zdf1iK9yw/R5UauGywqNGvLsnHblAtOpNiNzXWwapIWYqMwyS0tkUuachZo43UoRJkoMqArkgdtfgUuqraqQNiSqhgZSBbAAE0JCTePSlNKv4e2sjnsXhDChMxE4IAGCpoYqSY9ptixQBpZDcmhDGZFCkUvz1V+ue0BxfkiwXYU6WfGz0/VCpxvKUnG1kwqgytgF2yn9YUGboaT8ZCSpC/i1mNwZp/4+NXAsAYmQ4jeDEiauaG6dVu6p7ka4mpNEkS30LxJlBKYlCz0lKQZtH6QCFRKoMp7tHOgLOZykWc7kErIkX3mISAqVBUcdg1QQVC27E7Rt2XILIVs2bBYmqxU0fInjj0VCozMzWNkcijq82aoevZrFuGzhOHXAyhIib3UkApj/Ed0UdykKbQ1jUxdGyXEYaBtG0xfs7hiWa5XXJxveJiuyWEwNNnDzDKiJHQakMYMk2T8dHglaI6mMjkOVvIUvxMJxOc0YU9obF1Tciai6trzi8vUf0Wui3r5YbQ9uQk73FQotmd1A2L+ULQdO8L+6Si6zxDkrdu2jRMascQxGwpqn1DrWOZGqaIwhC1oUsBu1xSxczh0QFHRwd0yyC6XB/oQiAZQx9lypWTxCGNxoHjQ6vMbNoUXan5a434uL5ikBjSrGTTTBqGHMtNdmPNKmFl5MIoyTGUn7j/T2lDyjAUt21bTXDNHFs72nbDar0i5chsPi1DQykojc4oWxyjP4eMjtTrkc4WgmcYBoZhIKWRtpwluhcEeEu55HqXOF0fUCFhlKYyFjKkIJIJtBjZxpwFFGKPbkMWnWT5PfJ3hpRLaknKpCASjJQzPgyFRWWJShGVwmpDpQzOB5Quju9ZwAWbI1oJDTCXRqvgtTv/EoWRKWJORdoDBE+7XpL9INKQYRDtvJGGTZFE+51Fq2+yoVIyZQveizRIWbKS+FefAkZrpiZze2KpE0wrQ4pLfE6y14RElRw+VQQVmR467t6/x7C6xmRFdbgQPWjMNNWEalLYMk1FwPPg6QOuV0tiP6BThQkOFa0kBVSO6+srHl+vOJhPmC+3dO89YFJXvPn1r6HslOVmxa35i/z2N36Dh3/+KZ88ecSGyIePH1D/xSGHt2/x5PEF7eMVk8UpRwd3iKrHVlN03dAcHvON7/wW89O7fPrpp5w9fULYbiFErleXvP/+JYvZlJAjbT8QUsbWNbPaITG7rsRwyZRHa821OmO2mMmauSELqJaO/FeB/JuJUE6jNFpuKSkoIpZVtrLHqsxznqLiM374sw/lPqsy6Y3SoObMaN4VSFzklpy3wCWMu3aZ/EhRlpnMZgx3rnjfvMPHtz5l9VYkZ0cwPZ3LNFMv4EQd2X5jvbexGVl3KEjF3NlafPBUFdSzCn/uCRvxDVJJaPwjfZwsh7V6I8NhQn13NFSWH+4JRG24ctvSVIOYaQS0zvQ64ZViOPWsXt0Q53tAczTHeu3/+pIYo2VQo2Ig6R3LTWoxMddVUCyhJCXB6BHSvFElFHA+5ZLorpHoNiWgQCyG2uO+pJJCRcpkaJRRepQem8Ey2yzMlrFZ1mWvkVpF3fjdhXkQPDpFqjJlSgVgzuXsta4SMzBjRPppjQw3+gG8J/iAH2mrhWXi+54UDa6qCuAhIG2OQUDTmBm6LSp7VE44Ldr1y/On+KHj4PiEw8M56/VG2G5+EFBUa7IfCP0gRbvW6JSorQVdYbXZMT50Kea0sWRtydYVvX5HzKn4TGm0tmSMDGgw5BIDmcoENI9Fnzb4KFNmbSpCyChXkXUFxejZh1imZIUxYKTZJ2ZcZcSDo8h1jXOEVgpvyDvD2Ksh0AeYT+ZgKlJuWV1fSrHtM6or1zgmum7DanXF0PcMfcfB4ojsPceLA5zVRB9Y1JmsIt3ygnUeSGEjjBWfSVQ8erbk4rIlDAPblTDItHFkV6FVpqrEmLofIs5aTg4PuXX7trAb/MCm72gOpqSQGMKavgukeEUMPdErmmmFj4rJ4jaTw9uE5TNyiAw+UttIUxmmiwO0qfCDsILarud6ucT3Azl4jg4OcVp8BYyWhLQ+bMVbIWZqY5lVFQtnmBlhd56trhhCxM3nHL10l9d//S1SH/j5j37C2fk5fbdFJ5gdHzI7Pma1WtNtBnS2aOXIRGoNigFvI+54zuGtY8Dy4MOPebT6iHzrFn/nd/4j/ou/8zus37/k//xn3+f95TmvvvUa//D3/mOuzp7xr/7wX3J2cc0bb77Od3/rb3F6cpc7Jy8S2gteefGEWhmeP3zC8/Ml77z9I56t1jw/e856eU0YRLakmWArK/V4ymxDpE+aTQAqi9OG2aSidgtSWNN1klBh7JSDg1PqZs7zizNQidt3F0ymlrd//BOePvqURsNRY6gZiIgJY+4V0VdoPacbllhTM6RBGkFrxfct+LInFR8Ea4RFk7LUugmMclBZvPeS9pJW6BRoJoG6qtis1ui+x2qDSqHca5bQBzqiSLER7b4fIjF2aGUYBs/gM+iKpMVfTmVZH1dXG95996fU1rBeb5gtppye3sOjWG09SQ1o7dAYYrCkDmIvoPiQe66KgaywpjNdGtC1JhmIRjGdTZlWFaqqaeoap2XvEPheoZTBFpaYzoaUymtQo4xBYbIiEYtZehbmahSwIqsyuLUOncAaJyBGEtDTGNmf5DQxpZdLxDwy2XPxkchY22DcRPzHjEURhTGmZYqfd5I3Jeb+Y8+cIk4pJs7ijJHBp7IyhIsJrcQLQs6iMnzIasfKTkUibcZGenfIm/1AU0t6DGVfryonck9kUB2jR5HFFJZYzPETku4o9XeOwg7MGZGsGRlgjgM/IYwXcACRN402BihF0nKmaTE6Aic9sNWGnDI+C+iQgaA0QTtqLSC1xxAykCQQAm3Ryst7nxTBl/OpDAJG1QMIc7PYKpE9KCvn8eiJOIIkY20+DjVG408thUMZSBf2pBYWTUYX9nsx2TYKURuXNYSwLvIImpS1+h/AL341AAzYT55HfernfQV2yRGlKNRlIewooUqavVymX2JYUqjsFJ8LZdFKpBa109RWUTvRl1lNuUnG1lYWviaTtZbKUEMuuWdiYFYMtIzFahiyYrUd6PwSvbHEFEhDj1OK7VWPqx2BxJATISti0ORoISXxhrCehCcRiL6l98OOImUU5DRgXEXTWLQKdNsl6+sIyRJVpmbC3MnivH14RGU0KYgL+Asv3ubw+A7bLnK+XNNmSMnTX7dE3+OS53BScXS44GA6IVYG7wyrlLC64fjoNtWmJT2/QAWP7zt89CikockxcXJ8TFPXBD+wbVtZwDFinEWjqZqaw6NDFrMpPgSutyu2pclNcYTqMklDlyJohQvQho5zBXbimFczjpoJT9cbnl2fk0MG69jGQPBRUNTRB0+ZolFWZW3J9N5q0RNS6F4pyyYia6vcOWXbH4f9aszILY8xYo1R05UKE0NLRFJMQlFWrqJuHClpZtM5OSqur64ZfIfRmqZyWDu61kc8shEmJSZAxkpE2z6zem/6Iwdv2tG89/fJ5/w4crmvYhSX/JTk0CraPlVYGGPzMWoERx8JPXrCJAE1yrsph17Zr8a3RxuDiqJjDEHcvzEGbSt03eCaCcZVggDLE97FJ6ky/dg3VPvG6gbUJL1OVvvLkTN93zH0vTRLRr4mRJEHOaMLtU2AjxgTQQNDLBRfATrG91hoi4baGhqrqK2hMpBCyxiNLLQ82QeMMUwnjqbEJasc0HlDDhGjEk0daOqGyjRUeo7vNeePP+XickXsLXlimU2nnJzcIeXIerNk3bUcHB3xpS99kWlT8+zJY4iBbR9475c/5ctvfYGvf6Ph+vmGkDWrvqVygU4P/OV7P2Lx5DZtH3l8tqSawPGd+9y+f8wXX3+Dw5MTfJRGdDqfc3LrNh/87Gc8+/QBaehwORH6lq7vUVb0wNbd9CbIO/PE3VUp60bSNdg3pIC7dEz+2+ln6Jx7c0j5PquQWET2rtVi2CyNp4CFEslGGoEtGLIn5sANug6mpEhZV4lRsjac3r7DF157nZQyl//2nOHRSlhgzjKZzTg+PcY4x9XfveTuP74Hnt3zkLWvUMlIrOR0Su97mqZmvpihPtSo5wrftaQYwXvcTp4hBmLDfxYJr0Sm/029YxCNdErnHLPZjPlsLlItY1HGYZ3bmfb+4uDnvPD9F7n7/t39lF7fvFtGmYVM2JzSxfdnfx1UaeK10gUEYOd6/nn/nr9+/pafkMe9rsQtF8A0JWFE2kYo8T4Ou7N5fB6Q0IR3AAAgAElEQVQqjf42IvvQJcVoB5CO4IcenzvoFOnGr5U7WPan8vloEJW0gJ7SZkjhowqIoK3Z/R5XTKutExaINVaeT/legwDtTSP0dsisNlueX1ziQ8Baw+27L9D3nrOz53QlWjEF2SuNKVOxlHDOcXp6Cka8nFIBakbwqVAfiuRG7+6Z0Z3dWmExxpKGs9vwbtxbwhIqEgVXCZhoNUpbrKuljqEYy6nRYV4xpr1pY3A2YYxDqWE3ZbPO4QeRSVVVxbaTNBy0RBlqa4kxShy8H+g7j1GW2WJB3TRsthtJbSl66xQVTT3l5OiESVORQmC1aTlbbmi7nm27YdEfYIym63pCgG3bsYnbAnDL6/V9T0yJZjonxIAP4qVzdHjIiy++SFVVPHz4kKvra6y1zOcz5tM5bR/ouw7f9kTfUzmLpsZog20UUfUMydMnz7bbUKmelDO1lghH3Wiur5folFAhUBtLNas5PD6grjSbq0uG9ZqgMuZgSm0cB13E9wPkgT4q+q7HK00bPXo25dW3vsprb3yJQ1Pz5htf5pOf/hzaK6IPHJ0cM10s2G5ars4uMBQPuFwYhJVD1zOUnVDbA2qtWV58yuWzT1gcTPne9/4Rv//7/yWf/Nmf8b/9j3/E42dnhBcU3/sHf4vJ0YJ//s//Z37+y5+y3LREC69/+SvcunWbq+VDfvKXP+QPL65ZX17Rra7ohi2XAbqsscYIK7jvccZycnhEsJGD6VwS8DIc3jolhYB2joOTA6qpIeee09MD1psN4AjR4aoaHyJ+kFpvuV5zdnbJ44+foXPgaFZzUGvIkVj2KT94+s6jjeXw8Bije9puTV8kIUYhw7Bc9u6sCEHM6q1RhDhKScVHyFSVeGL0HX3X4hRMnaVbL+n7nqpqUBhciVkOITH0AWPL/lJiPKVRdQihuN/v/QUgVj4w9D2Xw8C0rqRHQbFZb+hRDCGDqcg5kKIkqrXblqHd4P1QGk0x+tdGEtGMtdR1JX5LIeDDgtliQePcPoFtHABTkiKKAfHIqNXlrMylSaV4A1ljBExNpTlXcl6EFLE4XF3hnDBMxN+snEPFS0lpgypSOZLUz1YVUFaL15tin4QRk0gJdSV7aFTiz2SUGG56Jax4RSLGgRCGwurLu8S5GDPKlNRALYSJXMBkpSCrVJgjCl05MaJOhWCf2Q0ulRpfy8jgKYacpQdV/P/MvWmsbWl63/V7p7XWns50p6pbt4auqbsd4h7diZ20MmDHKCZpIkSIEQlRIkIkEALxCT4h5QtCIEi+IEwSBilRCEksORDANoQ4Htp222mPHVdXV3V1TXc4955hD2t4Jz4871p733J3hm/ZpdI99559zl577bXe93n+z3+AXIBmlEglyKacZzsNV8YtNaWEz4moPSkqfJHAxAApFqZwSU5R2pRznYukdb83yx4hAEKlNVSZqhLgSPCCPA1urLXC2NGmEDZK9Gz5njGm9NlynYz/Nv67sGRNATdKHHQeyQYClAgILyD6lAaT9zXC+P5zzsUotYCIxmAxWOsLkFRYP1qYHxx4f+gSN/+dHv/CABijFvWQajnqZigTsH1BJRuwKggNhY4yTW8Y6UaUCVqZwhJRylBZiSOrnMY5M6GCsPdnKDia/CZd3N21nNzRqC2qYtJT2B45ZrqU6NpA3sVy04qJTt9rhpAIRJRzxJzxPpG8pnFzTpZL7Bx2Yc3u+pphs8MpjTMOpQ39EMjWsDw65vTklBwixMytWzdYHc2wzhGATb/lZ9wv8DteeYnVvKKpYFY7lkcrlKnYDoFn/Yxe1Rhd0ZCw3kO3w0SJCez7LQ8ePOHRds1ViuyUoGh1F6hbj86R5azCO4pTt1x4dWUg1zRNRdtu0UrTzGfkBL7tixZYGop65lho0KGnCx4fAsHL4ul1JNhMnTWLTrHLA+vQ4taXqCiu4Y2r6WPAdwOJFq8UzjrGrOtx87C6LGBlER+RweIQWW5KtY+RHS8aCm3q2zRpoGSxLJPC0T1b9gphP1hrCINQ5hbLJXUzZ+gCm82Wtt1hnWaxmFNVsuB5L3plXTaPrHWheWmZnI6NXqFfx8I4kftkT/8eH5ML/vhusjToKUpqidUStTS+5xGMyOUeHA13lGKKyBKKnrAtlBplLZCL8Y7U57ocs8QbghOXaldTz5YsFkc0s8VEsf9oo3S4VB22VHusYnzuCKRIU2aMIYZQVCVjs53ks7eiTc2l6TZKTHZN0eipYpYYwz71RZFx1lDVjqaxzJuMJpJ8X+RouQBjQhvPSXF+fs3pskHnnov1BRHH8VGDqQAHm/YxPFRgZlxdrLl8soVcoZhjq4q6mqG1xQySTFPXDedPLomD5NurHLm62mBmmifblq985S2ePL7kG19/i+1mw927z+IqzfuPzznJlhu3nyXojvniDi+9+km+5/d+ge/+3KcY/MAvfuWrvPvBe8wax7PP3CL7Hr+75vzDHT55rDMy1UJPm9xoQjUCZoeAxtRMl033Oz0OTaye+ncyOoQD2itPXRfja0155lk0lDLUyAVFG4EwJZNcFRi9Hrq25Ztvf4MhRHbbLaNpoRQS8rlrK2yk3/pfv/bUlff09lmu+wKsKEUxVCsg4keAAMHEFXmZyRbaPzkcPGUP4jxWG7R++NQaw8j+UOCPPPd+5vn9vVHOxQQGKWF6xCggrjEKo83+2BXorMkj9bUUSYfMskNQ6dAr4qPfl4JQT4ViKfHk+1HSniorTv4xBmLw4v1TNOa67Nc5R0Jh6mktvjuQivSB4m8U95/ANCFT01ol4Gu5v8u2Xxvxt5k+E7UHRpxzU8rYWLBprakrR1M5ausEyNVMZsqz+ZLj0zMePnrM5eUldT3j5MYNbty4wdoZOueEyQXkkPDFw8hWDl1ZjGQj0g3SdMQcxauh0IbNBOpJQa4KeBGtANjit8L02ew9oJjen3MSvR5T8UGxIuGSS6x8XsVQTSslXvFTQZonY7WcMz4E5vM5F90lbbtjsVhO8avjvT7uQ/v9QzGfLVgdHaGUYtfuxNepnOe2bem2EVvSUsLQs20Hgqrovcc6y2a3na6ZYegBkeWmHCFlnHXMFjWDEqNCqw1HR0ecnZ2hlOKDDz6gbVsuLi6IMXJ8dCxeHXFNP3jibosaMo2tqKzQ731IONdjq4ZEFJ+OFNDayTozJC67KxarJSmBsxUnx6fcOD7h6HjB2dkxKgUuHz1kd33Ntt+hVU/YdqyUpk9yrChhICpnMU5z6949Pvf5z/HO19/mrcvf4POf/iw3bp1xcX6fo8URi+Nj2s2G8w/vi29B5fApQAri+7CYEdQMa0+o8pzdxSU6Zk5unfEDP/Sv8/t/4I/x03//Z/nNL/889588oHMdn/+e380L9+7y1//W3+Rrb79Jc7ZidecU7wd8b/hH/+hX+PVf/ynWT3pSD6Hb4UxgvblipwzR1MQQsMZy68YNnrl9R6TOiwWLZoYqrGjxMgC0yMhi7ojJsFgsMbYiJcP12hfvGxnWpKi4uFhzeX5BhWFeOVZWYWKPHzpQNWhPShqVE1VlqRuDsxZbKeL1uni+Jfm3adAjTV+ikLa1gJbW1djiuxfCQF1VhMHTDwMPHjwU8GDoSSnjXCV1DbkMQopJeM5TdPFYD44A/aEULAOVq2RdSZGmaVgs5kQCFxfXUrs2M5pqjjWW4BPD0Eu0bhDmj7EWZZhifJ1zRfriZe/N8OTRY67Wa248c5vV0ZHUkcWfIEWNc6qsfbJXqmkGlIsEXyZRRu/XWqUlUjWrXFgGxWdunPONTSojM6+kIBbmsFaaKdp7AsApIKw0vzFlwjCgW2n/tZXa3ZiMjhqVRZ6ljaKysqeppwyaIxqDygWYLe9FAHb71H4xScSLImSUTMjkTGpGYvEKypCL510awX8tUhCdx/AHA1h8kH1qrKNlPVfTPj1Kn2MxDgUmhsbojzHu++N+l3IihX19rJJYBCg0WRu0EeAnxkgIkdqq6ZiMMWKFMJ55rTDaTp5549rtnNvv62UvFMAhSgxx9PgQMWXYQspFfj/eW7nIHxHQSnawCRzJaPFEi4EKh8wzLcbYKclQH9Z7ZFTWU4rTR4qv3/b4FwbA6LoOoNCS9wXa6OM57tnyIeup8Zz8AcYbIiM3PdKjjreJIqGVx1U9tatxVcA48YPIhcoqxXfRiWYxAQRHzo0U8glQemp4R4tQioHdqBeV/lgWDxhN3wpz11nIiqapWR1VVMZy1Cw5Oz7CLhTX/SUP79/nMiUabTlaHWFtxa5r6XPCVQalxU24bhynZwtObizRTtCt+QDWau7dXrBqDDOXsS6T1IbWe0yGRT1jbizWamZ1zcwu0Czpthva7RY1JJ7RK26frHDWkYt/Qx96Qo74EHny5IKLyw27XUc/BJS26BRYLRqev3cXo2G93chi7izRS6PQDZ4hiJtzPZ9BtKjoqQuTIfaBfgg83GyooqJ2jqQUO+W52m1Q3cDxM89x+/iEtW959OSC7XZLbQzOuALKjo17QeKzTNSN0vKZFrO+nGPxYVaThOnQgX9/vT09oRzlFLpQ03LaR/iiCriRxfzTupkYh8XE+vKKwfc0tWOxmNHMxG18GILEkRVjPmVseR1DJBNDmboUlFQWLF8SSqbWntGpWCm59sc3MTU7RcqijS6Tx48ChrLZhRD3ejdgdGqezsPB4qz0fuEZjyMmSjKDLhE5Dm1rqnpB1SxxVSPymoP7/6ON6rd75LxvEvfPkQkDaZxDJ4LP0+TcVm7f4KkR5GRqakyR2vhRhpMjKsnEr3KG2imsjpJkMrQQRJMfciSW7G9nFfNmDotT7rc9BktlV2y2A51z3LhxwjZG/HUmXDxheXSTdVhw2Q3oFKhrT8gJHTyL5YLjs1OiCty+fYvdZs2278XbJSu0dhydnHG9CXzznXcIIfNk7dF6Rqfm9BF6pbnuMjdvnfHpF+/xuc9+H5/8nZ/mmRduYyvF/fML5vOGeVPLlGk5w714l2F7yebynCePLmmsLbGXphQm+wSHPQPj8NqROynG8Ns+v72LtpqAjukzLTdbzuynzR9hFX30PtzvDalQDpkaM2PE+MpoReVs8TxK9P2ObdtKCogGVzT9sXi9kKQxf+3ffF3onmSC9+SUmVU1zWwBytAPYiY2+AGtxUl8u1lzfX1Jt9mW9SAIvbVMmLS2DF/yxBcizV+sJ28GVa53VzkW8wWr1YrZfFb0xmPU40HKBUYKyQJcHBbLqgAYE26v9bgMTpOkQ7BwBDW/U4EwgZ/qtz9BawpjQe5Fmdgp0I4cx8hOObaghWY9+QiNwwUVy2QnQix+Rozr156hoI2V9TrvVxhF2avLWpRiIoz3eAZP3E8gP3LslZdGfARNxq9zrNG6GPcmBTkRIiJpVJq6nnF8fMKu7/nw/od03nN8fFxkkpYQJY1GachWUo20NSgvEycU6JIeo5V++v2UJBCVs7ANUpzGmoKzi76YzGTEaZQq5JMk8erey7qbkSjskOl7YU3o8TWULuCMwiBmcnJpSK0iJq1y752dnbBZb1mv15ye3mA+nxe/pTTdn4dxtFpb5vO5xMLmzGI2Z7vekEuT5weRxnofSIV1GVJEO4M2EgO4XW8ZmTgxyCQ1K6FXpyATP6ckklJbi3UV3/2ZT1NVFT/30z/D9dUV89mc49UR2+2Wvm2xWjPoEhHZd+hYU1lDRUJHg0qZh4++ibp0DF1hS/YRfE3UivnJEb/3M5/hledf4s033uDNd97m0cUjzj/4FqvHNTc+mJF2G/p2S9SJbb9juVhx9/nneeXjr3NrcYzykbffe4/f/PobbPue46NTPvna6zxfHfGrHzzg3fNznn/1JZ5/6UXe+vXfwDSWdhi4fHyB83KNxxRRNjPXM5azhsFq2tijwppjNQNlCHXmxVe/B7V8kf/zJ36UH/+x/5mVUty4k7n13PO8evI8f++v/gRvffgbfM/3fp4vft8Xubp6xI/+7R9l215w7+4tQrCcn5+TY2bWJFw9ozE3xdQ9eGxlee7uXV5/5VVOjo7odx0xRi43l/i2ww+eoZdhFTkTgxdpAJ4QvSR/ZcPq+CYxKXK2dENH228JocfvWhqf8Sqy3QY0PSEFsm5IZiCaBZimXKcBa/WUYLjdtJJUVyKtU8glZUwRsgCDdV1jqwq0najzxjis0uSY6HeebrMRU/nCIh3vUZFSSakhEdUS3zs2g6O5JDCtzSNzfBysjve81pquj2x9i53PcWqUze5rlaqqyC6LT0dK5GRx1T5BSQyhVfE4QhhG/Q7lNKdnNyRdTNtyj4+ytLEsTIwGk9JclwZUm+JbVrzJrCEr8UEJKdKYBm3FI0elKAOtEShCGBopJZwqYGmp56SGiIUdrTGmMLezxOn2/ZZN26NcxNUSF+5Kcor3LbpWVLUhNSIf0wVgHhllwizQZGXQOhCJhR0jDBmZSMvek3NCaQdKmN+ytKppuKlzARSK6X8a9850uH8WVobSkArwcbCeG1O6ztEwM4+okCLZTMpm2m/GRv1wfxYVwb5+R45c6qukSKqkE3pXjKwPzUKfrpViiiKtyhLh7kOYXvcwHGAEeLQWppWqKlIK1OxrjBhEZp1KDRZiIASJ8XbGSgBCjJicsDZT14qQI1kllLYFwEnFHB9JdcvyeSbyZFytdEYbipzyO4/E/qkAhlLqeeB/Ae4g5dGP5Jz/olLqPwf+XeBReep/lnP+e+Vn/lPgzyLsnP8w5/x//xNfJEPXduMrsq+q5CJRIyqlKBdhocAqs9dlqQOtbzGqMROyJcVtZRXz2mJrI3p/pYkYYhoRktH1IpfmN6NVIuEpaUWy0euRmlUeUXT7qrh65yzhjqEAMFlBsFoK4WbG0ekRy6Mlq+UCZyw2iUQk6CDaujJJC1km7vPFHFs71l3L4D1du8NoQ2UbqqZidTIjIvm+pq5RKGqjIAz4weMJZA1eGVJWhLhjWTtUHhhIhMqga8MQerrU4mqLo8IlRWMcM1OzaObEyrCJPY8fX9BvN+RFw3LW4H1kt+u42qzZbotOOXq63QZ0z3J1Rt00JO/pfeDi6oqqa9GVIWqElVIm4jiNyYqYAwMa7wxWGWYpMxDogmfXtszckns37+AVDDlgo2CXuTSnwL7wLw2NbCjlGlJqmvhl9XQDfVi8f5TuLt83WDU2BSMNbqRCi+wk50zVzKiaGX4IrNcbYvTMZzXL5YKqduQcxK8hepmYmlHusl+8RjaQOtwQ5QUmdH8EwtV0/e4n3YKm7qdr43tkahbUU4ve2ECOFO8x7qjPezq41qPzT3n1cu/FYm7oQxQPDQzaOGw1o6oX1PUc42py1uVeStN9y1PvZPz/YIE4eE9PAxhC6RNt9+GzKedS/DVQe7ZARKjpTgnSO6ZD+GEgj1RwMnVlsRZS7klREdoNJovTfCoGRsZqVvOK2zeOqZqa+a0bxBi4ePyI9VVHu15z/rCb6OSr4xNunT3DbhNYX1yj0NhKkOyYPH3fkkJgt97wxpMnnJ0cU1c1zuhJIlNVNQ/Wl5xfrVG5pk8zUjQ8vjbMFnNWJytunJ7xhS/8Lj79qc/w6iuv4mopyBOKxazh3nO36bs1Dx8+xPvIal7zwgt3efzoQ3abK6IPYpScRCOpGKmS+8ZQWEOHU3sBgsZJxfiQW1Ku3xhKbOdBazki+wIESnNEyqCL5hPRlo9T9jEDXeiFMt3WSgyIndU4U8wjY8T7npAyVdWgtcL3HRppqkIqtNyUpgJEJz1dfiqUiQYGkzTdECagLPUBnwLRCh3SJUOfNEIkRTTYyESotPCgFDM3K6a1ez8N5xxN09BUDZWuZM9T5imZl0Y/tTYdAht79pToo1UB9p+WgCSRf6X9NGkslMZ1Yvo8DoDcwym7TPTL2F6lct7HeG5Zu2wjsovxI25UhZrvG2hJ4xg1fnKuRiAsjU19HuWioG0txtRxXyAessYUTCw5jaQzxUgxswb9kdrHB5EbxeKWn3NGG812u+H+g4GqABtGCztTKcXR0bGYpBrD6ekpDx6e8+673+Ly8oi6qkVKMQz4bthf1jmToqIPAZVSkbeCdRVHx8fkHCdWwxgtN577GAPeDwQvDdF4fQqAaznY4sqepCCFonXWZbIXxXgyIwxVZdBKGjCti5RHDlOK0YNJoVIieVmtVlxcXLHZbLg5X1JVTqZ3ByDzXsaUJJ2kqsg5M5/PsdbSdR121lDVDctZzWq1YOi25XkG5ea0fc92uwVkep8V9G1L3wswQ6bIYzTbrqeNnhu3bvLJT3wC5xzf+MabdF1XwH2R66W6ph96cpF6ap2xWoCQ6BVeKj+0ybTdBXkwBL/At5qwC3zi5c/z2S98D5/63u/muXv3OH/wgA/OH/Fs8Nx97i4PH3zA5vIJ692W2LXkEDAGHBYXNBcfnPPLmy2vvf46n//c5zl78XlOnrnDb73xJrPZkn/pY6/xjTfe4P3336PLifsPH/BdH3uV117/OE8211x0G0LXU0Gh4WeqWcWyarBoLvuO9RCYz5fEbsULz73I7/p9n2fTG372//kpvvXW/4uOD7jKc25+8uO89tnP8eZbD/i1t97iD/zg9/KlL/0RfJf5h//wH/D+e++yeXLBS8/9IC/d/QQfvv0EVQVWJytizAxDYDabM3eK5559jpdefAGnDQ/u3+fq4gkXjy/EWybJIEFAbIVRshY3swpjNV3n2bU9KWs27QNytri6KU1WxlUz5ktDtdsy04bGWipboYwmGkefa4KZkd2cNgT6focPAwrDbDYjhlQiiEWuE0JEW0OlFMpW1E2Na2ZkrcUbR2VMVWGVZuhaBh+JCVzdkILfy9aS+DIYI41dKmlMIzs8lcZ2GEQ2N4K3I9PLaSf+dTHQb7cEH+h7YXeMCRJGCXXfB49GmJ8qz0hZ4/ueoevI5GLcLHXNbDbDOZGgd11HDBEM9ENfmlrKoGHcb0e2pAwMlJL6K2YmM1+ApEQqbJRM24cQJIFD5YmBTjHbHONGheVcIJrS8I+T9VTM3VNKaKQex4zyBmnuY0wMXgAsbTOL2YyZm5H6XCKXA/XMUBnNaWF5PR3BPYIIUj/rAp4oXTzlhFJHygpXBls6JbTJkjoTBSQ+BMZlu1PTAE/qCUklMWNSZc6E4PcL8ljR5H19LQu1LlDyeFwGbfdsy6dmCap4dkxpI7YATbJXTn4geT8EESbIwZBxfALjPr7fO0eg7bCemICZg/M6/rjSGlukRspKn2YoiaF+QCMSMOscTgEpECuFbTKzPEpzIspAVdUymClJJYe9x7hHjm3AOOj5zvDFPxsDIwD/Sc75l5VSK+CXlFI/Ub733+Sc/6vDJyulvgv4E8DvAO4CP6mUej2PmZXf4ZHiWAiDFEBmKiT2UyA9oZRZaUQUNTaOQJnpiq5GJrNKgbWOymqa2rBoJGoRUxGVJWVdYvOK6VlO6BzRBCwiA4k5QhYX4pyV0G7HSREyGRa2hxR4KWU8GWUss3nDaj6jmdUslzPmxwtsbTFVIuYNsRdDRZ1hUJq+TFnVaMCjLU0zx8ZI0hrTeeq6pnaOSjvatuXJWhFzxCiLq6QoCsGgYrkCs8HnjMcStZNiuO2pVGIg0VuIlabLEnO12W65fnKFDolbqxOeObmJX67oVeJyt+bi4oqh3XG8WlLXc7puYDvrMEbiWGOGG2fHpDhw3Q6yiRhHBLrNBu97qqbCzWuyUUSVSzynIg4DXddRGY2yhi4rmgB1VCgr2r7LdgNWc3bjjPUNzxAGwroleiQmCJnQqbxnIqhcRHFJFw2ebLBhZC7ItSsTOLNvviYK2EFRPy4qOUFKoQAKMsEai3pX17iqpu8HttsdMUZWiznzWYWrLCl6Bt8RghgCNZUDCs2sTPNyVpNBLTmTQpgmYBOAMTYp4zEWiD0fZFvHKA3AiNzHGIuh3/79jMc90ckK28P7ntB5PCXZw+wXnpENIeC7XPeDjwwhErKwL2zV0MxXzJZHNIsV1tSSSlA8KUaAcQ9a6IOv0/7rjJxnxgU6MzVKgNKj/Gu/aYjcAKIRgFApmfJLlKumqms5H6kjJpkQSREma6izRrwfVMSqgFMRVyik2hpcLX4FtdMsbeZ4ljBmRzd42hhIOEgattDHAbeyHNuGIw112HJ7ZdCuBpVJoccoQ78b6NoO37VoBe16zWIx5/TmHbabDVcXF7RdKyCMrdi1mRvPfAyl5xg75+VXXuXTn/luXrh3m0999+ucHC1wOpLxRCoUmaPFjI+/8jFW85qvv2m4f/9DfDdwerLk7jO3efDBezw+fyzXXQEXxun2eD+EAqRNm2UBgPPY4I8AXAGYUWPDlH/bxjUCUr7IH7JCDJ703jhsutbJJbFKrpWRXZAoOksPwRwwkRgn1QLkhWEQXyQlEgs7TvELhV4dsECMkbQfYywh+BLvKeckFgZUbS1NM8M3HSkFkSgg022tZO1VSrNZbAizwMnZ2cSkGqn4h3/XozxD7+UN47ka9anTeT34kzJpqayb/EmmRI8COOoRbBqHBOrbS3oOi5qPSjqlmogC7Fg9RbmOx2mNUH2Fxirr6BjjmrIkJNX1XrIW8z5V6OnMECArjJXCfzJvzRLXdwhmxrIujkML7SpJhClTQ4UqXkh6z37JxQskiaeNspqqqou0RQr8YRB2Ttt5jLMTY9M5h+47Hj8+Zz5fspgvqesilSy+RCklRo5mTrmYtBmquuHWnTt4P1A1tbzvUZKFeHRoFGRhgmq1nzSKz8i4D+UDAFqX5kCYRaFc32MtAGryF5nuu0Ktl2vQifme0qQUGCMQm6ZBqWsuLy9ZLI8Yi+EYAv7g2hlp1a6S6ziEME0Xm6ZhNhf/m6Zp5BpWivlyQVUvUKah6QY5hjIhX6+v2I0JU8jAiDJJVSqzmje8+PKLVLXjV3/tq5w/OmfeNHRtJISBNgmLrhIUU+JVrRKZupFdpfcZnTuyjehK4Zxh2ypOlVYAACAASURBVO5YzW/wqU99kT/yAz/Ma594jcfDI372y7/AG2+/Sd+1rFYr7p7e4GN3nuWb33yTi/UlxiT8bovuOhyaerbEp8jjqwv+4c/+HP/fV36eV557ntdefo1nn3uOG80R2/MLfvaXvsLD83OssXz47nu8/sKLfOzjr3P1K79C6gK1qcihQ6tMjgGbHWhDFxKdT+KfFhru3fmd/NE/9Md54WM3+LG/+7d49MavYfs1xjTMVy9z98Xv48Gu4tcf/mO++w9+F1/6N77EN7/+DX7i7/0kv/bLv8rjD+/TLTXrJ0948ZmXee/Zt3nvw2+Q4gJrG2CLIvL83bu8eO8e2Qfe/eBbPH7wSJjTWVJ7gg90Q8foMxUz1Msls/kCY43EaGpJolkuTzg5ucHq5Ezux1LD9xePURcPacSKEKMiymqyq4luhjcNQVc0MbHdaXa7Nf3Q42LCaMWsaQghMPQDJiVmbi5rqbNoayZPh5HpMHhP76OcX+fQszlh6OmDL1IuYTekLMwyVa51Y4XZmUtjK/e8TJIr66Y11DlHVVe4WUPfdcShxwfPeh3FP2vWACIRGYGMslvhYwASysjak3OavMVyklQ9Vwx2BbgWM09rncgHp3qu3PN5HOqUO6tI5VRhH4ZSVwpDy5CR92ZThS1ytpQlgYdiDplVGTaAHHuRMOjCzpN61pehsgAlh/9ZY5jNGpRZMsPRpwofWnJWeB+JPhKGSNY9OSm6+Y6hH54e0KUsZsG+JyWPtglUwlUDRlu0MUVWZ4rPhEZF8TeU5VEahaQiuYAGVhcZIqAYWaVlCFZk4sbKcD2lhBZ3VAHTUy4G2Pu9VRc5QFYCAMk1P+24Zc9RE/BV+PrT91MWIHM0I80FpMnspbDYMgyaPt8y/ChGpvv64mnQYtzzD9kYMaVpoJBjZChsb/EOHJlEIh+JWUFSIl/Upb5QGlsZYWVo8cjIOlNVtQAyWRiqIkkfXUNVGcQAha2jjZkSoL7d458KYOScPwQ+LF+vlVJfA577J/zIl4C/kXPugbeVUm8CXwB+7p/yOnt9kS6TJzVq2Z8+2SBvLBWHbYmgyfKm8xhp5Rj1KNZa6qaiqa1EJhrDkEZajzivalOSFCbtE8XcMRNyMTLECNpoLNMkHCbtcShmMlpTolPn3Dw95WhZphe1w8wsQ/L4MDCkKJPgnElJEU0FusHYBmNqcgz4IeF9LGZbDd6UDGOj6b3n7bc/ILyXcbOG46MTbt26BRi0OQMCijQ5yGIcUJNzpE1XBLyYnwVp+C2KOQ3NvGZlFiUqUHM5dFxd9PjQ4/1AinB2esrx8QlN3eBD4upqzfHxEm0dpqrZ9R3f/OY7/NZb36L1mWZWE8ikYWDoOlCKppmjKo2tK+qmomtbWsBZx0obBiQ7Wq8HXFLUdoZxmq7r2HY9syFwc3VM9J4n4ZwOj48yZdR2RDzLzVrQPbn/5WYRTwdZ1CbtvRqLpsNYJlW03BGtk2RkK0GNjXDW6fseUNRVg7ECQHV9z/VmA8BqtWQ+qzFGFY1vx+A7IJdNUhZ77z3D4Iv2UnSaxsltmlKkbftCHTQcH5/QdS27XTtN4kYzvejjnr4XyrGX9BWJcDQ83ahIxBZKo60rE1W5H5UyhOCF3WPMNDWdzJHKYuf9wOADAZl4oIt0pJnTzJc4NxOQBykYtBLwL6VMjqlMEsvNV8CInEaqunyUUsCX58jRyx9JkPCcMrZsUjlFEkZiN1PxF9GquB9rQhQPkRCkQRI0WxZ8qw11U1E1DuugshmbPLb4Y1S1I2wjc6dxOaG7HbMj2dDWmytcztw8nhGDRmXDMAw8vv8hlYvE/orL8w/QRrFYzYnZkLOHmLDW0FQaNW8Yup623TD0LV27ZbfbAlCdHFPNl+hqgUmK5dEpd559mTvPvMCnP/N5PvfZVzlaNXKd6kjMnURy4SRKjsTxvGb+4nOE9ophc8E6B3IwvPKxF7hxesyP//hPcnV1LVIoM+W9PAU8HBp5jpOEQ1+M8draf//p3/GUpEEpqtpOjej4szHHp37XU/tAliaRrFGIJjkoSZwxWguTzLnp+vHDQI4Sw22Unq41o7VMUcp1N/kjaPFWOIwSzgVgJCdiGKjciuOjI/quFR+FWTP5OgAYit50nuiqjsVisf/9BaA4NObdyyzUU+fv8DwdphCNxwWgYnjqeVrrUogIUGgOCpRRRpILG+Pwcfg6+325NP8FrJ2mQelpH4QQi29BYQ1MaSMpTXv69PmXYcR4rlBqyo6ffHhKQpAtx6NQpDJBUgj7ww+DmCWWc9FHj3biuO8L6KKNQRtD7Pup6Ew57n9nyihTsLrS3Mu6JsaBNiMGjkZc6Y+Pj7B2R98NtEoa25PTU7quo+s6aTJypqpLBGe53lOOVM1MfALKabfWYgvwbJTovK1zhGHAWkOMMl1UCGA+XQNaY5QWeYbem1VbYyRN7YAhlwqjKeenDdO12hu45bGqLvXWfD7n5OSER48e8+DBA5arFUqpIk3JEttdrpWUZc9FyX7WNI3cVz5wfXWFAjqjQIOtarl+CgBTVWK2WdcVzjlSCnRdR9u2Aow4RzObCdBD5uj0hNViKelJjx6RkxxL0zSQsrAB2PvykDO99wQDulbEpDHM8bmF2DOzSzbXlxzNV/wrf+D7+VN//M9z9+RFfvQnfpwf++kfY9eLIfNqtaI5PeHtD98jR89m6FEx8cyNm1yjueh7sjWY2tFuehSGe6tbXA9bPrz/kBhh4WYsP3nMu/ff5eH5IxbK4pLh0bfe5ZvPvcXJ6oSu79E+U9mKoGDXXUtzbhyt9+x8xpgZR87y+sef54/92z/Iveef4a/+T3+ZX/rFf8Dl7j1UgqU95bXnX+GkWfC13/xlvviJY/7kn/5+Lq42/P2f+HF+6Rd+Cr+Gs/kpiyrz3ltv84XP/R5ee/kejx5+CxUaMgatEvP5nJvHp6iYePjBh5x/cJ9u1+K0Yd7MmM1ndEM/jR+6rpOo2b5Db9ZkpVmvWxbLJbdu3+HFFz9GXTd0g0Sheh/oup5+s6Hue1JoIXlUDuJzZCuC3THYimxrkhGD2/liwWAN3Xq7l9YZjU6ldkFq/BEQzkr2+8EPdD4SIzi0DCusEwlWhoGdgLHWirllzvvIYWOn/UvMJjMhiBxRAG8BFJxzErOdE8PQsd1tJEY1CntNGSuy3rFOixGjZZiZkvhgxNjvwWpUSYdL5AS2gNBKa5yriudDFmlDWcdDDBNbQHor8SQQqexe+iH3sZ4aYKUEdBVwWAYLU72IDNNMkTprrSdAgpIQp8YroSRTiYyiDN6MKlITYTM4V3Fy+gz1XONpGUIHMZFDxrcDQ9sR0pYYB6yWcx9CIKaAsYWhGSL9MOBDj1IRbRLRd+QYUdrgKoc2BozBWEurrQzpbGHx5/LZFqNRYzS1McQokjVVmFwja24CrQqLOAUBLEZAGQrzYASci0cjce8xF3yJylam+DjK8EKA+9GPQk2vhR79IlQ5zo8MMoqURP4+7jliyJzLz4+soFFOOIUPjHKiAjqNrLzJJHuUcag9sDwyp1IWoH4og1JDhGxElpQpvVQqkbFFbl+CD+LIPiy1fsluH7k8T3mifbvHP5cHhlLqJeAzwM8Dvwf4D5RSfwr4CsLSuEDAjS8f/Nh7/JMBD2BvIGK0RX200CkTkVy8C6biQguVhRH1KQwIP/hCbRVkc75ccOP0lKYxpNDR9T27bkvEYJs5dVMx+J6YM5qEygFFFMdea5jNj0jaiHtsiGQrkU6CiAngQYpUxjGra+azhuXcUlfiMeGMlYxwa8hJI3GXjowmR1lQrVIoLAoLGHI2+L5nu+2oqg5lNEMM7NoOlcFEwa7azhOqmrM7z3HrmWdpGie6UT0jx46UvSyqVlC7VHRIWFc0R4VmGqNkNEcpoKpZg0xUIz55UoxYXZf3nTDaEIOnLTejVhGnE9aCrRTKVJycLDlazQibgfm8xs5mXGe4LGjscrXi9OYZxzfOaOY115eXXDw+Jwyeup6x8Z6rbseQLhl2PXnTglV4A75v4fKCO80dXrr1LDrB/Yfn+NaL2WoW0yGjZMFKpfgEyjTKTJOmmHJx00WmuZPWbTTayQf/Jj/j0yAgQImiyyiUtdSzOdpanlxcsGtbqpIwUFWuNBDi6pvyOE0T0Mz7UVucJkS9aRpM5SbKbtvKpPHo6Ii7d+9S13WRAPhp8x7R9jRtesVISeeJtr6fzJa/52K2l8BVUjCK71Eu0wZbgIZRPyfILkEKyqxk8x18xKcMyqJNhW0WVLMlrpmhbVVQ5DTxLMbzLX4yjNDr1EjmsWEan5r3xk0UJDyz14qPvdjISJEfEtPHEGXakBWkpElJ06co08tYABOlSlMmG4C2BmUV2mZ09qjQQxhk4tQ09NlDTtxYLnn9+ef43i9+jm234cGjC3K2dH3kzW+8w8XVhnpmePToMd945xLnDDF5ZvMZy5xROtFvd2TrqO0CFGyHjq7b4b1nsVjyzXfe4cUXX+AP/9C/Cs2Ktx9e82RjGULmk9/1XXzhd/8ePv6JT7JanXKyEpYJSKOekkxGUvJYU6FyZrO+4v333+Hxg/dxKlLriGocn//9XyQrw1e/+lXOz8+JfULlp31Jxk3yo9P7nBKb7WZqgL7dY4pxPGim5XcqtFn8NqD62309FQXTt0bq6AhsyNcxBEZpi7UaVYy3UvRTMzQC3lrtN/ZpWl3e03hMKSeauiZFzW69pt+1zJ+tOTk6Yn11RUqRuq4JpYCVqbgUidba4hov4KZ8PIWmWuLixG17D0wAT+2DH30cnquROTCuA5OR1zgpHzGRj3w26iOfw/j1xIpIo752BB1Gpo0kaU1pReX7KUVcdegvYaaJzrg2jcwWrUUKOv7+RD5YxxDJg9mz2qbjKlMqdfBezATOStNuiufR5NlQ/p/osUVSN/7+PEbhkTFZCi7xSiq+QD6gssiJbCURzEJbl7SpzWbDcrmkrus9+JLSwVpb5IxK9nUtvf5TLJscoqQh9B05RcIgE0UQsLiuaqzT0lCVe0mAHEneISVCGoqHkjQQSo/pUhTQK0Hex9iSNVHv47dHQKmqapx1WFszDIG2bUkZjo6OhOZe2EPee7mniyeO1lLk13VD0zT4wRNT5OjoCGMUg/dUlaPzgW1/ibM9IaRCz5bkF2MMVVVNjIy6mVFVlTR/VnHr1k0unzzhQTG4tFrTlyQYcqZ2FUerOdYY+q4TSr3RuOUCHWHYgVEVhg5tDe02kqPlS3/kS/z7f/o/5s7Ri/yl//Kv8FNf/TKXPGG3vQYfSW0ntHqrWF9fomPg5nzJ6eqE7dUV7TDQtS33jm9i5yuuH11grrc4Z8gVDJ3n5Zde5cp7vvbONzhZLPFhS992DLHjwYP7nN6+w2J1RPdkQxsyyWncbEZtFDlm1KzCOIcdHK+9+Ar/3p/9c7iThr/+d/8Kv/CbP83V9j5KeXRVsxl6vvXhG3T+ER9+8Cavv/y7WOH4O//HT/Jbv/pr4Fvm1ZylaTiazejWW3x3we/4xGu8+eY3WG+EEatSZOYcset5cr3h4uEjUu+ZGcesbnDWkoZApQzUDV3fU1cSG77tOvqra7R2rFbHvPraa9y6dQvvPQ8fPuDxxQXbbSeysqgwsWV9+QQbByqjMUUK2KeWTml6pfFay15ZNdR1jbOWxWpJGDxdqblunN3Ax8TF5SX94FkajXEWnyJt1zIEkVw5Y7HKYI2ZmAQZBcZitMIah8+ZlCHkhIoZp10Z7IjXQdSStDOaBNd1PZnc+mGg7VqudhuMMdRVBVEGVaZEiIrXRsKoOO0F4/B9al6R9ULAh4wr+4lMt5EmvICY2ow9lNR2kjpiSFFYepAmwAQSIY5DWlvYtCXtjkw2BqUhJvE2cQg7wZR1fQLDy7B33C9THA25KSBkMSnOIo0UTzczEsFwlWN1NEe5OagkEpCoST6RvMfHFu9blIbZTOoEpRWz5ZwhZNrWkw0Yb0ixJ6We6AdSGOQ8BENp1QU4KhJpZQQ8MEaitY2xxGyIXpGMJhU2TwihrHXFeLOwsCkSE2vMPuY7S00fU5BaV5cEGHW4n1MGB8VLLu/73LGGjTFNYMgIEo1yw6yRqNaopj2GUt+PAyDG35cFYFaj9kQpYXUxXmcHzAclQIsCGQJPoJXazwxRZRCm5KLU+35CTD7ll8UkZqBZBVCJKhuqEKfhySTvT/tABDKT95FItfOUUvjtHv/MAIZSagn8beA/yjlfK6X+O+AvIO/7LwD/NfBn/jl+358D/hwAd4V2ZbT9SGGrpHgulMCcCjKjRIGlCDJZUSMdSIzLXFlAjLXMZjNu3LzNc88+y/LIoejohp71bse27fEh4WPi2M2onMMaifRzRlGXqKpBH4FtyoRcsn81ptDRdTEsTDgji9fMGY6qRGo3tJuWoe3p8SQdSEZujHrWlMW5ZeiE/RBtIhhPTgrnKoLqRYKw21HVNb4Y5Ohyfoy1zJsZuZlTGSfonBWA5MOrD7D0nB1VqFrAlpATWRuUtgy9R+Mwxk2gkcsKl4UWp1PCkrBkSJJ373PCN0Jh25ukZQwwqxxK5aLrSjgDR4s5x8cr3n/0Lfr5nLMbd5hZI6BOXXN2coOjkxOqqhaX8q4vsWaGEBNhCMQ+MKAYnMa2GR0VdjajHVruXz7hZr3g5t07XK2OuVzviLlj6P2kH0YrnC5UJa2F41SK1jFWNZEm19uxOZ60+LCXbVCQTiXAhjaGkAMxZ1xTUc3mJK1Zr9dcbzZklTlerJgt5NoZUiClIJS6GMFo2TD0XtYRc8Zoh60alHHkBCH6PUI/0doNu92Otm3l81BPawLNGGOVM04b7IgKl1VI6I4FYS3nQRuZGsgUrLz/MqEDCMGTkkcpiQHrgy9gnCZEMbTKWRgcxtU08yWz+ZKqmYOxMg0lTRvbiDooPQIIlOUkM8ZUTXRPOfjJmFeATCkockmksKUonyQAZQgQQxJaVB5lNJlBMRXb1lqZ1g8G02lCylhbi17ParRKRN8T2i2qGASPRXeKkWVdc9Is+PD9B5xvHrPebTHO0afA0b0ZN1494a233yV2kYcPL6irBbdvPwuu4fy6Ff16jMxmipAEJIsJ1usdq+Mjjs9usul7qtURdr5iFxr6wfPa65/luXu3+fz3fJqPv/4K89m8THFzaYNF7mb1nJQSVoHN4gvx/rfe5te++ks4a7h96wZXKoOxvPryS1xcbYDMbrcjDWkE3Q/XbkYp0uEj50y72+w30O+89j9lojhSE8ep9fgYwbbxOR8FN0p1MIFfk7yQEb9SJJUIMQIyjcsJog/iIG9KVn0WxkZO4iEhBVicfAHGta5yjhQ8m/Wa66tLrDHcOjvleLngQwVJiSzNuEoMSZMY55oRTJflmdG3xVo3vTet1RT/mjLFsPWjzIxRj33gbj6dD5FJjOfoUCK2Bx+YJmyj+XVWB1HkB+d3XG/G19sXSUjRJiWNgOFjjl55hZiLt4YSivYhMDt+rsYMcg3tUajC6niaZaKtm9a7EbQcwYrRHyKGgC6suZgjKQowLK/jRJNb3ou1Iv0bWSRlGEpSpb7QElepChPDWoMqhqOHqTXGWZwzzJsFXTew27SkBGdnZ9iqhsEXTyCRn1pt9gACyBQ1CqBSVRUnRytMzpweH9E4W85zIkdPyqFI3AacqeW9MlLa5X0669C2EmltYc3VzpVaCbIez6kFMtZK8ZgSDIOf2BNkCjhhSjM257nnZDhwcXGJtY71Zo2xp8zn84kNKKCVTG4BchnuDMPA4HuUQiJNV0uaWS3FvfdkJRHYzjmhkivxpholKMYZ6saJHCgnjuYrzk6OeeONf8xuc70HtnKk64p5Owk7KJIpCSYa+hDJvXgb9X1EWYetZTpJrvn+f/kP82/98J/h+PgOf+m//ct8/Y03OKotQzCcbzcMObJNPdfdhoWr8H0PKpKPPbk2PLx6wtB7+nXLdXOJrRui1rQqETYtVQJ3dht3suKbX3+bi7fe42S+kvq1dvjYcvnkEbPFnFc//nHCZcsuDKg6s73e4aqGSjuSW2Bo+OIXfh9/4od+mJunz/G//V9/h6/+4i+zffgeZj3QpAWrs8T8psbbc75x8QE3XniZrz24zb/z5/9H1o/+MbvrBywXC5rKUOmAVZbt+oqvv/kbfO5z38ftW8/Qdu9hNFTVETNX43cd15dXdOsdTksdV9f1tI5HMj6VuHcrfgM5aGJUzBZL7r3wMrfu3GUYOj744D3Oz++zXm8FcM4GqysWtaE5PUX5rozyNKFv8V1LVAqfIn2Q+EXvPSkkUlUzX9QYp0k7seE/OjmmrmcobTl/8pjNeodxNavjJYujJWgxEfQ+TnJjktQFfYgFSFPUTU2Mcg1ro4kBGTQW8EGNQDmayhY2Shn+9V3Lbrdl17WkFGSwOVuQfGC73RJTYuh7krWYKqKsZb+aK5yrhQnhh2n9FemboSr3pyoxragCxprSWKP3yzKy3h0CzeIYxFQDQ5T0h6QYiUvj9HtirMXyf4rYJPWUHM9Yyo0NdgF/VWEYjPU3oFLxpzCjfNIQfPF5IWGNxlRW1sukJe0jK3zoiKknZjFuxRgWRytsveD0RqTdDvgwEGMg+Bbfb/HtFdn3kjAXE/3g8aEARCkToidmWZuawi7OSuOHQPARnWUN8yGQVMbFmZyvmCdGyrjHhii1fZpoB2UQMNYkKomfl0wUC5tiHAyMht/7fT2Vrye5egE0OAD4D/CEqV8G6U3G48j56SHMU/XAt9n3xz5iYkgeMEHFK3DPABkBPB33r4cWK4acxj6+9E9ETCry/qzE3ytb6e9hYoAIliLM+UwWvP2gRvjo458JwFBKOQS8+Gs5579T3tCDg+//D8D/Xv76PvD8wY/fK//21CPn/CPAjwCo36my7WyhOqnpwxqRrP0JHg0EiwZHF4bLNJVlKgyVEvZFPWvQxnDdtvTJU1UKYxtWRwtWx+MEfqRSjhm5ou1tmhpTL9nlii5k2t2OkFpBwq0tUy9wVUVVVRMa7AwwXKOJVFahG1loVF2hnMPN58wWc+qmRodI6nt0yvQ50pFgSCzqinN7n77EOTWzGmcMCQNB0D2Sxmqoa4NOHbvNYzY+EVPk8fYBlfXYOKOqj1jOK7I2DD7RdwOmFYQzJ0g6kwxgrcgldEAFjyuFdaWkkCAK+mdcLMW4Etf0UrhqnUlKFd1xYlYbzk6WnJ4sCb6n67b4tqdtWzbbHRfX1xxdnHJ8dkoisdusabfbkgahaLsBH4PkNFcOu3A4o1FNTTSKkLZsr7esFluOZwvOTk9J+YKh96KTLwkFsRSuWpx9ZKKGMC8SGaVNaXrGBqiY/kwTQw1FDziir9oxZS/bymGbmozmcnPN9XpNM2+YzxpcUzPEIEyWvi36xYjWCutGWt8oSREpx1ici/VARpk8pTJYY/B+4MMPP2C329H3fWkITUE9JXfbKEmPIBeWTTF3U2QxUTqghY+/ezTje6pBEk71wWItbBQ1dbWSuhJDJmQFymJtPRl3Vo0Yd1Ic7xUKZZjMEMn5KcRY/mS6l6dWOO+/rbSYGu4NVFXZADlYiPeLrkSqyUahcyzNjTBT6roWEMM4go8MvUfFhHMV9WyGrgzaIg7pbYuO0nzu2pYclWz4PrF5dI4fLrgOW5RTWDdnebzk1vN3WR4fk3WgHVquNltShLYbBAgCZnVDs6zRSjNEKS7sbMlLr9+iWSyomobf/6nPgNL83K/8BrPFXV585bO89vFXePnVZ7h9a8HMZUK4wiqH0TUq13Juxil/1lidIUfJlt9tcCozrzQmeZLvSIPiK1/+Ob71/gM262us1QiGtd/EDhkBv40VoJhMJL8ThDFSLHUZSUyNirVj/wSU4qn8OW7NBdLeXyMj7YbxCfv7FwrrQRdTxyDgXRiKE3oBKsciwlVVSWXIjBHFY8ylTM5lSn91ccHV5RVx8NRNw/bqGhUSvutpZjNqYwUs05paK3QWoKyuHcF5mrreX6MHAI4uvjwyhdifvUPAYpyOH9JGx/+12ksIEnt2RiwsI3MAzo4/a1QBzA4KhMPP9JA58DSIsWeKTPnvZRewxorJWJn8ZFV01WU9zbmY/UbIOYnuGsTA2EpzLWuP3Nf9bj3JbLSWK2s0p8w5FzfzsjaWdTwW81lTAJNDQESKKUqhJACKzlJsKyMym/H1DaCMliSsFBlCP2nAEwmjbQENCwDtA+v1mrppmDWNFP7aiHEtYyEZUWaUIslxz5sGc/MWp8cnzBqZKocoEbNaa3QskignEiUF9Fr8LkxhTlhrmS3maCM+CTFB3dTkEWrKkpCiS9SeVuP0bb/YjtdhCAMpZbz3aA1N03Dz5k1yhvPzx3Rdy3ptpXjVe5ZLiKEc906GCEEkeov5oqwNDmNtGchU3Lp9h/V6w/n5I1THVOvFIIDRfD6TvdVZhhgwzrA8WjF0PXHwzJuZ7F8h0FS1JFBkYfvs2na/BhWWqTIK8QnPVE7WiBhgsbzBH/pD/xqnJ/f4G3/zx/jyV36BG0fHDOsdjx/dJ3Y7tNX4ELjetbRaSUKBlWS2MV1FGceuv2C73hGutvgh4FE83q156Zm7PH/vedbvPmDz3gPuLE94fH2Fdg47rxl2LddXFzw5f8TLL77C+2++y6NuTZd7ojVEq8E65ssTvvczX+SP/sEvMXOZH/nv/wt+85038bb9/6l7k1/btuu87zerVe29T3WLV/GxFlVLlKIqsgzHkZwAAWLEzQBJKw0jyH+QvrvqBQECpGMgQRJECOBG4MhAGrYcK7JsSqJIihTJ90i+6pbn7GpVs0pjzLXPvpekrTQCKPvh4N177jm7WMWcY3zjK4hmgrri6uJT/PqvfYpnh/f42nvf4/Hbb/L3/8v/gjy8xX/zu/8dd5/8AGc02RpimolVwMcKpTP74ciHnzzjjbce8+HTXiAaVAAAIABJREFU77DdDxjV4puKkZF+EFagMpkxQygxnpurS+Z5ph8GQhbZ8zFMJK3o1msev/k2l9c3bLd7Pvzw+7x4/iHzPBCDx2hHU61wxohZpNFEpDFSMeCnyBhlWfQpkshcrjucrRkPE0M/EOLMat3i6or+2PP06TPeevNTvP3226AUz1++YHd3x8Xlhgc3NxinmeeAnyPBB3JhYXrr2CdJMnTO0nVrMpE5ijl18IEYxJZZa1VSVmTNcq46xVLO88TQ98zTBBlhZ1XCLrJFdtIPE95HbAFLNUsMZT7d00435PKcOZ/5SJFPLKqco4B+ShVmiC2G2MVgNCmSWmQCpR5I+cQOWJgmSgmLSuWMisXYOslXLgMhaxTEjM+eyooZ5eldp7P9ZRkIstzX9wlyrrBBUy4eH8saxGK2LqlEIYBJBo0u8acy2IklxdDWNdppXKNYbcr+TyQGkSApP0KSwdo0e8ZxFl+jGBmGgTl45nkmRAE+/exFtuJFhiY7VjGrtkbYYKVeBCVAeRmCicwo3vvvLfKOsr/es1U49Zwhgk3mVL/kLOtIjFG8Ypw77bvnTD6jNUlpYg5nDHFJmVn27cUgX9gM8gJKLQPY+69l4HNaKpe6QqtiaBrvycxwqrkXadB5CZhSSREpAPoCyJCLFF+Z+1cpLxpTIkfKXp0Kl1b+y6+WQj/y8VdJIVHAfw98I+f8u2fffyuLPwbA3wP+vPz5HwH/o1LqdxETz58A/ujf/CJwrsXKOZ/iVKUxKc1HuSnQGqsgm6K0SgnKFM1ay2Z9Qd02PHz8iMdvvEHTdYyz59gPvNgO5OzR5FMcj7UaZ3TxTdGnL21HlDnQT5NoKIOHJLTYtu3E1AtISjOOmbEUk5WGy2pmbTIXFzV1JVNo263RdUMwQk931tEYS4VE9niV6KNn2B1IfmB/+5yhD/gYyXSFtrS46/cQphIXCDerB6yuV2xjj7GaT332ba4ua642NZerWmiW08x2d2Q+9ITtIABF0xCdxiuFj5mkMkFlkk44IklD1FLYxGBQyWAUmByL5jqQsyCnzgmCnIPcWFVl2Ww6Vl3D06cveDJOuGzF7GmcmVJi8DOHY0/WijBNRO9lwVOSxNHqilQ5puAZ/MgUAtUsEp6matmNI/b5C67feZOLdsVzc8ecPDFHbIlqimRIkYWap8rNlwHUORsjlgamTJFQmBJliAoldEO0ZbqYDFpbY+oGnzN32x2HoxRn7botzUpinsSsM3p/b4iohI699PEgMZkpF/WX0uWazzS1paol97vvpYCQjXfG6HtdXgjhtLERFYtVxDn9W6GLYaopzs9zYV8sMWH33hhyb+rSdBQPDWVRZ1GOCknxiKXxNtZhK2EvNN0KVzdoawkZiSREoYQY80qyQOk/T80dJ0BSnX5AmxOEQtGjnBB/Y+6lMbCg1PcN97JRC22zSBa0ZMIvcgFRyxZ6utbY2qGdxTqLIH2BHBbDPV3MgR1v3jzkc2/ekOuBh6bl+vFDrt54TK4rnu33fO87HzAehfF0dfGA3XbkuB94ePNmaaoCczb4OVBlQ101qMoxomjqNamqmU1L03V8/o13+dJP/jt85tM/zcOHF7RNQKcjKiVaqyBHxNTGwKJxVRmlyjoKNE3FZ999h1p5PvrwB3z0g/e5vdtyHGfudgNPX+4wSlO7itF71IIecN/gnthKP7xfyFTmxy71SiY1oQDTWnwmijHFSRZQgP5XQJNCcn/l2ZafVeW8LzAHgCmOfRoDWRrdtulwdsVw3DKOI0uShUyjFgPdWGRxqqwh4k9w+/w5x8OBOM/CmJtnnj95xnwxojOs25a6a4vxqBbzNiPX3X59hBU8fvzwdAyXiL7T5V6KiRCRZCzugYvX2RHnExOW43JejGS1pMJJIZqXmVspUsr9FWM8FQnn98q5jIRybBaGjC4TI3npJcK13MNKn9h+lNcWCq0UvsvkSi9TQCWeQPIG89lnTqTkxZQyyB54ki6Fe5NVa+3pfNkCdCg0OYos7qxWOgEYmWJ2vAC1wLJYpiS/kE7ykSWppRgOU45LECM3V8nU1RrLoT+yvdvSdjPr9ZpV2xK9JE1RZJfWGqY0kVUiV5GmrmmqmspIk+KKTj3EyFzXUthlqKqK9XpNV1elPhIj1egDtHIFxCgpCllF2ddYPpNMTcXo+35imHMmx1xis0NZJxSzn1mApGkaiVEo65eXF1KkGiVGwtGfwK0YE+M8Y7SY7E29+GVpJDmhasXPKcaEdY5uvUZZw25/xzyPci36QAiRtm3pug7nbDF8Fj25a2ratma325FioqlqmTZa2RvnaTo1GDnn4m0kHmBGW1Sg+CMpnPZMIaFtw2//zn/IT//cL/Mv/uVf8H/+wR/x4FNv8q1v/Bkv7z6m93ucUpgAwzyTjWHUUuBfr65Y147OVCTt2KYBbzRzTkzjJF941tfXfOnXfpm3Hr3F97/yNcx+xK1aViqzHwbiNGKsIcwT3/vmt/n8Oz9Bc3NNfvYxx+2WbAx9Sjx89Jhf/qW/wd/7u/8Z/Z3nH/4P/y1f+8Y/wbYXDGNkqjTZWd75pS/w1uff5pM//gFp7nj3U1+k1on3vvr76Gdf4dJF5mjotz1TNZAvHFlrVDTo3QH1ve/whS9+lps3L9mPPbWrwRjm6BnnmXGeiSowK4l6rqoK58VPLSrYHXt8Tuja0nQtXXdBu1ox+cDdy5fsD3uOxwPGRFKcSd6zqjtqZ+inQJ88xjoqZ0jjzIgX83lXPFa0YrVe01Udh9xLTRQm5mCxdYWZZp4+e06ImTfffIuLzSXHvqcfB54++YSYAqtNh7UyELPKiK9cVqiYJSEHacSMc2AcOSyLpMgQFyboFIYC9MkwBKA/Hhn6nmnoBVithOW5WnV0TUucxNsnJoF9tbavsM8pAEVOEZ1z2YMUmRKnWvYAYyWqNCaNSSIzy8ZgbcUSUwqLz8X9wEEA5ChDneITstRAsLBcJf3OyPSD6APRe6INaKswWhjfRhWDyrzIFaSJDcWz52x3khSTvACdwubNOZByIASYZ0syCpPlS2eDztKXaW3JKZOyMPqmEIjKyNAvaoypihw+i09G1WJpqYwhJ4UPkTmk0ldmqZ9TIITCLg+eEGbmAnZM4wAxEv0sfh2aU1LiMmhP+V4qqJXU8qf6JQE6n8AAyOXnEZA3JZTPpGoZvqvCJhSWPzqUQfy98bRIu2XvTMpINOmJTbHUzmWIkTIWec/x5FvBaeiacjoNaE7V1AJ2LIwOtUiC7v/9VIFldaohcl7ArlyAsjNAvOi2F/mLsHhy8eMQHyelF+ec5fpXp733dYDl9cdfhYHxN4D/HPiqUupPyvf+a+A/VUp9ubzy+8Dfl3svf00p9b8AX0cSTP6r/G9JICm/VyjJ6nSR3dOHX3NPBV418pMJTte0tE1LVTc0bUfXrWnaDls1OGXonKO52GCNoqsdzkjiiDGJME8lLigTVYlBzZkcPJd1ApexpsFZJ9GCYUYpKbAqV0tMpzHUdcWqrXhwqWgrie+r6hZjG6KtiVpzjAtxVvLex8kzHwcO88S2H+i3e/Yvbjked4zjEW0001RjaifTZ5NIsyeg0Nnhjz1+P1FdO964eQujHddX76JUZLf3PPtwz7Mnz7h7sWceEykkVjV07YF1vKRuOqqqoa4tJsv0hrJAKR1IeIlp1YLSCioIBF8o0nLpLcVBzIWCpaCuHNdXF+zudoz7nrq7pG1qUszM48g0TLiqoVu3KOvw00wMkXbVoJXG2YqkFJOPbJMnec969jQobIa7NJMOmfZlh2001jnRtUWRDYgfBsLkKItOxuCsPVu076/BpcBdGqflGlyo3OdTzco6XFsxh8Ddds+xH3BVxWq9IisY5kEK/3kieI9C4RbXflMoU4UVEqOgtyc1v9JYV2F0wlWWy8tLpmk6sS7O6ePnjZC1FoMiRs7umbMpbZk0SlxzPKG61rliiFSyvPMZVe3sPpNNttAZKUh+kgXYWEnMabs1VbehamqUscUQaJn1ZUKSaKtlgTqnxy+vdf7n0yJbpCKnxXKhuLM0X/dTPGOEQr1qGypjUOree2TRRCglsoXgA/Mo6TcpBXI2KCMyHm0tprKoOUOMpBCEhWQdrqpoqprPv/tpfu2XforqUc2gYXVxgzcNT3Y98+4pLw6W7diwfvgp2huoXrxkt9sT2xvqSlOVVTgde1KGqCsp3K3h5XHmweoKt7nhJ3/xF/nZn/05NpsrWtdgVULnCZsyaZoZ54hVNaZpIUQSHlMZQvTi8ZIsU3+kP+7wfQ8xcLi75eXTTzgOI7t+pB888zhijSZ48YpQZ13gOf3wdQnJ0hCrrH7spnO+jr/C4shZNsTFLCrfTy44a6rPdgDKT9y/uGx7p+ddnOFzUmQt/3/48BHXVx0fffC9kioi19o0TfgQ5N44TTpMaeIkxm6/3RKDl8tHCRzQVJXQXcv9lWNCOaF8nqQjWgpBawxtXZWEn2KkVQochSrUT5jmxOSLE/iZfA0QdtprlNBya8ixUAi7SqlTqseyri2pWWr53sJufO0cndgbcYmgfBXQkDlJic1bpjkgBQ8ytDsxf1BFh60KYaYUW7pgkDljjEyaclqYXlKIpiKzUAXgLaOfV6RH59cV5+tdWStO771cF6GA1PrMXDRnmaYrlVEkma6qwmiLSUyVs5eiTCvisj5mhc8j1jTY1krkYEnRUkqxWq2wrhS7IeC0oW5qTDZop9CJ07VDktd1RkzpjNXUQWjsKUXCPDMce6KfBWwr955SC+AiMYQxSfGnTXUP4JwmoALw3TNbRbKYcijgvSSypEIJ1saI/8Dk0VYmuOv1mozEPS6GotY5rDN47zmEA9M4Eed4uoa01mJubcQs1FSWF7cvefHtF4zDAZ0V626NVhBCPL034xx+nAizNAq1UXgfCOOIoZgIY5jTzFwMFC8uLsg5SzqGgqqusLaCAGHyNLaCGppG0+oNN48+y3/8d/8TbN3yla9+n/rymvc+/DaHNDClmXVbizlwKMcwSUJe17bcXF0yHg/c7nYM45F+GOi6NdtxJKaIqytuqo4vfv4L/Mxbn+WD997jk+1Ltn5keL7n0ZtvobRmu9/hnPji3D55ypMnT7l5+y3aj34Au+cY63j41hv81t/5O3z5i7/Ckw+e8s//4Cv88b/+BmkKXHDgweaK3ah4+JlLfvJXLvjo699l+/Getku8+6Uv4q4+x+3tn2Kjo1YdSXv6eUuYgKNiijuMq0iDQveaR/M1Dx+/y/MXg3jKuRo/K0JGfBGsk+ZFG1QlPhFoYU4MIWBqy+b6iquba6xumXwg+D3b3Y55nnHOonUih0SZrctA0Rpss2bVragwHF7eEYZZ6P06gwlUtSusSSvJFwnQijl5nG5ouhXjFNhutxjjuLl5wMMHD9kedhyPB56lpwx9R9O1NE1DZRwpUliduawnYurpKpny6ySAoJ4jOFm8vBf2RYxR9oHiCSNy6PEkSazrmqquabqG2lXM0WOLFHhh+54D0aqsZzkKm1oYZyIxWB7LkEWV2lt0HLrcYxajRR6ulYQOCJFC7v/7fVeV583kIMc/p+KXlNRpcBG9x08SS1tnGf4scdMKpBbLAZk1n03aFaWJ554FhbxfUwZIqCzpIccBn49oF9FOU9uKxtQ4XcsgQhnQGZ88EZGTmZgQaaiVWmdJP1Hy4pMPpBIfHbXBVFqYJuiyj0qzbRRiHlkYFCEG/DgQ5pmxP3Loj4xhRtdiyC0xqiLbq6oalRLR+3tgvgyN5HTd78EhRmHF3CMCZ/tqLn+Xf1pYoK8zImU/NigtIRaLWaxzFmM4yahf3dAXgsDr9cAPs2nP6wqRYC8MyoXtQyEMLAMjdZ/2KE9wkpfK3lP2+zJ6XMCze08+i1aF5bNUc2LTRM7lWJ0PVF97/FVSSP6ABdZ59fG//xt+5x8A/+Df9tz3v8CJSppPxYo0cXpBaNRCRyonPHKSkiglU+iua1ltLgCY/Mj3f/A+73/wPbnYtcO1stG2jeX6as3VqqVzmrpxdCtHSIKeZ+vIxjH5yDzOTMc903Fk8omurqitoWkNOUaMilx1LV23wbqKum7p1g0XN5akRogaZSqyrogR5imwahuMk5t/OO55evsxH3/0ES/3A4dJEiSUj8xZvkwI7Ps9daqoqxpx+g2FfCXU/MP+QPViR6skxuw73/yA7fYl0XuSjxxuD/jB09gVzbrh1o68GPeYfkBFRa0rNvWaVddyebmhqg2mqcR80ch0xkSLSo4cZ7yP+HGCOJfonITSMtk6HnsO44SPkW0/oZU0rNPYk+oWYypSFh36PI6MzrFatXRNS20d1jpCyoVGJhnXx92R3TiiQkRHua8qa9Brh6rbYoTasuk6+rajz71M/GNZ7MmnQi8GIQ9L0VvoXloWOlIC7cs0StDCFJRIhCqRg4zTLCwgrQkxc7fb8uzFS9brC66urlio7SEkUkk3WCaFWRlsVQkLgsUkUzFPAWMyIZQY3hAwxktmstFst1t2ux273Y4MP+T3sJiqSTPmcUbicsv9KEWtUmVVAh9KxGC5d4y1svjEKL4ApXkRZsr5pDid1hOZ+GWyEoNaVzc07Yp2taFerU/T2JTKvWxkErB4uJwADNRphflRzdnyCEVPDiItWCawy9YvE9aIxFs6LtYb3nh4w7qrifPMYegZp77EbUmRPs8SWzqNE/PkJS5KWxpXs3I1jTVoDXOKjD5IkwUkPwsbyVrq6xvM47fZ14oPdjtM0iTrGNJD2nc+zRce/jKfwZC0xkfPOB8kvz7ONHni0dWKyhjef+99vvud73B7t6WfZwyGt975NL/6m7/BL375l3jz7bdp60Yu/jgyDgcIPXoeSNMIc6I2DZsrSwqJqDPaVOQ4Ql1xuD3w/ne/x3ff+y63ty/p+z1jf5DpShTTxOAnjscDZJm6ekJhN8g6rbKM2mXPvyd/UpbtBRTMP3LLECM0XTZecU0XAG8xISsGBZxIH3lptvN9I5opow4lU53yDlR+1axD6PCJhC6xwprLq0uubzZ8/NH38d5j60oa3zK9T8v7K5PweZrYbrf0+x0pRQyKylZYY8gpC1VdafwcOR56lDGYuhKgLkSMzmgFx75nGCZe3omPgC2u985K9LW1lQAaRmNsQqd42u9eMdEsk+XlvoaFzbUUtWKAtdxLwcvPynSuUDOXezm9erx+FMvjvLgRHwqElcVS+JyxcpDmfjHLlOlRkZzlLAzhE2C5+PXoU9qJP/PykfegmGMo3gqqNLevylrOQVittUgHUzz59xj16nqzHMPTJIt71lBMSdZkU6K0i9dHiEGKOCOfMSVhdyQNccxsNjL1XK1brNPcbXccj0dyzlxcXFDXNbOS5jvPE6riPtlq9mLOFyLGOI59L+CZs2hjMYu3BYppHJinhfa9mLuZcgxKSosxMgks18F9o1KW2PPzisQgLhHyYoAqZqbTNBNN4v4Syafjba1jvV4zjZZ+6AkhSrLbnPBI1HC3WbHaKA71nru7O0xdoSvLYT+w3e/IRAEBNtfsdltSYbbWtS7S3IQxCpAEBJF+aPEiChFXNeX+HDkcDoQU2aw3VJUrTVSWZr2uqauGYdsz70cCkZQ9kRFbN2yurvn5L3+O3/vf/jnf/u57tE1md7wjMNOuGlyWxAoqgy2yPKstlXXkmHj24rmYnlpD8pGqqchWi29F27LqOm5Wa4bnt3zlK39Cagyhgrvdga4/cHFxASlwGPYorZnHiY8+/IDP/+IvsNp0NG3Dpz71Ln/rd/42f/O3/j2efusJ/+s//J/5i2/9AGUiiQZbtxhb07qOTdvy3W/9KXd/IeaV1U2iriqefdzz3e/fMsSapDJVnYkofDD0fYDZUzUzk5/QLvKtb32DL37+y7zxxoFPPv6BxI1OYvRtq5q6bqSx9ROH2yOX6prJz9xut7imYnN5Qds0rNoWrWqGwwRKGt1hGDBG2DioBldZQtb0kydaTdt1dOuN1HnmCK5mtWoJaSLPmkcPH/DG4zeptKOxNU3j2A4HdG2oqpqcZ4wzzFPgeDyw2axZb9ZkFZmngX6/57C9Y71ZcfPwIbntIAvj9VR/LMxOFE4bnKnFN8NkjKpIIdD3PXs0ZEkBAVU8X4Ks407kYM2qJebEbrtnF/fiS2UrXFPL+pwpaK4wjc5ZoIuEQVwqyoRdn69nZe+USB/ZOQtDrkDVZ4Bl8Q8qmPMiyYulSc1ZPvPSU6HAB0+cEk3XYbWkK4pJsCq/o05rvICVBrQRIHZhH6izSbqWvYjKUhWJxAL6MgSSnlAGaudoXUOlakgaV9W42hEJ+DiijMJWFXUtA2rShLWO2hm0TvjoT94mmkyIxRhUPDtxjcT+pihxts6IN2AmY7KhqR22BBX04yBeTlrh6hqRJFo2V5fkIAPKadwzzxPjJKbBIk0JxRgaqVX0MmQoSZlm2dOTyJGLqahRljDPkgpYKBGZzOwDVisxgjUGr2aqWZea3Ut6pTNoI0C8zoX1rDKuciSVTsXaq16TWUCXpZJeDK21JWVd9vOlzCp+N3kZVJSAgyJJsnph/JoSJJBP15a1i8w1n3w6lrSyRUq0KGhzoabrwnj/cY//Vykk/589FCirCFFiy7Q2Qu0u9EmhvORTkYZWkuMbkYuvcazWa5p1R7YyHZjihPdB5B5NS90Y6tqwWbesVx1dVVHlhJkiyQcGBnyKeJVJ1pEqR0AxZMWxuWIyHcoPTCpSpYAZRvAeFeHuMKHMHSEaUrRo55idx9tAmBPJJ2pdsXYtK+v49FuPeePhJZsLh4ojKoyk1MvG0l4SqsSw2zNmjVeacZ5QwyyaqBJtFOYJozWT1vQ+Md4+ITi4ttIwtykypMgPnnzE9vaWprbcbC7Y1BOuUcS2YT8rpnKD7IfAMU3cNBcc+8R4dySEuSwUYrzjcqYmYXUm5xk/9aQ8U9cW68rUM2ZmH4sfQsVq04KpuHv2nLGrsLWishrvDSFOjNPA4W7C5IC24kOgjKUfU4mnCkzzTEyBxshC1jlHYw1O6l+8VtzpRJ0CHZbrqkFNMz77coFlAokl5UYmfhaUJqmJrANKWWKyxQhuwpgZZ4XpY3WNrTpCBmMz6+4SpStiyLx4vmV/PLBabbi8vMRkCN6XJjOgktCCjTZEV1DWUgzqEkM1+1iac3BFt00MjEPAT5r9UXKuAZS2xBCYU6SyukCVQFLkUEQiWjPPkzT3i148LeqyXOh0EoEnulKFUUJTTClAimhkURJa7yxO40kKWmlkRAsekgFtUdqBa9HNCtN04OrikF0K7YJGZ+XvF9ZFjL5o28tiJQ3D2fKgFEqDdZaczKkBUQrRr+d8QoFrW4GtcNqw6dbUGkzytLXFqoa5Mgyj5Xa3Y3880PejTIGtI1eCvruoaZTjQlnWaJqu5ePbiSEqfGEXWBupa0hO85E2/EnQNG98mtUXH9OtN0QMl9phqha0YwqRRKSuHTlHpnlkVVmuK8NKK1ZVxcvbW37/H/8f/LP/6w943LW8/Zl3+Vt/+9/nM5/9DFerDTF4trcvuF51TPuX7O+eoaOnUok0DKR5Ijctedqx3R3o1mumDwLjPJLJbI+3fPLyjo9e3qHciu6txwzPXrB/8RTDjI898xwkNjQnrDNUBmrrCHMUs9qqImeJMaussAn8PIOGXonxcZkhnZhzyyNlodGfWBhqKYLE+DGnCAsKn88adC1Fm0J0mTHFcp2bMvXPpViJZepPoXRG2ZdzJsVEzFJYvnjxgmHsMU5jncaU6MZ0NiFyxhLnmf2LF/R78WFIKJLS+CRNbWUth34kJkVd1cQkhmZh8hhr6IdJ3keKHHuPnwN3uxHFVMzNhMUgjuyOZUIhDuklhvVsorJMZV7ZOs8295Ah+cjJ80FZKltSKwr4pM/iV2VCPr8CCECZ1GVJsNFKpo05pXun+YUJU4ClBXTQBdSxJaUop4xR9uSrowwnyVcoJqPn14c5Z1nKqOfs34vPz9l7n+dwAm4XgOP0u8UPZDEVLP+AymIYro0u0/Ty7BmMtjI7ypo53Ju3LrJBUiLHTM4WnTU5JGZmdsOWOje0bcdq1ZKyyDWOY08kc7G5RFfS4PgU0SmQfC6SHvF8iCExT7N4WMSCM5uWz37hp+nHEeJEiqLLd8aSvLjKhznhKoV1NXXVMadIignlJC0lhogzhugTVjtyyCfmiRjXZjSGxrWYrAVkSZlxnmga8RlKwDzO0iBUDc5WVK7i6dOnqKyxuqLpLnj705/h5uYBT558wtNPnuDnmWgtNA0v9gduj0fatuULX/xJfuZnfpZKG/7wn/5hAQlGtKvBRJHXqAU4TxAjtVJ0WtEay/64K01XFANSZ6mVQ1tIRKyx1G2FjYnVeoXVjr4ACnOY8DlT6Zp+PrJ52PH1b77HH//xH9DYiQ/f/x67Z09QBJSOzCpxnCdSFmPKtl1JU+Qsx6Enp0xtHZU1TFlMkq2BUMP19Yr1ZsObX3yXf/VH/5K78YDNFa6uWF209NOeejJcXKyYxpmYFNEYPn7yAT+Rfoov/8JP8al3bviP/oPf5rOffpc//1d/wj/6n36Pu4+f86CCJ+OOsTV8khs+9+an+eWHn+IH3/k6771/i58GTAUmO9LTO/74X/we33vvu0xdDX4mZY22LZXSMI8ikehnjtsdfr/DP+i57h7y9qM3uHt+Sz/OpAjWVDir2axXzOPAk6eSqrXbvhAihM48vLhgtVrT9wN38Tlt04o/TZrJYaRyFd4njF5jG4OPgWBqhhRorOOyW/PWo0e8fHEnCTbX11ysLrjbvkApx/XFQy7XFxI3rBIxjdz2GU2FMhXaJpRRhDSxH2a6vmZ90dBUlpurC17eJm5vX+KHER0y6tEj6m6FdZIkMfoRrTPz4cDLeeD66pKrq0tQMIaIMlC5mmgCaZpZ1Q3rtqPvj/i5mBaTqNpy7fmVAAAgAElEQVSO9nIjXjXGSiKOnwuj0FC5ClPBHIKYP2cFEaJSoC3NeiPmTfkMRFWyzkqspobiQZFSmbIrTUqKKfjCyoDJD1BA3hCECWy0JcciWVal6VXS4YssQ1hpzprC8AjkNAtDTStCSCJxWPzUiuRZlLbpVCPqUoOOXhgPVitQBRwqwLHVjsmPxORJBFIemVJkwOCU+JNR1mxJWSn7IRlrLE3TUtcNdVURncNZkehnBXMc7ptgrfGzZykSBNQpg45ksLqkN2mFVo6QEgFKIo2YiWqMxOz6CW0Ul49v5L2EN5l9kEhv75m8Z/YTQ39kngYZrIWZ4CdUktSXJWkKHNZVpbcVFk1jXMG0CjDvA9NRklisBeMsymlQiVV3oLY1MVVkHYlqIKYZF2tsUowpEFEYJ/HcppTdcr7LfqvVqbdOeUEnxKRW25KohQAfqdRUGRlkkBXRixdRTkHY1SqStT6xcEB8U9Z1R91WVLqi6RLW9eQ5oFTEFNlRzpqkuB8u/Hj84q8JgAGEmCSDudwQuaCI6dTIqFPxRM5USibGzihWXcdmvaZbt7jG4oPHmM0p0qipalyJsRRNJugcSCGjjOj4tDXUWkFVkZ1jzIndMBBGT1JKzPpyTfAz8xhIY0QlaZhmK3Gac0iMvkcZTSRgKtHQWddS1R3WVuSUeXm7Zzwe0NoT05He33F33LEdNM/3PbvtQSZwfiaOM5U2QsUP4AlCq0VSVlxVkRP45BmGAxfTCq0UF43FmUu0CrzsLN6PJN/z4sVzQoiMpmZAo9Bo7dDaMVQd/TQxTjPzLLqwzGJ4CBWJTWW5ulxzeb2irlvW3SWbyxVNXRNyxE+BYZqZBjHMURkuqpZu8wJzdwAjC/P64prd9gDqGePsCSExD0f2hwM+ZJSu0bYSN/TK0RgxQBK2R8RnMWAygKkVvlGoEPC9ZEhvuk7OubUSgRXvGR0hCnKssiAgIUjBqVSLNTXKDER6fPQ01mFNA9lIYe60UFYnz+3tnnmaaJsVXdtCTIQkHh6kCCmLtF+LKayz4sexxJEuzInzyeBJZ14mwjEvU1RBI8+nosut8aOkHmaJByTf0weNhnSv21Na/DCWPO+lMdEsej1xhr6f9i155eGU0iCscIt1Fa5pqZoWY6uCmt7TzBdvisInKxOO+2mv0gvSTGmEUqG4l88VERlAmfmnvERPFQp4upcPkBIRiTZ0VOTaEJ0TQ766AgX9NHHsx7LGCIVN9KWqRDsqLlZrrtbCrJqzAD1te4ExT3FG4X2i6a65mzTu+h2+9PO/Snu5whlBqBfeSgamJJhWGeyS4opKZWrA5YSzmofXN/zGr/8mb77zDjePHnDz6AFXD64B8GPPeDjiD0e2+1vitGM8bEleol11DHSVZRw8t8+ekLOiP+6ZQ+aTJ8/wKTDHI7fHgaq5ZPPwDfo5k5Sjaa+I446UB0lXSYC2WNfgamkgXFVTaVPyMwza1jIhUAbdtCWG+A5VVaiTadP9l4BMZ8DFSXZwPx3OZwyKkxyCe1bOaWrAvREWKhdT12WyL9eHJMSUeZauZKKdZcI1+xmMxtVVuX45pRmsuhUxRMLsmYaB5INocrUhsphqltSolBj6EYVM4EQSASqVdAso97tEisWUZW0rm7Mu7MiYs0yMCrtQ64jW4XQfmwI6LIa796aW96kjy/253E/L2iKSsXszy3M5yjKRO//7+XqyTEjO5VyLH8g5P+p83Xmd8rp8mTPPCQGo7u/919/T/Xp2/5yvP+/yXl6RtiyfWetXPsvrOl+gGJTle+qrVijExC7kWACN8/ULFhcRWapkPVNW0pLGqQcydd1grGG16siHnt1uB1lxcXWFshY/B/I8U9cCWoWQmLxHo3CVw8+ZWNiJWlusq1lXFSYHsu9PUkafvXgWGaFXhyAGmuLLpIUKHRYgWNZWaX7yyaiU5bxohdUWpy26WoxWi2l18WJZ5B+5AEIpLik4MlQahpG7uy1vvvU2P/fzv8Dhcwf22x0hBt5/732ePXlK27X86q/+Kr/x679B3x/5v//ZH7K73ePniFZGCtccSmyjHFeRXxmpeVISA8QYyzqUChNI45yhqmtMSVNZNNxQ9ruccXVFva45jAeiVrTdiqubDb//+/+Y508/oLY1h+1zrM6SRNe23B13IpGpK9arC1arFeMwcPfyFo0wM4VlqCRdLCgurzZcXV9zcXHJb/z6v8sPPv6Yf/2Nb5By5sJVVMqgk5bI6Zh5+PAR680FL15uMVUmE0lh4Ld+89dw1vAXX/sq//T3/wlPvv8DxsMttQsok+g0zI1m8+ghf/O3f4cPP3jGt78SqEOHVxOHsOdab7iuO47xOfPUM5JIiHdWXXUCIpKJPmMtVEUPPI0jL559QmVrHj96gydPnjHkCbPqqCtHVVtyDKxWLTknhnEgk2mrirZyGKRBHfuB6GcuNhvCHGlqC0kR/Mwbj9/hc1/4CbaHHR89+ZDdYYurDA+urrhYrdhv9zgnNP05CkvQaMvQz7x8cYvVmeG45fb2luAzSYkZY0wz5CQM2pzpjzv6fkPXrliv19Jsx8Rhu2W43eGUQT1QxBCYfCj9gXhukRPb7ZbDcGS16Wi7C5EYzDOHw44we6raSoM5TkzzJGt0benWHauLtTANoqJ2FaEriz4CAsQQca7IELXcyzlT6lENRlissh0akRtqLbVk8RBzrsJoK7VtTtRNc0r5SklAe11WbBkUyJIga6CsDzknlvQHrTS5yAPEbF7ivxefMRUTColmz0qf3tdSby7gdyafvI4klBWps1Q8xZgvq5OwiWVd1UoLUyIj5vc+k/ws0ZpnIPfyGMyhXCfVfXqVEVawtvcyi6rIfGSfvPfwUlqRs4UcpSlXGowEGhhjQSlslmFeypIKE5FBu3MWY2s5L66ialcsfo6pJL4FP5FiIM4jfh4J80gMAe9nqc+BkDI+Rnwsg9tSH0cyKiTCHJmnWNbcwOQn0JJWOY8T8SIwzpP0bEpq+5QgzpEpTMQg0hxnJWnTGCNhBKacuzJkMEqjjSJljU0OjHivLKyMU0wsIguPQXw7yGLwavKSN3Mq31i8KxfDWe9n9JIQJc9e1vIiei2SKr1cIX/tAYxcmKlKzAW1ujeeyeVuk9q0FGZAjFJYrrsNDy6vaFYS52SU4urBNe6MoiTTIqEyxRBLUkOgcpZV19FtVlxcXGIqi3YVuqqISjH4wDQHcpZJd/SR8Thy2B057gem0uSHHAhkovaYVlE7w1o5Nk1Dc7HCtB3KVfgQGPuBZ7tb8nZiPO6Yxj2JmZgjfXIMQaJfL1YrwjCwe/5CIk1NgzGSU5zLAhBThmkxKgukeULHUFoMaCrH44c3XF60MmEcB+bjgeAjt+NM0IYQIvMcxUH6bs/zj4WiWVVCE728vmK97rDGQopU1nJ1ecH19SXrTcdq3bFed/RDzziNeD8Cmgj4NDHPnv7Y088Qco3PjpAtzrY0K4NrB+4Oz/HDXooR41i1NUpJcXYq3nMkJS+JIlrQ3ZzExX5IAykEdBZXbB9mMdCzFdpKGkdVV0zzTBpm8TJAoiYVGpIpLIs1rm5IqxnfjFw/fkMaldEQg0I7izKeKUxs77aMw4yzjrauhA5WaHUn7xYjZk/aCMCVuS/YT1T7soiK4Vh+pfiWAjIXUFj/EMDxOgV8eSilRNPHfROx/Hl5fzkLN2KJKFyAgmWtOI+RPdecy3uIhcZeMsddRVN3dO2KtmnFtDNmlNWnzVqojKXRyLmwM+7NhZaFYKHcnTsnn30y7l0PCpBRnjcFf9L955hOrtAqt3gv6Lq2kvUdYsT7hGg1F5OkEo9VivWqa9g8uKS7usBjmObIOCfQNShNW18QtKZrH3Bz9Q4/9YWf5J2LTorvLA1sKszODKw0+ATzILpWiyJ6z4zoziPit+NQfOGdd/ns5z+DtgYfPT5M3D57youPn2BiwldA7ol+FNlEmEkxEKho2hWuqbG2ph+CTBwTdOtLrttrtu9/n+NxJPKCYUowzdgcmMeRMM9lIutQ2qFMTVIzISesNWUyLRTyrGRaOIUo0clRrm+vHJqETulMLsDp+jsH7F7ZAvKSZvSjH683uqemWouhqlxm981mUqBTlkIwB9mUE8UZfigRbpZxmqhMQ93UoBTDOBYzYfFGicX5PUSJuVtukFzAgMUocAFVcpls6KROU69lw1/u/+XzhBBODenyvaUAO//eIpN4HaxYpBfnsqvXj+v5/ftDa8GP+bfz3zt/3ROouhjaLHdlKU6W93M6n+q+SDwHLX7ovL8GMLyqy/0RXjhnP3v+Wc7f5+vAxfJ4/ZidXnMBTxcQ6kTBPjs2C3hcPqtSGR96AVGTKpplYeoYrVm1LRnohyMA640MVWL0Rd4ja1DTtGJonBVNY/FBaM2mUIq1kUlzmuX9hBDwyF64UIDn2aP0iHYOZQtPuoALQnRKxd9HRo4xeDFuzMINXq5PMakrCT7GSMMjJ+90/70OWC1H+aOPPuCTjz/m4mLNxeaCBzcPePToEc2XfoLD9hY/Dnz/ve/ywffe5+XLl4y7vgxQyl6pBahepsxKGwHDAR8nUXdqQ9d1DGXIklIq8uGGrmtRejEtXQyeRWOP0riqQlnFvPcEH7l5+JD1puMvv/kXpOgZvCeEEaWiJLFMEY2mqh1123Kx3rC52LDXmv1ux9iPXKw7QmlaQ0401lF3Gx7cPOTRzSO+/Zfv82df+3NSsiIvUY55jBANVtWQLWjL4zcfcHF1w4PHD7l5cMN07PnGV/+cTz7+iK9/9c94+vHHVKokG4VE1zZYU1Fby8/+1E/zxc9/jm9/8z22dy+5tNBcVMRsudxc0HWt+EsQ0Srhaie+UMj5z8EzBmGFGa2ISKN0e3uLdSvqel0MvJVci+XPVVNxc3PD3d1twaQ1TdPepzTkzBw8aKHwo6SB8nrGasXxeMc47cl5RhFwBvw48P573+X2+XOmOXB9dcWDBw/ZbneonGiaitYVyZn3Z755gRwDRIXVhTmgFDFExqFnv9tSOYdWhlXXoh7cYGdPv92ye+JxxnDx6AEmRfp5oh+PrJqWatURcmQ79vTHwI2tqbVmHAZ2252AbKZinEem0piiEm1bsV53bNYrKucwaJF1Rhm+hJiY5oD2IstZGAECYiiSljh3RfE1s0sKVAQi2jiqui6gq6x1Ve2olHjSLHuILtx/I3MdlIqn4UEhQLKYsgvzQM7jwmTMSphvVVWiwWMk64SxIg85Z++d/DPgtCdS9sQFqkjIvlz49AKG5wXoEPRfl5Q5SgxsTkn229dqgPO1aJ5nhmF4BZTQ1sqAugAYy56vtT4lfCwMPvGRcPfsR2sF+D/fX0sySywehpIoo1B6ie5ehnZJWvGccdbgXAspkBpLCg05BShge0wC1voYhRkdZTAzTb4w8yLJJyYzifF+0uQ0Mgd/GpjIuRRGZ1bCXvBJTLBTkHrT+x58wnMPJqDAWFdAMYN2Il2kADyNqTHF81CZ4uNFGcBlOSdRJTmrJU2uMhXikqcKyJzJOhWZbsIoiNET8OQcpQfIwu5IufiG5Czeheps4PVjHn89AAyF5LUrU1DABbygxAMJKpeKVktrMbtqXc3N5SUX6zXKyYFyVhHmAbCo7EuEomgWbVVT1Ze0bUPX1lS1O3kJNE1TaMKA0TSmYrOxYugVA0tqxRQ8wzQw+YBPkXGa2O+P7A9Hjn1PConWON6wNY3S9PPE7XHHnR+57Xt2hwPD/kClDCokTI6s2obV6oKqablwgp6aDH2GuFoTpwmtRfagsKSsxMMgBsjiw2G1JtQVYRqlOJ4nPAllMm1TY3SDahvyqkMBD1NEu0r8FrxMXfvjwHa7AzRVU3N9c82DBw9wzjGOI/vDkWkOzCHw7Pkdd9ujxB9qxeFw4ND3HI9HxmKI573EFN1u94zHgXmaidmR88TRSBM8zhFlHJUR+pRcC0ZuHETjngpdNEfZDI2R/OCYJG7pOA3sokzNtEKoeVY01bYssss0ylhLpa2YZCoLJrHSF2h7gXYbQVFvFNNN4t0v/gT7l3dsnx+l8EyR42HL/rhjHkZWbSeu58aUGENORaW1+rSJSIkJs59faVJyzgTvTzr1hdJ8z3SIp+NBzuKYHBZjPXWivC+I76mpyKW1XxZf9CnWakFQT4u3FsO6EIvJm7pvFs9/TnKeZVEKKRNzOU+uxlYNbdfRrlZUdUsqAJMADvcOyTkvgCSy8Kv7iMyz3fQEzJxiJlkATnnac68DFbMg89YIn8iYclAEvT5OEz7mwkSOUIwTJRChLJJo6Xgj6KTQztCsOpr1Ct04ooJ+9vRzIqsKhebmwdv4oFG54TPvfom33nhEY9TJhNVqYWD4CDFmfMwM48x2e2CaBlJODIcj+IlGK/CBw27L9uULrm+ueOfRA6KSgvOi6xhTQvUHaiOyDlRAV5ra1ZjcMPY90zDw9NjjXEtME8MUeXF3oF1f8KWf/ilinPn6X36fZ0+e0bQjSlm5P1LA5EDyc2EjZTLFqM06mRAZyzSLJEO5ipTAuZo4T+jKFsaEIlUteR5YQp3gvkn9UUZRp/NYipwftVW9/nuvPJ9amleK8az4SGhlUFaRfSQGL2BGgr4/EOahmGfKBlnXEmE7TRP73Y7oQ5m0l4mPFp1wCAtYXIARoLZGUmrKfZMXam+Wnzs140tL/COOw/L316Uc8MOeMM65V5gH95ONe8PEc9bLK4yt18CL5die//3183L+vXtg4dXz8vpnOv/+6wXuj2JD/CgAY3ncr3f6ledcjs2rnhn5lff6+rVz/nl/6DoSdOm0ji9t+SsAi1pc2qWoEnWNOpmQpgTT5GVibwxGW1xVc3t7x+FwABSbizVd0xHCRAwBrTSVqTBOPoMxBhskGUYMQ8tanqJ4iZwmp4V5ZCV2MOUgwIjKwjrXSiSgetkWikRLFZ198XnJCbCqJBLcH5+lsF/iD0OIeB/KcOnef2gx8ksxsOoaNqsNKSX22zv6w56nn3xEXTdcXWy4u9vyrW9+g7qqubq8ousaalNxOByZ40Sm+OtoJSlWTUWYJeVsHj0+SIy5c45+nE7gRVU31LU0WN5PZf+1p7ScGCPjPBFSZu062rZBGcXV1QXj0LPbvsTqitvnL1FE5vFA5Qx+nEXvnxJ+mtjvtuScmGaRXc1+RusVTduiFcLS2Gy4qDc402C7NR99+AnDlLDRYGYZaNA4qvWKRsFlt+Yzb77D9aMHYBW7/Y7nz57w/OvPqOuatqm4ffYCP46S8oFi3a2YcuQwDDx+6/P8yi9+mff+8tt87c//lBiEWaiqBt0o6sZxPO4Yhj21Q2QarsTvpmLGnsv6ibArffTiGzJMPH/+AmMOAt7KTXBa65brwPuAUubU0Aow6+hWHTdvPMSHwHF3pKkapmkmBI9zmqdPPiSlmZgz/SjpedYqYpDkn8ePHtE0HU3b0jQ1q64h+JkcZo7HLfN4JPixPJ85pVGpfJ+gkbP4eo3jwDyPaAyVc7RNhVqvqMae28OR3fNnuMpC5fDFyyCmwJw92RmCAdc26LYCD36eGYdB5HFaMQ8TPswiYXKGVVvTdeLPYY1jVbfkKPVhjIk5RmpfPN4mzzh7UopYLT42xiisqTA6imTYSzS0tZqqqrHGUFVNWXMkPriuHJiSuicrZFnA7/fGBYBd4skLMU5qNJZ1paxxiDQzFalvzAoVI8ZE7NJYKgE5lmHckjTxat1Iec1SESYJIhCbgGVgV2rNwoxIOaGz8IOkgdYnAPxVlt79frUwi09rfdmv7/eBZe9SJwajMcKikAhcW4xbK+qqkmj1UsMrpQjeF48lAWeMteicyMGT0SzmmhiR3Uijv+wzIkETYK2S3iZBytLXxuUeLCBILOy2lHLJeoik4PHznmHcMUwjPgXqtqWpW1nrVAG8C4gdpkTMiUgkTINI8nI+S/6Q3iErhEljpY6WY60ZcqmpFSK3tcL6V+W8GyM+Zq7snyplGYhqwyIvySqDySgtHonGapzWwqwrkiC5BhJpAbrU+df/HwAMwDqHMB2Whud+YHPK1UUKC2sMnW3ZtA11ZdEkmrpic7lmddkWoxlxgLfW0jQ1TdOIf0AEWzuRF1TLdD8zIhpqrYQGk1LERI0yimgUxZ8WYz2tCdRJJm9jJW64ymeYDaMHNScOL1+A1eTGYXSAOJLTiNIzN48u6VyLzQaTFI1rREPtDEP0HPtedJ+1w11dcthu8fOMSomgPH6WyB+lFK4SeYLKmTAFhn4EKFFPudCsZZIlbAC56RwJlTwJsJWRm+D6Ev/GQ2F5oAoqaejHA9vnL/jex5/w7OWO4TgxTDMKmR6kJE3ANM8M08AcZsTsMSOCBE30MnGKYWB324sBqhasztkKW6IYQpk2VqbIAyhonDPkSgyInDb4ccJPM1M/4Of5tGj+P8y9V29k25al9y23TRgyme74e2/VbVOSIAFdgAAJgn6MgP5Z/aK/IOlBgPQkqBttqqtaZbtuXX9MnjRMMtx2y+lhrr0jyGQJerxxwJNkMBixzTJzjjnmGJVzVLUiKRGGVaJOKAJwSmMqh1XiUzxb8xptwWyhuubZq1eonz3n3U3ErDf0Hz6StASjw6Hj490dw3his35G266W4LyqKnyQ/rcZoDDGlHaBuAAbSqkl8PPeM45it7ZerYkpiC0e5973rGbxypl9MTuiiEo1BcxQZZ7I4+wdXQbDsmCRzoJ3uiRalMRrvt6PwYv5kcp4SqWyZ2xBtasaV7c416C0iCFZLSwEASHnj8nMlkqzro0c7iz8WBIUe16WHlQ/jVRVZquqcjqoVHotYak62tLbN4bAFCT4n6aJFKOIrlVV8Z6WjQfOyZNWFlPX2KZFGU3IcOhGTv1EyhIUv3z9OWhH457x8z/+mratoCzbFkUA+mHgfn+g6yf6MXA6ddzd39OdTngf6E8n4ulElRL4wO7ulrv37/jqqy/42ZevcbUh5wDXW1oCXzxbYxMoJnRV4VyxLo6RPI30MXE8nrBV5MPHI8OU+XC348tvKpStsdZwd7djd3uLvoHKWeq2xlUGnObOT/T9iRAzrml48eolV1dXbFdCi8xZk7VlnDwR+XkInqZtSST+zv6W119+zf2P36PGToQBn0iIHyfNS4KYE5evLilocemQ+fwYDFFFA2MOwvNSQZo36MJiKAFBTpEQwzIPbRlr+/2e3W4HxYGBUhVSuVRzKKLNWirT8zxybYOra+m5LTTaeYOfx2/57hN+yVOtEUt716PfzcHWfO0Wq9cL5sMlq+IxKPEYWFjmz0VV/SmGxuV7zKys2WJ0ZsddHvdTYIi6mN8P7nd5PK7sP8Ws+McecxL1mPHx+L0vX/8U0HH5s14owBJIO1Ps0svaGFIkJFHtF+tEeT/vJdmuaxE5HMaJaZjYbjaQjxyPB5SGZ9s1ztaQDOM4ELKXebbdCtChzscVozAiddFU0lov7X3SGiFCxOM0ooylKq2DGs7tQWoeF6ao5591TWJKpX/9DG5XyizuCcYIu2QcpeBwqZM7j8eUEtoa1k3NZtWSc6S6uaZ2FV13QitNsJqbqw06J06nI/3pyGa9pqoNqk8CGsbzLKlK64A4Qyg6NeB9ZJg8x+ORaRowxrLetNS1JcawFALm+xmCVCHH0bPZbEQnpHFUqcFVhqZxvHnzHX4aUTZz2H/EKgi+58XNC3xMdH0kTgE/efrTIMmiVgt7arXZ8Oz6Csis1gLgKAzPb16ileWH73/k7m7PzfULwiTtpU294puf/YSffP0Vm7rBAbeHW/a7A3/x539B8oH1quXLzz7jn/7JP+f2xzf0pyIivFoxKWlr+PwnP+VP/8Wf8jd/+Zf81d/8Az98+4ZWi/PbbndP7CeOz6/59re/5fbDO6kU+wmfE0lZCoObnIOsownGaWSYBmKCRlWYcSTlwGqzwTqDM5ZVXaFVpjsc2O2KHbWRglNKib7vWa0NX3/9E372z/6Ytz++4xd/9w84W3M6CmvBWdGje36zxcfAOB4J08B2fcN21UKKpOiZxoFhHFBKWqNygr4b6PuOFAJN3bDZbNkfB2EsqEyKUuG2WoE1ordVYgjnRAcihYAzmWebNZnEx8OO738/0V5foV3Fum2IOYtlbFa4dYtua5JRhD4wTaOIhTeWlOVnHyeUEhvWtm2oKltM5kTPpXI1m3ojegdKHB1GH7i9vePj3U5sesnkMredyVij5O+2bUn4ZG1q25bgI8MwYk1DXbeSdHoB3ZQ6twDmFJnba+dY6rz2ieCt7JfSksW8V+QsWjMhCBOgvJ8u6//iYEJxmctn9pNzTvZEJDk2etZTUigSWltMaevPKcneiiIU5o5KCbJehL5T/jReeMwOXNbviyJAEvRGOBFS5RCmaLkeKGHL6RJbaq2lyGkdtrIFZCnOHxmUUcsxGW0YrcVaUwBd0bKgtPwrPYMaqohGFxCnbIZaW1TK5KTlfLWITqMMLA5vohNCBkMLuSX6Nf00CBBtDdWqxRjLMIi5wPb6GSobxm5iOI2kaHCDtLLEGCDPBZBISF7ieqBsGpIvZIVLqsRwscRLWlz5isi1q2qqqkUbJxpjIRIGYWhBuQZWi4GMyRinJNezphALpNArDnkziArMJd/5Qv3j2/8fDoAhAjBlQCZV+qhhtv4CiQk1UFlLWzvWxbVi1TR89fUXfPPTr9hctVS1JSFWFVJJKG0pxoGx9OPIGLwglVZjjSBe8v5aqrUhkCbPqAw7a0R8pz+hhxN0B2J3FOvC08DdXcfHXc99H+gmjUbxzcrxk1fXvHz9kpcv1vy0dXiTpMcpZNIkVYVpSExT5HQaGMcBnyesTjy/uaGpanbvbznu7hnGHnKNso5UKEqzB3dbSxITk+LUDVIBOfWMJILOGGeonKYyVhwwyKwqoQ5OPhBiwg8DMJER26SQEqcoPU+T94zDyKpd8/xlxds6TnAAACAASURBVLHuGd/fczwMQrNOCleJEF+ICh9kwZ79gL0XdgQx4Rq79LgZ5NZaLX7SSkHjappGespySSYS8t7eC61qHAf6bhBRm2mSyh6qWAuJGKyRLFsWg6ylZ1MJipyyWCHNYoBOK5TJbDYrvv7Zz+Gne37V/Sd+8dvf0d3f0+SG0+nI3e0dPgSutldsN2sU5/5xX/rPjJJqFkqqtmm2DcqFeVFE8VKKhTYsi270XtgYFw4DtlDWxbLvXPGY3UdyKpTDJx4JFjcCPS/mBaRwVvr6zkyL8+9SsRmEQi/XRuhdFxsiRZxRrEQbmnZDu9pgrMPHRE4B7aqCpM/JgpKFk3MEfFl5/scquHNSlFIRfVKyWZ6TlQxK3FxiFDtAzZzEJQLn9YPifBFzFoV2V+jexgnyr6U6oLTG1Sua7RZlNWOOvPvwkdu7ew6nY7HRzVS14fPPX3B13dIPEZ08w7CnG0YOp47bj/fc3u859QO7+yOnvud0PNH3I36aCJNnOnX405E8euI0MBz3ZN/x9tt/xudffc44ndC+4/lmxWc3V8R+oOs7DIlKK/zQczgcmKZYbBtb3n2852534P44sD8O7IdfMyVYt4797p4URlTo+NlPf8bLm2ccjwfuTeD9RwUq4FMCZbDOYFXDqhULxBcvX5OU5ffffU+73oIydMOAdY6oJIh49eoV/cf3TP3+QUK7gFMLIHZRAZ+r3elip1qq3sh8KcHHHAgAElxRwNr5tUoVhkQuVaUZBimtRtEDosodYiDGSH88cTgclqRkriorxOZyBhzbMu7nn7XW1HWLc9VC25+FKY16CCL8Y4+U0ic6F3NA9kDgsrzmsp1kni9zkv7YmWNeLx63S1yCF48Boaeev2wlkaSZBSCaq2yXx315bA+YDjxkYJzn+8ygmNeGM8hwqdExH9t8HurBGvYQvHkMfjwFyD5gqsxOKVmTkzpXgxDnhOV1zG1rorvjclmLyzXJWei/C63bOVLOrNcrIHPc7ciTZ7NdU7kKaxzei9K9tiIi6KMva1kihImcZI/USi293M45nvfPcXWFMpbVasXkJ1JOWOeobU3t7Jk1svQhS+Cdk1CW/eiLnaOABwKK1QulWivR4nBOAJrgJZEZx/HB2CMk2trx+euXDEPP0A9YAy9unnE6dVRXW9HVmkZy9ITg+fD+HeHqGeM0CFCrpMqqi1272OpauU72xDRMnE5d0TgzVJW4+MzBuFKzZWRxmPLT0haojWEcR4bxxGk8cFNfS0V/HLi+2jD048JYuX62FZ0HFNPUM00T2lmsNqQQl4Tmsy8+5+Vnr1m14six3rSQFdc3r/nyqy/5P//3/4Pu/S3buoLW8tXPv+brL7/im5efsbKWH777jn/3y7/gNz/8jrq1fPHlZ6xWNSpVZO857O4Ifc/LZ8/Z73achpMkqNnw6puv+Z/+5b9ke/Wcf/Wv/mdu3/7IqnLEwwntNCrC8XBgd3/P7eoDp9OenAIp9EwpCvsUi9Z2mTdCNY8oDGl25TEGZ0Q3ymi9FAXryjIUxm1KCetKYqNtafWxfPHFF7x8+Yq3b96hlGIcPaDYbjZEP1K7hq+/fMmLVy94+/YVv/jFP0Dw9H1iv7vHVjtubm5Yrzei29aLhfzYn0gpsioFzNmGsq2r0kYEh72DFBlSxqdAip7gRzbrltBPDP2JNkfqxnFVXRMby+3xxP3dR1bbLav1lnazJqE4hRFVi+Ze33WYLjD0HTlHrK2ZppEpTHIdrbC567om58w4DsRg8XGkch7vPW27oqpXNE2LrSpOXYfZq6ISIYWqaRjofE9KntWq4YsvP+fzz1/jnGMcR6qqIoRYCpaaum6kJaXroCTV83pNlqr7oqEEJC2aFzmnMp4hJXEU0SVpjGWdE4cRCnipSVnE+oOOZUycwQDZA0VE01orjJN8Acgm0bJRlARe66U1ZHEUK/v4+T9DSrP46Zltd7mGPwVeg5isoqSxI5NBC2PX6nNLtzDIpI0h5oCfBiY0WSVJrEsyXbsabaXgObONrLE4a2hXFZVrSptaJe15xdJ2fq2A4+f9aNWsmS2jhUUnOYxS4Fw5vlTioizscoPGUAtIYilPSrHaGE29qnGfV4QXr0g+Mw2eHAem/iPT2DNNIymkc/F0FBmEMUSmKHlfKHmAzhSRfJidvfI0LeusdZ66Ed2nGMS6OoVQhoEtrirSGpi1zLXt9RZnHboyAnjEKHm4UaSoSmtKYe+W/TarT27r8viDATBmNC+lQmGcByhClU8piGiSs9RVvbSBXF1v+OyLV/z0J9/wxRevMU6BjqAzzlmaWjZjaUcwZO0IOTPGwBAnunGkGzq0VkQf6PuO6dQThxEVIoNWvCOx7zqm3YHcdeRuIBw7wqnHDx4/RUJUYCvW7Zp1u6JpHb5p6RNkn2hbxaZd45wljJ5x8IQaeNEQsuE0jhz7PZPvqJ1js17T7Q/cxoGURnIOaFNTNRabNNNUglGt8Vn64KaYyaeRGBNv3u8YiUSjsJWhqi2ttVRGY3MiTh05yoI6jMW7epyk0tCPhBhFWDVGtBKx0GQsXmu8z/RFpDNni1YVXScDV6pDs22R9LNVymC0Ap1ws+9ySjijqauaui4U3Bxkw7TSepCUKgun6AP4aWKaPGM/4KewBI5aG5q6ESFVP9F7T9XW1E1D27aycBhDyImQYPQyGacQRF7IyALTrrd8+eU3vHe/5O1v3/Px2xOtNSRjOex29F3Hat1wdX0lQETxvQ4xMI4DKEVVVxTfPmJMi10QzBJw50RNoXBWxmaYpgeaE1JBCmVTkClyWX0N/tw/v6zbWf53ptcXGiCz1dGsJ6OKyM9MT0/FBulhoiMMkLPwXipChJIYzSKyNVVTo7URUSoFWWtMTGKMdImc67No3gwwQGGQFIpVKq0sc+KitCrMIREAkutWNpWy+cwslFy80kthoQCg0vaiSuCVk7TtTNOE0U42MK0xWhJESWItrl1Rt46sFT5m7vY7docdp/5ATJG7+3c0/YYvVM9vfvcbTmHP/u4Nx/1HPt7fc3d3z8fdnm6YiClxOnaMg3yuH0NRbM4knRmGHqaJ1hqsysTwHO8H/HgihRFvIl0fhR46jgzdiXZtmXLgcDiw359oVxuun93w5u0tb95+4O37W+4OPVOE07tb3n+8RRMYuwOGxNXa8V//F/+E7abl229/j7GJm7srvnv/jtxPjMPAafCkyRP6Pc613Dx7BjrS7XfkGPjs8y+YRtHi8IWeSJxIYVowo6cq3Y+r/Wca/8VYWYbzWTviE/ZFmivmjxJw4W4+AMMEmBNLZut0YYyNomPkPSlGmrpe9A1saQuzpjAfjBGHCKQn2TqLuKzYB+cw03SX5/RD4d2nEujLqtEM2l1eOzn+c/J/+R6XAd3l3z517R+zPZ68BzwEOS6r7MtrOYMll8DAJbhw+fly7MyC558Em0+xPS7v92O2zmOAYl43nxpjj8/58bV//FgEQedflWp7+aPyVd4PmAr1W+uzqOo4jnjvWa/XtG1D3w84Y9ms1wxdL1bYOXN9fU1dNYWGP3F3d8dmsylAciImT0yl8hnBKk2uKmF4NA1ffvkV0yuP0oamafh4d4cPfrneKYqLRy76XyFKy4qPcek5V4W2prW44WTOgHtKUsBIISDJrqaqzAP2zwwiG61JIdB3R6y1rFcNMUa67ijs0BAwSvHy+Q1XmzWHw577+x2n7kDMCVvJ3FKl/3ryovFBUsQScM9fTdsuxx5TWNxi1AyyF3FDa4Rla0xFigof+sX9IKfI6XCgO/V8+cU3HHd7+u5Esornz7ckAjmbUhYUS0JTAKGUMtponj9/TtM0HE8nxqFn1VZoZfDdib/+q/9ExPP515+x3l7x+osvUEYz9h1/8f/8GR/ff6A7HvDRYwqj5vvvvyeHKEF5iAzHE//+3/47uqGnO53IVsSAVc6YuuFwPPHdb79nOnVURjN4DzkQg8ZZizaO4BNDPxGjFJSUihgitbGEKBbnRmui1sQC4IqORY02FbPldUyRrGEcRVvKmg1anYVzm6alXbUY45gKE+Zv/uav+dd/9m9JIfP8+hUWR/Z39F3Huq24/XjLX/3Vn/PZZ59hjRPWZkzs7w8LQ1Vx1v2apokYPDCznCpSDOx3O0JMrNdrXrx8LtbUxtJ3J8ZxRClD8IFp8oWiLjofnoiyULdbXt5sSR/vub3fcTqdxG1HCZupDwllEhUamxVD3zMMg7RalOOLOZYYQ1oQtBXgOE6RiYlaVQSfik3yHmsrrKvQ1jJ50ToQIHXWCUt0fUfX7bi/B4isVw2vXr1ks1mhlKZtLW2zKmKeGmcFvAyKi1bay7VNEuE5JhXh6gTMehlzy2+WBbCwGcWUU+IkCrsxZmnNwRgWPQskpp0ZZGkGfLO0oeRc4sdUrGJLy7RKMytErDRnHQ6NWdgC6mJ/vNwHngLel30qP2Q9zjGFvvh5fpiyfuT5UHI8F06QIuA49qiR4h52bvnUBg57Yd64ukYbMSDQzmFdLeCetSWmYGnnnhmqcwuJUgJ6aIy07ZRAViPxr9GaSjuwGhN86QkIsj4yMQ0e66oSA2tsLQxTZ1YYvSV60eohyl4wTRP9MBbHFE/vJ8ZpEtZR8MRTh0656A/KGuWjxLOgSXOPtJZ1ZAoiXaBSQikBlmMR51Q60rQOYxSrZg3JMo1hmduU65Kz3ITZ3ez/C7yAPyAAQ8bJuUdp7o5fAtuUqeqKzXbD1XrNs7Zh09RcX23YbtaMQ8fvfvdrpjBiK6FK1rWlbgTAEGkVjbYNtmlQ1pCM2E0e90fevntHfzoRxgmbYF01XK3XbCqHMol8mnhz3LO7P9CfJsZeBkJjWtorx8Zo1k3F9boV9NU4OmXpTydMf8C9yzid0DFy+/4DMSZs3VJdXWPWW6rNmnrleP7iJau2xfcD/T5SV4aqdvhC5Ru9MCxCDGQUPmcO/UQOmRwydvD4mPj9j7f0YWLKgWwUSgkrQaeIjoHaglHCrhiGgWmUgdt3A13XF0cYsR3Vxoq6euWIWmyaYlTEoKXCUYIsgEwk54jRCmccldVYA87o4qstStVWK5wxNHWFq4wgb+V9fAykopcgOhkTwzAyDJOorXuxExTNCM1ms+Wbn3yDMoa3H96yu98RUqn1K3Wx+EkFwWRFniZJtoueg3UVz54958WrV/xy9+eEFFlXNTl47g53TP1Es16x2lYEEioB6cwQqevZf36mQpWVcEafC7gs2MZ5gSWlgp4aSaRKorK8pgR0sldeViZtEdOaK45yPEqpZUMpBa2FZTHrvSyaGUpmWSwUS33hbLDMy/JvSrNgkELU8Stx1QG6rqfrPaauaVYbnKuWpJPy79xfrS9/XraQTCYWtlgqokKluhxlgTO6tMzMoEUJnGcAJxV1fGPMAsTIJppk4y6BuoD7BvGhPwfqanZiSVkohHWNMnapwvZDzzD1hCT9ph/v3qJ27/GT58PpDVc3W9LhRBh8EfedmPxUhMak7zWFRApi25zLPZlqzUREx4h3hq9ev+KnP/mS169usFZR1Q1NY7FW42qHM4l+EO/0ruuZJs92e83Ni5eMIfPLX/+Wt+9v2R87Ri+AXdaaw/EoWjkqkdJI22hev9xiDGy3LYfhxPZ6g6nksyqTiTYDUm1btzWrymBdw+vn16KBQmRTC7OtG08y+/vDIip6CUhcJvFPJdJwBvg+eb7M36cZA6X9aWbpKQGsUs6LM4kvx2KNZhw7Vpsb6lWL6k5FuEyqZjP74tLlQym1CCle9sOmnGepi3Myr9SiV5NSWuw9l3WIhwyBS32Iy3l/+e/jJDvGuAiQ8ej9ZJ6mhSEyJ5r/WLL++PlLtsXM3rhkcCyfyRlomROYS6bE5X1egI8SzF4CEJ+85uLv53+X+anO7LPH4Mt8HeZx8ziQvQR8Lt//4XHI3H/AEJIXPfpbWBgiMUnvsNLMgq5yDWUt6bqOEIIEkXXNNCmutlt2uz19P2CMuJW4yqJUTQiTJEZK2HdOC6A6FVHZmBNd14lYHWVtVlpcUKaBuqloUHgfybEovOczy28aB2q3lsSjJP+maGhkinUpuYiRqnLNNcEnnCtAVjzbsNZ1/WAMK7LozQhyTPAeZ620GGglQEiOOKtZtQ05Z4Zxous6rDGMPlDVNVOMpK6X650gJ7GYVVkETNfbdZkLnkwq9rrCIHDWMeMOVVXms3LEOO8HjlV2GKvoTidZk2MoFejAOAbu7iPbbYszjSTDLhGztAayJH1yj7qu482bN1TOslq95MvPP+Om2fKr3/2G9c0KjCXHzNvvf89pt2d/OnLyI6epx6pMow02Jfzk6fzA1XrD1I/onNEm8/tvfw8oTOXIGMYkLM/bjzv+1//lf2PYnXj77pb26pq2dez3gVM/4U0UDSdT0fWj2LRWCmcUldKs2orjacJPk+hYIY4D1arBNZJ4gYVMsUuPWNMwjgPTmHBGFV2Jibquub6+5sWLl5z6nnw8if7Z3qMqxcsXL/np1z/HZMv36js+vPsBPw0oAt3pxG9+vUNrR+VWpJRLrJuLXai0Z8xrX4wBDdR1RQ6e4MucMQ5yoq0bqqpiXI/So68NiljaiaQd11pLs2oJQ0+0mtXViso5tkrR+cD+fs/+bodTIug49ieSUaTJ47RlPHRMU0fd1EWQU+Y9SpgHKI0PEaXF1SjFwBgnYYFrYYNnNUhckEEpi9AERJNGtAZkjW+qGq0Vfdfx3bff0nVHNpsN6/UakVSckz6KJSpYK85COUeMUTM2IPGntiX2EDZCSiKKH4JHG3EaiUHYN6JdUIDprLCuwtiqsGwyxrCAunkJcfN5zUbYDgvLAkoMroE5Z5id5BKz3Waha0IpXpNzmXeftqQ+BrMfgPX5HBM8Xvsf/2357eKaMrecqIvXPmiZTGegFyJaJ7oexMXEooxDG1f0TNzSjm+1gIvWGZpanPFUEd5EiSi+tiJ2Ox+P0QaSJihpUDaUNsIk7onzNTfGIgzrSsZUVkWHQwAypeVYFAoVE9pFbJvYILFLJONjYvKeFD1VymQvcgVT8Ex+YugHJj9JG2UQYD1niESyMeQy5udcTsRhMzpHTqeJ1aoljBNOB9lL1FzUKaycEr9xWYB4InaZH38wAEYq1VU9m6dI0WChFRmjWTU1V5sV27X4VzunUSqx39+zP94SCaQcyGUizJ7BigVQE2vOusFUojQ7BM/x1HE4HCBn2spxvdmyXq948eIF280KReCfvvyM8F8a+pj42J243R1FtNMHwjgQ+w4bIlWhnPZRMYaE73vicCJNPTZ4qpSolBL7Uya6/R5SwDFS+YruINXDaRjpDkfu7u7Y73cMp45u7lUtrRUZSMrR94kc5abbyhFC4LffvmFSpSKuRL1Yp4yOAZMiRLErS6WVYkECY0ZXa6zSRZxMWntCtkxTJmUvKG0Squ3c7lMVlotWAng4Jz2mldM4m7FaQ+nFa6yoZ4vSeSF3ZUH6ur7ncDoJhRGY/AWAMc4JvugsUP5mmEbudzuazUbsd4t6+jQFKheoKkco/fUxizL2GDwhg9NCG7POcPP8GVopTqeToJ3WcDzsGI6edb1ivdmgq0TCE4MI/SWVlyxfhAHnDUNABZWEAqUKCJFn0GNGNINU41M+VxJnRDJl5JpJY/+S8D8l9jcfRM7yeYLmn9s3JBEreg/5IYiiM6C0+KCni7EF5JgKE2e2rTQCXlQ12jpG7+kOd2hTcXXzvJz/mdKel/1INtfSVSQbRfndspHMX0qAjMtq2sy4kK8SlM+AB5lzl/3FpkNBtZVs5jFGbGkD0M5BQX/FwSMzTYO4mZAFWHMGBYSc6fsT0zQQovSpxjwxnHqOh56392+o1g2tWuMHsYlSOmM0hDjhx0EqawXAUbE44GhFiBa7abm+2vD1y5f8t3/6L/gf/4f/jp/85Ave3b5D6czheMI9u8InzW6/k6rGVLy96wafFN/98I7ffvs9v/ndt9wdevoh4FH44vVujZG+YGuFbaIVdVOxfXlDNoYuZez7ezZX19zue5xRrK62RJ/Ybq/Yrq5onFhfPb/e0q42/O7b32OsZb3ZkGeNIj9giKj8KCld/q+W+VL27OVh8qUPiYxbqZiUwGIeM/OYyEl6Ope3nKk3JcEwBorjg8oZHwN1Zbm62tKuV6R3smnOOhiu0Dd1YeTMlnVLi8dTAIwMZklcS2+szg+rQ0o9rQHxJKvkArx86jEDHzNbaGEHLHPs6b9/HKxdMj8u27TgzEKYr8u8Jiznrc5Q05nhcn6PS6bJ+W+AQk2Va2wuznlOx89srHm9iPFhle3xOT3+/vJ6Pv7+8txnzY7ztQCU9ErP96vE0ALwzlXBWecEmAuHTwJzhdEWvDAErNM0zsFadJOOxyP3d3d4P/Hs+TOsM6hC+5j1kipraeoGozXBeAExorgIaC1Bbwy+5D4F4FGzqGaSeVM0M+a+egGDxS5P6Sys1Hxm2hRFGbyXCt3scpDzeexdgm3L9+qsy7GAQOWaOOfkelwwZeq6xlpHNU7CBCjguNHSFrtZb2StUmrpkz8dT+x299RBqu+uasg5obXcWzsvQnouPV842uVEXTmapiUpL+t5L0mkBrabLdura46He45dDyqzWVnqek1Mim4oYpF1jUKcHpRSHI8HutOJ519/xTdff82rly/44vVrTr5j+v23vHv3nve3H+lGSQJSjDitaXISC3itUK1hmiY+e/Watq45KrH27LseZcVtwlY13TjStC2bm2vudjt+ef8rXMzimhA9aGjbGu+llTIVO3rrGqyrSHEQhxmVUSlikLEQgvTBV3VD1dhiI25R2pKSJgYZFTFFtFHYAv4PgwjGWytAxzR5plGEoOfx5KyIZq7aFa3b0D/r6A87+n5CkTE6Y51D44ot9UhKwmgwGMYh0Z06cZUqoKzOmRgbqBuM0rTturhlCGBhXUXdtLiqliRSR/ws5BojrrI0bUtuRPg11Y6QRH/BVjXX1zccPu64//ARow0+BTyJfn8UPQYvWmTaCDtrnMYSL4koaoyZaQzkwMW+II4TRHFekG8zIWXA46pG7OOBVEBR5xyVkH5IKbLfH6AwPrpuKJtPYa9m0ZrLOpOdpqprEfu0rqwJ5XVwsdZLcSeLt4Ss42X+SCwriWlC1mtnK4yrUcoRMdI6OQPe2mArQzaWGOK5cDiv56ms8UrhrCX6cWkmVuSiazbvExLFSSIrXyl5tH5YzHgMrF/uBTln0ZN44vl5DYKnNJLgMo68fO95Xf4UQJd9bdHZ0hF0IKWhgDZFb0uLpocpBbq6FiBVKSX6WVoLs9kZmkb2CWcsxhqskrXd6QqrBdyIFEdNLXmHaRQEiFlhrbRxiG7T+X6g7BJZaWVQIS57mFYKq0HZCnJmPVvXlJwi5SjubEnY+dPki86TFO1CCEz9AT+c8JO4Ks5tuyGOBWiTL9ESK2MuRpLKs1Fo2XdL+9A5vXry8YcDYMx9pFn0DJaqTU4Yrakrx3rdsl63VM4Sp5EYNTEHppDIBJJKaKvLe10OVJlAQon0hP1B+rtU8UuPiaaq0Fb0K6Z+4MP795yOR1ZVw1Wzpm4b2s2aq03Ls9cr/vjrL9DWYJws5h9vb3nzw498ePuO+/s996cD/eDJYcIpWBUl4o1zPN9e0a5aolIcwkSvk7SynE5E7xlPPUPf44eR7njidDiSil1fijLpYkkQQtYMk4Ikx26jUC/vdge8pNoCDiUBMExK6JwWKywBjhXGOpkoTmFshY9J+tx8oZ7qjLFyLecJPivJGq0JfiyCQ1asrpqGpq6oG8dmW2O1qNDHUn3WWfrLoVQKc5CevmHkeOrpRxFPmvsyx+BLNVvuq3MVdV3hp4lDd+L4bYdxFXGuHtr1YjMUY1molZL2oWmgGwehmtuKnAemMGKswoj5NCkE7j/e4rsTTb1htV5jnMXnHpWDUDRjhnRGhlOKqKyXRT0VwTsZiJopTqgoPWbLIlgWUO/9xXgt7AR1UU28ADDmBMHNisCUxX8J4gv4cLE4P1DqT+cFWJxbRJWadBbqy6WiIMKd5x5vbR2mko0rxIgPEFE4Z1lvVtRNJWJaWpXqXkYobWVTyJBzsYBdEtm5FaQEoMxzPzP7kGh1sQHNwAcziCGvn/1elkSRUtVXarFnlYdU55MSACenSMilelhE0Lablqaxy/GM40DKWVp+lGIYxxL8Zk79id3QE/KEUg1aJ5yF1jmatubqesvVumVdO7arhqu25dlmy9V2y7MvX3P16oabzTVfvnjBH//8j9lebTnt7khhYnfaMU4D/XAk+UBrHd98+RUqivXxu/e3/OIXv+T29o77/YExzJ7imZAzGWlTcs5AVgR/Yt22bLdXTFNA2YbNzSvU9x+5OwxExAFo07RSLb7vyFGE07p+JCUJuozWbFYtfd8xdgecE+EwHSdy8Mvm/zhgIOcnN6R5zX+qwpJyJqeztkMsSbsAbZGZ/TBbb89SoClKJUArivNMxDnL9moLRtTytTFSESpzUc+OQmXDn5kXwuy5AA11kW8/Z/LLmJvPVxLCGbp4WAW6BBAuAY3LpPrxtZj1MubXPn6//79gxuNjuExGLx/e+4XxcKnJMQu2PQZiLkGEmZmx3MdSYREA46GTyPmc5yVsrsydGW1PHePl583nNL/nJfvist0lPooNHjA1ZuvpcrcS81pZNJYowq4FzEDl5djksy7eT5ViTGFmWKWLXlVNZaV1LcTAMPYcj7J2WmsXi76QImpCbPiMwzrFENMy9pUVCz8IFHl/gg8FJJf5OQOwMxCnFNKKmRK5CNHOV1t60CkAdMb7iXEUTYO51S7GhDX6k7EzT4OngCNAGKkp4wroJuNJAMKqHzn1PcMwIor4CmssV1dXrFarhdqtkcrybveRYexwlaGt1wguW2xPs17Gnda2aGmIy5Q1Ms7a2pKUYexPIaRllAAAIABJREFU9MPA6AMxZqqqZtVu8NNEPyQGH0jHI+vWyH6OCIyb4tSlC+tmmiaU1qxWK4ah52//9m/Z7++ZwkhjLZuqYvWTr0nO8fGwY+oHqgix7yWeUWnRDzJKsW5XJB/JIdMgQMLNi+e4qmaYPKurLZvrZ3z7/Xd0d/fEvkOpzDB0ItantbATVMUxDuz3HVO9papXpF4o5HEa8SGWmNGSUsRY0VVZnG7KPquW6y9xNWUOjONI3w8P2l37vqcfhtKuosneo+xZnc8iY3m+dsYo2tWK9WqDs2tCNAWk+kgcPNHn4sDhBUh2rgBWYutZ1TVOG+qmJgNVVc9ppySCxiHMHHBVQ92sMMYRkggOmsqwublGYfjw41v60bPZXpMqTziNhH4Uy1CjSSkzxbNGnNGGaZQ9IMS4UN21dtTVmlWzkbZpZpZZJCAFmVCExacp4lOWlhMnIIA4DhWdtpAghQXAiFHEMa3r8FNkAS8wBaAwRJVIhdAhLkJW2iAugNYSLIodsxfgq64rcZ9Ag9bS3kosNuJn5TKtSwyo7LLn5ZKnpbI/alNiTfJcj1pAYUqBL5VVdnYzIulipclShwDZf8Vp0/PU4ynw+HJPuNxYntpnZzD64T4YShL9UK/rcWvnue3TAEHE1NFi/awMIYi1slJKioQxk/AFDE6EvgctwqlJzXiURltF00jru1FSrKiMkXFvWqytSuuKxLbGiOPa2IuwpzGOum6pXF3W90xdV3JRZ3fAOU8q11fGyFx8lPcdx1EKbko+S2uDrjSGhE3QNCs2WWQfUprDIU/0A+PoCZMwpPw0FLegkap2OFsJAIjCahlLOU9L/iKtpue5c2Zqf/r4gwEwxID9oipVEjKrNau2ZrNu2awbKquJcZTe8ADBj2L3V1gXIZbNDEmcjNJoVfqUMyLilpHnTWEZOMs4jaTgCTnjc6Q7HDFOo82KoLYknzFpYmPg5fWKz15cc/1sQ7vdYFcrXq6es/mTz3jx04EPH+/5+NvfsX//jtPxiNWatqponaPVjiFGhtPIse/YdUf2U8+H45797sjYj8SpWGsW3v6cLIAWZD0LyhZjxKeI0q4ky+DHJNWK/T3JirsASmGVtGxUTmFRaFOxEK8L2oqWROA0TDIgMaRsyBiUEkXljIfiMOKMonLgbOb61TOaSgRV16uW2onVUzaZZKTPv+97+tMJP/jSepJFVDMJbcn7xOhH+mFgGKfCCBEGQEhJNgoKJa0Iii1VJQz96MkqSy97SWRSTAQgKVkofC6ipNNAiJlURWpd008nvvvu9+jKcPv5Gzw9uZuorGWzEppv1VZUlSH5gdxPpfoqiY9QddVi4xVnZkURE9YqkVIoQcAlsluCyIsK56UXw5LoKMUlc+IyGFdKwCEWsETs9eK8IFAqyheL/FxDVaYoPStDUmnRFYi5KEsjvxORLhGB1UbEmUY/EZKmblZcP7tie7VFGUuYJpSZz+QiyVClTjEHuMgmpzILmEB5jtLrO4MSKp1BTRHbE9qhykg9I5/1i88XL817dTFmLultFPvdWNTKc6lWphyojKNtLVfbmroypToQCH4SIagkfQPTkDCpwtg1tqpR6xVp/Rnf/Pyf8/M/+pqXL665uWq5uW65bh3XK0dFpNawsppt07BuW65ePJPe8ymyqipM3dLvdrz/4QemvmM4dSSVuN/tudpsef3Fl4w+8ctf/IoPHz7y47u3vHnzttgbJ1abLT4KxVFpU4DKvADEOSpyNoSoGKdESpYf3r7j3/yHv+Q//Pl/ZpoCOShaZ8lDZBomPh7uOeyP+DBbsWkqV3E4Hsg5klJk8j3jOPB3f/PXxJioXDPvRw/G8lMJ9TIu49NV9XkOXCa78++VzksQMQsvLm+h5bxt6e8nJlKMIl4VAuM4ntuqyh/qEjRIEmRKFUm+DMLCKCqxMs8KM0MotI/OTbLbT9hSTzIULn43BxaPE8L5b6ZpegAqPMVQmCmvTwFCl0HfpSjo4+s9M8LgDASkuSLDuSJ/+fdPfeYssqe1evQcD6xf5+O7BEckEb1gNlz8bh4TTz3/GEyZvw8hPGgRmsdUujgHcTESC7kHoE5G1iUtAalUCR/BU/nie4UUTmIgKF1s+jQpwfV2g3Wa/eHA/rDDJ3EimcWRUwxSzZ40q6ZBa4c1iWAu2t60WlyuZmBPltgkVfkUSRTbxiLaVhstgbaWtk2lFAkBFiR51aXSKdfHFiG6mVr+GDgTcE+jNFhX4+qmkCDOrYhaWTAIlboqQOECABoqVzEM05IohihU5pCi9IRnaeu7utrw2eeveP/hlnEcaduGpqlJSSjIMUWpCpeYTxUrdrIUaIIfiX4ipIkcEqTENIycDifWaznf1XpDvWrwoWfsR079QF2JG1WKs9igYvKTzMMoxY79/T1pGjkdDvzDX/41m6sr2u2GWPbNPEZWyfLZqy9o2oa6ddSuQudMGEc+3N1xGga++eannE4dP755WxzZIGvLsxeveP3Z57SrNXf3O35MP2KyHEdSGbfZ4OoKhiQCglrjPewOAz/Gj2yC5344oOqEy8LaUdktDMxZHDarjHaWqSS3SmjQqIs5GGPEjyOTn5YEdJ7DRouNo7GGMXtyisL2kS1bGLrKPLDaRClcVfN88wpeZX79a0/OXsCQJE47OgsTRGlD04q2WVVVpdAj/FbRb5CJp7Qlo4touwZtQRummNAWqrZhu7nCupr7+z1950siqun7UarXaSBGj8USlST0xhhULmK9fijjrHyuVmQ00xQ4HDpyzOU8M2McUUYXx70K7Woqm0VsngIK2IpU3PIymhAy0U9ApqrEFci5CrKsIfOCI+LIprDDQETNz3sIn6ypUoQchonDYc/oB549ewYxo3WCLC0iiSgxoZEi4+Q9WU9YxGFEXybB81qOuCKKhk8q2iACWKLmtnBpP8iZhTWWU7Em0GfR9RkozoBRhhlImNeVp9oWz8XEdMHwYHHhm7GROd5+DOJrBGi73FPnPcLaM+h++ZlaQ0waVAQtbiRKW6wtLpAZ1MxKzqqcK1htBbCiiIyqUmxLmf44lL1WwHNnDNZYtDkV9oItoEL5MopY2uaNdrSrFW2zkuuuoW6qojNjSz4hbbESSpf9HF1ccyQ2b5tWCn2lDSrGottWCgxGO6wpbUxJ2n2U1ahVRZsgThE/CqsZAqRASgEwkK0wsOaWovB446S0z1y0vD/x+IMBMGb6otxDtfTZVs6y3a5Zrxus04Q4MXQdU3cihgZbGVZ2hXaaWNw5MiJ2JEzzIiapihgKQqe2zqEQUT+VIGNAGTCJkMQ2VRV3CmKPtRormCK7/kj/wxH7Y5YWAmt49uoVr77+mnXlmMY9Y+gwTnH98gZTVQxT4HA48XHoGI4njrsDh8OeYZoYg6fzEyGmojorKKyKMtBsVTMM4joRSm/RzMCIWQSGciwTr0xqazW56Ahoo3FG02hLpRUGEf70pXVBNv9SGTGKlAT5d1UFyiGsVSUsDGOpnKZpHOuVoa0NtRP9j8oYKmupjBOanx/oR8/e99ze3XHYHZiGkegjZC29ugliFvphyMgih2yqooStCCkTkvycS/V8tvPMJTjOMcq5a0vKYk/lQ2ESaL3QlKQXT67bWPq7vBkJueJv/+6v+MWv/p53f/or4j/zbEzFphUP+6tnL3BtzdHv2d2Lp7IubJClVSMhfWklUUopQShxL5zJK5RAnUzIaXHAMaXSk3mY2Ci1NKBcfJXCRsql57jglGURXKiLSmGUWdxK8kUAvizeJQjQxmIxmJjwQUROlcpFsNNhrENbW0R1ZRGrqop2vWG1WYFRi5iV1oowJ5yXTkJZLLIMxfoxpTPVrFQKluuzBMvl+RkNSsVeNxfKHmlpQVseWmqoiz6UKorUZFKIxOhJIZ7VjkuVQztHVRmurloqa0rbUyQGj8qK4GUM1W7Lartl3b7i+RevefHTb/ij/+a/56s//qd8+flL1q1h3cDVytCogPInGuVpVKLR0r2qSVRO7ms2CRUnwn5g3N2Dn5j6Hqs0U6lYXl8/o+tH/uHv/4Hf/eb3HI4dp66nnxIxazCGbpiYfEREvcR5x09C6wVonGMcIvf3J46nwP3tkX//Z3/N//V//0f+01/9PUYZXmzX/OT1C+orhzU19/sPvHnzXtYHVRrMyzVVKhPCSExT8YwXdtfk/QPA7WHwdL7HD25Z/tS543E195PnyjzKRb16aSBakthSVUhC8xzHjtvbD4xlfhprJUBwdmnBNUXzYgYudKF+ahFyKZpCAl7MOil5ptJrBWluyzrP2gfgYXnPSwDykpFxeY5PMRtmpsUlK+FSs+Op5P3x9Ztf86A15OKhlPqkhQRYXEiW6sjFMc7H/8lnqrLuqLNWxifMnIvPferx+Fo8VXWbn78EW5Zg9uIcHoMksudIop8Rd6xcbCEfHFMJ3mYhYql6nj97EWtWAnJKsCdr3Axoa1X6lJ1lYzeEGPAHEc09ak3bttRVJW4aSlpGpslTF/FOYzU+eKYUZN9QSqy7S9XUPACD5nsrrZYxeby3pOClVzmJzoBIHcxrdCIlOS9jDMaWBCNDymlx1/kEiFRSeZ11X7RSy3pAAdhnB58ZfJ8BwFkoUJVgOOXza402xOQJyeMqw6tXL/h4d0fXdUBCqWes1yvqxpXxKXFfSrNwYDm+XNraYsD7EZUzzlhykPtujAhSh5zQyqGdxtiaZ5sbgo/QKaYgWhgxRmpbF2ZwRQyRN9//wNXVhlfPnxM2W7pTz5QyPiX2uwPJB6yx3N/vqOqKqqnYrtds2xanDdHHxQa2qWtWm42wwaxlmiLXNy/4kz/5r8qp/I4X18+pyJx05jR2oAszNwQIkZMfCYAyirvdgZQTfRzZrBocido50ohoNYVMnhztdk27aQkp0o8D4xiwRlxoMkq0RpJaKvdzMSbnC9ZjAbgz4MdRNB9KYmi0sPtShO7UkVXEGKnGHg5HupOMWacNm9WKlBLd0Jd2J4kpVpsVz55dUze1CKmXWCRlYalO04R1lbAjtcO4Cu19YdAkKADIZt1iteP23Ufe3d5SuYqmbumPHX4UNvAMTIQUCVoYm7rMkZwT3ieMySjnhPmDJYbM8dABAzoLoGOcQRVL0QioJHiKMAyE8ayMA6WLVpgwkURAN6G0AD/O1hhdchYzr4dQMmTZBxULQCu2q6o48ZRpsOSJMjd98OigCTljciJnYSRqLS0ckVhYE5kpBLL2ZBUwOGrrFivynDIxPbQxTiVOUywRqxRQ0vy7uV1TxowVv02SpjjoqeX8zqLv573gsgjwSSxRdDcWhpiaOXTysMac42UuWHhKAJg5Ppd4mcLSnAtxF8xSSgOztkX+QFxaKO5H1kh7VY5BwEI128IqVFYSt6n5ebO8d1r+kwQiRWlhCX4E7cteX4JbVVhThWVutGXsOrqqFqFYDc4Ja8lZJ0CGtVRWRMtDlrEYyt0qZrqimaFyYSOKCLq4WM3lz1T2SL1oGHofyUYJ4BildSvFiCZSLZIBhhgMKnuJ/Wcx14uxowulKYZYZs3Tjz8YAEOEPyTgMFp8Zo1S1LWjaSus1cQYGKfA6XRk6k7YMkjngZ6hIMWiwJuVpLtK61JZU8xhiUEV/+GMQeOYq3dKxl5Kpfo8sjFeBrTSRG3ojOGYpTpsc0YNA9P3HacP36P9xGG3x2dLNI34dqfEx/2R27sd3ifuPtxx3B3w/SCDM6dSqbNMIZJioZ9GofaMCGUtJYQaXgJfoRHZIpiH9FAVFn5tLbauoKCwRoHNoAtbIEQK7WcORKUCb41BbEKkncJq0Fb63araUTeGtm3YbCpWraGyYFREZxEOS8Fz6gemYaI79RymgY/9gfv9gRQSlXUopJpRiiBCp/OpzHkRJavKgiXJrUxWUUkWarisikUExmhh75TlRBbTErwiLRAovVRItZZ2mxi8tHPoiPf3hKCJMXH4ow84Y9g0KwFltMYZRd+fuD98ZBx76jLgUhbwJM0ijXOgPLt+pPNipwuNV6m5oqGE8ZCSVGOskU0rpxLYCRqLUmWznjeseUEuuhtK0qSl8qUz/TSQlcwla2XxTnmm9KkStEugN0+eFKQFKxcLNanKgS7iQOQkdq9FD8MaQ1VX1LUjR1F1TyBAoJ5KspPO9piqRJQxSb/ywrhKS5Ugc67wFvGQc5KmVFGWzsvfZZm0AmAIF7As6GUBzDIeULnQkSWhjTHM6clFIiSbSFVXbK9abG3JRCyF9aGEHihq0Su2zz7ni8//CV//0c/48ud/xJc/++c8f/EZz1YrVhW0LmHHjqnboeOJVaPZble0TYMKE7474tOItoY4Bbr9kWkQJyA/jWzWK2oUx3GgqmoOh45f//JXfPftD+z3YscaU2acQln7Zt95izKGrCAEv4AvKSmiyqjaErPhzfs73twd+df/5j/yn//+t3x4fy96K6Pn5WbDs+0VzjXEJPRphSIkL/OutF2gMjFIAgCe5APKqgVrOq/vnwITj1sA7FLNyp+87nECLvNJXSSKBdRSSgKBnIuQJ8vaaK1Y/HVdJ9Rd66QHfPIluJZz0qZQVwv1Xl/08s56F2oW9dRC0U2lWqSVhuK2cxlEPch0edTStVyLXKqAfPL6+bUzY8E5h9Z6EY68fMxtYFoXZwGtF6BGwbLGPAZPHt8na+2iszEDGjNo9LhFZH58wjRRipQ0SZ11cWbmxMzYmPUoPgFtlfrkPZ/6vH+M1fOYwTKfw3y9z+4llErqGcRIUcZT9KGM7VzaASVo0yUgVmUdzRfXU85TAjuyVCFDlF75EIM4VZXAcL1eobTi1IslpaDD0sZmTEVOXuZ3gqapxLKYRBpFt8AZs7isxRxQJdFsm0Za1K6vUFrz4uYZr16/RsXEcbfDR7E2N7bC2FJJU1mo9YV9VFUVxrhiZ7qkIOX/Mx2+xCLIXNRFJ0RrIzaESEw2u2dIJbS0D+YS/CapVFdOk0tFrqoqrHUYNW8ZQiF3lePzzz/nw4dbuq6TFlajWa1a2TOJxfUgL8ExaKYQMFmScZXFOtsVdmHX9dzcCEsjDQNKKzZXz3DGUuuK92/fi5tFAVvmCmUKgco5nl1dsd/v+Pjxo8QN24204E6BOE7kKRBiZPRBjqPvCcHzXfDL8aeYaFYrYvolfT8QM1RNw83zF4zjyJs3b9hurpgGEeR8/fIVL643TNMLjv2Rox/pvGcyIxMTq6pC61KsGCacqeF0YhgmnAo425C1wjrNtm1ZX18LY4RE35847A/EkFmvtyglOhlU/y91b7pdOXZkaX5nAnAHku4eCkkhZeXQXVm9+v0foZ+gqrsyV0opZaamGHwieScAZ+ofZgcAGS5l9T/11fIVcjp5iQucY8ds297bxGMilfiigbRsPw1ztRZSzNzGkYIXw/Va8UEMCqd5EllVMHReiqxrLJyvz0y3EW9nDvuegzbsJN4aQuh49+YN93f3GjOqjLbVHGmcRt5//IB7fKKWynW8yX604lmyvzvy9t1bXLCkFPn84ZHT04nOyWRDqhRMjbHkncN7K0b4iEwk14q3PZ13ONTAuAt6DVYm39ig0iunnnCGyCQykHkmJQHOrfVY7yVG5kKsaTGHzlnzPu/w3jH0PV3oCE3iqF6BC36BWViE0i9qDaNNWtS8hXQfyjjcjt1up4XlltFnVvlcYxtaJ9M0vMeHsEiYpYkmTIyaxBsBvQTrhJFQjZxFVYv4locGH2R6jY2kaklYIuIxUquD3Px3JKZvAfDtmfElFqGcz6/Ojlo3P6vj0o1KPY3AuK3x9vr9lt+B5AVOp5FZ9fETAFE94wrahLdLbSs3RBkT1S++jKVqLprXBmtrQFrToYWGxLQqjWznHIaG0FZMk5tjyCTiOHNzTuO71H9d5/WZyQCALvTC1DMWYzxVx57K38X7LTiz1i2i4xP5kNZPFbtItaRwrerRKJ+h7waq89Q86xliVQ5cSHH1uGv1TF0fE0YlmssXv/D6qwEwSjJQUL1ypnOGYeg4HDr6XgLJOE6czmeupytlnDj2BVMsNVuRbnmP9RJs1boTayrGliVZ8d6Lx1uOsmGNaOAtysBXnwhacE4V0zsJ1lZkJwWZiFAxZGsgG57GyOfHE/PtwnSVwD3nC8V9prrALWYu40SMic+PJ9I0izlYEc2rNWBKxhRhjJgKRSc1VFPEbEsjkTEC0BiVBZjqcF4KwiSZtARII2OISq7MOTOXqiYpliiVqer0BHcLxuJMoQ+e4C1dB0Oo7HaB/X5gt7/D6YSJRks/30bmaeR2vcn0hTkuZk7TNDOrg20pUpSDbEyAYqwawuQlGNcqHhnZNHmLruC2UQHvtGutC7sqrGwQNo11LMWI+DmI6y9JJAOdddzvdpiSieOMxRJcpdw+kVOid5m+H7jb35Fz4np65jZemVNkjOKOnqojp0rOaZmUUVObLlHEqKchmUqH8n4de9qKb6sAnJNaXfShVYJAVdDNWM3irN4O7TjnUsm0zqaIJFJKxCxGO8ZacDDTDJvKIt1ZjApNCyZJQACtn3LTW1cwNkpAa51oKyi1r5U83bjmyuiuYC3GBEWS7cI6WejCqNt9yZRsFVCQv1OygFTq/lxqFSBEEXJTiqwXvcdCDa4LzVn2kVL5C+Qq3TKHkc4bleosqRYZ+QlQDbtex5AVQdGNOxD6I8P9geSlg1LTjLeOCcetiInn4d03/PSr/8bf/N3/wU9+/g397p54PjN7A/Yt4eDgeiPnK4GJu8FxDAFXYb5emMeRy+VELDO3eWS8XskpU3LF+47d3R2/+OaXfPfxA2ba8e7dT/jNb3/Lv/7H77ldbkxTZJojuQFc6ri+GnuZpRgSE6wsneVSMeGI7XtsN/DPv/o1//Lrf+HTx+8xZaKWyu1q+Pj4yO5w4DxN5PmGa+CTuiyVHBeTLLc4cAFIx6d1r+u6Sddgr0Ww0X83+u9FXM9eHWYNdtwcbwpSNbZFVX6yzuqR9zYGZ40ys4TeWI12eYvBF6AIOyl0UtRkNLkyjmqEgaGIEFiHVe8CsAsVGhymFmw1q1mala5PoS4TTKyV2Ld1aqkU1Qsb9QGSSTxW6f2l6nmln7PJMwxyTtVadH2je1o4gsZUKAVTDJ3rFGxiYTsVysIukaRIz+AKOQk4nJXx5qyj63cqXaz6vC2dszjv1JPrx2ABtWoTQCSL1YrWvmnFW5JcNtS0lqQaTaDa+tkyVbZeHO2eNMCmFNGIy+3Q7p9Z2WhLMN68GhhalBEgHWIxKWtj3UoG6wQYMyqzrMrGKWlF6pQ3qs/Y6pnkUDyNORdIhVQT/W6H9w5fHfvdDmsN5/ONy+lCmgv1eGQ37AAnDKoCY0z4KuuwpzLFWRiYRryoarHM00yxHm8yu+HA3/3iFxgnTLmSKzlmqnGUqgCXsTgsXRjwJjCliPEGU8RE1BhhRORaCZ02fUCYGU5o+tCaDUk9zJyw3azHqUnoIvFNM8J2ycoy1RidCzVmYfpTJWaXrN5PRfKjKj5Fbx7uifPED++vnM8n0e8bA1XGWNYKOa4dXqr4AhVlSM7JYpw0bFy35/l84V2cCX3ATeKRc7jbM56vfHr/kel2gVpwRkx+c62QE/N0o+8Hdvs9FXh+euL7H94z3V1wtZLGSLzdCLlCFgaM9Xsxl/ROmXKVVBPVwP3DHd47rrcLt6tM0ZhvE+fTiW+N57s//J6h3+OslUk0OXF3vyf0gbu7O765v4NaeP78zG2OXKaJz4+fKXMh95a9feB0fsSFQLwkMJaHh3f89Ju/AeDx+ZnH5yeutyu2SPFsaiEnMb8s7HDWayUjgM88ZXxQ41Bu2jSClIUqHid4fDrz8fEjxcDj5T23WYyoD7s7hnBHNQbrZ0yXCFjqLPHH+oD3QYw3bSD4nloQbwg94woid63IiM7HpycBz2rlcn1mmiZymhn6I/eHI7ZWPr3/wO1yoZSE73TCnvXEKFNyYprBGYoRk1NSpuSJXb/j65/9Az/7+f/Jh/ef+PT5B+bphCETnEhS03yj+ETXH8nGUJ3DDz1777Gu6lSbji4EvLJPxjEJOwSwLpCLUOsf3rzF1j1pnoglc7ldMezY73cop1fBPYkB3iLncynKBYCaM854kQSnhHVeRh7njLMdx8Pb5fwTHzSkiWRV1lFkkokzEJyhDw5swXtNWLMy3ls+LkY6UsBaAUVKEhDTFqmjhPHYMww7ul5GyeIc3vVyFhT1iSh6VposQwqoixFwOzVa7tByiXb2t4zBSLHCyr5Y6wiFfZbP3lQA4pcmTdNF7mwMuRatM8V3ZX840O8V/CmFGBPn5wvz+So5iWnjZrUxYSrFrr9fmn3iQ1OrsG2qXrjxrTGJgBZG7qGr8r2mfaP+V0ogtwIyFZW8zaQox940zutZZZq5rFtqARcCLniRwBiDNc1wW8764AM+BGVmWm1+WowZZc8pCNTAfoOltkYNhnkuixQ+pkoqMpJZnoxRawRtTlvJ8RcZ1J95/XUAGBWodgEvPIWh8xz2PbvB4710Tcd55nKbGOfEzgS8CfpzzTVeEpdGW3cOQmj6TahzZJ4mTejLQsctueo8d5UmlNY1FjbGHDM4Sxh69rs9wzBgnJi0XMcbt3Hidrupy7QUsPMYmcaJVASFTAXmlFQX1kbLoain/C5jCtZJ0pTUtNMYJyMLbaXWlvyiRXBVFoWMx6m2UjW3ywXiGDXxE5TMKT2j5IoLjR4N3lRC8Oz7jq4zdBaOx4G7w46hdzhbtftYmfPE6XzhfLkwTpFpiozzLJrVJF2GmLPq3DK1JBk/Vi0mVdKcsK4oo6QsdMStuVqt0vcWRN8sXR9oiOiXF3TzTDBlHddZqiTczSTTOcfgHME59n0QSUCszNPMbb7Ru0rtFIXOlThKN7wi3ex51vnLWZP/klG8WotvmSvknBworQvpnSNOkrRJAYYWJvL/52lWA0GdBGJUF2cybX+QAAAgAElEQVQNNUVqbQWcWbp9VcGMpluuVYGHnKUIsGCtHMqlSnG8UO+qBMTGzEgxU9jo0Wu7y1b03kUAGtAiw2oSEyo2WEqZKaogrBqMXBcEnXZqeEelVnnOwXQ4pyVnSZiasVaLYSPeKCo0V/gFSWiRos5qoSETAiq+68FaJCWUFWMrOKrMGzdGaMFGqJKNujx0O5wJ1Ahlrnz19mveff1fuEb477/6N1K+8N33v+P9958I+7d89fO3PIb3fPXNL9jt31KC1cO7cH36gV09M7mROTog0rvMrjcMNhBvI+NpIimzaJwmrrcz43xVzaboZ3O50c2RP7z/SMqFv/+H/42f/83f8cfv3vN8vnF+PmPqak7buhLLwVWE2pTzygiSSUITvQ/sDjvefv0TwmHH7/70J779/k/M00X2jqlM05XPT08c7u6ZspgyGe2AyuQ0SxKCMksLaMEndNW0zsjy5U2nvBXhr48ANl/XIniBL0yjk76qQRVYka8VTUTKJmkpgFP2ke7SJACxKRWnnb0GDlMVdPBOUWVtPSyFtf4XL4a9OAFOmqR/+bMCOuLj0Ea0Cvgs5rhlCWV1WbmyDpo8oGzu1bY7UevqlGMQcAIdBWyUpuqsJVgnkqmyejkIcC8XHEuk5jVJcyob2TIU2ujlhWWAQg65LHTTrY9FmxhjG95VoUgmtF6zkU7Ulgr82t+kVjmXtqac239rP/uabdHOjfa9DXhpa2z779QGshl5ngvTrWpe0cCS9v4KQJtCG2HdwJg10RJjvy+PsC2UWKmmsNsd6LogRXH2HPZ74pSYp8jkZ/puh3OBaDKpJMosssh+ENZEqHL+VNbPYK0wHOdZpgfshkEo0E6mTznnGXbHJb/AOHIxgMMibvclyyjVFNOaM7RupzUCUDjtPIp5FpaKM8I8WZlushbFuFWZF6ZoYZQgg8XTIDrbCpDW+ax1OU9NW+dZpGL7/Y63b95wOp14/PyZHAuHw4GSYRh2+KFbYt/i5WItmIANCmrViO968cOJM/0wEMYbhcp4m3h+euZ6Pqu3SCUnldVYhwXSHJf1FYaebh64nGaeL2ce9jv2+55932FK5TZPjCkRjnsIjrlkTNwAi6lwvDsu+ULOiRwjN2vJc6QSuZ4Rs3kbSPPI6Xrh6fKModIPHQ8P9/RDYJrEXLOzjrvOcZ7glmJr/zBlS/WB4AKxWp5OJy6XC58+fWKaJoZh4Hg8al4QZayiD8SYcJ0j5crpfCXNI17H5OYSMHGmWplKUq1ZfJCenk/85t9/zeHDH5lvE6nOPLx94G5/wNnAGAUgqTZjAngjbNTgLPv9gZQywcvEkJwr0yTeG9YH+q6n0z0aY+R8PiMFVJa9VhM5Ry6XE+9/+JanrmOaZ6yB3S4QOgEWrKlimOs93jvmWf03jJXYXCJkaQgOh6+5S3vhZqYT1oxcz594Hs/EPLMLDxwedgy7B4ztcMFxf3AYU5Z1bLTYL7lQrBTRArgK8O2MIQFzlhHJ8zThjLKGUzN8l70nzR6L7zuMq9gAh8OBQ2kNHofJ8l5FR9FLbmDEENJYbNUSX5k11jUPAkenDU3nDMaKcbbsS49RtjubXNYYATq96zDI6Fpy1hijkmaHGLEOHf1uoJpZxo8WD9mRk8Q100a12qq/V+N5fXH6LdOKXryMWWJja4IY2qhws/k20/4F9BkJi7IuPp7GiK1A1/f0+z3d0BOGDt/30liIiWA9w9FgXMc0iiwwlyJNkypSiKIsD0uV/EIBfGOkdlkADLORk5YCyoQouehEF1bwQj9dk4zrR19erVbISw21/PBybi1AfztP1T7B2KL1o8c7Twi9yO1CB7XlRDo9xQoLo5YCxgqjwzgFGWWMsbOSLzU/oVLSC/m3nK0armHNy/7M668DwDDIiEEnB6F3lr7vGYYB7x2lZMYpcblemeZ187YCOOeE15suXTztfmG4TTPX68jz84nxfCVNUQs9mY2bUhLzk9Jm2tblgbfOl3XSieu6jt1+T98P0iWjMsfE9TYyjiOpaAJtDXmemaaRXBCasQaaZvwlxeWKDArNvSGKBmO8FHRWAqq1QuNfR861Qn5deNZailWtckkYWnJXsbbig9J3XaWUKKPd+o5hGNjvBg5Dz9AHDkNP3weCs6Q4czmduFyfeTydeLpcuCnNvaUVGZZpH0k1qBlJsimFJHCqXqcmy84sNOiWnG5N47LOqn9NcW704y+96qYLW0uV59lkMtUpSi9JpWgE95RQOT2dOF9PxBjpuo4UE/GSKN//wDxPSh1eqWdgyFm6h5WyGOmIzEDd9jGkrGirkYktMVXRvi2aTitd3KYBrpJEonFNTCNVAoPuYy3CFqmVlQIrqdlVBXBK8VZYxegouSaiMSiAhwQJjMUFK1N9jHSLrSar7XdUNhNRqvybNY7qOyKdFOWI/q7qWp/mIgZOXiYJCWRuqTiiGXA20DmhSAZv8c4utL/OBfUh8Jp4QucrwVb60C3aQlMbzVKYH9bJiFQXZBa3t1aMgrxj6Dt8p78vOAH+sAQbOD9dmG4Tf/OL/8LP/uaXxHrk+4+iP//8ufD23d/yX//bQJ4zfxx+xc+//opuLIyXT1x7uNuLHramyHieuJXAcNdz2HX0vpDSTIo3GcWq632cZpkh7wL9EGS0W4Fvv/ueX/361zw+nXQc3I7j8YH3P/zAPM7anZDAaW3bG9qpVv13VhBxKfSAlCNd73HOcTzecble+e1vf8vHj5/EYV8ZHDFnTtcLnx8fMV7Avy1d05h1nGLbk8sepHVBvhDm/8JB9PrfvuSRsJUL/Dl5wbb70pKcbfHb7o3oqq2yI+zCtiisY0oxZtEUt2TCKZtCpkFJXG1dAivsSyQ2l3ZBLPHa8CIhCqFTUKAoyKExfJuftc9UoVEljDU0FWqtVU2Eq3QttvGySneuINpoY1SKtnm713KOxvJogHKTj7zohCznZwFlYryQxOj9rwp8mlKFUWdbqvVqzbSClZf3+kvSodemnW1dbq9bJkGtfhyvv+f1mpJnypo5ba7vtc66lI18074EbrafZZsMvliXxlDqzG2csdbLVAHv8b7gfY/BcTqduN2E/j4MO5yTCT85zcoUqYS+mWt6aslM04wxcp6baoU5aqtIAhHvmuUZ6sjVnGXaRU5JmBGLZ8bqHWKdyG+tSh6FGtwaLrK2ZR9sPj/rOdk+sxjiOprHRgNZrWkO9y350WeruUM1eu5SsQ24B7ow8O6t0PU/fPjAp0+PpFTY749Y1Yjn1PaDpet6KaY2bB2Avut5/viBTx8/8tOf/4y+67iczqSSmS5XDoc9kxpWFo2tRqUDuWTSJPlE13WE0GGDh86S+55sPAE5yzoMQ4okU0lUfBY/FFuF9dTtO96++Yrz6YTF0nnPNMlowjbNSywfMsY4Qu/pkmeOidt44/n0xOfPn+gHAcT2+z37/V7iTCcyoJrkumNK+CDePefLhadnYSrUWlU2JGNdWz622+0oPiCjyJvsxRGX/SpjcSuVmOOypq95ZJwixmXG20jMM3mKpJTo+16eQ8rMymA1BvU+cFLvIiBIF1jinjFWcu2cYJEaOfput6y1peml60mkg4XT6SQ5/G5H14nRaK2VPEdligb6rmO/33O7XUX2VIQWbryj1sLz6TP/8bt/4XC8px8qwQ4c9keeusxtfBaWjcnsOs/d/Q7jOlGSVTF8rbUKWw45w+Wvq09EKXKGWydjlVOK3G434jwzdN0Sk6QLrh4dWRhS8zRTbcEXqz5JGwaa1fOJVQrRzjnvHZjtZC80jzbL/jHKLrTGU61fi+UFDP5x7HQ6jYTU9ltjIvglhwghsNvt8KFQ6sycZ2L2AnoUxNyxFpWQ/djTqJ1dr8+NZT1VZXtVNvfCKhC9OWTXq5d8c5Ens3geeR8IKp2ptYiszIoPztDvmMaJEgum03M2F+Y60xgGVdmxVs/vWrcJwdqsqciEqrXBUZdnozdYgfoVMKfqpJjN+bbkSggYtTZ/qzZBVmPt9t5tShRUiknaWJH1IE0YOXP6fqBJjqz1S1PRIowK5z3Ge4yVBnwuwpByzsnUkVyJcSSVSPNKaQDeplWhz/LL9R78tQAYCI7kjKHvevrO6pxwCbIxJq63G+MU9SZ40pTFbGdOlJR0OoAcvjgosTBPidPzjR/ef+Lxk/hPmC3aSXuoVgEJMFWKTLkmua6AoebCNM7kAtfrRKllYR3kUtQtWajacjgnSo4ULM5XKoJEyfi1hrw3GKJNmahUpOvTijmrBaRs1Iy1pTXalDau3+/Frb3oTPQQdJYS7ZCpYDKh6+i6wG53YDd0HA4HdsNOvC+UUTDOM+fLlek2crlcuZ7O3MaRW7wRaxRgx0piUxTNnWc1F1XmSttkVc2zrGnBUpK2Ze58fanDXjadfQla/H95tUQ25bywXaw6KW/fL8bIeBt5enpimqaFjjxNE/NtJj8n6eDqehFgSQKAsaKZpkpnq6iTr8igGliFdgIAE3F+AKvjp0w7JLQwUtlF09g2qnnOlcJq0Neuv937Rt+uZtUEemepRacveE/wakjYFrWuOeNYTIUMloKnttFzZg22Rmnuct1q8OoDvgsYG8hVABIJ8GIMlHPBd8L6sV4kYFLoGKrrCP1RKcYif/G61o0Veq8YhgZwosN23tK7TLBqeISAmEGNpCSY68QILx104x0W0fcFb1cTISNckZKTJBWp8PjpCe88f/93f0+/u6e4gb6zODdzOL6l7+749PE7Pv/wA/9X1/Gzr95gT45aM4O94ssTfbAQL0wXx2wGzOEeUwctAguhEznBGIXtNewC9+/esr+7x/uB8+XMd999xw8fPvHtt9/J1I/Tlf/x3/8Hv//dH/nuu+/IcyK4IBRXTTZaRyVr8tMA2mZuRq3qBSJ74nK78nQ68f7zI3/89jvVQoclJhkrAPB1nuj+F46I1wUcFDZY5AvQ4UsF3evv+dL7fulrLTFrP78thF+/FpC0SGfc6XpsIxLb2zb/pSZ7Wt6t8iJWYarKxUT+oFek17X5fK4VhO2PFCDtlXMDMFoSKNpWcWd/CUa8uhEsHiD6uxrLAYxMXSqZXBD3cqNnU0te9C23xp8NsGivpcjdFOVoEiT2NNqp2TAoFkCklCVRdyqneP28tzF/C0y0ON2+/hrg2Casq555o1GuBW/88u8Lu8Q5nazwcs3JddklqXv9+74Ekr1mVmzPrnZ9W7+Nl2tR7l2MkXEcdQJEoBR4eLij1srz84nT6cQ8zzw8vGHoe5KTIirXRJozLji6zlOyw1sp2LwLkkQ7sL0j1knHYCsYhVnOsXberc9FGEBJC451PVTK0rnUzbAphIRZ0SYfaN5ihGb88l4Xmr46BGGhlCTrR8K32ej4m88Ki0s+SCIszA9wDu7v7zHG8fHjJz59+sw4znRdz24Y6Lpe/EGMoWRJrHMuKs+SPXbY70j5gfP5xN31jlIy5/MJp4VV5zzzPCvTzatzf5OoqYSqFVVqcBv6HbXrwQUohmwcbTyhMQZHRQbnGZGC5czheCR0nTJFDfv9AWk8aL5hhHl5uZy53Sxxlk58rUUKUDylJsZR7pkxjcUruYmzgZSyrn+EMTyvlHKZcBGWn7vdbsv6t06o5rlUZh2le3d3xJnKeBuh6xZAp6TVjDTlTIpRvEycTsTyFdv3y36x1hGMND1SyuSYIBvGOap8Qdg+rbiRJqVORkhSBIHBuYuwNKylU0lRe077/Z7DYSfGhQpglJJ1bHrF4pShVgid5+Hhntvtwu1WyWmmVjHFlpx2ZtgVvvnmntvFcDl9wthM3wV2u55UBGS83J6xnRjw+9AJELIFLxTUk7NbvASkxJd8LHiPtT2l9IwhYI1hv9txd7zjeNgvxTpYacBW2aOJiHV1YSOUUkk1b84pWYPNoNlaI+WIAmSaWWGt+FA2v7BcGotPmlTGOJGAWZZn8xLEWBuSxqo0r4EOiFS+xRjTGgZFJn0Z1xG8xABSk/eJD1Hba1kZbqtRaMvR1yaKMHAkvtR26Bmz5I4LM2PJPaz69rR3ZAEVDOCDJ8fEaX4ia01R7jKDCxx/+gZTYLzcSFF8wnbDIB5bcRb2cLWKj5ilRqA04/6i9d+Xjvof50o/yrlenT/b8whY4taPz6K/nDNV6uKFIm1pGZE8TbOc/6aNrJZGodWzQJ6pB++oRqbmpJzxaiJqMaQowHmb7FS1g28a0FLbZ/vy9cFfC4BRgZIJruO437HfDwxDUMdtoVBdx5E5zuS6QQcVAQpdx24/YDuYisXVwvl64cOHJz5/OvP0dCUnR7VBzKv0Rlkj9HbTtEpUmuNue9kqlHNEJk9KwrJItShNVIr2leT4Mllzmmjl0jS+ddGOGxDqk7N4a7FOxu9YuxqntM1aEQmHCwFb/ZKAOAUSzPI7qx7u4kLsveNwPNB3AgiFLjD0HX0Hxoj8IcUb1/PMOE6Mt4nT05kYs5oJZjU2yhSbqL4ozUxpSUpjF3f1ugS5BelFGDXbkX8t+DSDuFUus6EzWbuNhy825599GUNjzeRSiDktQTTpDPPm1j9NE58eP3NW40SQw3qe502SK4gzmpSbJZlV/XdDdW0DbNBiRA6h2h4yGhxtoBir7IaVxo3RQ8GuII/1Uty3Il3Aqm1Hy2q35OWYQau0cad0elkHZpELmbbeVNrhrNFupaeagWqDBJPaqGZyrUIrlIPLWpni0/VqAkS7bjGvKpooOi9rWIxWG0vIiC7OdrInlkK3deC8UOGVtZSNaK29c+x6S98LhVcm9cBKzW9O+bJPiwGMpViHdQEMpAw2azDOSQ6PAuM4MyXPV2++Ivd3PEeLq4FZPSSuV4P1dxz3M/YdBB/4xU9/Qn/voM4Eb9jvEnsPg7c83AV+8m7Hw50n+Igzlf1+h7FwGxOuwOG4Z3//hm53jwsHHh+f+c2//Tv/9D//mffv34vHxSij3S7nP/CH3/1JEnrj1oRlsydWH4C6LLqq9WYuzXck0WUx2frw8ROfHj/z+PRI3/ekLB2cXIuO9zLEFMU7hrVo23Y9tntzZT6szuF/Dqx4/TOv/+3H2/o/Bzm2hefr4nNbgJdSmJPs7873UjS5lYnRmArbArXpT39UyFqJtw2krLVNz2rvIbFeCiZx8W50+u21rhMTKt6VDVa4ld3wgk0gWbCYEWOly55KxhrUN4AlWasIKBBjVEaJk3NvEzMacNDMOZth5+vn3BIsYY8hyaHe15wzIYT1WSnA2ozLqlnP1+0zav99DVxsgYkW87aMiPYzW0beyqiwL5/hK5AEeNm9M60D+mMZy/bv2y6ec+4F4LN9bT/L9nqXIla7wpfLhd1uRwjSkcYZdruBWitPT89qVOkwxzuGvsc5yziPTPMEFIoX/5t+cDKqMlcybUymXQDNF+dmXZ97K2QaG1KKhHWPN0ls3YDasjjbGtfzTF3qJdEVMGOZSFGrNnYqTYYERj28qoJx7f11XZjG/hMAH9R0r5oFTJCRuJ6Hh7d43/H09MQ4jpxPJ8bbyDAMC6NAzE49zlsG24tEJqXFEP10OnE8PbPb75X569l1PXmORDV27DoxTI3KSuq6Dhf88l5oQT6nhM0Ob/3S+WzmsMZapbs7XDWYXMBW+tDz/Hji6emEMEbELFoYxnG5N/M86r3UcaapLPe0dblB9kUDJW7Xkev1sqx1qPq+DSBwy37YAoohBKZpYpxG8IH9/R2h70kxUnKijb+8Xq/L3swpM90mYko6eaiNnJ2wvpeJeH3P4D3BOpGhlYqrMiqy+o5aZczmPM8KOkA14jdmDISh53DYK0BYNA8VtnL7XKXkJUd6+/Yth8Nep3JYNSeOOGsIyt7MSfId7yTfSuknnM8nrpcTMd7ACLjR9Y7jneXN247gAk+PI4+fR+I06roVg9Db9Yyxhn4/MNQdOVbVwq4FsTFSwxgbtLCXppLBiqzFeWCP9xZTxZNmaIBcy7ON5LTeWmHAYkVGYrWBWRvAYECBuy0oK2szgUk4GqO3Acttz6LGi8q2qupzpWzvFdhcXwJgiPTZOYcP8mxqrC3lZbkRLSY1YNV6mf5YAVsoWaTUNPC9iLmrVzP59rzXvMTo2SxgoVly8018r+qS+ALEFkBSQFTJL7eXV0oR4C/ONDloTQVixmsO7JTpPM8TIN4heAe5Lqb2bZqVIEaapOlllFYz+Tbz8mVDpDH1X58tL+/9mm99qUH8pT/b92uft9U6jQXSmBkyClckxJJh5PWnSpJcs6LycY9xwjAvFR3LHfBWGr+5FDKGUl3r5crvbZ9xmXTy5ddfB4BhYAie427H8XBg2PW4oLq2ceY2jlxvk8wONpZcZUSS0FkCDw8P/PSX77C94Tyeeb5cGb/9jvcfPvH8PBJnizVinGRc0hhSqDhM3Wh/tl2F5WFqoVAE4bO6qpMeyKXKVJDWcZekUZO3WqBaRd8MaCe9Id0yAxd1mxXtlDHNlEyeYS6r87x4XWz1StoBK3LgB+8xnQSUNw937Pc7hl3PbjfQdz3WGu3SZqbbhWm8cr1eud1GpmlmmiJplkNRNEpANctnrEa0bFvHdWc9IfilU2drXXIcWOUhTe7TKEpfooC9Lhpev/4SWgio43DbLFrUlaJIMgvrY46R8/XGNAmTput7NNPH+YDZO8qQ2d/fKU1XDngZIRsW4xsQ2ZNzDpyFakW6ZO2LMYzGyLg4GzqwbWyUW7ob1Rg631EVGe9ChwtdixvYKuOYjJHnZza/17BdC2qyqQFYDsm21sFQVA+t4Jjqi60F6zpichS8UOlrM/czAibkqsZnIp1J1UAGg4xxLUZ8PEoZ5Xnq/WwljwQi+X6MmnLmovfQ453cm4KjWg/Gywx3E+i6nm4Y6OwdNXRUIzpcmbHekrakJnsySrjp9nNbewVqlhFtXegxfsd4UWPW2THcfUW4+5pTEilNZwydMcQ5McUq67wbePvwBu8c33z9jmP0lHzDMNGHSmcL+6Hj63d3vH04YMhYk9kfpAN0uV7IOdN1Hce7O3aHI0+XkT/89k/86l9+xb/+5jc8Pz6JVwkCqqZ5JkdJ8oZhIISONE1MU2zH2xKnJMHIm6/xYp8Z3VeFyufHz3z7/fdcbzeMNZpgFEqOMnEkZeaYCGEFRSQBkA6C7P9G2VzD5creaX9/CV78OflX+57X+/vPgRx/Cbhory1Isj2kUy74YLA6FthYYfxIp0YKpQYg01gGxoqcCatJ2Vp411KXSVIN1Fzui65/Y9YiXGj0qFmW/HzOYnpljKNpfanK8tAjXAq2lSYrDKz1aef1AbVcQOSMtZByIikltbGxct34a2wAha0nxev7/CPWAdtOm3RhF4BDKcvCOlyd3xvY0e7HlmWxyHfaZ9wA269pwlv2wAsAnKrskyyjQvUpFJ081IzEisoU1gRvBUC2csbt79l+fvkcMsK0GWq3BI9NDw9aQa5ATbHK9JTPMI0jVUeV5yIj+46HPQZ4fn7mejlTc8beP7A7HAg+aEFciXOmevG4sqBd60qumXGehCC4zXGMEaO+5XmuAPPqcyr3M8aI81LgSh6ivh+5qISq0cKtfn9aJk7UalCx7AYYaQkwCpK86FGw4iNVjLid2eQFrfAQ00Y5PytZZgBy2B/ZDXtu443Pnz5zuVwYx3EpYkWGi7KFxEfhNgoLISmD9nJ+Zr/f8fVPZPJHjnnTPBAnvLqJK179EkBMu2sdcJ1jtgVTCvPtIgwoG+hCh7WOSf0LipNx5K4a+hCoVabT5Zi5OxwxKqOepkm6lM2UVuNKSuJfUjHE2ApJuZteGY+Hw479/o5TuPD506N4SQRLjJMYyxY5l2uFabrhg+f+/oGUIik7hl1PJctI9ZwoJWFMj9DnR9I8y1lQxPA77HY4zQUxVtkNkt96r+yVqCwwjRs5JsY4yRQnb+hCICWLNTNG5bVrMdPAU8Mw9PSDXEup4G1PyZXr9UpWSUrLte/u7uj7bnNuGfp+gFqEpeoC2YpnVAPgv/rqHcfjgdt4JM4jmCJ5k/ekeOFy+YQxcHc8EL3H7A90oafkDzydHpnGia7vGWqHd1WMIquw6qwudIeOm00szCBnhQlRtAF0OBzw7iC3oMgYYErZsLs2AG0t2oBYz6Zmitfi27LvtiCCuoyJrMJQSTjHkucLaNAYh0bOqGpe7d317HsZI7P+XqN5pqENaLIbCZ7sp6DlcJFcVWNL9XaRqUsSUvGohDhFyjwLmGaV+Sc3RA2wV9BajkZl2r1KQ6RoVqYxUq9VcbJeWtMyoGAWM1QfqDkxpQs1RtI4cTgewRjm25XxNi4sL8kRWp4KTZLeHsDS6DRNWqKAr4IZTSYsOZzRKS4vz+LlM2z+2z736xzoS9/7pdwptRpCdObLWpCfE1PyxpJo4LTk903KLwz8mkSuXkqhpIi1E8mq85GxFBuoduNLsmnI/gXyBfDXAmAAx/3A3WHPMHRLIE6lCHhxnWTh4BadNrbp/iuH44Gf//wb/M7w8fmR5+t/iLHmNIHxhK4jzZYYM0YcCVmoKcZIkW6tgg4vTWJqRZzsl9NWmBC1op1QiQbO2uUh5VwIzoIRx2brPd56fBjo+l42cwMtUOphKqQ0EbMEM6hy6G4AC1kcG5MVI4Tj0EnRezjs6I89f/K/52//9pcMQ0+pmXG8cb2eiClyuZy5nM7EaSJOo4AW2sWS3yvUn6zoJkqtLc2NDUUjq7gaxxoR9+/Vk2AFV2WjFu0+vEYMFwrZBvVHv884++J7/zO0Uf6/o8F4DTGVjdWOPjk05znivefnP/+56NDzSlXe7Q5c//7Ch/uP/MM//u90ylzJeT0Ql0LLmEXuIGY1LF0WY/3CzMAIoNGM+lrnyhh5vhXUr2DtzlnnJMgWGZXn24SBWfXAIKguCYrBequUYJ27rIfkkjTqIWXUmzCnxDSLltRa8L6D2oMyQSQ2qW7ZOBnr5Sy5Qox56bxtfokAACAASURBVN40WmYrRHLOeOfo+7AUzhrllgPJmkRvKjYnKjoHPXQiRylQqsX6ni70dMFzOPQc7o64ocdYwzTeFnp1K5ibFk+kJ60IMvheDO/SnBnHGWe9mLz5jjkZpgQm7PjqZ7/g+OaOOcGuM9ginhsxJpyrDF2g6+8Ipcc7x0/e3XOcDWmSID908O7hjqHzvH1zT+c9t9uZoRs43N1xfj7xfDqTcuF4fyAXy7fff+Cff/Xv/Po3v+ePf/oT1+uowKbGpIJ2/nraFItR41rdPNu2P2QNbxOPtcOPovoCvhaen8X8bo5RgVHpdFFhSjNRu5MxJaWUvz4w27Euu62uJ9uPEPMvHayvX3/p37av1wd3i5UvWHObArz9THuVUvCeRcq2lYpIDmGXpKNdl8RbHVldXhb6RoLwcl1rAleX62pForNuoe0LKC1sJomNZQNUKyvKrKOf26t1zF/dPNkDvIytIImaczL+rgELxloFpRND3y8Mu1a811oXVlz7fQvAsBTpqLZVzmDrpEgZp0kKFvUQMQhwWExVtmOTImwBHZbf/589+/anAeberwBzey4ppqUD2/44u4Lpy+/P7d6thftKzV6vaQtg/KhrVSQ5W9gJ8tXV1b626y7KshHApLH8nFWPmSxnj5w14vx/PO4ppfD4+MjlclG5ncN3nXg15cwcZ2IUUNQriNL1PbFOjNMNb/0LQK39nwbQOGMoRkwjJWkWZuT1eqXrOoahZ9gNorPPM953VAo5sTQk8AbvWaRXC2CBNnDqygoVfW/S57eCrVsAaX0eLxa5/kf8i0SWJ+fx7TaSUiJ0AhS8++odb968YZomLpcLOSdimmn+JSK3tRyPByoHuV8x8vT0xKf37/nl3/4XrB04Tc/c5omY4tLpXdbTsuaEri/TJTz7ksg1Qi3YXJUCL4VnNTKWsBqwDjyOIfQ8HI+M4yQGmn3P/cM9c4oKvnhiDIyTmErKJDMYx5E6beNFXVkZUVgZ5/NFcyKRmYzjxDxPImW0lqTd0lbYC/hU6Psea+0itYAJr8yL6+VC8J6Ss1xDkSItpsQAeCsyrVpkaksrtnJMzAri7kKvrCcxsaylMqVIiZJ/2tKm1bklPlOr5lPr+YbRuGMMOW3jifiItWe1xlu/xI5l9HAu1KIeHMrsbtKV/X7Pbt/rnhU/r1wLcy48f/6Ms17mPoQObwPDcCSnytPpzHSd2e0iFggmcDgMAllsYghZO+6mKJOm6rjpTCwi9xKGjMaQIqxau4AXLfw3GVZjXDVAS0xHs4KNbV9mZaGK35iceZIvZ83VNY8w7VxKa6PR6Ehu45cu/ZZZ1v68ZPNkaciaxnTLWF0LAnC3zyHFfUyRWiIG8CpxllqqBXkWDw7jpL5q96HF7VqFcUqOSx2wBXHjvJke1fLxFvvr2ryrVjycXgD9RWQtVe9p9Z7b9SrAX5TY2RhMLda8yA20jsxqedDODrOAWyzPiE1D5EU01JxlDerra1tTtb+XV9/Xmu1lMzxhe43GGGzdAGGt/bi8j3ytlpbjrMCYNWIk3SZ2lVKpuSxrv927tm6b742pK6jTmp9mcx5/6fVXAWAYDHd3e7yyLkIIzCny/HzifLmI0Z1xOJVXmKJzk5XW77qOcZ758MMP/OY/fsvv/vBHfvj+I9OcKMWKztAYNW6TINkOy1qa+Z1SHqr08JcgqU0tp125IhGURhHIrXtkBJk0xuE6S7CF4GXOunWB2kbuIQEgp0iKUY19ZKHmAtbIQdiSWofQbkTCIN0Z6ywhiJFK3wf2u91Ce2xPNMbI9XphmkcBLS5nxnEURH+O1GQUj2gaLFlEUJizznE2gqAJEqgdXAyNtmesghbtObaAhLy3rTIOdTEGWpL7zfe/Sgrb11oivRbBL/XIrxNgEDMs74TmmYsYirbn43UEYjWw2+/EAbnrRI5Q1+TTGMvNTvTDwOHufjnUrGtRVrptTkG2XGGeEoUkWk0r866Nug03F11nHTVPBJ37Lr4pYtCZUiZ0QUEE6ZDb4PFGGEI4R8bJ8yjoIlUfFcQAsGah/LUxmgXHrNNdhN0DVHEwttZwvd54//EHxuuN/WHH24e3BA/BI0aiAq1BziLlqIU0CYDWRhI6U0V7nSdKlrXZBaE/Uma8gWpbYa3PsDqckVHBIitRwEQDo6vC3jjseh7efsXhcMQFeXa38yeuN2HOVKAzkvzHXOiGgWotk4JxzjnxsjFIl904IEC/Yy6F2UwY1/HV1z/jcH8H3jNlQxAMh53N9B4G53H3R3ZuwKeRfD1L9z3PdH7Hm8MDuwH2g2ffee7vDjjrSDHx5s1XdOp6fr0lfHfEYvn+h0f+/ff/kz9+9573n545NYBWD4BUCjlFMA4XpPsp1NhKiolajYKlLz0CahU6aQWZWrBlO2gBNfQ7hmHP5XLlt//2H/T9jufTSUESS+uwCEVbzNe2+3Zb2Lcu1woq6L4tLwGF7cv+hQNpC05sf+e2YPzx/l8P1te/c5s4tHvT9z27/YFht28tIDDS1QWW7lVL+JbfVyrVrr5Dcg1lkxjqObFhbDXK85pwbz9X+zxWRtJhFjmE90Izb5+xPcdW3G4/vzFGWTVgNtNorHNLt6r9/AK+wmaW/GriCTDP8wLUbgHmxl4rOuHIOU16pZUqgIa+p7MyFawlY6K/XEGSbQG4nXSyTbhef1+jhm+f7daj47W8ZJs4LvdE/94+VztjAJ1eZpbY0dbMPM8vrnW7DsXz4eWYt+3Z9aWOVyvmt8BQ6wrebldqLS+MFLvO8+7dA+N14vn5iXG88fXPfiajMNVfIEaZjlXbdC8j47B3+x1Rpwe9OGP1snLOWOeU2RVESpZmhqFnv98TQuDx8ZH4IXJ3/8Dd/b0k+sbjrIDXrTMr8rZK1wkzVkZZ6lheVoq5MXJOmK6DABSRYqSUIM9ikjd09F2HxYgUQZ+VSCwNwXm8CxvJkyNpoQLS5S1FKP+7vXgQiZx2jQXAIhezCiLVkrjdrjw/fuLd23fc391xej7jnMf7xjSRbGnY9ViHgk3CNopR5II7EEm09SQrI1KnlDDBcYkzMRUoDtv37O7uwcLj0+fFx2wap8W83hijuUpoNgyyj5xh2Bmc6eTZk5mmG9frlZRkD99uwq4V9mtZ1nYz5t1Kets6/PjxI9YK+6PWunjRzSVzvl5IVLogbBYfLEUZMCVnbterxAQqfSes1hSTxJu7xrJF75eDImBJNZXb55FpnOh3e/VzqKSScHRLfh1Cp3IHI1NKQlDPFU+c5IEK+DaTFYRo8h7v3SJbBnSMqZfOeFW2nWET61AafybGmeZjlErCYsixYIPBGpGnOivSud3unof7rzhfHrldItd+Yt9ndr1fGMHBiWfYnBI5yXnunBXpa60LKFxUml6r3F+qgGUGdO97vO+YYoQMLqinjWldfi1Valn2o/x/kQO3/HqpT1GQ0XjZu9vYqnm1sTKC1YcGzoq0ROopYWiBwTfj2UUuWRQMc4s02nl5XilmaYqViUwkqx+EQcCdiiPXtHg9tXi2jfXt7+2MqaqfdV3AG5G8tDwhxgjOrqw9zQFS88ehLAW2cyptKIWu72TMfLkwj5MCSpZ5msg1KbDTZLaVlEUC1fc9fd/L9SJrq5YmE2mfRQC5BR7wYujfACBAzEM3IILhJX6xraVKfdm8qQ1gavev/dAm917aYZqryM+2UeftX2WjNNCzIr6S3jlqFUlgy3dEuizXIf1oPRdb7FXQTRgeShAwa34oj/vHTJPt668CwAAIncV6KYxSTtymiXGaZFEVvWkYLILc+iAL69PTI//3//NP/NO/Gj48vuf7D99zvozMqVCrxyLFIlVGUtQ8yS80jQItdHZjTHt6SpUqC2XKInOUc5FZ8csf2oaXhNGpWZF10DmkgANKMcTSFmIWh/EFMjALY8Y4QRS9lc9mqnTivPfshgEbLMF5ui4w7Ab2ux29GiLFqOyK5zMpRf79337L9XplnG7SQciq1a2yeWzpoDraoqz6P0Ue5D7oZl67vEYAoQW0WLsmtIStAg3BrSItaIt2+/pzBc723/+c1r65Sr9EDi3GG3LMGCvUu2EY2O/33B3viDoM2djWKZLnlouAUcNO9LJUeO6f9XAMi6FZ20iyH8syugoNWKlWMHn5WjWZxZTGOpwHVwq36aaUY8v5cuV6uYA1vHnzBjOIv4LVQOP0GaQ56fz1RjMHU6uaiAkzx2ixIqCGMCXQ4JxLgSQTE2qu1CTmfsEPsLP0w4Dznr7zKmlqcimVmZCxyLhd68xioiYd5LJ0R7wzWNvMAzNJxhy00dBybaZSjKH2A8U59Sw2WNsRuh13hwOH45H9/o6+68ipiOt4jNxOj+Q0IRik7EGXk+i+r6PQDLNOhQkDXhMCU7zIszx0bscwBIzr2T+8ZXc8EoZOutOqBPI1YfKV/c6zPzgGd6ArM/M5Mhfx8djtOr7aP/CTn9xxf9/TB8f49CiJt3WEXqbzXC9Xnp4unMfMbbzx6fGZ3//+T/zx2285X28U48Uhvq5Gb9sRX8to51SXLmDWg2VrsAgv98trpoLBSBIsAYlxHDk9P4tLPIY4R6hSeBar8h5fSakoO2gDICpS3pIbXhyqVtk+LwGHLZCwfW2vcVuAbv/+GsB4CW6sSdbSOdiAJK1D34ryvu+FpeNk3rndML2ssWogtYkp7UCthua3sv1MVZPf1hGTbtP6WVMqiwfNCtJaQmhFrjzzFl+MZiUlr8Aty2ety30xVhNIjd8LuM56LUIwNAu7wGzOLQEXVvBpO4r3NUj04rmZlS1X9FpbMb+970XRuMYyMFYB0VfPc/u8X39t+7sbwLFdE6/Xinnx2SQuOaXi79XboIEFKUXGaeJ2FRmBqKTq8tmAZd1sr+slYCeaeTEtzdIksU7MilvnUJ/R4lGjo2dX4K1oRyprcZDISdaDNRC8xeConSd10tj59PEDh+M9oe+WNT7PM2mO7DQvsEDMEZLRSVptWpYUji15l4lMXs4fA/M84b3lpz/9Kd57fnjveX5+kmtbwB3UU6kZPG6TTrn3Ukc1f4XX9GMtGGvLO9gkzCL/Qa/XV7cku+h0q1yKjFlUPb91jjrL3xuAKJITS9Pxr53OVVYn+Y4UUcF73r55iwGePj/ijePN26+oR8P5fBWQoIGQGM0NZf/mXKlFwb2qQAzQeUONsxZGmUBg6L1GSMP+uGN3HLg9S/fWOaOSFc1LjZqxK+Jk1Eum1IILjhQLcRKpgeRigwISHW0KVZMUypSAKtMdWsFOY+c1UGHrUyZgzgJ4GqPSUylWDvudjCl3njjPi3zIhyBj61Okppk0JWxwYs6567GNrTFIUyLNkajTViR2Jkx1LUwpSCoFWZoTzhkGzXud84ts+Hjcc3o+E2Nc4uM0SWNgnmeOxwPD0C8SZtOMwK1TxuDLIqk1XYTCv67xahzpNhGzDA4IptMivoHEHQ/3D9SauY0Xzqcr3om5ufhvuCXGL2eVMtRalJH91aaGbGKhldzD1Mput2Oe5yUmirzL6EQPz93dPdY6MQJfQARevZaStW3AF6wK8Z/WvavgSyli6GlKZnt+NJnDy7O6/TGg97u0fVLkeVfanlKwRS/FtK+BNl/qCwBjG2+WeEKTt0qMsSYg5ZlRJc3aFBgG/6I5Kl8XbxkRsOi11fVMMKDN4yDs87lQUpIaxxTJ/9mcY0a88nwQRnVZnoEht5xda0QB0NbmRsk/buYsxv11/ezbc+/lZ9l4R5nGdFm/7/WZtqyIzde971hvefPqWvPL1wxXAU7WpdVyqvZqU88agKHRXpgWy3Ns3oFmGVDw/wsAQ8CLQi6JOCfOlzPny4VpTsQo7vpGNxLGEmvkVhLpc+TT5TOpJm7xxhhn2czWY42XBakO1JhMSVHex6JoT5UNUhu6tJE76GKp2o2utKJNk2LXpAFK4VocuA01z0SlAaUkI2Qa1bRWNVi0OofCKGZgpVMevFkKymEY6IdePCz8di59paTIJc5cLheu1yvn85kpj+SUef/+vXastsCChoRqqWxgV1lCkmBWqLmNaxXZATrZhKqMgAW+eFmAyNu38UN16dBVXibF/yuv1wDF9uuNfvt6YRsj2savf/ZTfvnLXyyJnbWWYb+O2aoaHeUzOqwJ7PcHHe1VCN1HMFb9VpIygDTJryK1cU40XFXHmi4awlKVnKPpukFnaktwLVm0wlhDmmcoMrosx0TxmWJk3GtNiaJou6yNIqCBUcpVtZSkpnwIimm18ykJnIwvWgOPFqFunVjTipauC3RBDIlKTmB1DJJp7BwIVUdMalIv0qncSibpyKlkVbwtCjb4tWNdrQK7lmI8Ixas6ItD17M/3nG8u2e/F7dwSuF0m7jezszjBGnGpStOace16PXkglV6YKkFDwTbEWzGVJ19XQ1GwZdh6Dk+3NHtj/hhh/MWayLWGDpv6INj8JU3g+cwwC4YBu+xuTKWwHkUuO+bb37O3737hv39gGEiT1fGOeoUFk+cZk7nC58fn/n8fObjp89898MH3n/8zNPTmXGeqdVgnNBSNWfX/aojejVZj0kLn7Iyiox2NctyYsiTWEwFzVp8Wiug6DD0BO9Jc+T56ZlpHDHG03c90xTJKUt8cZ55jtI4R81Sjcj3tgdjzllhZVgSoSqHpd3Q+rd7dfvzr/f2tmh9XcBui+mXIMIaI1pXfpuIS5dqNT32IUisq0LFXajgGiMbHdXx2nNB7nFt4G3T5KvOf8UGWrxVIGo5mNu0IqVJ2zX2toRN9MFCs0Vpl6YViRvgoE3+eE2NXYCkurytSAS0s9SSg4L6Z9Sq2tOX4FCLs9uvbdkYknS1s/HH8VmXHwVWn55X02KALyZfr1+tW7z9GWAxgv7xq8lcBNwquVKyo+REyYnj4X6R8YzjSOcd0zwzp8I4CnW5Fffb69v+7vY5WrOj5Lhei/fSlXXSQbPaId6+j4wsbVIYS6zCmKo5MU8jJad1vKozAgQMHQ54Pp+Zxhs4y9Hd47uAtQJOijdF4nY7v5D3yXNL+jxfnq3Nz6DWyuGwp+87vI5OHscR7z3v3r0jlaqmijL9Yx0dvNLiQWJsi00GyZcac0Hua6OOO2HnVWjDuGxtk2Dk+5w1WBsEDi0QixiKVy2wQfZMMysXkGIj29LOaptosl1723vQeeme39/d4Z3jw4cPfP70iVyg7w/aiLAvtNlzjIQYsVrgosCOq4bpchHPpmGA4Ml1pqYMCCs01sJXP/0Zb+4eGC83fvjhB8bxKt4m1lJropkLe+/Y7oyiuWYIPd5B51kKwVISw9CT1bx8nsXXLKvXVKwZTFIPLj1fVAradYH9fq8sHJlCMo5qTOkcsWR88MQ4UcpAFzwpeI6HI+P1xilfxMsrBCpwPp9Jc8IbT3XCKukOwuaYpokyzZha8QjF3DsvXfZFbiwTm1JJYlBZC847ATJSxql5+DTNhM6ws3a55q4Pq8TAvBy13Pa+7FuaUp+1SbcW8aUVmAu4BlTJZeIcKRFc73XKisTR3a6nckeME+N4Y7yOPFUY+o5h1+P3e3CLK4+ynPXXt2VmxZDX2gZuvwhvm/WLnu0W1DfJsMqct/5yP+og0hhZ7X20pVr1j0rcq+b+lbWQt+qj1yZbCOvBLQVoAzrlEKovL5wqrHdl5FV1Ga6IHDSTwS2nlBgTA1XsOF9/CI0X6UV8bZ9LTjuN2Qo8tri+Zf61OB8Ci5SuLlNXFPBUfw1nLN6ox1SFmCdqLiSTZNqiAjm+84ReJvXZ4JXpUGCpu8zShFvzp6p/X6fE1CpgRluX1lis/3EjCF7mVtt8yZhNlrbJvbaNn9eN4va51zPQaOx+mRe0///y3qN5YVVTc/mTS1kY6S0HKboeWI/W5V6YBqr9hZrxrwPAMOgYyEyuhjllrreRcRJ9Z81IQliqzJI3mSnPTLXA3Ci0DcXU4jwDJKgyF16YMmLqBRWygBhmgf6UDmNYFpQxUoCnIt1JmSwh1KcQxFvDd4GUCykmZj30ay0ERRwrrcgwGO0O9AHVyFZMLXgr1OXQSTHXhSBTHoIXRFtdtDOVNIu29Xq9crvcGGNkTjJBJMUIQRBrmeO90VBpJBBUUZKQBc8A7YObJZi2IG5E5afPSe6tINNrMtpQPgAaI6msi26L/rXXX+rE1lrX7uEXipityVvbhCEESoaf/ORr/vG//iOH44Hr9UKpVVBQL6OySpWie53pPOD9Duu8dgoLzslIu6x/StWkuF0P4nFRigY3DTytMGlofeL/Ze7dnWXZtjOv33xlZtWq9dj7nHv1uFJHqLuBIKLV3RHAP4BD8Bc0DhY+Bh5gYONABA7YWG3g4wMOBgpCatTqllrSlXTuueee/Vxr1SMz5wNjjDlzVp19JCJwbim2zr5r16rKnDnneHzjG9+oyWZpKLJ1gUJSlXAR2aoKzTlDXLMmqRnjHINz4AR1L9C0WGwppCh0Sqejdp2TioIzoq4dl0WVoLd5z/JwLN4PrVrlnKeUhPFy1qzzTPud/lye07quqmAtCUlKgDrfXAqkSCaLUK72KHrnsF764QR5F/G15AaKGXHjjt39PQ8PDyK0FQZKTlzOL5xfn7mcTpS4yBlOK0H0ihUoym1ykLCUAsIgsAQ3yJiqlMlYjBsJu3vC3QPT0yPT4z3D/g6sGNlgMvtgOUyeuxHugucwFrxZCS6z944wDmT3yOMQGELgZ7/zM+7CAXRMoXGW+6+/hjny/HLkfJ75+PmFb37xLb/47ns+fPjEp+dX5jVSigj5nS8L1iakCFNa60VNLlMpOukoVRNF1moK7f01cZbDJxX9DRmvScwYPEPwDGHkeDry6cMHvPPsdndkLJQz5/WCoWgLgJWPsVwFf32yexsoGQPOS9+tddc9mP05v60s9H+/BSlunWT9+QZQ2B/8Xt+nfpuEAqCaMu29nX1xVgV7fwBgGAUEac62XwtrN1BCqnsK9ipAUCmstWq1rqswvjSws67aW7G41a5V8AlrtAK2qXJ3cS+1bc8URP0fWtBiMa161fydghmVcnu7Rr0o5pVdlsxQ/GXODRcXMC0RVWTY6b1IpVuvzV7rHtXn+SWmR30eNYjqA7PGAOkD9LZHCuTUEuUKVFQg+9tvv21jvPt7KmYbW3sLlvSv6/XIOqXjmu1Ur6uKrtYzGELQ1pzQAJj6fdIGslVU6+c1oMA5grVkMud54TJfeE6J+4dHxt3ENEn1fb4cOZ+PQJFxovt7pnEiD5uIdn+GrEFHd6Ig3DZKtwKAxkCwQsGfZxkBbex1IJyLJNHOWazxGntsrVvQCQIWicXkSzpNiSy2sI5SdWJQpI86FXKyApCWTAiuAfM5y6jXMEgSVW1gA/2o2EMtOGSsxpPynHUfWMPhfo91X/Pu3Xvev3+PH85txHo/stk5EQe11OkCoj21xoWYIkNODBSyc9igCbUbGKzh6fGRr37yEz68+8h333xLWTP73Q6y6IzkLD7YYIkUVfFHgxFhNlnr8c4yhG48ZRbxzqiMWx9kwsY8S4uRMcLoqKy1W/u8PW9hpSyLMCMwhpRkIlUpiZQjIEWQ3TTyk6++5ptvfsGn52cVfvVM48iKwyQBXS7zheEytqLSy+srtsAuDAxhYPAezEBCW7tMgRVyiZQS9BqURWQcMRaNNzy7/R0fP37k48ePTXi2MsJ2ux3OOeZ5xtrNZ6WUdE6oq9AFjQ2EnIOsAHTR2C2bgsmWuGROrxcgk+8yd/sdxgagYCzsdoGHhz3reuD19ZXL+cK7799xuN9DKez3Mga16KGzToTXbYasOUkVcKygdM65VjgwbNo/y7KwpsThcM/94xPnZebl5ZnLvPCTr39KCKOc1yaqWEGFyr7W+6WCh5r8ovGVKXjNVeRMZSmOWBF/z/na924v9Q1tn9VV3tg/NdGoIEjOAuig19h44QWK2Vod+ldlh5T+f2sMZWwBo6PSNUeWolDapippMm1qXOxkQhfF6/SwDTzIUUSgGaQQZI3lXOCyLhISaDXaeccwDoxjwA86hcMgOaRxGOPBFWrxRTQX89Xt9ZOBSpYCqZhLRbkaAFU1G3UPmy0u0AcLup/qGW9gTj3/+r5S+jNQrvzrl4rFm1/eohCJpYBsqAKqfT5J//2I/k02BSq4gaFYJ3kORZ77bfzWvX49AAzEUK0ps6TCZVlY1tjoMqYGF5ja3SA6EiYiTCaDMaJgW5H++hgt4KyohedYAwb91zaSRhZQCdyKCgkyKONgwnahpj7kwppWlvMqyW5KrTpKKRRnW3Wyzv01mkiLDoLBG9ERCMEyjSPeC+I+TRKQgAQX67rwqw/vOJ/PnE6CMq+qbyAJtGVN8cqIZO3Psl2PbkVtMUYDjjoCThc1V8hFNqMgaUZ+brYAO9MFINAQ1G2N5JlQFEXjh4Fw//cvBYqCNl5Xwfr+7/rHe8/hcOD+/oHddMdud8fxdOT55ZmKhOacWRaljFpUcEvmvHu/AwLrKmKFsk40hfjbZMoY1VKp5rVUCtTN6D4DvthGmyZlLuuCdx7vRzCZOr40pYTzOzGSxcnoIWQkm/ECPmVleSRdb5OFZeS8fAZGMDtJYDLrImOHcyoE77XynG/6uLeqbc5Cf4wGbBgI0057SGWuubEGsm0orFFQJ2dhPqRcSGScJrHGOrJ+fi6ilJ4SeG+wfuDx7dfs7x+5f3xgGkeZnX58ZT6/MJ9eWC5HXF4ZnMGaSMoLMaEGTxNDWx0QpKIgmvNgnSjVW4e1I+HuLfdf/4Tx8RF3dw/TyMVkdmPAE7lzlsfR8BAK90PmMECwMrs8+MIUvDioybIPA955gh8pqbDEGeszIQzY0bFcPvGrd+/45Xfv+NX3H/jml9/x4dOzVN5SZo2Fy+XMMi/yfPOGsLfJRuqQY5FxYa2ir3sul0yJW39hTdYkOJFgxHpJzOs+300jD9OOkhPvTu94+fyMM54Uo2S4WwAAIABJREFUMzGtDD4Qg7TjZFPwTntVLRjVIKkO65YNsVExq5hvaZoxfaAM120ifYLcV0Juz9yXfqf+LIQfahD0QMYXgdMbUJTuc3MpDXi+DvLRSrqVwKixrvrvlARK6X2AI+aVnHKb4OCdlwDqKumtf5cgUdxXuVqfft1Lc2BbAlJHK1bnVorYA4tpo7brPZkijT7FSJtTv769/7h91m2N5c165RpkI3anTV2qFO2y/dItGN33WH8JLKnV4R4kq4l/L/rZ+4NSROncOdNEWiuYUEqRMZjrKjo6FQgpBetEq2rTIfFtb9+CJ/2rMhBugbj+rNxO3nJuqwpXpkUFMfp7qS/vpe3DkDnc7aVo8ukzp/MJjBVwNUcpjkwD1iYu5zOXyxnnR6ZxxxA27ZY6yhZQBSyn110nVHXnUlkAqWxC05hKu5cdkHOhb78xLuszk+dR17T3PQI6gHEqTm2MxnH6TLNUYL0x4D3FiTITCDvRIOKC83wRjQKDCKV7BSlKD2QUPWO1TUr70PValmVRYEn8/+FwIITAu/ef+f79MzllmT7Wzp745mEYcEbakQoyeSSbgt/vuZRMmRcMFjdOjJNlur/HTSNh2vPu+09885d/A2vm6e6eEAxrnLks8zZqMVvysuBUE00SEfF5ziW8lfGZstaiuyXsLDDF4I3HWd8xceTYnk5HjSvXtr9ru8XLy0trS26Cw6oPt02wu5DXRFmjFIlS0ekMiYsKZPoQGIeBEgurKawxMi8LwzqIaH0ppCWS5oUhSCGwbqkwDOAsfvbNpzXbYyzLsnI8nvidv/e73N/f8+7dO37xN9/y/PyM955pGhXEsI2BV0WJobK6tNiUuiROjAkFWJUl1RinWVrmbIbz8cLr8ytrWrhczpwvE8Mg/mYcR3a7HQ+Pd1gLzho+ff7My/Mzy3ppzJjdbieT15yA/TbTYuXKurS2kF3RvKYCGJJs51y1ckRc+nA4sN/veT0deffuHeO44+nxDdO0F/2MVr+Ss1A1yWq8v+nACR1KtmCmWJ2CYTeWYWX7VrbBl6r4MW0gaF1dU4EQuyW0vb+Rf7eUNpZTmbOyAHyJgaEffPXs9Kg04IGirA/9t9TZ98236L2VKoYtrNNUKkhvMOqLTC4KYBg5p+dC8MNWTHOGYRrxg7YTOtEWy7kWJRzk0oBTal6mbJTtOcmrsiuF+azTxsx235vwZ9pimX59ep9l2Gz3jU+r94mUHLTAsl3Ll4oI2x7SXN16qjRDBZvrW4wxmGJqcw6V2WYM7Sf12fXX+7e9fj0AjCKUvDUmTpeV0/nCPMfWV1YX3JRKWy3EvBLLQilWJyVogJ+L9DibQk4izJRKkR5VAIIczFIkX68RVhEHKjO6Bemq/2eto06zKIhK8RoXSlSigZGqu/OyOa11mFSwpfbO6SF3EuCPg9NqqGNwhiE4duPAMDiMlUDm9fkjx+OZ19fXNuZUBImu+5dSEVaB0C63Cim6LtUwiZBT0k1mMCZp3xYdZKcVjmphsFJFrACIVbStwMbMkOAld4yLzR2U9uxK2X6+HZoKllQ9ku7fWs+bgin6XumtLpqU7Zh2E4e7A3d3B3a7O5Z5FQX1cWAYRgGa1lVYLENgmAYVphKtiRQTaxSxqRpoXeZZqzPVODtNHKMkhyYQc0GYmSJaVwNW6dUTo++MJBDV9IqCOxQjFf2YZN451mJUEM24QBgEMKtOU1SbbbcOsnLeB6zXCQPa2hKLgEvrvOKclbaBLpBfTaTkjLdBkrUCDkfxWr0ySaqRTgWbykosYH2AGElqZJP2bDsXRItDaWDWO6X3CEsFGwCPmwyDG7nb37O/v+fw8MS0k9nsx9Mzr8+fmedX8jKT1zM+Lww2E3KBHDEpEotUdTAOHwZ8cKqOH0m54BU0pEhiMY17pvufsnv6TcbHR8xuIodAGSzFREwwjM7xMFnejnBvMve+cOctzgasDSJIWumIKgwFhn+R/wVjseSwYKyoXbtk+XB5z19fvuGb0y/5sHzmtJ9Zh8yyJlLKzGtimcW573d7TMoq5CVnOeUkbIxCm7LUgldFxUWo3GxBiCYfVWzE6Sx77x3RF/JoSEPkzJHT65Ffrd/z8g/OxCUxp1XHpQ6YLOJkaRGmWnYJN3idLGSa2KpBKgQpRsnVs7QxMYD9p0KPra2Pt+wrYzZAc/uj7+ySXLo/TRLEVLCw6ikYistXn6/L0c5u/72mVSdWMnVkqlS3q+5MBQasitVuVVdh0EnQhTp/0VXCKLXzpl2qFNEhMMDym7OAnjppSJLWTVukXlkuYLLBlg2EqVWWUqTCkkpuo9d7cNoUq89JgP6i51vGJWoyWbYqi/J0rgKU/jvb594EqXVKV6pBZx3zBiqKrNeaa7sAVyDElwCBPmHqK3K1Yro9w2uACm5bUYqCKNt+KCA/00QtZWnhDMPAGAI5F2ITyr3WkenbFXu/24LxuqfqlB6zxVxGSpQKYgg4KUljbHug9uxXhlNd+0plliRswBpPcQ5fMm4NkkAfT5wuZz59+sDhcCcjF4OjlMCQM9ZGLpcZsExMTcS2aIvBuq5kquCxChwaGMIgNP8swnXGGpZVKvKg4ncNvLMKTsmzkBglYdCRwxkq60gYivX5SztArrogWWysMCZSA7zqc6AC+lZiJFMMMmbV4INV1khurSXGbLT4uvcqUNj3zNfn6J0jrTIq1hm43+8xJhCz49PnzyxpxfkJpyPG634dtNrvDETnSTmyTI75dGZxjjFMDPs7YgbcyPEc+fTdN7x8fibPkTf7e8iwzDO4xDj4Zufl/MqelXW2rYWkSO8oWGEllFI1TlRA1+p456zj3weZPpFy5t5ZASzWVZI73Z/LIpNQ6rSVej6tMcI4TQkK0hpRzjisPuvPeB843B+Yl4Xz5cKyrIxhILiAo+CRUZLrukpxylqSQYtG0gqbSMxxFRaXE7aHiBxbAW4QYGuJkWm/425/4Ph64q9+/td8+PiBpAXKGCPGmgYW1Kkj+/2elDLH45FxGJn8JHuiMRbVJmncWmOtjIyU1OCtiYGuy4WULpzOHzE2MU0TT09P+CC6NPtdoLx5wA+O9++/J8bIx48fmS8XDncHpt0dNgQwllgMxXhwWvQ0kmdU7KGo37WdDfTes9vtiUlYZu8+fOC777/nPJ/Y7fbKmLz2EXL2NstoTN1P4q+EXaxAXxEvUW25rI0Ags21tmS5tAIgoNpSW1JaweVqE6RAZ7UNf2tnr8LYortWFMAwDVy8ffXJurGVvSi+LXZaYjX/qO1kVZy5136y1mJLwWb5Tmk/3r5LGMkKPA8jUy4s55nLKuOqDeC8JYyeaRxE+0L7quXobP6SvLEltpjIQtbno3GFQYFdPfdOb+Yq2/pbfHVlqNBNkev9G2z74zaOqkKdFNpZ2Bip8myKxsOmJZLaUm9SGxJRP1tse9Hnk3Wypd53jfdQFodRLYwub/zS69cDwKBwSZF5XjidZs7nCykVZLSKVH1BEOB2Lw5cG5tZq+GSKpa4kowo+ae04p0YQauCW31/OEiAHHR0pXNeRR7rv1uWy9zQMo1vhcnnHYPbkOMaeFtrpYKLaQfUe4/zSvsbBoYgdD+jiOq8rhwvJ2kNOZ94fT2yzKv2Yel1eulPNdpvF9eMyi9jS8Zqoi0rSqvk9tUUY+R6YtTe7Ya+mba2m5ErmjzIppNDV3u+K1pbagTH9nByS6bq9u4NlF7dlqPU5LDDWIXgoZvYGtGGsAY7OJ6ennh8fJSATalg1jkdeen4+uuvGIaRyyxTV8ZBxKPCEBiHkeAFWVyWlZgiqQRSzKxpJa+ReYnanoBwu3PXf44Rx5uSitJsZrqmBqKYro6mMyIuSHCCtQI8FDBO+kaNczL/2spqVf0MDBTrhF2RFWfTJKUmItsTzG2tXXAMw8iok1ZSKXXMjRqQpM7SUJygzdkYjB0JYY9zo+wrE3BG32/EOGUyyYAhY03C67NxYQAfKDiScWQ81g/4YWIIO6bdgfvDA7v9RLCQ88LpdOTl80eOx88YViwZ56RKWQrM2VCyo1gR4rQKGHkfBKAj4XMlLHoyA9aO+GnH/v6J/dvfYnz4CjsOJJtwSE9tCIX7IfE4Gr7aG94Mhr0x7C14a3TEYpaNWMTgFGPJpvAflf+Y/y7+DzgvgW+OhdeXE+fXIy/PL6RDYv29RPxdqfSsa2yJdz1fmdKQcVOqg6cZ8QoIVtE6Cchtc/Bb33lN4GQjGCsV014DImdhfVzOJzCGZZ4Znefp4YFLXDg+nzgur8LISJlsIa2ZYB3Gu+ZA23mutlPxx5r4l4fC+T+XvmnBEK4dpq2tBzf/Xt9vlbUlPquC1ZqMGLsBGfpDCV56gHP7rPrx20+vbT7dR1Guk+MaxG6/XBCl+E5crjl/fvx1BdxYfvt//9m2ht2VCutDABYpZicB6bTyVYMIWYeN+t6q1kDrW7Yb1dZhRBdBg+8KhIkmjK7PzcSYvjWjv8+2Ehrp1p8WtdniDcTn1f7Wtr+NUUZbku+1G4hFDVTY3tt8lv4912DO1CDOKIXZtgSsBoDGGtWJSqSsYmlIYJ5NluDKqrXMEK0woGKWAkDPRrldl56N0oPVss/qZpWpYehIQjCtr52UyKsIvzlncK0YUbSlUSrmxmrFMGcRVXZIO+k44ErB+cQ47WQk+4fM6/EF52GcAsZ6EgZ8wFvPejpzuSRyXttkkaw+wHnxS2tetSVPxDFTrufccb7MvJ5O236jxlypJTwVXKAgSS5giBh08kHVaXFOqqmmSIEpg2ImwnrROFaAOgGiZCBWpdCr4LmeF2sd4+gJQ2BdZlatsseoIxiDTK4ryhos1OuVyQs13B5GJxMFdIJWphAXoYu/ebjjcnrhFGU0Y8GplpmyrZT1oaYLrGUMAWMngneiieQc8+uJy/ETz6+vbYz7NE0UIKLtEIAPMprTFmmhKRiYZ+l2KL0VLqB6WMV0TF9rAC+MLNONaHSgChrsdhN+GBnWVRdBzsCyiuBlXCOX5UJJ2n7rpF0kxaVp76wpgpXpfD/5yU/ZTTtyKbx/957X4wnn5PwmBQe8M9hcIEa80Ykb2m6UrWEuMrJ7XleWJMBlSsjEE+OhbAyew27H/bTn3S9/yS9+8Qs+ffxIUh+bVVshFGG21pGWu2nH4XAAY3l5OXLxC9xL63ZbU2Pa2vogvrCobTXodImSGafA4X7H6RS5LGfRkqIwDBMlG+KahBlejIiNhkApmePpyPl85vh6IsXEZV7xo8RHWCf7z2p8iMHmqpWxJdfSImsZp5F1WXl9feF8vvD8epR2lXVhut+zv5twQeIjo7FUSaV9XgU2jBVgvuoGGmRiWykqIl/bhBvLUvxabbsoRvZ+bgCIURvsW04mYHQtZopts1L10Il26udSjaAr2KGcU407t1fH/yq9N6+AhkqJ1wBC220b+KO/aKqPKmL/LVF1DGsmorZdj5uMNlVRTGvBj5RhD2EVPbagbJrg8dNe2KGaIlmbsVYAOUNW7bMaoFT2JrQWg1pELgUZtqA/NeDbP10Lt1fdl/rfto7Giq5Irrt7i20MFTjYohJp/ZPJRUV1Eeva1k6IVIThTxGdEkxpY3d1i+hzk+9q7EgkVq/tIvI0qp6B/m8F66p23fUTvn79WgAYBTgtC6fTifk8k2LGIhXyamBLEYp60d4oq8yCqsdA7evTQDWnAiXjrSqCo/3EfuuRts5rBi0iU+K0hVS5pKyMnoQozQsY4Tq664ZKOR3n5NofT9RkzDGOA8M4EnzYEtScWZYLl8uF80nGXa1LVEq3Tr4wRrQKvMc6rxM9ZPPElIhEsgnktGAwxJy3Pcg2SqcP0AtbH7Up9vohtL9WkGJDa+s1a5ZFAySynlDjBG5onOHcZRAV7KgONas5UlS50ciK9k5J9bMkK0BR8Iz3B+4eHxn3MgZyv9sTvCOti0yeMI7dGBhV5XlZZqV+DlhnmXY7OZgR1ryKTsi6siYoRip+dd2bkcdp4K/PWmdfFwx+MK1PsVHhjOwf0QFQY5HzpjZsZcyr0PMNQcdVGSOj5YqVcaUlS58yzshoRCujq0RktQZi+owQZyCfIcG7CwETBgmyrBWjkZJW9DPZiCMe3KC0NAmgcvJ4t2P0O0iOuM6kRZgWJcuIVjE+DoYmBAA5KVU1UNxIxGPdgBv2hGHHtBeGzDhOCqZE5pdnjq8fmecjpSxYLqQ0S/XFWIIfycazFqk6WWsZg229zLlEiGJcvfOUYnFhwoU7xunA3cMT+4cnzHhgwTAAzhZGn9mHzOQTX9/tebNz3A+GycJkxGmTodhqPCvy7ygZYi78l+W/4uXyN+z3huV45hc//54//1c/5/O7D3z37bcsa+J0unA6zxhruVwWcT468WJNiwYD0gNoi2hgrKuOITOONZYWKCzrQi5JRMxSJMaV4FzTaxBautBXQwhtRHClp7+8vPCLb75hOR9JFD59/shv3z3w7//j3+f70zP/5x/+Ad+/+8DkRi6XyJHCeok8jQfC3UQK4CpYWYMpZ8mxagaJLTj9B/+G3/2vf9ZAhZroVbp/CFsr3q0gojFF9F5U+b362Kpcba1tDrHkrQrv3ND8QH216nhNjcvWsy/n1EIlpHfgyq22jlzDdi1DmHRCAK2ia7UKXIElYTH0rBOdUlUZAw5skSTA2k3oVKyhBFMSDErpzVJ7ddGgS11WB7gIQICC/l2/q5UEvgp4NjXytubdFK2eYdExJXqK73ad2zqDmPyaQJUsau1Op0Jtz1hBiI45UV8VYGmfacA4OevWbZXg+t6N7qw6HgrweW8EyEFE/+qYO+/EbudUyMbirLYVpoxrKyJ/blso6jjZSkGvLInWEqH2vKrfiw6IrFJK4gODMgdKEcFea0WRvp0fIyP8Ul5xrrRryBliyizxzDAkxmEieNH7yTkxBMdXTw8Yk5kvZ77/fuHu/oH94R6cZ80XxilwOZ15fZ1JKWr/vddYwWIcrEsixVX2S8miD4ZBqoBG9Bi0yTtp4aOCaKUIdXl0DjKkNSlIwRZPFRH8s6joswIK3nmCdQw+UFLCBfFHWMOSVmKJTG7AWEdKmnQVmdBj2n4V8N25kZwNJUfRAqMoZVv3vvcthtkSsnK1tytoFlNiXWXE5TqfIK9Y7c3PORNz4fPrkZgLQ/DsxlFEsHPEOifMzOy5XBLH11cu88zxeGS+yAS8aTcxuAoMOIwzOAYwWdsj5axa9d+7uzsuy0KMsufWJKNJjRNmhMQgVVRVinHtDCNxbjFSxKjTFKYpq87FyhoXjM1MITDt7oQVdDrKZCoJ1zAFPF7ZgQZjHC6MomH19g33h3sR7o2Z4+uRpOclWbEzpgBxxUTLsJuYHg4yHU9BnzVn8rwwrIHUhPsLyRYRkaayaSzL6cJf/+XPWXRdY5RYGy0YkXMTDyw6ZW6eFz5++MT+cOB0nnEuMgyeaahgv8TWhQq4WgVE5CwbDGRhAuz2gWF6YNw5np8tyyItOveHe7yfSKkyGja22du3X7Hb7Xl9eZG9MK+c50+4ENgfHgjTnuCkRae2zluDtB9iCE7YXHFdIBvO5yMvLy+czmcpxBUYhpGnpwfGw45pP+JD1f7Tgqs1qPyk6plJ4owxFOcxxlNK1ZYR24iVla+jMSsAUMWkZe2sahbImjtrKRonUDYmvIwrLaSyNHA7lSRMzpwVfHOyWYp+pvpe4zYWfCsUqzOq/qxowq8YPQ6LUV8roqh67VrErdOxmpRAEe25ar9LMeqLDRTLWkS03HmPKU6KeMOOcDDsx8AwjcKGzwk3BgHxkPHShgrORmHlZVijI2V5T2WI5lzHhes9KvOqlDqZTJgpdVIgbAzEpLFqZVyCArYmKxiaW55bz3Uz1h14Ib5tK/TXtzcwSMErq/tDpkZt/sDYgjOOYmGNlbnTpYN1bxj11RhUMkmuW/05VAkEfvT1awFgAHqoRTTIVCqXqaiRJsv1IOnmqtWX2ypRylmpdFsPnAQeTvqY6gNrm0B6CCWO0sGhm/ztBvMV7WP2ddKDHljnVb9iIASPtxZnkzjsGjRTWNe5KTwvyyLgxVlEomKMGph70UnQ5EP0BJRilWUDrykRo8y3JitSXyRIFIPND9bklq5b0ka9roen/VvpNq7Zfl8qQ5VuB3RJjf72F5+tYBqasKmKba2minhhksQ+TJQk1Y9KnfX7ienwwOHNEw9v3uCHiXldNLFbscWI4KmXIEtAiKQJo1ZJkCAtG0OlC0qf4SrULttNnmlrxYZSm1rZ2IR/nNfqXpdE1FcVOxRRIhW0Mwa0alg1NCptXRyt0WRIe76NrFjVeXDe44qsVckSnFcqrDWKvloFR7ynaCsT3X3V73I1qZJaD0bPlEH7DYuMy8op6rg4cD6QVh1rbAw2WKkUWMcweNGJcQNrkYBp2N9xeHhDGHYM00QIgzIBjqyXE68f3zGfnjEmMo5ehaKcUDU1MTGaVAqgZQgOiir+p2IwJgCOYh1humO6e2R394Zxf8+wu8MPO/AOEwyDF62Zw97zdO84TPDmYLmzMBjwZbMydXOWAsZlMCslz5QiDti6xH4/sc5H/uz/+Qv+5I/+jA/ffeR4emFZpLc+VoG+LElQTLELoCsyrhWKIoFSIgt4UiT5MXX8p7cCbi4yLaA6sNreIJXIUTVdVLRzHFmWhV/96le8e/eO15cXdsNAJpK0Srnb7fiN+4m3b9/y/HrEZhlPvej0gWk34aeRZDe7IcJ/cqZiWVtiXDfYOAqgUMeA1arZZiu3KSG9XSokheNkL7dEsWyV8Fy00lOV0YvSD4skvfV7rPboSguiGHH5iE3Xxlzn0O1VRQ5bG4WatwpcV8BRF6StP1hiFAHndoZrkogk9pVLB7Sz3+y0qcn3ZoOuEit9VXr3DwEHyNnQK4evGhg25kKnEl/bJezN+MT6fT/2/T01tf+3dj30NvTaB23tEan97i3TYfOX8voSmFKTg54y2/RHqOCTXIu0hFR9KKn01ODJdH6uPsv+Wvp7+JIOi4gNCmDksG0UZdW8cKokj1YZZX9KQm86nykgQO3Pr20jvq1NTTSXIbKfRkKorAeZqvSVf8u7Dx/49PmZyxKJGab9Ae8DA9JvfTyeeH5+5nJZOBwO0gKWEs5Zdrs9l8uJebngnBRzXANltsTFGtEdkolJsi7yfkuKM8sswuFhGvFu0JaZyG63a8F51iJLm2RiQ4un2poDSVsanAt4b3WN1FbEldLFX3VPy0Qe2/TDqlaKc3VCQn2uRu3BJmZ5yzwSsA1SXGUylwJ++v84HmW0qhSpLKP3WCPMgYIlKsC12T/Y34kfFKFTqdbWMbbOGjB6dq1V0XDZN845QhhIWfxKPdfSsuYlJigJh0E6ONU+x0gqus4ukNdIXBeGIQigo+cg5aQin8IY8CHgtL1pXVfWecaWIkWQFNt0BqzY68/Poje2n/bs9sJ0eH1+JqYoMYayRdOaKHqv9/cHjucTxTge3rzBhcDpMrPMM+fXC5fjiePrqwjPesfQTYxa15XXlxdSjNKqsd/jg20ARz2DKaYNkMiZjx8/8vx6BGC/3xFTJKaMo9prmgzBZvOu7WzOiYyAjPv9vp2jKgzcF+OaMGUpbYS3MdK6dj6fOV8u0jZ/PHHwI4PdgHqK4Xx8Ic0nHHJe8rqyzhe5hlxbwApDGJl2Ow73D4TdwNb1XfMj8SutEND2vJ6BlMEFYRFUIIDOxtbHrYWLastqDioFz0JlXeeiRAJBKzdmkCAM2p6ZWyxdQeuSJfuSBFnOmTakYowld+e1nf1mQ/XnNZE2hjr5inopZWN3Vt+b1VbL/QnSVts1629WloKtn1RozJRamHl688S0n8gpMV8uauNrkVFidPWUen3gpx25WHKp0yJFJ662UqL3Xdv2sorcGfNDfarej17/t+g6CgiEk0J3TInKrmgsz1YUEGDCdzpm9WCk0t7RZBaw2h6qgFPzbWVrMzGINl4p1Ces4FTNvRS8qM9U92zJW674pdevDYDRG3tJwqVK7HT83NUoI+qiblTVxqqwm8L2BlwISpiLIcWe1gRF1bODH1oAJAr0OjbQFnnQBk0mBFyQ/3oddeZxwTM4GZdjSibGmbRmHWU1txFPy7I0Ac5q4LbKYKUvb/cY1yiU3JQ2RCxnTFplnFEpiuJ9+XUbRNaf/Riq9WPvBw3enNW9LIfDdIH01kaSr36/qdHWUl1D05WAWkSEUboUPFbnWN/d3bF/eGS6uwMNDJZlwWul1hiZ9jJ4R/BejXvEu4AL4qBzEqef1xnMFhgURf96EkofqPfGYROZ0yDLbLTm/lUD/uokbqukctY1idP7Rw1HdQxY+XuxBmMdS06scZXxqN5jcMLGiAmvAXM1rdTVr1M6un7uen/O/HC8pTCWpO/QmEguKylufYcZIIoAZUwFGxzOSluOdR78QDGOgsWHwO7wyMPTW3b7PSgCHs+vQp88HlkuJ8p8oaQoIqQARdDyadwTfKBYQ9ReyVyUXpulTWYphTVBNgU3DrjhwHD/xHR4Yn94IowHbBhENNdmwpCZBsMQ4H5nefPgeJxgNNRObdnLauxNtTVZhG6NPUNZsN7i8awp8+7b7/mTP/pj/s2//Fe8vPtEjpkliyL45aJ7zQbiGjWA2GiYVThQHGpRtev6/HILfmSPVycko6CFFbXZukpFnqZJx+HJ2MTj8cj79+/57rvvWBZJWmKKIqgaM998+x1/9md/zm/8w7/HT3/6m/zq/QfOzyfVU4Fh3DFMOzlHJrXEuI7FLLUa3YF3xghYQ0FG9tGPW9wYan2S2gLDsoE3dW9KBad3zLSJztWymIrqK7BQwVhZo97WbWw02vV+OYGufqMmj9u1dFWG7uz3Z13A8Gr/jDp0BWBi0iMubYC1qrFB9PU+bLP1twBp/ew+ge/vpQc4NmG0a7vW3q994i1UM9f79LrfdQOfelCO8hkSAAAgAElEQVSh/l79+xV42/1XfAU/+J0KTNzea5+Y3vqk27Xon2P7fKtAbfc7/ef1dh2gaEJQn/8taNNfI3SswR8BnBrAodfTC1kONyyPei8NqNP3Xa+ljO6WZKlqbcmGMc7x9PRIKYZPr698/PCBJyxvnu4pcWGaJqz1nE4XYkzM8yxJn4obinD4XgPnRM71fgulyMjBFJO0OOreFFDlQkwiYFmKCDk+f/7M6+uJcZgYhpFhGNnGuet0LaMaGDYLebjpXxlNgvT7qftzFg2EIvZApmdte/P2VTWftukqRid20Z5tDw7dnqe2141hmvb4cCKWRd8n1cHD4cBuN0pRKUWCMoa8FpzCOEibo9ojGbUp+zHGRIwLKWmPv3UEb5v96qwRBYjLKi2gxUjLrDLZqi5GyUaYq0Wr9zE2O+BUJDyuEbCaRG9nxznHfr9voE+1z1UjZV1X5vOF88szxnkm54hZNSDWyMvzMy8vL3z88JG73R5bqgaFbQJ+7fwbAVWWy8wRw/Pri7A47u4I48Tjw4PowpwWnj8/8945jscXKuhZ78mAFvxyu5dx2qtt2rQAdrsdYQicTxdyzu1+ANY1kFNqYJacRU1eb/TctnMq95FSxBjf1uvWt9Uz3LddnM/n9r79fs8wDEy7HedlYVlTY0tiKovNsS4Lr5+fifNFixalhojUiSphHAjjjjAMWOuE9m+yChUvBI9e67VNbYl0KToBMqo1y5BF3660W94KxQUUIBHx9tKNsm5RaBfPbN+HOk5d6/rnBsjtY2qjucIWJ9d3ymdVLSNbGQo5t/igIEVK8nUBpb+mZvtLfcb1T425qi2v042K3GUp5BRJcaHkFYpMvQqiYE+KljiLXRT2RYUu9PeN5D81Luyvzfux8wNF2RRWW2ActmQMqY2h7f1Z9Re9LyoV7Dfaem6E1eiNMFEqSFoBk6oFSa4s1v7p5rYHDMLq0f5nbUU1V2sKMsa9JXnVN2uumCjCajIZGZNrt+8y9Un0YP8PX782AEapaKEyCFKSC68JmoEWPClWI0mw3cZw1cCzZ0dAdU5SjUlJ0RCt6toarNSRWsgDrpMqrDcUk7FOZq0PYWQYB4IXscVhCO1s5ZS5zBculzPPnz8xzwJY1HFUMVZ6kLyuK1/qoNnQ8xgjTemgZBEJdQ5nMzYXnIFkYF6iiFvVQLs6wi849/bdNyXIW0SvR/G2oBC2kE02NPVQNgRWX23PXSf6tobzRiqkzgcGPxJzIWfDbnfg4fGRn379lQQbPsgYNeET4xDnELz0tzo9DDlFEXxzk1AmNTiJUYxp0RNRUwVZq4A3UtnpE7G+SnxdLda9pEG3rgp1/vWGbm8/29ZXKHLOBwG8rMWkQh3mUvVKior7WLcBFnV/1yQq2UhUw20swogwlRKnY6MQalwFMVryaTqGTUFYP/Wp2Eq51V41k8Gpwc5gTJBAzHucG3B+EBV573F+YNjtuDvcc3d3zzhNxFWErs7nM/PlzDpfSOsCMWKIjIMyZyjEuGAJeCOikSlmSk5YpPrtrcFG0a8gDDJBwU2Euyem+6+Y7h7w0x1l3JODxzgDDrzPHMbCw2Fgt3Pc7y13A/iGiAs1jxzJVleiZBGychlMBpPAzZSceX1e+NM//YY//qM/5/tvf0m5vGLiJ+bLM4sZiQT5vWJY1wtrylgbSGmr8iVtd6tONBejytKm/XsmYXMhlai2AoyrlQOpsr19+1ZE+UpprIsYI9999x2//OUvm0DgOI66v2REddSG1e/ffyB89cAwTUy7PcfPR2HxDIFhlGkrtc0umS0xriCA1Uphn7zTxRo9cNGfo7rfr22UiPKZonsUK1TsZus70U2rgTsomNoDphKcbUlqDUo6geMbUKBPmPtr7YOc3k5WW2gU6KqBtfRt1ykZOlJSKxKGOq0BjCl6r6YJShuQfmK9g9sEt15nH6T051om2mwMjJos9cFnD34YY/DWkbXiewsC9Pas/s7t1JAepPjbgJK2xgpg9AyX2FXASinbdXf33P+97rN6ffUa+glVUBTc26r6PejSf0/f19374x/zn7dgF2VLcBrzQu1sLwDa293b7+g/s7as9M8pqNBoziJg6LNjPwSMsSJaWaTHPz9CLIXjaeb19RVL5mG/w4XAbjfgnFR+1yVxfD0zTRPjNOp3JawV1lbOSQU7c2Ow1oQWikxc2glwOo4D67owDRNvv/qa3/qt38b7gXWNnE4y7n0cR22xVR9klSVQpFUkabtuKkVbFQzDMImmAKjIsaEKpAe/Cbvegkb1Z9aK1lhLxtNKLVz1e8orS6b+9yoAz0VMv3VbkG5q0j/x5s0bBm0XnYaA1xGKl2UmDKFVUlOKWOuxVpg2ITiStsfWZKlo8nWVxCmzzDm3/RswVCARYbA6YzQGWpvApA/jdvaKVD9dGNp99iBlb5frelVWcIyRMQRp0dBJR2uSn28jvg3z+UycZ5xxQnXvwDiKJprOktaV588Lnz59YomRMIysKWH9O9mn08R6iazLLOOAc5Y4yGyVfGusjp5fWOJCXi4scVaQSBiI+/2e+6dHQhg4HU+iD3G5kEphnhfGcSCE8SouEoH6fANKJm3N6wRS9fn0xccevOhtaA/Y9/annmucY5iE+WKANUbR46EwjRPu/p51GHBWdES8F7Cr6J41TkU3rY6qL1m1/iSHcjZjlQ5R948w0aovlLhgjVFiVGQ/uU5YUZJ3YWblBK6Ylm+A7NtrX0uLo3IuTYzTeGmRXteIi9KilVIVz1d9pN6PqFZTMaaxfmrMgfqOpDpEzT7bzd/Q+QVhZG5TkHo/VO2wtMVYYQhsbgFrhZlstICWcyEuC/P5wuV8Zkk6MWY54IMXJlpckOktFpyjajm0CR0Y4rpKem6AKo5aJ1R6L5MRNR+2RoZEGFMwiJhzfz/VF7YYs2d/YZqWWl0bay0uyPPKOjBhA/I2QK/+veZ8poLYiCZlTsLQEeaYacWtHqzyRr5Dmlg2m2frWYA25l3WaNPuqfnsj71+fQCMvFXiTFP7V0dStkWjAh0FhN6l1YgaxBl7pYbbKnyKasrISXk41qhugDEiqmhFkMZ512ZTG28oNhHGQSZfKKrrrKfOTL+cZ05nEeB8eXnh9fWV+XJRwGTbZHLt8jfpk66J8daPaYwg1xW5t1Y2gLFeKjfas2WNomrGEl3XZtMFjl8KwJpxMNeo5tW/fen5UD2oInUmsant18Mp72xZTDsEW5IiPxNQynlPTKI6fv/wFW/ffs3d3b30d9ki84B7SmVXBRXxGKdcjkJJEcJIxhLXbaStUadTunuWUUQGT6VxXwdB4pCuae5XU1KQ8a21heQWMLtdSwmeZS1yFg0KU8CWm2pjRTeNGAJjDN45cXT12nMFJPSzoiRE3mqiZE0L9miOq6/m2uZoUjd6txSwvuCDw7pC0vHEImAqSbZ1Gjgah8Hj7EgY94z7PdNux36/lx5rg4zxOwloscwXclwwOTGaQvGGeS0EBQrJpfVk5hWWtAp4Ygs+WLwXxy2ThALOjwzTDjveMz58xXB4wA97XBhUdMwwDobd6DiEzNOd5ekpsJ8Mg1dMJhacV6GqvAo9UysKMc6EyTFOAVui9KWmxOn1hT//02/5wz/4Mz58d6LEQro8czn9Fff3jufVcj5nvAvElDhdzogwICLslVX4z1ZANVFFVUvdnrpHilasSSrc5HRCknP4MDLsDgzD0BIMgOfnZ969e8fz83MLTqvtizGBdTINpcDf+9nv8ls/+x3mJXEpC86LAKAkCEPbu87K9CRbrILLpR3nBvCZDSMvKXc27hYAvLY3va1yRlrAQtP1qAdJPn9jqGjlUe3g9dndqpjXr3o2NVnozkR/LQ1QumEYbDagu+bu/1+DvwJBGCM6EGSljxrpRRWbVCF5SS5MBS3lRig5ka4CrHrndT58rWbXbEdsagV4tuprP+L2es1LKQ0o6e+hX5fboLsxCLTCrb+4gSRGg5dqa9iCJSikHH+w7rf74vZav+STvgSOAF2wutnanmVxm7zW7xNtC9/GxvXrcctE6QPGHoDoQZSauPbtSD1wUXTdbkGVei+3wIY8h6xTFTLOIbYzSNGmWENZVkIIPD484sOF19cz79+/Zwo/pWQZ8+y9F8AzL5zPZykEhHuZ5hSrZoQFIpWm3oN6wl5wTNNOxxDKWPjz+YzzhbdffcXbr75mGEaZnLasHE/PpJy0tc1rK2QNTnU6S4sVgNbecc1gUdIyfUtLX33srzMrO6zS+mOM+OJJKTb2a31/ZaHcVmlTSs2XVrttBY2Us+UdYfCMITQ2mjHiv0OQPv6ogAKlKHjj8d4paClV8aL7r8QkI6wrG03jnUpfx4r+SC65tbNRiha0DFW/IK7bnpvnhWVdcM4zjiKEucxzY6+4Duhcl0VE8jHEuLKuEhsE77DTiOWeoq0mdlkYxgGrRSjRoZA4NybRNJB9W22VWK9KM09JkvT6rM7Hk4Ix4jusFhdzTo2xagxsoGMScNJUFoVqk+h118kj87rgw8AQRA9qmiaGadeAxcEbrFFhRQWBKrOp7i+J37vR87WFKv2wsn9V9GOzfXXKVdEksqjNxBiyMWQs1g+UWnxMGYxj8BY7ehyi72NK0aq+5g/OknIWWr+eTSl+9GNCt9HeG7e795FWpuYZjfHQfMjKONPbDGLzfkbWpVXeoej48JIT1jptP950m8TnKIjb9AK9ngsvLWKI7yJrskzLKH5wLY3prGfE3fiyHuyvZ7oH23tQv91fztqqmjfxYVtwtuj6S6E6xoVlPjGfz8xp4bIeOZ9eGMYg2u9FbMJunGDQEcwdUFgoOBfY2vTqVCfJNeSsSLximhZFXRPtEHDXE1T6cd31XmvBX8YyJxWmLS2vkvWqgEEryeoz+FLcAAYVbVaor77LGavrVzQOoPuOom+s36F8Cyu2PVGaIHbdYlL0uC4E375+bQAM21dearDaAggx1o2lUUpzaFKJE0cTk6CBfaAiCZeO6zFGg0lBC72TcabBex2HZXFWDGXwnuAcxlvcFLZ50Cnx8vnE5TKzLLNODbkwz5cr2p1Uvm8pwKZtlvpvco99EFx+cI3OmCYEQ07kdSGnqhMRROww6YiqdG2kfizYK93m/LHk+woEaUFmpWhX3Y0O1KDbfSAVhL6dxCDHT/u6/DByN91xuH/k7vAkNNaawJRVDrweNMGxagBhSGvE2MQ4DoxDAAoJz5oRYMHKtIpcZAa5sBlEFLE6kexUh8LK2vYJTE0w+wD8Kv/qkjbYAtq+uriBDbbdf61CpiKAmnebIcKYhkQWK3+X/XsdKG/fZzV5EBQ9F0NSMKBE6ZF1zl8bESqiLvRg0XWQfucwGMIg861jFl30jCEVsGHAukHZHRY/jhzu7hjv7xnupN/aWqnwr8vM6fmZ5Xyi5BWTohjeAhTR8BgHLxUr1Rbx1rfA1TtLcRnnwcrUVHn+bsdSPLiJcPeG3ePXjHePmGHCekfwjsHBFAqHyXC/d7y9czwdLNNYtUJU89gqpa9kTJbe1hgj63xhXl4Yi8GZPSVG8nIm5ZlPH1549+0nzp8jxIHT8wcGf+Tv//0D/+if/B7/8ueBP/jDX3C5XChZ9p6lcD6fAGlnqslmzoWoykVJAxoZZygMDFFdF1Q+eCftQsawv9uzuzvgwh5rHeu6qg068+7du0ZVrRWHKj5YxX+lhSTx9OYrfuu3f8Zff/iOy3EBY5Ty7FrQ38A0Cy5bEqmBwzVBbglarvZp6w3twb0tUbzRZTGm2bqi1Fx5v/RaN2BaE2O0IkOhOec67vQ2qbxqz9sgFg0WfmjjjKnjTa8raNtrA0z63uh6DzWIr5UDY2TcqwFtXatNSl8oKnRJXMnoqEbau7dgawMi67+XotUQRXlq28swDFeV1gaU6s/WnFrL0WbWtmrhLYOgrW19fjeAlIEfPN+St0lYdU/2ld+t33f7/i+B7/3zLPkagKoaB1nPMThSEgChJrW1IlU/u2fZVFr6La34dh/dBrx1nfoqH3D1v3vwo8UldSx3TWa6V312wLX/MOoHkbGaFtjvR/b7XdMzMApuWheIsXB8Xfj86TN3+73oYQxSobZGmKqn04l3797z8HjPbjdK7GFrYu9aIni5XLp7hpeXZ+rUkcP9HbvdRMoL87LyFz//K0CYJOu6EsbQxrVmMqEUAaON0XAcsEa0yYxWbZO0zsYYmxhxKYVlWZnXVQTivgAm9b63rmUDlay09NVAv56BeZ7b5/fPQphmNS6yKqhplHOaCUEYKMFa1mVue68Y8GEDMb23akdE88IY08TT21nJRZKeKC3Ha9TpczVhylVsFvWhpWlsWCvi3/JZktiEgO59S2DUtVs2O7XIfXrvMYMyqmpCgSRqzghLxntPspYxyJrP88ywLLpGXp9RYF1kiuDlciHnDRwqBVCBY7RgEkKgrCtYSXiGXeDh6Q0Yy+l4Iunny8jh64RTnmdmfyctI1HfM+v9VaHT0+nE8XymlCLT2FR/4uHxif3dnTzFnDA6hch09bx+L12f6dyYUE0oWW161by6BR9L9x5jrUw96WxMQrTI65eLXomHYrE5EmxhdDLpRjRkRLcmpaiMWyt7wjtpJSo1fq9/FxFj0GloXSJKzacoDEF8BVm0kqw1yujYdCXaelg5A87IhJ86LCAXSZSl/U30EGxnJ0uJ7fq2+EDAQBcdIpjuBDYxUsSjFAVsXBPZz/qZva+u+k7VRuec2zSO3jZXe3prY5uvbzpKRjVB9CHm2u4loKIzEj8aEqZEcjSs8xkR/NV4P3mSsq2Lijhvjl+LtPocxHdnjcnrPq/x01bUKTfimv1eq4Ws259L/GG17WtlTfGGuZZFWLTL8UqhAar1530xZGOESUthKiiTWURMi048tB2oV3PBH+SaxlJZFzK9UTFbUwGd/x8AhjFmAv43YNT3/y+llP/GGPN7wD8HvgL+L+A/LaUsxpgR+J+Bfw94D/yzUspf/l3f09PbwTTEMudMSaqV0AI6OZi23WxFqkBoj9cBqzGWEASRtBTCIO0hQZOe4FyrdI9BEl+nFb45LqSYZFKITgw5qZ5FUsSrp+vUlzWu9Yr1AMGPo39bstpHuGLA5b7mdcEZQ44L/86//W/xj37/9/nrX/yS//uP/zXL66scQu9Yy1Zl+BIwcfN8f/CzGtRdBba2bxmpG/J2cxWqHkNp4hKWmJMmGF6pRJb7hzd89fVP2R/uGcJEsY6YROHbWsOw25GTzAQPVoSuUhZ0PydRM/fOKs1djHXRMXh2jeQis7tFcMxIgFCrr0aGNqvWrzjyegcNcChXQmo5pwY6OefIMRMbU8ZqIo7SYbc0xVRmisLQTlkHzlgRflMGUc5Js2r5vUS9fnn+MalIWalGr6KTVchTW0o6RyxtwwpYUDQxguIMobbnJKnihN2OYYKYF5mA4UQ8EysCYsYFDA7rPcMwcXh44OH+AbObyM5RcmGZz1yOr8znV9bLmbIuOCNMC2et9OiKt8Y5Ty6wxiQVFx+EtmdEhLFYad1IWai/GMeSHPg7dndP7J6+Zjo86r5Z2IWJXTDcT4bDAA8TvHmwPO6FjeHqsdL/WieVAgcYZ4nRsKi2iMGwLisfTx8gZk6vnxgCBB+42+853N3x6d07lvnEb/7kwD/+J7/Bv/tP/wGf1iPhX7/ndFmk+lYK1gVWrcJJ0gsmKWBhBBxCE3IBPbNuAVHzTmklpcI07rk/HBjHERtGnA8s68rz8zMfP37kdDpdJWg1+dgSbKGYni8zBcN5njkeT1zmWWbTz4vQY13ArqsyB6Sanxv7Ss6KvbFhTc8FMNbgFfiqyXKf6N9WTZvl0MBmo/RvwWNlJtF9ZwNHWjLqrn+fLYmq768V5BhTowlXG3ib0Lbv7gJoa+t12itg5taWNlDHWoJSzG9ZHTWJ6in6Kcm0huA9tvRXKK++4tIDEXKNlsrCq9W3WzveMwVKqUKw9kq0rH9G/XO69RO3/u52rfqX/O/tO3pQpV5X/wz6tbwFpITxs2lUbEDxFhxJghGvvq9W5G4FRLcq3sYmTDfJSA8A9X67Po/6mbXi34Ml/XfVv1dB39t/6/diKeVqjxgDqUAQqh3n+UJB9Cu8tiuMxjEMhjBMSJaROB9fWJeFnAtv3wZ2015aL52s4cvLC8/Pn8n5jv1+RwiONS7s96Krc7lcNCmVOKpeE0jiOo6B1RpG9b2pAz5r61oIoQMTDAKSWgHwB2mVrD7XaFU/pUzwQwNTc9bpS94DmWXZ2nX6fVifRd+Gk7ME/c5vU+IaiKf24Xb9nZOE8LUcpahipHXO+a1q6ZyVAoTdSXaRZRR7fd3akXq9PVAGAmA4jZtqYkZKmoxHZUpV3RPZh17ZuLUAEKutd46cLMZ6fCkMpXTnTCjfa7ym0lfb2H9/DxB674nrTM6JaZrY7XZtrZdllbXaCVg5LyuXs2q9RXlmRWM6Y6UVwIBqLUnscbg78NOf/JRpt+NyvvD6+TOXy8zzyzPrurTYPaWIxA6Ow+HA4V6AiHUVFnSMkXlemedZtOfWhZi2qTMxRs7zwps3b9jtJm2XKIRwrXvU26MKxMiZXinAOI7N/vXr2Nur/pWzCHJjaCPTAWVESK6TCqozU2habUi0vaYoraimqO6ZMG6EfZGlyqPfI7Zc9k0ptBb3kmkaOg34r4W1Iq0RFgXasKRUiFkG/BZrKBassq5SKqScMEGu0xllN3R7qSRlZ1hlaNZznGREuO3srzUGZx1ZARhZyBY9i/9UkMLqHhKl0A2YkMkn0m6W8taO3fuv6hf7vd2ej+kLhUZBio71L9wRYS0X2TcSU4o+mzFAltHRzlV2qDB3LZUZXds+ndq5pB32WrS2yrJJqQpMUGESAT6rv/ih34DrHPoajHXagjLgQ2LMWXXXNgCrLnxMiWWVUcopIa1CaJE3a7GvCu0XYf/U/WSQ6aBN/6RsdZm+oNu3Ars6O1vXuYFEzf9eM0hvX/9fGBgz8B+WUl6NyP7/H8aY/xX4L4D/vpTyz40x/xPwnwH/o/73YynlHxpj/hPgvwX+2d/1JXVzCXVlQxJNXahUNLkr20MEVW82GEqFO3WsmW2sCe890zgwDI4wCGKZlZ7jHAzeMYYB6ww5rlwuMnIsLiuneeH5eCbG1OiHuYio5i09F9QBYononig05kit2dexcc2MldLeB51mQ5EkNANJdTTudgO7SSoqy7yyLLFtjH5TfylJuLlQTej6JOLaIPdBF5r8txLi7fNzatiSbO46AcMY8IOXBMkYnp7e8uarn/D49BbvBx1XZVs/JUaaQtZ1xnthxzgnwEeK8p7BCeg0DoNMwLBy3fOaZRxXRQ3blAbbmA0G28Y/ucq4MQZK30u9Bb4tYPCCYjvnsF7Ekga7CYJdBe9X67YZHT8ECXKtzPk2uW2CloCJsrfR6r2wSfrqqiRP1z2rxhgFMCQ4LAjDo4AaXAVHlLjurMOGURxnVP0U69VIexn1aALJGEx24EawgXHasd8f2O/3jLtJxDa9J5fC6/GF08uzCHTGBdIqbQ/WyQg6BKUtWGHI5HoOSgMXBBMzeCsq7UIrlaqWCQN5vGd3+An7pze4aSIDwxh4GPaMDu6Gwlf3gd94HHlz5xgdeAfWdMBbXbeioE9F363HWUe0FpMdecmYYinxwsvnZzAzd4c7nM9gZtb4gg2Z55fP/MmffMeSFv7iLy3Pz0fO51mqF0kCg6KtVqYqV5cNEBCSkiqWJxEUdrqFUoo8Pj7ycHen4KtlHHeEacfL8cy33/6S9+/fk5JQtK81GNK1bbICQsYUOZ5P/M3f/A07AxeXVKdnBjLOGnyQfRKc0UqxVA5a1aSvStV70b3utO1Lptr9ELS9BUZ729OmmaA23WxVErQKcwVgqH5KPXK9k+w/99oGSjWsb/u6TSD7P9e/X4O+TWvC68jCa7aHfE9OuTHK2mOoPq4DCvrrNMhzqjTU7fqMVsWuQe9tR3fJ2s3n1b/XQP422O7/d3/fvUhYX7Wqn3/1e/IXeY9WlTBVw0r9mcktwe9prj0QUMUr658qsnj73f2rAjiy9jXI7e97S0h6rYyrFg5Eh+H2+ddn1n9O36rwd72+CAIZc8WA7N9TWSNXCVTwQhNPtR9JfOHpvFJy5vBw38Z3xiSMzhACD/f3mCQJ3fF4YhzOjMOOcZy0kjxhreV0OnK5zHpfU6cHQacjsdGy+wQ8xiitLE4YGSKot9lbY4QJtFGcdcJIWVit9LCfz+fGPKm0cttAFrmOuhbDEMjJUsr2PHptlh6cqN8vldWNdVOfaX3PPM8/PIemMhVBWia3qpJcj2r2GCPMCmswRbSXUlnJJV/dU1/J7+2aofpv2+4zI8BDUpaeMKGUnq9xzSY0K3pN3lzrlgW7xQhNm6AIS2RUMfR1XRvtXMYy/hh7KJFaQHvNTmjrlLOOM5b261IKS4ycTiculzM5Jo1jZG+0tlhruSwzL68vGCci1G/fvuX19aiJ1NpasVLaGAgiPCsTU3LOvH0jMdk8i2i+MDAEoP9/mXuXXkuSJD3sM39ExDnnvjKzqrt6hlpJArgiqI0AbQVorY0ECNpox9+hhX6CtCHABaGNIAgQJGghacERN0NJaHYPZzQv9nA404/prq6sypv3cR4R7m5cmJm7R9yb1T1DUuhoVGfmecXD3c3NPvvss8t5rs/FdD1qUgpt3th8sc/ZGqx2XTPhLUm3tr2rv3d+mbX/tjzWKrgEgcmBU0EuEsiar1q0OxyCV59RkAib7zmrb0TCgPT6W0lbx1owzsVspHWma1lugBV7E+YTSLCBkgvgRPuPncYiLOzlggxypfrrNoehU0R89CDijOZTKxs0JSkNHhS4jyGiMOMyXyTgR5FSAl1ndl7zPwDU5LY9R0sWwPwL37MP1sFKD2D0vkQdK72HpskgLBICq8xBrqLvtYLDzD4AACAASURBVCLAblwGv/5n/nfJGRRCjZsYaCXu+kukXS8lFLS9wQJIButVSJka1/i4P/qkgM1lS+4Y+9cAOVKGd2PHiF0qEJbV+XzG6fmogsMNkPchqKZFgWOGV3DJ2DfELK1rVVMlM5Q6YjIQXO9Nnr/svQUOTNKFpflcrnu+rx+/EsBgmQlP+s+o/zGA/xjAf6mv/0MA/zUEwPhP9e8A8D8B+G+JiPg1r7U7KjJO4qzah50T4RdmbkiuBpzkgOCk1ajToIcciUhiCIhRFoiPAUOICJEQYl0VtcbHOeB4fsa8XHB6Fi2LZZmRl4TLkpHZqWNgGQSbo2s0yS6cSJ1+JkXPbMjsmdZnC6BNRPlNzRBZT2qdup5E5XpZMkpm/PGf/gh/+s//HKf5ArfbrxalHZ8EL/5Ghw2KW0eBeiyLBdlad6cZrQwGscf1zTtc3dzgs8+/i9vbNyDymOdFJrHWgAnEyLVftPMEHySrIy1jCWMQbZJhEHCDiTHnBC5cnTcQde1npXbfGxLNzamR3vQM5FQBAhPE81pj5pxTVXNfnWTR1chwMVQHyhztraPfb/bBt8xhKUVp951zq4tWjmaAHXlhJNjvkSCqvZNmzgBUc8FqprMi4SCpnfUhgHyEUZIrAuo8lsxgFxXMCAA8fIiI0w5x2GG3P+BwOGA3TWIAs4htPZ+e8fjxA07PT0DJEoBzAUGucSktaLBe6ylJ8OuklgMa0yGXhJwJgYKyUDycHxDiAVc3X2B//Rn2VweE4OEcYzcGXE8e1yPhbufw+d2Iz64c9t4osVKGIfJUXFtxAkAgD4Zs7CEAGAaUnDGnAp4J4+Cw0AzmGfP8APIXHC9HzPgIN52RTgn3TzMe/uQb/PmPH/HV8QpPT5KF8k5ooOeLOJ89+uzMdoChNUUoiwCRMudl7r19cyvjHSJ2uwNiCMgp45tvPuIXX36Jh8dHoWmrKv35fK7rf+vEMwjHZ8mMxeBxdbXHOA44Lc/IeQFYwIshOPhF6l+FEiMZX8vWrwK8Ijo8ckJdP07o7myFr2YqXgEGtoeQtgjUq1mT2kKWrF0pjKJq+31HEquNl3rlbo3VTRowxfli68F3mSt9Vha8WUC0Fr1LdcO37wyDqPc3vQMPsDJXimRqzOBb3Wl1LLwXoNy6BRFEzE+fIWm2Wp6fPJs18NJlWkhqgLd1vgZSE2kGpwvQ2L10BLesCPv7i98s3X0ZuAXRMLF7F8E9QScz1uKdW/C/z3zaeV906bJryc0Wvvw+QCSZwtLZHTu2AW5/DTk3B7AH3ywjvb2W1wCMLRi03Q8A1C4HrwFH9rt9MDovM5iEDSfUbWOmLsiaVBn3O3gfxYazBMT73R6BCPf39zgepcRsWRZcX99UjQgiSEv2PGOeF5SScX2zr/ukdBKZKjVfnoEI7pWSACrCGHIeKukDAWxzDeSc9xi8R4hRhOmSBMTOcQVofAzIiZEL4DfOueZhhbbNLGKfnfNtrBDbryto0Y2j7Cst6dTPwZ4107/vEMSPKWsnmgjaNcLKewlUAE8ekSIYCZd5wbLM8hzh4V3UxEPzB/s5IlR1rrX3BQzPhAjAX7y0Pkyi7UXa2UvsRUYIGtSp1pd1ZQDkeZViHa2arkjwBLB9zsoVOxtv+gPqNI27EcwCTIiotgfBdywWCW4t+03OYUkFT89HnM9H5EW6NlzOp9pqXEqDCafTCR/u7xHigNvbW0QfsZtGDCHIM0kZFDVoZJbOgKQaPk5YMMSESAJ+WUcPP0TE0wmOjvVZF5AyNWbNokvZiXXa6u2EjJO1eexAXyK1z3h1zaKCojpvzDdXIMBX2y7AUmIASZ6zd7LO1cRJ22KI3QaKBogdCA0CsoAfpMwGr/FPbx/lMkpd1/pKjWNItRhSTkr7F9FVCq7uy6UIC8zKJ4t2i+wBoJIS8pIB9XVp82wsmVivv4Ijup3UvcSAEbEhNeTo7CTnUrtTVr8HCj4YILHZZ3pbW8G7bt8TEBaK1fUgCK0AuGLjK4sEFVxE59uxJOCWssCz17Un2iGisSM6OP1YmH1ZHaSlq9aRjdbAfBvfdbmjzeOSJYkmbG2zQU7FlDV5wMq+6vb8IQxStqeMplKE7eM0gVzXlO7JAoIJU6m4hFySYjACYAiw3d+HnNcI681vk+chZSV+dY/b49fSwCDxov4pgH8PwH8H4F8AuGdWiXzgpwB+W//+2wB+og8hEdFHSJnJ+287R81INKC7P399jxp6gOAI+2nEOI3S1jRE6RYSR1Vz9WoQlBVRFiyXWRdNQVpyRaKPpyPmWXqZp5QavUassU4ujbIIbXHBd1ChObpChWzo38aB2Tjvr0I7rGMvFhAFQAyDBKQWiOUZboi4KBDQT9x/s+BFf5hRlInY7oHhnFC0BfEFvIsYxhHXb9/g3bvPsdvtQeSxJHF+kgnKECFEUVImRYWDlwrZ+XKRzRWEadhhiINsoEqlTTmrloC1I/M1kHBeNvRSuAY/NqY6jBKcOcna2TOMMSLEgN1u1wEYri4wJsCHWMs9TB29Bal9ANBRUqGoOVrXEEdOwZ5Sx7qDLiB+BkF61hdUwSlqGelmODvBOEXOWbPhTASC1Feyc0jMUiYAEReDD+J4EiB1iB5+mDDtr7E/XGOaDkohJCy5oCwJuSw4H5/x9PyAfDnBIYNIW+NBaeZFnKPC5qx5wJG2lCQETxLDK+peHEDeoXgHICA4j3F/wO7qFtPtZ6BxhyF67KYBu8Fh9IydT/itt1d4dxVwMxEGYlBJUD9DxgBNP8BBjKU4IIIKO81ygBwcOyz5DJQTLqdHMC+4zGc8PD3i5+/v8XR8xEIXPC9HUArAcocv3z/hiDNo2IE5Kx3SYZkzhiF0ATZXB8fGuqh+RAiSgZqmEcMYsdsfACZt8RxwPC94//5rfPP11ziejpqRHCqAVrPJvM4u1+DVEdKSELzHZ2/f4vPP3uH0/gIqjGkY4KggOAJyAqcElAQgrkA2y1QAaLpApQl32n2ROh3bLHhP4bc/G6iRLRqGvrlytsSurlt1+uptoJ7XxlmC1eZcWAbZe1dNsr1ua7Tdz0ujTGbnu3CmFwA0kLfeMxEWVVe33YD0GjNYVdglEAna9tlEMGvmSc9rv/mpEgt0AZ297rrXmLmCF6ssdHef9kybPd+UEep4eAileKvq/trR9iTWLg4vGS890NaXv/Qdu3pnbU0xbXMe0LVEGYXTC2fOxv+1ayRygKfud9YlKX3A3DvErzGK+mfcj5V9Lhcpgeyz2P092u/be9lKCaigJIYPpK3eRbvg+fkZhRnT/gDvI0DiKOdcMI4TDocDUso4ny64v/+InBlXV1fKcBERQ2FlZJzPJzgvQN4QRwXwpHzKulPINYr+wuGwU59HdWyYQCQaMwLISqDnvEdAUHubUHqGljOdK8uMm8ixsGIYkvXkklHYacDpV/PYnvM8zzWA7cdLQEGs5k0FD1wTu21ldw7WrU72ijZORMA4RkzTKMLKzovmFJzO7xE+zEhpgDF9LeizcgSAq26UZCGzhmwOmbLuCSQB+hChfG7VQdEgrYgoZmXteA9yHtG7eg6HGj/A9E1SEu0bY8aUUmqA0q+xVUe/ukdL9yLvpH1rKUUABHIoat9nrbM/XmYU77A77DSDnXE5n3A8PuPx4wMyF6QkwMd5vuB4OWM8j5iL+BcS+MsDl+41Yn9Nw8vKQogIZbE1Kc95HEfASweuq8M1ANHUmFOu5SJB/Q8p4+vp92oD9f8rKODFP0iZV/ZoC0Sa/VjNJ++AImUQ3H2WIUw9Vma3rWtZFwFECVmTUR7CrAm6/xGorhfRRiAgeO1UEmuZmOyj1pGut1R2ryz+AUzjQea+6MM5FM36217hVJBWQLdcr8HZHghhWRmAUfdjJ35+ZqAos8aA7iFGLCmv2q+ajSzMktToAI7m50jJRRV73Owt5kP04LjZ2H7fN0BDfAq3QVQ6oN6AJ3GoxE5UcF33H9dY9dL9IzfAkQ2QUdaFjYPZCXUx5JptFrbfZ841ZtqCF9u9pO5bFBDCUJkd9n2JIXS+Odub2pwNQboO7nY7fV0ASrOn5t8ZG45l4tfqhVwkZjEGRkrSclb2N91fHWGB3bqsB5sv9R6p7aXb49cCMFhoAX+XiO4A/M8A/vav871vO4jo7wH4ewCA3wZS1Btj1BtgNpqUUvRs4qJg9B77acT11V5rN2PttS1UbLt4ETScswr15YwlLZgvZ5wvM86XC+YldQg8YFmv5szINQGN6oduEYnYk1USEUBWv/TXAxIkoO4+b2ipOgM0DAAn1ZRwGhCrYdlk0/7tABi9tkgfODTniyBaF8O4w83NLa5u73Dz7jOEYUTOBWlJ0rpTdSgIGT6IorqwUCXTabR6AAheFuDgQw2MC/e95VWN2wuosA204ATmc/Z8laPvnEcgwEdqmxZzdX4MuGjOkM5BAsAKAkACT+9DpSfKAlWUkzolaB1Us4s14FEWgA55vXZ5wkqwIgJIAIjqdGV19rJmnVkDJXIg76TLBsu1mi00g5tVEyQ6AS+EdSFCcIQATxHT/hrXt3fY7a8RYkQqGTktOM8XzJcjUrogX47AckbgDIIo1zuyOloggUTQkmRDRhhEPDc4yYDon8wZKS+SrfIR5CKcHzAMBxyu73C4eQMMI/wQMEWHfWDcjIQ31yPe7IHPbyMmDwwknUVAYg6x2oMEyAQ1RJ+5rRXyAcOOED2hjIzn+29wuXyAo4ycGL/86gHffDjh49MZT+czEhFKGbCcA+ZlwqU8I3hCLmp0FV0WJ6UPtETXhEicF2LCECLiKJvFNI0Yx0FZZCNKBr758BHvv/oGj49PKJwRwqD6GK0W1wCCHrzo1ydzQU4qenY+4/nxAZfTEYSM6D1ckQ0FmrHzOtcLbTYU3Zyr01CakFcFMD4V/HY169sNmK37FHVjova2aHbPOh9I5i/bdlHNUgtKfOecOLEpgAp++rp5W7Dova9taG2fWTFY2LSIxKnus781A8UGdOtcc1rXryCafFGeKYOVmaQ1seZA65zdAgNbcKF/rkWznpZJruBDdx/MLIyZznGr49L9/rcBEvU9s68dK8L+2wJUlenAEqRx9zs9KNB/fwsYbO93Cw70oJUAXa1dZu/oferfxmojtGfQP6fa1UXnbt2XQhD3cgMqbf++XYd9/Xfv5/SAi9l4CyIvKWFRvyalJJmwQFUwLqeM0+mEODDGcaetFGXe7nY7XVbPtb1pzgW7nbRBHYYBuSR4D4zjhPP5hGGI6uu0Pcz2w5QWnM8nELFoU+WMkh0yE1JZakKASDQjlmXR+m0pCxlHj5Kl5eNlPmNZkjA4udT7qQAWAc4VuCDX4L2rGkE9AGTPzjQt+nUp5QpBOtx1AYx9xwCAfoxKYZRkrFpSG+NgGWdAmGBSDOpFcysl8T+8Ex/Iug9o60iovzbPVloCQJMX0lIOgOpakNo65wNKyYiFa1lUgZYwpyTtxus2RxrsBzhlEBAAFA+UAu80yRPRATVtvplOSf9siEjnkrQX9SSiocxyDTllDCFINror2yLvEMcB7AOKln4QF4zjgP1BupWdLhdhqqQMOCkjPp5OGCDgjNg1ruuSSLWruvE3YdtQE1QNCA2jMEYEvFE2aG42zsvjrsCO7ZFcy38AkLG69L4cwcO9WNP9v3tQrM5NLfvVSgGkkgUI1qBXOjfoPo4G0sNJFz3PHo5FFBwEuGLlB6gl0YBHlu24Ct+XvLbnfYDLNdYCWPciARqcaMexUC6YoKUEi3YiQ/MllQUowLsKXHrt79fPSwCkoGoqBZRSA6Y2gEThAiZjz2ly0u6BUX2nBpDI/mJl1Fsb3Nv5lR12jR3N+vwFQcmNXG4DBmE5wUvsQgzRNfFehCstVmRhhlqyxXyTrPozTIAjD3jomlAvv2ehw/wLe3Z2MQ6y+l/KBdgesgUx5JrE/hiUKvGGAWjSeTBG8akui5RbxdASV845DM4S9fK7WX0JATRQgaIKYAwWC6mdKklKpUqSBBk3HRZPgCtAMWF1g3LJCAOfjmX/Wl1ImPmeiH4HwH8E4I6IAgsL428B+Jl+7GcA/h0APyWiAOAWIua5/a2/D+DvAwD9HWJ+MOhtNWfs03UwxdkgHK72uLu6wu31FYax9bx2JNksy0ran8siCtaX84zLLO2lLPjPRdpqpgSAJYhjFVAEAYOqVBsaJuIs4oRaEGoBqaHmnFN11rZgwqecm/peRSHtRYDYYVkKrDaU1SGQtkTKyihFSSL04pz/Zg5bkfWG61G0fm8YJ1xd3eLu9i3u7t4i7vY4F8Zl1hqqONbPi0MUQI6lTZQzJz1XVefopF93CEECwiIlNDBZBxLASewnN7HOXkEG4izUlqxaDiJAgeio9I57LQeq92YaIxoUBXHAPNbZv55K1zuodr+kGT7RYCkoBFi3k2na6/cAqFiReSCZO2fchyYg2KHqRQM/kNZcOlKASLOL5JSar5t+BkBes0AO0jU1IsYJIe4Rxgn7q1uM+yu4EETcJ2VczmecTs9YLs/IaUYoF0QWkTXigkjC/rBaTo+A4sSh83FCGEcMIeKwGxC8KLY7ktall/MJy5JQQHB+RIzX2O1vsT/cYRz3cIPHMDlcjQHXu4i3VwGf33ncTYRIkHaUpSgpStapgdo2fxXWgMbd9c26XxHBjQzvZ7jjI3K5ByMjp4DzccR8YW1FegaCx3IpuGQCk0fhhOPxIuJRgWq5Ss6t05DOzjr/otZ8j1PEuJukrncQurELAR8fHvD1N/d4+PiMec5qAz2Y0yqQKqWo2F55sfbtvE9Pj0jLjHESsO358Qnnk9Qnhyg13UIPJiRt15bNd+83y1Kqs7WlqZp9MKDjtaDOHJb19W1soQF+dQ3bb9vbThlWmq3svAXb816r5xaaY9G12DJlBv70IIs5BbL2ZLI41ztbwoiylssGIjabr5tZR4Nllj2HAIS6r7SAopQiDg63mtb+ubxg1lCXsddSov5Zv/a8e3BIL/jVsfjUb2zbTtvnba81Jkv//Cz71Hch6a/d7GXL/oTa4rKfN/0z6AGJxsow0OQlyNLfQ/9dZt0v0LEesmhe2Xe3gFZ9vXtmW8ZH//v97wTnKmjU/7d9nn0XDWZhjzhqYr/MAgxb8HY6nVQTCxinnQZccj/7/R5gh8fHZ5xOJ5xOJ+R8DWnv6XRuO8Q4oLCAAPMyg5kQ41D3Na++0TQNWJJQi+/u3sD7EQ/3zyjnrOtBdEico1riRiDNdItAZuECHxyen0+yp5l9roGVg4G9zmkDQQJiCNK5QcfLWA327MzfI5JMfIwRRWnb9h1b9zbn+vkg86Y9u7o3gKr4L4O1U5Os+ZIKODM8RQEjyOaSipWGruXjoGUpRfZq76TzgvNQm9bsgA8BKclmZQFFZXImD04iegrvwMUjM2tL8pYwMTDXWJzWPWQLNvYMNFunKQkDIAQpC/Qk7TGD8wqICnBWWDqjiPF1gNcE0OCQ04KLte0dB4zTgKubaxGIvSxYNHHovMcYIkYQ5vNlFdhSziCnQbWus2EYEIeAJWUEL3X+OTeQ19anMREs02xrzTErINXbAjGH+8NO17wkZdgyyOTgw/jCnlppmq1bu3Y7r4mWqsFotkOdEK9MBxkx00JRBk4ICAS4kkW0GgWkJV1gGRPxd7oyh7q39fbc1/KizOJni8+qwsLU7RudC1FUO6WKhpaMggTnIjx5GPTHCmo4J/PVWMWmWbHkhIULlpwRlOkgLCBfwUXntCShaPcug0Co04xync2HADipA71f2++24IXZAbPbzKzglPEAuHb9JHUoyAsQyESA+edwYHLqVUoSJrPADE7tRQFQSBkX6heTljRLOYUwElpr9N4XIvW/3Gp8Xosp+33RXtNvi5B875sRZC10Gm2l8+mcd/BoTFcuVtov9mqaovi2OseM/1RyAeUA5wtCScrAXgTUWBbkNGO5XJByAkNqDr33GOGRinWINJfPEt3/GgAGEX0OYFHwYgfgP4EIc/4OgP8M0onkvwLwv+hX/lf99z/R9/8Rv5bO2Rwe0pWhSEfYihL56JB1wTuSDTDGgKvDFQ7XV5i0nVIVJCqirjrPc63dmWdp7yRCVE11neCRiyws5wMIoqkgirYepLoBaZlh0J89S9tk5e+tRqlmDzdOYT/hPuVUsTqT6ob3g4BhCDidzwg+wgdfjSR52SRZUcCKdhLVWtvXDzEM3zo0NpN6vMI+rwGGumrY7SOGYYfrmzu8ffMZrq5uQORxnhcUNVCi7J1QuGAcR0zjgMIJOc+K4CtNKYl+gifRoiBQpUAGH+CHhk6TGry0LBJAwDYOVPBC0GAHFMsgW2/3LO1ph1gXjFGqXGf0jCJfbaAKbbYsrNSn9nS06owaHsWi0Ft1WrSEpBRBZVN19AnsuHZ2cN4j+AhRlaZqvAEH5yDa0QzpbKHZEfJShy8m1aiAoYE3LgAFSosUmn1KDO8n0HiD6XCF3f5KShi8w7zMWPKC4+kRT48fcD4+g8sC7wocZyxpBpdSRdYYwJIYiVnMuI8IcYdhf4Vpf8AYBhASYiQMo4MPjJRGIAzaQcbB+wn7wx32+1tM0wHeOxz2jMEl3O4ivngX8fmtw+gJyEAQnwmAQ0kZBRkhRAgbajOnuUuq6cvCYlHRKmSU5YTL5YwPj894+HDBl1+e8POfP+DxlFGCh/cHPD19FGZvGHA8XYAQsMwn0b8gL5mnzFiw1A1OETbZP5xDDBHTOEk2dD8hDoM4qCXjxz/+CZ6ejng6ngUw8wEMQuIMKo15YcLC6JywFQqqn9tNO3x8eEC6LDgvM85lwpxFaMmDQD7CBRGZTUzCMFKHQR6d2inVP6jBFbjaA0fijJsq/iedhS5Y22YMmp1RsNTsf6e2DkgXorSY9oz9lswBQBTDJYvp4FkczJRbZwfvGnWUWUAE0QWglRNfdZc0GJA1v4AZGIYmMtxiBledAV38LcitDkq7Zrtw77yA5YWQu+C5d4YtgLFgRiRKSAMTs3+tfj0Xq1E2Bwh1PMh7pLwWyWxjgeowrQJ2VgCLVZfJr4GIZVlAQZ55yVkd5ZZNqc+lDrO13esz/Kll4NEAKPlsQVa9IQOa2pxXYLIk2KbVB0GVDbJheFTnr6Bl7NFApW0pQq+JsS3BWY0VlFGzWTsFBFRnVbVWVNx5WRKca+CIgYdW9+6cB8PrnJLuT4lcHZc5Jzh/AUhbsGu5bPQetzfXiDHiw4d7PD8/4/n4BKBgd9hjmkY4R1jSgnE6YFlmzHMC2COEoVu7oil02O9xPgPLMuO3vvgCPkxYLj9DyouyRgi+yHWNmt2TPTzoGlLAkBmBSMQMbZwJyiAMQJFEUMmsQt+ADyOIWweel3OFIF3QGDknzDPAKnzKaEKkZovWbVSVKeYcCrsacELLK62z3G6YsB8noDBiHMBevjsMI5ZOL4RVW8LEfL33GDBIOcM8I6WMGENLPGn3OwkyM8oi2Xq5VqqgFBhV60DKUh2WkpEWyZQPw6hrQAIzRw5cpHwJOYNItUecgEQp9cyn5vtktZmpJCl9Ysn0kwsKsmspH1R8W0tEQYS5COeKYoAHIaVZP6OaRj5jHB0GDehCiNgNIygXHPEI560Y1SIaKV0yAMMpcEycZAw9lJVaKgjEzIgK8JuYJDPDa/kOWNlCzhw18a3MbkvCsLFzCFJCSywtsr0xiR2BvIByJRWkkqqWE2lXCvNJnXOy35K0KiVewMZykdhfO3MEufecpdU6MUbvEV1AgQaHbP0xVGCzZJDaUQN0iZywMlgSWUqVkVhDfVJhdBZlFJF2xQjq62Y4CvAUGsOBM0pxiN3z6Vk7Kafaccb0MDIaUwJF5wCELRN9RPEs6z3JWHug+v+lqL6Fxji2czqNAVzn/9ihxID1HoZ14sXsgO0dFBxcFpCCmJuTSNBEBFB9KzUNjXAvXp7i5xrFcmN+1eSy7AO+08AwbTjWBCzM7oPUZ3cV9Gjvr/ecxkiz4c3KaigAiZ6M3L8uKZ3jiVn0RLiBTmVOOJfUtM+cae7Jvm6dSEqfmMgMiUs8QvRwTuUylX0CFr2c8/mE5XKRueAIxTkszHC5SIvXbD4ihGn/LSHqr8PA+B6Af0jCcXcA/kdm/t+I6I8A/A9E9N8A+CGAf6Cf/wcA/nsi+jMA3wD4L37VCQiEw3jAcpyReJGFpWVIGUnb0QVM0x77/YRxHHFzdRD0NSdwkp71l8sF87LgdDph0TZO3G1wOQOMRvM1WjHAYB0smVxGN4ZQq3TT1toBnWVmWNEWVJ3cilbZr2/QwE8ddn75zpoGzpzho0zgVBLgbTGa2J6UD1icxKYC9InziTDV6xlSqwMjInBWZoFuwKIPIvoLIAF6XBxxuLrG5198gavrW+SScQLDeUUcy4IYPEJgeEdwIcB7BuOMnBfRsCCrcxwFTCrQntmCLBfTcSChoYUQAP27oO666WQGO4L3UWndmrFymtHpgAxvmbAiG7WolStY4puAX58tZC6Y54s4DouOD0n2WlStAfJqdIhqYOm9w+AEqWU1jBk6xkSgEFQgSSmgVWWcNdgJWlohAJxof2SQDxjjqJ/xoh+hgE0uBSEGhCEiMZC5gEJEIYeCgkISqLoQsb86YH/9GcbdDaZxgFdtipTOWC7PeHz8gOPzAy7nZ3hkOF9gBYthjBZnYmZZY/ACSYZxj2E6IMRRN7KIwoTRjzgen/DxaYaPDnGIgNuhRBE8OxxucbW/0uwFcHvwuIlnfH4d8dnbPW72hECyybVGD7IOnZ5bn2Zdk/KCblbQgZdID84x8mUGI+DDhwf88R/8CX7wg+/jX/7Fn+Pp4RnLwghxj3HcqRhXgS8BKc2Y50eQFxsTnLQOPB8vGnyIbWGW+RyCBMjBe1xdHTDtRoxTFKowA4yC5+cTfv6Ln+Prb+5VDVv1FLJlVArATRna5pm1x5Osoti93IBH7wAAIABJREFUaZpARNL++ekZeU6AJ7z/+IDdzQ2Gq1s83X+N/XiAD4PO2wh2Cck7Pd9Gi0BamlTmB4O11zyBnddWZrkGZRboSXzgLCrrgGTNpA6xs3frwFD+oiAfN4HHkq0NspVgFC2PEgcsRGmzLFRszc5p7XZKpW7KfacAoaELQBxje12CVtS1ZvZZxPpaDSqzBgHk4EmC3awq/GDVAzAB4CLgU1aHm7x0dAjUfp9ZyshyKSAPeC82IGs7TicRL9JyqTRaB2FucU4wfYKiJUJOM9s5z1iWDHJ+5dBZENie/3p9efJV6IxzUVKrJJ79ONSxJa3HZnWWPTs4aOCYWTO7oQZkJUmAPoR27wIsQu28gvSuK+coBT5IlwnJWivLru7xrS2uOVp9eYHNLdnfXM0690Dba2KvFaQurZWnCLMpcFFYxsq0kfQJLrWFqnnFLE6mBl4gBx9FgDTnLPbczskFabFWshHMYhOWJWGaRpDzSLO0eI8xIgxB7KN2imJm7MaIcnMNIuDp+Iz7h48ozsPHQdonskdOALkd4BLOl4xcTthNVhsuvtB8EvBhP014+HCPJQHzcpZ7zwUgscEpW127jokGd8wMKoSQGUG8YGQUFCIwMZ6XEy5pgWMRCZ1zQim+AowNZEyS2Aj2nISxEaMI5F4uR1wuwiIR2+tEcC4rC46VjQgBGaxcNGfphgAnCTTyIiYvQYXM+8vTGbtpAqeCojb6kq2t4pp90wdRFuiZ/bS2uoWlNEA6BQyqJcbYj3s457EsSbUqGI4VeGDgcpF28yFGTKOVrYivlnJG8R4I0tnFQdiQpWbIzS4TnFeWj6O6RqQ1cMToHVLKtT1qzglRS2eL2gIPD+fEZ0opATkL9Z+AyQewV4Fkkj2kZCA40YNJKQMpgykBIIRhRBzEFwQYLgSAxH808eLCGbkQpmlCJNkDssvaWa3ZchQRvwzOYdDxNSC42F5UmXiNgVWDS2jyLAQECgip66LUlaQQkZYousooMjs2Z9He80RqmwQU80QYhxEpSxKokJSbJiREZARKUkZCUj7CnJFJ5rgAfOI7M0t5ZIBoybFG/MJOLCAvXfQq0KtJwVIy5pJRvAJEzCANTilB/WkHyvLbo3MgJyUegWX9oFgTBilbLEVsu9h1EoFRJ90GCzKck24Wl+cTjscLRPxXAMfohcmNLIk5Dylvnl1C8KYXY/5AHSJh4JSCouA2iEAelc2xWoPUQAJ2jNriFJAsZfCqSVIgmlUKFpSswAADhRGciFkuswyDCxYTib0DVFOCpXTMsfistl9b2a2AcSKaXxkPBoLXMgrxDU2fRD5nZUCCRngvyQtJptg8LmIDkCrA4zShIGU58sxc1sR+KSgAFrcgV1BEQFPzRQEB/HzwklD2DiEQ2BOYPRyJzyU2uumcELS5xjAgp6KCxcCCAqQZvjB8zsiLAKalZAWmPo1g/DpdSH4fwH/wyut/DuA/fOX1M4D//Ff97va4PlwBhTEOI+Z5ViexGdAYI8ZxxDAMWntacDpfsCxzbftiiHZK2u602ORrGRobgC3zwGixRrl6+R7ZPJJ10z/UToylP/pszOYZvfjc9v2X12f/ztgetqmCLOPTUVJffLp+6RMvy2ZvTBZA65c7wTYRpCQwHA5X13jz9jNc377BuN9L60tmqVnVlm/TMCqiqwEdZ5ScFCW3+yEIHuv0mhWUMN0NXczmWFvNoIAXRtVTCrGOb1pyFZ8ZXQtkpQReFyOJE2wBONXSDQLVVrBUg66qIE9SKgFWih2XWovoar1Y6yVNJBlt02IgOEG3DajT9qeFq+YNhhg0y8AVhRXEV5BO0YmQschS+KiWFvAxSB1tEDaAOcolkzJXAvwwYYwjxnHEbn+NYX+DOO7hnQBmS7rgcjrh+fkJl9MReZnhrNVm8CIKKD1yRKW+sHRICQN8GOS3wggfBoCCIPBFxz9lhDDC+wGZFyxF9Q3igDHuMI2jgF4eOOwj3t4M+K3bAbcTYT86DNQUWZqb0WbSp+a3AI7r9WqlJi44fPOLn+N//z//D/zpn/4If/mTn+Dh4aGux2FYMAwnxBgRgwAVOWWAMgpmzThbbaNSEjVDzQp+eR+kDe0gVFpyUkowThMeH5/w5Zdf4sP9A06nk2oYoM137jas0gKq3l4Yu8Baqori+gWPj49I5wJioWBfvXmD3c0N5vmMm9u3CNFjWTLiuBM9APLQ7bvW7DeH3GlWxETBXKMQsmX8WmtMs0Xb+sz+v7rOsHb2V0NHa20KoZASmro2YI6DvW+BZW+7zCj2wWlPPbVr7UtPAAFKrJW2fbdnH9j32v1lgJ1VkIjNofV9MLg6NLlIyzIStjdMKNGc4ZLK6p4kCFKnZ5F8D+x5OLM9fs0mYSct3QAIbrxmKdhh5+h1Bmz+Vb+R2v1YCX/dpVjAJXvfuiz047Cl9b5WGtJnPw1QBnX6WBBWZf87zpEEptwxlDrwoRd47LvHmJB4/x1jd/Zzwp5nD1pt59CWjdfPySquh5dmymxKqWJnba7WMiUdY8CuiXG5LPAewtZLC56eHkGcMUVhGonbL23DxzHimq5QuOD+4RFPT49gMKZpj2nawQdS4CjZQAtjgAt24whHDjFIF4plWfD1+6+xFGBOBgxQZf7IA20BImtWVoDIgvky1yBQ8+YQBroAg2VZgGkSoUhIO1fq6Nbyu1jNq7ouOavQsGTyhSXJdRy2axbACrwqubGB2EpKHMORdIOaLyKA7LwH+wA/DuJ/1OtqwW0PpNn5+zIP8oRctppG4u9M06S2J9drJAV6ChfEaURgXtkjotZhwMYja7eRUTWE2v1LK3qz530r7spS4gATRAapvg6c+IFaOleKiIHaGmK7/xoAofonIQbsdztZZykjakJEfK0AkHX8M3smWiGWwXaaDAgq3l8WhlNmAVHTQghBWANFQVRy5l+Kn2q2bG2316yc9lwYcAWepHtb8KEGjEXZD1ya2LQlRxiM6L2UH7EmtMiSc0K7l0Qr125z4JY49JoYtfwoOdOB01VNwnhjCMCYWJg/RZk7gldnTZ4BxLpXsHjxKBAKa/WJSfzUotdqEtRaoktsZV2jpW5byVG2drpUYyS2AFxwSvHsnYB0McRa1lJKBrssrDFyoEJAFltUwNrZDPWcfdlOf9S5V7juP/2xYmRsvluKaW0RvItwlmRk63IkZSIELYOE+OPOkT4lai6I2hbb62yft8OYSO362p892GnXDBgZtte2Kjop1p/tNf1I0VFLJAhILHGAzAH1e2wGkNwHcdH2yAC5UgEQuS6x3ygFrri6kTGissl8DUeCF62UnFkrKCKMBZ8zw3OGK4PYTbZ1pDZe//cLvH78tTQw/q0dBOz3e0zThMvlgmUReq71rJUBa4Z1nmfknLAsM87nBl7IgjXKpw2gLSQdHg0AXsv0Ac253L7fAxGfmvy/zvEpNsZrTuSve6yuh9bn+TbGx2u/YRsGm9Gs4qkWRAlaut9f4er6Frdv3uHm5hbkIwosG5mlpZgTUEI6ijQkEyT0O1YhIsuaeUVsHSQjb4FTVrvft4EygKWNs9JTveTe64JX0cacpTTBmRiSOpvOUaXIF82eKSTS+nHLk5HXOiMkpQIElAxGVgaJtl1kmXOViVFYW+HRyhmmiqaa4WAjkqBoWywZB2WB6KbrtObTWruyisiqtUKIhFwk212UZOgoAD7ChxEhjpjGPQ7jAdO0x7jbwccIdiSsmPmCy/mI8/GI0+kMFAfvBmEReBUgywUpM1IBMqsCe4gYpj3CuEMMoxhJ8igVbhCEOutTFoGvBX5w2I1RgvswYfAeY2Ac9gM+e7fDF2893k7A5FSDVaanHgJMNbSO2h/c/Xt1CBG/ZKnZT/OMn/zFv8Tv/7N/ht/93d/FT3/2c7z/+mup71XnYhxHHA4H3N7e4ub6rjqLYpMWAcIcwQdSKmYDE7132E8T9rtdrcuedgMYwPlywdfffMTHjx/xzTf3OF8uyjBq4lKmnWVru6S02pxtvQvgKxv7+XzG5XKp/+W52TBxvmQT3B8OWJYL5nnB1VVz7C2oQBfo1sVGds51prGBLOs2mDbntxvy9r0+eN0evUYCoCKKZMHcZnTVXpsQmX2/B03M4Zf3qPv7+hn0n68zrLvGl/ff7PhSkjgIhMp+sO4tEogoUNJN3deAnR5Ykex1qZRUG5NScg3ut8/C5mn/XKVkytpLv9zztmO1Ap0g4KuVhpAuyBrgK7MElY5OlQ35KfCnB6a29fj2Gee6EtC6obwCiL2y/9l57T8LTiuIg/V9b8GJHpDogbTtfO0Dn36ONADktSRJu6fV/elhtP6i/qrBSJJwiEhp0fsjgMT5W5aEMQh4AQ3qGIQ4SMcKgJAK48P9PZYl4c1b9bfI10CQXBunkjNmmgVYJ9QgwXkPsO7HJMBbLrnpmBQTl1P2ldY6l5SrCGPKGYlKLa20cy7zLFy6cayMymWZV8+sB72AVlokBDsJAm1KbNfGVjzVtCGISIL2lGBlMzLXrXwtakmfAaRAcRLQe0uP0No2lm7+93NcJKpI2Cnd+S04Pp/PCCGurl/GRsEABfb6c22BGTu/MEjn+poB7P0asTKvHvTrbURvD6rujXN1v7JzGwiAqseFykZKKdWSseKsLSshJ/HTetvY+7RiC0p95va6PA/NFqvfQyARz2SIdgFUj0G+BTbqSLcG7ejbZ/cgvMTidj4A7EEug4qDX2XGS/VZwVBfQwI+H0zHzNe2s3bmatP09wXE0IBSO1q154DqT7a55lAxEEEr9O+lmo3eD5eTNg9JfFINGxmqfSDs4pQSlrSIP8+M7BLQtTwvxTrOtb1StczbNTpScCAAwyB6XyHABYdllvnl9N5ZLzgXVl2z3h62eWtAm8znVh5WUGqZkQEdVgI4z/OLPbxfJ8YoIS11y5kBdDobQbVJVFS/GFhVLGbCag3ZM5DSIGU7dl0c+2vYgmmrdUf951H3rP45EFHVSar7jveVYQGgxla2rgt1P0qknRZDt9+3UzObVoXuccXGQtYTa9MEDgBVEVwBRLwyTKVrI5CTJlWylccAotUj8y8Ej1Wp7eb4zQAwuNUfN8MnD2qeUxVlkpanqbYVS3mRvytNBexApMEgWpsXGPIIVAT+24CCT4Eb/38dr53324CI3sH9mxzte0YjBlAzm7ZZFRAFaYt6fYW7N5/h5uYOw7QDIO3LyBGCIwQXEILTlqaE6LwiypptVLT/crkgFaHvC46gi4oIg1KsC6Oi0wBr9xHFOtWBrgh4TjBmg8IYQh+3JpoKBhSV4hLwwFUEWNr8laqwm1TE1c4FM3gkGQ05P0HQRiuNifJeEQaJU9okgUWxWAWXTLukGrqlwLojWN/5rNRackVofPYeOZCT+mYXA7wLkASGZbmkZpKdBpPkEIYRPuzg/IgQ9hjGPcZhj92wwzDsZMP2GXO+IM0L5nkRWiccxmGH4HZgFqFOR9IpJrHQMzMACqr4PoyI4w5+GFBgRpNq73RHJgYWcbo8IZczxsnj6mqP66sDDtOEMYyYvMfVfsK72x0+e0M4TNZhpEKRMMxXduXmBrCJE+qc1i2qfhr6N9mSACoFX/7yS/yj3/kd/PD3foB//md/hr/6q1/g4eFBAn91YMZxwvXVNS7nBWCH/X7fANai9GUGHEsNuNVneuex3+1w2O8w7SZEpcXmnHG+zPjlV+/xy1/+EvOy6LoTKq44PND5rbhBt2mtM0TyZ4wRpRQ8PT3h+fm5BmlWxmEb/PHpCU/TAOeAIQQcLxehSHYBo21cL4BV1lrIUuoctmdrrAL7Xm+TDIDuHa4+sOvP+5pjUU/PXe928t3nG3gCvRbLAqxrXtt2XH+/Aw7MUe2zO+Y09ll4e68PFLagDXOp3RzsfP1996CU7E+icO7UngDQdmRWtysOLQd9nsnmfytP6wPnHvDZPksBTKHOqmX7zak39oOUqvTXXljqZp2yHOTZye94DUipCBgL5tr+bnXeznmsoEw35n0AZuNiQR90PltrxbKZn2XrvHUBcb9euFsPOefKGuqDsE8Baq8FiP0+bKUoPVhj762f53p9hRAEGMBrArkyl4sGFsbGlGfTzunVFi/zjCMKQoiIcYALYhfFjhCGccTN9RXmecbxdMHDx4/gkjHtJkzKdi05KxDrASp4Op6wGwfkIUiXolKQl4RMkggwjRJWY+VDwPl8QrC6fFjQDFCWICNDyo0GH0Ax6D4OTNOE0WnpSWGkPLeseRdE2xzqAVJbr20ubbuMtNLiEJowtoEK3ntwri57XRrMQgt3wcszhYCkiRnpcsa8XDD4AVH1pXrGVM8w6kENSaK0tWpAijj4xsQ5wUTE14yol2sewCbobmwm7z2Wc+rs2stWwxaomT/unEPSThmr+a//rCyHXCpDze59GAbNvGsPIjGsNZDkUpCMecFyjhgjlmWpQbD5ZTbOzMbGNVCM4KOUyJDuxbk0NgbAgOqxOPUvicXmudU4OPTr3s5nh9MkG6dZ/UUTP9DSFuc74EI8FBublDOSlp73wAsY8Pq73jGKc4B3Wn7R6bqYrdDS4f5gtbNC/+/3QrPrJoXZQE9yTnRbBNUBujbBapQErCMCoCKeWdp+U5ayH2Ip92lMSE0I8hq8E5dZknAOGpASCSNIE5uiVeWRqek8GLvSBwVCaA3qv7aP9OV8xQCfwihJfBsXgzCYre2s3a+ucUek5durRyw2Pdscgc4/9eWd1zLhlpCFl/somas2IztXE5Eyr/Hifsxe2JzkzZprfxYbzfoa87Ytd/ue9wGcxVeX8RFfvFDW5NgaBGagAS26H6F/vwM3UeecgeTCjMwsM48dQF7XXNZkHElSlZirMG13pwqkAJ6o3uNrx28GgAHgcrlUY3y5zFVUyOr+LpdZmRcZYBNe68MRqrFM72jaQnZ1UF+CE+ZwfNv7WwfmbwpufApkeG2iftvnt9/dXvdr1/zt1yMThm26KHRaihhdch7T/oC3n32Od2/eIo7Smm2ehS3jvMc4RhGkAoFJ2jBW+nM2SmUGJ0bKSUuFOscVzXE0pX7UjaotsMydA0m+Om7i+bfAwUSv4AjDMMlzUuRZ0FARnMpoCGNhlpo1peLJQtcgiFz93rKcQSgojvQ3PZglAxOqSrUITYEUiIFDMVVdpzVlijL72Jxt3QH1euWeMsv5XTAAxAPwUiriHDhlKULXoCQz4P0gWiBxwrS/QpyuAEQ4N2A3XWOMB4QwwGuLuXmZcZ4vSLMEswSHIU5w4wQpM89AERApzTOYZxQqcIOHCx7eD1Jr6RwyO8B5VWFW4wdRaAZnQSKCwxR3ePvmgDd3V5hiwC5E3O53uN3v8ebG4fZAGKTrFDxXsoxsxgQRWnpRViU1yQ3G1LXfTIT+AgPO48v3X+L7P/yn+P4Pf4A/+v9+Hz/58c9wPJ4rdVyonjLH7j8+YFnEvnz3u9+tjlqMA+Z0BnMRmrPzGIcdDvs9pt2E3Sjdd6zG+DLP+PDhHl+9/wZPT88aeASYuJ1kyZxNBRgibVk0hpTKAcK6EDVvVzsMnE6n2lLQsmTErZb/+HzEzc0VDld7pGXBfJ6x2+1R7LPqdEqQ2OjOFpiYY+Z9b1e5vk/UbFDvxPdBYe9897bIXltvxs0+boVyS+cIvAj6uLHI+t95aWOb0yC/22yqjbE45qFmBNbXbRnT0n0vVNCuP39fniBdlZoN984Je0fVuXPJTbRSOzHZeNTfIROGQ7Mbm/2pdUuxYEXYILkL6C2g1gcnWhsrRwXduGFz9OwH6H4r+y/ZOGyCg+2e1zNf7Pn2+3KfzarzwDtp06bBqnNOs67NOe3n2ZYFZOdMKVeH1sAS8wu2zJ3tHOr33u37WwCsf00vcLVXVzDFr5keFhRJS26t3y9tzoqwqHzXB2lFnVkYqt4ngBx2cZBMnAwH0nJG8AHf+9738Muvvsb9/b3O7YIYPGKcANZubADIeQzDgNP5gtPphKvDHtM4IitjlryHY4CDgHDGoP38O9+p2fiaLS2iC+OY8DSfwQRclhmBGMERdrs93r55C18yOGXM5wsenh5xPD4jDEO3ZqmOU29r+rULGMNq/V4PaNlne7q3ACVoOwlraFWknGDJGYHa65KlFtCUQ1mVKm3Bi7Xd06VCbV6KvkJbA4uKlJsGCKtdY1oDctUmavLFDhMP996DE1bnN7vV1kNX+tjZ1eopWsDYT2PdWG2cq6+WpRWu+V2+CzKLMavUJhGLZoyBG8ZWKiXDqwi57TO2Vu1aRJSzAUa8LHUdG2sDrNaItGqiK+XaAtL9v3sAyMlF6rjIjbd9qHW6qcG8+oDkJLFWUm5MFLWjVLviWVBtQeTLgF2tSdu/1IdkKKtJrz+nJC3TU1a9PLH9liTUSQFqsAb6CSNzcs2aMGZBfzTbRbYc69VXe02i/UCmC8EFS0lYFklOpyI6ES4GgKRtMLNck3VYWVjHEGs72//XB/gCwIVmc0jY068Gw9x4DAyGaeTZ/+peABG/bcnxVsruoCVJpWi5pNontwbCmbkyIYj8CmTor9/uZ9t23nRLrO9H/x3R+NkC8HotyqoiHSDbk9WJ7gYUTSyVS/dW2+v6Z21JLPttIp3fQsVTHQ2Inko9t9O4ShK6TGQkLcXTmu1FQe0Q9trxGwNgCGAh2U6hPi/VGCxLxjIv1SE3B6wtOHMSAMA2ect6GQpJ3d/Xx6dAi/7vrzkr28/9TY9vAx1eM7C/+vjV4MX6fc3uV72JJnLE7DAYdf7tO9zcvcU4TmIsWer3vfeIwXrWO1jRAtSZzYmFGqgbZlIhTOdIhf6iisF0FF2lrsqGhIoUEzl4NdiyIYpivNRVbVsxKXqtPbhZnXb7XedFdCex0k3VoDsf5L8w1NdkuqluBaQdrJWZUH1e2jrO2zl1zpEJlAbphWxjDQggUIoIIBUxGuJAWdZOkWewaFeEqEg/wCTARkkZSYPmOIwI5JHZYdrtEYcRFCLisAOFAUQB47DHYX8D7wegSG39siw4nk+4zCegJGXKiPKx96TCbE4YLcwIQwDcINdPBmAEwHmw3JaqTSv91hGcg9ZRAkwZN7cH3N3scHM94moXMHmHm90On98d8PaKsAuE0Gal/MltgyQS1gPQr4vm2ApIITTA/mWbTokz5tMZ/+/3v4//6x//Y/zhn/wxfvrTv8L9x4/VeayBe2EV0JM612++ucf19S1iHNVRIg06pMZvmkbs93vsd3vE0JS6z+cz3j99xOPjIx4eHnF8vgAUEIcJAKkdFKfSaZ272W8JUBQE1Bp507uw3zbWiG00Rkk28I64IHgR+RpixBgH3H/4BigFb25vcTqd1Tn2omuwsUmW1SFYcNey1vanUEBboGj2pgc02m+1zfA1Z99eXwfZXSkFmV1fZxur81rSyjm3IJ2wzmSa3bA2kTk3e9X0GgyIYQDrzL7MR2tJ2bJB82WRsqIOWKHO/lp+oQJrDJAngBkpLy/AHXsOmZueAwBxWLnbA+sqcV2LOhP/lKyX9+6lCF0XAPa0234Ma1TnSMACGcx6HXY4tV+lFA1OmiPXZ8df20t7No79mbrMfj+WBuRY0ENbAVTmymLKylKScxQRVfMRrkitdT8f7O893XjraNr49OUBdvRMnP5eXtvj7X4WDbyIWnvQnjUUjM1BzaGX1qSyBwYVO2RmDMOINM9IOWNJCTsS/Q1HQMlSEheHQQLDUkAouMwznp8baOODsFxIa/uj0oovlzOOpwt8iBh3e3hmLCzMBB9D1TOYc8J3bm9wfXW9qlmfLxecjicEH/FuPuPdN+/xeD4ijgOu9zt874vv4u3dHZbjEXlehLXmCOwIS1m68h+vLMy2Vu3ZhzAgBIecGSnNdTxrZr+zkTYnrcNMThllYVikwqWgSG2q1jCKPQAb2AXpvsNSE17KulQDMN2G5nI3+yjifM6v6/rl8wbWkD73S92XjF5t64z1Wivl2qIsBbuEEejrOeR5FGw1ZCxZZOsw5wwX4grgA1Qiwb6nYJqxNnobUvWbaB3MWWAZfFDRSWFfpGxaPhawMaKTOZ55rWfUlwG+tj/EGKseVM9w6TVsqg3tWDKvMWcEwAaCeDiQXBOjsS7kdQMmWEFUkZIQHyA4Lx0f6vMnLJ0oaGbZW+AczLQWY5MUbS1q+yeg7npjdRCAykZlA5QNeBMtlwoC1V+pEa0CB/K+EjM0WFYmhTpQXCD6bXXvletwRUqwDYRIKdczCShoulkE1aPUs+lz7FJM9jcDZhkvYyAb663OUW+LjdXfz/G+HLR/vT7HGlHLGBmTpTtz/e3mtwhYV/faoqAZN2DM274CgDrtGTu/HX25Zw/6y/xfly62vSqv9qF6j4VFp4PbdYNROypZYlGsDNUxLaVU/nK/9rcxMNdnzUiZkdlan8uYEVW5DfGRnDKMSQChAim/I/UbLUHjiDYo6cvjNwLAYDCOx6NuJllrtmd11lmN2FqszkSsNLJFj0qyUq9aLR+jLsBvietfc6i2//7XAS6+7Xdfe73/zvbv9MqE+hT4sf2eOV61xhBoG+DqBzyGMeL65hpv3rzF1e0dvI+Yk9S+jYMIQMomIiDFsswgKmBOijkQOLcNlrlUZXkij+CiOl4RVofunAO09MKstCHn4kCbsjtXRXoiqnRX8k4Xoi6E4MWZMANFhogLY8JEomrngBDkNXX2rCCPvDgAYEgWSB5od40SJKZSpIsAEVq9MyEGK29x2k9bUdbgK6jhiFYBUwGw6OZfnIPzETDxJ13wDBJRqSgtOb0fkEtEHCZRRnYECiKG64cBu/0VfIxwTMicMOcZp+WIlC867AEGsBBIMgfZWoHqODgnJTPMYPJCd69ZG5I2d8yAE6Go4KXNadb+z4fDAXd3B9zdTDgMhKsp4GY/4u31hLcHh9EJ68Ix4Eja3YL7YMkosm2zlotvKtCGoNvGDNUJYd0t8zetAAAgAElEQVTQU8n4s7/4F/jB7/0Qv/8Hf4Af/+Vf4uOHD6ok3jJlpHPEe/mzFMbpdMLj42N1kCRrGREiYTftcHV1hWmaqnO9LAuWtOD+/h7v33+F4/Eooqc+wrkoZUtZSuGITD+jOQKAbBRgrvNuGAahBC8LjsejCHWmVNd9SqkGfS0AZhRihBAwxgF5XnB+PuFwtcfd9Q2Ox5M8vW3QipYdBtvzWLdP02nenKXuvL0dMgfxtXOklOr5t7awv676Oq2Bi955taMHUioFu3NGbN0RGSAgc8qc3OYUtMC4d1LstbWmhjk2a6Cmv8at4907BH0XKvstp8/b9CXkt/QZOg/uwIP+2AI7nwLh+z/7c6+e9+p5WZelBshaYILNXma/s/29liFdgzQ2Zv1zArCa3zImLfCw41P7tXOulqP2nw3a8akf0z4gNiZWP7723X5st/faP+d+jq/Hpl2nPQcffL2mqufQBYsvGDO65qxT2LIsABcBOzRgWpaE8+Us16cdeYZBGBmn0wn7/R7f8R5fffUVjqcTHh4eUErB4eqAYYg1KM65YBhG+BAwny94fHrClDPiKG1YLQNsNfOlFHz9/msEH3B3d1c7b4Clc1xwAd/54gv83f2EOYuuzzREvLm6QdSOWca43O/3COOAr++/rr/tlAH5cp7KM7Wx7ueYsUBeY371ASsSQFpOIYChBT2uskuc2jrA2FPaVQfN/gJNOPa17D6o98E6Flc3XeS5NZvUAwwr4dJXgLQejJR7XK9nu66csz6vtvarrXLuRRBjvxFjlLKh0tbrGvxUhopNeHQsOqCKbLauSbY2DORVsLoLFqX1Z8Q4TjIHilNR97y6L1tD3vtVkNuPf38u2+N6oKkyGInEh4F0fOhLw3rW93q/lRJ3AR2l7IaI1JbL/pDKBqDO2jqy7pEaTLKy7cirH7UujbQkHCDUe9F/kHsogHbVaPMNUAYBsZb5Cp2fiaQkhqVQIecC4oyUF2mFWzUMMjL60gUt53G+zvt6Hpt/DuI3wiME1b9QhkpODCZNfpYCyiTMC4aWEa2B5X4frqBaN6bVlyAT/2+dBC2RKY9dysAE7AGE9a0JOBOyrH6PAYakeg7SijinDK9xCjGUGYwGfprvZvGK9yjsVmt16+vYsfYfUG2xAZuNEdolMGxj6H4DzC15arRycMOy5KvVZyaNbQRwMVBOEwLdHN8CL6YxWEoCK9BHFHTdSTMB6krXrKsibD4H6WxSqLGYPnX8RgAYAPD4+KiGovX2ZgYqFbQehkZvB6l3Bhs1RwbYNp5m3LbOxKcmz/azvy5w0Rv41767de4/9bv95LV/f4qGWxcg1t95LRDoAxr5t2kyCEBA5DDt93jz5i3evH2H3W4HctIWzfmIIUZBk9na11ndZoIjBpdFJ6+1OAwACuY5aw1plPKFIGUOqxrVivL2AXMbdwAt8+ukbRQ5L8rOkOwx60I0J3+cdl2vcye9uWHIte/u3dX5UwpqyQaj9QQvhYWZ4AREsyxDHyjAKT2RTYpfSnI8JOi2Nrbet0ybd6IYb1OB4XSDUAjTe7CLIG8IpRrDIIJizgcE7+H9hMFdASwlHOQJcRww7SYM06ACdovULqcF83LGnC5S9jOEtmGwOsWO1FJoOYiBAU7EspwaZJAgueJ8qbHVTXv00uaRlzNubw74zuc3eHO7x93NDofR4XrncbcP2AeHSFIu4o1lQQkE6WpgeiOCQhe9lgLkDKV4gFieHcivTJ8JWQn8kfHV+6/wT/6f/xt/9Id/iJ/+9Kc4Ho8Ay9zK6NkXba2Z83M+n3F/f49pmnB39wZEhCE67A8DDocDxmGqwWUpBff397h/+IiHhwd1EtUukdP+7TInKsjGAFBqlwQiAkqWKinvwMpoSSnh+flZupZ0m3ifcaqbOhOGGAHOcORwOV8wn09Iy4LDfo/D/oDlIt1UfIgr29E7wZbd7zNtdTMl15yBztb0wdxrQG7vVPYBfh/89YHip+znNjCugGh3bgLqNZqDa+/P81yDjZ6+mVKq5TJb4OE1QMLuI8ZQ50H/eh9E9b8jtqRsnBRUx8cEruX3JMPlzaGkUkHg/nf7a+u7fxA152cblPTPdRt0GYAJaGDo1uNl5X9b7QdjOPTjtD3Xdm7Y87KAnpmryr05Zc1faAFMn+ntg7phGGpQ2wNwRm23a5Px9rXrmX3efm87DyygNcCwn3M9m2SbOBA7IHP1crkImL85j4hXNl+nPiOnz1UFMx25LoCTjh3S0lf2rOPphFxYbROBOYE0Cw7vMI0jPnv3Dl9/+ICnpyc8PDyACGDeYRpG7Ha7+iw9EUKUgHdeEsgH+CHUNUPcns/z8zM+fPhQbRmrU59SxvN8QmJlz8SAXNQ2nU4oxzNczljSgnlZUMBw0atGQmM3EAFDHKp2gnUdkecn+3+ML/VE+vm9BZHAkC4IzPBESFzgSEWDndP2sMI2yyVLkMriizh4eNfadXrvV6Ufr11DqaU6HfhWCuZkAoV2H7GyROzee/tpx2o9djbVQLztYfNXAv2k/3VZ4Njm/+rZVXvc1ux2X/BaRmvZdgBdeSapnYyIXkAaVwhAggX4vR2w+XfRjoMV3NU2s1vAvhd4XO1h5qcBr9qO1+2g/of1522M+/FdAa/Z7LriErDnJvNTWkkv9XkWBYsE/FBbUlqXO7JW1ED1hQRgsXLtDKd+pGXUNU4X39IBYFpR85m5sh8EsELtRMKQPSmnhHlZ4IYRXiYe+i4spALVBu4AQAhUy3nFh9bnzn0yQRiKMQSwiyglo1CW31/UL3JYzeF+j+v9gp715vCKpgkJ4LJlx0lZCCsg6tQAtDgDsP1LEovC3IlatqHMbfWBiLmWcJnQbh0vosqisQaM233vtfXbv7dGHLjGRGYjavxgv4n2rOxw3HQ66m9Tux4DC4nXQLxOo/Y5oqpeoW6/dM7xKtJZpM110wOyaysoRQEkDbZE20nKSaD6Wn2i67XjNwPAYOB4PFVDCMiEavQb6gbJjtI9DPkM1QH41A3Ty8Gg7e++cnm/JrjxAkzYfGbrvG2Bie13t9f22rX2i3CL2tv72+uXwFRQQxHR9IhRRHSYAXIR+8M13r57h3fv3mG3P1TH0alxjSEA3CivBmAwZ3Ws9N5ImBApZ8wX6SHufcQ47BAHDbzJ15ZQAOCYQdnMrpKYCsR5MF6Ak9ZRlhXNSZ135ypYIIgvV6V08g7eWz0owGwdRzz6Fq3ifHhlhbRSJDFmosfBcGCyDZ109Wptl5fgWcBQ3aR9UOC7y0wQaU29h/OxzttsGAE5kI/SPUTBChej9rQfRCDUWy0ZKVU9gGiApwOcC4DXfs1TwLQb4DwhpQWXfMGynATEyLPSvoJk0BjWkLFKBUmdWi9ApCi5A9gRitEpwXCeNBuV4JngmeHLjDQ/4d3VHv/+v/u3MI4Od7c7vLvd4bAjTI4wONW5KL1YZwLKAhEW81rCAwUtFuRFdHFqwORFRV/2HacTR2tLSRxn5zyezs/4we99H7/3wx/gRz/6Ed6//xrpsgBZND5s7ukQqq0RZ0E0KhJOJyl1kw4lA6bB419R9yZPkiRHut/PFnePyMzaekdjGwAP8jDc5XFEeOSBIhShUEge+JdSKI8XXnmgCId4nJnHGQwGA3QDDVQv1VWVWyzutvCgquYWkVl4nCEPeN4oVFZGhIe7uZma6qeffnqx2XK5ucSHwOF45P7+ntu7O7559YplXgQAtM2pCa+eOVeI81BKwVgj4ltIxtl5aVF1OBzY7XYcDofmqBlwYefq6YlFVaBdheNhz+tvv4UilMTNZoP3nuPhQMqZQVfjkpLd/OpwWi2rbujmRPfOt31vT9Xtg0q7pnM7+a73PLaZhxCaENYK3tTT16uBkj0LoV1q9x00RxDARFj78bNnVg0ktjHRvgMnQXVG5loQkK/a9ziaEviyLAo4rs5vD0LZ99q3WWAtRnK9l5xLA77MPlaE/SXCrWY3T49aHc7rYJTaQB0bD++lO4pT57Jom9dSq7p7jZPVno2J7/kQ2ppMOatTvZYIPaaH0lNfz4ONPujoAyXcKUAFaPvhjnGpjlrOmc04EHQs5ZnI6J63ebVzWub1PNjpnWkDvaZpavf22L6+Zn/dyXMuWnPdg0vnWXpHn02W0qiclbYsnxCb2Ca2zo0iDm6tlTwnSj6Qlsw0TSfADLlQUmIzTTx//pxSCvf391xfC+Dqnz9ns93gfCDWQE6JEEcpNdPnLlpTEghXH9s8DxsBfO80SVVKIXp5X6nCbigOktq6MXhmPKFA1JLKCiQK+TATY+Dy8uIk4WU6QLKWvPnE6/g5ec7nQIUxGHqwSPyJ3HQEalUg1EWK0/I6XWc+RkYHhaAEQSf7VJX5sd1uG3jRZ/L7+R7V4ced2jyheNc2Z3obKnNUwlPpDiHBuzE4BwX8SinSNrHW1v0ohNX/7O2M9yK6WUqglNgYJCklgta59yKnUX2S4/GIUb4fDcBsT+vmdmtTWrRtMObpeaZpQ63H1S5a2N/WYGWZRdRfAFwp0+jXrT3jPyZm2gOf/WftffbZUTVXgnbT8zXruMje2Z8TVgFWMPa3005i9j2n5Qu1FNKSSDnjxpFh0HWRjiQKYQjNxlYFDVp5gFuTubb3YPatbXRi/aW8TBlyzbbUNlcrxmhtFgvcqkVlzEobt+jWluTyPfIUa4VpGjEGvEW2zgmjWEraMmVeVLBa2XnOgQ9qH6XcpGQplxSx5pVp964A/2R/6BItdvT77PlnfZDkWFZ76bBSS5mHwpRZxTupUpIXfaCQ2vq1pLtBzuf+zNoN5GECxo7HGKgt1vgjnzsHGEVB0+JqeRYV0esg58bY0ZmvyT/sX5jNNODF7sHKRk5BzKK+4ZosCdFjpS2ue1/VsZV9OLdZ6p2Hkijaeru6QHlnPP+nAmAANs/PA3kDJ+SQAdVXu/fbe5wOykOdCzvOJ0VPOfrnX/tDgOAxsOEx8OQcrOgd9sfO+diE7QGS6gzMeTj5T4CUWvHBM6p2gWWDwXNx9YQPPvyY9957Hx8jRxUU9M5oaFCcqEFnpb2Pgyx+igQ03gd1jj0lS5eSJRVCGNhsr5g2F3KNvpK1f3UxowFaLymtpto90FMtvTpm8kopVuep9YuIZoNTunsuq9Pb2BsoQ8A6hdjm2zZpK6UQdNJZWYJzVKev+UAMroErtV9sVbLlLhgy7aEmDRxUbM4FkkLjpt1SitakOU/1A37c4EOUbOC0aRTeIh4O3oUuu+HxfsS7gTgMQv8dIi4CHlJJHOYDyzKzZGE2+OiJfoQa5Jy+rhQ471ofb7xvgUmpVXQxPPgoQIfMXccQHKN3lKUweZjv9syHW9672vDjH3zMT7/3IVeXjnFwbKJ0F/GuCnjRjZ2oYLNuDAA1UZaF4+6OnYq6pePMNE2M48Q4bRjGDcM4EYZBOr+UAuOg4VZhKQtf/P5z/uav/opf/eofePvmDVSYhoFlzqQlCxBCbyfWoM4cw4OK2aWU2GyEeeGdzPVcCrd3d7x69Yrrm9vWdsqrCJTEjEUFk7o6YXNAAB8cyyJtZq39lnOBnBfub3ccl/kkm7YsSwMUz+2ac44hDixpIc8HArCdRoYYuLq84sWz5+zu7rm7vcU51ufZZTkk6yBrxei6JmopFMlVN+Q8i9UHpv1hzrCNae9Evgts7gPY01Zka1DYzuPdg885nNTvPnJeuxYLNgDN/nuGOLXfW6u8/v76YLydu/o2HqgTYE4DrG1v++4lds8nAQZWdmeAqAGra3ZHr6TtpTanci7NMT29xsIwKlvRIxnndj+052pq7nJdkilOtRs31qDQHPm0LCxVdBZiCKRuT+uvwejaj+3LOWfGcTyh4tdaT1oF0wX+rZ1k8Kp7UU4ADpAxEYX/fmzl/gPhTAB8LU/pHcoeVLH7Oe14sT7z8yDpYaKiUusKTtg1knun3AJyYxT08/2MVk2fFDl12IPqKvU2w7L5zq1dJ2InxCilaXeyjrxnHIUhUkoRYEsD2FJWcM0PYwv6ailM08ThcGhBU1oWlmw6GyaMrYrz3jGEgC9Sg9/si3MEV/FEakmq+yFdTySQlPuUOWDrYn1+ITz0nfpAxp7LiabCouWupeKHNYjDybodxpFxiJClZIZQKThCGKCelijYz1ZCY6CPsL0G4hApNZ0E3CEKs2qdW+d1+6fPzWx/rbUBidbK1sbBNGpWeyVn6teICU2bbR7HkSRCDm3Nyn6wjmOMoZUw9XaslCJtdIPqA+m6mybRjio5k8pCWhIytB5xVtBrH9r6d06SXd4X1hJyBcl1jKLtPcg8SrmQtcVwSwToDHFhFW09t7dr6VZtdqUoa8gVYTiMY8RiEvM/xT6C1P57vI+MLnIss/ia9PZPgRYD3e1seqHCzlVmWM2g2kw5yfy3cMjhTua9q8ryaDdcMV0ce35ip1zrAjPEqOOj4wDia1XMI4eqkuw6TsWpRoI73UNXgNaA4toA9uqlwXwxhg9a7lIFLC550QSo3EOMkRqhBqclLOkBm+AcuGhrLpuUwMMyjZ69Yc9bLxCqsNpqLYS2753GX9UC7GJxiwb/CpTq/7Cyr/771ms/9Rn64/yeDJCv9TyZf7pnr79Vn119TVVZkGunNs2aPrlycn/Qnk87uY3F+XV6AyqtvMVpLKaglAsU7dJSdIxd012sCj7mts8Jc9DmYYF/HwAMO2xhnx49iKG/qbZ59++pj3z29Nw9nfd0Mj1Es/6pR++knDs8/Z8eJT5fWOc/n1//+esPFsDZLdh39Mi9kwiF6IMqKotBGqeJi4srPvrkOzx5+kzLLqRlHjgK0qpU93CMCitinCPRFc0IaZmEig4e54XDcQE824tLNpsLwJNKUVAgtKwZSuGyxFKjOGNaBA68dPUoaWV6NOFWb0i/LJLq9HxGxXOBSsA4BqLQa4Opf+mmENRheGAgnXTZqFpuEmLUriD2ui5y1WyQjKSwP6A24EEEbGTzXFIlxEnYFWEQdXMHLg7EaVIwQpgXUq4h9C7R8lj5Cs57ggtsxg3TNDJOAy6ILkdKiTQnUkmClYcBH4VnUVIFArk66TZydt9pWQTY0U4GXjcnArhBa/31eUYPY3C47Blr5vXNkW0o/OzH3+Nf/vh7PNl4ri4UE3EFX1Mbc7KNmxMAw6/MnLQcONzdcf3mLTfXr9nf3TIfjqQkjuA4TGw2F0ybLZvNlnGcuLjcMIyBMVxRQ2BZZr589Yqf//wv+cUv/paXL3/P/rAjBs8mjkxukDm7pJM1K0vnFElfloXj8dho/dM4Umvm7nbH69evub6+Zs7az75tAILwCwqvUxBtPeoMnda1mwu1CAMixIEYPcuc2O3vud/tpFWcHta55DFA9nRzr/p+aYn23vNnfPLRRwwh8rvf/4Hdfq/q7Crs19TgO4ryiT2TDHJvb2oVA/EY9e88wDdn6NQBOs0+2N/nGTL5XOTULj4MEPvv1af44Hplvfb04tOSEKtNf9wRWe1sn0W38/b+Rq3q3Oh99yKr1CplcF0ALvZNGDeSYQ9qO96VoeHBtfX7mo2vObJ9zfj5czJGjzmN7dwtGHio63FeSmP32TtIfVeX87lgh11bf64TIEIBDnMADDiRc3hqyZQsz98o+N4Fljmtz0drzyWsOM3SnQMU50BbH4RaWcrxeGQcx5ZdPr/vfuzX+zil/xvrqg8sjW5s7C95bS2tOZ9balk1uB05Ho/tXAZgmNDv5eUluWTGcWWQHA4zT68uCdHjXzuur2+4fntDWjJPnjxhmqZ1PLyX7iNUXKkcd3sYM0EBpVor8+EIpTLGgYCDKEmQKY4i2Ogd2ct88s5Jaz1UC8R7lpyY00INnmGULLJH1oCIGBeOx4X5KOUjUuoZJcBWMG/1F0/tjI25zS8Dwrz3+CzBmNMArYIC0U79Cii5aBeWYuadRUsdQUBlE/Mcx7HNj36d5JTJJWvC5yHAZ/O3X1MtQOzsrM0tA9T6+dx/zhIz1YLKd/ieBo6EEEja2t3WXSmFpRTVF3hI67fPC7NEdQ8MYNS1771vJVN1sI4HjsMxk3NRhpEww3BmY9c14ZXpUksmEND+TbhqWmIDY4Q6jhoYKasmi+g5XnQi6MBGG5dVJLbzgZR1MfiAd5KQci5QasZRWJKyorJOhC6GjDFKCRSOoJpqtv69d7L2fGBBunRUhJ07DI4hBmpxuJKpavKWZVHBQxEPF7awdCJKueCD2X3b8zrfwht7R5NTHWNDdyzps1Gy+Px4vAlHss6lVBKuA3dDCLiShZWbTxMHrYwPXRtVgYtuXsuzTrKWXCVUFfJ3QfTezuxyH9v087exKh7ZV/rj3J9Yj3VtlC5JYWxs58JJWXGtVZO7dg12MVpiudBaqRJOQch+jM7X3okf0XwZA7RXEGT9TH8Hq83AKUjgnfrcvsn51KJJKjlze76WjKr080jHqRvXWiUua7anCNtIpAYQbqqTGWUAPKBJHEkIUwu5qiiugT+1tjE+ZQWdHn8yAEZfu9lPpvWZ9qjVOin7yXduPM+PfnL373vXBP+nHI85Yf9vP/cux9Ou7/zfa1D1yOfq6ef6gKB/fwhCe04qqDkOG54+ecqzFy+4evKUiuM4LzgvG48I+VSCkCVapwGP0zZQDqe6D0X1CXIpzEvmMC+UCoMKSVbnSVoiEr1XSrzTgE4c0JQyQs2miWF6L5oaq5gWKP6MIYEWaFJVO7m6FWwxpglKu/Oy0PuxM60Np4rtQpXyosau3+dj1JIW7bwSB2EmqJNjW4bXmkCpKRTdDecc1Qu1vfUz16z8MG0Zpy3DMElJibI0XHAtk+J9bK1ehxDxUe6pWr2fdgoZY2UcPMMo+Eyaq6j+escwjpItqcoIqIXsM9V5fK1aZqEZfwWQNpdbdVplA65eSk1qEI0Nq/VzBTyV6AoXo2f/5hWXU+D7H3zKn//kUz5+b8SXSqgFR8aRARWtqhZIuIb41lKFLZIOfP3V19xfv+Xm+i2H+3tKWlQdP1OyiGjuxx3TuGHabtlMW/K85emLK8YyUV3m9uYNv/zlL/i3f/NXvHz5e+5u74TeXsXwBucZxgFw0t6rCQSuWRM7LICZ54WUFg7HmbdvvuXVq2/Z7/c4J85RbeKhEoSkqii0rWXXB8W2YYoorlfR11pFP+aw33M4HPBeyrIsAO7pye+yHyklNtNInCaocNzvqfkZwQe+/uorvvn6a7lXc+jOAji7Z2vlaHRtUGdAls5DPZgzG9U7072TaFTrh5mHh87L+vO6sdraP3fIe1sp17k67m1PcCtIEWNoGV57PefS2j7b95/vPXY0AMZpFkMdHxPmtLaUfTArrVBDU36XLFD/PTq+CnT0znaR4tEHgFEfMJ/X0dq9W0eSx/atHijqWQhROyzVUh58rg9M2pxRqnXtnkE/tuf1yP21ml+w1ufnJvjVgCed4va5lJeTwKwHQiQb37H6bIxKIXXXcu4k90c/l/u1dw7A9HTnU1ZH6Z7L+r42DvQsC7vO9UZrrRLEO+kkY8429PCdrgwvJY2lrrbMgjMBPVW4GREIXJaFXB0hRi4uLhrz7P7+nvv7exnflNhut+CsnE/ZmZodnquUqA7DCA7GMBA0QKxa7lRqZZlnNtsL/CDBXaoCfFISvkppBa5SswR1kr1zbIehUZ5tbghgcGSZDWRMrbOZ0eOtfBNOtWBME6V/RjEEaQfrXIsMzD7Iv3WOuN7Gii0qtSjz8xS4srVkrIYQRFw850VKYMPKyAIo+bwj02mplHg29WTu2TrpQbZ+/bbyrgaQQK0rkGjBioEnBgyGuOqK2Lp05VSsks6O9Os5xLUFqs3P3p7ImElW2Do55VxWkJLeZqxrRQIsGaMhDgIMQMuKW9Db60g1XxgEGMsZ35W32Rj0dsnuJ8YoAWAxxq90A7Nn75ASXu9qez0XYayFuPpnwYsvKbZXmNBLrjj1sWlzW/cpTpOQ3gI6J+UYtqYh09hyTueq6kfQ3UfwmlCp4IJn8F6AxCpAB15L0ZpWm/zb2fOywLwUfPXU2nX10f+sO6CN9Zr8gKpaXlTxIVtnuWL7QaKWTCqOQAbnYQx6Hbbe+6RFNx86GxyULdzvU/3nml+jQXkPFDR/oUsUeMwPkiRCKcLOiSGSU27+vzNAaMWP9Hk9ZIH119Tfz/lrZuPfBXjYfJGf1gSDDHlt2nQNIHZOBWGF3ebaJ+X/C6cJA3pNLufwdU2AhE7wPuMEVERL+FxVYELuv+qGXbUzYNV7K7VIxVK7XwVU/gh4AX9CAEY7qvpo52nx/g04fZjrptM7xY9NElgBjBNnVv/+Y6Uk7wIlHnNs7O/HAI2HSN8/7zh35E/Q9m68+qyRBV9FWz4VvTahhY48efqcZy9ecPnkiQhpKb0s53kd6+BwVRxp6fQhzAZz/qSbho4xlZQFwABHHEeGYZIyhpzIRbLKPurm6AJZN6hanTx/J+CI3pgYMmNXOHXOXGiGdW0vpJ036BW0ZSM93agMTZU5hZNWfwIeBHwcW52/74ym9RwvSNARYyR4qY+VRatOS1h1NKTlYBTR0jgIqFDQsowRP074MOGHUTJIcW0rSy24QCtDsU3fexHPFNFS/Z1zRF8Z40KI0taplEr1kuGJYyQOA2XJUCrRh1bD5qKwYkABjChqzAVt1edp+hZO6WECQ8GgRlBiqUoohQHH19efE0rku9/9DtPVxO0MlwPkBSiJnA/kdISizhIjIO1rc0ns7u94c/0NN7dvuL15w2F3z2G3pyxa/gKg3YoWv5DmTNkI4BDw7HeZy6sA5ZKcK29ef8uvf/0rPvvsM1599TWH3Y4xTAKkFdcEFH0Ioshd5ZmaE4EFk3Wl6h72B3a7ic8/+y37/R2H4ywZyGGgoi2+lG5Riuk0qB1yIpBVlY7Y246oNYRpTux2O1JaKNmc6NUJNRDjnOp+clTZuPKS8BYBGYoAACAASURBVBSCD8xp4c3btzjvuL+/57gseO85psTGe1I5FSrDbAZrFs9qfM3p9m4VX7LOQrVI5wyq0uORQMScfwMfzmtZ+597Sv+a8dPWw82myiZ+usl3WRLNZDpk/vbfpzBCUxi3tpsC1Ax4L210z48eYDkP9BvQUERwtY2j2iajrZpT6RDq6onT08CZlb6u39zNFddsjl2TfVfflvF8T5AA7PSe+n2rZwaIadWyOmQOJ5uv+l3LPLeWhZbJ7vVpxKl52A63D/TtsM/HGFv7dLku1YHRe81lFbdDz5+XBP5he8T+/psv4BsscOIMt7mnnal6IKh/PcbIkhYcIhCKgyUtUO2ezaVdA+A+sLXxMDaKgNTOGl/p2EtAlEvRMjJxyrNeTyvragIt6sJWvRYnyYasrLIYpRwR4DgfGceBWmFZUguybF5eXlwQdI+7vb3l/v6+BeHCbFy0nafQHUIQPSvT5bG9Rjo1iSMxTCPpOLM/7AlxYAgegifqcyxZsrMBqZ/2wTO4gYVKSYXiVQdEgSNhXQQ2mw2OtIo5ltpskIAYGtyWdY6dA5EGKhljzvyk2rxt8eVr0WAxRPF7KuAFmBmHkZRMxHdcbaPOoR5olrUIwWkkVx0li17FOIqNFQaHosNtndq8X7UQYgfK9GvfAA6hvMPgBKSW9bcCIyVLu90YFGwtBZUgF70v69LmNW/uVhCvlorzhWBCjhYYQqOY51Iaa1BibNGbylYiVjWh4gdi8IxDlLLOsjShwKDAfc7CDjDbmdOi9xRa1wgzozln7chzxr6WYcO6r5i9MxDonC0lwWogz8IyXs+l/kFdbQa1ii7JkoTJkIWZIJ3aIOBxoVK8I5dKSgvzfCA7D8MIqFaC7kWuik8tkph13Q+w0mmZgzknoGiAuVDqhHMFfJDycvXTRAcDLVMZSGVp4e+q4LnuN15F8tvcr5XBT1jbcJuTpQBZkpWrTZX9LvogTOBlIVa1uUhXEEcVH8wNoqlWPGSnWXhJYjlP6/rRALEzP6ffW6J30g2vS1K2fUPtbc7r/qejSVbdNO8lWdfmr4E8DmW+GLgXSfNR54HNbjmjlf7GEPT++hjQdJrO1/bj99XO7tb4t3+bgUt9iUm7b9+BNPptZuPa+RBORJV0qHYNWsemH9++FK4oE1Jasiur3uIUV5q+ofdeRGGrlMhTJXleiq3VNbEkPtpp0uqx408GwFAAV49zeq78Tg7NTuh+kktuxg1vuglOneVTZ8M5caYtGDHHq1BPm53oz8XQFJVsenDNuueINe6yJhWp3elO2k/admdq+GxiuRP44dR5f4w5YkfskTIdG+esKwSC6soupOGmE5GgLFn8zeUTLp48Y9huceqAFrQlKbZgPbPCSsF5StF26E42qjiMpJJEFFQFGdKxUFNlDANxEnEiP4CPEgDZxj7XJCV+FXyNghIG1zbPEAOR0DZA550E/joerlits1xPdSKKGcMATjPcZKpPFIfqVfgGgJQsizWEQBhH4mYjbVynjagtOym1sQxido6NsiTM4BuzpOjixjmKk7IcyehXxuGKYbrCx0iukKpQ9IfNRNKsl6j/imp59A2iZPEwszAMntE7phBwgkGwRBFH8sUxOpg8xCDGuHgvImElQJb56ivkQ6XMC8MQicExp5lhGuShUnCjI06e4iGRGC+i1C0HoSzmIpTPgGdT4D0p0eQ+wjI7Djee19/O/OMv3/LDFy/46s0FXyw33Ny9Zrm9xr/dMe++5c3bP3B3/ZaSdwxxJtQNV9P7fPc7L7i8GLkarkhpRyk77o93HJcjNdcVta/ifgXnCWRyTeATPoiw3iWO4/6eeBu5mzO/+ewzvvjiJW++veb+Zk9kgFRx0eGCBET75SCgloJ2BaXg6fNPacGHyBAjKVf2hwO8Be+kbZTzIrZatX45W+a9aE9sV9XRUIEjh5YMaTsvxBYMw8B+v+Pu7l5p4FUZSI5sFNfiCChNt8tynGDqzTxW6Q7kPalkcoHr/YF8/VYC0FIAzzhtcdXJVKhOa3TVPqkmitBhkY4oCJ0UkE42cSQq26ll/6sFUUtzeiwwNBqttZDNqZJJCs5Was2i+xI8UVlMOWkvdy8Z1EptGRdjgPhaNNto1HDpxpBzaaClgRq1JAyI8W5tWSiAZtD1K11ALDM5jmMLPvG+ZZmTAkE+BLWVQoe2Vq29dkVzqKpSfLV2TuIKAZ3wFecVXPWeZc4KgEQBg/MiQWenut7X3VotvDkcfatac4LtemrVIN+YagWkLl3ppZqRzzmpbRZ7bWPSgwBWk59rgSyZRq+MAQs+sjovMUi23QIxKszLQjpmdXAqQQFa0wMRO6sABQjQ5Lr2vNX0kGSf9WqbvRemQckJj4foFWzSZ1AlMxrjwDgNrPXtp8yhWlF9IxmX4mgBYUpJ2slpKaD6j6SiwresLJ2S1y4RS86MYVwdtypAUS5FM3rqi9Sqc7ggYnJCoUeBZVdlTpVcmqMNAob4uLZBXJZMKZUQtdzQOQGAGgjomaaJZ8+e4Zzj1atXreX95WUi6j5VgzAcq3PM81H8suw4arZ1cpXNZsKP2mnCOWJw3M87BhKDdhExF6ZWWLRuOsSRi6Dtoo97lrngBgl0K5V5ScRoonGOisdHsSPzMotWhdpxs5O9nlaMGuAU0XQSYUOx+TOO4qIAeCkzUBgokGdqninRki7KukDU96U7wam2wjlQdy4wGaOUHh2PB/JhFk2ncVSbb8GqfJeBYqlkqrJnVgWx1WcsWaD8aRAgcH84NB/Z/N9hGGQN+0wMZbX1uj5LLsRB11HOJ6KcBgLlnJmXRYCv4BlCpHoB+6OyPXNOEuxYEBiq7CdZtA9AXK1aINTKlorXjhthHER7olQJ/r3jmGdKWUQ7S1lGJeXm3wtrVtYYfgUwNErSII4W0KeayCkzp9TKpKzEAS11wnvGjeh3LFoW4JzTII7VjiIJp1EBvTJLmRGpsMxHFgUSQxyoFIYg5bTZiY5bQWj1uXoGJ61JUUHZoMLLOWdlRSvY4jyBSEpHas3My4xbDox+2+69NTioXoFRp10+/Cos6cWfqNlTam6MwJozdVlUqyZSqxffN7ZRIgQYRk/wUsqSlqyJAAG/LUApNZPLkewWQqwMg6dmjy+D+heR7EwKqEBO8ixqpiTlU2nMFBQwiyE0rbEVzC3CEGbVNBG7raFvlXJ0A1pSTWSbU4id9FX86+wdxyzJXeeKTlQJ+Beq9riUAL6BA8jSrQrkmw+gCKBOR2tIoazW7lqLgnx2T6IvIiCF2IG1RWwIJjybWzxpcEVwstdbvNkDt85VEtodsqClSQJW5Vw0oX2a+Kg5a6te87lkvy2lIkkRS6S15dZsjtyL6TAp47AGXNEEkr0nVcKgTRHecfzJABgNDmUN0k9fPHmj/Gi+eff+Fti7s4+h51fEwb6unr2pZVrbeVcU8vywX/cZP/tYefDd3Sn739Xu8+ag1VORsHZtHXjR/xlDFCyzVorvsooN5RQxy5XS5KjFE+LA1dNnvPf+h1xeXVE9zEvGK13Q6Xm8OlqW7ad6sC4heg2pFJKxO6qjLFnUpXPGRXHI8ILpFCe0o+yUZlS8iH8SAMnsOO+pXpzCimYwXWxOI3hqUEdbASthCAgK73wQwSDvcb7IPXl1+PAUItEPOD8xOBGv9EGBg2lLGCc2V89bi1DvY6sho1YiglxjOhjDBheimK9B67FDZZgi02YieE+tkXG8ZNxu8DFSHBA9LjqWJUvHlFqI3jGNQRzDBClDGAqXFxu2AwylMuTCWAMuwDw5UgXmip9hyIXNJpJdZfaOEh2XQQ31IgzBWCuUCe+riHCWgVALmzEyjIFMZSlHIOMGCGHmuBzxOAbvKa7i8RyTY94lltczu/sD35TMm+s93375ll/94+f84n//Of8YNvyv/0via97i/MyYjlzlysZngk/EMDCMGfw9rjwh1Cf8Xz+/IR/v+eFH3+WHn37Mhx8940Bl7mWSi9LxqzBJgvdc4AkhEeLCsCxUJnJO3Nzc8PX1Lb/97e/44re/58uXX7MckggXlkomk30lValH9ngtx1HjWVZtiiItQoTW3FN8/dq+Oev7+1p+czwl+BBBLO+lbCdr4Npnhw24WJakmYJKUaCglFN7YO1Lm2npAE75WUHhHpxFHODDIhuUtaUbNdhVtKUZr9qsAhqEKihSa2MOlFo1+3PaXUU+U1ownbV0TYLhDIhwnMO1+1iZY83SsmpTWA8ytPxMA2cDg91qmywbKQ5U1hKO1fk21fhhEAfLWDI5V2WLyvjlfEpF7tkvPdOtM9gSOFqgok7AOYhg49myeSmTWIMb317ToKRmASOd1N7GYKyRvqzkoXBk/7eV0ohOxENmSdFMtQDNq4jdsmRiWO8/dCxGO/djDBoLvKo+X7sWY/iU4qjOaL2uzSmnTqRzginLJFMQg0S/0RuB1xxZyag6LbMo7XnFFupZq/bclUt5nFNqes2kZIypiolG259CVaCua+mnc9LEj6v6GNZ+09VA6NhTRcEJqel3LZlha6c5c9AyUqWIGKN3nkEDZa9UElckCy5mpki5o1u7Atl8zl3pypISh8OhzWtz7m1NDUPESsRyzrx584br62uWZeby8gpqoTAyTQNxkjbfxrgy5/d+v+MwH7m4vGS72eCipxyB4yLtQucjaZlbm1ADxWx8YowE57naXDAvhd1OgrlxGpimLSWLrocFroP3lOhISbLlqSRwGnxr2aZ34ucc9nuoEiz7YCCjgIa5OmoIOFeQhkJOEwiOWhZ2exHLnKYJoOldSDJlDab00Z7aB7NqkiFS2yMMVOd8E6+U0jrWee6k5KJpQ1Bb23NyhkLrRmLApQXaMYSTdrbee2pQBqdtXupiS5ws32VgSw/E9LTyXLTVZinUnDgirBEfAtMwSva5ClDvnQJ+SYIt2Udkfsm+lAgVBgRbdL7iYiAslZAy1UvW9pgWaadbKtmLToKtYe89Js1UvVsZx22soar2Fme2igrzce6Yfk5ZGREXPMuSZG+vXWkFvluv/d4lpSHer4Ly1QkYUJaZeT6wO8wcUqaWBR9GqJmUC4P6trVWUk6wLASXiNGrA6BsLr1XYwqJbUICbCQ56/WxSmCvotEZBe0yjKsmS5KIXspq8arFhSasKgHpOmh7rc5Asb+1UouV3xYtg9IOPnVl/lQPxRVSTaQ6My+HNdGhGnXVVdUFq0yDirArumllnfKMnO4J8rrYsUBejjhXcKqHE7x0TqwVlpwVkKeNMWbXa5Hy6CK7RK4izislR4kwSMJMcTFckPEumvAxj6nFcFnWH9U0rdSO19KuFZs3J+XxnW9X1vc659v+3D7nuvnbPrz6a3Y9dK8b48h7T3TdHqa6Mw53mnQ4Yw/2jEmn/k2teY2t2/ygASpwHnPLxbuqeja2n+tnxe68IwDnTwnA+CNHH8yfgAUNFFgHpDlnnBqRx87Vf+b/j2tsBssZsrK+9q7vP3H0cA9+11/fuVPolXYs79HzdWhLQ/9Y82xO4T/nI9vpgidXz7i8fMIwDByWhSUtTE0hVpymogthzWxlRfJUkMh55uWo4Img0WmZKSkjtf4R50y7wnoB+9aSsCK91i175lzAhUEpb6DKnE1EMngviJ/3DHEUQKMUnM9I+8OBUgUMCXFkGCMuZCXEOAFgGAh+xLnQMkLNQBAlqB42DdQQ/QyjoVYGpdWKcOhAGCbRAAmB6eKCMA7iLAbHMA2MoydGh4uOMEimTGoTszi72LV7piGwndB+0nLJeXLUWEmHA5ch8jRGyrGScOwCHLKcbxqR51cTbgws3pMi+EmAkCUJO2MTBMyrJHCVQCHOmTHtRcQzJ9xywOeFuCuk+3vm+3sONzfcv7nm5vVb7u92fOsOvDresvz2FbevbvkqLbzdzVy/ueX2dkd9c83PvvsDPnn+gv/y+8/4yScf896l54OPLsSRTwPejfghcKhHvr11/OGrHb/+4lf83//2H/js7RfkN59Sdz8lvHhG0dphy5BX3RxiEHqnMGuigGAx8Op1YrNzuHHki6+/4fPPf8fLl1+xu98pvd2YWYI0W6DpisxD7yBoxjd35QpGKTRAIQTJtNLR1ftA8jSQP/3Z/hgVfFkWDoeDKPd36z/ngtTcGoWwszdntujhsZZY2WdKKdLeeJ7bZ3padbUN8ex8vT06t53OxqYUuv3twcbXB9j9a/1hm+u5mGPLAujO3Qs4rhu9fwAqnJTaOM8qNLzoeSXTabXXElzLfdi5enV6u4dzKvpj9r2/nx70Oh+DWq20zT0YM7t/76PSnq2DR2hskfM64L704cHYaXAFp3NISgAd1tmh12iQXcHcYR7c6/lefDIOj7zez8XzzHStaHmDilo6WW9FM4U+DNLW0gm119TLhTFj4OI6lhZ8hbCWkbQ5pekycbx8mwfL0muL2HowpkXVsVuf66rwL4GaBX9gXRViEyzu5469ZuKaNu6rL6NlNT6Qa6Lod1jJjmXFK5CRtrDWzSSVFQzru2z0AN6yLO317WVoWbiq1NhhjIR4KeAShdevX3N7e8NxPvI0PWFbpNW6dJdARUd1rlSvwqELOUvLc8n6R1y0cV5a54xpHKWtc/DEbv463R+Dd3hSa70ZfaA4m8swxFHZX4GSC8d55jDfU+osVHgtCZPSPXs+VSK0IrY1eBGiW1SgMwSv9kxYA+M4tk4aJ3a+WKcG02mRNdPra6yAWLcWSmHO1olIgMNSShNgNW0D08hwamMrRmtXyneFkoo+iw3TELtAoKqYJC3gLSVT5qNSuw0I5MGaqV0XoHa/ajJMVyPESHSu2U4R4swsLNp9QjvNKC0/Z0kCYEGco/mpUvbjml+87pN9maX5h6dgNayllbJ2tJSrDXcP/Lt2D/Z3f992L9Yq2cVw0jHMOQmc+/28L1lrgE8qoKUg0XvREXKOnBRkKIWahS3sSlbfr5KLx7lR/XFlclZ7DvoMq4nny/wKfhSNmVSoh4XCgTBU4jApdmN7ioB0otWUJFh1nmLX39lsaxdr3V8qKMMGTTjonC6VmmjXVos4utnYhTpmDk/wa5m03YerVYFsAZitlEX09tReU1UzSu5XnrOA2c4055ovL9cqz0HGtNaKC3Edw25e46owSoprn6UKmN32SLUzvnptoL7Gb+eRZK0CtfeMSDtP0XILT9f0oUv6rPGeNAAwn89s9wmA0PkPPdPr3G/q9/8eYOh9k1STMPf8qt3UJ+LOy6t6P7S6hz7pAx/xLK41+7WuX0VQQeci7zz+5AGMx5x0cyJOcJzeGTlzhh9z6B8b4Mcd/4aT/NGj//7+U/+u737ss4859I0CejYZKpVFlJjW7M/ZuVfXRp00pCXgxcUTttMVFMfxIOUfQn9Vh8khC9nZ5BSakcs0emwhKDui4BG6cE4zNS8EB8M4qMilCF1W7xS4N4Vh17LdwQnt3PmI08xRG03v8CGKFgOeglKjh0kXXsKHRBwdnoFcBmoNDHFknCZSmmVD9BGIOEaCnxolubUN855plJacl9tLnHMM4yB91b1126gNkRctgkgYR5wfcDGwuXzCuJkIg1Dch8mxvfAMF0jb2CJGWgIjydYEt4IoQ3BMUb6n5izlNBEWEmGqPAuOkGbc4GEY2Dq4LzCHip8rEXE4h8mxFFj06SdlS7sEaVc57BP73T2H4560zKTDjrvXr7l985plf89yd8t8c81yf8vN169gnjnc3LK7vSMpPfx2uGfv73hym3B7uB0iiw/MS2ai8sGLkX/1k4/4z372fT796JL38kxJ18R0BEbqPhAcXD3bEp5OzB9c8vYHl/z0X0Sevzjwd3/3D3zxzVfs2PCp82yfXDFYVqkzgDkvLD6J81xVydsJsltqYNnPvHz5DS+//JpvXr3muF+E6utFuzwX7d3uvDIBxDmSeakZeQ0EQDeHLlOcc6G603ZZJyUCLSg7/XMe1M/zzF6FOnu71zvJoCV3jwT9j9mI1e6couJyntIyclb72wTuDLxwp7bsHEi1QAwNsoQ+qTo1zmF0Qqfj2Dug9p6gZRr9ec836GbPzgLPnsb8WNBv92mBklcHem0nKddSDC1kvSa5P8mK2tj0eiOmJVC6XbZ3gIsKBNrv+mDiHGhv88rGzXHyfGu1GnHJYOaifdcd1JoezJHHzn8+l2r3O3FsDVSmzcnzcWnvecQJ6s/f/7t//bHfnQMoVfeXqpua2F2kLWKuGtwEpP2aZG/a3HI90KU1tt149/fyoMS0Y//I3/11i7cvGWABCXLKBMTJ9JXWacDWQ81Ca5eO4oHgHEvHvumBsdMg96FAqoOWSTfav9kMW3e1VtWnUFCWdb713S96G2WvG5DpnGNzMTEOI6WgVHkpldmMA5989CHbaeDV16+4P9xzfytigsu8kLapiez1DIBhGHA45uPMMi9Mm4nNOBL9eu8hhBY8rUBQYOiCymVZ8EQuthsEfBT2SIyOUUtQgheA26GlSeNIygeWrPMhF3LNUKwOPslYenleUMiOpqVRcqEGDYxRkKisbWTneeZwOMj8K46oeh+r6XRt3ZsNLgoMeZ1zuZyvRZmDNn6iY1HWsXSil5NUr8N8l7Yl6n0dy7r3eL0gH4MyZCQLnNMiDL+i16xInqsdA+jMr5aAc13/kpWPp3PaiyGpuTAvSyvpMro/XpJSFeu8wZqA03VvNPhaCi5LCYmIYpvgpzBVl1wkqaUi8L7pg6znM6aKXb+jtrLgx+6xt1UN0E5ybmNsSSC3htYlryK5phkSY5Sy22UhLQLaDNpZw/vAZjuS6o65aPloqUQnZY0lO2oNxOBgDPgiIspJvXqnJX7eBXyIAkikhcO8sOyPuEVKRTcXkjwU/2btHhOcamMUcAro+Wb/aguaiwX6ThgJLkMYHu5PJvprQBLKmK01q76alJpFBJyMXsEvH0nlgNU5W8rVOQP7Vk0TQNiMHi2DMZttPk4hpQJZusNU79saVLeDoGzZWllbnzo0/nD4gggJN1vpmOIAQZOsRZjMMttMu+ckVXw2LgKg0PknrYOUifl7D35NzpkNsPP1CYLH/Jw+edOD4/119EcDUjpmhc3pfp2b/egTQufxdfusra3ud/33nB/y3pPROjnvGrs+fvzJAxj/ruMExX4HENC/54890HcfDuce/vY8GOh/b5vAY9/7mDMuv6dlhM8n37lz2F9/Q8NqVd2O0/rqNh6gNDYR2dluL9hstjjnKUkRTC9O2nr9ej34JgKEE5Egp7XJhSydSiiURWqWqZUhBuIwwiAgRghBO2SaI951zvCW8dZgJwia2p5fRQ2dIPVBKaBSwyg9s330+CClDZI9UsGpWlfBHT+CH3BMeEZFdWfEdjhiDIwxEB1cDEIPjlH6cZtDXD2th7h0UAnEIQqq6z2eglOqHgXKAjnp+EfHEJ2KYNozqbjsoGRSnqXmLXjGEHB5IUYYQiQUpVYejzzxUoKS9f6XIu1q07Hgi2dk4P5+z/XtHW9u73lzc8/bmz33b+65e3PL/fXM7ubA7e0td/d3HOY9t/e3HI87qTcsGdLMSOVyM/L+82d89MF3ePHhhqdV6lzxlTTcEsM9F6+PXH95zetl4eDgcDxw9/obPrmc+N4HH/Dp1RXv58zm+oaa9/iLgThOmpW4YzzupUxpU9leDHz80Zaf/MsPuE63fHX/Db/88lv80+d8UB3bzVYcGk9r1QdSujTnDHOiuFnb8Tpu7xPfvHnD33/2Od9884a723sOhyO+qrJ6NWQeiVFkp9ZqI62V7QSFbH1awJBLliy+O1Vz7zcT25D6123tSvmGUKCPx2MTeWtBsDrup5vaaXC4AhunAVizR04yWmsW+hGqol8ps4amu/UNDzauPiC1n+XzvmXNOBs7o/SXYiVuYODBuwAZu77eXp5vkPZaH6CdZyIaKIE4/+cbtwXdvf21QLLkLI5bNw7ne0t/fT1AYG0ZLTA7v6bzZ9ADc6WcPl981bpsr5oYmjn0q8aFPW+7P8vuP3qtdXUP2nMq6/i15+lM2LRo5s2dZCsfvf7ud9YFo//+3uHq10s7n9duVCfPWkFsDTCr1ld7vzL7Cus66R0wC6wF0FjHQBg5Egg0h6pdFyfPeXXSawuSyVKG51TzxQKXUhVNNSX/LGNXNbtp87XWtZPE+fxvc7uIAG+yIDCIA76k1S7Qzyf15p33XQnSQ+aXgXH2uZwT93fXUC8IV1cyBlUy/aEGHIXNNBBfPGeMkTdv33D99pqbt2/Yjwfmy7m1WnX63zROHI9HiiuyR3tPSYW7+Z4hrGyGzWYjc1iv6XjUksVhYJomBToC0UdlTizSXrI6YXtqYiEt2mVF7WgcBi62FxwXx/F4VKAmiXaA8xyPBwVvRcLOBPyatreyAcwYei8JlHmeWfrnWKSVZiXhnIAVPePF2uA2G+ZrV/Ygwt21imBhzmlt5+o9oleStGuJZoN1G2ggQyltMfdsPrP3TtehAO5Z54tfwy3V/jC/Nat9sBnZz0/n3Kr/hrADC2m9tipsC5BygqIaAHZkBWJilHKvOXfzvxRCFTac+Yc2ly24XYNCKUsTYW2zl8aMO/XbZYz6f69tIvt9ubdNxnixdZOp0upTs+YhrnumtU+2PRyUneKkPLpOI0W1caJ3HA9H5uXA4bhjP89SuhAHio5FITMfE7fpyOAqQ/BMMYjWQdHEpBP7jFfdtxhwcaRwIB32LHMC9pRaubgQn7r6ImBqCOJzVbGaok/iml9bSml7ngA4VcsqgICyV4qOqQENMkpia6EHDko2fS+vfpY+w1xIyVjdKmauZXzWUto7LZsBqtXCO2PqxLYuUS2tlLJmedbgH52utjs550RPz9krTuyzAhoOJ00LkPKyEEIbD+8geAhxZBoGgjuQ9eQGjDgsNtOuOO2XriUIspWX0O+Dp77VGR7ywLc7L0c9BxnO4813JRzsnG0WOQAAIABJREFUd70PZaxVS3Cd+2H9cb52zv+cskrOAZ6HYvGAkO+d513HvxcAxjnyBKeYzPlgvgtJ/Wd+Ow++sH2Rzdjuu+rDN59fx7mD1/7ASUbR3tvXHfaTrTne9rctkrPvOL925xxBKbA5L5gqf9BgTuhbUvAhVXAyDPI7Z76RYuMq0oOj1gw14Zw4dNFFyYYo0i4TcXXOvQIlthk6zIhlSAsB6VJS9d5cTtQqxlW6IBTKcuwc50IqtYndeRwlzRzTkTiIwrGhp6L2nXC+MsQEpeDxBD/gypGy7HHLrdCRi6ck1mxAdfi4JQfpMoHzpOMAIZBxuCBsDXyUNleuEqYtbwks4wUXF6NQwsqMqzOhFgKZ7RSZgmNwle0U2U4DW1d47zISSySlwrdvXvObL17y0w8+4bs/+hT0Oe0y5MPCcrfgj4m7m1f8m5//JX/5N3/NZy+/5M39HfNSoLhWOjGMIz4GXPTEceSTZx/hyiU1L7iSif6SD95/wQ9++D3+4r/4z/nhj77H5nLDN7t7Xr76mq9ff8vN3SuWm7fc/v0XvHl5w27YEC83lLdvePH8GT/5+DkfvXdJ5Cj1m9tMKFtIFwzDJW4qhC3w3JHqgRq/4uK5x4cPufgm8d777/H+d0Ze3bzlq1fXxOAoT20fcHgvzoQxZCCxpMLbuzthtOQjMRRudju++uY1d3cH5qWIyFoWkEICOaE1Vl3XFuA40CyN1sa3dWWbkgft2pI6Gm6/WVig0AdnPWqeUmK/33M8Hk8o6PZaTz+08xulcP0uWVSuaxFqDoQtOCuRkNedBqYe7yMxDgzD2PrJt6BVPLxOHHE9H/TBqrzWyh+6HfcxO2yB27nzaO9/bNPtg/MGIMDJaxYwWMas1nrSmlACdM1cercKMFYBMEPQzipavlZNi8IHchbhtgYuGWii15I7uyxA8CnV1Z39bPf3cHxc95xsDFenQrpFoKJ/tADqHEjox+9d2ZhccpeVlMwUwbW5t85Vh3NZr2s933n2513P3KFOd1m7wcjNSfZQ4iaHiMsVbbvtSY/MEXuWS+s04UGFzxzuBJyz9/fzRkRjhY5v4KDobQBYSYgxTfo1X7uAB3WsXbMTMYRujrIq0NvYawDlu+s7n9tNyPLM8UNBjAaKqC9sz+Lk+fbromN+WZmGgVrGkLBziDDtwHzcsd/dU0tmu92sz58i3MdcCN7x/PkTNlMkesfrt3fM88JtuaOUymazZRgGxnHgyZOnOo99C1rtWuZ5YX+cGeeZi2nLOA7CwNRVkHOmzAulOjbTKGKfYWCZZ6gI68JFUpKgPy9JgCUfKCkzzwvbCxi3o+zduVLLLCyMtIhQuBMWpInhSYu/NZCwuaBkf/G3gpSx1pxwOMZhZPAOWKis+h0pJQVeVjCtVGVNuLU8Zhjig/VpAGK/rk/WZVhFJmutlA5s7P3kQlURWTnnXLN2gQvSir2zVyZeXWtt4u+mWXF+bUUBgGEYGmC2rjv58ppFdHYIAz5015QzqRbIAgqoQynzpK031wWZvZ/sVp9W/57Giax2SEpXVhHhB22TVWPNqV7BY6ynzWbzYI+uteKpovFWLagLDSwRMVgoxUrYhDmQiugWDWHADxFfVZA5FZYiPt2SkpQ/xIGCMJmLFPsQnWM7DVxtt4wxqCaDsAW8C6TiWOaFwzERQ2B7uSUOE1s8zDM5ZXZ3ezyeOMreLoyogYCUh1h5B85TcxUBFB0faVttWlG1dX0S+7Lw2GHAtwAcar8V5CjFPisiqCVblzZdX1XabuNq0/3x6oPJ85GIvrd7Jdd131VtsTBq6Y2zPb40kU+n55HZ5LHOKzb2uktLsrI6aRdbtLRagc/oHDWYDpHGMgZ6UmV+eSflzI/4Nubb1eKIEUrxoCyrcRzXBJZeq8zHh/v4u/yjfq0+9v2PHY/t6Y+x/x/E47Y/n12X/dzH8P3n9KE/OC/u7IV3HH+SAMb5zT52vAsB6l8/R5ze9eDOncgHTmV9OJROLXQLwJvzYFv9w+/sM0JrhqdjXOCaMwyrQe0BjMfG4IRueoY423WevIA4cPO84/p6IQ6RcbMhtHrJRFVVe7wIjzmydAopEGrB4wTo8I7qKrkkchVRJucU/a6sQlOmtFuhOkEcq6r4ulzJ3uhHllioUGdcjSJAmnVEg2gc+HEUtNXqHKPUQxcnIosxOrwXwb4lL1ATcQhibIjk5MkJIBH8QimrY/fmye+4Gb/ms1/8G92TV2qloPae4rYUP0hNb84UJ51d5mXhmAo4TxympsQ9TBc8/8Gfs3n/u7jtlmmEIRS2I1xsIh88u+Kj9yIfPIPJixCiB2qJ1OI47gvPryYunr3g5c8/4xe//SVD3PL8ex+w2cBQEtevX/PbX3zGzW9+x//xr/9nXr/6knC54eMffp8ffPCC+8OeUjKbceL582e898H7bK8u2D654Mmz55Tkefn7b/jy919wuL9nGgY+/c4Lfvj9D3j/2cR247jdv+X3f/iM37/6irvDHmnx6klDJDy55Dvvf0jcDnx++y0fRcePLzd8OCauhsSzjy4ZnWe+3nF4c8Nx2ZMv4Mknl4w//i5xGkivrnHxGy6H9yg3N4QdfHz1jNdPM7fXb7m9GBnHrQqqyWElED6I7sWSMnf3O5Zl4XIa+MH3Pub9Dz7i9e7I8vlLdrs9rkD0UZkyVTM8UTYxjRwLVQWVXVs//doEVOBNMi1J59D5mjy3Rb1NMOBiOSs1MDG4802pz+D15+7tgfcP7Zx8p3vwO2sDPE1TE9DrS0hqlvIJy1Cs136OxK9OZz9O54FYDyyY3bPSjHPk/rGxe8yW96Bu/7v+870Ntb+jihNKxwhtFewcaGs3cUYVcHIeP/gu4C0tQ2rOu11TGz/6MozSZc5PtVHOgQ3J1J5qhBgwI1mb3AIVG087d/+90LeLe5jheMjS6wCobnz7zwYVeLb7OXeg+jFfgWVzbiRIsXN733XHqCZeaEGMzKWgwXOpuQnZWlASg7D+2prLQjOehkmg9Zwlq+7iA9DfhBftupcsFH2rvbesd7MtPWOmrpndqmUItRTQZ9tTbu259PMy+CCdz9p6Pa1nfmz9WMautXbWZz4MQ7vG87VQSgF/WkrVg13t3FXFTZWpM/gL7ne37Hb3QGW73Xbzrsum4bi4uOCT73zCxeWe12/vuLm95fbmluPhyGa75eLiAu/v5bzDALUyz2Lrpmki58BxPrLfH4TG7hzTNDHGNfNtYEfJmWFIzC6I/+Fr0wWq1CZ2B060U3JmfziQUmJkZJxGNtPU2B273Y79fs80jYyqrWStWSUYygpgimBedvZzJqUsn/GO5TizWw6McdCuIQMHZdMZkBFC1/bRmKzdWsm57/xyWmduAqs2V+wZ1lpYdCxtfK3FZGvVqp+zznJJ54SxGOj3JVly7Vm363MixklntyQ735WrBWXE2lxWIMI5bX2pYoBZ11oYB4rTTmzeEwcTjpUuXhFlWhlrMGdizk3i0CmTbxgGBgJJ2U0m1lwV2M05N3FXW/fOwIZc9RrXcX8M8LXsM0BwBQjiU3b20b7H1p6BgfI5z5JlfuZlEUFO+cKW7Eopk5cF545kZZ6IamZl2m65urrixbOnjENUwMERgmi47Y4zh+Wee9X1Cjc3XFxcsNlsuNhekHIi5Szdg+6lK9E4jWw2kyQsXJWvCoEQEGHnnMXP9qIjg2oP2TzpS5/6MQR59MFJVynXgAdNeJZKrQvVBy0pUm2gYSCVmVKQ94iFxOseUPPaXrzNsbC2yTbRYM9a5tBYP6o3YgKYtdZWxuecAx8klnGIkD6rp+Sc7v2gbcMLpTg8UIwVUvJJwkY/qdfR/eYMd2v7eghEs3fZt/Xc/KTKygJj3Yd6+937jI/5T/3v+8/YeLax6A7b4/tk2h8DQGzd4Fbmqp2nj+n7/cgASuuu0p0NGd6HpZT98ScDYJwPem9MHn0/ncv8yID2jkR/PJYBO3ce+mvijwyefb6/5tXJOZ00/XedZAN756/SRFDOr/ldDjogHTaqoCzV10fe1yGAiPFJ+cDdvQhEOe8JQ8SPgzp8FlRIl48YAkMYIEQcgeBhCCqC5yslONwQOS6LZNqWLMLGQ8S7Cq6Qy8xud1Qndh3zootfWYJ6jZVYEvKWqo6ttBlzwdouCrhiQVGtlh/yUAPODYjhzJS6kPMeH6RlmncRiqfWgCfj3KLAiwiUfXP1kpvta37zy59LgDMvBKWY7vc7hnFL8Vv2c2EzbaWEQCl9+/0BvDA5REB0ZBgnYhzJr79hmLZEX3E14VnYhMJmcnzw9Io/XG3ZDIHD7o67m7csS+bIJbdpS2Hguz/5M378H/4L/uI//Quuf/1b8pwYh0qeE19+8Vt+95vf8Hd/9Tf89f/2f/L25bf82Y9+yvf+7Af8+X/8H3D15JLPfvNr7l6/5dnmkk8+/JBPP/mUOESm7ZbxYsvffvErbu6vSTUTx4ExRJb9gTBnXv36C27+8DVffv2S3/7ht9ztdowXGzZPNyz5iJ8P/PiH3+W/+m/+W7zP/E/f/o4PvzzwswDfmfdsq2aBPtgwPt0wbRcWDuyfOOonz+G9p7jL93l2+Yb87ZHl7cIH/jl/2N3xPpHvXA38/es9h2VhdzzIHPGykRyOe5YlgfNsLi64ePKUjz/9lMuLK0ZfScuBL15+wz/++nO+/PorBSsc8zwzEqAIhc17VezP2Vrct53MMjUtEFVamwWk+/2e6h62bT5nT5lTblTmeZ5PMm2mPN+XG5yDoO+yd+fvOd+kjEocVJh2HMfGTuhZCnbItWv7y7Mg68QhdGsW2mxfLrllk3vNhz7ANhttv3+wsbm1TrQXkLJNLeesHYlW0MAyZZZd7+mQLQiltiDVrsXu1851/p3OO+bjKnRodEr7XP9cLGgxJ8TuEYTSbVnZYRhaRry/f+uW0tpMz6sivn3W7qm/1h64Om/RaNfZOxU2PlaOEnxPdz+jmwbDaRSYLmv5gV2bdWPp2TU98Na3Wj0HdOz1GGMrJUBZG5btlWe1zm1YqfJtT3COlJZWXib32dG59dp6Z69WmeOu+gZiSYnRQ9+gZF0T2rowd2u7D/p66r49Q+ekXAIn2hlrIFpPfu7XRxPX9KtA67lDac/ytFxBAaQQTsaq9znO57lzUmIxhBUo2+/3pJS4vLzk4uKi2SsbuxACm2lDeG/LdvuEq4tLXr9+LZoQKVOWRJ4Xttstm81GnkFVMEYd1ziIeOnt/R2H45HnT5/ir64oSJv37XZLCIH9fi+ldEtiu9my2YxAbaxRH7yKbQZSlm5qT54+Yb/fs9/v2WzHJvJnAX8phdvb29btozEcvBMRxKJtkcMoujk5a3ZcRD6rc+BCAxNSzuASpQFYvY2QdeS9JYoWfaZQq+M4Lw2UgtrW+mazEXZJrifrykoTeqHYWirOrYyjGMf2LLNe+zRuKYs8xznPJ/tC6AFll9rcGUI82VdqrSQtw1uWpbVUtTXmgOgCoUrmXvBIKecJQxTAbIhUMsd5pqbVjw7Vkd0Kpi7zTI0qTFsqxa06KSknIghrx6/z22lSwfY1E6pdliOlBJwbiT5SsoyzAE/+RA/G7qUH3aVtppY36Do1ENHW0qJttK3Ndowj2+1WfPthwCkT7Vhh2mx49uIFT7RNcTDQpkoLyRCkK9h2O7IZp2YvvRO/LYSBy+NCHN8SYmR3mDkeZ97c3BJ3ezZDxA8y1y82m3Z9h92e/b0wjMdxZIoDQ4iaxBjBebFRTlr0uhjaHuOA+XCQ1rU41bGIUiJSqzzXVJqfpXCZ6MtUT02VxcHkA9MwMA4DwxAJTJQCy1JV0ySTUiEl2AybDnRTVppLWHlBv/c5J+U8LgRNYApzsAeqTkBl5SlJAKIaONmYiVEAuGEtU8lJAJgQhsZAijFwOB7wqJ6LJn3Ef5LSlMOyEOYj4yhdGYNzxDBQi5Tuyb3FB76fAOQiFA+sbCB/2tq0B936BIUlWnrb0ScZbH+299t+vu7Dp4ftOW2td/vx2sb2ITjfC6CfvMetgr3tmXTx8x87/mQAjH/qUWttWYmT33U3bg/o/9vxWMBQH31Nvl9fdzT6U+9EnjuIvVMpwX2fETu93z92tFfPGBjynfLvoD25YxRRoGI0Zd0QypzJ3jUdjVoLZLkXQVQjzg3S0shVIFN8pQ4eP0jf5s2wYXAD27AB75iXI9ULZXt3txejUEw8LJ0sBK+giK+V0aWmOmzOrA/Wv162ENv8iy7wVANh2OL9yDwnSq7qeGfGsTKnHd7DGEeltYl4ZnAZ59FNLnHz42vub+94+btfibHBcTgclEonFEIXrzjOEqTMy8yiWbBcCsFbBgBMrNQROB6l5CC4DGXG1YXRJ8bBaW/5RF5mcpJ+6iFEUnjGvr5g2Dzh6ccf8F//j/8dP/sf/nvGIVLcQiGx373h1Ze/4YvP/5bPfvnXfP37f+RH3/8xP/3Zj/jej37If/Kv/iOc93zz7dfsdvccauXLNzfczvJ4h82WsI18/s1nXB9uuXhxSdofKblyrJnfvfwDX33p2QwDN/8Pd2/2K0l2pPn9zuLusd09l6oii6wmm8OZVg8GLWFaGEF6EPSmv3ggzasADSQI0HQ3Md1sslhrVq53i8Xdz6YHO8f9ROStpiTooakAsirz3ggP97PYMfvss89uP9Bv72mNZtPAIlj2PrJ30lXm7od39Ps7tt+/5i8xfNGseNYtUU2EswvUZ89AWXhuaKwj2j3q4go2n0DoiIeOh7eRV//4ilffWu4f4fv7LVsGgoH9MLDoe4xW7MeBFD06q8KvNmdcXj9jtT4TfZAYOYweNzoe9gd2+z3j6HL2UII2Uglm7bQfjMn1tNWmEsNesR0oAXvZX5INrB3W08C2BB7jOE51snMGLkyfOWVcnSLoZNpn+bsqqbOj+5HnKAGZ3H+DtcVhaHJZVwE2M+Wz2LC8fiVQy8VkJQOSncuy/ybbhbx/ykZkAS+VMw8xxak/esnEl/fGFITKWT1zbTt1FcAd2c0ayM3OZG33S3a5jJ+8r9C3mQKBooMSM/NCDv0sApcUKYKd2hmWe5R5r+12TPPchRgnYcE6C1GDLTUwUQJ4a5vqO0rWp2R/S7AxA0DleWuh2PK8E8W2BBpqrusu3zc9xwngZowR4CAviCnw1ZZCiX/qVa/9ch1j5paANehfO05d19HlDHmp9Q+T6KuwL+YDLhOSU1W6okpiQ9ZwCRpPnbqUn6e+R61m+n1Kpa1x1laaHMPclYOK8aNkBaeUA9rKOZu1ClTWb5LAOVT3UtuGOvN96ljmB8qbKU0LsAYTZK6m4ZE9508SK/m7vPdVy895DaasjA8qU6UFRNofenyIU3tO2Y+JRJjWQ9s2XF9fsVwt2G63bB+3HA57drstm7MNm/VGGF7Wsl6v6BYdY/AS7GadC+89u8NegJSmYbVcZp2uWWNAofEh8LjbAglrNO3CSqY2W+aSw1Vas1guM8gtwUOTO9sUzavFsmMcHf3Q5+BG2i2O40iKsgZ8cOhcAoMSjacQPLnvFSkI616hsV1x5HN3KrKuRSlbm0C4AsrJPitsOKXIbKNaK8dOAUxZy1pLKXCc1nVmigTPYrHIoq0W5x0JsG3DumlIOaiRwCjiMiiVYkRlpoWabKNkrku3jvpcssaQSiCo1aRpNoGkKWZxSWEcoaScJSmmrHgpZyDJ+emdo5yw07NSzgMt+g/Z5qZU4gBpo442WWg9TkyaCYDJQXIIfuryJQyM49blxb7W+7PuwKAwJMJkH3zWjiuf67oFpYNMCJHdbk+MO9pFT9N2tMZK9w1rWCxXaGNZb85ET8WNQMQ2Vsp7dV7Niry2heEbfMDYRNKGbqHpFh03z27YnJ8xDJ6Hxx13d/f0WQxcDYrBGLqumWKSxhicj/T9QN8Le6gxBmuyj9C2tN0qJwxljYZxpN/vsG2HaZosXiwdBBVMgpoheWG35vVQStDlmAkksu5F1FLCrsBYQ/RqsjsGK51YMqhwpJ+EaHUIY27WgSq/LaLNlh/vdjatnTQzbiUBnEtX8s9iCoRypigBklXTyJ5P5DIfSbqWV2meON9Pgqgm32BOHNSxI5M/U5+LBVyX9x8n9ItvU/tI9f6rE+Wn4EQZzxp0L696zIpvUf//1Aerf84TZ02dIKoBlGm8mH3oowCWP8of+BMGMKq/nw5I/fNT8OGPAQEfX0T+o6i/o3KiThzt6Y85Ro9OUafTBVBod6cLtLxOKbBPAjPqeFymH+eDqKg/N8ZKKzKlIAMHxhiUtbkkJIcVuUZR2AmGEA0h6Hy4RrQBtMAM/TiyG3o6O7K0C1KbWLdLukVLHw/0hx2P9/eyYQIEn41PefYsppNSRKXAwiRMDNU4IekLZNOV1nACEGStNNUwBoVWDU3TEXzEuwHbQNNEBrcjJY81Fo2UGsTgaYy4PINzQhW7T+wfe3gjVFGURiGI5GazYRh6+m1PPw5itEPIjt98aMv4qezeaFAGpxYk3SDlOCMqjlgdsTqRooAWWimssYKAu0Do9xi7QCXNuzce1WiSSSgbWV11jGrP67d/4Ltv/p4vf/d3/PDt7+h04OJyTTKBv/jXv+bi2Yb/82/+E3eHDxzo0cuG5c0F7XLDw26AVcfq5oJPVo72g+Enn36KUZoPP7zl/v0tHx4feH51BY10kekPB6J3dNpg25ZhHPFD5M2773n/9t8zHG7Zv3nL889/xk23lHaHBNTikvTsp6TuEh2uQQdMvJUsVlzDvufwJjI8nHN3P/KbL1/x9eOSH3xip2E0hvvtI8PYs1ktub485+WzTzjbrDMDw0gJiRsISGaMlBicZ7vbsd0fcE7qOeVgzbWfWd8hxIgPnqQMppBVc9antiViqFMOeGbjK0KUc71gzQBQSuGcm4Q6i0NU3ldnef6YjaqBi1NwtEbha6ZASoq2XaKYM2XlT33YzN+hM3tKVMNPbamSzSoiinoO4FXujx5TqOpSFWayn8UOHresCyGg1Sw0eXoo1xT5o3GoQOLynsJiOWWUTJ+VdGDOpGcHnYRPnknRXYlYsFazjU8FjZmvKCBIxQqIRacAIAWUaieHGGZBT2AK0gqrpA6uy7oql6pZPFQCrqfrpc6s1KUP9ZiWDJT8XFEch/p987UlYFdHv5fxmwKVH8nSTGBAFgys76+8SulUAVT6vp+DdkoJSmbqRtHGEBAhlyFm4EF8PwmIUPKeEuSV7NPsQOVMbsUe0UojLb9nEErrYyp/jLVnWp3fRpxREZ8TynzIa7q07lZZHC6SpkC1Zj7UVN1pbVM5oRmonxzCGKVsMValPHB0rVNApL52SmnSCChrstifaLWI/OU5jyniXGB0ewAW3YLFopOgJsxCitpIKUC3aFku5T3b7Zb7+3t2OwEzuq5jvV6jVGJwY+6QrifmTbkvN4yTnTz0IrLZWEvbSItUN46Mg7Q4dUbhosNaaXWplcmAZMUm1Zah37Pf7WlbS7dcoI0wP5fLBbaxHA49fT8yjL08m89JlqL8KEsEnyK9GxidwypFq620BE+iJTZm9k0BjZUSrZ2QxQWLma1tFtmO1CycY7tupn1fXlpLRwqYM/8xJ4VmrZMiiq6zPgD4vOe01iKUnuvtiSmXDOYgJhbBwhmcq33WYnuttdl/O87uxhDxKrOJAJ8kq13mOz+2ML9SQsVEnADteQxmmyFsXPIenYI8lUUbkyQZ6r1Zf7YOAMu6jrnVa2FIlTLK0+Tn9Hc9lwyWawmjZ953TdNOTB5hLHn6/QE3OPY5VjZGMvuKuawlkbL/EdAGpJ2z2I+kI5NmlRX9lX1/oB8Hmq6jaaVEquk6uuWK9XrFfrfnsN1J8s059tsdIcq5aNtW2BdNh7UGPzp8SHg3EOMhj8WOpm0xbUvTeZrGcNgt0cOAbS1t00kSxEqyjQgqCCjm04g2mqQ1EQgpiJ+cgbYi8DqOPYd+z/bxUfRkVLFXWsR683zmrsRV8BzwkezLlPLDEx9N/0ic9MRrWicpny1B1mMiZB3mJOXgpUwza2oklW10qk/SKkKs4j0yWFIAufKm2i8qGhg1aFDOrOI3lfN7Olv5ONYtz1P7n0f2Bp5c37VPWq5Tdx8p7zklDpxeo36Vz54CI9Xon8StVWlqyZ/8yOtPFsD4p16nA3m0qP+fviaf92mApHaw64UytwI6XsS103c68afvPf3ZU7dWNk2qd8/J/emprZQ4alpJD+7ye2sa2kUnyKoVA93kelidkU6SwnkFquHsbM1PfvIpv/jlz7l6cU3QYBYt//4//M/83X/6DcEllLE0Tcf6rMN4z+N2z+PjW8beiyBOSDlQmFV/Y8rCUCmw0KAydVgQUigSMVIXWeKQcpiAbtrcKk2zXp+xWq5BKfb7R/zjnqYV9eDWtlxd3aCS4vb2A4+PH1h0LZuzM64vb+g/HXh79p7nL1/y/t0HXIycbc65uLzk2bPnKKX57vUrdrstH96/w4WDiEimID28i7RW0oLGJqHaJQapmyNB8uiURXxMlF72JHxUjFGyWkrbnEZzEB1XVy/4yRef8/b+lguVaM/WvLp/xZd/+D3ffvstX335B/a3Wz579gX67CXq/DPeO8t//t//li+//C3RjzRLy8+/eMlPXn5KionfffWBw/6WHXd0PnLlLC/tGaMb+eFuT9iNbDYbWrtku93z4fZeSo/cSPTvsMOObRx5vNty2O7Z7RWHw3uWZsfF8472DKIdGHWkMRptO4bmmtj8GSl6FuolFgeHe9wP38B+wdX1X5E2f893/Xe8VZH9ck2fILY955szbq4uuLk85/n1Ja1RHHZbQog0rWRoJIuk8SHinWd3OHD78Mj9dkvvesk0IUG1SnOmSwPRCzim9EIMp5ozQOhTp6ZkyHJWAI4Q8UJhr2tkx3E8Qq3L744D2HnvPpU9kD8VlbgKUmuaeAEwxN5A1xXm0THxkn/CAAAgAElEQVQIUNuucm/SrSPhc52wqa5bZ+k/OqyyRaqz8DUKX9vAOmMgQdBxycxHDgkcPZtShUV2LBJVxvWI0qxmdkFpQTqbD5lDY+rDuTjO8lTp5B6eur/6ucqrBrHq39VOSpm36doqCynrIqAsgBlIQC4ZwDy2BqGWR3Fwy6uml5a5KiU9ZXzq3+VP5bnPoFL0zFniGrg4dtCeOp9qlslcj1+uX0CHuuxCuorM5TdSy66zqryMjTh4eZYBmf8CFk8JhVQDMB+DXmXP1nNijEWlY6CjjOG8P4+dqUQSPYGyBhQC/psMhEQpJUj5jCplB43+GOQsa2J20Gcdi7mMs50Cp7L2fBm/auzrgLVAeKf7tt4T9RqWOUskFTMrCwkYQ8JFT/KRYQyMIbDsVkIxn9Z1JISZCXVxcZ7LPzT39/dst1vGccjB9ohuLIvFEmMtbSsgWdM0LBcNjW3wzhO853DoM8Ojw/tAt1igraHTC/KyIviRwTn6cUC6EihSkMDZakvbWForDI++73FupOmEDRKjdKEpmgtu8Ij4oGQ/Y5DvNK1hjE7mAPDRQzJok329FFGNIVXAmDDLmLqciB7DyVypmV1a5na223N5YdmLE2NVDp4swmmIRkQKc/pEytViyteegY7CPExe7IgwWEXXrHRpUgrp5pMDr2KrapAtxZJ/RtaKOc7Qhhgg+szAEFA7yQdRRhOcJ0QnLSnz9Ygzs7AGHycIog4Ame2t6BP4yjYz6WSUcYu5TWzbCruulJAUHary2RpUrc9QQDTWYtYRyfdiK4ZZGbuUEtY0NLYTAHB0kGDIwFxKQ2YuaRaLDmMNy/VKOpxE0UMprW1TEtaOaRRNK+xJn/2Jfjgw+JFmFK0N0HSLNeeX55xt1uzXK/a7HW4c8aMT0KMfcaMnKZmb0DQZGJTAPHhP8IGh7xmGAYyUmIfgaLuOtmvxo2W0g8QOTUkWGAGYMpisjcZoAQlnJqEnBU9UCo9iGA94P+K9y7obAiCookURZTLbtmYllhKmOAGoFBZkmm2ZJGE0stwL8F+4EqGsqMnGKcidbsAqPbGrVLbfTtAD0gSeId0YTZUkSHlVlrix/keVBJiMwEdn5+yHTYLk0eF9zB/RlBK4Yitqm172+Ok58tQZU2tmTes7xhOfYAZMyu9PwZL65WPpqjLPVX3GnfppKWUmc3UbpSV8yszXo6D25PX/CwDjKQfqKVDg/6tX7fjU7elq4x1TmMb91OE9dV4nZ38iVD/9udPnAtmv00+qXyUK1VtlIZyScc21zsagyL24dYPRLU0jNXaRJF0JbINVBQ0DYzWL1Rm//MWf8e/+3V/z3/y3f82LT67pY+T1/S3b/oBKhlff/MD42DP4wHXbcnZzxf3DG0LocUOfAQwlB0i2HjE76YUAGtAQw0zjV7Mja7BgSpZNBsDaBtM1rDdriJqmWfJnX/yCm+sr3r59zR/+8Ftspl2vVxs+/fSnrFfnPDzc8v33X9H3e2lD1W1oOsvFFVw/+wk+LdkeDowp8f5+IOoDN8+u+eW/+FckRn77D3/PN1//IR86wh5RudWhAVRSkHuuNxmRhkK7y23bUKJ8nDQBTQjgkLrTxnY0saFrF/z61/+Ss+sbvn71hr98ec0uJP7hD9/y9Vff8+b1PR/eHlhwzouLn6H0hmZxyd/+5nd8uH3Dfv+A7x9ZW823v/+SV7//PdF5DqPj4upKmB8Bwt09f/Mf/1e++f57HvY7NpdXuUVg4LDbcb+7x4eBRieSjrgwcPd4y8PdI2qQg3e/ew/uAW8G9vGRRbLQrFG2A72hY8mAR0eFGRvYPZLefUM83NJdf8EhbPjq/ne8GxN9GBi2nhgavvjsc/7Vv/xznl9fsb3/wLB/JHlxqs7Ol8SYGJ3DDQ6UISrLMI487nY8PG7Z931myACx0Ftzva7RtMsOjOLhcUdIJeNROUupBhLmvydKxirOR1XepyW7U0pGinN/KvpVZ7ZOQYnaHsxijvPPaoDgxzLuxfHUyh6xAGq9hulAUTPCXkSrjjK9Fbp/ep8xxskOnVJz64xAsZf1AZvixzavBh7q75lo7JW+RK2nUQLPeuwmoCR3cdCV5gPMWY3jwLoKfs3HTLvyzKdsunr+T1/lmWpmQHGUS7nABJirCaOdmEDSckxNYJUEGxJo1IBC7cTUTIJak0TW9+x0lzlPSYQHZ1+k/h0Tk6eew/pV5qBkIuU8qspJylrhY6eorusNoSjSRwpoJ1T6RNGokDEpzuuxgHZKp+yV4swdA2M6n0NSklLW13Er45idqcL4QGXqcwHs8hwMubVpCEFABCXMNTnnBPg4ZUiUcSxr4BRwaHIJSt1pTGmNqgK+WM2/yqU1KlHt5WNwtAbN6rUrYebcXtNoi24S2gENHPoDzgfGpZQgtW3L0i6EXq3mcVdK7MyLF885Pz/n/v6eu7s7drst+/0O27V03YHFcsl6vZ4CQhHwtDmrGyfdmBACO+fohwERSbR0bSvdg6yCcRQGT/S5jXrE+YBKI/0Blk3LarVitw88PNwTCSxXSzZnZ5mVoLi4uOTmpsH7yH534PbDPUmVPSXj3LSW6+trASUw6ADD9oA7CDhjuwYzafc4Qpz1Xppmdrlr21I0VWQ+ZuZNOTNi6elKJSoZpZMKlS6Q+HlFb8czjCWb3kz7qjVi66cWibl0sOwb6TpyAqifgLCFFSvlMU7YGGEGpCV7mnLJcJzII0nPXk8kSQ1rEkBZJSRrn81NaY/M9OTy/xn4FsBca41V0gGu2JMk2OK0/8t+m21iAC2aD0plbZr82ZJoKONcj13KpTI6qWo/6Qw+yY3Ld872yWqLzQKSbdPStR0uBNwYGMaBftizWHR0i9zmOUWidzS6QStLTNJmdPSBwTkaa+ky6IFp81hEhqHH+cj+MLBarbOmEaw3a4w6Y+x7ul3HYZH1T7xn8E6unTU/GivaZ22TxyNFAQqcY7/d8nD3QXRMrKXtOhrb0Zs9Kelsf2WtNrabxFKNyYklBTF5fBB9nOQjfnA0TcP55QVuHFDRE6Po1kl/mrnUofZ1lBINiZTA+7ncIqYKVM/nWikxmf2Ok3aeky+Xf0eSchqKzgwElSMTpRi9n4A/HSVon1tnz2fN7BMcA24FvIgqQyrVviobpQYNfJDyKmPq8rNTP+0YZKyB+PpVAxjFJtWv04RRfWbUbN2P4tAajDiJV+uEUv3eyf4lsQbH1yrf/ePgBfwJAxinA13//Cnw4jR79v/m+04d1xr9Op2UpOIU8NT3WDvHp6+pUweziFcdgBy/N03si/mH1Q+U0J5KK6xyv8ZIjbVtumlDFsq01uI0GJAyCGWEGqrlPZ3tWCxXOOf4+uuvif9LApv4/t0PfPX9d+yGA4v1mtV6TeoDq9WK84szzPJA2yqUCiiEQqmSAgJJQHcSYgTQoI0R4Z0JfdY5gyUCakV5PmYaV2s7lps1qlNENTK6yOgdH+7fs1x1nF9ecP3sBR/eveNxu2O7dRz2cHP1gtWqZbE85/Zuy+Pultdv7+GXkdUXS16oBdcvfsLhu1e8fvuW0QVev99z/vY9//a//tf8+Z//OcooHrb33N2+AxfzoRkl20iSUp2swhxiJIYRSHl9RGJROVeSRVG6QVuLKF2LoOQ47Dh7fs0vvvgXHA6JuPM0iwvefNjyj7//ntfffuDVt/f0D5pPz37G1eYlm+tnrHPLuzOt8WMgHiJjHHlzN2CS4eLiik9f/ozPf/4Fi9WC19/+Z/r4yHY8sLzuWL5YS5eNM4W3nnEYGHXPELbs3cgYGqJr2D7sSH3EjBHlPV1SvLi+xgXHduyx6oxGL1A7g3ob4PKBjvf425HxdsQ83jMcXvF++IHXX+74m68T/9N//Ftevf3AT2+u+dXVC24ufsryZ58ydnD/cE9wo3TOIOHHgcNhT9supB2d0TgvB/p2u+Vhu2W72+LGUZgXRqOJmYWUIII2is1mBQYet/ts4HMGKHelKPtI1mNhY+R5jEyOatm7NXBRB2tF4O80+PvogK4C6uKo1fWQ8v6n7FK5RpXh01acjBxAlWChtqP1wUg+0I2Stmv1PRYA5DR7C+LwkKn2pyBJ/Wy1M1mumaI6+h6yM1fC+cnelQBfiehZHSjXzIua2XJsPMW+yYEsQbrKJUEhzK1DyxjKNfxRJq7MZfl/nWmYgK04M3bqzhQlW1fGrQ4m5OFLy94SDMylJSWgEccjgwlKAhfvjxW76/Et31GfKcWGPgXwl/GuATvJZkr5n+I4K1OPcf29teNTGHRH9b1VYDQFYRlscc5h7axDIuNS1qcEKAV4UHldKzn4pjk8ZQvVYMkxOCEZdLk3ybzDMaOqHK7l7ylJyV8BFKROnSkDddTRJ6RJq0C0cmYqusrZ9MLWAsnqYi0h19gn0uSoF/HaIzpwGQPFxAiRMZXynacSI1rrqV1fSjm7SHH8Z7/Dlpp+FdFG01gJJrwLeCfgfGsbOet03eowYYzC2o7FomO1WrBaLfjw4YOwMYaRoR/ZZ5HN1WrFerVi0S0mYGRx0h1kHEdG71Eh4KIEYE1jMFahrWW5lnLClACtCSlNWgfSRlGEJBfLJYd+x3a7I+R5XC7XXF5ecHPznPV6w353IPqAMYoxeGxnaVeXvHj5nF//+tds1hsabRl3PT98+4q3P7wRW58SZDuklJq6o6QKAEcxtXZMSRgpRXDT+5BLTWRN9H1PyRQXVpMEaJHovXSwiCF3t1CZuTSzfIqApdKi+xRsI/dU9HMy6zZ4fwQIk3U4ImHSwDgSxs9Bm/de8P0Yp31VziyK/5vEVmuj8+fKOSL71Y8OlbLuVxZ2LzZYKy3MJiWrKorqIcE7nHd4ZcWXzQF7HTTJVpx98wJQKqUZncPobJOthSn4K49fukGN016GfG7o2e5JSfWxTz/tUyVlLTH4CfSQM6BBIfffO48/BMZgWSzbrFGnManBKtGSiDHioy8QE7vDIQfLUupWQGexWY7d7lGAGWXo2g4SrFYb2nbJyjtiTBzGke1+xzAOec15gh8JTaDLOg9KKdqmQXcttrUQgpROo2jaBU3ToTD4IHR/kjBHRAg02+jcrlwbhVKemBwpiO+vkkZFCWC1UkStqjhGYUpnuBgmIGA6k3QuqdFmBozTKVNIPeFzaBTzOlb5P9mqo6KUTckmzXYb0eOIiH+vtYiXohI6xAngK+d+AfBiLi1XSc9JrtzJcP7uOZ4UwOS4FKv4IcUGFF+ntuUwi32f2vmyHksJUsr1OMcs2sI2nQEQpdT0Pafxc6jsW/l9CGHyKY0uGjcV8zWlo3ua4lpBQvN1oPwoTgmtH4/Z/2QAjKeAh1PHq568pwZr+jsUT7gauDKZOivnqunNpqK/UC2u2TmqQRNZDCrviNNsGMwZp3LNo8/m9gd1ycrxY86ZufrnpWvChCjma6UkAb9GBI6U0SQjQEGs2mChkuSuMg1PEDAFWmrYUIkQFX4fCd8cuHv7hr/5zd8yuIG721sO48DVZy9pVisICRMgEBmiZ5FK0BZEMyMJzd8gXR+kVCTft/BRRfQmO2SxiO7pTJ1PYJRk2prGsDlfsVwvcH7ksN3S70dIlm8PI8PDAy8/+ZTrqxvu7x7Y7w6Y1DPuB3CO1c9/ysXNBdt+y6E/QJTadO8MbWNYn5/zsHvg7e0bVJAgY/s48M2Xv+fTF1dcX1xwvlpz9+71TIPMGY1ARjtjzCrCjRgQpG6zzKb4WkaeNxYafcIoQ2MjK9vyX3z+kv/hr/4N39mGfbMkNh3fvfotb95+zas33/L++zcsxpbV5y8YLpY8f7YmGIcPjvvHO7xPLLoVcRy53Jxzc3XN+dk5Z+fnxOT5/ruv+e7bV9zdbvFE1udrVudnLDdrfvKzz/He88P339Pve5yL7FzgcduDigy9wveKhbLSB8YnrA8EHThYz8aCiZHh3T0xvCKePbAbHvnwwwfc/Yghcbv9gd+++kd+882eN/sVi3XLf/lXf83nL19wtbii0RtuXQ+jx6Jomw6FhxRpugXKSGtJFxK9G+h7x6Ef2Pd7Hh7ueXx4IIwOFQLKACFAhPX5mThyWrI/bdvQtQ3eSUlDQfp9yIAkYI+CdpXr8sUJVogj6JyfhAhB6nyl3tbj4rzHayCh/qN1OciAXPZlKgAgqbp8RQK7HHJKgGstxXFT2mBsI8EqShwzSnZYHMqo8v034jAqk6+V8vdrPWUqTKE7e8eseZGm35MPRJ1bVySUsJK0nkCIOIEcJmcvFElnHD6PazHREuTlAz3bY6kZzqKGgieJc1qChByQ6ayJIJnrnGNUZVzF8ZsCUJMp36p8Z2Vys70ttO1afHL6Q3ZecntpnXvLG2Ny5ycZc5WdtBSYnNP6gE8R0IoJ505SMieBHCglDjAJfHAIrdRkwFTAAmtF1DAURkcSJxqYHL+SiZzppZWuSv63ZHX11M1iKitIx+dYDVbN51aqMv3y/MWxL8593ammZiNM2g/aCPU8yKGns8aMIgP+ACnOTmMZK2uxxghV2eeMrC6gUjlC8xwlcqBSmD5MNrzopCilMbowrWQerZGASedMsCIzCVGzbkwSFoRkiGW8R++qQC8/TQ6cxmGQ8hmlMVn2IMVADOBzMFYcQ7TG1kyOHDSanM2firKm34sdAoghs3KMgSyLGEm4GNGlBDKfZ7EATlFaMK6WIqrpQ8Dnc30YetxYlTdUf4qjbIzh6uqK1WrF3d0dD4+iSzSOYwYzBsZhpGs7VqsVq1WSZ8p+l20alGmwAWkN6R0hSNlK0xgaK2utbbJjHcEomdvWNhDBeQdKs1xvsK20O00pgbY4H6SDyjBwcX7Bql3wqy8+5+Z8Te96umXL5uKcq6tLFqulnPfe0+92PDze87jN3UwWXWaQ5NLdzCqQcSilOYqkqixplLEsoKLWwtZM1F1iAO0nYLGcN6TI6KXNsLBgii02tI0i5K4oMUqmXcsSmn1Tn0HS3F2HnBzD6NyuNgOMk60sgpozayRV61LnwKcAfAAahVWyj0D2hIolaBKbJNiZ7PEQwSP+uBFnVYTWlZyh2keSG/G+Z9CZkVi6BiUIMUy2rYASqbBYtM5Cm4mQjxDnCwCgCAm65QqXSykAAooUxIY27QyG1qDjFMAWexvnUrQCFkmLUCgsrsWiYbW+wQdhbY29Y+/3jOOIxbBsO1arNW0nAKEPIQN0kYDsTREUjblUqMljmQNNpRlcIEVP2+Yg1GhsA5tuwWLdCovmIKVa/aHH+RE/uGyLxbZ3XSvsMBeIWRfOhRF3EF2iGITRKus1EsNDMbLZN8nrRgf5k89pXTokxkTMrVpj9Cikm0mrRfum0d1JQF9KQRSFRFDiFoofFuKUFNFHZ34SMEnJXJjsT6WUIMpZVzQ6piQIUjIm/iBgM5Nd5yRqo9G6Em7OT6xyAqwAXTEzjazVU1w5n11MLDo5e3NMqgvrT9Z0jGFal0qbfBaKnbA2+2b5uvIYUtpTzr0Ys+9U5iQf6Cr7PCpPfIx5v6bsr1EDGZnFmFT2Y/NcKEGtpJQmzfNRzqDsH9ZJC/k+Na1Z8vlTGss8FfuX1z9rAKMO8utXOkJsjgX2pt+fXCP/YvrcNGFlUtMcODzVjqx+1Q6nfMfHlNTiWD31eopNUe61OJbHlJynx6b8/JhkJy9TZTgTeW1kIbFEQhmpXZUMTwLVEMNACLkFoTI47xhTUdM2RN0wDpHtQVpg+VbaVG0WK26urzm7es6hNezbB1LayaFoFS5EDoPDBwQQiUoE+xBxwaRy5ioH/ISAytW7URUmiQQWBuSw9w5IdOsO02q2B9FgCINDRYUhYE3AxIRJcHN1zf39Pe/fvSV5T2siye+J4cDV5TMetytefztisdJ6KiVu370hEeg66DoIbpRR9pHX337DbzdLPvnkpRhZRMDMjUyORamiKx5DVDrv0RxxqUSpW0w5OlaSyhBthhSJKhEU/Orz5/zbX/+cD6/f4lvDu90jX331j3x49z3fv/mOw3bHp+c/5/qT59hPzjA3S5zr2d2PJGNI2oKC9fmK5dlGSjPuXrO6aAhuz29/97e8+uZ7qTnUieAiBsvSNPS3D2w2Gzbdisvzaw67kSEe6H3AhIj20JoGbRJjv6eNgcu2ZXHWYs5buvMF2mpu37/lhz/8wOuD4h9e3/L63QeGfk/bNqzOFlxcP+Mv/80NZ9cvWF9fEbqG7WHgfrvnbtujNXTBTAePiO4HggqCjicYfaAfJKvX9yP9MPC43dLvD6iY0DGhkTr5Rdfx/PkLQgp8+PCefjhgG9F4ub/bEaMj5SBHZYX/RKbYpnJAFAFBKRvy3k2U5xrhLtmtcvCIjZizySoDFvPelohZ5yDcVHYpASElFEYCMF2CSJX3qkbp3C8+JfITg8nfoHPAVaHkUs9P7gSks7q2wudOPlrNToMPATU9m/ynAKgzGKMpCIAqui/M2eraAU4pl9xpNTl6OquYp5AvrBUhCM3bWHnmkLIaeUgQMvXTWozKgoQxYFuDbjJlOgQJ1VIOXImTOJ0qz5DtY4iBSahVJ3Tu4FQCshCDOG1a9r1Silja6GZ/TWlF9EJn18ZMYKXPgUDKwE0MAjI01ub5mTO3sjZi7obQQgoZYM8dF4qDZoSeXNacrYKLshYncELl4D+D74XpU0Qd5xIOcVy0xEhC864cnjobW5/BtfZGAbyK5og83lzuNIMnT9TJqrltZQm+lS73lq+XZE0bJWs9JNEPssZMAEahw1P2xoxg5EybMBVE8yMHj6E4bDIGJtdzpzz3mpT/LUzBoopPBvK0LCQJopIATsYoog4c3IBPfgIGSxbRaEsKWeAuM5nk3IsETNbSEOCk7LVSRhRTktaFKWXQQ8A+mynyhW2mjRHtgRAwWXOh6HQkJGmhtUYV4B2mzLo14ixPzJsQpP5faYZ+wPtxYnV0XTe1kYQZ2CptQa+vr1mtz3jc7nl4eOTh4YHt446hH1kul4QQcc7Td91E4ZcsuHRJ0LrFaJ+FAQPjEBgHT2M0batpMjOrsUKx9z7hXBQtqpgzqM2ClW1zC3dZc+M4cnh/4MOHdyyMZYFm7HtC8vjQcgiesHskkMG1qHh43HJ/vwUNi9WSkEEvyUpmINUU5kW2uVlrImlZ11Y1BB+JIcnatU224dk2ZcHROHUkChTR2rm8SQSXUZpSbqZRKGOnPT6MA6N3Ym/zHjSxFF8oEV4Osy8sayEDd6QMZhxT1+uM7WTPkUArFbHdlITpYiRbHbXO7edzCWEObIqz6rxnjBGyFyVnoQGj0MFjdKLRCWUg2khwY+5Idmx7QFoWFx89JSRYzm1pUQqtBAQo9y/tamMGNXKiAC0irNFlpsscY5RxqIOyYsfKeTGUVtj5ORPCZjK5zKqxpWTIcTj0hFE6shyClFS0rj3SfdI5+SD6L0F8kJwcdKNDKUPTSJthn8clepfnOXecyeB6Yxo27YqLzTnj6DgcROz2cDjgg8d5hxsd/aHP61JJyXa7zIG5n9ZEzGKdxa/Jy0XGPQlTRaswJWjLeTKfKX4GAbSiaS3a2gzUpcn+zACwXOe0lF9aKSep3o5RsgUpA6IkUhS7kVSSZKrWuVRMQdKElAGDlNUy8r6b26cLPJxUAh3F3ihwRIwyBFV8LJXL5JE9GyNGJRqTQabsO8aYW6nGwo7IuRmtcplJYShKXDAzb6vy5RiJk3KBgPUCHpS4Uk4N0QYh+zfFh8vfpeU9MeZzTx+PK2k+66dzNPupIhIsc1TsX8zfV4BNwTnmWHkC8CvtkrJ3VAWy/tjrnzWAUV61cZgfEE6D9vJ6EvAAcow4vaf+UyutnjI5jinIx5Rbubfj749RMuxKPT34P4Yonf78qfc9CepkY1Gcp/qZa1Cm9PmWz4poYdJWHOWYDSGJRbfEaDMddqvVis3mDI9iDDucCrRNy6Jt6NZrnj9/wUW7RG82OO1oWkuwRjaDJmd3pP2VbBQJ1mJm5UvGL0N/KcyPoeZHm54lL3jvPYvlgtV6A2j60eMjxIzedc2CZrFEKcvoAy4mAgrddHgPq/U5m/Wah8cH4nvNOAo9z7mRVbsCrdjtHqFRDG7M4IU4l1KT6Hn79r1Qt0MkIW2pBJTRwqbIBmOCmCKT2WYCM9L0nhIIK13EtCxJLfDNOZe/+CW71JM+fM+nL19w//Adb1695cOrA6/fODQrrp8959OLNVfXF6xWZ9w9JqwZ6ZoVUUdUlGzV23fvsCbxF3/xK376xU/4+psv6YcHbi47mqTYHba43TveHd6xfd+xu73BNJZhdAyDpwkDmw6MSzRpz2aR0KbB+8Buv6NNjqVa0jUdSWkeHx/Y7l7z+2/f8g/fvuGrR0W8+SXLyxs+f/YLnj274uXLZ7x4+ZzlegnG4JTi3cOWwxjQWmqHoxeaqawPWRyC/ovBHb3jMAzs9z273Y6+H9kdDvT7QVrFZYph4Vctuo7FYsFi2bHfbTkMB7rFguVyyX7XM45V5iA7uFrN7KuJKZEP0/3hcAQ+ln1Y6M91y8vpAFC5rjYbeJVmnYBU2haqmXmhVaYxVtT/2tk8Bm8li1t+FwqgkYNDqns5Am0LUkM6sh911qnU65/apRBFaX7WZ5gdjRL4lOvVZSQyLjpnzhKtkaDFxyq7pY/FF5USNfcQAsH7qU2liglXArQ4l06EGImKrP6ujuajjK+1c/2ojOWPC5HWz3EKoE+UyhCJKpC0gCUFQSrndtE0KACVRmpqqc4hrTQxG4/SalIYA4K41GfCVPKgyQr4dYkSR+s1pYjS9ujz9XOWuZoAhQzwcHL+1eu9BK2n5Solq1SXRwHTOrLWTvc+KazHQBg9SZFb/EkgFpyTLKxRk85T6Z4lwWIj4Iefy4HKd5V7ru89xjgxdCTwS7PDlfe8RDKlFEvGbxhGYSolCfyndUpFo8+fDSGgcwmX1gLamwxAaqXzaZyFJBHgI4WA1o8jKCkAACAASURBVIm2bdAY4hin06Iw++pXGWfnnIxzAbGUsAAIsy0qLwHjJDjFVPurmtdTNkU95/PeFZ9CylzG7AAXcVoJKHQOsACapkWbBm0alssVq9WK+/t7DrmcxDlHl+1zAUMWi4WIfeqEtpambQhB41wiek9KgRAc/RCQQEkYdYu2wzZdBhI1wmCS9eH6kUSYyuJKiUYIgcF7pP15z+gdu90O9SDAoXx/R9MuiMByuUSCOENMRf+n0u4pLbhlmCZGmzZis+KYmT5ZaDDkElogC50aEckkZLaSm5IkQQVsqkrxUjraYzOAKeUA0rWjYhBrhOVAKdVLaPQRy0zbuT12WWdlHx0B9ZWAoNZaBJPD3GFLF3HZDOiWYLy0FiZIAEiMUmY72fuy8rMhmyjHadrrKUq5Rg2EljN2Bhdqf15sUYhxYlppLeLB0g2ptFXNIHy2j947Zsa2OtL1OT3navtZnxVPAb+y/y1N07JaLnHDgB9HhnGkH7Yoo6s2wIUZozFNi0IYSsYYbCOBrAghN0fzNCcYiv2OBO8ZUsLqVsq81gs2ZxseHx+m/TiOo+iCpYCOCuelpEIpQ2nxXdaUzHO2IXk9TfOYIinWZXm1TsO8JidQrLTnnaZ+jgPrRPKp/yPMrFLKxHT9YtdikI5zIUbQHtNYYbAUsC16WWZao4gEL2CkMWV9GSCJULyfBUGLz1Td8PT9MUlJd/CeYDTWdvNeSGIvxZct35HXpJF7F32O4geZj3wyUq2NkUsvgZRyAqus+szSUlPHnpDvO89WiUMysKGqzxZGhiTfynyoXC5TrkUJ7CQhijBrVQbAJ7+3RENJ3id2opwv6sjX+7HXP2sAo97kp6DBKXZRG9TTIP/IITvNcj7xnacaFbNDXyNC6ugd82Ip95HmDCvHE/FPoUo/dl+181XG4xTUOb3PKfjQespIWS0HUXRe1IVzdnASxYvSuQEE0Ghtw9XVNRcXFzwcDuxHaTPZtAsaYxjiyKvbd9zuPatnV+xulgCiPpw3kjYtxragDXjJGgYiKoLKlFajVe7UobLQ4szfVgpSRuLFCbfoVrPolpytLzCrDq9uuXf3mKQhKLRtOb+4YXNxyWF0fPvdD7x5+45+lGe7uL7hk2fPefPhB968e89wOAioADRtg1k2nJ1tGJ3n8fFRxLJy2y2rDSlptrue12/ec3//KDWAKZECNJl+LyCnmubFUFDIOMOeMuni+GSKvzYWoxpQhqBWPP/pr1j+4hf8b1/+PU1/y5la8jff/YH3r96zfeXZ31men1/z4rOXfHax4fnmAtee0+tAtAm7VDB6VPA0BsY00jagVOTrb3/Pb3/395gWFmYBHhrvsvMrpRpGtwy9xwWFD5pES2M2+EaT8DyM99zd37HbR/yQsM5yCIFg33FhB0w4oCzcfPopv/zv/0f+q5//iuUnv+TZy59web7BKMlokjxuHOiHkdv7R/x4i9v3KOfptMGb3AkgFiMrHRic86IkPjp2+4HD4cB+3zOOjv1eMgmyp4/3oPeeoR+4vDxnuVpyGA5TUNo0Lc7NDtyRU5ZmYcRyHe/9pGReB0zFCayDhtpsaCkSpQiGauZgurAyjmxCPhDrFqh1wH1qP+p/l3r3WoOgLoN4yv7oCmion+0YKCnOstDXI/Ejh6J8pv55CbClzEAECuU71JHzf2rXi30lswBCFSynJCrq3nu6rpMgOMyaGZj5AK6p7WUuTwUmp/ENERfdPC5VIF6XRDxpv1Whu0JBZYvmwQRplpadkBX709GaKeBE27aT01LuQ5454EbRVmmaJguzDdN6LuNW63RorT8S56vBmHrs67VVWDJPrbHyHTWAUYLo+p6fOg9P12ByEiikBFQJhjI/KUl9fnHItVYobXJnjuNWdHVwWoMqU4JCSVbxKHuawYiyvwNziYR8juwQHwOKZZ7L95ZriqinOMV60oHKjM4gwL3REqzJmivOsGTrjgOQY3+jzPNRsKgU3ud2zbFkzzhaD5MrJYesUIX1MXB1Cmw95VeVazo3CyEWvZbFYoG1HzNuFExtK1erFc+fP2e73XJ7+4H7+wf2+x3OOfq+p21bATWWjrZZYWJD0DpT6D1GIwGBkrIqPw5SAhAjzkXaVmrAU0qZZi1iylprHh7viCFS2iG3bSv3pTTKOUzbsCLmDhRBSmfyuGorPpU1UmYYQ5wYI6cAxhQ4F8LuFEXKnBebP9toec9isSDGQk2X9zVNIwyOqr1ksWPFrpwGecVutm2HMTNQk2LCBU8p91Lp2L6nlNDJkKpr1vu0tGw99cEbaz86I6OTNbxYLOQzev5cCFIn1dpmiv8KwDd9dyqdpLQEqT4Rm8RysaSwWWUdusmPFz23Y5AWwNgm+12zTk4ZI60V8EQHK7yAjMpOPy/aLLWtLdeqSwrqvfPUONb2V8avISw97SBM0mEcOfQDu8OB5XKFaUXPzpjcsSYxifrG5HCuABcc2V6JjdV0BmoSxIRLoqOyXK24uDjn4uKcYRi4vb1lu91O51GxMeNhS0KhskZFKVdEKdIw2+VEFbtk9uOcVD2Oo2pAaDrbQhC2SWX7T/2Y+jX7Q/msLSF4mgW8rW1yEsETUiT4QIwKM9k+MoF0tn+yry1al3UiempRCwBW7GlKaQrOY8hCpFpKN6QEZC5VVNU5Ya2GVITP5/2KqsBwVSRw5/U0J6ftXLqVgTjZeyGfiUqSJpmBJnhOsQ1RgISJSlvHX+W8+di3nMZcRZGDK+K2KgP3aWa5apPZZyg4mrIk454SiWpeI5Ot/rHXP2sAo7yeDNYT0yI5dYDqV20QVA4gj6/z8eI/+pkCmZlMPys/VvU1yoExZ17EmXp6so8ZHR+/fgxYKb87vfdSOlQOuPIzlREso4X+bJXJAI5co8miLkVpl/zsQ9/jRsmGGrNExcRw6HHjQNtZVNdgMax1QzSB+/09aRuxZwt06jBaMTiHHwa8kz7qUWuSMoTkUCliE9JKNZFpZEwbiRRRuKncJeXNI1R4jcaAttim4/mzl5w/v2EIv+Pdmw8SFCaIGq6ur7h58Qnv7255e3vLdj+QlMFaw2K54uLyip07sL17y74f0LYhxYAPiWXTcLY54939LX2/p7EGnQLD2GNsR2MtGs3j/SOPjzsRQbWWZI6FDQuUoYxChUxly2OtVDbtiUxLnB39qByKhGk0P/+zP6c/O+P/+Ob3/HefPWd3/z2///LvuP/hHfsfduhesfnsjPX1hqvzc16uL/jyYce43eP3Pb4fiONI8AOmMyyXhn7Y8g+//Q2X12u09vjo2AWDYoFvhcruQuB+e+DNfkffDzNA0I+4MeBCYNQe365wzQ3Ny+dcXHzGanlBt9lwf9Fw83LN559dcnV9xvUnNzz79DnnZ2csrKbVihQc3h+wKmGSOH4mKXy8w48jhECjpO7QNJYhJEYXpLzJDQxDT9/3bPd7htExDmPWn3CMToRHnXPElFHpmIOvlNjtdtze3nJ2vmG1XDOOksXXiBPb98NHDsipnSjARZ3Nrx2yOot1+vnJcVH6ye+YDmyV/d1pzx+zx4pzVz7zFMAZY6T9v5EBqr9ba02IanqOmolRB9FQlwVIVug0QD3KSJ88XxmrpJmAkBglk2y0PbpfAS0KhZJJdLNpGkwR88pBahHUi5k6b5sG3Uhr4uhnkGUCbquWn6dMhDjViOujMasDhKfGkezEnf6mHv/CSEtJbJ0xkoEs7fwK06XMQ03HrxkxwJStlppqM2WWizhl/VmZ37kUpPxRSs3Of8WSmRxsZsHNp4CMOkiYnm8SJp3fXwcHpyDaFAykeeTknlL+bOm8UNefS8DkvKdQbGMeR6311GngKfBtyvRVwXlhapW1cXpuFwdd/sFHa7vQ2Y8c2wx2kMilcIkJz84+hDjA5DKphPNZiFNXwovV+qvHrB5LAS5y8JCDi3SyboqgIkbPIqPeS7bsZH+W76nXSvn9OIomRf39NZg1juMUeHddl9eSYtl1E5BpreXm5orLS+lYst/vCSHQ9z19v6fv9xjbsDm7oOlarG0ogXqbu8G0rcU2LcbaHJQIvX23P5Aqto/cR8tqlTuvxYAPbhJYHoaBoA2ttQJSWD2xSZz3bHc7nHccDoccxFmsbbFNk+dHFoUunQOqFqlFf2wGkaXrmzB9CoARc0cF2G632MZiW5t9yiwEGNIkFCzzGUjJTnNb1mx55jJXPubSDNOgdWawRTfN1wQeHAGdUupWQI/aRtbrobYVIYRJ66sw8nwQlu98rh4DY0nlEsWUbWtpv5mi6IpoK2ObW15LAJhtcn6msv689xPTbj6DZ/sdg8e7cfruEhTX+6tkwsu+EOFMc7T/arHoU2ZmufaQO+cU0Kx+1aByDToBaNPQLRt022HGkaHvGd3I6CMqjCjt8tkmnUOSUqgkEpHGSNkXeo5dZpBEfO0SQ1nTMo4OFwNqHFBGy1myXHCWLkhansE5h+sDLgZ8GFEqn4la9GZKwlFrK3umsdMYhiBafK3tKIwsrU/t5uxblfEYhoHG2KP31eusBszruSy6XDHloD9GcaayDbS2wWAJKZfRkeONFDBWSnDLHj3t2CQleQqSCI3WcaX47wVwEP+sMH/LuVaYUjGXlZDXsdbNBJoDWUuLPKbyHCkzBQtAXPbW8dpRKJX1pmKYNMTyExKiYgo+KOM9l+fIz8t5W7xPpv8/xcSDrPCTu1warVEhoEOY9XOyMzT5dElKVK0xmKbam3nvq488p+PXnwSA8eQro1d1IFAbjPL/o9+lPw4enKLIJVtXDv+i0D1/Tz2J1e2pj6/7x17TAVI7IP8EODNd84mgQGs9oVzTYTONQ0JbUx1AmXWR0TlVZVxJ8PjwyHa75RA8XouQ2xgUynaEhUWnyNnFGevlkmAbeq15DJ50OOAPA2ZtsFbolskDAWktp8phWbQ+CsKoMMW4lnmG3JpUYZTQNDWGrltztrnk7OyC1WZDcCNx8KgkdHZFom2a7Fx5tBI6ss8I/XK5hEfN6AWkkto5CXy6rmPRdhCTZDNjoGssm9WS9WZDSvCwOxBd7iwCR0CQVIKWQ1ZlMDUfXioLH6Iy2GSyk6NE/FtrOrvg5uKSl1cX/OHVdzzuH3nbL3n9zVe8fv0dhw8H4t0j17bh8mzJaD0P48j67oGH21eEYUfqe5QfaOOBmEYYAvvdnt3+nqZVhLHj4fGW+4dHnNP4oDkcDhLsxChBfdtC0ixXZyzWSy6fXXJ+fsFqfUZ7dcb6k5e06+fY5QuW62esug3XmxXPVi3PzxTrNqF1pF0plgspnQmAz8JTxqxkvsNICkF+50Jmu2giAeccowsc+p7tbitO7dBz6A/0Q884ekY3itMWRO/Aec8wjozjKHXPReE5z48LgYeHBz68/8B6s2a1XOKjxzYNXRfReneUWa/3XflZ+X194NbOTE2JPAUP5Gfmo+tPoJeqbBgTInkEXgsAcpzBKQj46T2Po5s+UxgfpwdTSrWTI7WSIc02qRZu6/t++vsswDh/X51lKq/awSuHZQgyv8poQdwzXTfB9Gxlr2QjPGV6SqA5O0lyH23uXiC6F1OEODm15TO141o7jsXpn+jA6hjQOH2eIkZ5eqiXkqcyzCXwKGwT2zSgEskL8ILWoOcMVZ05K8H4KTNlnlNR+g/ZuWi7biqDmILRfI8xOw5z5mh2Gk9BmfL3Ml+6mrf6cyVoqF/zGshib9X81wFw0zSZOTJ/vj7DgKwjQ8XOo6TJRGMge3p1Z55y/VI68VTGTimFiorISZcWil5CBrnSDEwe+QCqAjKOwEU5W4tzqorDmlIurcz7XMu5lm82t54s4yzUZWXSlM2un6vMS73XJltAFmYt3UGKU5+V8anWhMmZPdHuOC4PqFvg1Z2RTtdNaQF76r+ULhjlOovFIrMyLCHmOnxrp7276DoWL15IlncceXh44OHhgf1+zzj0fHAjpmlo246msdjGEkNDkxq0zp2JtEVZTYw6l7Rlm1Exapwbc0Cpprr+pmmmZwZIyuBiJIREUNLKEGu4vL4mxMhhe2B/6LOmSMK2lhC8AGJpqgKZ5ielhGnsZCfLPgr4XBqoKPRwo461aUIIEBI+iDi0QtHa9og1NnWxeaKUZNrTWux66X6TUiK1wioJwUvZW7X/T4HFU5+0bv1br80ShNT7udF68jNjKl0ZZmBYGyPATMX2CFH+rWNCmaJlkbIottxr7wc0hqaZwZKmkW4rh0Nfjf+8n4tNKEFgDdTVZ/TRv9XMICo/K6BEsc2nr2LfThmTk+1RczKgXFc6OqjZ/1Wapu0wtmERU26Z6nHeo0JCKQNtLkNUEa0tWgvgJrR8pnGb7d98DwfXZ3sunmxMidGNqKwnZXOJxSJFusWCEDwxOmBuEaz13LFNntnSts0ReEYSvZfZBM/jOAXYlU0pddfjME7jc+pT1QH2nEiBVGwtAt4rebjJBkg5k8mcnZRFdUu5Vem+Eaf/l25s3ge8m/VWSCIafbRWsjkvfptSarLDx+xZqpLgmEvDasZrARUSKWlS9PnMntdksbm1yPvRPs1AagFLU/Ghjny/HIukwvpNKHUK2B+t6ny/c8Jea5NtqGggWWuntVSPyZSKKn4ICavIpdIF+C/3VX/i49efLIChyuY+Ma5wTG2sN0eMUoN0CnDU73sym6aYDCozIWma0HlhfEzhPt6cTN/71Ks+GOp7rA38qdNQgpVpDHL5gjFmyr7UKFbuGjkH2XlcVEyk3LZLxSgq7llUrj8cQCsciTF6VFLEqLgNO1JjaJYdj+OW0CiWjcLmNnQmRBgDrBpMs8TYjpRykKrThPST5r/n2IXckwmyWnAdYEmbLUM/jHz//Ssc0LULnt3ccH/7nmH0qOTZPt6zWq1ouo6z9ZLDYSFIeErstg883L3HrFouLy/pDwOH+y0mJMAzDCMpJZ49u8bHkddvFDpFmtw+qdGJ+4dHht0DVgu1NLqIbZu8Vgq6nQOtLLhUAzKl3nVaxzpn+4LUpjddw83lCht2vPr6K37+l7/krTvwu1ffsru75/b1HYe7HS9/8gk3NysGPfDd4x13jwfefPgaF3v6/sDhsGNwPc6NON8TwohzA94PKCu0NtMo2mXDYtNxc7Pm7PyCs7NzlusNV1fPWCxXXF89l+xXs2C5WEmAtFijVxcMsWPbG5JeotEsLLRJoawIdy3bxFmrsTnr2FIynAaVslif84QxsD/0bPcH+mHEB08/9jw8bjn0jt1OWqMOQy/04nFkdAMpweikp3lKElC70UnWIOtfGJsR3gRFQKnvBz58uM1CjNIi0tqWppESkTojfwpu1rZDHCI/O11VcFfv+3KdKUtjZtS5vvZU23/yB7LgGZXToOZrl/fE6jvLPYqpmDNW9f0ZUwfns0OQqsOjPqCLA1FTPctHFerEwTguTyiOY/3cKaUMXiWUUVjT5OvK95kMtKZsAzR5jIxBBP+c2LYQMPV8VcBiiFFsR1JTt47yPMXhrUHkI0C59Hmvsmy1Q1qPSz2uOs9X1AoV4/Q807hnh36ieZZnyNm6EvjV1z3Ncsv9SccRlzOk1hrWqxUpSQYrycKpROQSIYvQFnCkzFO5bskUlXuoz57TbGUJAkoZ1Sl4IGtJHa2FEtzCHASUn833NNe0FwCiZs1MQFgWSg65bWj9vSU4Kft0ChCqIGXOvtVgTzq6xzpTXIALbUQwMU5jU4/jDHaUFqsxRpSV9nvT+kxlzxch6FHWrMqlhaGINJ467sf+xZHjj7h93rmJcZD03IKzsE1CGZc0B7v2iWzwqQ06tS3y9zk7V49Vmc8yZ6IvECbAwBgj2d4MApaShMZaurZl0XWsVyvRNRpH7h8fGLyjf+zRemZ1NE1L347StSCDjyZrTLTZH5Jys7IuI973k/ho0zS0XUPTzC0zY0wMrieMI8YY2rahbSSBopSmW65AGzk3jDyPNqVjUCD6WXtgWkfWUIRbxWH3EKSMCCVU8q5bStktsFh0uOAZxp7RDQKQKNH/kXtqJ5ZLAYkK46jszXoNxyrxNzHKjKVtJVAb+4FhGI72eKPa6br1fip2Yqau62nOY5QdXwf7pSTRWisCkSdlAApobZNZSgLoKlPQvgJgCxjnY8LH3H0FcwTwQg78MpNgBjDTR3brdE2fAoS1bSxB+mlCojx7HXvUoHgBo0/3TA1g1D9LJEJSxKQm4LH2JZjWT07GOI/f7jAqonW2OaYhhlxGhrQ0OmY9FLaExseqDC1G8C6zXuSMa3JCIKVE20kXFJ9BD6WkJEPWxQwKaaMpnXgKeKKxWG3zHsxlHke25JhNIWU+wnKIMUrHotFNNqIG5wqrS8Y+SiykyYDYJLhHAUmkdXYgZIFqtEI6MTpCqNkIwvQ0RuxTAUGm6UhZPDy3BS6gpcprISZhmqdY7Gk4mW+T36vyeJRS1hk8kfstWhVSuvLRGVuNZQEpBCgMwlrnWK9RKZCqAek4QkokHUV0VOUyE05Zs2RfSbS4TGaclzPGtgvaVrSLbGOnMy8lSZqXV9kzPkVMApuTBdN7tf5oPz31+mcDYJwajfI6co7r9+pjEOIp4KA+zJ8CJk6R0Prf/xdz7xJiXbatCX1jzDnX2ntHxJ9/nnPynHvuqXupy63CR1lQV4Vro6CgpPCBqO1qiHYKRZuK2lEQbAh2bIhQHR8tkQJBRFsqiA1tlJSFFCIXS+895+TJzD//R0Tsx1rzMWyMMeaae0dk3lOCUJuMjPgj9lp7rbnmHHOMb3zjG+O5Zfi3vhpErqlz+qD5+pjBoX3NWP464MZrQdAt6CKGphNgkL+gZhWl9G4ktVZkypDgbf3YjHnpnQHEgg8N5rxO3QzFpJTLHc2QtaBcVg1EKxAuBU+ScS4rfv+3fwfzD/c4vf+E5fGI9fkCmrW9U4wTSm3Wfo5BUuF1ac2CNiFd6AzLeJEHdaz0r448CkrO+Oabb7C0ivvPP8Ob+zskWXFiVspWXVHXMx4e9vjs4Q61rng+PiECmBPh8cO3aKcI3O3x9u1bHKY9aMl4nj7i+fiMP/x//hAPP3jA3eEOP/7xF6jLAikZl9MJn95/rdRkaA/0SND2tF15W64yWQUVoArijV4KBkJkLUfhiHm/R0ja7pJjwJtDwLxf8O3Xf4g3n/09CJcF/+e3/ze+ef8e5w+f8OHDB5xyw+fU8NWn93j//EvwcYe2Jvzy6SMQg9b31YqQIu7v3mJ3t8N+t8Ph4R5v7+5w/3CPt5+9xZvP7vCjH0Yc7hmHu3vc3d1jNx96nahSAq3ntwhqaTiLIAiDakJuBAkMIRWwLdIQKYPChP1dxEMCdmRdZISQgA5hEAitEtZLw9OnZ3z91Tf46ut3eP/xE56en/H49IjT8YKnJxXmPJ/PClZYe0GBghalulNqJQRGP25VVHelqmo+QzM5UlUx+3Q84vHjhMP9AUyq4u1OtbJRlIbrNOgRhNg2OGV8eEZpDI5ug9wrgBKbLo9DjYE3TQaQCp3p++x8HBA5boCAXNusK2ydNtQ/15f01vE9Iwh8bT+3gHV0uG5BHUCsW0boYzLarl6bPwItdh53wmOMSDHBHR6v73WBJ30/+rEhQAOTqqJ9KSWwbMFCTAkxcn8+AHpp32iXRzbGaF/7eSybMFI2R+bGuH+MZRus0Slmq6s/LxeUYrTfqI4c2fmbZTNC1PazXkIyBt3jfPLP0vHZnOQ+H610ojvejfp7aq1IKWG/u9M1cgMM+HO9XC6diTKyJ/w1Pv/WWmeiXNGg/XnTy/3Pz5Vz7vfrIJfeY+ktSd259Xv2a25to5q21rRVKG2sIH//siz9XqJl/HtpBNA7nPhnxxARptRLHPpUVrIPhKzMaWBAuBip1sS7mN8m6geKaBjE7oh6K1S9l4KUImTz9TrA7SUe47h5YBZj7KyjK6ALBtyVsmlfaNSi2dshwN3NMyo2oOaWeeOBhc9v//xxLdyCGSJWb96DXROLFAek9Jjj8WgZ26mfP+etdj6liM8+e4MHAPdv7lXn6HzWksFS8PzpEU1MgDxop5N52iMmFfucrUuABwwONulYRqzronP9EhGDBiIxToi7nbI9dpNmoUkgreF0Wa2kQLuG7A93mKYdYgiodUVrur56MC8eaGaAlHnlJU05Z+xSxLoseHo6QmRFShOCZUAPd3sFN1n3uhC4Z4rHdTOKRHqAN67nLjbJEaXUfiwzYYp+rAIizGwlAyuWNaNK69ogIwh9W3Ixfo7OAuq20AHJbf8ImMyu9NIUACHN2iIUMswF9Z2kNe0+BQ2+ettk3uykj4eWE6oI+Ahq+HW2WtQHgKAVY0KZedKAVVkHzQNcDMCI2WC3DePvfH2OvxtL0EYW42gj/dUcsOCoekjlmhXiNnJcm+OeUMtqna3OYJ6wsb888Wv+BDNCZEhn7XnAGsyPUgaGzgeCMxr8OqbpoPMgr1iXgnXJ/Vp4YkAY0hjevVYajDCnn+P3Md4PEXXgTf+gvj5bV8Jk62Zd1z5/fd8Z/ZEQgrI3PIHIDFgQzRSsg53buC1m88913Qbd6zV5QkQGJjeb49ahQ4DKjMnA2JbbFbnBQTy3degsPe6/V/LgBsaEzib0ch/0OaAgOb8I9Ft96XcyM9C2UiyPU9WnD6hVACg7Wc9NPRkvYVuvt/H1rf93m7ghIrWjvt4MlOHAfT8SEXApyMuK86oM1Lxm89+3cuIxiXb7+rsGwLh9+WS+RSoB24QsczUGBq/9PJ5PA8r/T1czIFcCF13y13ZtL8GH1163IMX3/f61gOI2AMmlgLxd1ZgxdWPiGazBiY8xab2cfrAhploLLLVaNktDK44BLOpgByJwFWvPFXAIEyIzLlEw7w/4kz/+KaY39/g//uAPcHz3EeWSESrjcHiDt29/iPPjSVtemWgWC/dn4tRkYV1UZM9MnV9DQ5spZgujAThfTsjfNjxenrCfCLFlzFMEC+F83RVVhgAAIABJREFUOuFv/19/gPa3gfnuHrlpnW6uFedSgaVgjYDc7UEISI0QGlR5+XTCH/38j5DezZj2CaWskFrAraGuCySvSj3zgNZ0RKq1LvJMyjRN5vwExEmQZsJ+f4f9/oD94Q7zfo95N+PNm88gTXBezp0uS8TY0z3muz0+DwGXL7/EL7/9I3z86ms8//wdPp4Kwudf4Lg/4Pm04DJXvL1LuPvBD/H3/pm/H3eff47Pf/ADvPn8M7x58xb3Dw/47LO3eHi4Q5qAEFW0aEqEebJgmozlUgjLBThfmgXm1Jk+vUUfM7g1oDQQmZp5LIhRMHHDZ3cT3uwj9gmYASQQomh9JqnsuFLMcsWnD5/w7t1X+NVXX+IXX/4CX3/zDT4+fsDz8YSn52csy4rLZUFZlI6sHV+GNWYZ+lqVcs0BqpOxZLiqM0NBO7GWm/f395bpVjGsalnw0gQxTlcOyLg+Rzvjhru1jQ47vvd2Td8Crl6aQAZo+Zpn5t5irp/C7N5r5xxtBQ0H3doLD4S/y7b2sXIaPgeEYEJaFvi5A+rnG//t7ehGZ278+TXxUX2/Bppb+2enRLcr584zSMwEQYOryjuoCWyOSb+uKj0Lyrx1fRivYXy/Oyjjs1aaaOiOu1+Lv8835NGBAKDaM7XqOrHzuGhyrdXmIqyrshh9U52pMQAfgZYRQNvGUmnxbv09oBy1C/pxzEhhU84fg94xIPGgw4OhPu+GMfMx8GO9rGhcN/0asV3vBlC0oTXd9XxWp3EDK2gAj/y8zKw09aZOUmsCaWU7hq7LvHqHjps100Sd+lF0sFHtnW1yzqilmljaFnSFFE3QUZ9LLlmZFDFZ21ldik0ntLYZxFhKQk4G644jWc36Boxdr3d/Jj4//VmMwoU+9lvguB3rQFx/ycDegAbU45zzcRrnha8V/3x/btdB1hZMj3PQqdjuzLtvVktBJt2Adrs9OJiTbkGUj/n+8Dny/QPWdcVyWXA8n/D4SffM4/EIQMGqeVbWRIgBu2nCnEIPMvRaaJhPglK0s0fP4lMGXxakacJ+v0MImkNp1Zg8QVvSliIgyWgNli0GiMQEFs0+OBMnhC5sdz6fO9MKIKNdT1iMAVFawzzPCqykhMNhj3mOyFnBlsvpgrUsmOfZ5u01KDiu+a2eH6DA/Wd7/MhrAbGXbYnZnQBBBDGs88a1CPBoy8c5ecWouNkLvCsJkbKSYMy/ERQ7Xc4qKpkLSh3FgIPKhLWGKi7g3RBjsdbGAa5D1/dXZnh3Br2eLauuybMNgE4pIfSyQWe/lb7vlVKw5AzJuWs7jPvnmLEf7bSDyW6PxzXTg+2+FG3/JYJwULYMXZfb9XuxZ+cAJwMgjghJWRe1WKlBFRRrQa5r0rUjqor5ZwU1KbBd4yaiySRdDHr0GRyUVUF1B8WbuR2a4AVcN0t9YWUwbPZAn8c2X2VIxAzGyb62MfY9J6V0VRp4q9UFNnaDoLcZJVGmQ5O2AQRQMWtry4haBVMKff7q/FQmyGBKbZ43iD1ffaY+H4aHY4BNE02wbaVLg64GRNu66jbRwZPWitlwXzNbrDn6L2pDRw1G6dcMYmubLPafDOt/BD90vHWcI9Z8xghaaVe7sbxV+vt9z5TjBRwjDrs9dvsddvu9sjEmXU9RYp+vZPfeKvD8pK17j8dnLBdlXivj5PVY2V9/LIBBRDsA/yM0BokA/pqI/NtE9J8A+AsAPtlb/3kR+Ruko/sfAPgnAZzs9//rH/c5wOsIo//8grKF6zqg8fhxw/bfu/EcM5Pj99HZvjrfCFzoEfY7NyK359Hfyk1W9LWA5rt+9xpYMW4KLwAaERUVIEc4t88MIYAig5KWg3iQteTcKbIgrT0MzFaHHpFr0d8TgWtEkQY56ximog52miccxDaewwxKE/I540InfDif8Hy5YL6swPEM4oDD/g0Oh3tcjs8AFUjJRpu2+2o2FkQoVelzjRQ5FjREEIJsgTZAaK3gdC6Q5QmnRIhiFHEwahastaIRkD99QpwSYlBhGckFXAUlEnJZwcSYEZEoWl9tsRrdivO5WrCvhn03T4hULQhIylIIEZAABBX9UvFAGB10h2neIcR7cNj3TBnAqJlxWoHnj80MS4DIHhMz0hQxzztg3uHx3dfI7YLj+T0+vXtElD3+4b/wj+B3f//P47d/97cxvZnw8HbGD+7ucH94AE0H0JSQJoCDwlpVgFKBktUQ1wrUFVhPwKkISm9v7qwCoJaA1tgMt/Q1wYEREkGCQCdfReCKiYFDFOyS4C417LgigcFCiACCAMjK/MmnC54+fcK377/FL7/8Bb786ku8e/8OHx8/4vH4hKfjM86mdVFKRc0mYlh8Q2ObG0DLxUTxNHPTqgYrq5WPuFOAbuAJn3/+A0zTphifc9b+8M3a8A1OyOgYjk6c/3sMFG/XNLA5NGPgQKTlLCwmfknUy0Hc1IxreXSYtqUvXT1/fK8Mzob/fkoTukigSBeeItAGUFnE5eK+ChJtdbl+LyMw8dp93l731T0PTu04hgRoNwCCKseLAwpD33ui3lbMqdDo4/USQPa6XmeZEVlrP9kypB4Aeqbe72GkSocYXmgouPPp9zg6zsMNA9jACA6MiQNCjJ35QNA5QLRRYHv53/D8PJM57ot+3taqAs32e/+3B+0OivTs0SAM6vuEj8O4j44Bq5fYeKZqDGLGbOwtk2N8HuO9jPPku14xBIioHg6JIAZVavDn1CCWPYSqmFswHAZfYXRqRw2RMXBw/ZHxd35tztYQar1coZSCturay6X1zyulIaWAeZo7COHgWRNtDZuC6hvgqkWvM4l0vteqzrDvE7omtoB7tEkjjfqWQQrZuuzA7RfE6NIMWPlLUJRFs4kGVvp8G8dhLGsax+b7qL/j+N9mqh3A0zmv/y5SsGADwqZpQooTxFr4BQqgSJiCOsr3d3d4c/+Ay+WC0+mCx8fH3nnKr7nljDbNkN3GNPJsrpcWqKglwUXympC2T0TDuV2wLksX89QWlRHTtNN9qCkrMa8Z+znZfrKgNcscx41OTaQtRNd1KwVJgRFYun0u5YzL5YJ1XbHf71UED9LnzG63Q+CA9bJqUiavfU570KHP4BZkCiBh65pmAR5McDpXDSj7BHKx5IhqmdFbQNT3glEAuc9HawPuNhbQ4AnV9oXgApPywk70wMyP0Q/VpBd03fcjfE/pAfq1zZR2nXTwl5fT+WvMIt+WnXU/HDBtiOv7/759jnljGOacrwLuW1+/X4somB05ALwxvFrdyuoqNnCSxJmcBOakLGcD+EtvMqABt4N3xBvwFGLS+F2AXCqKre1Rd2ccVxVUBQACRMtVAm/hpGpkNIjoHFd2FSEE2pikHujfPJcrG8aWIKnXe6uPqc+9dVWNjA1Mb92XCBQUpICXjupa89bZzlLWYfLxiVfrRrv2GFgi1rnFywBpYB/4lDKgwBMSDtS2pjoztcbuPzAHZQg372Zifsrgd1XrEqQ6fTdzpScTxu5SPncDAiuLh6DMRL0OgYiyjMhr26/2I8LMuwFA2fbMjUG0+YOAs14bpFScj0dczmek9Izdfqfl5uZThRjBwbpfgrHf7xEpIbKyNwlnnE5HXNbF9sHvZh38OgyMBcBfFJFnIkoA/ici+m/tb/+aiPy1m/f/EwD+tH39PoD/yL5/7+vWEQZed2x8QpV2TV0b3z8ahdugf3zP9zlOwyfeXql/mn1TUcsXwMfNNY2f+9rr9u+3WdPR0b9a4Njac3oAQrhGKoPXJ8VoLdycumQ0u1Zv6FOeTbb7zRnLuiqgAcZqGaEZglMhUKg4N0I9NfzNv/W38MgNP3/3Ne4gKE2QjxdI1LKOu8MD5pTArar4pVRdkKQZugbdWEsRiFGqKvRaEgkiCNGNNRMaA5WBaqUmUitYCAHRxAAZlBKWWhXIAYBawbVhIgISo0QNbGNjTBRx+uwZp4eIH/7mb+JcVjQS7OYJgQksgjlFoC025hEiysAQBFCIIOsF38i0BWJEjRNy24Flj8Y7JEogsNXFCeYpgdAQgorrhagCPo0Fp3zB5emIy/mIbx4/Yrns8A/93p/HX/rL/xx+6/f+FNI9GzMFqLkiRkbOgvVU8fypogAW0GqtY14zaiWgMdAYtQBrFlQKSi8eMDoxAFyHUjVWiAQIgsxADATiqM8lMKYomCJhF4BI2l4ukW5apQgulxXL0zMev/0W3757h199+SW+evcN3r9/j0/PjwpaLGcsedHvi6OxglaKiR05Ag3Upg5nrU13cYIJh2kGR7MCvrXr2uAQsZsTDvs7hGD1pnVwoJqgol4FZ+7IjEDGuN5FjJU0bLDj2h2/fL3rhjTYgH7Cl8ep86YCMTR87u25r95/AzAodfq6ntev5TVb6cHqa/eqy+i2JGSzO+PvR1t2mxEeX54VYIaVWASIhKvPCYGVSiwmAHxlL81+9syiWHaZfFi1i0MTdWqG8Rqf9Tgm/rNf+zhW7vDensPta62mx6EXtgX+FsSFECCwzBCpngLBQIkRMJDrjJ1f0/j7JipStjnVGwDi163J1e2J+ueMz3QEdHrgO8w1DeSpZ8DG94vIVQmAZ5ocZHpt3Mbz396bSAOTZ+CGPTxszKV2y4RkLQ3zOdEd/4EtMmZB+14oqsNUSzWBVYZTfMVAXS1nIrhwmd/7CMbN8wxAWZEQZ+ZoGYk73ebOYhNQ1b1Yg0B1NJvrk5BR+y2U87EdwbSxdGAcXxs0BPvsBihwYYCeBjBKyx8Dldco7mMZkQMYnpnWMZR+j72ErGi3qMB6rNKUYfsJg9CQbwJifzZjMOwZ7J7tz8Uo4DbmcUK6i7g/3KG+qXjzcI/T6YScM87Lgsv5jLWescYLLpfU7cjhcICCTvlmvutYMEUQIloT5Loi5xU1RdDsJRCEydgPLASgwGvtW63IeYUYgBTTvNkTZiur0X/nXBAQrP2zjvduv0PIBWsuqLWAhHXeM2A0BKS0x37e944t457j82Cc63p/jLz654ju6wCkWhcZqZq0ImATKdOyRgdgxiAc2PRrfL50erkJgY8AgAOpRK7t0D/CxnwLTAEVZNU1bYGdkLFdTZiZgrWdd4B7AyA7sFzH7gzbGHkQz7ytXwdi1nVVvZNpK4kLMWAflRbP4eX++XK/vd4/fA25XRy1hUa/QUQsDd9AcPaaCT+bHQiswAG3jXVNoondml3UUUGGwIIapJdaama7WXAtVr6g52Q29kbVz291u8fRPhMHBLZnOyQ/SS0bqMUBxNg64qQYMBubSsdMrsbu1n45gFFz636RGJPANnwFsJsgRd2Pcs5YiyavwIJIEYG1I0sY7KezO4gADoBx8ABv3Q0v/9vsvHci6v6TKPAraxnAZUBIuuCr5lrHexznjIIFDXA8AA7sqNaNAxZJbYu4n3QtJB2CduxyodArlpsBGeM4ezmu3pcCJq4RZ6vR9gHqpTI6T/WOlI3hHeq64pqWNkO1qKoJk9dasC6rJmeYEYN2hItTwpwmBI6aFP7BW9w/3OFyOeP5+RnH4xHH4+mFMPj4+mMBDNGZ9Gz/TPb13ZAI8M8A+M/suP+ZiN4S0U9F5Ms/7rP89Vrg7kiU/+yD4RP9Ntvz2vE261+8Z/z+AtR4ecjwS3nlTZvDdXuuWyPw4qyjgRgAi9vAwl/MrF05hsDJX4EDQrKJYpNFf47wdlRqJ2VTg4Y6BaXUbjA9iFFnzYyJiNblrRkf0ZAJ+NSekIRx+eV7fKKCj23BjzEjnY6IU0JdM1qp2M07hN0ElopWMwIBMQUTodMMVW2EdQXASUEKKEtjIigzgQBUXcTChMaCwgp41MYIEhCIDdUEhBWzb9DHFEQQmiDUCuGKeaeMjR1HTJTAd4IyFbx58wapZggJ0jSBICAzwjHc6bUJozUFMijOiHEGxwSwbqwcggk1BnCYQZjAUBS4Vc3YtJyRpQBSIa2glhWlrCh1xaWekMsZ4bTg/LRADj/Bn/4zv4/f+0f/afzkd34Hl0x496uG2AixAmc5g+eIemaUXJFr0TsPDGJCaQ05V8uCqCI0GiFXYEGBmApwCGyqxmqMay2aJZpY2SgB+hWVBTqBsWPGIQD7SJgZoAIsZ1u7y4Lzp0d8evc1Pn37NR7ffY2PHz7gm3ff4vFJM2bndcH5fMaSFbRY16UHvFo/aPO0EdwRqW0zrKq4D0gjNPHgqekmgwYhE8rjgClOpsWiLB5HyskAAhHpYJ87Qi+CA+DqdzQ4NP59BDteAw0CD2UkvoatpWPDkPnwXlrQjZYHozTai/47t0o39m8ESD3LdGubRrvjjtprIIxv6uM9SjMOTN/wrgGdEby4ztSSZYg1cHPbNG66nnloUnrQKQOIIaL2g9rImNlq8smcHcZ1ffIYhH+XI+X6Gr4Pjc47gCuhQg+K+/2SPo3atGzOqGb2LLfnAdESnCqti92JbHXWHhyOwMG4J9zOS783H2PmDUzq9zi0irudRx7I3or2laG0ZWQfee38eC39s83p9TEZM/bXc3R7iSggTUbJh7EuCQZU+p7VcwqbXtV4vbdaGK8FGikmBZ6bt+nVwCevqwUeEcG0VM7WdUIMyA0pdjBiy7SqTdnm0JaJQ9O5LKRMGYFOCc1wNyvj8+dAth480NnG5xbAuH15i03iTUC0adxj4BDDwgFzgNGf2Ti/rh3frTX0yE7TKzXApWtMVLQqVwGusxtDUOFVX3O3L5/rzNrd4XK5gIgwpYQpzAowBY2+q5gwnghCIHz28ICH+zuUUvD0/IwPHwnno2oZXc6LMewazuczjsejgU5O2Z56QBACgYSQWAO0Jgo4tlLRsjI7LybuGVjLD+I0gblpa0WmDowvy7LZGugzCSGozoq1fyZsYwoAaUpI02RzzU2GAvZiNoTAuLu7A6DtVl2z5nA49HNds7aCsULMBjRlSTi4obw2W1S0gaaCTYDZ556Dk95xwO1BB58iv5hTYnZQwVtby8N89veKADFJF2Pt5RD2/irSM+K1FDBFSyBc779Em5+u17C1iRQDCUYb5LZJqf4KZjgoW6v6U6qvsNmO2/U32ld/XS6XDvg5UDZ2vBnBDJ/7Au7bfjO7RzDGZVMWgDB6yNGDYxO99My6MBCDXouCMxdIqxYvN33OomW12tKSrduoljXYTfXxcXuWqfR57J0jnDWg5Ude2qAs6tqAWlnZbtjKQbfx22z25icoICjFYpXWrvaP8bn5uLamgb7+TcFViCjDoqk9hwF0gXnbF80GttJQirHG4sbOVXBzi+/6MiFgf9hjej5eMRN0fW6A3a2Vc6BCV7WxcH1dSrPSRCttCjSUJG7i5v7aQGTf3zd9JCKyFqXc534IPm7mK4VtvbTWtHy5XYNzwNbJx/czERUgB4AYooJkbQPUSEhLeFmZ01VF6/SZR9XbmdKENE047A+4u7uH4A6fr2+Qc1YAI2f8b38dr75+LQ0MUljzrwP4UwD+QxH5X4joXwLw7xLRvwXgvwPwb4jIAuBnAP5oOPzn9rsvb875VwD8FQDAb14jIrS9p//u1rkhh46xGb5bp/mVG7n65+05b65P3wNfDN/zHt9QZEArbzJD3/d67T5HetnmjG/v784ySNtLASYd6c6EHpOSboIhaWkDsXYtaKRoXYiaId8ssj0L2uhvKvkhKqYWEzIEbcmYV53IR2ooVLALCbsaIBFAXdAeF5xLQzwtypEWneTBWiP1KzZntLqaOxEQEyhMaqztfZGBObBeb8mq0MyCxkZ1ph1qZZQsvR8xp4Qwa88LBA0YE7GWM9QKogxKGRMxdmHGxAnlPuO8W/DFFz9GC4zK5ixY1jcwYS0LOEYQTWjCEERw3IE4QcFiQoUgS0MrzQLqD2g1Q4SMLqudMuqyYl3OABpazcjrCbkskJoBKuBAiJhxd/cn8Pf92X8M/+Bf/Kfw5nd/hq8+FpRvvgWYMeMAKQlPE2Plil1hsEQIR1SqkKKkyypk7AtVnm/UQNbT726O4IjeoUGnZYOgIu0IaSJMEyEmBS44ADGqMYwCTA2YG5CKIOqeiOcseH58j8dvv8LTx1/h8f2v8PzpHR4/flSE9XTCZclYLhecLxcUy67VVhVoEev+II7A25etTp2z3OmAqndQIajWkcHqFMX0PeBZpILn52fM86SOm2+aTWzTeVmWcUuxv91AXlvno/M/Boh9DRMrfXs41uvpPfj2NSj2mb62XwNs7QTb7yxb0TNOtHWMcIdzoxe/tI+llA7k3H7OeE9jEDoG1t8H1F6DJ+jZDVeKh1Sr49wYHV72pgBGBXMy50k0EyK3Qf0GtChgFDpYdQsAuBM0BtbbmGJwirZ7fy3LP2aSaymI0IDUW8E6aMCs4mqeIVcAw0vJVHH9FvB+ARgN4+0AggYa5cU1+nMfHeZ4E/f6MVtm/Vo/gYdgeNRh2JgfG2Dgzr071m3QohjnxsuAQ1/cnT6jtVsWWGBMGlEQoNbquTQITFBZXoqe9vMOgbcDT8Tu4LX+e9dj8fuIfFNmQz6+utfUWrvQ7zRNPTB1tqPbnSlom08mBe1SiAALvNyADHyH6FhXsWwp8GJtvQCkbtYzE+t12JzyiOgaOBALEtXZrW3TTrlld4y/G+cId9DxuoRl1NIYwUJnJ8UU0VmuZEEzwdhmAkHVvbNmc+ozVsmIBhhQ8JBChsANHSR68+YB+92MyyWjZM16n89nbb99US0JBSGlC6GmlLCbdyihgqoGmnFOmOKEKgW1GZ2btMyylAziiklm7IhQWsEU7bioNijXgnXNqEUlvl0wFlFLKVgEKWpJ6rIsWNcFTbT2fr/f43Q54Xy+oDUV8dztp87WSinh7k4BG+3QtfR7GdflCCbHqAFnaw3Eot3VkmZc4XMcW8JwzdfzwdlEft6xFG1k8/jx3cbKxnxyuzqCnm0Ax3TeBLigfGsN0nReNJEuqNgqQHHb226TBMLbz8yb1kbJC2rZKOoj+OzBn5cmABr851owWXmYv261hvz+x3V4G5iPNrOzwIa1o+/R9p9MqksntWigSwHS6sYqNbChQhSIoNSBGg/6IZoxVzA6oVpnDs2kBxAF9ZGbMUndRtrxrk+n+5cxPVoGGqE17uvBgdZSlRE5+gcKqDRjZuh4hHBbljCwP0XXv4iA2jam4/cOjNrz8sQEESEmFzC166oVi4l/7vaTPnbWvVnMqWSKCGECs8DZIU0IMSog62PgmjKttV4S4/pIzBXkKqH2gIi25++lWJ4YUJDB95/r9aLHVEDhKlsy7ptfx41uzvUYMfYxmZ3ydTfEenCwxRitpKXlW+tYwJFTBWCMVeKiokJgikjRkxSMAN0XW1Odn1Z13GspYNtjBEDhAizAclkQrSvXPM/Y7/eYrdwEAO7uZqh6xeuvXwvAEJEK4M8R0VsA/yUR/QMA/k0AvwIwAfirAP51AP/Or3M+O+dfteNAf5ZE3lnJBzAy1/S95oTrhmwbcK3mEG6hzAuQY/yZqJ+jO/V6Idvftzf3ySLitL3xejzKv7ofQGQ7//i56P7vdRADukJyNyNtrIjh2kJQVWdnRbhrZ9iCOr2Q7gvooQFEERS0g0RIWk+rCxDaW9ronTBnsUKp+ipEFhHSJprGHMFpUsXnuWEuQGMCc8M+EHZpxj5OWFkg79/h46cjam64CwFzUnVvStp9pFVCShEcNwSVarOOKhH7MIM8eIEWl8yRkZgg6wo0rd3kRJCorJDcJtSmrIIQIkABjRRZ7cBNq0BeQbVhSgExMBCa6mK0i6K1VMEM5GVBIUKBIBcVGfFa54wG4owmBZe1YDGxSHCECKFU7emca0bNxbL8C8SyxyAVD9LSCAEH0gxOiODE2O/vMe9mxGnCNB/wxW/8Sfz2b/05/OQnv4/dFz/D+4UxXyq4FKQpYLkcsZwJ+WHGmRoKrH6SVLW7UQVRM6RVAS9iDRKZI2JgJFoRSZDihHmKmJI5rwykxAgBSNEp/vpd558+O1oLZKm4nDMkVzw/PePp00d8/eXP8e03v8D5+C3y5RmXyzPOZ22TunqP+1KR11UzdA1Gp1URPTAZHVW/pNnmO7Sh9aBKe35XlKZ97dVONKApeNUgyFUzdr/86ld48/CA+/uDZucuZ80qMSNOLzt1XAWTA1jgmQQSMsBTV/umabBlhnzNu/6E34kH5kSEYKAeD12NdHeyjY0IwopsX4MV5hjB7AMTurihSFdclwbwQOtsrRq4wVoiBO/n7vb1OrPlr1JqB3+2LL9qjTj1frR5I1DQLSSpHRQRBPayP6/13cZ+PIc6mGoV4hSsRAPqeNeq4KwBoSKi9GMT7IvBs+y1fwbxJsCmzp5lLZvVpEI37Fqr2jDenNQxAK5GC/bzEJEFn9IZMx6UO+3VQWhi1jnFhEAq4LouC0CegbkGVsZrFTE9E8uMtKYAhVjg27tMiY81IWfP6LfedaFnx6MK20rb9AvcqYoxglPqmc9xPbTWMMeE1ajD416XS0bOpQNno6N567CNgbUW8FYITGQ6uLio1amDbL/e1iiZw+/z0X8ftFWUrgdrvVubtg1nagjcemmDXo5mEjXTXFFDUjE0diaIgQ1CvUb6cjnjcDgghoBl2WrlIzFWyWgiWPNimVR31AEtQ9UggxCslFLg5SWqkRAUDG9bPfIYoHrgpYGBC8UWUMuoVVTXqqK3S2e2WUmmmUOaEKhFAfvArKKGDorZfCMD3nT+OyXdghsDjNkzmyFdBbdXACAIIU1WSmAlYbZORtaRA71NqPs6a1lQ15OVwgBhUiC6SlW9CZEe4EVifPZwj8CMUiuWxUQwLxcsecHp+YQ1L1guC87hDGbGPM3Y7w6Ywx5LzphawjRHzciSU6gZHLTktkrDsq6oOYNlxRSVccQUMU0zQojYzVaGAzIl/ozz+YjzWbCbE6QFEJseR2RNjNtEiyECs+61ypglxCliioRaGuYp4osf/Qj73Q6fPn3SNqgvYg/dAAAgAElEQVS1Wu25sivI9o2yZkxBy0HVEa4279lAYAu2fL/BINooghCu94LT6YR1XVVgdb/vwLiKJkLPyRbg8PUeEhysH4FLy4iHoLZZk7gN1ERF34Gt7S8zUgy2Xl+ykNwGjMCf+gkbAHgLClJgMIAp6XnXWrGcjgb8TFvHP3uN+h/OyLvdK1OazTb7vnvdRhwQpLR1++m2IyrQWYsJVNJWZkjwNtxmA5uLGFf47G8GiBMp+ENElsx0n96FLHXt1lbNv0IHL9w2O0ihltH0BMMGwqitTRYMb2WMHtzHGMFgSGXUmq00uNi8akjW/VC7hDFgtg9iXhLrfBEZSm08DiLa4kEZ7Is9T4iyj2utyK2pMGlQhoWz05NpqGm3FO/SqPuoAm1B/TxPCIigoYIaI68ZAl3vzA1cC1oDuGk5LKSCrBNergVrK5gwo1WNG3XsYNdvSYTguoUDwCAVVWpnBSooJIM76r6Xdi1SG8ymt7P5USMrU8QB/2tQ230x9yMcUBShvveHwBg7xQVW1lCrG1jZbKyoqc/FgcFQnUA9jzL+L5cLnp+fsNvtEecE74ATh/art6+/oy4kIvKRiP4HAP+4iPz79uuFiP5jAP+q/fsXAH5rOOxP2O++99XIKDTiolxDhsHeQx7g4xo/6MCFO0HoT3MzNP4Wjz36Sa8f6Ji588OI4/Un2ia6BTSD+JoZwkDX5wPQBY2uENm6Ia9jgORATZ90Br4EQ9RGA1mhaJcASoMiAk8z0rxHSDvEtAeHyZw39LaMgQKE9YssgJmYQbMFhYbk+UbBNAGYMJFRkiIANERUxKA1iMIaKL7Z73F5OOD4/hF4/ICzGAU8mN6FOUIhWHDEoWfBwIIoGVKWQXyPUIi2oLlZYHpp1noVCFgQEVBCxIoAJYoCpYM+ApaGIA3cGs6tQnBB45NuCMKImPD47RGPHy/4+R/+IYQiigRjVai2xVoyJBRkKR2w0pZTQEoqpCe1qOo5E1AbAgmIG3hiiDBimjDNezRExOkAihPCtEeYdkBMCGnGvNuD5zeY777A5z/6Ke5++Juo+x3enz+CasKChsAzKDegNlAUcG64TwkcKkBNgQkm1CaI0a4vACkymBUBn6aAeQqYiRGpIUTBFBtSom5Y99NGd5PakNeC9VSQTxnL0wXn4wn5csJyesbp+RFlveD4+BHPT5/w/PgJ6/mEsp6xXM64LJfeAsuDEZFm4IU5E00ptb27Axx8VAdGkwXSg11y9N8ggeVywXK5ACRIwTdeW2eBkGsGSsPpkhCSqSoD2pc+ZxVEZIK0YgJ3gFQgkIk7SdUghETrTAPrM+igw63gpn6PvHVSKK2iCiC2wTsbFGxdbdjvddAK4A3EgBn2ZraFnT7JrOwgpq23dj+P9SqHoLUMzyRXKKjBCKb+b/F0sA2rWt0sEWBsAjaa9FZGoI4SccDECU3EngEjJVVx56ABbIXR0UVbK6Y0oawZMBbEPKcuXgWE7hSPbQPjlFAqQIEQY9Cg1KifU0xYLotlhhtYGJEi0Ai1ZHUSfExNMDGmqEK30nr3iS27Jtjt91v5CA/ZKGm99nTMsjEzpnnuToUHlzFGrf20DVrbFSpFVZ0dpbZKjFiWRR0cq7UnAKvR0Uc2xW6/Q84LEnScqQN8rs2iOjnroo7HFKeug8ApAWhorSAwYZq080DOFRx1bBnBQBGdyyFo555g5Q3N6K5lzTDhc51XYvoxgZBEKbjSancQ/Zl6th6ABs0xolatZ04pWgAr6iiIZoGKrcM0JQiUph+YdS9xUJC0e0xrFVUKQkiQ2iCkpR/szkQTVOsgMk9aoqN11K7Azx6jg1MAgpeNqUBcyRUlFy2hsLroFEKfqylFLScIQXUNpCFShEhDLg3cFFwhbJ139JhqdG8CEHvWe7OdbQPRbgDXGAPCpCUYCIQpTDafBSSsmWti5LKino+qu0AJM29t1FtrWPLIZEF3WMcWkoGBYt1L7u/vO9MhWRtjEdXD6AEV6/2Uoq38qhjLhrS1+jRFzHavui+YIF0wSoM0sITuYK8tA00QWsDUUtfHiaxltqgVFKxdKCZtuT4l5KI05V/96pd4/PSIhoaSM0petG47njBNM9IaEScV/UyTluKiVFQYsykk1e2hhpZVOLrlAqICEbWZtWlAXg2UYNdfAFBrxorSM6daspRURHw56+dywpJXPb/NgQhB5GigTlFtp9/4MS6Llt0sawGRsrNgwfo0J3DQvSuRAu4kOsbE3HUhamFUaDlMgGbzYSUm7IA6BNM0Y5om6wLz1LVFpKnd1T3dwGdsZXUUWBlgsu3lgbSEoaclSQEqTqwBZ2CseTWbIKrdsS5IvNO8ASug4yDfWA7lNtiDbdV68HIGsqBcM9lirFsxcLkJUJqgmfj92F4bwNVavGUtiRCyiaa6rYSofxYCW+tdFUBkVssVY0PJQFkbnJHpPkBp6udA0D9vSkn3jFYR06y+gO1dvm67fy3qfzizkgmYk17vuq64XC4G7iqIFZNp50UVgBUUi2U2rQUIMIXJSjgqQtg6aAAEFgY1QmsEqaovM0UyRrAxo9aT+Rxp0OyLQBC09ayBL6kOURu00EQErUCjZsB0XUj3danAAPjSPCNcgVlAWau+LQhSUqHRVrXBQB3mkbbzVn+riekmUVS7lFTnBiboq40EoIQysqQTGqpoYoVDQGmCxMkEnc3HEmNSNF0HTKq51Go1IErPpwCY9Pt3YNc8ZcXy2LVTyID4rURpSxQ4cLKxq5TNssIFjXV9hO7rNam9WURt5eq8BVbeHAIi73qCrDYViuZkpUbYmE+lwqQCFKhbno+gM3UAI4TXgUng1+tC8gWAbODFHsBfAvDvkelakI7CPwvgf7dD/isA/woR/edQ8c5P8mvoX7hAnc5gMlEk+xuuqaUkI8fh6lqvQIAXf/uez3/B3hiyOaN42+3fv+vzXjvfmDl77djXnJDXPuvV6/fPcGQtBOuBriIpLjRKCAhMqHBBI80goZHVvTmga1kG1kyy08y8uUpj3YxBAZHYMsZkOgOEKU7YHw6QZUV5ekYuBW31Wk7ydCA2JAnWCNYAmn4d45gQnLa7jYVsgE4RKz8zUU1miFIO1MkDEBSG0Cy1CIQqGmvGjUQQueJ8aVhLxWkpoAA0bqhCoAAgMFJU4TAgWVkNo0gDmTiNaxoEVrX5wGxIecY0m6o8R8Q0ATxhPtyjCiFOe8R5r2BGmpF2O6TdZ9i9+RH2d59hfzggpoaQVpgPqRugCSoFFqTI+jWLASqkdaQxYZ7IQAkN6mM0JyoyUgBmVoMQCIimTyRNUAshccOaM86nFY+Pz/j47Qd8+viI0+MFl8cLlvMJ63rC5fyM8/ETynpBWc+4XM7Iy0WDe2lK4y0ZuYxtxSzIHrLuI0UP0GtR+u31ummtdCTeg/Ety9EsIwg1nh2kbBAm7PYH7O72iPPUN3t3sFVAycsP1OiOZRs+hX2tKxi5qfer0d1AzXE9X9kEW7veMlVE1NmmjVrZ6zqH43q2yM9pwZWXH6BpN55tndAVm8ozbGgafE8pWhamQmSr9yylGJDqFE8NfKR5S0kX1XSXU7Mmzqpg5q2+F4KUJs16DPfVZKPst1av7ONrFFt/jk5t9U4URNay01oZxxhRrOvEFBNSiL2NtIt5jePhHSq89M4zxiFolma32+N0uWh2synIMWpgwBXTBwB+ZDC4E+pBWZznq/vULIiGqn7ffh1jn3sAvcuCf37Oq4EOax+jnqUnzSSOLWd9zczzjCrWKhkCcECpGS1veiCt1i4Eva5Z23YzIZKCXTA6MpqXbVAvC2yi2jOBQ2+Fua3xa5p1XxNDUiGmZC0opY+zd8oqtfbtwxkzYDVczVhaCsQpM6s2r98XzXyBbRsykV8iDZaI1AdhRgheugSUWrqfoiBmU9DDWEcxaQ2wdj9aAIOQmghaUCYDBJ3RsI2Dava1tiUMxsxwtAyzAwY+PmPw1OfpoGtTa9mAnDbQwSlczaUYE0BassREmHiClE3nZbxe7eBjYsqtIZAGYMDGwlqtdbCv0Vf9FgEaGtTkq3aGGCAcQxqeKUzzSMeplNyfEzGBhFDrlrSqzUqvWlPgIkYrJzVhSqCztFrQ5353OODHX/wED/dvsJaM0+mEp6cnnC9nNFwQOGLazdjt98ilgC+MmKJqisUIBKC0rM501BbNEFEtJhC4SA9sWmlYywpiwv6wt3b2DdGAcKJN0PWyZpRStRMZXKgPCpYwI5IgioovijBiAMT3jKhBIJ8uXXSTRFlMne1ilPVR/yAwaZIma4muapM1lIu1B04OojW1E61ht9vhcrmoQC1Zu9taujabQJmvteKqY5bUhtXXMME6jBDO5zMAZbHqnHcND0sOWmClTBJtk6nBnwLyHuj7vnObnNzsjX/pmLOxUsho87rGocB/ihofy6aBdLtHjew4f+k6U+FZF0RUxUgtc1WgPFhQCutuQ5hlQpmU0t+16AY/wvfOvvZTRCQCecAdlLnsbTf12EFvCnC4Bg2CUpolE68Zf84uGcdtK2Hc7PT4fRvmLTjuoIN9AQCxrgsPjmtuyDWjrBl0IUzTjHneI0ZWbU0RgMXKxATrqqUJGrxfM/7EAIZ+t/6z+eK+97TmpetV51vOCGyZf0soXO2Zg26QGPAGAwngiQJjipE3eHDgThoC2BiO2s0qSIBU9KR9n5tibFIoBuOJA2JPsEvXyPBXroMAuYFVwpp4jKQ6Jbex5/hcR1vta4h6Ivu2dHqIZx1AEfXDYKz+aEnFUowR6csN6p9pvKjnbP1BeSmSPlO1Bd8d9/46DIyfAvhPSXUwGMB/ISL/NRH99wZuEIC/AeBftPf/N9AWqn8AbaP6L/wan6GDIXKVcd/+qN++6za+D7i4ft93n2OsCb11pkal4FsDdfv+fpw9BRF5dcKMr9uavdde15PnhtkxHO+MlWDCU0pZHg23LqrIEWT0n1tnarsXo5Wzix+ZyvBWkA9HYUsrhi7aRkCMw3xAeNMg+4Sa1005HXK1KHoA6OMkhCCxf54//yawVpnXL82O6eaqISEbvke2STNmaNKUmRDIyiAEykBBMrCGEZkQ3n4DfviAH/7stzULzspyUcpZBKFhD0bQ9B4kRFQiICRIiBCKRp0FRAgxKO2Qk2B3t+sGOwRtrRbThHneIU0T5t3esjyzinjtdkiHA9I8Y94pHXWa90jzDIIKau4SYZ6AyQCKpCVlYBILFhVVjt5JTzR5H3Sf1jGEGgPPSNYCLMuK8+msNcPHI54en/Hh/Qd8++0HfPzwEcenZyznFet5Rc0rBFUFSPMZkIJm7d1UNd6o+VaHDNoAiu6gDKKNI6BA5AERXgAYbjh1vo7GfWvraOjeVeAfY8T93b1SXhNjGZySLWuj52MTw3qxTshZKXJ13LZ2aLg2Y0n0zd/Oa2J+/iBGW+HZTf95/IxxvfsDfAFqAFfOBYa/OWvMO3roewklbwFla1bSZX/rTh9t40/s9sdAJIgJrW5CXWL3RZY9CxIQkLZ7MVsQBprytravy0+u6pSNTl2LO0LmqGKw5+SBqDtX13XJPjbOZOi1rCFc/Q5AF6/szxnXNf+eFRsDzFLk6tr9vA6U9DraF0Htpr0wlnCMgefVtRjgX4p3a9iERYm99GZTDNeMEhvA5Jk6d0K2emKIgb8UkdIE5noFtilY1jqA4OVx3oGgNu1aAu0a2ufya/uc3+MY/HogsWXMWr/OwFZWwgzkrI5xEwgrhdbFGrVFsV7bNE16IWJ0624/WvcPGnmh5bbGqoGhZJ9ryWGANThrGPb//vx0z1ovl/7sAAz15Nd7/hgE9fsfnrODVbfvubIpA7jXu+CIDb3ZQs1ksjIiABWKbA15WTEl7R5QVg1Ou5aCMTLgdqE1Y4VqILrVTYsxda51ZEbfqe/7BqioqB6jtVHcz2v3N40RnWoV66p10xyVUco2D3r3k5xRsrZPtijDAr7NrrYm3e4uy4IQIu7uH3AH4LM3b/Fw/4zn4xHLkrEsK+qaccwFJ8sGxhgxzTPm3azZ4pQQc0ZmwsQwSIxNuFZLedUGCbjC7BawatEuRBPjUKAiIQZtO94mXxOW6bQxhgApEEIKncmmZXXuH+l8ub+PveNFzhm1VHBkpZfD9i+zZbvdDvf397gsK8rTE5rpQ6zLaoAHrDxBnQRfGw4aRGvbfF61fIWwdQv0625Z504YhYEhfR9hZvMVtg45EAGLdtvbbKCWhx72e6Q04XhckNeNFeFBuAf6I1DtdqQzq/raMXtrgXwpVTPorGXIzdZ6tHJEX2Mjq+M2RvA1HAMZgyRYDLe1UVbdioAQPNOtDDIO6ms7Ff8132DUo1EQpxnDZ7MvV90xxMfALZWCkrkVtLYBEn4vKaWuLzH6IJ7M8PU9Xpvva+PP+m/qZWKa6GiWibdOGEwGhm56OstlQWZB4tY/U7UGzd8jTZYQ2MAx6fdHoL5XjXazXzOwfYmVxDRjO9icxuA/uf0XHuM8IOhi2p5HUGDII/aukcjXfk2rovFGiuDWUICeRMHQFQ/Cm+/Ivu/iag0SkZZSWQmzVxqoZmaDIIPoWpvFQSq/nnFdbH+7Bi+28cPw0mexzYGqHdXcD2ZGAOCiwNfxvCcedcpu7OC2iVB/T0z/63Qh+ZsAfu+V3//F73i/APiX/7jzvnLgVXCu8cErTs53HP59DtEVMofrDP5rTuPtOW/PfbtYXwU2hlrC269RDf27HtBroMd3gSBki4+Iek0cm5MlrQHRgAtHv6SiNatVKrXbAr+fGKN3pLRFbUGO0Q7RRMvvLaoUHijmVR3jJoIUEmh3AO93vXMAxJ2rbSFh6FogEFAjJFYaaM8agpTxMYApEK2eIlskm7ExIEOo9wDvKLmh7IHJKFbW/pRs00DDcn/Bultx+MFPtVOF0T6JN/q/lIpACgKBA9hYDhySfQ+66XLClCZwnFB3D4hvPjdnNODubocUAlIg3D/cY04Ru92Ew26HaU6YU0KaBfPB6G/RNSk8Q6egTEyEOQGTJoMQTGQnQf/tIJbPHnZnBKoMnVegZOD9xyfLHq44nZ7x+OkjPr7/gOPxEefjEafjEY+fnrRmeFltY7NOKq0ApNSzWlb9vFZRW9aMuH1gLVVF0AYQq2esZZv30uoGQOhigVIwW7cNbmDHteEOcm99Ojgu26ZKmOcJ8zxr3aVRDj1gDOa0jzXYt0vUQcptXQFxnmzp63ohOM1Srx+GiAvp3CPSjJPQVsM/Olqeeb8Nem+BEQ3Ub67tBsQIIaDKFjxuQXjtGekwaDv4q8/35sf2W0GTAmomAObpTUHPAGopAyyQL1tgWhuArOyooSZ6dBzGDPSYpb9yRKtoplgaimVWAJvUoqUTHQAgwlJUg4A90BmAaT//brezTOK1MB0z43g89jXkz6CUsrUNFXTtInfsPSPu9z4+D3eAxw4mzmoBrgGsPkYemIYwdLzImHezOYUqbglohgaSwbtoY7btcR70KVXY2qxClAVF0hkyZKUjOecOyhN5EKhBBDkIY8/HmXhiLC5fIJ7JG50kv5YRqPPnXVtDg2xO9Fq0rSIp1Tm4QFtraLkAtUKIEZKBcxUQUX0aBbhcGBWA6NpMSRkqTRpKXpXBJA2b6Ko9b//e3Gm2bbPVoeTKAa6NQg4BmCPSZMyb2jCWm27BgM6p7sBic4jdpnn71jEguwU5x7npDz2Q6iGpz1s1C0hK9221qv/QxBiIQf1Mkc5U8A5l/fxAL3EV6PgToydDRr9rnG8jeOEgApHR2cmSDn29O1g6grBAa4SYkpWgoL93DN21baa2SvbuCN7SUedVRa5a/tHFA4m6jQWAeb9DSAmB4ib8eT53ppLUhuPzM56fnjBNEw6Hg2ZUQ0C1Dl4hJmW71gZQBpNqUaQwQdCQ12oikYISNOHQ96CQNKtu891ZFMUC5lIaEgvanLoINLNplgRvvwxMU8B+v0drDcfjsbeXNYNu+3DTwO98Qi4Zy1rU1hGDgt5/MmChirZldzvURJBLwbzbgUy7h4O2VYd18sjrquvYk2U3QN22V9le7vsxTODYkkutVJRWkFJEShH7uwN+4zd+ivuHB/zi518hr6WPk5eljW2dR5tdawWb7oziQbYWSTWImo1LrVq/z6LbCkSQ5qnvT17+d8WGGMC0vhaYAGztSdUuaKIPAjAFWN2dMT0UCCabS+M+4p/ldnO0pQIxjRbqoIMmJZQp1UEAGoAMsjU1CE3654ysrnHtKsCdrvyF8djbvdr3P0ZUcEqsqxxtAAZzBMcIC48gTZkh67KisWpktAZI01JG/fxo69vjKwULmttpuma8d5DsJpa6YmM2be+8lmtALIbNv2jSOmtCSFkhHaDq83qI41iTRoBsiRFENKiuhu/H7D5JDJYI8qDfHC8rC/VolsiEQ4OVHNu9V2k9Iayi4VZ+P9jnEfh2W7rFyx7X+jbioBfMJm1d3FpAZ9X43LPwC8QKbEIEpWYbm+059ThaRLOrZEx+8/VdL+u7Xn9HGhj/v77kGljwVw/yBw9d7P0WFvX/0c3f/WcP7v3n14CK7wIHbq8DN8ePIMQIUtRy05pxOPZ24mxDMAb114DFePzVdQ2/G8eJHBEzBJvIz+FOJl+JBPrm389nIO4Yt7kjAyJzHEVr8qtOugoCihsPpRhT3KG2CqbJMhDmnNfWRcGuYalmbAAGmmb7moiCBBzsO4NI2QvVhAxDCGikxmSKExKpYBCgTmeMSTfGwKDIQKAOTJRq9bWGfK+fPaLdL/jJz34Lc9qBg9YvE6mwDlh7iAarO4wxYL8/4LDfKwWzZECAu90ed7s95mlCnPdob79A+uGPLPMpuL8n7GdgNyk7QsEH1a1zB1lxFhO+CeM80JKP7ljbM68CoAn26lHr/Yk+o2UpuJwXXC4rLucVx6cTnp5PeHp8xul4xPH5Ca2uvdXW+fSM0/EJl/NJhUhrVYG3qtmeWivWsmq/e2hdeS0Ztax6rabBoIJvRiWtloGhba71LDQ2FBiyARuAA49xE7Ht4zAEoaTaM2OXBWa2DOEIdFA3jCJiAbVsAZVt2jmXF2vXXw5qELsN2NpKbtet2cMXjpp/80C1YzTXjv6Iit/ahM1+dZgRXqN4a5t07dKQiR9KMWxjUuaW0ja9jEM3bq1DL0N3DyLTnOiOgZejAQQtMxN24FGD+JgSUEsHb32cyKB3uqHPj5nkMfPj16DOmQas3W6ZjYIIAjRQSUalbjYndA1fB3zbPW2UfB8nd16641Y3tfmxJR4ANAMlRrBmv99d7Qvj81uW5Wof8me3Baxb1w4ApkeigeVI1885Y3/Ymy6Jdf1oXsLiZQjR7rfvmkATrHnVEg+j00urPWhcl7UHpcGA0znusKwLSlkBB7nbtagkoM+fOSCRZVSqi8lR14Vw5stt6UN3MgGsecVsYwhGfxZ5zZahFLBQb0cZ+pz2c5nOgFiIK5ah6u9RlpG9WQN3qN1tbkPtWUbft0V6W9i8rohhUtFTuW1ZqevkcLjHbrfH8XjE5XKxdoJbsDOuVZ/jIxjh9mxsK+xfo3M3Bgp6LoJzklwoVtsu6n1FB1jFstshaovpNGt3s8Gp90zzuD5FtsSJtkLf7E4HvYZ7erkOlMHl3S7cluk9GGjhGTpYVpW8JGEbH2e09GdOWrLknSogRm3GVuJVmgXVZps88PU1GCeleJMw7g53+PztW6wG7lezScfjER8+fugiljGqVoQHnLvdDinN2tkgRSvnYgU6YlDgAQ7+FrSa0bz7FlbAAIlk2XURnXPzPGE/BwSuiGQ+lAU4TQRigZd24ZIrG8UcUFfVAGqmleNTf11XfDTtA2kCUIA2FgSmnXbV0a4xjNWBgnVFSKoNEqL6ZGwaFkxqj4+PTzifzxBxQOI60++aaK16yRnMPzUQjxjZ7MLECQQV+V4vF7x79w5rzqh1Ewh2QVHvCuTMpREwdRsptfb5V0uDCKM1L7dkaFeizW/w9eivMblwlXDBuEfr1NagHUolFQAIPWAbYwLVDAFAor5fvGVJS/ddvEuK3ztzQB32at3bdL2rj4W+trZgUteWinnzlS3ysXJNCt97T6cTWlsBXANEtapI7lXr5FGLAxlSyZgXgJddboGy/0+tQWAGYoTUBSJ6rrzq+VR7RVsqeyny2IVMReyvYzQfx7GF7a1PxdEB/20fqbWiLkObdQOKusBxue4a6YxGYjJcytmpWhZUqyDsVKdsnE/egWMTsi9AGwFpBUJ8NgSLi5hYtTJke54OAxKpDpS/+h49+NHjvuH/Hktoq/nIV0CPj49s8wVd06fatW7zKNIAN5Duxc1jVJsfYLNhTHDGyDg+t6+/awAMhgXVfF2LA9ha3xJ8/cv/vQUG2yq4eo+hQX7AuNm9RIG31xj0vBoUDBPcfx6Dl/5Q8fpn+r9HR/q7gJQxiHntWh2b85vUidUg0Ky4QBCCouPMEdEQP6dtX913U6PH4K7nQMRQ2UKjkwfeMjDmGPTJZBOQQWgBqKJt4QiWmTDD4t0a7LFAiVemmCwZ3sZIlYm1Hk1I75RDgteVglnreKMA1BBBiMRIEowmSUhx0pZrgSGB0QKpGjv0OkKIpvDMkB9+grw54Wc/+xnmaYfEprpftV1cIwbmpPXfTcGhw/6Au/0O+3lG4oDldMR+3mE3JXMUVqT9gh/9xoLPPj/oPdhjjGxABUx/gkyLwr40KJReY16NlVKaBpbFsnO1VBVku6w4P52U9no84Xy6oOZmwMWCZSlYLyvWJWNdC9ZlxZpXXJYn1LpAWjHK6oq8XlBqRlmy0kerGDMGFtBllKolIWCC1GwCl9Fo7Zp1rGIlQloM2DduDfhMB0O2uT6WPbWmjg2Ha0dY/7ZtHBrLhp7VrrUahXczpLfZ/NYaatM6ytusiQfPgW/BxDHg2Morrs99XQ+7gRM8nGej491mB27BC3PWN34AACAASURBVN9INmBkNN0OXA7MimGjcaDSYXGCOvghBmtP5hu/0wqbOQjahkyd+nB134Dqr/h1j/elmxeBo2bvmwjmeUKUDbzw4Idd7JhgAabcjPVLu7lpaujxIW6t+3IzAc6UtKWlPRsVYlOhQB/fESQZbbd/prPRWtMOA+Pc61mcwaF1GnsIobMN/L3+O3fkfG65YzhNU3emamtb3TptWezk426MljVnBYqNoeB1wPp+7fzkgMrIbPAMiLPbNAhUiru24qud3t9axm63x37e93sPISBKVGFFInWOa0Oxv1Vbk56V8izSGKyP32+Bnf5siBAQNdPFhJCSlXeododnFAmqcQNbR6WUDrjpvNjKBqZpB9ea2J6ndWGw+ayRl65zd5r9uUpTrQ8m7RCQW0BrBaUYq8QAAn0OFcuyYrfTshVXtNeWqwOIdzMeTgdvNg+29w2ZVn8OFrC57RifM1vrRAWfC0ABZPYDw/HMmnGmZvoQvDFkbp/PSMv3+TrqwDAzdjsVb/Pr8rU1zmV/LlW2MkGyRJQHcB7wowdimiw4r8akYsZkgZLb/MiaaSbR66kiAyjFnfEl9n4i6q0VncFQpSGIIIaIVtTB5hCwn3eY57lf7/3dHR4eHrAsS+9ssiyLdQ8CzstFx5eCsf0m+7xJ7aEzt5omjGqtup6tFKOZE6ulL27Dg5VzzUhREFA7u6SUgmxBj8hmY8bnHGPAYbfrdsDrumLQcgEisoQOY1kyTqczmAnzNGtnFaP4e9Y4pYQGwboumJmxOxzQRMFjZiBMESm9xXyZcXw+Iq9Zj/9/qXuTZsmS42rseAw3h/deVXV1NbpJgMRHEvYNZpRpMJN+mZb6OdrI9DO0kRaSVvxMC8kIgI0e0TW8KfPeiHDXwt0jIrOqIXLXSlihqt+Qee+NCB+OHz/uxYrW+rQosICNRaYkgdDFWKU2RNN0K3Xr7Idv/vQnfPhwj2U5Ik3ijzOw4GNl/cz0BM5ZO+TPAmO/N+5ihN3+BgebLosKMwtiTmBnmyZBWRg06ULofYrGd+K44vCLLqw/5wnX+cEcI7jvqMaocx/kSezc7jILcKqeibbdOYgPDCB5fjmgH0JAKRXANBb5IuEdSad/bozRgqcJRIeDJxbr21J0v89NZxXD2xZMeFqC2ZhRBJjX4Dpu8u+POOzjNp9PfQ/QQlO0aVS9aMNeFAYGv9mB1gHQBrNrvfVZLGbxfRgDoowcrANsxihJRCCL2S6KYxPgw8YyV4KQPye6eE/fHwqqXwI0A+gahfhaB1u57+EeF6vP7DETz4zeAOtft0LkzIyZfDwIoKiS/GEUb8SKfpCZM/7zr18MgHEd6H+q6ngBalyBC7Nz/NR7zoHwdUB8/bX5PT/1e/PvXIMY/orWZ3p9j9dB2/V7fAqc+NRnfgS8uBFwIUQL5BS40Mp3jVUrodB5vtoirM45OBgh3gdlxlajQg3ySNsliDRgJKtCe/+vOl1ttQimoCsU4ag2UVDV3aijoXLKcLFApSNXgAQpB4AqGA0pL1BFY9Hxlinrxg86Qs8ZGLvdAoSC1lZQYwQBkqgYbDDhnCqsgpuBlJVABJYMYFFF86ajPNfTivPphHd//h45R0QCal1Rtq3P32ZL+LZtA4vR2UKGCOHp+YzT6QyC9u3WWpGXBb/53W/xX/93/w3+8b/8R9zc7pAW7c1v0oYAT/+jolpBALKqTFkrTucVz89nq/oUVQHeCrZyVsChFpRzxfmxoJWG83lFWTe0pmPbfOpNWXWsoWtNNK4IUVBZ9SwaF7RW0KzSHaGjk7ip2KaDOSCBtGIMDKWlMjwhdsfqcITO1A6QztJx49Za65N21EDLZPzMcDbujmA488lOsICZLs4TfuZcuTPwPnnBACySiV26Qrnuz2FrRPws+/sOFlN3gnOVwzIhB1H71yAARRMluwRCgaFwPjtW9F1yad9iUi2Amb55+TsjSPDkEOJovIpnQhRM0tGIukatjpadS0AG3U748wTU2efggTlfUODnoGoOFLhpK4IHLte2bl4z/11dldEi5O+VwnVbwqU/8CBpDub8s+bPvWZDlKq0VQqX7JA5QILZvrkq7tc8J3wevPhadcV1ez5zIHYN4AzAaPysJokwsUvtHY8BPWj3tjB9dtqLbZd7cW3AJX1UwRtt0VvXswGNhLxoi5xA20b6+s0BpDSgaS+uV6z9NVfmfI19CssIoHRufApRWS8iI5m18bMz24JEk+/SGhgKpo51ctAvYttKv8dxtvQ8tsnv2yGHJzY9LhH0ii2RMltKK4OdEB0kcIC34enpyVhtDoKN9iR/Ds726a1vEyCh/z1Gps571J/hPP3AQYPGjMihAwKeQPlOjzZ9rJ8rW8uNt4/PDA1qvJ+deS1LqepDwgjOvco5B7/+Ph2UDuFif6vmhbaAitsnmthJkbRFU3z6h1WFt4ptWyEpgYMnUqmf97JtEOgYRhCsjd4/IyIEvR401XhY1w3SgBwzij3nnHPXjRHRyR67vbKDtO3yGefzGc/Pj6YjU1CKMhgab4ib2oUYdWrEstsjJ6XAK+tCW9gccPA4KqUMT+CaVXC3rWjbHzVs6xm1NV0/Eczg+XVCFkLAbjGbbD7atTn6OmPyLYCNHN4ABAT2cY5AiIQUEs7nFetWUGrTKVAxWExRegvLslsgLHjGM87PZwUBg55vPwMkAEUV7xQb9973eGMwNbCNEw4ROhUjBNUKy9aawJfgGzDGnI7Ydvo+CQQ6elqr5XrmHTDrUyBYn1On8BNNZ/NylHgHkwyEBoBGFT5ty1mi3FxnAX19PZbwRF6EgSuwcy5yXOcnwspgBnPXFGyioyp77sFmp+GAvbJ+tVyGzvjyvTozqFprne2hccO412JTiKK1Js6+3J9N0ORhSk617UFYul/yfWc31e2fWPKforYn+j1ftmc6QEXKJsSwXz7+XO2q2ncV9SSvhF/EdX6OdFzyJDrevCigY0FrK12DSnVUghV3/Bo91iOLM9UHOLgYkjIHWQRcG1q1XMvWOsBGjrOO/IZoxMp2765rRXbfndVKU545+bH5dR3X+VprbKHPQM8LTXvexttevYd5vV6S7qmpgR4DrJ9iNgAk1kqFATZTv5+/nBP/YgCM69dfCmSvQQD/96fAC//3z6FNP/e713/mz/vUtcz/nn/nL93PvwXAmI3I5TUrTVTM+UMGmq8bPCJlQuAGqZqUCTdw9aDuUnFfk0ml8OukAe/vFSAmkFdsWHuuggUEIcTeExYN5AgUIEF7P9MuW8W9oZQV21axdrplAAUV36IgwJKBJWAtG2hbQRQtAA9Iy6LtHPDpIm5UA4hWcDsrHan57GGxnljGWgskBGwiWLkBIaLVBeADFOluKOWMD/QHbPnP+N//t/8Fgg0BRfvuuADcECFA1d7hrTSAEpoQtgpQOiAuBzTKIFoglCAhIqeE+/c/Yb+uWJ7OON7egnIEYsCpnG2eNnU6pVs/KSu250dwrcqwKBXPzyc8Pz+BrKfWWz5cNK9uDevzUODXYLEBzYyuNLBNAXFklK16W1mrdTrdQ5NakaZjwJoZz8ooxYLVoGMpWSrcaAmx7S/A2TPqoBnCQGVWeuh0rtRRjf3uzrgj3qRj+tw8jmr5QIm9MnLNsvDXaHnQoObh4UGreLvU9TdcWwAYgkr+HOdz59R0chSe3GkQhpG+pDd71eMiqCRXcf4YHL1OVjr4gAmpn5IC0Oh79VBg2D4CLhw4o7QKSh60MEJHwjXQAsime4TJGbI5Jg/0xrPVv5UJUy0Imlt1PmUrPTj1pPTa1nrA6T97kUjZenaKv+lHzAmXgxUd8AquxD+e6dzH658xa44APq4uXVTwAGC5ajvx3/OEdAZdvLLun+X7zIPr+TUnIP7f1/ok/u8ejFfqQfc18OHBB2ABmQU7jBlcaV3zx589xJLaTa8xJdWGacI6OlVv/gLk6n3ANN7Hg6g54J+fje8Pf0a1VgU+SKu5Rv2zNR0gFNjp2DCWGoNJR8j6Z/ha5JxxOp06WKTf03YFAdlIX33GgdQWsweRV3uTmSF1BMV+Hw5+DBByMG/8mdcJsPD3nKtrOjo2X5wbtxv+mpMl/73OErF9KB2gnateBuiwJqB6P24vQwdfKARr/bOihP6Ars0MxNka11b7+5zP517xd5bDvK8v4505ltEKpurFq5ZFA/fnZqusNifo9AInEQRSYXJuooUQzMCv2qMYtHUUoA5E+rWlrCNVq1WKmVmnkKTBYGjNx3SjB+zePpVSws3NDXb7BYfjDiKMdT1be6Ve07qpXsK6CU4nnf6Sk06JEwTs98deHdd1rZAK3C2L7fhggBMACahtw1rP2Gzs5Qx+7A1YmW2fJ6bStIKr2jfKjvN2rGgMC7fHy7KgbBuenp+QMmG/KBgRYkCtCngrQLHD/cMj3v70Z+wPBxwOhwmc0faazz77DC9evMD79+/x0w8/YdsKUkxIZo9NpR21FZSq02gEg8E2WG/Aum0IElFaVRlUsbM/gQpzgj+fLX+/SNHGQLuGjzJDmBkMICa3NP77DSFoMW9mW8yAtPsUZyX5z1QWm6ADUMpwo+XJoibaqu/mfpYrgyIu7sPP/GzbZj+hcZOBi0QXRdTeSjfFVr3NNn66fW32wT1uMHBDfUnsPt7bGeczH2Psz2K2nxd/s0BoElrFGBmaTQfGvd51XubPT0fimi2XMQ1LC7H6P22jNXndGDqTY/apGiu7QHQYMZoBNb4jlpwh4toggrrWbr/cPuvzVU0pV4Vmln6t7Il9sMS9F+U8znLf463JCoJ0do7FpnPs1e2qTcGzt+u6edc+7KO984k4VL82nrnHEdc2nJsWvvx/4/rDxf4dttyLe637zK7dEcgkAAhzkfL69csBMLT8D/OxPfhRg0Wz/9IkhvRnyJEz+x19ID2m0V+x4Kmzxa5e1yDFxe99YlGvf+9TIMdHtzcd2usDPL/fzz6en7kGfV7RHsdAwlpTcTWJhjSyHUSrFkXScUEhRJTVZ2wrM6I5Sh00+VRxH6NfRmvn6MGBMTJi0nWxqklMRv8MFTkBKe1Rq+Dd2we8e/cO5Vx6VS1EQGnL6lAZwKkJqnfwOjCDAIRgGkhKg3cDJiJIoSBDZ7C3Uk1ngQzR1JnTFYCEAEpJJ4i0hFYTxCoKRBXb23eg8xnv/vw1IBWBGiIxcjCl30AANxyPN3j54kZnVVPC/niHkHbYKiCUEPMOiAue1w0PHz6gfHiPd3/I+EOqSIcDJEVUAh7PZ1DSGfdk1VRnSkhtaGVFqxVoKi5Xa0VZN4BCH4nbanUegbItmlPy3KgyBApK6B4oNinCDSbAnNCYjALebDa8BlIaXHhCI6oPARX7C8LgXpXUgLhTxmJQgR7YGDkDk0ga2lWV0fv2ddEnipqojvK6Frj4pb+8fUMTzOFg++gvGiJ0c9K8rspMefHihVJnzWlFS+DWsqkIItAd2ZjWoYi0ggae0MOAPC8NjHM7Amn/czU9xFqDeuWt30/8GRvhFWSttoegzlmdW1Kb8KmkqwdJM/ihAZy2fWhFMyZ0R1X71Io5wVAhXB1ZKzZaeQAatTXtw4X0sclzctuajT/rrURhUNmvgrNxz5c2lDzBBMyRqx4GYVRlPPkCLDCBCpWCcEGrHsHGNH0Do5LWk66LNRjrOwey/j4e9PmeyTn3irSPmZz7cEd1QrUXWJxtZEEGoABUiGi1qa21Vj5vfYgxTYHzJcWZSBMD12wZei+q9dIKgEnETcRbxUxDw3wFUTDaN/pZCnZ2/N5CDKCowWITE9RlwS6PsbHjHI0Rwb5fl0VF8nQ6RASFqP3AW0ELVUWRLWGY18CrNsuSABK0psDcAL1Svwd9TdUkIq3yalaqdFxWYO2ilULrluq7hnjG+FsIkDFJQYF2B8f0/HC7ZFj4nnJGje87v685qZ2LJP63X98MzPh/c9s0DPRA3IJmsYqgiqIGSxoAgY5t1fs39owMfaKuJGbMjYqxTzyQ9bM3M4U8yZmTrpwS1qrswEQRMSR9hDyxdKqAg4pMEumatMaIlugVm3AVyEYCl9qveZzTKeHx9ZvPryVKMUWs5js0fhIUqrqHuSG2CmevzX3/MAYPpYicCMt+BwoC5ltwK6hlw+n0jPCsbNiyKftxWwvOpxMghGV3gxgXm+DCaFxsopuyIyAeayVQSIhh0akNeWfrEUFRRwvXtn0yJo2RkKO3UCkjs7FNNzHfK6TttzFGpJCxX/YQYdw/vMd5fcb94wN29YDD4WjnV8BckVPGYbeglQ1cNpRASDv1Ra0aOLFn7HYLbm5uUF4WPNw/YNsKBEBKiwpDo4FFYzaQttQgUN+dKQSIsUUQAihHxCXD+/CBS0D4GjzrrYaloKFakmTxrp1bZ2yEqM9Uuj4TdMIRho+a2RwDjMAFqw4QoAg2K9wp4DaE6L1Iooyu0Jk0CiDLBXPgAhC+usfh1y8TPpHhM/33nEXlCXMIsU8Puk48ZwDp8vdCByj8PLj+yGD1jcKQnmkT2DV2pDABUf3Hum4IQZlh3JTBJGBQiLDc3e5T1FeZvffWJ9d7qqWhlM2Eky9H3Pr9X9vSOdck03BpIpgb7DXXvGQ49cS8ASkO/bJLMELjInIwYYq/MPnRZiwqCoRWjDFDxoL3dRZBCIAE95dRi8kENPGpOMoSAVF/Zs6YGBNpPp1P+rMKARd7xe2o/4wDRSJqm/xeW62oPDSuYkygmLT1jKdc2XIzK/OBSEEqoQYwwGRAtgDy/w8AQzr4AGCiGOESdSD/0ala7d/qO3x+2ynoxSVV5npTfwpkmF/XwYP/e04Uxsb9GAz517z3z70+dZ/UwZrLlpd+v/5vR8zs+hozcshgq2b55osxG5MhdCDJVbzJVMyZAArp4vkBQArJj1nXzQgxALSBUsHzOWI9F7z/6QMeHx5BEhDJ1WlXtFpApLOoJQRsyKB86A4gurEvamxbbaZ4G7t2ROSKfQyIuwRZtMdfx3X5tooorSHmHZb9HinuVJRKGmqryHlBXiLe/k3G85t7/Pv/4j8qDa8UkAj2uwWH3V570FHx8PwIEmCX9zjs9VofH59R13uct4JTa0jLDpECUn0CTiuefnqHH3ffIOwyWgioIWLlCiZSsMhGSAkPpWGwzoPnxvDGWG6MFCIkKPLajGWhVWlGWNQx6+5oWs3hBoK2TNRWAKkaLUIBqtYyKkezdgxAqeHC1dTq1dyA0WnJ1YJHEQEFZw2MswBmMKr1uVIXJGKZkzxN1GaxTQcwusOR0Qc+7/+L8xy1FWKbepr7+ZnOktPgbo5H3NwcsdsvKOuquhAxdqFGwCoIKVuSOc6f7n91MP38hCFkJ9PPXie8bnPU2Y1kbq4azSJYH78IF4o3V0khmROezycAlKa/e13R6XRvA81UfNW0SxqbtojTjAEKLsZY9fqFOmNjyYuJ8zaQJS1e9ZgRf2Vq0PQsP10F8HuY2w3m5CimCKkGeLRp/CYGM2F+/wEAfULUTaQHQ74+3obhDAr/XGYFDavIoNTaWnqwppNsFBTxyv/cQ7yu68X7OvgmrY5oDRrcVNEzvt/vleqOoUcwg3/D/uuz9OvXIHLsBw/ya5Pek6uBeeu+0v0Ft4YAp7mqvYmLjr7cHHiLEbX4pCnpBYiesF6VDq797jXLxtspiMhsofcTD+bB3Iah+1bpxTqW00BbcXBWrAVGegWRSDoIKaI+DAZSaJtcu9izLigtfc9GVK4Gjg6Q0Jllvc3OgxY/uhjtPdu29XUclc3LKqvvkVlnZo4n5lGH/lx9z5e12rhQIAS1nylHlFpRaumFIPbgVxhV1nGhfs3RJpcYs8NV5/t+A3o712DHjXaRORka6+1r1ABE05RS95OSJSWl9vjGRd9SSmDbw9pu7cCsafjoCVfGVPLpDAZ0XtyUg7LosUsMUUWooPocvo+7EKEVelRY/DJx9HVUUFpjp5z0j15bMFE+2FlXUe3TaUWtFff393h6fkAICiLtjwfsD3u8e3eC6p9k5HzAshzAUYHr3T4h2xoGIhTRUcqn87mDuU5VP+wX7PYZMfgUjYatrjiXTVmxZcPpdFI/L0AKmpimmLDbH9BIUM5br/S6nTudTp0F++b1awgYDw9PePzwiGWfsSw7FGz48P49grUDv3r1GWKIeHh41Pcj6BoGArcNlAJCzghmX0IIYGFstSCkgKb4hYmwV+S4XOy9CyCWBnh+ATg0r94Xm6ygRayRfBOCzlFVv+ex7mRT50R99lEOUDtzZ7c76Hk0MV6WCjKNOdehUzBAdemEGYwEFm1fnNmC/lkj2ZzaIEWAJV/Y3lZ9zK6DD+NeAnmr1eVe8ec0Pze/xmFz9STNk5OWZcGyLB2kX9e1F2eUVabtFf18GzgE4c7oiqSxpEQVj5RWkfJiNW6zz860sUTXx89yL6YQLtqLxZhkwhqDOoBhiXS3AWb2BLhoQQGAPAlNX+aVyrRTsHE8x16oIoKQAMHj1wALqlQYdxZ/n+yJ2/SAocFEEQCL+WZjnpoGWJOG1qxAxHNb9Og6uM49L/YORvx1rWMybOb4u8eR7F9XmxQRzJ9UtMqoQf3SsuyHH8SQHIgw30saS1K0QpnOSELvF/rE6xcDYMzhjW/ST70MxOo0Wf95//saVZv/dkrVbNT8Z2fDd73IbjT+NSDDSMDG1/5V9/+vBDA+BaLMVGf/cBKl0Y6j6Wicfq9xAcDdQfcnS6N3C/pbxkyIJoZKvYo11oDQrE2AJmNPFMChgXEGCChbw2ktEGR1ZKKHcLfc4Phqh91ODXja7yB5h1IH5W9JapRbqQikve67ndIvt23Tr3PBzWHBy5cvgQQ8ryc8nU46Eqk0pLQDM3BzuNXpBGmHV58dADzjw/17lFpxuDkgfnGHt3cNv/7rX+Htn9/h+5/eY0kZbz77Eq/uXuJp3fD7b/8FX3/7DaRVvLy7w+uXL4Fa8MN33+L0/KRIegi4e3GHm5sj9qHgJMDzWfDhvgCZUSBoMQAx9pFNwtCxdqSHmkJDlRXiVV3R74OARsFmJiu/ookKfIIEkR391QCRhSFcO5rbWgGbqBwgYNGoq7EjhAwStmC1jt5K0epBtHdqlVHYWzk0SBao0Qx0hUCbSKoqL88VCzO0k5LzAFbsj2Ob0xmbz4QmgYRaL9Xk/fc9mBuJacTN8aYHGKVW5JhGYnrRi04oZVQOfc/P580OyziXAR0wnX9nBmD8HuagygMIn7bwc3ZhBm6uQUtNaD/VRuN/j55nPex6pkdv52gxSCl3rRvdK+4QW/8cpb36delYMA9GIUoLBEsHGPyaZhsOc2azbb4GdQZrZDzTYIktpucwgx6+N2aH3AM9fGxXZ2qwf80Dv70FI/0eQuhRXGsNdZsrD9Gc9tIr6rNmxV+qgijtdCjLeyAzWj3k4n3cd+U0aMu9L5asba9ufS8DzjZpKBtjt9vbiDqxCQStj3INIA2YjEXggeO83/Q/pvsOGrB5MLYsiwLtMgAzD/Kd8eLPy8cSeqXIdXcIwH7ZIS0ZAhNy1Rv0jdf/Pq8rBA3WzW/PQAPSJe+t3a5pshDJNDa0Bcnti1Oq/Xr1FnWPKgNDGRa1A0dTzzP085hHe5snDYECELkHqHNy39tXwtBZmBkaM9A2/5knuPTn1hq2soGia5JoQBlcvJdsTCx5xY9R2Pr1S+0aIp3JFQIoqh7Uea1oVfW0fEQekVxYRL9eIurCl/O9MWvRoAe9UdlfbGPaHaSloDVyzfGCijyGpMKkrNNTQlTwUEzsEqZPpYr2aoMIBJqSLz2/sfuGWlUMW4HHHWJMKLT15NJHY4O0/75w6yCOv/rUJvOhIaieVwgJh8MtdrtD13oACFyVsXQ+byhVsG4F5/NJtaq4osqG59MDctZJCzFktB1Qq8CLTEtJWHKCMOvI0EWfZbO1jOKxcMN5VaAk0WJnFGhcsJmGVUxJR0wLgZro5LLzihOfQIu2u+6ON4hRx4EXG5N9PBywbasWOUJAjgG3xz3Spq1mdVshMSLuAkLSCR8MxnLY42XK2IqKj8aQsOwzDjgipYRdXHD/9j3e/vQWCGdN+EMAk+Y0KWfcvrjD52/eILWE89MZp9Op+9BZA+gaVNNzrQw+1bpSPaeoY3osaScTgQ9AsgKMva5t9zVgNwMbtVYgElJaEEJC3Yo+Kzt7XqRzRhhAiCkgGWjqRZFrvzGDC/6ZgQgpeVsMwKxMahEtepGgV/qVpRRs4tCn/eu13QEGcO5thbNd95f/zMwmUx9GEImIsSIEA4JYgd+kZX/TzgrYxx0aG2gapxgjODDhz5lHTmI6P4GithKG4asaNxM4rVMrIk35ylR4658gIDYMl66AIveDIKh2j+ZK+hg856IOYIjABLortq1gvywKLKeIwIMFyhZrD+Bo3ncaz2+lXrB9iLLlzNoKjBCs9VJjNdeHuWb2jvYTHntVf932mO+7S/YP83hmKkKr9jGliBTV/zS0/nUIoZzXaV8NNrK2jSjIoS2j2jqKMD7v516/GADD6cDdMV/QZtApq/1WrsALf83VnI/BjEsDMP/9qQc1H+D5/a8/7xq9cqd4QSL5NwIUf+k131ew8s+coBlUaZtdjQKJdFEUTxBdtGwkQdwp/vNniQQAVVsniMAmlMP9WoMCHUGdtX62BfiRIFFpjqVWlGKtAEKIFEESsd8d8eLFa2VfoOJ42CMdM/787ieEIPj89Uvc3dzi/PyM9+/e4enxEbeffYYvPn+FSIQPHz7gYX1GEEGmiMN+D0mEH97+hK+/+0ZFuAQ4Hu9wWA7Y7w5YHwsCTnh5t0fOGXVteH//AaCsFDZu+OGH7/D7f/5nfP3Hr/H5q8/w+etbHPcB9/cf8O0f/m/klHH34haP9w/447u3eHX3AhQSDjcv8cWvfoW7ly9w8+IFmgi++/Y7tMd3eG4nxPUDIBFFmgbh5nAgAFkfdwTQ6tF6KQAAIABJREFUYoaQBpbB1jhqFg8CsDVTIEcA2VjLJoKYAsrJ+oAFhmLavhSvEIhSz2QSb4VW1IV1okEgmwYyGWxhJeGSMVu42uhWgg0i0fYTTR4N2KBRORVDWT2B0b1m56bN1Dv+GCKYzpOfF3Veoyp70T7yiXPl6PJ+v8fxeISIKqhDBlDplQMdK6ZJkPctevW85/64ev+LM2wU/3kKiDk0R/0pDIbANXjahQGvmBTuGD8FwmqyQf2szwBA5UsdD/33lTr0BPqEEBCtUuKglNLgWwdrYkp9PQGr7JMKchHQdSqc6SXGookTGOBr53c+kpzLa5uF2eZr1eq8V4BJhf5ixPl8/sieqlCf2sg5OZz/zJTgXnkl6lM/5sqXv/+sc+DvOwtjXuou6H15YnctihjM/8204TlQ9bXxRNW/f62x4Z/vbCd///ls6DP0YJvtjPOFoOXwn7qvyIPSNoKfYiwL99fsbAXAzgD18+v+tgMv05hav25PQpaUwaSVsBiiAmHMo4I27RkBUFltIgXpjCoiHe3LbJ8FBtVyCSJZVXTaYKYHMmIGb4tyECO0AdSLTKwJXIqtilzaIcLYI76uc5xxvf/nKuu8dv5y6vf1qMPGjJwsKbGz6yPrfG00z/ezaMlv0OR+PqM6knQSApym+xA0PqPpvM42zZ/fXEVWEcMGilpBTMnBBWd3qWiutr/IoJDTKG05IKRrgP48ITo+PNiktGpJYJyuJ0zniYhszOolyB1i7Ocdoi1JsHsWrr09rVb9d2wNlQUJi11bhDRNJEJMWPKik9IsZgvwscgCASkD4nzCuj1hK2es5YytrDivrOPLERDTCTkdNWELwLEd0XZLP08qbDvYSQqCRggrYLZtGxo0mWvCqG1DaRVxUe0nZRzqyFQUHVe8bQXnsoErINh6y86SEnY5Q7gpfT5qe1lZCwIpsLGWDY+PT/ZcybCpgNrYGDJJx/mGgJvbF/j8i9f48q+/UHChMr79w5/w/t07PD8qsNNFgQEcjgf86q++wt/97h9wwAGn+ye8e/cO79+/76wQYGgNzXsxBmvVmIoHaneaJqHe4mD20M+HnwN/v5k9d8kwHC2QynoWZBMHDzEiddaD2h6QapK0tSE7S08iEC71NGabOQPY3sKlZK8pD6HQfY8IkGrr8ZFO82KIFGVD4+OK/HW+dPl1BQpnezWPI3Y9sZxzB/CdIcsMG32tUxGVddKsUOZFFRP0DQGnbbASCeJhVI/BPMbV9qiRBzqA4T6l62VN01bcJrmOWI/pvPxr931eV4VVzeY54+xT4I4C19Svr18lows6l7Jg2wpiLJ2p4fuF4KPBA5iHEK1rE3qhTvrdzwUgXBRaYoxdZNRjGn/5Hpo1iy4KPUCP5ce+GoD8fP8srNqA9ggDabuXs5HX8zpiPFIGo8sWRJg2lj9+UlDIgdqfe/1iAAzH3D2ZcjflTtBBDN84Pl7JE/fJq+mNX7FO1AldH+6P20f0LQZwMQdJ4+fcURPmAOXifWS81//nvV8lWT/3M/P3++Yhn08/EhLABJoAU4u2edPTJvaRlHrxo9LI7OJiU2Dg4JFV4sg+Z07UAgIgoyVFBHZoEhAWCBKYA0qtYInI+QYpRmzbispHNNxhK89ohbE7RoTGOD08Yok7vHr5Ercvjnj88CN++vEbPDyecdztQCxIGSDW6SO1CJ4o4HDekI4LTo3BiHj54hU+e/MG+90eKei0kD/+4Q94/+M7LCngs8/ucHqqOD1seHETEbDD+bzim++/x8PTPfYHwuEQ0NozHk+Mx+e3iHLCV69f4asvv8TX/1Lx3ff3aHWBUEBhwrvnMx4YeBWPOBwP4N0BJb3DQ71HPVUstIMEQeEKLprER0DZFaxqwwEBoIhmgXig0AEOX2fVaSAEjhaUALElcJn61tgS1V4xIguaYD2gumHFxtf6RAoONsZ1YlLU2kDeesJAaQKG9/OxtZsUFawK0pOQGFM/NyyCYBTxOcnryYlor7VXHhTF9vNvFXc7d743uSnoUotVbB0k+BkA43A4dFG/83rWRMkc3Hk928QASzCMGugV5otkQmhSL6duhrqHtdF9mus5sDnOcoy5C211Z0ODPeBJwpxMiNFRum28uj8tEFvQZUGt2Jn1SSSAU7gHgyvFCKZLNlprdTx/Gb/rWgoqpEedTko0Bz1j/VLU51C3OuwrTQkvtFJAYdBU5zaBOcG7tte6o8l6lVuvGqeYOjVeRFBbMcqiAq4aYBJiHOA2MyNlbYlY182ALEFe8uCvENk4aD09tWmHdtrvEFxhXrRsczYgTH/vsnf2U/YcsCq6PmW9pzpV6tHxaVsftr0ZDWCySmKMcHG6aALBeiZg5CYCRAWUm7VLpBSQU0aFViVF7JkHArFWsFMAhBu2WiC2t5i1/SsbFba3UZkX96BPTdskqIoRMK/rOgJzssqjPfFeBTdQxJNIctCD7PyJ2sMQQgdN9TmpeHBrrmkSLIlW4ckYI2KO1nEnXT9BwUW1Mx4cihcMgifvSgNnYxgpoKz35X5UbKys2rAhZqzVfh9pN+xLNy0TqMM+UxOXidgcw8y9/5pcZbRWDPwewbx/v7FWyK/ZMYTYVfc1v1LfoZ/DqvUgRoXGsEOCkSD4fr6uRnuS5z8jrIB76GtswAqhr5NwtWqi7q3KGwg68tRvye2DyGD+ePua9lCPJGs+f77/ckpAI9RWeyuPiDL/YHGnArn6gcuydHu8FZ3WRVapLJsD3RkijG2rKLJhWTJSdN2AhEgGNgkjpIBln3C8PaDWWzTe0LiChfH8fMbT0wlPT88oW0XZHvtZOp0fcTgcICw4HvfYLUvXchJhZaYGQjL/RFBARSxhIERIG+yu1nTaGQBQM/sjgv3xCAnWxtMawKonxABO5zNSCDbK2OIMIsAmpuRlQasN21pQKyMtOlmutoLz+YxtK8i7HV68vMNf/+bXePPVG+QYkcOCl7evUArj7uYVPtx/wFY3VC7YpOKzz1/hzevP8eb1G3xx9xpowOP9A77+0zf405/+hPfv3/e2qrnI4XtEjF0Rzd4yq35ARACFhAa1awOkVKBpQGgj5vfk/VqrIpBrWhD6JAaggxKlFJsOBJ3ishXUomPd8wIFuSB2BpVpoKN5dV83E7BUO5aQ82WLHTAA0BRTLzSOSvoGQFBLMXtmOjEd3B/2ZgYihWFjVAdrcZxDKPBA4/wTubaR7qFSKs6rTupzW51zRjJh9FobaikIAX1YgJpnFTcVDAF61YcBlFkIjW3tOrWopnFgAEYR1yba+TX3fE9Xtftq/QE10NdjzXvBHRq36+85gKH+uOuRBAfZDShlsUktJ7M/y2SXRpyjwIXHQda1RprTxQk0b1W1ejqIlqKCpsui4GtpwxcaqKL2lyETgDPb6hjDtL9bt8dzAc1BGo0B3BZbrBNCB21EBPFm6VMPlczmHQIAs8fLuv46XtXi57+QF/9iAAyvtwoAUEDwIAIYJkOmezGqFdnPu6idCp0lFQMyRK9vIrIHZbShYYeGyF5wUAKeCFhiJoM2DUyCazYe1OlIXn3xg9/v74rVAFyCHh31/wR7BBiB3jVlXABT1tYb7OOF+maw62zKriA/BU7x1TeyNFbvxYNgigQyw9s3m4jOKAZG9Zi8Gon+jHTTC0QKQCtIFtRzQWsnIB4htMcWCCUJyu4FzpRQ2wrICU/PFe3hCbkRvvrs17i5e4MT3aPJI3JuyPs9cr4Ft4zdTcDt3RFrKzg9rGBErBJQsKCkI272n+Ovbz/H6zd/hZgiEgU8tRNW2fDw9BO++YZwWl9jiRX7KEjbDrUxUt7hyy//Fnd3L/D89l8QWwRqwrJfQHsGJ8bWVtRyRqQGas/Y724QeI+n+4Jy+h6JI378zz/gxc0er15kZGI8rgUSV+Nosa4X68gxMWTZ4SiWpvoRIaBV76W2cwBou0gzI1yqBlpCaMGmBHRVYt3LfQ8SQNZ2EkQD1MZFQQM4ggtI1Urs3O8cQCqoWVZr+dC9tZVNARQL4gHBVjfsdjvs93vrf0wALMkqQ1lat9UlA0oANKOpeQAeo/SgDJZUk6h40fp8QqkV63ZG3VScK8hwBFtlS6S0CvT0dBqfRypetrWK9XzGeV2BJtjlBTkl1LqpHWVdEz1yitaLBTH6PZ4Q+NDtDQsQrQWqBz/urGy1x60PEKS1hqMpvDMztlLUHgal0UIYcUqKtT1S5fh8/rgAqhcjYgK02j7CXEEExKA9sI76zxX/lBIohj5XPoQM5gppqvBdqsrshuBgk4DbqnzvEHplOFGAkAoBNi66D4TAjbGkDFBArStAGhyvVXvNxzQNt4P2zCzJFOi4UNWEGEwXbjomWPU4FNjSAE/3dG1VxzlTNCYSIWerQLQNpZzRGqEZsBLigv3+FufzE1JUUOh4OKAU7e/NKVllZUXOe6QloXDDxg1VGgQNS87IIaJsBUDAbtmDRGxtBaVp0Fqb0vOXrFObtm0DN8GSM4iCghkyQAISQk4LdnmPWtrQLbFAK0XVhmm1opaKFBNyUtHaKqJ7KsCAFxUJjiEjhIjzeUUICSFl1FJx3lbde8Jg0oRVqvqKtGQk09HYtk3HOuaElFUvYCvVgnEb2WsAJQUXF9WKtI6CNSYfqI/jIzujvdAh2u4SvA1AtKhBbHvegLZAwYIlwm6XDTATANozLM1iD/PXgQQhEtRUqRhaiAu46QhLUERrOo1qt9shUUar2mcOIUR4P7ueHdeZyPusdqpsGtwjagW8DGZMjIRq050ALUKwJQFlW0GitPndbgewBvizESULZIvRhHe7PULYXWh5eNDKzcY6RptM1hoSqYBj2SrI2jOE/Fo03F8WDbTBOoFCSkUjAKRMH0StHDIElRuW3Q6npycD4AxIEUEkQrCgvbaGtjWQTcIQQqfWayuStT6xYGsbWBi7Za/jFE03SYjApMyC0jbTqFB2B9wPBhPrbBbLkIpFxhBtWotVGjESL24MrpYgkU1ds974Jg1gwpIWIGbT/gF2+2wxV0FrFWVd0VrBuunI7BQDdru9itHGgGW3AGA01ikHS8qgoGNHmzCOuxd4ddewlYLVxrU+PT3jvJ5R1hPKegIgOD9n7Jcdlt0Ou2XpwHcIARvERmQXBBAOhwNC0ud6PB6BMFh3IoRidodZUGrBPpq+Qc6Iu707bU2yKOr4eWPVtMYK4CRV3Ir5gLwomKjjZRtC0DZWBVk3vPvpHtu6Yq0VNUS8/uw1bo8Jt6++wD/+V/8tfvvb3+Hh4R5lW3WfBcbhuMeLV3e4O9yAWsXT4xNOT89YcsLLF3d4enjA4/0j8m7X2wj9rFEkw3AJsWb1aR3QBwozNgNbUwjI0fcRIUTTYwCjVoaItufFYGfL28okmEZLAmrDVs3npmi0ebWjXiGPpGxnbsC6NWxbQYhANlvijWwqcBqNWSe9pZiEUaszD3RErYMm3MakKLGpGDFFLEHb+86n1VhtqgOiwAssHjTfzs0SYVHmBKKy6wTYVm17ijEgGxMwhKAtiRYzpbxHygm1qH1JCKitYiubFTEqWojqs+z8u3ZH1yW1eLSZbXatkl50hcY0pWq7CDdBBCEHtW36u6Y5Z+2OMIYDl6atv0H9SUoZOWb17RtbgYRRSNeRogN8jBSS6j2wa3IkMBcAzoJkkKj2BUkA2MAirmjbqn60x4Ght2GqzVbhTmZtcyMKCDEj0ILGZvNbtYktDsiY6DZUSFfyqnkb0xh8Yb5QRFDWFWU9q+21UcXS8+cB2PlCCMh8tBZhRQQxa2M5t6b2lJQFCXtOgXS/hKaMSP2aZR2BsFWdkBgi+oQsQLSt8GdevxgAo8MUnrg7oMGWVMFQcKuqan6uNWSr8UDMBHHjruSufYsCAgPycU9RBzOm12V1T3rJq1cgvB/YURXArsOVAfx9R+X6+n3nKkBHCz+BNM3I5qcqdwAgQSYAxx8H9SDAg//5s0c9p+fEBuoYowR6sNkcNyyRmPKv/ouexF0koP68oJRt0/VFoAomBiOgQbAF4NwEqxDSQtiezvjhhx+xLIK/ffN3+M0XfwPsj3go78A4I0bGq9dfgCmhVkaMO+yOeyzrGZEW5LjH8e4WZb+ghoDH+2d8/8j4+vs/4/NffY6/+vIL0CEgLRE5CQQVz+szJBUdM7oRWiEcjjf4u9/9e5yf3uFbPOLtt++wnhrCcsCLN1/gxU8n3D+uwHc/4PTwABHBq5e3uHv9G/zD8hrx+Igmz/i//o/v8Pz+J7xIOxBbn3n1EYS25sIITBPYqI5SXaQmXC4Gp4CaofqsATugibyvMpMmslWthL4fANe7CEF7iSFAVRwfzE0nNADd6bXWIHWMhQRgwe+o1pAIiFVDQiwpYh79nT3g7Z+v9zfT9y/2y7TfR4VDz1KKQyV8pgR2FLrpmDg2artEuTovw75oxUSrUzlHGwunwnYsLhCloGSz8bN6adGEqMY0A7bnniYkvwONfj+WJPk4xE6xblrVvQAmMY5rE8G6bReVDIXhg9pFEWSrGxC0n5ICGcBh1RN/ntTf3ao+41n0qpSMqq4G5AqGhRjNQpO1hSg60q6ErpSFI2D2CS2k1PymVlypiBUwympjZfKg+XqpXQ/WeqPVlEvVdZ0qo3a5WR8vYCwc0WcsjDGZR1iDNpsYk5JSV63MCwhZNYkhqBpYgxBIk8UYDipEt53go44jAYgR0RJeDxxBDHFQKkA1GyQYeKdgC1UBB9O8EVcP1wSxtKoMLFFwMdjeSFE1iIrtF62gqOgvIUKYsK4qsGfFbEv0uQd/iaIyrpgsgDCRUpIO3M/7YezVCJBPBfIJMwaqB/QRxKVWKNt+6ER01oS1FI6RnfZ5JF1JHhJM/I11okzQRFf3vIOROhGiszi6T9J1yTHBLKueEYo6os9AMO//1mea0ZyB5iBZYCAMAc1WYUAoIcbFQJtNA+UYwUbv94k6uhe1uiZV9R1STjbmXBMH/b9pPDms4lgFrek4TK2SSmdEppQBsb0bQ7dRvk7w82vPVsRbPhJ6fCT6VIQcMDFwwqjz2heuPoWE0dC039wYPRGjf16Y0YpONHONCglDeK01HdNca0MKWVsLIb1a130KKxAfEiFyU/X5EKw62iCs16gT0aDtGdIQCWBr61Pq8WAShRgVIAneykPYSoWUBhFtcfWRmZECyrbZBPohZErJRGsrW8ynCeqgehuwL9JtvAMla1VwXBNSE+aVBh9P3Gz0+zmcQETIS8J+lxEjkPLBKuwRtQqkNFDU6SY3R4CJbRTrGWXbUNYzHh8f8fDwgHXd8LhtoKenTt/fLXsDiaoVFoDj8YjKTVs37Hw5OVOTfGUrN+tBRyBjSmx9mlKMScGMkLDyBoSEFBfdj7Xq9A7SRIarirMHaHsPs45yJa6IkZASoWxnfPftE94/nvD7b77F52/e4M1nn+PueItD3pnWUQJEp9eBGXWtePrwiO35BK4FTw8PeHo6qcZAqdjvjri7ZTyenrv+kGuTcRNQilaR5z6SElBgo9SKahoLCioHLNbuUKuDASOm8VbtHq+Yd2VLznQfKoBFYYxwZjC0Q079f847tKhFwlbPCiqwgLxmYzoPPBU6g/nSHpLLqHrP2h/XOYaPEhURHJY9lOnROmvxfH6+YJLByi0C0rPHBLG1VUZiQq0Fz5uOURbMItkmcoqxz2KMQIGdR9Vq2riitcsYiUi1zfzFBhL5BDQflQqPXcAgF18FaWt5iMgxANJQhbA21SXRCUwCMEy8Vm2hOmNo7mLxdogJjdichcYpLQikit2TTVpqBoiwagOBqrsYbdk2xnsKAclBItG4wScucgMaKnx0iQM6Y5UBUAIRI0R9X7WFXggn+NhYL5p5ocLtlRYv1X6xGNNON7P6TGjrIXcQi40AMBiJHqdT0GxFRWEjYBOutYbovl7B62BnTNtLNHoOUUXBOwdGSmcWXaD0V69fDoAxrwvZF/pDwgjC7W9ncbvRgaD31zejk/eFAzrFuyf6Vx89B/H+mpGny3/DLtaTL0B5+kPIayRgf+GWJwBj/vtTr5mZcUHBxNyrrMjy+DkNLAiXn9P1RjB609Uaf/y5miiI7kTpN9tfbhQvE8+RkGrFmiGUenDlGzqmiNxbUbQn/Hxf8eOPP+A3v/4CL16+xO3tDT60DaUWLCnh9vYI5APqqht8WRYg7nE47FFQrBe+gaggJkFaFHH86q+/wsvXr7A/HvAkz2BUHA4L7l7cYWXCT2/fIxbByxtVPY8pgFEgVLA7HID4gMoBlRPycodf/80/4PHDM+5/fIunU8OLV2/wm7/5e+xvv8DKO+S7HdZzAuQ7cGPs90c8rwVcV7SNULMzaoYTnGEmB8LYRpoiBA2CWSzYsD1vf8j+0cRYASlMrSZa+XcmBYex3wHp/cinSeyqK1bX0VMvIr3i5T+n0zQNgHPKWHckflYvqf9i1zrvm2sAzL/me2wO/IoFzv7H6fXXAMh8vvyp6vuqA6yVrFKpEMC2bdi2rSf+/p4drIEpzMs4+8pKAUCjJeL6jI7XFfA42ZuZpulgw9ybe0njhJtHPZ/T28YYO9UX5pj7mTUn1cESwkQNl64z5C/mNhgd09p1cMOvG7MwmiqHQwRLyupITczJk2QNiqGJnVXM85KxtQqEgGCBwKU9nD5/MlSt1kHHrQWBIlJS9kub2tw0eRMVMAQZTVeF1ZTOqcm3yiwwuApySiqkawGbs8yItEKpdnPu7bf9UrWNwP+7r6l8fB6qUT/Fkwk7+T5al4027Boh3jLhmjgOyLmavvs5W+6LALa35kytRCIKCDWM0X9+5sjO9DzthB00IJjAojJiVGRYIKLJJJEG/8Up3DSU7sf5xGjXoOGbxSqsIaSu8aSWSveo2zGtNIZRifPnCun3N+jc4xxjuiffjypW3PTpW/Breb+OjKZovlQsiGeA26w3abRj/UIzpsyy7E1Uka2NjPwKL+xTazquWvUgklUvtXXCQYtWGqQ1FLuPanZhWZTW620Y1GMZT64tyCTq+4VisD7/S7vMLNjvd8q8JEDFPC0JAwbVnKZRoqJVzda0UkjWnqTPlhCWDOFgyZFXI+3z2tDmaqyTxUK0qtwE8ADaSqTEt8tRs9d9+35d/gohINRRKII9GzbNl9qqMYvszEGQEJHzgpgXbQ8h0nGANLSGksVOes4HwzFYAcGPZ4wEIp3A4G02Xo0nIjSu2LYTiICcN2Nn7BFjRsoR1cbvigy/sCwLUoxYbALBbrdDay6M23B/f99HWtba0Krut5QzKFYwbcjelha8MKejKFNQfatIuhdzSNjv9goptWZA6Rne8kR9jGLrdmZZMkJakCWhbjoaUZMnFSI/nU4Qqdgfdnhxd4vD/g6lCBAzVmGcH+/x/fMJP2qdHxHamqftLtVWjzsofdgliI2P9zifZYy23sxe513Cfr9HTNE0DFzvJJhQsQkJSkMiFZBk05PRMx6xNgWj7PRAt1T7aApPkCF+WEpByklBA89rBIgInfkwGOAKMsaUAPiEE9fDGdNHepWdRkzGBk56gjnraM2TzWT6vojAKx4M6TofbEKwo6VcxTGFnYUdUWoDS8WyZGWQVWVUiAiotX6dIoK66XQM0DR5zM4j3BYydyZv319XOYX7j5ntOmtPhRAQkXR9iJChLVTaah8QwECKEB8hrdk7iLXY0gCIaQGWVnRSjLWGRCvkKIPdCrNRJ9VFSth2RZ/zaox0Cp5ljZjN1krvz3M7jw98bSPYW+csMwh+/YFAlMDN4wvzSDzE6z039BgfBmoEA/qFGe68FPBigKxdyfZwmOLB6+K0a5u5aDfcj4mW1sjYSLU2qPhu1LOGkct6C08Tjc9CIFBICgyJmL7e6Fz41OuXA2BgTn4tgbOFCPDK3HiiA/kEFDxw5oAtGs1JDEy51sGLcSAuXh6g4frLmgyw/d0Blv596b9/naT8W+77I2bFdC3Xehzzz/v3uvI/MCF2FrOQAxn+Begzg91L/7dteGHr17X/tGM4gxxzgvFp4EWUbSENkZwBQ2hCvaqT8gFBEmIg7HJWAaOkE0qeT8/Y6mp9sIz1dEZZV0DOKKeCdXfA+bzi6fyI9x/eoW0FOWTIAlTZIUbG69cv8eXxNd78u9/icHsDAuP8VLHbLVhevMCbN2/wWICHD9+rknbQAK22DQ1nVFkRcoSEjMIBhRccb1/i7uUBX//hG3z/zTscXrzGf/hP/4BXn3+F7374gPunt0j3TzifP6CuK+5ub1XAS1YwF52uslFPRPTwmoAQ+XNmC+KsMiwygDYrWrvDREfbFZFmYhMPG2MNGcac8OqlV5owBPXKxRQQDHREF9v2wkgeYlAWgLThVLVPWYPjmFysavRpA8rwoAno8L10maQPB+uJXC0brnvoP7UXLwXvdAPP21PsXrwqAxC8h7WUapoBwyl6oKzxjgf6QzzUr4QBmyAznYn5fgykna8/2jz4LsIWdfSvTwpozAjTMxcRNLeFF89gMK46KGI9mOwYh7gTnQIB+1lNRMYXLn+G+lpg3nfzp1vyHS2hZG4wVRfbs4J5ETSpDWiWyMWcAFk1MBCfTvOxbfHbtrzWgpZRCbBSe/8o8miQAa98MOv4Sg0GEuAaLpYEErxCZn3ezNpWRN6jz3ium66f9ei6mGFtOglILAHWQAxWnTZ9jzj6rqtRYP2eVIcEPVnoY++CJsEhBKucBXiD/qig2/dImRJ+/3Ngp0uqbRopJYSYsForzAx2+M/7qwPoojR9T5CdCdMn1cCCMEoa5LBcjPTt6ydjP/TpLISLa41RdSl8hHLXIzCQJgZPkjXpdKamWHucMy50zYcwaE9kMQJhhoJhbhv8bIxrll7hcgaE9rxnS9odJtDkNUStSKakU1M8kXSWDvlzsjXRJNi1OQZoDNsHfn5H77or78+jDWfAxujlNEAzZ472m8Owm74+rTbkJffRq5q+Qek0AAAUfElEQVQIKkOErUVCbH10r7ElO8NdCKu4bwzaq1+t/1pBDT2jFIAcEhAFOqJdUBubyG4DhdirheqP5ja7ERt5q5t/bRbn8/UVERunzt0+jpHkQE4ZDOlJ04g9gWW3QytKxZ/tl1yshZ9hvdbYz41YbjaYeR5fekuNr5dXG7et4fn5hBQX5GWHFJPR8HWDhURdlwmWvByPN3jx4mVvBSyl4unp0SacrDg9n7GumyUYgrf3DwhPev7zopXp5JNg0oYcM3LKSHGxa4yo5lVCJESQgpu2kWpvHXFALSubMyRjwGkVO+ek45f3CRQOWLcTWFQMOIYMjirCm6OglROYT5AKBBEtHjAP5hG0RaAaoNHKGYf9AYfDDXJedKyltba9efMFzusZ63ru01lcoFdImTIxROgAHE3gKGYF7msFx6SYJgWzK/CQGe79hQUwH6AJoahvs5hJrI2jWUUdMBthoFGwVuLaGggq9NknCPHsEwdg5+CA27lq+jt5WfoBd+YoEbr+j+5f7owlZkYkFVMk7XKAF5lgdrHZhB+N54ICUiGCRcGhxg2qgalnn0UgJnrtGkY+6YdCRIq40P7S2BGdqabxrgmmmo0GOWcUI96czrn7Sm83S2ADMIIV2uD/h7F0MsIGT+7NtnFjtE0mnxSn9I5sLSKC+webTBSCj8Vuo8Bkm0YM3HR/5n5OGTwEwFs/lNEvom3L7n90X0dMFzLlfgPw0gzaPge6Fz1u8KltBlX04mMizcsYun9JtP2mTTnCNQihW4T6vufmeSMZaG+Fo2gghQNh3hYIZZK3xsoQEX3OKRpo34bO26devwwAIwPr/3y++BLNF00fwwK9CtfLhiNwn97Ef93+r02/M+p4HnhM//fRpwEToED+aeMd9FcHzek6Yfro0iYQpH/+X3hVupzJS/NBMnDCsRn+ivHwP973H+wJgF8++dUPg0A0NmF/W6LuOK9XgD5akXE5/SXo4/cMhrIDlQD6IyiSbeKAp0TIkVG2E8p6xtfpCT8tP+Gfjv8E2kWc6jO2h/daOaVvAQ7447LDPx12aFywlq0j2SkvkBiw1YbYgD+mHfLx/0S0kW9b3fD4dA9sG/50+B6MgOene0ipuD/+r8BXwG/+8Fucyj2+++FrnP78Fj/+9AHL/gh69QJf3h5xe5Pxw9sPeNoE/+F3f48vf/O3aCS4f3zE73//L3jevsF5e8DSXuNv//7v8ebzA3569wgRFfwqZerZZ3XgbugcNdVHXxBQu7YJVwUiei+aaA8/dwDDnJ33WFp1kc0Z+HtrdV0drBusEKOlAdDgaNovHdDwpTWveL21yfweEeF4OGK/24FAhiTr/bEwwtX+GRXAWUDSKo2mai386bFdnwL+xs98ukXsskKrlNGhvgzVIAihf3ag0TZChmZ/BFRgOGNPCISmFjFzjCOZI1P/HiCOV/JTSiomN4E6Wj33hNGAWVC/T5Cj7rg4tzTbL/LAxhO46VrbJdot9jlOxZara+nJj4MiHuSGiODAWV9PpUjOIqie1AHRaJjj2vzzgiXqmuSpgXMWgVcfHADMy6L70UAMdoo3tHqpib1+O8bcgzkFdl0ITPqeUMG0DGHVZiitIZAmKLU169WN1mojQPAReqKBgDFRgvXmigkUeqCcYxwMpqaVYJC2QUQaE0Z8TzVrJwgxdhZFf14Q7HaaTNfqo1apJ1PzpBMV41I6tRAQ2hjp6Un+HBxegGueiJldaSKqw2J7u1fzWQkRrBvCwFjXhjKGhydl0zXKhV2rqrnDzcYJ+kjPwT7RFlOt2nfWDpT66jZC9+YAZRyUdPAiUIC26maINAisZcz2TUoLmLWfm0jHbDIHG/02scocjIX/m7AZKKKspABYtZqC9P3me06ZRIJ1XeEtHiFohZBMvwEgZRpdgLQWHMuopAOqfRPsdxyIubSBlyNcHcBYtwIiBaCjadGgqoaWjx8cZ1X1TTQYdzBQK4QxLggUcDo9ahBrdlJpxtqrHixuKbX21rDCBSn6eR+2SPeNdCDG92ky8VgRFYH1sZmf8guzzQdpa0rOGVst6gctMWWxliiiTsef7f0sdnf9WQ4ozlFdrxZPQIevmwuue5VbBNi2Feu2Qfvp9ewL6R7Y7RZr4wjIeen+ZvY7y/JZBzNqqdi2ivP5jFOpuF8L1lJ0KtypgNCQCApkRNVOWLKOqCcQKETk4x4h69SASAFSq8YTBvqkoIWKWjfUWvD0VIGVVAW8ERJFRIS+p3a7hCVra4tIBCgrgLmesa6nYTfZQEgD92IwJips3GsMYI7aYtBtpjGm0oIcAlJacDgeUKqOqd221cTIFfSNZg/BgDQXxFzUr6SEEEQBjN7uaUkeBpvIY6VeaAwKmIvtO22lhWlkVNvMph8HgFhBDikN2vqmnyMO1hqTxAFW/bfa2B5LWCuFsAJNvif992ptcLbG9XnQ/MFiCoKxSVN/72LAfNeyCdoUHihg2e004TcdtxQvJ1qIxVox6EQoBoHEzr7ZHaLJXxoQ5AwAdp8h0zmUSwAEwCDNBdPcMoH1BCBYLCAXeZt0u+I4g3jyHgk5ZeRA2iJoejAA0NAc8TAmW1Ahfpvy5CLaGr55HAZrU0MHFrhVICtLlbrdVPZF2dw/pYvxrQpMbxAJEI49jo2R4G25bi/dJ6jGnbELRR+U6CbqfoB77JlMl0J9aJ+0YrmFbfIOSvn+6vtpsrV6BcNP1VpNs83iQI+ZA/XJa27fnYmUTDfv516/CACD/jMh//c66sgTceqOmBCnyoEexkmY01gVhGgiX5OztqpXV6y1TSKOigLDM1LfXZfXRgQfK+kBuh/wHrD0Q+AKrf1qxz1N7wcP+H2RSauRDhpc/Ky9nwZnAPomHIYLwUR3YgAlwtv/6S3u/oc73YQdwBjBvxsRgRqCGIIdEjvkwn30XXNjR7CpIlMCg1Gtn537RaBEbEZce+JqZRTZI+++RD7ukHYBdSPcHQNeHs9oz+9xe9iBloDHd8+4yy8Qvjji7foDyrfa73+4+wLrc0DCgs9e3aKFDe+f30FqRY4Ljp/dId7c4u3TM87fPkBOEXy4RTMK42EPHPkZb1LAr3/775Bf/wqP77/Hd3/4f3DYv8Jvf/f3WGjBD/df44/f/jPSmYC0AGmPh5PgdiU8nd/jtDXcffYGb776K0hMEGJ88as3qPWM0gS3t3+Hz46/wasXd/jw4UcQVUTSyhi3DTBj1ZrNPfZEtu8PBklBok2ruCLgYqrTraGU2h1ZE5j2AHoF1wNC8sCMbTRmJKCNACuQY3o8kl87H34eFRVGX2/gUqnaDkUXo1pSxsvbOyAGG5vFVjWWnux2gAzjPLjT+5TGRZxjdr+W+ZzKjBT7932vjjYdP7NE1IPfdd0A8T5bMcXsadxhiohBK1+uMt3ZI/ZnpjP2JGJK/B1tnwEMgibowbx1jEPTQDEf6p58sATCxTlznQIioPiztYVRQS694dYT/rF2KYWe+CnINVrCvJIUYrp4FoD0qrkGJYOd0VpDjNkAOYdJAygNh6d9ogHrVsAmCCpVrCeVAHAXj+JaujMm0soUm6NjZiyRAG6glHDY71XJvVYIESqPSo4mYmLmk5B3qrlgRQVzyDbRJ2hvaUpJRUYlI4SKUk8IBi61uiGaInxbbTyYVagDBU3ahYedllF5AbTSmLIJoYmglg1lK8ZKyz1JGgGKi95SB4Za0/5RbYmqoH2yvQCImPJ80p52EUIze+GjFWMg3D89gtkTUB3NGPNgArSqAsO1abLubTShn93LJDFQNNqnqH2za2YL8sn+5/3fMQTkRZOXKtp7HI1KzbUBUQNlB/aUiTJGzgpU0DRPQTMReltC91U0Amm3QX6mGIxEhJgX1HZGbWL+Hvrs7LHHGGzCA0AJYAm9jQPQ9r3ej00mfLnZqoUEitaHDkaCIBgrzoGEJWdtYyhF629WFba3U7CEYUw65Zw0FtykxYoDqt2SU4KzcDQpsDWK+kYugBsE1vrDCkxRQI83LUlxxlB/GhPgAeie7s86qECdi7Cq6K9YL7aKuRn/oScNIU0jJ23strTBwAqm8zIaf0fM5K9r0HsGWP3Zzn4hxWSaPsq+AMG0YACpFdX2V2PGed2MaTgAW2d5EBGCADlEq2DqU6rb1mPF/nMhIOUMTK1DIH3GrQq4lXFeicBmLkWo60sBQG0CPjec1jNyTLg5HHRMqghKWe3zfNpKUD2Vg49ibNgYeIGA+4cnnJ8fsZ0ecXp6xGk7oQRVcQsUsUuLJjpNzzGniHTMuL29w2G/Q84LSEN21G0zDQS13WxJOjdLWqGtBU/lAWsg5AiQLMhLwBIDSgNqY30OpSBBmQaLjXPlpv38MWZQiMbEIuQeMwlujgdEYpxPBc+nEyoz9nuNV7dyMuATNmq6YmtFVcKlQfqocGUsVBORFqXX9UJPNIFJcAUxq7aTpw9wm0H/b3v3F2NXVcVx/Pu7d+YWwYRSMURblBobTSUqhGCNxhAwULWhPhCswVgBY0xMRKMxVB6IDzwYjahRSQx/NQQ0FbUxQWmQRF9aBZsgUpGmKJQUWm2pBhI6c8/yYa87cxha68Txns3M75M0vWff086emXXWPWedvfeZeWpGeQpL+b0NBpNlpNJwNOS/KQtK05T1jZqyWPGyzNfNcEijHr1JMRj0iSiPVh22pvCW3zU5SkaoN6BBDHNaVvu8Y3TsjnLe3JsRWXHJaXTllKPXmz1X6Tdl8dCp0U2OXPxSKov2TkxOMDUsC74OCSYmcwpHHrJ9lekBjUoMD6eHSMO8qZhTGkbnczmVjFzvoxwjs1Ob28f06Hh8WbGy/Ed57dXPwsxsDhv0+jS9fLJJA2pKlimjBqbKz2EiC3Y9mD5apsgFZaRFk2sr9jVZCmASmig3PEqhPy/yYzrP7Uehmjfqoizc3URvZpRT05Rjr9fr0wxnH8M9+j2jhqmpozMjgkdrfpWfRS4XoNkbBTOXisoFN0vNYuYYJdeqa5qmLLrd65W83y/XSeU46M/chGsXcdu5d6qZnTo2c53QjHJle5RM+dqRv+8YXd/mOW4Z3VoKJ+UyI0eV9l76Ndv0n4ZnjIukg8DzwN+77ovZHKfjuLT6OC6tRo5Lq5Vj02rkuLQa1RSXb4yI185trKKAASDpwYg4r+t+mLU5Lq1GjkurkePSauXYtBo5Lq1Gr4S47J14FzMzMzMzMzOzbrmAYWZmZmZmZmbVq6mA8f2uO2B2DI5Lq5Hj0mrkuLRaOTatRo5Lq1H1cVnNGhhmZmZmZmZmZsdT0wgMMzMzMzMzM7Nj6ryAIWm9pMck7ZF0bdf9saVD0pmSHpD0qKQ/Sbom21dI2i7p8fz7tGyXpG9nrD4s6dxuvwNbzCT1Je2S9IvcXi1pZ8bfjyQNsn1Zbu/J98/qst+2uElaLmmrpD9L2i3p3c6Z1jVJn8/P8Uck3SXpJOdMGzdJt0o6IOmRVtu886Okzbn/45I2d/G92OJynNj8Wn6WPyzpp5KWt97bkrH5mKRLWu1VXLd3WsCQ1Ae+C3wAWAt8VNLaLvtkS8o08IWIWAusAz6T8XctcH9ErAHuz20ocbom/3wKuGn8XbYl5Bpgd2v7q8CNEfFm4DBwdbZfDRzO9htzP7P/l28Bv4yItwLvoMSoc6Z1RtJK4LPAeRFxNtAHNuGcaeN3O7B+Ttu88qOkFcD1wLuA84HrR0UPs//B7bw8NrcDZ0fE24G/AFsA8lpoE/C2/Dffy5tq1Vy3dz0C43xgT0TsjYijwN3Axo77ZEtEROyPiD/k639RTsRXUmLwjtztDuDD+Xoj8IModgDLJb1uzN22JUDSKuBDwM25LeBCYGvuMjcuR/G6Fbgo9zdbUJJOBd4H3AIQEUcj4jmcM617E8CrJE0AJwP7cc60MYuI3wCH5jTPNz9eAmyPiEMRcZhykTn3wtNsXo4VmxFxX0RM5+YOYFW+3gjcHREvRsQTwB7KNXs11+1dFzBWAk+1tvdlm9lY5RDSc4CdwBkRsT/fegY4I187Xm1cvgl8CWhy+zXAc60PmnbszcRlvn8k9zdbaKuBg8BtOb3pZkmn4JxpHYqIp4GvA09SChdHgIdwzrQ6zDc/Om9aF64C7s3X1cdm1wUMs85JejXwE+BzEfHP9ntRHtPjR/XY2EjaAByIiIe67ovZHBPAucBNEXEO8Dyzw6EB50wbvxxev5FSYHs9cAq+Y20Vcn60Gkm6jjKt/s6u+/Lf6rqA8TRwZmt7VbaZjYWkSUrx4s6IuCebnx0Nc86/D2S749XG4T3ApZL+ShmedyFl3YHlOTwaXhp7M3GZ758K/GOcHbYlYx+wLyJ25vZWSkHDOdO69H7giYg4GBFTwD2UPOqcaTWYb3503rSxkfQJYANwRRbY4BUQm10XMH4PrMmVogeUBUO2ddwnWyJyzustwO6I+EbrrW3AaNXnzcDPW+0fz5Wj1wFHWsMCzRZERGyJiFURcRYlJ/46Iq4AHgAuy93mxuUoXi/L/X2HxxZcRDwDPCXpLdl0EfAozpnWrSeBdZJOzs/1UVw6Z1oN5psffwVcLOm0HF10cbaZLShJ6ynTlS+NiBdab20DNuUTm1ZTFpr9HRVdt6vrnC3pg5T53n3g1oi4odMO2ZIh6b3Ab4E/MrvWwJcp62D8GHgD8Dfg8og4lCdG36EMTX0BuDIiHhx7x23JkHQB8MWI2CDpTZQRGSuAXcDHIuJFSScBP6Ss4XII2BQRe7vqsy1ukt5JWVx2AOwFrqTcDHHOtM5I+grwEcow6F3AJylzs50zbWwk3QVcAJwOPEt5msjPmGd+lHQV5XwU4IaIuG2c34ctPseJzS3AMmZHoO2IiE/n/tdR1sWYpkyxvzfbq7hu77yAYWZmZmZmZmZ2Il1PITEzMzMzMzMzOyEXMMzMzMzMzMysei5gmJmZmZmZmVn1XMAwMzMzMzMzs+q5gGFmZmZmZmZm1XMBw8zMzMzMzMyq5wKGmZmZmZmZmVXPBQwzMzMzMzMzq96/ASuk1UNdgPGFAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "cgSKHJobQpt6" + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/demo/demo.jpg b/PyTorch/NLP/Conformer-main/mmdetection/demo/demo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd613cee3bc13a3677908d7d6f1899e8278a4b47 GIT binary patch literal 259865 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

}o#T5;mrpPiDnHR1=3TN8jIm{q?jQy|(Bh0l zQ&Ym!cI=>^{+%*ez9u{1tN#GtH2(nkdG4Mm@DIb+jb-qkj%2uE`TH)VZRKn$jmIOn z$tR2eYnd7oL3GgGq*6qmG-U~LaNBnuPf_choY$V~UmgA&T3$zQCxi9hw}>MVkN8O- z464Y4rVWW3*>)Ul`L`&~APF>&+Hc{M(oLt2hg#v59kMZx#7O@DF72g@3qT1RmIEMT zjE-xzmlHx;;j4e(F#iDMp*-fj?e!|(_zge)UV1bFcDEaB;w*8A6~hzj_p^b)JRDSM zZ*3jhG9|!GfV%AYPxnA7FiFVo_+qnkzm7i(n%+;e=-2k_VMg+9JV639c{osm?BElQ zN$s2r*F$yj7vbfrf2P}B$GC#NcDDc$0(O7T4&_e=0fq?N7*}+2wIz7r>iyLJ0Qqq% zIIg$BSN{OOY5xH7@`SNKllf;)C8Q(=@|5g5eqG@F#B~SL9WXORnoDb_toA7s0uWuk zQUE*vH>(mCJRUQXo-0!K#Gei)iFG&AuQtHRmWxt~F&p04^W)y?^=wum1pm)BgbF z=WC+=(jO4KD{5@~J*#UvM5Z#UHkq$Y8aWCBF^#t?4uFOjBN-e4Se_#I`SB;kalMC( zEW9(XK+BE#--5K;i4dF}qII{8#yerN^J6@KG41tF3`=&;d*KaUHCe(&?X1SdnLykC z@;Jl%pmZfk;~d&sp9Lk#$i5rYWGL?2+g6N{4tU}o@f{*}5c@9q`9Po3Daa`Yu z^b1&?Y1_qu^;`neUIQetDCiuyr}NJ6Tvh7@jNN3;1HaiZAax($PPFQn+*8;2iPP*6XwZHHffAZlx;=Go)D*piZ z4L|-~cjXB05uy#k%mj}ECM&ku2=@gMI?Rh zbJL;vbLsci-wqn$NRNcIZ!&Z%8;xx|%#3nB(aHRI18;7JCT|P)7RL0>JT>A!v`-)r zy7-O*yme!PYug7qhx?|V_N{OF1grl5fW!X)mkaw=yZ-=~D*piZ4L|-~XM7orEzYeY zpf2VupeV=uw8Rv9q@ea2QzN_#)_R`2iNx5%`cFe?*Ndh&~-#Etv zuoc-1@^GQb@U_427=QBP-OKo$VdyB-!B^7%0Aic}0NsNh#hRU}d@R$n2buY_ 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�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 bUI~MB9Q7xjgpx2xH0oLV{zenLtbhO6P<=PJ literal 0 HcmV?d00001 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/resources/corruptions_sev_3.png b/PyTorch/NLP/Conformer-main/mmdetection/resources/corruptions_sev_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bbbd19a8d4c87677cb0cf64833a5eb1ce4b95e40 GIT binary patch literal 1401893 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ν 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

F)I1bQOjOxEcx%0(VyRPWA*@m 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 Z% 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

&1_ZB+U#cLyBZ$MHwR8cwMRt5Qm* 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

O1N9T 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

_fV0i%7)CL`0%LQ)2CK)E& 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

K*47zn80&E7IAQS+wG&?YT% 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

us&cJ-`ozKb!7V>Rx$O@< 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 z­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 literal 0 HcmV?d00001 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/resources/data_pipeline.png b/PyTorch/NLP/Conformer-main/mmdetection/resources/data_pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac3fee2bc62753681b2e42a9705dd7eefbee443 GIT binary patch literal 84111 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
^u{pzs&BHGjeMqwQaRgA#;xOii-ES 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,Nlm1C_D{d+uYU`BbHroLXXfhTcQ6-d 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 R_&ow%ZZ4k3E1d&V{|j|B--iGI literal 0 HcmV?d00001 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/resources/mmdet-logo.png b/PyTorch/NLP/Conformer-main/mmdetection/resources/mmdet-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b6fbdc4484b3100c75ca357e02389c4477e191 GIT binary patch literal 32836 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 literal 0 HcmV?d00001 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/setup.py b/PyTorch/NLP/Conformer-main/mmdetection/setup.py new file mode 100644 index 00000000..55eea6ba --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/setup.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python +import os +from setuptools import find_packages, setup + +import torch +from torch.utils.cpp_extension import (BuildExtension, CppExtension, + CUDAExtension) + + +def readme(): + with open('README.md', encoding='utf-8') as f: + content = f.read() + return content + + +version_file = 'mmdet/version.py' + + +def get_version(): + with open(version_file, 'r') as f: + exec(compile(f.read(), version_file, 'exec')) + return locals()['__version__'] + + +def make_cuda_ext(name, module, sources, sources_cuda=[]): + + define_macros = [] + extra_compile_args = {'cxx': []} + + if torch.cuda.is_available() or os.getenv('FORCE_CUDA', '0') == '1': + define_macros += [('WITH_CUDA', None)] + extension = CUDAExtension + extra_compile_args['nvcc'] = [ + '-D__CUDA_NO_HALF_OPERATORS__', + '-D__CUDA_NO_HALF_CONVERSIONS__', + '-D__CUDA_NO_HALF2_OPERATORS__', + ] + sources += sources_cuda + else: + print(f'Compiling {name} without CUDA') + extension = CppExtension + + return extension( + name=f'{module}.{name}', + sources=[os.path.join(*module.split('.'), p) for p in sources], + define_macros=define_macros, + extra_compile_args=extra_compile_args) + + +def parse_requirements(fname='requirements.txt', with_version=True): + """Parse the package dependencies listed in a requirements file but strips + specific versioning information. + + Args: + fname (str): path to requirements file + with_version (bool, default=False): if True include version specs + + Returns: + List[str]: list of requirements items + + CommandLine: + python -c "import setup; print(setup.parse_requirements())" + """ + import sys + from os.path import exists + import re + require_fpath = fname + + def parse_line(line): + """Parse information from a line in a requirements text file.""" + if line.startswith('-r '): + # Allow specifying requirements in other files + target = line.split(' ')[1] + for info in parse_require_file(target): + yield info + else: + info = {'line': line} + if line.startswith('-e '): + info['package'] = line.split('#egg=')[1] + elif '@git+' in line: + info['package'] = line + else: + # Remove versioning from the package + pat = '(' + '|'.join(['>=', '==', '>']) + ')' + parts = re.split(pat, line, maxsplit=1) + parts = [p.strip() for p in parts] + + info['package'] = parts[0] + if len(parts) > 1: + op, rest = parts[1:] + if ';' in rest: + # Handle platform specific dependencies + # http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies + version, platform_deps = map(str.strip, + rest.split(';')) + info['platform_deps'] = platform_deps + else: + version = rest # NOQA + info['version'] = (op, version) + yield info + + def parse_require_file(fpath): + with open(fpath, 'r') as f: + for line in f.readlines(): + line = line.strip() + if line and not line.startswith('#'): + for info in parse_line(line): + yield info + + def gen_packages_items(): + if exists(require_fpath): + for info in parse_require_file(require_fpath): + parts = [info['package']] + if with_version and 'version' in info: + parts.extend(info['version']) + if not sys.version.startswith('3.4'): + # apparently package_deps are broken in 3.4 + platform_deps = info.get('platform_deps') + if platform_deps is not None: + parts.append(';' + platform_deps) + item = ''.join(parts) + yield item + + packages = list(gen_packages_items()) + return packages + + +if __name__ == '__main__': + setup( + name='mmdet', + version=get_version(), + description='OpenMMLab Detection Toolbox and Benchmark', + long_description=readme(), + long_description_content_type='text/markdown', + author='OpenMMLab', + author_email='openmmlab@gmail.com', + keywords='computer vision, object detection', + url='https://github.com/open-mmlab/mmdetection', + packages=find_packages(exclude=('configs', 'tools', 'demo')), + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + ], + license='Apache License 2.0', + setup_requires=parse_requirements('requirements/build.txt'), + tests_require=parse_requirements('requirements/tests.txt'), + install_requires=parse_requirements('requirements/runtime.txt'), + extras_require={ + 'all': parse_requirements('requirements.txt'), + 'tests': parse_requirements('requirements/tests.txt'), + 'build': parse_requirements('requirements/build.txt'), + 'optional': parse_requirements('requirements/optional.txt'), + }, + ext_modules=[], + cmdclass={'build_ext': BuildExtension}, + zip_safe=False) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/async_benchmark.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/async_benchmark.py new file mode 100644 index 00000000..1f9eea94 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/async_benchmark.py @@ -0,0 +1,100 @@ +import asyncio +import os +import shutil +import urllib + +import mmcv +import torch + +from mmdet.apis import (async_inference_detector, inference_detector, + init_detector) +from mmdet.utils.contextmanagers import concurrent +from mmdet.utils.profiling import profile_time + + +async def main(): + """Benchmark between async and synchronous inference interfaces. + + Sample runs for 20 demo images on K80 GPU, model - mask_rcnn_r50_fpn_1x: + + async sync + + 7981.79 ms 9660.82 ms + 8074.52 ms 9660.94 ms + 7976.44 ms 9406.83 ms + + Async variant takes about 0.83-0.85 of the time of the synchronous + interface. + """ + project_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) + + config_file = os.path.join( + project_dir, 'configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py') + checkpoint_file = os.path.join( + project_dir, + 'checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth') + + if not os.path.exists(checkpoint_file): + url = ('http://download.openmmlab.com/mmdetection/v2.0' + '/mask_rcnn/mask_rcnn_r50_fpn_1x_coco' + '/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth') + print(f'Downloading {url} ...') + local_filename, _ = urllib.request.urlretrieve(url) + os.makedirs(os.path.dirname(checkpoint_file), exist_ok=True) + shutil.move(local_filename, checkpoint_file) + print(f'Saved as {checkpoint_file}') + else: + print(f'Using existing checkpoint {checkpoint_file}') + + device = 'cuda:0' + model = init_detector( + config_file, checkpoint=checkpoint_file, device=device) + + # queue is used for concurrent inference of multiple images + streamqueue = asyncio.Queue() + # queue size defines concurrency level + streamqueue_size = 4 + + for _ in range(streamqueue_size): + streamqueue.put_nowait(torch.cuda.Stream(device=device)) + + # test a single image and show the results + img = mmcv.imread(os.path.join(project_dir, 'demo/demo.jpg')) + + # warmup + await async_inference_detector(model, img) + + async def detect(img): + async with concurrent(streamqueue): + return await async_inference_detector(model, img) + + num_of_images = 20 + with profile_time('benchmark', 'async'): + tasks = [ + asyncio.create_task(detect(img)) for _ in range(num_of_images) + ] + async_results = await asyncio.gather(*tasks) + + with torch.cuda.stream(torch.cuda.default_stream()): + with profile_time('benchmark', 'sync'): + sync_results = [ + inference_detector(model, img) for _ in range(num_of_images) + ] + + result_dir = os.path.join(project_dir, 'demo') + model.show_result( + img, + async_results[0], + score_thr=0.5, + show=False, + out_file=os.path.join(result_dir, 'result_async.jpg')) + model.show_result( + img, + sync_results[0], + score_thr=0.5, + show=False, + out_file=os.path.join(result_dir, 'result_sync.jpg')) + + +if __name__ == '__main__': + asyncio.run(main()) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_anchor.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_anchor.py new file mode 100644 index 00000000..813852ea --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_anchor.py @@ -0,0 +1,410 @@ +""" +CommandLine: + pytest tests/test_anchor.py + xdoctest tests/test_anchor.py zero + +""" +import torch + + +def test_standard_anchor_generator(): + from mmdet.core.anchor import build_anchor_generator + anchor_generator_cfg = dict( + type='AnchorGenerator', + scales=[8], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8]) + + anchor_generator = build_anchor_generator(anchor_generator_cfg) + assert anchor_generator is not None + + +def test_strides(): + from mmdet.core import AnchorGenerator + # Square strides + self = AnchorGenerator([10], [1.], [1.], [10]) + anchors = self.grid_anchors([(2, 2)], device='cpu') + + expected_anchors = torch.tensor([[-5., -5., 5., 5.], [5., -5., 15., 5.], + [-5., 5., 5., 15.], [5., 5., 15., 15.]]) + + assert torch.equal(anchors[0], expected_anchors) + + # Different strides in x and y direction + self = AnchorGenerator([(10, 20)], [1.], [1.], [10]) + anchors = self.grid_anchors([(2, 2)], device='cpu') + + expected_anchors = torch.tensor([[-5., -5., 5., 5.], [5., -5., 15., 5.], + [-5., 15., 5., 25.], [5., 15., 15., 25.]]) + + assert torch.equal(anchors[0], expected_anchors) + + +def test_ssd_anchor_generator(): + from mmdet.core.anchor import build_anchor_generator + if torch.cuda.is_available(): + device = 'cuda' + else: + device = 'cpu' + + anchor_generator_cfg = dict( + type='SSDAnchorGenerator', + scale_major=False, + input_size=300, + basesize_ratio_range=(0.15, 0.9), + strides=[8, 16, 32, 64, 100, 300], + ratios=[[2], [2, 3], [2, 3], [2, 3], [2], [2]]) + + featmap_sizes = [(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)] + anchor_generator = build_anchor_generator(anchor_generator_cfg) + + # check base anchors + expected_base_anchors = [ + torch.Tensor([[-6.5000, -6.5000, 14.5000, 14.5000], + [-11.3704, -11.3704, 19.3704, 19.3704], + [-10.8492, -3.4246, 18.8492, 11.4246], + [-3.4246, -10.8492, 11.4246, 18.8492]]), + torch.Tensor([[-14.5000, -14.5000, 30.5000, 30.5000], + [-25.3729, -25.3729, 41.3729, 41.3729], + [-23.8198, -7.9099, 39.8198, 23.9099], + [-7.9099, -23.8198, 23.9099, 39.8198], + [-30.9711, -4.9904, 46.9711, 20.9904], + [-4.9904, -30.9711, 20.9904, 46.9711]]), + torch.Tensor([[-33.5000, -33.5000, 65.5000, 65.5000], + [-45.5366, -45.5366, 77.5366, 77.5366], + [-54.0036, -19.0018, 86.0036, 51.0018], + [-19.0018, -54.0036, 51.0018, 86.0036], + [-69.7365, -12.5788, 101.7365, 44.5788], + [-12.5788, -69.7365, 44.5788, 101.7365]]), + torch.Tensor([[-44.5000, -44.5000, 108.5000, 108.5000], + [-56.9817, -56.9817, 120.9817, 120.9817], + [-76.1873, -22.0937, 140.1873, 86.0937], + [-22.0937, -76.1873, 86.0937, 140.1873], + [-100.5019, -12.1673, 164.5019, 76.1673], + [-12.1673, -100.5019, 76.1673, 164.5019]]), + torch.Tensor([[-53.5000, -53.5000, 153.5000, 153.5000], + [-66.2185, -66.2185, 166.2185, 166.2185], + [-96.3711, -23.1855, 196.3711, 123.1855], + [-23.1855, -96.3711, 123.1855, 196.3711]]), + torch.Tensor([[19.5000, 19.5000, 280.5000, 280.5000], + [6.6342, 6.6342, 293.3658, 293.3658], + [-34.5549, 57.7226, 334.5549, 242.2774], + [57.7226, -34.5549, 242.2774, 334.5549]]), + ] + base_anchors = anchor_generator.base_anchors + for i, base_anchor in enumerate(base_anchors): + assert base_anchor.allclose(expected_base_anchors[i]) + + # check valid flags + expected_valid_pixels = [5776, 2166, 600, 150, 36, 4] + multi_level_valid_flags = anchor_generator.valid_flags( + featmap_sizes, (300, 300), device) + for i, single_level_valid_flag in enumerate(multi_level_valid_flags): + assert single_level_valid_flag.sum() == expected_valid_pixels[i] + + # check number of base anchors for each level + assert anchor_generator.num_base_anchors == [4, 6, 6, 6, 4, 4] + + # check anchor generation + anchors = anchor_generator.grid_anchors(featmap_sizes, device) + assert len(anchors) == 6 + + +def test_anchor_generator_with_tuples(): + from mmdet.core.anchor import build_anchor_generator + if torch.cuda.is_available(): + device = 'cuda' + else: + device = 'cpu' + + anchor_generator_cfg = dict( + type='SSDAnchorGenerator', + scale_major=False, + input_size=300, + basesize_ratio_range=(0.15, 0.9), + strides=[8, 16, 32, 64, 100, 300], + ratios=[[2], [2, 3], [2, 3], [2, 3], [2], [2]]) + + featmap_sizes = [(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)] + anchor_generator = build_anchor_generator(anchor_generator_cfg) + anchors = anchor_generator.grid_anchors(featmap_sizes, device) + + anchor_generator_cfg_tuples = dict( + type='SSDAnchorGenerator', + scale_major=False, + input_size=300, + basesize_ratio_range=(0.15, 0.9), + strides=[(8, 8), (16, 16), (32, 32), (64, 64), (100, 100), (300, 300)], + ratios=[[2], [2, 3], [2, 3], [2, 3], [2], [2]]) + + anchor_generator_tuples = build_anchor_generator( + anchor_generator_cfg_tuples) + anchors_tuples = anchor_generator_tuples.grid_anchors( + featmap_sizes, device) + for anchor, anchor_tuples in zip(anchors, anchors_tuples): + assert torch.equal(anchor, anchor_tuples) + + +def test_yolo_anchor_generator(): + from mmdet.core.anchor import build_anchor_generator + if torch.cuda.is_available(): + device = 'cuda' + else: + device = 'cpu' + + anchor_generator_cfg = dict( + type='YOLOAnchorGenerator', + strides=[32, 16, 8], + base_sizes=[ + [(116, 90), (156, 198), (373, 326)], + [(30, 61), (62, 45), (59, 119)], + [(10, 13), (16, 30), (33, 23)], + ]) + + featmap_sizes = [(14, 18), (28, 36), (56, 72)] + anchor_generator = build_anchor_generator(anchor_generator_cfg) + + # check base anchors + expected_base_anchors = [ + torch.Tensor([[-42.0000, -29.0000, 74.0000, 61.0000], + [-62.0000, -83.0000, 94.0000, 115.0000], + [-170.5000, -147.0000, 202.5000, 179.0000]]), + torch.Tensor([[-7.0000, -22.5000, 23.0000, 38.5000], + [-23.0000, -14.5000, 39.0000, 30.5000], + [-21.5000, -51.5000, 37.5000, 67.5000]]), + torch.Tensor([[-1.0000, -2.5000, 9.0000, 10.5000], + [-4.0000, -11.0000, 12.0000, 19.0000], + [-12.5000, -7.5000, 20.5000, 15.5000]]) + ] + base_anchors = anchor_generator.base_anchors + for i, base_anchor in enumerate(base_anchors): + assert base_anchor.allclose(expected_base_anchors[i]) + + # check number of base anchors for each level + assert anchor_generator.num_base_anchors == [3, 3, 3] + + # check anchor generation + anchors = anchor_generator.grid_anchors(featmap_sizes, device) + assert len(anchors) == 3 + + +def test_retina_anchor(): + from mmdet.models import build_head + if torch.cuda.is_available(): + device = 'cuda' + else: + device = 'cpu' + + # head configs modified from + # configs/nas_fpn/retinanet_r50_fpn_crop640_50e.py + bbox_head = dict( + type='RetinaSepBNHead', + num_classes=4, + num_ins=5, + in_channels=4, + stacked_convs=1, + feat_channels=4, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=4, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[8, 16, 32, 64, 128]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0])) + + retina_head = build_head(bbox_head) + assert retina_head.anchor_generator is not None + + # use the featmap sizes in NASFPN setting to test retina head + featmap_sizes = [(80, 80), (40, 40), (20, 20), (10, 10), (5, 5)] + # check base anchors + expected_base_anchors = [ + torch.Tensor([[-22.6274, -11.3137, 22.6274, 11.3137], + [-28.5088, -14.2544, 28.5088, 14.2544], + [-35.9188, -17.9594, 35.9188, 17.9594], + [-16.0000, -16.0000, 16.0000, 16.0000], + [-20.1587, -20.1587, 20.1587, 20.1587], + [-25.3984, -25.3984, 25.3984, 25.3984], + [-11.3137, -22.6274, 11.3137, 22.6274], + [-14.2544, -28.5088, 14.2544, 28.5088], + [-17.9594, -35.9188, 17.9594, 35.9188]]), + torch.Tensor([[-45.2548, -22.6274, 45.2548, 22.6274], + [-57.0175, -28.5088, 57.0175, 28.5088], + [-71.8376, -35.9188, 71.8376, 35.9188], + [-32.0000, -32.0000, 32.0000, 32.0000], + [-40.3175, -40.3175, 40.3175, 40.3175], + [-50.7968, -50.7968, 50.7968, 50.7968], + [-22.6274, -45.2548, 22.6274, 45.2548], + [-28.5088, -57.0175, 28.5088, 57.0175], + [-35.9188, -71.8376, 35.9188, 71.8376]]), + torch.Tensor([[-90.5097, -45.2548, 90.5097, 45.2548], + [-114.0350, -57.0175, 114.0350, 57.0175], + [-143.6751, -71.8376, 143.6751, 71.8376], + [-64.0000, -64.0000, 64.0000, 64.0000], + [-80.6349, -80.6349, 80.6349, 80.6349], + [-101.5937, -101.5937, 101.5937, 101.5937], + [-45.2548, -90.5097, 45.2548, 90.5097], + [-57.0175, -114.0350, 57.0175, 114.0350], + [-71.8376, -143.6751, 71.8376, 143.6751]]), + torch.Tensor([[-181.0193, -90.5097, 181.0193, 90.5097], + [-228.0701, -114.0350, 228.0701, 114.0350], + [-287.3503, -143.6751, 287.3503, 143.6751], + [-128.0000, -128.0000, 128.0000, 128.0000], + [-161.2699, -161.2699, 161.2699, 161.2699], + [-203.1873, -203.1873, 203.1873, 203.1873], + [-90.5097, -181.0193, 90.5097, 181.0193], + [-114.0350, -228.0701, 114.0350, 228.0701], + [-143.6751, -287.3503, 143.6751, 287.3503]]), + torch.Tensor([[-362.0387, -181.0193, 362.0387, 181.0193], + [-456.1401, -228.0701, 456.1401, 228.0701], + [-574.7006, -287.3503, 574.7006, 287.3503], + [-256.0000, -256.0000, 256.0000, 256.0000], + [-322.5398, -322.5398, 322.5398, 322.5398], + [-406.3747, -406.3747, 406.3747, 406.3747], + [-181.0193, -362.0387, 181.0193, 362.0387], + [-228.0701, -456.1401, 228.0701, 456.1401], + [-287.3503, -574.7006, 287.3503, 574.7006]]) + ] + base_anchors = retina_head.anchor_generator.base_anchors + for i, base_anchor in enumerate(base_anchors): + assert base_anchor.allclose(expected_base_anchors[i]) + + # check valid flags + expected_valid_pixels = [57600, 14400, 3600, 900, 225] + multi_level_valid_flags = retina_head.anchor_generator.valid_flags( + featmap_sizes, (640, 640), device) + for i, single_level_valid_flag in enumerate(multi_level_valid_flags): + assert single_level_valid_flag.sum() == expected_valid_pixels[i] + + # check number of base anchors for each level + assert retina_head.anchor_generator.num_base_anchors == [9, 9, 9, 9, 9] + + # check anchor generation + anchors = retina_head.anchor_generator.grid_anchors(featmap_sizes, device) + assert len(anchors) == 5 + + +def test_guided_anchor(): + from mmdet.models import build_head + if torch.cuda.is_available(): + device = 'cuda' + else: + device = 'cpu' + # head configs modified from + # configs/guided_anchoring/ga_retinanet_r50_fpn_1x_coco.py + bbox_head = dict( + type='GARetinaHead', + num_classes=8, + in_channels=4, + stacked_convs=1, + feat_channels=4, + approx_anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=4, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[8, 16, 32, 64, 128]), + square_anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + scales=[4], + strides=[8, 16, 32, 64, 128])) + + ga_retina_head = build_head(bbox_head) + assert ga_retina_head.approx_anchor_generator is not None + + # use the featmap sizes in NASFPN setting to test ga_retina_head + featmap_sizes = [(100, 152), (50, 76), (25, 38), (13, 19), (7, 10)] + # check base anchors + expected_approxs = [ + torch.Tensor([[-22.6274, -11.3137, 22.6274, 11.3137], + [-28.5088, -14.2544, 28.5088, 14.2544], + [-35.9188, -17.9594, 35.9188, 17.9594], + [-16.0000, -16.0000, 16.0000, 16.0000], + [-20.1587, -20.1587, 20.1587, 20.1587], + [-25.3984, -25.3984, 25.3984, 25.3984], + [-11.3137, -22.6274, 11.3137, 22.6274], + [-14.2544, -28.5088, 14.2544, 28.5088], + [-17.9594, -35.9188, 17.9594, 35.9188]]), + torch.Tensor([[-45.2548, -22.6274, 45.2548, 22.6274], + [-57.0175, -28.5088, 57.0175, 28.5088], + [-71.8376, -35.9188, 71.8376, 35.9188], + [-32.0000, -32.0000, 32.0000, 32.0000], + [-40.3175, -40.3175, 40.3175, 40.3175], + [-50.7968, -50.7968, 50.7968, 50.7968], + [-22.6274, -45.2548, 22.6274, 45.2548], + [-28.5088, -57.0175, 28.5088, 57.0175], + [-35.9188, -71.8376, 35.9188, 71.8376]]), + torch.Tensor([[-90.5097, -45.2548, 90.5097, 45.2548], + [-114.0350, -57.0175, 114.0350, 57.0175], + [-143.6751, -71.8376, 143.6751, 71.8376], + [-64.0000, -64.0000, 64.0000, 64.0000], + [-80.6349, -80.6349, 80.6349, 80.6349], + [-101.5937, -101.5937, 101.5937, 101.5937], + [-45.2548, -90.5097, 45.2548, 90.5097], + [-57.0175, -114.0350, 57.0175, 114.0350], + [-71.8376, -143.6751, 71.8376, 143.6751]]), + torch.Tensor([[-181.0193, -90.5097, 181.0193, 90.5097], + [-228.0701, -114.0350, 228.0701, 114.0350], + [-287.3503, -143.6751, 287.3503, 143.6751], + [-128.0000, -128.0000, 128.0000, 128.0000], + [-161.2699, -161.2699, 161.2699, 161.2699], + [-203.1873, -203.1873, 203.1873, 203.1873], + [-90.5097, -181.0193, 90.5097, 181.0193], + [-114.0350, -228.0701, 114.0350, 228.0701], + [-143.6751, -287.3503, 143.6751, 287.3503]]), + torch.Tensor([[-362.0387, -181.0193, 362.0387, 181.0193], + [-456.1401, -228.0701, 456.1401, 228.0701], + [-574.7006, -287.3503, 574.7006, 287.3503], + [-256.0000, -256.0000, 256.0000, 256.0000], + [-322.5398, -322.5398, 322.5398, 322.5398], + [-406.3747, -406.3747, 406.3747, 406.3747], + [-181.0193, -362.0387, 181.0193, 362.0387], + [-228.0701, -456.1401, 228.0701, 456.1401], + [-287.3503, -574.7006, 287.3503, 574.7006]]) + ] + approxs = ga_retina_head.approx_anchor_generator.base_anchors + for i, base_anchor in enumerate(approxs): + assert base_anchor.allclose(expected_approxs[i]) + + # check valid flags + expected_valid_pixels = [136800, 34200, 8550, 2223, 630] + multi_level_valid_flags = ga_retina_head.approx_anchor_generator \ + .valid_flags(featmap_sizes, (800, 1216), device) + for i, single_level_valid_flag in enumerate(multi_level_valid_flags): + assert single_level_valid_flag.sum() == expected_valid_pixels[i] + + # check number of base anchors for each level + assert ga_retina_head.approx_anchor_generator.num_base_anchors == [ + 9, 9, 9, 9, 9 + ] + + # check approx generation + squares = ga_retina_head.square_anchor_generator.grid_anchors( + featmap_sizes, device) + assert len(squares) == 5 + + expected_squares = [ + torch.Tensor([[-16., -16., 16., 16.]]), + torch.Tensor([[-32., -32., 32., 32]]), + torch.Tensor([[-64., -64., 64., 64.]]), + torch.Tensor([[-128., -128., 128., 128.]]), + torch.Tensor([[-256., -256., 256., 256.]]) + ] + squares = ga_retina_head.square_anchor_generator.base_anchors + for i, base_anchor in enumerate(squares): + assert base_anchor.allclose(expected_squares[i]) + + # square_anchor_generator does not check valid flags + # check number of base anchors for each level + assert (ga_retina_head.square_anchor_generator.num_base_anchors == [ + 1, 1, 1, 1, 1 + ]) + + # check square generation + anchors = ga_retina_head.square_anchor_generator.grid_anchors( + featmap_sizes, device) + assert len(anchors) == 5 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_assigner.py new file mode 100644 index 00000000..2f7a16ff --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_assigner.py @@ -0,0 +1,424 @@ +"""Tests the Assigner objects. + +CommandLine: + pytest tests/test_assigner.py + xdoctest tests/test_assigner.py zero +""" +import torch + +from mmdet.core.bbox.assigners import (ApproxMaxIoUAssigner, + CenterRegionAssigner, HungarianAssigner, + MaxIoUAssigner, PointAssigner) + + +def test_max_iou_assigner(): + self = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_labels = torch.LongTensor([2, 3]) + assign_result = self.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + assert len(assign_result.gt_inds) == 4 + assert len(assign_result.labels) == 4 + + expected_gt_inds = torch.LongTensor([1, 0, 2, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_max_iou_assigner_with_ignore(): + self = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [30, 32, 40, 42], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_bboxes_ignore = torch.Tensor([ + [30, 30, 40, 40], + ]) + assign_result = self.assign( + bboxes, gt_bboxes, gt_bboxes_ignore=gt_bboxes_ignore) + + expected_gt_inds = torch.LongTensor([1, 0, 2, -1]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_max_iou_assigner_with_empty_gt(): + """Test corner case where an image might have no true detections.""" + self = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.empty(0, 4) + assign_result = self.assign(bboxes, gt_bboxes) + + expected_gt_inds = torch.LongTensor([0, 0, 0, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_max_iou_assigner_with_empty_boxes(): + """Test corner case where a network might predict no boxes.""" + self = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.empty((0, 4)) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_labels = torch.LongTensor([2, 3]) + + # Test with gt_labels + assign_result = self.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + assert len(assign_result.gt_inds) == 0 + assert tuple(assign_result.labels.shape) == (0, ) + + # Test without gt_labels + assign_result = self.assign(bboxes, gt_bboxes, gt_labels=None) + assert len(assign_result.gt_inds) == 0 + assert assign_result.labels is None + + +def test_max_iou_assigner_with_empty_boxes_and_ignore(): + """Test corner case where a network might predict no boxes and + ignore_iof_thr is on.""" + self = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ) + bboxes = torch.empty((0, 4)) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_bboxes_ignore = torch.Tensor([ + [30, 30, 40, 40], + ]) + gt_labels = torch.LongTensor([2, 3]) + + # Test with gt_labels + assign_result = self.assign( + bboxes, + gt_bboxes, + gt_labels=gt_labels, + gt_bboxes_ignore=gt_bboxes_ignore) + assert len(assign_result.gt_inds) == 0 + assert tuple(assign_result.labels.shape) == (0, ) + + # Test without gt_labels + assign_result = self.assign( + bboxes, gt_bboxes, gt_labels=None, gt_bboxes_ignore=gt_bboxes_ignore) + assert len(assign_result.gt_inds) == 0 + assert assign_result.labels is None + + +def test_max_iou_assigner_with_empty_boxes_and_gt(): + """Test corner case where a network might predict no boxes and no gt.""" + self = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.empty((0, 4)) + gt_bboxes = torch.empty((0, 4)) + assign_result = self.assign(bboxes, gt_bboxes) + assert len(assign_result.gt_inds) == 0 + + +def test_point_assigner(): + self = PointAssigner() + points = torch.FloatTensor([ # [x, y, stride] + [0, 0, 1], + [10, 10, 1], + [5, 5, 1], + [32, 32, 1], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + assign_result = self.assign(points, gt_bboxes) + expected_gt_inds = torch.LongTensor([1, 2, 1, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_point_assigner_with_empty_gt(): + """Test corner case where an image might have no true detections.""" + self = PointAssigner() + points = torch.FloatTensor([ # [x, y, stride] + [0, 0, 1], + [10, 10, 1], + [5, 5, 1], + [32, 32, 1], + ]) + gt_bboxes = torch.FloatTensor([]) + assign_result = self.assign(points, gt_bboxes) + + expected_gt_inds = torch.LongTensor([0, 0, 0, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_point_assigner_with_empty_boxes_and_gt(): + """Test corner case where an image might predict no points and no gt.""" + self = PointAssigner() + points = torch.FloatTensor([]) + gt_bboxes = torch.FloatTensor([]) + assign_result = self.assign(points, gt_bboxes) + assert len(assign_result.gt_inds) == 0 + + +def test_approx_iou_assigner(): + self = ApproxMaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + approxs_per_octave = 1 + approxs = bboxes + squares = bboxes + assign_result = self.assign(approxs, squares, approxs_per_octave, + gt_bboxes) + + expected_gt_inds = torch.LongTensor([1, 0, 2, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_approx_iou_assigner_with_empty_gt(): + """Test corner case where an image might have no true detections.""" + self = ApproxMaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.FloatTensor([]) + approxs_per_octave = 1 + approxs = bboxes + squares = bboxes + assign_result = self.assign(approxs, squares, approxs_per_octave, + gt_bboxes) + + expected_gt_inds = torch.LongTensor([0, 0, 0, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_approx_iou_assigner_with_empty_boxes(): + """Test corner case where an network might predict no boxes.""" + self = ApproxMaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.empty((0, 4)) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + approxs_per_octave = 1 + approxs = bboxes + squares = bboxes + assign_result = self.assign(approxs, squares, approxs_per_octave, + gt_bboxes) + assert len(assign_result.gt_inds) == 0 + + +def test_approx_iou_assigner_with_empty_boxes_and_gt(): + """Test corner case where an network might predict no boxes and no gt.""" + self = ApproxMaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ) + bboxes = torch.empty((0, 4)) + gt_bboxes = torch.empty((0, 4)) + approxs_per_octave = 1 + approxs = bboxes + squares = bboxes + assign_result = self.assign(approxs, squares, approxs_per_octave, + gt_bboxes) + assert len(assign_result.gt_inds) == 0 + + +def test_random_assign_result(): + """Test random instantiation of assign result to catch corner cases.""" + from mmdet.core.bbox.assigners.assign_result import AssignResult + AssignResult.random() + + AssignResult.random(num_gts=0, num_preds=0) + AssignResult.random(num_gts=0, num_preds=3) + AssignResult.random(num_gts=3, num_preds=3) + AssignResult.random(num_gts=0, num_preds=3) + AssignResult.random(num_gts=7, num_preds=7) + AssignResult.random(num_gts=7, num_preds=64) + AssignResult.random(num_gts=24, num_preds=3) + + +def test_center_region_assigner(): + self = CenterRegionAssigner(pos_scale=0.3, neg_scale=1) + bboxes = torch.FloatTensor([[0, 0, 10, 10], [10, 10, 20, 20], [8, 8, 9, + 9]]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 11, 11], # match bboxes[0] + [10, 10, 20, 20], # match bboxes[1] + [4.5, 4.5, 5.5, 5.5], # match bboxes[0] but area is too small + [0, 0, 10, 10], # match bboxes[1] and has a smaller area than gt[0] + ]) + gt_labels = torch.LongTensor([2, 3, 4, 5]) + assign_result = self.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + assert len(assign_result.gt_inds) == 3 + assert len(assign_result.labels) == 3 + expected_gt_inds = torch.LongTensor([4, 2, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + shadowed_labels = assign_result.get_extra_property('shadowed_labels') + # [8, 8, 9, 9] in the shadowed region of [0, 0, 11, 11] (label: 2) + assert torch.any(shadowed_labels == torch.LongTensor([[2, 2]])) + # [8, 8, 9, 9] in the shadowed region of [0, 0, 10, 10] (label: 5) + assert torch.any(shadowed_labels == torch.LongTensor([[2, 5]])) + # [0, 0, 10, 10] is already assigned to [4.5, 4.5, 5.5, 5.5]. + # Therefore, [0, 0, 11, 11] (label: 2) is shadowed + assert torch.any(shadowed_labels == torch.LongTensor([[0, 2]])) + + +def test_center_region_assigner_with_ignore(): + self = CenterRegionAssigner( + pos_scale=0.5, + neg_scale=1, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 10], # match bboxes[0] + [10, 10, 20, 20], # match bboxes[1] + ]) + gt_bboxes_ignore = torch.FloatTensor([ + [0, 0, 10, 10], # match bboxes[0] + ]) + gt_labels = torch.LongTensor([1, 2]) + assign_result = self.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + assert len(assign_result.gt_inds) == 2 + assert len(assign_result.labels) == 2 + + expected_gt_inds = torch.LongTensor([-1, 2]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_center_region_assigner_with_empty_bboxes(): + self = CenterRegionAssigner( + pos_scale=0.5, + neg_scale=1, + ) + bboxes = torch.empty((0, 4)).float() + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 10], # match bboxes[0] + [10, 10, 20, 20], # match bboxes[1] + ]) + gt_labels = torch.LongTensor([1, 2]) + assign_result = self.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + assert assign_result.gt_inds is None or assign_result.gt_inds.numel() == 0 + assert assign_result.labels is None or assign_result.labels.numel() == 0 + + +def test_center_region_assigner_with_empty_gts(): + self = CenterRegionAssigner( + pos_scale=0.5, + neg_scale=1, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + ]) + gt_bboxes = torch.empty((0, 4)).float() + gt_labels = torch.empty((0, )).long() + assign_result = self.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + assert len(assign_result.gt_inds) == 2 + expected_gt_inds = torch.LongTensor([0, 0]) + assert torch.all(assign_result.gt_inds == expected_gt_inds) + + +def test_hungarian_match_assigner(): + self = HungarianAssigner() + assert self.iou_cost.iou_mode == 'giou' + + # test no gt bboxes + bbox_pred = torch.rand((10, 4)) + cls_pred = torch.rand((10, 81)) + gt_bboxes = torch.empty((0, 4)).float() + gt_labels = torch.empty((0, )).long() + img_meta = dict(img_shape=(10, 8, 3)) + assign_result = self.assign(bbox_pred, cls_pred, gt_bboxes, gt_labels, + img_meta) + assert torch.all(assign_result.gt_inds == 0) + assert torch.all(assign_result.labels == -1) + + # test with gt bboxes + gt_bboxes = torch.FloatTensor([[0, 0, 5, 7], [3, 5, 7, 8]]) + gt_labels = torch.LongTensor([1, 20]) + assign_result = self.assign(bbox_pred, cls_pred, gt_bboxes, gt_labels, + img_meta) + assert torch.all(assign_result.gt_inds > -1) + assert (assign_result.gt_inds > 0).sum() == gt_bboxes.size(0) + assert (assign_result.labels > -1).sum() == gt_bboxes.size(0) + + # test iou mode + self = HungarianAssigner( + iou_cost=dict(type='IoUCost', iou_mode='iou', weight=1.0)) + assert self.iou_cost.iou_mode == 'iou' + assign_result = self.assign(bbox_pred, cls_pred, gt_bboxes, gt_labels, + img_meta) + assert torch.all(assign_result.gt_inds > -1) + assert (assign_result.gt_inds > 0).sum() == gt_bboxes.size(0) + assert (assign_result.labels > -1).sum() == gt_bboxes.size(0) + + # test focal loss mode + self = HungarianAssigner( + iou_cost=dict(type='IoUCost', iou_mode='giou', weight=1.0), + cls_cost=dict(type='FocalLossCost', weight=1.)) + assert self.iou_cost.iou_mode == 'giou' + assign_result = self.assign(bbox_pred, cls_pred, gt_bboxes, gt_labels, + img_meta) + assert torch.all(assign_result.gt_inds > -1) + assert (assign_result.gt_inds > 0).sum() == gt_bboxes.size(0) + assert (assign_result.labels > -1).sum() == gt_bboxes.size(0) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_async.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_async.py new file mode 100644 index 00000000..e9733f61 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_async.py @@ -0,0 +1,82 @@ +"""Tests for async interface.""" + +import asyncio +import os +import sys + +import asynctest +import mmcv +import torch + +from mmdet.apis import async_inference_detector, init_detector + +if sys.version_info >= (3, 7): + from mmdet.utils.contextmanagers import concurrent + + +class AsyncTestCase(asynctest.TestCase): + use_default_loop = False + forbid_get_event_loop = True + + TEST_TIMEOUT = int(os.getenv('ASYNCIO_TEST_TIMEOUT', '30')) + + def _run_test_method(self, method): + result = method() + if asyncio.iscoroutine(result): + self.loop.run_until_complete( + asyncio.wait_for(result, timeout=self.TEST_TIMEOUT)) + + +class MaskRCNNDetector: + + def __init__(self, + model_config, + checkpoint=None, + streamqueue_size=3, + device='cuda:0'): + + self.streamqueue_size = streamqueue_size + self.device = device + # build the model and load checkpoint + self.model = init_detector( + model_config, checkpoint=None, device=self.device) + self.streamqueue = None + + async def init(self): + self.streamqueue = asyncio.Queue() + for _ in range(self.streamqueue_size): + stream = torch.cuda.Stream(device=self.device) + self.streamqueue.put_nowait(stream) + + if sys.version_info >= (3, 7): + + async def apredict(self, img): + if isinstance(img, str): + img = mmcv.imread(img) + async with concurrent(self.streamqueue): + result = await async_inference_detector(self.model, img) + return result + + +class AsyncInferenceTestCase(AsyncTestCase): + + if sys.version_info >= (3, 7): + + async def test_simple_inference(self): + if not torch.cuda.is_available(): + import pytest + + pytest.skip('test requires GPU and torch+cuda') + + ori_grad_enabled = torch.is_grad_enabled() + root_dir = os.path.dirname(os.path.dirname(__name__)) + model_config = os.path.join( + root_dir, 'configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py') + detector = MaskRCNNDetector(model_config) + await detector.init() + img_path = os.path.join(root_dir, 'demo/demo.jpg') + bboxes, _ = await detector.apredict(img_path) + self.assertTrue(bboxes) + # asy inference detector will hack grad_enabled, + # so restore here to avoid it to influence other tests + torch.set_grad_enabled(ori_grad_enabled) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_coder.py new file mode 100644 index 00000000..b45c16e9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_coder.py @@ -0,0 +1,21 @@ +import torch + +from mmdet.core.bbox.coder import YOLOBBoxCoder + + +def test_yolo_bbox_coder(): + coder = YOLOBBoxCoder() + bboxes = torch.Tensor([[-42., -29., 74., 61.], [-10., -29., 106., 61.], + [22., -29., 138., 61.], [54., -29., 170., 61.]]) + pred_bboxes = torch.Tensor([[0.4709, 0.6152, 0.1690, -0.4056], + [0.5399, 0.6653, 0.1162, -0.4162], + [0.4654, 0.6618, 0.1548, -0.4301], + [0.4786, 0.6197, 0.1896, -0.4479]]) + grid_size = 32 + expected_decode_bboxes = torch.Tensor( + [[-53.6102, -10.3096, 83.7478, 49.6824], + [-15.8700, -8.3901, 114.4236, 50.9693], + [11.1822, -8.0924, 146.6034, 50.4476], + [41.2068, -8.9232, 181.4236, 48.5840]]) + assert expected_decode_bboxes.allclose( + coder.decode(bboxes, pred_bboxes, grid_size)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_config.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_config.py new file mode 100644 index 00000000..c747b796 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_config.py @@ -0,0 +1,374 @@ +from os.path import dirname, exists, join, relpath + +import pytest +import torch +from mmcv.runner import build_optimizer + +from mmdet.core import BitmapMasks, PolygonMasks + + +def _get_config_directory(): + """Find the predefined detector config directory.""" + try: + # Assume we are running in the source mmdetection repo + repo_dpath = dirname(dirname(__file__)) + except NameError: + # For IPython development when this __file__ is not defined + import mmdet + repo_dpath = dirname(dirname(mmdet.__file__)) + config_dpath = join(repo_dpath, 'configs') + if not exists(config_dpath): + raise Exception('Cannot find config path') + return config_dpath + + +def test_config_build_detector(): + """Test that all detection models defined in the configs can be + initialized.""" + from mmcv import Config + from mmdet.models import build_detector + + config_dpath = _get_config_directory() + print(f'Found config_dpath = {config_dpath}') + + import glob + config_fpaths = list(glob.glob(join(config_dpath, '**', '*.py'))) + config_fpaths = [p for p in config_fpaths if p.find('_base_') == -1] + config_names = [relpath(p, config_dpath) for p in config_fpaths] + + print(f'Using {len(config_names)} config files') + + for config_fname in config_names: + config_fpath = join(config_dpath, config_fname) + config_mod = Config.fromfile(config_fpath) + config_mod.model + print(f'Building detector, config_fpath = {config_fpath}') + + # Remove pretrained keys to allow for testing in an offline environment + if 'pretrained' in config_mod.model: + config_mod.model['pretrained'] = None + + detector = build_detector(config_mod.model) + assert detector is not None + + optimizer = build_optimizer(detector, config_mod.optimizer) + assert isinstance(optimizer, torch.optim.Optimizer) + + if 'roi_head' in config_mod.model.keys(): + # for two stage detector + # detectors must have bbox head + assert detector.roi_head.with_bbox and detector.with_bbox + assert detector.roi_head.with_mask == detector.with_mask + + head_config = config_mod.model['roi_head'] + _check_roi_head(head_config, detector.roi_head) + # else: + # # for single stage detector + # # detectors must have bbox head + # # assert detector.with_bbox + # head_config = config_mod.model['bbox_head'] + # _check_bbox_head(head_config, detector.bbox_head) + + +def _check_roi_head(config, head): + # check consistency between head_config and roi_head + assert config['type'] == head.__class__.__name__ + + # check roi_align + bbox_roi_cfg = config.bbox_roi_extractor + bbox_roi_extractor = head.bbox_roi_extractor + _check_roi_extractor(bbox_roi_cfg, bbox_roi_extractor) + + # check bbox head infos + bbox_cfg = config.bbox_head + bbox_head = head.bbox_head + _check_bbox_head(bbox_cfg, bbox_head) + + if head.with_mask: + # check roi_align + if config.mask_roi_extractor: + mask_roi_cfg = config.mask_roi_extractor + mask_roi_extractor = head.mask_roi_extractor + _check_roi_extractor(mask_roi_cfg, mask_roi_extractor, + bbox_roi_extractor) + + # check mask head infos + mask_head = head.mask_head + mask_cfg = config.mask_head + _check_mask_head(mask_cfg, mask_head) + + # check arch specific settings, e.g., cascade/htc + if config['type'] in ['CascadeRoIHead', 'HybridTaskCascadeRoIHead']: + assert config.num_stages == len(head.bbox_head) + assert config.num_stages == len(head.bbox_roi_extractor) + + if head.with_mask: + assert config.num_stages == len(head.mask_head) + assert config.num_stages == len(head.mask_roi_extractor) + + elif config['type'] in ['MaskScoringRoIHead']: + assert (hasattr(head, 'mask_iou_head') + and head.mask_iou_head is not None) + mask_iou_cfg = config.mask_iou_head + mask_iou_head = head.mask_iou_head + assert (mask_iou_cfg.fc_out_channels == + mask_iou_head.fc_mask_iou.in_features) + + elif config['type'] in ['GridRoIHead']: + grid_roi_cfg = config.grid_roi_extractor + grid_roi_extractor = head.grid_roi_extractor + _check_roi_extractor(grid_roi_cfg, grid_roi_extractor, + bbox_roi_extractor) + + config.grid_head.grid_points = head.grid_head.grid_points + + +def _check_roi_extractor(config, roi_extractor, prev_roi_extractor=None): + import torch.nn as nn + if isinstance(roi_extractor, nn.ModuleList): + if prev_roi_extractor: + prev_roi_extractor = prev_roi_extractor[0] + roi_extractor = roi_extractor[0] + + assert (len(config.featmap_strides) == len(roi_extractor.roi_layers)) + assert (config.out_channels == roi_extractor.out_channels) + from torch.nn.modules.utils import _pair + assert (_pair(config.roi_layer.output_size) == + roi_extractor.roi_layers[0].output_size) + + if 'use_torchvision' in config.roi_layer: + assert (config.roi_layer.use_torchvision == + roi_extractor.roi_layers[0].use_torchvision) + elif 'aligned' in config.roi_layer: + assert ( + config.roi_layer.aligned == roi_extractor.roi_layers[0].aligned) + + if prev_roi_extractor: + assert (roi_extractor.roi_layers[0].aligned == + prev_roi_extractor.roi_layers[0].aligned) + assert (roi_extractor.roi_layers[0].use_torchvision == + prev_roi_extractor.roi_layers[0].use_torchvision) + + +def _check_mask_head(mask_cfg, mask_head): + import torch.nn as nn + if isinstance(mask_cfg, list): + for single_mask_cfg, single_mask_head in zip(mask_cfg, mask_head): + _check_mask_head(single_mask_cfg, single_mask_head) + elif isinstance(mask_head, nn.ModuleList): + for single_mask_head in mask_head: + _check_mask_head(mask_cfg, single_mask_head) + else: + assert mask_cfg['type'] == mask_head.__class__.__name__ + assert mask_cfg.in_channels == mask_head.in_channels + class_agnostic = mask_cfg.get('class_agnostic', False) + out_dim = (1 if class_agnostic else mask_cfg.num_classes) + if hasattr(mask_head, 'conv_logits'): + assert (mask_cfg.conv_out_channels == + mask_head.conv_logits.in_channels) + assert mask_head.conv_logits.out_channels == out_dim + else: + assert mask_cfg.fc_out_channels == mask_head.fc_logits.in_features + assert (mask_head.fc_logits.out_features == out_dim * + mask_head.output_area) + + +def _check_bbox_head(bbox_cfg, bbox_head): + import torch.nn as nn + if isinstance(bbox_cfg, list): + for single_bbox_cfg, single_bbox_head in zip(bbox_cfg, bbox_head): + _check_bbox_head(single_bbox_cfg, single_bbox_head) + elif isinstance(bbox_head, nn.ModuleList): + for single_bbox_head in bbox_head: + _check_bbox_head(bbox_cfg, single_bbox_head) + else: + assert bbox_cfg['type'] == bbox_head.__class__.__name__ + if bbox_cfg['type'] == 'SABLHead': + assert bbox_cfg.cls_in_channels == bbox_head.cls_in_channels + assert bbox_cfg.reg_in_channels == bbox_head.reg_in_channels + + cls_out_channels = bbox_cfg.get('cls_out_channels', 1024) + assert (cls_out_channels == bbox_head.fc_cls.in_features) + assert (bbox_cfg.num_classes + 1 == bbox_head.fc_cls.out_features) + + elif bbox_cfg['type'] == 'DIIHead': + assert bbox_cfg['num_ffn_fcs'] == bbox_head.ffn.num_fcs + # 3 means FC and LN and Relu + assert bbox_cfg['num_cls_fcs'] == len(bbox_head.cls_fcs) // 3 + assert bbox_cfg['num_reg_fcs'] == len(bbox_head.reg_fcs) // 3 + assert bbox_cfg['in_channels'] == bbox_head.in_channels + assert bbox_cfg['in_channels'] == bbox_head.fc_cls.in_features + assert bbox_cfg['in_channels'] == bbox_head.fc_reg.in_features + assert bbox_cfg['in_channels'] == bbox_head.attention.embed_dims + assert bbox_cfg[ + 'feedforward_channels'] == bbox_head.ffn.feedforward_channels + + else: + assert bbox_cfg.in_channels == bbox_head.in_channels + with_cls = bbox_cfg.get('with_cls', True) + + if with_cls: + fc_out_channels = bbox_cfg.get('fc_out_channels', 2048) + assert (fc_out_channels == bbox_head.fc_cls.in_features) + assert (bbox_cfg.num_classes + + 1 == bbox_head.fc_cls.out_features) + with_reg = bbox_cfg.get('with_reg', True) + if with_reg: + out_dim = (4 if bbox_cfg.reg_class_agnostic else 4 * + bbox_cfg.num_classes) + assert bbox_head.fc_reg.out_features == out_dim + + +def _check_anchorhead(config, head): + # check consistency between head_config and roi_head + assert config['type'] == head.__class__.__name__ + assert config.in_channels == head.in_channels + + num_classes = ( + config.num_classes - + 1 if config.loss_cls.get('use_sigmoid', False) else config.num_classes) + if config['type'] == 'ATSSHead': + assert (config.feat_channels == head.atss_cls.in_channels) + assert (config.feat_channels == head.atss_reg.in_channels) + assert (config.feat_channels == head.atss_centerness.in_channels) + elif config['type'] == 'SABLRetinaHead': + assert (config.feat_channels == head.retina_cls.in_channels) + assert (config.feat_channels == head.retina_bbox_reg.in_channels) + assert (config.feat_channels == head.retina_bbox_cls.in_channels) + else: + assert (config.in_channels == head.conv_cls.in_channels) + assert (config.in_channels == head.conv_reg.in_channels) + assert (head.conv_cls.out_channels == num_classes * head.num_anchors) + assert head.fc_reg.out_channels == 4 * head.num_anchors + + +# Only tests a representative subset of configurations +# TODO: test pipelines using Albu, current Albu throw None given empty GT +@pytest.mark.parametrize( + 'config_rpath', + [ + 'wider_face/ssd300_wider_face.py', + 'pascal_voc/ssd300_voc0712.py', + 'pascal_voc/ssd512_voc0712.py', + # 'albu_example/mask_rcnn_r50_fpn_1x.py', + 'foveabox/fovea_align_r50_fpn_gn-head_mstrain_640-800_4x4_2x_coco.py', + 'mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py', + 'mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain_1x_coco.py', + 'fp16/mask_rcnn_r50_fpn_fp16_1x_coco.py' + ]) +def test_config_data_pipeline(config_rpath): + """Test whether the data pipeline is valid and can process corner cases. + + CommandLine: + xdoctest -m tests/test_config.py test_config_build_data_pipeline + """ + from mmcv import Config + from mmdet.datasets.pipelines import Compose + import numpy as np + + config_dpath = _get_config_directory() + print(f'Found config_dpath = {config_dpath}') + + def dummy_masks(h, w, num_obj=3, mode='bitmap'): + assert mode in ('polygon', 'bitmap') + if mode == 'bitmap': + masks = np.random.randint(0, 2, (num_obj, h, w), dtype=np.uint8) + masks = BitmapMasks(masks, h, w) + else: + masks = [] + for i in range(num_obj): + masks.append([]) + masks[-1].append( + np.random.uniform(0, min(h - 1, w - 1), (8 + 4 * i, ))) + masks[-1].append( + np.random.uniform(0, min(h - 1, w - 1), (10 + 4 * i, ))) + masks = PolygonMasks(masks, h, w) + return masks + + config_fpath = join(config_dpath, config_rpath) + cfg = Config.fromfile(config_fpath) + + # remove loading pipeline + loading_pipeline = cfg.train_pipeline.pop(0) + loading_ann_pipeline = cfg.train_pipeline.pop(0) + cfg.test_pipeline.pop(0) + + train_pipeline = Compose(cfg.train_pipeline) + test_pipeline = Compose(cfg.test_pipeline) + + print(f'Building data pipeline, config_fpath = {config_fpath}') + + print(f'Test training data pipeline: \n{train_pipeline!r}') + img = np.random.randint(0, 255, size=(888, 666, 3), dtype=np.uint8) + if loading_pipeline.get('to_float32', False): + img = img.astype(np.float32) + mode = 'bitmap' if loading_ann_pipeline.get('poly2mask', + True) else 'polygon' + results = dict( + filename='test_img.png', + ori_filename='test_img.png', + img=img, + img_shape=img.shape, + ori_shape=img.shape, + gt_bboxes=np.array([[35.2, 11.7, 39.7, 15.7]], dtype=np.float32), + gt_labels=np.array([1], dtype=np.int64), + gt_masks=dummy_masks(img.shape[0], img.shape[1], mode=mode), + ) + results['img_fields'] = ['img'] + results['bbox_fields'] = ['gt_bboxes'] + results['mask_fields'] = ['gt_masks'] + output_results = train_pipeline(results) + assert output_results is not None + + print(f'Test testing data pipeline: \n{test_pipeline!r}') + results = dict( + filename='test_img.png', + ori_filename='test_img.png', + img=img, + img_shape=img.shape, + ori_shape=img.shape, + gt_bboxes=np.array([[35.2, 11.7, 39.7, 15.7]], dtype=np.float32), + gt_labels=np.array([1], dtype=np.int64), + gt_masks=dummy_masks(img.shape[0], img.shape[1], mode=mode), + ) + results['img_fields'] = ['img'] + results['bbox_fields'] = ['gt_bboxes'] + results['mask_fields'] = ['gt_masks'] + output_results = test_pipeline(results) + assert output_results is not None + + # test empty GT + print('Test empty GT with training data pipeline: ' + f'\n{train_pipeline!r}') + results = dict( + filename='test_img.png', + ori_filename='test_img.png', + img=img, + img_shape=img.shape, + ori_shape=img.shape, + gt_bboxes=np.zeros((0, 4), dtype=np.float32), + gt_labels=np.array([], dtype=np.int64), + gt_masks=dummy_masks(img.shape[0], img.shape[1], num_obj=0, mode=mode), + ) + results['img_fields'] = ['img'] + results['bbox_fields'] = ['gt_bboxes'] + results['mask_fields'] = ['gt_masks'] + output_results = train_pipeline(results) + assert output_results is not None + + print(f'Test empty GT with testing data pipeline: \n{test_pipeline!r}') + results = dict( + filename='test_img.png', + ori_filename='test_img.png', + img=img, + img_shape=img.shape, + ori_shape=img.shape, + gt_bboxes=np.zeros((0, 4), dtype=np.float32), + gt_labels=np.array([], dtype=np.int64), + gt_masks=dummy_masks(img.shape[0], img.shape[1], num_obj=0, mode=mode), + ) + results['img_fields'] = ['img'] + results['bbox_fields'] = ['gt_bboxes'] + results['mask_fields'] = ['gt_masks'] + output_results = test_pipeline(results) + assert output_results is not None diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_dataset.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_dataset.py new file mode 100644 index 00000000..83de7125 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_dataset.py @@ -0,0 +1,493 @@ +import bisect +import logging +import math +import os.path as osp +import tempfile +from collections import defaultdict +from unittest.mock import MagicMock, patch + +import mmcv +import numpy as np +import pytest +import torch +import torch.nn as nn +from mmcv.runner import EpochBasedRunner +from torch.utils.data import DataLoader + +from mmdet.core.evaluation import DistEvalHook, EvalHook +from mmdet.datasets import (DATASETS, ClassBalancedDataset, CocoDataset, + ConcatDataset, CustomDataset, RepeatDataset, + build_dataset) + + +def _create_dummy_coco_json(json_name): + image = { + 'id': 0, + 'width': 640, + 'height': 640, + 'file_name': 'fake_name.jpg', + } + + annotation_1 = { + 'id': 1, + 'image_id': 0, + 'category_id': 0, + 'area': 400, + 'bbox': [50, 60, 20, 20], + 'iscrowd': 0, + } + + annotation_2 = { + 'id': 2, + 'image_id': 0, + 'category_id': 0, + 'area': 900, + 'bbox': [100, 120, 30, 30], + 'iscrowd': 0, + } + + annotation_3 = { + 'id': 3, + 'image_id': 0, + 'category_id': 0, + 'area': 1600, + 'bbox': [150, 160, 40, 40], + 'iscrowd': 0, + } + + annotation_4 = { + 'id': 4, + 'image_id': 0, + 'category_id': 0, + 'area': 10000, + 'bbox': [250, 260, 100, 100], + 'iscrowd': 0, + } + + categories = [{ + 'id': 0, + 'name': 'car', + 'supercategory': 'car', + }] + + fake_json = { + 'images': [image], + 'annotations': + [annotation_1, annotation_2, annotation_3, annotation_4], + 'categories': categories + } + + mmcv.dump(fake_json, json_name) + + +def _create_dummy_custom_pkl(pkl_name): + fake_pkl = [{ + 'filename': 'fake_name.jpg', + 'width': 640, + 'height': 640, + 'ann': { + 'bboxes': + np.array([[50, 60, 70, 80], [100, 120, 130, 150], + [150, 160, 190, 200], [250, 260, 350, 360]]), + 'labels': + np.array([0, 0, 0, 0]) + } + }] + mmcv.dump(fake_pkl, pkl_name) + + +def _create_dummy_results(): + boxes = [ + np.array([[50, 60, 70, 80, 1.0], [100, 120, 130, 150, 0.98], + [150, 160, 190, 200, 0.96], [250, 260, 350, 360, 0.95]]) + ] + return [boxes] + + +def test_dataset_evaluation(): + tmp_dir = tempfile.TemporaryDirectory() + # create dummy data + fake_json_file = osp.join(tmp_dir.name, 'fake_data.json') + _create_dummy_coco_json(fake_json_file) + + # test single coco dataset evaluation + coco_dataset = CocoDataset( + ann_file=fake_json_file, classes=('car', ), pipeline=[]) + fake_results = _create_dummy_results() + eval_results = coco_dataset.evaluate(fake_results, classwise=True) + assert eval_results['bbox_mAP'] == 1 + assert eval_results['bbox_mAP_50'] == 1 + assert eval_results['bbox_mAP_75'] == 1 + + # test concat dataset evaluation + fake_concat_results = _create_dummy_results() + _create_dummy_results() + + # build concat dataset through two config dict + coco_cfg = dict( + type='CocoDataset', + ann_file=fake_json_file, + classes=('car', ), + pipeline=[]) + concat_cfgs = [coco_cfg, coco_cfg] + concat_dataset = build_dataset(concat_cfgs) + eval_results = concat_dataset.evaluate(fake_concat_results) + assert eval_results['0_bbox_mAP'] == 1 + assert eval_results['0_bbox_mAP_50'] == 1 + assert eval_results['0_bbox_mAP_75'] == 1 + assert eval_results['1_bbox_mAP'] == 1 + assert eval_results['1_bbox_mAP_50'] == 1 + assert eval_results['1_bbox_mAP_75'] == 1 + + # build concat dataset through concatenated ann_file + coco_cfg = dict( + type='CocoDataset', + ann_file=[fake_json_file, fake_json_file], + classes=('car', ), + pipeline=[]) + concat_dataset = build_dataset(coco_cfg) + eval_results = concat_dataset.evaluate(fake_concat_results) + assert eval_results['0_bbox_mAP'] == 1 + assert eval_results['0_bbox_mAP_50'] == 1 + assert eval_results['0_bbox_mAP_75'] == 1 + assert eval_results['1_bbox_mAP'] == 1 + assert eval_results['1_bbox_mAP_50'] == 1 + assert eval_results['1_bbox_mAP_75'] == 1 + + # create dummy data + fake_pkl_file = osp.join(tmp_dir.name, 'fake_data.pkl') + _create_dummy_custom_pkl(fake_pkl_file) + + # test single custom dataset evaluation + custom_dataset = CustomDataset( + ann_file=fake_pkl_file, classes=('car', ), pipeline=[]) + fake_results = _create_dummy_results() + eval_results = custom_dataset.evaluate(fake_results) + assert eval_results['mAP'] == 1 + + # test concat dataset evaluation + fake_concat_results = _create_dummy_results() + _create_dummy_results() + + # build concat dataset through two config dict + custom_cfg = dict( + type='CustomDataset', + ann_file=fake_pkl_file, + classes=('car', ), + pipeline=[]) + concat_cfgs = [custom_cfg, custom_cfg] + concat_dataset = build_dataset(concat_cfgs) + eval_results = concat_dataset.evaluate(fake_concat_results) + assert eval_results['0_mAP'] == 1 + assert eval_results['1_mAP'] == 1 + + # build concat dataset through concatenated ann_file + concat_cfg = dict( + type='CustomDataset', + ann_file=[fake_pkl_file, fake_pkl_file], + classes=('car', ), + pipeline=[]) + concat_dataset = build_dataset(concat_cfg) + eval_results = concat_dataset.evaluate(fake_concat_results) + assert eval_results['0_mAP'] == 1 + assert eval_results['1_mAP'] == 1 + + # build concat dataset through explict type + concat_cfg = dict( + type='ConcatDataset', + datasets=[custom_cfg, custom_cfg], + separate_eval=False) + concat_dataset = build_dataset(concat_cfg) + eval_results = concat_dataset.evaluate(fake_concat_results, metric='mAP') + assert eval_results['mAP'] == 1 + assert len(concat_dataset.datasets[0].data_infos) == \ + len(concat_dataset.datasets[1].data_infos) + assert len(concat_dataset.datasets[0].data_infos) == 1 + tmp_dir.cleanup() + + +@patch('mmdet.datasets.CocoDataset.load_annotations', MagicMock) +@patch('mmdet.datasets.CustomDataset.load_annotations', MagicMock) +@patch('mmdet.datasets.XMLDataset.load_annotations', MagicMock) +@patch('mmdet.datasets.CityscapesDataset.load_annotations', MagicMock) +@patch('mmdet.datasets.CocoDataset._filter_imgs', MagicMock) +@patch('mmdet.datasets.CustomDataset._filter_imgs', MagicMock) +@patch('mmdet.datasets.XMLDataset._filter_imgs', MagicMock) +@patch('mmdet.datasets.CityscapesDataset._filter_imgs', MagicMock) +@pytest.mark.parametrize('dataset', + ['CocoDataset', 'VOCDataset', 'CityscapesDataset']) +def test_custom_classes_override_default(dataset): + dataset_class = DATASETS.get(dataset) + if dataset in ['CocoDataset', 'CityscapesDataset']: + dataset_class.coco = MagicMock() + dataset_class.cat_ids = MagicMock() + + original_classes = dataset_class.CLASSES + + # Test setting classes as a tuple + custom_dataset = dataset_class( + ann_file=MagicMock(), + pipeline=[], + classes=('bus', 'car'), + test_mode=True, + img_prefix='VOC2007' if dataset == 'VOCDataset' else '') + + assert custom_dataset.CLASSES != original_classes + assert custom_dataset.CLASSES == ('bus', 'car') + + # Test setting classes as a list + custom_dataset = dataset_class( + ann_file=MagicMock(), + pipeline=[], + classes=['bus', 'car'], + test_mode=True, + img_prefix='VOC2007' if dataset == 'VOCDataset' else '') + + assert custom_dataset.CLASSES != original_classes + assert custom_dataset.CLASSES == ['bus', 'car'] + + # Test overriding not a subset + custom_dataset = dataset_class( + ann_file=MagicMock(), + pipeline=[], + classes=['foo'], + test_mode=True, + img_prefix='VOC2007' if dataset == 'VOCDataset' else '') + + assert custom_dataset.CLASSES != original_classes + assert custom_dataset.CLASSES == ['foo'] + + # Test default behavior + custom_dataset = dataset_class( + ann_file=MagicMock(), + pipeline=[], + classes=None, + test_mode=True, + img_prefix='VOC2007' if dataset == 'VOCDataset' else '') + + assert custom_dataset.CLASSES == original_classes + + # Test sending file path + import tempfile + tmp_file = tempfile.NamedTemporaryFile() + with open(tmp_file.name, 'w') as f: + f.write('bus\ncar\n') + custom_dataset = dataset_class( + ann_file=MagicMock(), + pipeline=[], + classes=tmp_file.name, + test_mode=True, + img_prefix='VOC2007' if dataset == 'VOCDataset' else '') + tmp_file.close() + + assert custom_dataset.CLASSES != original_classes + assert custom_dataset.CLASSES == ['bus', 'car'] + + +def test_dataset_wrapper(): + CustomDataset.load_annotations = MagicMock() + CustomDataset.__getitem__ = MagicMock(side_effect=lambda idx: idx) + dataset_a = CustomDataset( + ann_file=MagicMock(), pipeline=[], test_mode=True, img_prefix='') + len_a = 10 + cat_ids_list_a = [ + np.random.randint(0, 80, num).tolist() + for num in np.random.randint(1, 20, len_a) + ] + dataset_a.data_infos = MagicMock() + dataset_a.data_infos.__len__.return_value = len_a + dataset_a.get_cat_ids = MagicMock( + side_effect=lambda idx: cat_ids_list_a[idx]) + dataset_b = CustomDataset( + ann_file=MagicMock(), pipeline=[], test_mode=True, img_prefix='') + len_b = 20 + cat_ids_list_b = [ + np.random.randint(0, 80, num).tolist() + for num in np.random.randint(1, 20, len_b) + ] + dataset_b.data_infos = MagicMock() + dataset_b.data_infos.__len__.return_value = len_b + dataset_b.get_cat_ids = MagicMock( + side_effect=lambda idx: cat_ids_list_b[idx]) + + concat_dataset = ConcatDataset([dataset_a, dataset_b]) + assert concat_dataset[5] == 5 + assert concat_dataset[25] == 15 + assert concat_dataset.get_cat_ids(5) == cat_ids_list_a[5] + assert concat_dataset.get_cat_ids(25) == cat_ids_list_b[15] + assert len(concat_dataset) == len(dataset_a) + len(dataset_b) + + repeat_dataset = RepeatDataset(dataset_a, 10) + assert repeat_dataset[5] == 5 + assert repeat_dataset[15] == 5 + assert repeat_dataset[27] == 7 + assert repeat_dataset.get_cat_ids(5) == cat_ids_list_a[5] + assert repeat_dataset.get_cat_ids(15) == cat_ids_list_a[5] + assert repeat_dataset.get_cat_ids(27) == cat_ids_list_a[7] + assert len(repeat_dataset) == 10 * len(dataset_a) + + category_freq = defaultdict(int) + for cat_ids in cat_ids_list_a: + cat_ids = set(cat_ids) + for cat_id in cat_ids: + category_freq[cat_id] += 1 + for k, v in category_freq.items(): + category_freq[k] = v / len(cat_ids_list_a) + + mean_freq = np.mean(list(category_freq.values())) + repeat_thr = mean_freq + + category_repeat = { + cat_id: max(1.0, math.sqrt(repeat_thr / cat_freq)) + for cat_id, cat_freq in category_freq.items() + } + + repeat_factors = [] + for cat_ids in cat_ids_list_a: + cat_ids = set(cat_ids) + repeat_factor = max({category_repeat[cat_id] for cat_id in cat_ids}) + repeat_factors.append(math.ceil(repeat_factor)) + repeat_factors_cumsum = np.cumsum(repeat_factors) + repeat_factor_dataset = ClassBalancedDataset(dataset_a, repeat_thr) + assert len(repeat_factor_dataset) == repeat_factors_cumsum[-1] + for idx in np.random.randint(0, len(repeat_factor_dataset), 3): + assert repeat_factor_dataset[idx] == bisect.bisect_right( + repeat_factors_cumsum, idx) + + +@patch('mmdet.apis.single_gpu_test', MagicMock) +@patch('mmdet.apis.multi_gpu_test', MagicMock) +@pytest.mark.parametrize('EvalHookParam', (EvalHook, DistEvalHook)) +def test_evaluation_hook(EvalHookParam): + # create dummy data + dataloader = DataLoader(torch.ones((5, 2))) + + # 0.1. dataloader is not a DataLoader object + with pytest.raises(TypeError): + EvalHookParam(dataloader=MagicMock(), interval=-1) + + # 0.2. negative interval + with pytest.raises(ValueError): + EvalHookParam(dataloader, interval=-1) + + # 1. start=None, interval=1: perform evaluation after each epoch. + runner = _build_demo_runner() + evalhook = EvalHookParam(dataloader, interval=1) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner.run([dataloader], [('train', 1)], 2) + assert evalhook.evaluate.call_count == 2 # after epoch 1 & 2 + + # 2. start=1, interval=1: perform evaluation after each epoch. + runner = _build_demo_runner() + + evalhook = EvalHookParam(dataloader, start=1, interval=1) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner.run([dataloader], [('train', 1)], 2) + assert evalhook.evaluate.call_count == 2 # after epoch 1 & 2 + + # 3. start=None, interval=2: perform evaluation after epoch 2, 4, 6, etc + runner = _build_demo_runner() + evalhook = EvalHookParam(dataloader, interval=2) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner.run([dataloader], [('train', 1)], 2) + assert evalhook.evaluate.call_count == 1 # after epoch 2 + + # 4. start=1, interval=2: perform evaluation after epoch 1, 3, 5, etc + runner = _build_demo_runner() + evalhook = EvalHookParam(dataloader, start=1, interval=2) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner.run([dataloader], [('train', 1)], 3) + assert evalhook.evaluate.call_count == 2 # after epoch 1 & 3 + + # 5. start=0/negative, interval=1: perform evaluation after each epoch and + # before epoch 1. + runner = _build_demo_runner() + evalhook = EvalHookParam(dataloader, start=0) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner.run([dataloader], [('train', 1)], 2) + assert evalhook.evaluate.call_count == 3 # before epoch1 and after e1 & e2 + + runner = _build_demo_runner() + with pytest.warns(UserWarning): + evalhook = EvalHookParam(dataloader, start=-2) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner.run([dataloader], [('train', 1)], 2) + assert evalhook.evaluate.call_count == 3 # before epoch1 and after e1 & e2 + + # 6. resuming from epoch i, start = x (x<=i), interval =1: perform + # evaluation after each epoch and before the first epoch. + runner = _build_demo_runner() + evalhook = EvalHookParam(dataloader, start=1) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner._epoch = 2 + runner.run([dataloader], [('train', 1)], 3) + assert evalhook.evaluate.call_count == 2 # before & after epoch 3 + + # 7. resuming from epoch i, start = i+1/None, interval =1: perform + # evaluation after each epoch. + runner = _build_demo_runner() + evalhook = EvalHookParam(dataloader, start=2) + evalhook.evaluate = MagicMock() + runner.register_hook(evalhook) + runner._epoch = 1 + runner.run([dataloader], [('train', 1)], 3) + assert evalhook.evaluate.call_count == 2 # after epoch 2 & 3 + + +def _build_demo_runner(): + + class Model(nn.Module): + + def __init__(self): + super().__init__() + self.linear = nn.Linear(2, 1) + + def forward(self, x): + return self.linear(x) + + def train_step(self, x, optimizer, **kwargs): + return dict(loss=self(x)) + + def val_step(self, x, optimizer, **kwargs): + return dict(loss=self(x)) + + model = Model() + tmp_dir = tempfile.mkdtemp() + + runner = EpochBasedRunner( + model=model, work_dir=tmp_dir, logger=logging.getLogger()) + return runner + + +@pytest.mark.parametrize('classes, expected_length', [(['bus'], 2), + (['car'], 1), + (['bus', 'car'], 2)]) +def test_allow_empty_images(classes, expected_length): + dataset_class = DATASETS.get('CocoDataset') + # Filter empty images + filtered_dataset = dataset_class( + ann_file='tests/data/coco_sample.json', + img_prefix='tests/data', + pipeline=[], + classes=classes, + filter_empty_gt=True) + + # Get all + full_dataset = dataset_class( + ann_file='tests/data/coco_sample.json', + img_prefix='tests/data', + pipeline=[], + classes=classes, + filter_empty_gt=False) + + assert len(filtered_dataset) == expected_length + assert len(filtered_dataset.img_ids) == expected_length + assert len(full_dataset) == 3 + assert len(full_dataset.img_ids) == 3 + assert filtered_dataset.CLASSES == classes + assert full_dataset.CLASSES == classes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_formatting.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_formatting.py new file mode 100644 index 00000000..1e8ab252 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_formatting.py @@ -0,0 +1,23 @@ +import os.path as osp + +from mmcv.utils import build_from_cfg + +from mmdet.datasets.builder import PIPELINES + + +def test_default_format_bundle(): + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + load = dict(type='LoadImageFromFile') + load = build_from_cfg(load, PIPELINES) + bundle = dict(type='DefaultFormatBundle') + bundle = build_from_cfg(bundle, PIPELINES) + results = load(results) + assert 'pad_shape' not in results + assert 'scale_factor' not in results + assert 'img_norm_cfg' not in results + results = bundle(results) + assert 'pad_shape' in results + assert 'scale_factor' in results + assert 'img_norm_cfg' in results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_img_augment.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_img_augment.py new file mode 100644 index 00000000..8f7dd9eb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_img_augment.py @@ -0,0 +1,203 @@ +import copy + +import mmcv +import numpy as np +from mmcv.utils import build_from_cfg +from numpy.testing import assert_array_equal + +from mmdet.core.mask import BitmapMasks, PolygonMasks +from mmdet.datasets.builder import PIPELINES + + +def construct_toy_data(poly2mask=True): + img = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=np.uint8) + img = np.stack([img, img, img], axis=-1) + results = dict() + # image + results['img'] = img + results['img_shape'] = img.shape + results['img_fields'] = ['img'] + # bboxes + results['bbox_fields'] = ['gt_bboxes', 'gt_bboxes_ignore'] + results['gt_bboxes'] = np.array([[0., 0., 2., 1.]], dtype=np.float32) + results['gt_bboxes_ignore'] = np.array([[2., 0., 3., 1.]], + dtype=np.float32) + # labels + results['gt_labels'] = np.array([1], dtype=np.int64) + # masks + results['mask_fields'] = ['gt_masks'] + if poly2mask: + gt_masks = np.array([[0, 1, 1, 0], [0, 1, 0, 0]], + dtype=np.uint8)[None, :, :] + results['gt_masks'] = BitmapMasks(gt_masks, 2, 4) + else: + raw_masks = [[np.array([1, 0, 2, 0, 2, 1, 1, 1], dtype=np.float)]] + results['gt_masks'] = PolygonMasks(raw_masks, 2, 4) + # segmentations + results['seg_fields'] = ['gt_semantic_seg'] + results['gt_semantic_seg'] = img[..., 0] + return results + + +def test_adjust_color(): + results = construct_toy_data() + # test wighout aug + transform = dict(type='ColorTransform', prob=0, level=10) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], results['img']) + + # test with factor 1 + img = results['img'] + transform = dict(type='ColorTransform', prob=1, level=10) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], img) + + # test with factor 0 + transform_module.factor = 0 + img_gray = mmcv.bgr2gray(img.copy()) + img_r = np.stack([img_gray, img_gray, img_gray], axis=-1) + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], img_r) + + # test with factor 0.5 + transform_module.factor = 0.5 + results_transformed = transform_module(copy.deepcopy(results)) + img = results['img'] + assert_array_equal( + results_transformed['img'], + np.round(np.clip((img * 0.5 + img_r * 0.5), 0, 255)).astype(img.dtype)) + + +def test_imequalize(nb_rand_test=100): + + def _imequalize(img): + # equalize the image using PIL.ImageOps.equalize + from PIL import ImageOps, Image + img = Image.fromarray(img) + equalized_img = np.asarray(ImageOps.equalize(img)) + return equalized_img + + results = construct_toy_data() + # test wighout aug + transform = dict(type='EqualizeTransform', prob=0) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], results['img']) + + # test equalize with case step=0 + transform = dict(type='EqualizeTransform', prob=1.) + transform_module = build_from_cfg(transform, PIPELINES) + img = np.array([[0, 0, 0], [120, 120, 120], [255, 255, 255]], + dtype=np.uint8) + img = np.stack([img, img, img], axis=-1) + results['img'] = img + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], img) + + # test equalize with randomly sampled image. + for _ in range(nb_rand_test): + img = np.clip(np.random.uniform(0, 1, (1000, 1200, 3)) * 260, 0, + 255).astype(np.uint8) + results['img'] = img + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], _imequalize(img)) + + +def test_adjust_brightness(nb_rand_test=100): + + def _adjust_brightness(img, factor): + # adjust the brightness of image using + # PIL.ImageEnhance.Brightness + from PIL.ImageEnhance import Brightness + from PIL import Image + img = Image.fromarray(img) + brightened_img = Brightness(img).enhance(factor) + return np.asarray(brightened_img) + + results = construct_toy_data() + # test wighout aug + transform = dict(type='BrightnessTransform', level=10, prob=0) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], results['img']) + + # test case with factor 1.0 + transform = dict(type='BrightnessTransform', level=10, prob=1.) + transform_module = build_from_cfg(transform, PIPELINES) + transform_module.factor = 1.0 + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], results['img']) + + # test case with factor 0.0 + transform_module.factor = 0.0 + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], + np.zeros_like(results['img'])) + + # test with randomly sampled images and factors. + for _ in range(nb_rand_test): + img = np.clip(np.random.uniform(0, 1, (1000, 1200, 3)) * 260, 0, + 255).astype(np.uint8) + factor = np.random.uniform() + transform_module.factor = factor + results['img'] = img + np.testing.assert_allclose( + transform_module(copy.deepcopy(results))['img'].astype(np.int32), + _adjust_brightness(img, factor).astype(np.int32), + rtol=0, + atol=1) + + +def test_adjust_contrast(nb_rand_test=100): + + def _adjust_contrast(img, factor): + from PIL.ImageEnhance import Contrast + from PIL import Image + # Image.fromarray defaultly supports RGB, not BGR. + # convert from BGR to RGB + img = Image.fromarray(img[..., ::-1], mode='RGB') + contrasted_img = Contrast(img).enhance(factor) + # convert from RGB to BGR + return np.asarray(contrasted_img)[..., ::-1] + + results = construct_toy_data() + # test wighout aug + transform = dict(type='ContrastTransform', level=10, prob=0) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], results['img']) + + # test case with factor 1.0 + transform = dict(type='ContrastTransform', level=10, prob=1.) + transform_module = build_from_cfg(transform, PIPELINES) + transform_module.factor = 1.0 + results_transformed = transform_module(copy.deepcopy(results)) + assert_array_equal(results_transformed['img'], results['img']) + + # test case with factor 0.0 + transform_module.factor = 0.0 + results_transformed = transform_module(copy.deepcopy(results)) + np.testing.assert_allclose( + results_transformed['img'], + _adjust_contrast(results['img'], 0.), + rtol=0, + atol=1) + + # test adjust_contrast with randomly sampled images and factors. + for _ in range(nb_rand_test): + img = np.clip(np.random.uniform(0, 1, (1200, 1000, 3)) * 260, 0, + 255).astype(np.uint8) + factor = np.random.uniform() + transform_module.factor = factor + results['img'] = img + results_transformed = transform_module(copy.deepcopy(results)) + # Note the gap (less_equal 1) between PIL.ImageEnhance.Contrast + # and mmcv.adjust_contrast comes from the gap that converts from + # a color image to gray image using mmcv or PIL. + np.testing.assert_allclose( + transform_module(copy.deepcopy(results))['img'].astype(np.int32), + _adjust_contrast(results['img'], factor).astype(np.int32), + rtol=0, + atol=1) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_loading.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_loading.py new file mode 100644 index 00000000..41d125b2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_loading.py @@ -0,0 +1,90 @@ +import copy +import os.path as osp + +import mmcv +import numpy as np + +from mmdet.datasets.pipelines import (LoadImageFromFile, LoadImageFromWebcam, + LoadMultiChannelImageFromFiles) + + +class TestLoading(object): + + @classmethod + def setup_class(cls): + cls.data_prefix = osp.join(osp.dirname(__file__), '../data') + + def test_load_img(self): + results = dict( + img_prefix=self.data_prefix, img_info=dict(filename='color.jpg')) + transform = LoadImageFromFile() + results = transform(copy.deepcopy(results)) + assert results['filename'] == osp.join(self.data_prefix, 'color.jpg') + assert results['ori_filename'] == 'color.jpg' + assert results['img'].shape == (288, 512, 3) + assert results['img'].dtype == np.uint8 + assert results['img_shape'] == (288, 512, 3) + assert results['ori_shape'] == (288, 512, 3) + assert repr(transform) == transform.__class__.__name__ + \ + "(to_float32=False, color_type='color', " + \ + "file_client_args={'backend': 'disk'})" + + # no img_prefix + results = dict( + img_prefix=None, img_info=dict(filename='tests/data/color.jpg')) + transform = LoadImageFromFile() + results = transform(copy.deepcopy(results)) + assert results['filename'] == 'tests/data/color.jpg' + assert results['ori_filename'] == 'tests/data/color.jpg' + assert results['img'].shape == (288, 512, 3) + + # to_float32 + transform = LoadImageFromFile(to_float32=True) + results = transform(copy.deepcopy(results)) + assert results['img'].dtype == np.float32 + + # gray image + results = dict( + img_prefix=self.data_prefix, img_info=dict(filename='gray.jpg')) + transform = LoadImageFromFile() + results = transform(copy.deepcopy(results)) + assert results['img'].shape == (288, 512, 3) + assert results['img'].dtype == np.uint8 + + transform = LoadImageFromFile(color_type='unchanged') + results = transform(copy.deepcopy(results)) + assert results['img'].shape == (288, 512) + assert results['img'].dtype == np.uint8 + + def test_load_multi_channel_img(self): + results = dict( + img_prefix=self.data_prefix, + img_info=dict(filename=['color.jpg', 'color.jpg'])) + transform = LoadMultiChannelImageFromFiles() + results = transform(copy.deepcopy(results)) + assert results['filename'] == [ + osp.join(self.data_prefix, 'color.jpg'), + osp.join(self.data_prefix, 'color.jpg') + ] + assert results['ori_filename'] == ['color.jpg', 'color.jpg'] + assert results['img'].shape == (288, 512, 3, 2) + assert results['img'].dtype == np.uint8 + assert results['img_shape'] == (288, 512, 3, 2) + assert results['ori_shape'] == (288, 512, 3, 2) + assert results['pad_shape'] == (288, 512, 3, 2) + assert results['scale_factor'] == 1.0 + assert repr(transform) == transform.__class__.__name__ + \ + "(to_float32=False, color_type='unchanged', " + \ + "file_client_args={'backend': 'disk'})" + + def test_load_webcam_img(self): + img = mmcv.imread(osp.join(self.data_prefix, 'color.jpg')) + results = dict(img=img) + transform = LoadImageFromWebcam() + results = transform(copy.deepcopy(results)) + assert results['filename'] is None + assert results['ori_filename'] is None + assert results['img'].shape == (288, 512, 3) + assert results['img'].dtype == np.uint8 + assert results['img_shape'] == (288, 512, 3) + assert results['ori_shape'] == (288, 512, 3) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_models_aug_test.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_models_aug_test.py new file mode 100644 index 00000000..a6acf5db --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_models_aug_test.py @@ -0,0 +1,120 @@ +import os.path as osp + +import mmcv +import torch +from mmcv.parallel import collate +from mmcv.utils import build_from_cfg + +from mmdet.datasets.builder import PIPELINES +from mmdet.models import build_detector + + +def model_aug_test_template(cfg_file): + # get config + cfg = mmcv.Config.fromfile(cfg_file) + # init model + cfg.model.pretrained = None + cfg.model.train_cfg = None + model = build_detector(cfg.model) + + # init test pipeline and set aug test + load_cfg, multi_scale_cfg = cfg.test_pipeline + multi_scale_cfg['flip'] = True + multi_scale_cfg['img_scale'] = [(1333, 800), (800, 600), (640, 480)] + + load = build_from_cfg(load_cfg, PIPELINES) + transform = build_from_cfg(multi_scale_cfg, PIPELINES) + + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + results = transform(load(results)) + assert len(results['img']) == 6 + assert len(results['img_metas']) == 6 + + results['img'] = [collate([x]) for x in results['img']] + results['img_metas'] = [collate([x]).data[0] for x in results['img_metas']] + # aug test the model + model.eval() + with torch.no_grad(): + aug_result = model(return_loss=False, rescale=True, **results) + return aug_result + + +def test_aug_test_size(): + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + + # Define simple pipeline + load = dict(type='LoadImageFromFile') + load = build_from_cfg(load, PIPELINES) + + # get config + transform = dict( + type='MultiScaleFlipAug', + transforms=[], + img_scale=[(1333, 800), (800, 600), (640, 480)], + flip=True, + flip_direction=['horizontal', 'vertical']) + multi_aug_test_module = build_from_cfg(transform, PIPELINES) + + results = load(results) + results = multi_aug_test_module(load(results)) + # len(["original", "horizontal", "vertical"]) * + # len([(1333, 800), (800, 600), (640, 480)]) + assert len(results['img']) == 9 + + +def test_cascade_rcnn_aug_test(): + aug_result = model_aug_test_template( + 'configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py') + assert len(aug_result[0]) == 80 + + +def test_mask_rcnn_aug_test(): + aug_result = model_aug_test_template( + 'configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py') + assert len(aug_result[0]) == 2 + assert len(aug_result[0][0]) == 80 + assert len(aug_result[0][1]) == 80 + + +def test_htc_aug_test(): + aug_result = model_aug_test_template('configs/htc/htc_r50_fpn_1x_coco.py') + assert len(aug_result[0]) == 2 + assert len(aug_result[0][0]) == 80 + assert len(aug_result[0][1]) == 80 + + +def test_cornernet_aug_test(): + # get config + cfg = mmcv.Config.fromfile( + 'configs/cornernet/cornernet_hourglass104_mstest_10x5_210e_coco.py') + # init model + cfg.model.pretrained = None + cfg.model.train_cfg = None + model = build_detector(cfg.model) + + # init test pipeline and set aug test + load_cfg, multi_scale_cfg = cfg.test_pipeline + multi_scale_cfg['flip'] = True + multi_scale_cfg['scale_factor'] = [0.5, 1.0, 2.0] + + load = build_from_cfg(load_cfg, PIPELINES) + transform = build_from_cfg(multi_scale_cfg, PIPELINES) + + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + results = transform(load(results)) + assert len(results['img']) == 6 + assert len(results['img_metas']) == 6 + + results['img'] = [collate([x]) for x in results['img']] + results['img_metas'] = [collate([x]).data[0] for x in results['img_metas']] + # aug test the model + model.eval() + with torch.no_grad(): + aug_result = model(return_loss=False, rescale=True, **results) + assert len(aug_result[0]) == 80 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_rotate.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_rotate.py new file mode 100644 index 00000000..c440451a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_rotate.py @@ -0,0 +1,224 @@ +import copy + +import numpy as np +import pytest +from mmcv.utils import build_from_cfg + +from mmdet.core.mask import BitmapMasks, PolygonMasks +from mmdet.datasets.builder import PIPELINES + + +def construct_toy_data(poly2mask=True): + img = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=np.uint8) + img = np.stack([img, img, img], axis=-1) + results = dict() + # image + results['img'] = img + results['img_shape'] = img.shape + results['img_fields'] = ['img'] + # bboxes + results['bbox_fields'] = ['gt_bboxes', 'gt_bboxes_ignore'] + results['gt_bboxes'] = np.array([[0., 0., 2., 1.]], dtype=np.float32) + results['gt_bboxes_ignore'] = np.array([[2., 0., 3., 1.]], + dtype=np.float32) + # labels + results['gt_labels'] = np.array([1], dtype=np.int64) + # masks + results['mask_fields'] = ['gt_masks'] + if poly2mask: + gt_masks = np.array([[0, 1, 1, 0], [0, 1, 0, 0]], + dtype=np.uint8)[None, :, :] + results['gt_masks'] = BitmapMasks(gt_masks, 2, 4) + else: + raw_masks = [[np.array([0, 0, 2, 0, 2, 1, 0, 1], dtype=np.float)]] + results['gt_masks'] = PolygonMasks(raw_masks, 2, 4) + # segmentations + results['seg_fields'] = ['gt_semantic_seg'] + results['gt_semantic_seg'] = img[..., 0] + return results + + +def _check_fields(results, results_rotated, keys): + for key in keys: + if isinstance(results[key], (BitmapMasks, PolygonMasks)): + assert np.equal(results[key].to_ndarray(), + results_rotated[key].to_ndarray()).all() + else: + assert np.equal(results[key], results_rotated[key]).all() + + +def check_rotate(results, results_rotated): + # check image + _check_fields(results, results_rotated, results.get('img_fields', ['img'])) + # check bboxes + _check_fields(results, results_rotated, results.get('bbox_fields', [])) + # check masks + _check_fields(results, results_rotated, results.get('mask_fields', [])) + # check segmentations + _check_fields(results, results_rotated, results.get('seg_fields', [])) + # _check gt_labels + if 'gt_labels' in results: + assert np.equal(results['gt_labels'], + results_rotated['gt_labels']).all() + + +def test_rotate(): + # test assertion for invalid type of max_rotate_angle + with pytest.raises(AssertionError): + transform = dict(type='Rotate', level=1, max_rotate_angle=(30, )) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid type of scale + with pytest.raises(AssertionError): + transform = dict(type='Rotate', level=2, scale=(1.2, )) + build_from_cfg(transform, PIPELINES) + + # test ValueError for invalid type of img_fill_val + with pytest.raises(ValueError): + transform = dict( + type='Rotate', level=2, img_fill_val=[ + 128, + ]) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid number of elements in center + with pytest.raises(AssertionError): + transform = dict(type='Rotate', level=2, center=(0.5, )) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid type of center + with pytest.raises(AssertionError): + transform = dict(type='Rotate', level=2, center=[0, 0]) + build_from_cfg(transform, PIPELINES) + + # test case when no rotate aug (level=0) + results = construct_toy_data() + img_fill_val = (104, 116, 124) + seg_ignore_label = 255 + transform = dict( + type='Rotate', + level=0, + prob=1., + img_fill_val=img_fill_val, + seg_ignore_label=seg_ignore_label, + ) + rotate_module = build_from_cfg(transform, PIPELINES) + results_wo_rotate = rotate_module(copy.deepcopy(results)) + check_rotate(results, results_wo_rotate) + + # test case when no rotate aug (prob<=0) + transform = dict( + type='Rotate', level=10, prob=0., img_fill_val=img_fill_val, scale=0.6) + rotate_module = build_from_cfg(transform, PIPELINES) + results_wo_rotate = rotate_module(copy.deepcopy(results)) + check_rotate(results, results_wo_rotate) + + # test clockwise rotation with angle 90 + results = construct_toy_data() + img_fill_val = 128 + transform = dict( + type='Rotate', + level=10, + max_rotate_angle=90, + img_fill_val=img_fill_val, + # set random_negative_prob to 0 for clockwise rotation + random_negative_prob=0., + prob=1.) + rotate_module = build_from_cfg(transform, PIPELINES) + results_rotated = rotate_module(copy.deepcopy(results)) + img_r = np.array([[img_fill_val, 6, 2, img_fill_val], + [img_fill_val, 7, 3, img_fill_val]]).astype(np.uint8) + img_r = np.stack([img_r, img_r, img_r], axis=-1) + results_gt = copy.deepcopy(results) + results_gt['img'] = img_r + results_gt['gt_bboxes'] = np.array([[1., 0., 2., 1.]], dtype=np.float32) + results_gt['gt_bboxes_ignore'] = np.empty((0, 4), dtype=np.float32) + gt_masks = np.array([[0, 1, 1, 0], [0, 0, 1, 0]], + dtype=np.uint8)[None, :, :] + results_gt['gt_masks'] = BitmapMasks(gt_masks, 2, 4) + results_gt['gt_semantic_seg'] = np.array( + [[255, 6, 2, 255], [255, 7, 3, + 255]]).astype(results['gt_semantic_seg'].dtype) + check_rotate(results_gt, results_rotated) + + # test clockwise rotation with angle 90, PolygonMasks + results = construct_toy_data(poly2mask=False) + results_rotated = rotate_module(copy.deepcopy(results)) + gt_masks = [[np.array([2, 0, 2, 1, 1, 1, 1, 0], dtype=np.float)]] + results_gt['gt_masks'] = PolygonMasks(gt_masks, 2, 4) + check_rotate(results_gt, results_rotated) + + # test counter-clockwise roatation with angle 90, + # and specify the ratation center + img_fill_val = (104, 116, 124) + transform = dict( + type='Rotate', + level=10, + max_rotate_angle=90, + center=(0, 0), + img_fill_val=img_fill_val, + # set random_negative_prob to 1 for counter-clockwise rotation + random_negative_prob=1., + prob=1.) + results = construct_toy_data() + rotate_module = build_from_cfg(transform, PIPELINES) + results_rotated = rotate_module(copy.deepcopy(results)) + results_gt = copy.deepcopy(results) + h, w = results['img'].shape[:2] + img_r = np.stack([ + np.ones((h, w)) * img_fill_val[0], + np.ones((h, w)) * img_fill_val[1], + np.ones((h, w)) * img_fill_val[2] + ], + axis=-1).astype(np.uint8) + img_r[0, 0, :] = 1 + img_r[0, 1, :] = 5 + results_gt['img'] = img_r + results_gt['gt_bboxes'] = np.empty((0, 4), dtype=np.float32) + results_gt['gt_bboxes_ignore'] = np.empty((0, 4), dtype=np.float32) + results_gt['gt_labels'] = np.empty((0, ), dtype=np.int64) + gt_masks = np.empty((0, h, w), dtype=np.uint8) + results_gt['gt_masks'] = BitmapMasks(gt_masks, h, w) + gt_seg = (np.ones((h, w)) * 255).astype(results['gt_semantic_seg'].dtype) + gt_seg[0, 0], gt_seg[0, 1] = 1, 5 + results_gt['gt_semantic_seg'] = gt_seg + check_rotate(results_gt, results_rotated) + + transform = dict( + type='Rotate', + level=10, + max_rotate_angle=90, + center=(0), + img_fill_val=img_fill_val, + random_negative_prob=1., + prob=1.) + rotate_module = build_from_cfg(transform, PIPELINES) + results_rotated = rotate_module(copy.deepcopy(results)) + check_rotate(results_gt, results_rotated) + + # test counter-clockwise roatation with angle 90, + # and specify the ratation center, PolygonMasks + results = construct_toy_data(poly2mask=False) + results_rotated = rotate_module(copy.deepcopy(results)) + gt_masks = [[np.array([0, 0, 0, 0, 1, 0, 1, 0], dtype=np.float)]] + results_gt['gt_masks'] = PolygonMasks(gt_masks, 2, 4) + check_rotate(results_gt, results_rotated) + + # test AutoAugment equipped with Rotate + policies = [[dict(type='Rotate', level=10, prob=1.)]] + autoaug = dict(type='AutoAugment', policies=policies) + autoaug_module = build_from_cfg(autoaug, PIPELINES) + autoaug_module(copy.deepcopy(results)) + + policies = [[ + dict(type='Rotate', level=10, prob=1.), + dict( + type='Rotate', + level=8, + max_rotate_angle=90, + center=(0), + img_fill_val=img_fill_val) + ]] + autoaug = dict(type='AutoAugment', policies=policies) + autoaug_module = build_from_cfg(autoaug, PIPELINES) + autoaug_module(copy.deepcopy(results)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_sampler.py new file mode 100644 index 00000000..1ba5c562 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_sampler.py @@ -0,0 +1,328 @@ +import torch + +from mmdet.core.bbox.assigners import MaxIoUAssigner +from mmdet.core.bbox.samplers import (OHEMSampler, RandomSampler, + ScoreHLRSampler) + + +def test_random_sampler(): + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_labels = torch.LongTensor([1, 2]) + gt_bboxes_ignore = torch.Tensor([ + [30, 30, 40, 40], + ]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + + sampler = RandomSampler( + num=10, pos_fraction=0.5, neg_pos_ub=-1, add_gt_as_proposals=True) + + sample_result = sampler.sample(assign_result, bboxes, gt_bboxes, gt_labels) + + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + +def test_random_sampler_empty_gt(): + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.empty(0, 4) + gt_labels = torch.empty(0, ).long() + assign_result = assigner.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + + sampler = RandomSampler( + num=10, pos_fraction=0.5, neg_pos_ub=-1, add_gt_as_proposals=True) + + sample_result = sampler.sample(assign_result, bboxes, gt_bboxes, gt_labels) + + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + +def test_random_sampler_empty_pred(): + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.empty(0, 4) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_labels = torch.LongTensor([1, 2]) + assign_result = assigner.assign(bboxes, gt_bboxes, gt_labels=gt_labels) + + sampler = RandomSampler( + num=10, pos_fraction=0.5, neg_pos_ub=-1, add_gt_as_proposals=True) + + sample_result = sampler.sample(assign_result, bboxes, gt_bboxes, gt_labels) + + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + +def _context_for_ohem(): + import sys + from os.path import dirname + sys.path.insert(0, dirname(dirname(dirname(__file__)))) + from test_forward import _get_detector_cfg + + model = _get_detector_cfg( + 'faster_rcnn/faster_rcnn_r50_fpn_ohem_1x_coco.py') + model['pretrained'] = None + + from mmdet.models import build_detector + context = build_detector(model).roi_head + return context + + +def test_ohem_sampler(): + + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 9], + [0, 10, 10, 19], + ]) + gt_labels = torch.LongTensor([1, 2]) + gt_bboxes_ignore = torch.Tensor([ + [30, 30, 40, 40], + ]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + + context = _context_for_ohem() + + sampler = OHEMSampler( + num=10, + pos_fraction=0.5, + context=context, + neg_pos_ub=-1, + add_gt_as_proposals=True) + + feats = [torch.rand(1, 256, int(2**i), int(2**i)) for i in [6, 5, 4, 3, 2]] + sample_result = sampler.sample( + assign_result, bboxes, gt_bboxes, gt_labels, feats=feats) + + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + +def test_ohem_sampler_empty_gt(): + + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.empty(0, 4) + gt_labels = torch.LongTensor([]) + gt_bboxes_ignore = torch.Tensor([]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + + context = _context_for_ohem() + + sampler = OHEMSampler( + num=10, + pos_fraction=0.5, + context=context, + neg_pos_ub=-1, + add_gt_as_proposals=True) + + feats = [torch.rand(1, 256, int(2**i), int(2**i)) for i in [6, 5, 4, 3, 2]] + + sample_result = sampler.sample( + assign_result, bboxes, gt_bboxes, gt_labels, feats=feats) + + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + +def test_ohem_sampler_empty_pred(): + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + bboxes = torch.empty(0, 4) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_labels = torch.LongTensor([1, 2, 2, 3]) + gt_bboxes_ignore = torch.Tensor([]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + + context = _context_for_ohem() + + sampler = OHEMSampler( + num=10, + pos_fraction=0.5, + context=context, + neg_pos_ub=-1, + add_gt_as_proposals=True) + + feats = [torch.rand(1, 256, int(2**i), int(2**i)) for i in [6, 5, 4, 3, 2]] + + sample_result = sampler.sample( + assign_result, bboxes, gt_bboxes, gt_labels, feats=feats) + + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + +def test_random_sample_result(): + from mmdet.core.bbox.samplers.sampling_result import SamplingResult + SamplingResult.random(num_gts=0, num_preds=0) + SamplingResult.random(num_gts=0, num_preds=3) + SamplingResult.random(num_gts=3, num_preds=3) + SamplingResult.random(num_gts=0, num_preds=3) + SamplingResult.random(num_gts=7, num_preds=7) + SamplingResult.random(num_gts=7, num_preds=64) + SamplingResult.random(num_gts=24, num_preds=3) + + for i in range(3): + SamplingResult.random(rng=i) + + +def test_score_hlr_sampler_empty_pred(): + assigner = MaxIoUAssigner( + pos_iou_thr=0.5, + neg_iou_thr=0.5, + ignore_iof_thr=0.5, + ignore_wrt_candidates=False, + ) + context = _context_for_ohem() + sampler = ScoreHLRSampler( + num=10, + pos_fraction=0.5, + context=context, + neg_pos_ub=-1, + add_gt_as_proposals=True) + gt_bboxes_ignore = torch.Tensor([]) + feats = [torch.rand(1, 256, int(2**i), int(2**i)) for i in [6, 5, 4, 3, 2]] + + # empty bbox + bboxes = torch.empty(0, 4) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_labels = torch.LongTensor([1, 2, 2, 3]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + sample_result, _ = sampler.sample( + assign_result, bboxes, gt_bboxes, gt_labels, feats=feats) + assert len(sample_result.neg_inds) == 0 + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + # empty gt + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.empty(0, 4) + gt_labels = torch.LongTensor([]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + sample_result, _ = sampler.sample( + assign_result, bboxes, gt_bboxes, gt_labels, feats=feats) + assert len(sample_result.pos_inds) == 0 + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) + + # non-empty input + bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_bboxes = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [5, 5, 15, 15], + [32, 32, 38, 42], + ]) + gt_labels = torch.LongTensor([1, 2, 2, 3]) + assign_result = assigner.assign( + bboxes, + gt_bboxes, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=gt_labels) + sample_result, _ = sampler.sample( + assign_result, bboxes, gt_bboxes, gt_labels, feats=feats) + assert len(sample_result.pos_bboxes) == len(sample_result.pos_inds) + assert len(sample_result.neg_bboxes) == len(sample_result.neg_inds) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_shear.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_shear.py new file mode 100644 index 00000000..3d638125 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_shear.py @@ -0,0 +1,217 @@ +import copy + +import numpy as np +import pytest +from mmcv.utils import build_from_cfg + +from mmdet.core.mask import BitmapMasks, PolygonMasks +from mmdet.datasets.builder import PIPELINES + + +def construct_toy_data(poly2mask=True): + img = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=np.uint8) + img = np.stack([img, img, img], axis=-1) + results = dict() + # image + results['img'] = img + results['img_shape'] = img.shape + results['img_fields'] = ['img'] + # bboxes + results['bbox_fields'] = ['gt_bboxes', 'gt_bboxes_ignore'] + results['gt_bboxes'] = np.array([[0., 0., 2., 1.]], dtype=np.float32) + results['gt_bboxes_ignore'] = np.array([[2., 0., 3., 1.]], + dtype=np.float32) + # labels + results['gt_labels'] = np.array([1], dtype=np.int64) + # masks + results['mask_fields'] = ['gt_masks'] + if poly2mask: + gt_masks = np.array([[0, 1, 1, 0], [0, 1, 0, 0]], + dtype=np.uint8)[None, :, :] + results['gt_masks'] = BitmapMasks(gt_masks, 2, 4) + else: + raw_masks = [[np.array([1, 0, 2, 0, 2, 1, 1, 1], dtype=np.float)]] + results['gt_masks'] = PolygonMasks(raw_masks, 2, 4) + + # segmentations + results['seg_fields'] = ['gt_semantic_seg'] + results['gt_semantic_seg'] = img[..., 0] + return results + + +def _check_fields(results, results_sheared, keys): + for key in keys: + if isinstance(results[key], (BitmapMasks, PolygonMasks)): + assert np.equal(results[key].to_ndarray(), + results_sheared[key].to_ndarray()).all() + else: + assert np.equal(results[key], results_sheared[key]).all() + + +def check_shear(results, results_sheared): + # _check_keys(results, results_sheared) + # check image + _check_fields(results, results_sheared, results.get('img_fields', ['img'])) + # check bboxes + _check_fields(results, results_sheared, results.get('bbox_fields', [])) + # check masks + _check_fields(results, results_sheared, results.get('mask_fields', [])) + # check segmentations + _check_fields(results, results_sheared, results.get('seg_fields', [])) + # check gt_labels + if 'gt_labels' in results: + assert np.equal(results['gt_labels'], + results_sheared['gt_labels']).all() + + +def test_shear(): + # test assertion for invalid type of max_shear_magnitude + with pytest.raises(AssertionError): + transform = dict(type='Shear', level=1, max_shear_magnitude=(0.5, )) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid value of max_shear_magnitude + with pytest.raises(AssertionError): + transform = dict(type='Shear', level=2, max_shear_magnitude=1.2) + build_from_cfg(transform, PIPELINES) + + # test ValueError for invalid type of img_fill_val + with pytest.raises(ValueError): + transform = dict(type='Shear', level=2, img_fill_val=[128]) + build_from_cfg(transform, PIPELINES) + + results = construct_toy_data() + # test case when no shear aug (level=0, direction='horizontal') + img_fill_val = (104, 116, 124) + seg_ignore_label = 255 + transform = dict( + type='Shear', + level=0, + prob=1., + img_fill_val=img_fill_val, + seg_ignore_label=seg_ignore_label, + direction='horizontal') + shear_module = build_from_cfg(transform, PIPELINES) + results_wo_shear = shear_module(copy.deepcopy(results)) + check_shear(results, results_wo_shear) + + # test case when no shear aug (level=0, direction='vertical') + transform = dict( + type='Shear', + level=0, + prob=1., + img_fill_val=img_fill_val, + seg_ignore_label=seg_ignore_label, + direction='vertical') + shear_module = build_from_cfg(transform, PIPELINES) + results_wo_shear = shear_module(copy.deepcopy(results)) + check_shear(results, results_wo_shear) + + # test case when no shear aug (prob<=0) + transform = dict( + type='Shear', + level=10, + prob=0., + img_fill_val=img_fill_val, + direction='vertical') + shear_module = build_from_cfg(transform, PIPELINES) + results_wo_shear = shear_module(copy.deepcopy(results)) + check_shear(results, results_wo_shear) + + # test shear horizontally, magnitude=1 + transform = dict( + type='Shear', + level=10, + prob=1., + img_fill_val=img_fill_val, + direction='horizontal', + max_shear_magnitude=1., + random_negative_prob=0.) + shear_module = build_from_cfg(transform, PIPELINES) + results_sheared = shear_module(copy.deepcopy(results)) + results_gt = copy.deepcopy(results) + img_s = np.array([[1, 2, 3, 4], [0, 5, 6, 7]], dtype=np.uint8) + img_s = np.stack([img_s, img_s, img_s], axis=-1) + img_s[1, 0, :] = np.array(img_fill_val) + results_gt['img'] = img_s + results_gt['gt_bboxes'] = np.array([[0., 0., 3., 1.]], dtype=np.float32) + results_gt['gt_bboxes_ignore'] = np.array([[2., 0., 4., 1.]], + dtype=np.float32) + gt_masks = np.array([[0, 1, 1, 0], [0, 0, 1, 0]], + dtype=np.uint8)[None, :, :] + results_gt['gt_masks'] = BitmapMasks(gt_masks, 2, 4) + results_gt['gt_semantic_seg'] = np.array( + [[1, 2, 3, 4], [255, 5, 6, 7]], dtype=results['gt_semantic_seg'].dtype) + check_shear(results_gt, results_sheared) + + # test PolygonMasks with shear horizontally, magnitude=1 + results = construct_toy_data(poly2mask=False) + results_sheared = shear_module(copy.deepcopy(results)) + gt_masks = [[np.array([1, 0, 2, 0, 3, 1, 2, 1], dtype=np.float)]] + results_gt['gt_masks'] = PolygonMasks(gt_masks, 2, 4) + check_shear(results_gt, results_sheared) + + # test shear vertically, magnitude=-1 + img_fill_val = 128 + results = construct_toy_data() + transform = dict( + type='Shear', + level=10, + prob=1., + img_fill_val=img_fill_val, + direction='vertical', + max_shear_magnitude=1., + random_negative_prob=1.) + shear_module = build_from_cfg(transform, PIPELINES) + results_sheared = shear_module(copy.deepcopy(results)) + results_gt = copy.deepcopy(results) + img_s = np.array([[1, 6, img_fill_val, img_fill_val], + [5, img_fill_val, img_fill_val, img_fill_val]], + dtype=np.uint8) + img_s = np.stack([img_s, img_s, img_s], axis=-1) + results_gt['img'] = img_s + results_gt['gt_bboxes'] = np.empty((0, 4), dtype=np.float32) + results_gt['gt_labels'] = np.empty((0, ), dtype=np.int64) + results_gt['gt_bboxes_ignore'] = np.empty((0, 4), dtype=np.float32) + gt_masks = np.array([[0, 1, 0, 0], [0, 0, 0, 0]], + dtype=np.uint8)[None, :, :] + results_gt['gt_masks'] = BitmapMasks(gt_masks, 2, 4) + results_gt['gt_semantic_seg'] = np.array( + [[1, 6, 255, 255], [5, 255, 255, 255]], + dtype=results['gt_semantic_seg'].dtype) + check_shear(results_gt, results_sheared) + + # test PolygonMasks with shear vertically, magnitude=-1 + results = construct_toy_data(poly2mask=False) + results_sheared = shear_module(copy.deepcopy(results)) + gt_masks = [[np.array([1, 0, 2, 0, 2, 0, 1, 0], dtype=np.float)]] + results_gt['gt_masks'] = PolygonMasks(gt_masks, 2, 4) + check_shear(results_gt, results_sheared) + + results = construct_toy_data() + # same mask for BitmapMasks and PolygonMasks + results['gt_masks'] = BitmapMasks( + np.array([[0, 1, 1, 0], [0, 1, 1, 0]], dtype=np.uint8)[None, :, :], 2, + 4) + results['gt_bboxes'] = np.array([[1., 0., 2., 1.]], dtype=np.float32) + results_sheared_bitmap = shear_module(copy.deepcopy(results)) + check_shear(results_sheared_bitmap, results_sheared) + + # test AutoAugment equipped with Shear + policies = [[dict(type='Shear', level=10, prob=1.)]] + autoaug = dict(type='AutoAugment', policies=policies) + autoaug_module = build_from_cfg(autoaug, PIPELINES) + autoaug_module(copy.deepcopy(results)) + + policies = [[ + dict(type='Shear', level=10, prob=1.), + dict( + type='Shear', + level=8, + img_fill_val=img_fill_val, + direction='vertical', + max_shear_magnitude=1.) + ]] + autoaug = dict(type='AutoAugment', policies=policies) + autoaug_module = build_from_cfg(autoaug, PIPELINES) + autoaug_module(copy.deepcopy(results)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_transform.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_transform.py new file mode 100644 index 00000000..90a11ea3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_transform.py @@ -0,0 +1,752 @@ +import copy +import os.path as osp + +import mmcv +import numpy as np +import pytest +import torch +from mmcv.utils import build_from_cfg + +from mmdet.core.evaluation.bbox_overlaps import bbox_overlaps +from mmdet.datasets.builder import PIPELINES + + +def test_resize(): + # test assertion if img_scale is a list + with pytest.raises(AssertionError): + transform = dict(type='Resize', img_scale=[1333, 800], keep_ratio=True) + build_from_cfg(transform, PIPELINES) + + # test assertion if len(img_scale) while ratio_range is not None + with pytest.raises(AssertionError): + transform = dict( + type='Resize', + img_scale=[(1333, 800), (1333, 600)], + ratio_range=(0.9, 1.1), + keep_ratio=True) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid multiscale_mode + with pytest.raises(AssertionError): + transform = dict( + type='Resize', + img_scale=[(1333, 800), (1333, 600)], + keep_ratio=True, + multiscale_mode='2333') + build_from_cfg(transform, PIPELINES) + + # test assertion if both scale and scale_factor are setted + with pytest.raises(AssertionError): + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + load = dict(type='LoadImageFromFile') + load = build_from_cfg(load, PIPELINES) + transform = dict(type='Resize', img_scale=(1333, 800), keep_ratio=True) + transform = build_from_cfg(transform, PIPELINES) + results = load(results) + results['scale'] = (1333, 800) + results['scale_factor'] = 1.0 + results = transform(results) + + transform = dict(type='Resize', img_scale=(1333, 800), keep_ratio=True) + resize_module = build_from_cfg(transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + results['img'] = img + results['img2'] = copy.deepcopy(img) + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['img_fields'] = ['img', 'img2'] + + results = resize_module(results) + assert np.equal(results['img'], results['img2']).all() + + results.pop('scale') + results.pop('scale_factor') + transform = dict( + type='Resize', + img_scale=(1280, 800), + multiscale_mode='value', + keep_ratio=False) + resize_module = build_from_cfg(transform, PIPELINES) + results = resize_module(results) + assert np.equal(results['img'], results['img2']).all() + assert results['img_shape'] == (800, 1280, 3) + + +def test_flip(): + # test assertion for invalid flip_ratio + with pytest.raises(AssertionError): + transform = dict(type='RandomFlip', flip_ratio=1.5) + build_from_cfg(transform, PIPELINES) + # test assertion for 0 <= sum(flip_ratio) <= 1 + with pytest.raises(AssertionError): + transform = dict( + type='RandomFlip', + flip_ratio=[0.7, 0.8], + direction=['horizontal', 'vertical']) + build_from_cfg(transform, PIPELINES) + + # test assertion for mismatch between number of flip_ratio and direction + with pytest.raises(AssertionError): + transform = dict(type='RandomFlip', flip_ratio=[0.4, 0.5]) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid direction + with pytest.raises(AssertionError): + transform = dict( + type='RandomFlip', flip_ratio=1., direction='horizonta') + build_from_cfg(transform, PIPELINES) + + transform = dict(type='RandomFlip', flip_ratio=1.) + flip_module = build_from_cfg(transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + original_img = copy.deepcopy(img) + results['img'] = img + results['img2'] = copy.deepcopy(img) + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + results['img_fields'] = ['img', 'img2'] + + results = flip_module(results) + assert np.equal(results['img'], results['img2']).all() + + flip_module = build_from_cfg(transform, PIPELINES) + results = flip_module(results) + assert np.equal(results['img'], results['img2']).all() + assert np.equal(original_img, results['img']).all() + + # test flip_ratio is float, direction is list + transform = dict( + type='RandomFlip', + flip_ratio=0.9, + direction=['horizontal', 'vertical', 'diagonal']) + flip_module = build_from_cfg(transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + original_img = copy.deepcopy(img) + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + results['img_fields'] = ['img'] + results = flip_module(results) + if results['flip']: + assert np.array_equal( + mmcv.imflip(original_img, results['flip_direction']), + results['img']) + else: + assert np.array_equal(original_img, results['img']) + + # test flip_ratio is list, direction is list + transform = dict( + type='RandomFlip', + flip_ratio=[0.3, 0.3, 0.2], + direction=['horizontal', 'vertical', 'diagonal']) + flip_module = build_from_cfg(transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + original_img = copy.deepcopy(img) + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + results['img_fields'] = ['img'] + results = flip_module(results) + if results['flip']: + assert np.array_equal( + mmcv.imflip(original_img, results['flip_direction']), + results['img']) + else: + assert np.array_equal(original_img, results['img']) + + +def test_random_crop(): + # test assertion for invalid random crop + with pytest.raises(AssertionError): + transform = dict(type='RandomCrop', crop_size=(-1, 0)) + build_from_cfg(transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + results['img'] = img + + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # TODO: add img_fields test + results['bbox_fields'] = ['gt_bboxes', 'gt_bboxes_ignore'] + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + + def create_random_bboxes(num_bboxes, img_w, img_h): + bboxes_left_top = np.random.uniform(0, 0.5, size=(num_bboxes, 2)) + bboxes_right_bottom = np.random.uniform(0.5, 1, size=(num_bboxes, 2)) + bboxes = np.concatenate((bboxes_left_top, bboxes_right_bottom), 1) + bboxes = (bboxes * np.array([img_w, img_h, img_w, img_h])).astype( + np.int) + return bboxes + + h, w, _ = img.shape + gt_bboxes = create_random_bboxes(8, w, h) + gt_bboxes_ignore = create_random_bboxes(2, w, h) + results['gt_bboxes'] = gt_bboxes + results['gt_bboxes_ignore'] = gt_bboxes_ignore + transform = dict(type='RandomCrop', crop_size=(h - 20, w - 20)) + crop_module = build_from_cfg(transform, PIPELINES) + results = crop_module(results) + assert results['img'].shape[:2] == (h - 20, w - 20) + # All bboxes should be reserved after crop + assert results['img_shape'][:2] == (h - 20, w - 20) + assert results['gt_bboxes'].shape[0] == 8 + assert results['gt_bboxes_ignore'].shape[0] == 2 + + def area(bboxes): + return np.prod(bboxes[:, 2:4] - bboxes[:, 0:2], axis=1) + + assert (area(results['gt_bboxes']) <= area(gt_bboxes)).all() + assert (area(results['gt_bboxes_ignore']) <= area(gt_bboxes_ignore)).all() + + # test assertion for invalid crop_type + with pytest.raises(ValueError): + transform = dict( + type='RandomCrop', crop_size=(1, 1), crop_type='unknown') + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid crop_size + with pytest.raises(AssertionError): + transform = dict( + type='RandomCrop', crop_type='relative', crop_size=(0, 0)) + build_from_cfg(transform, PIPELINES) + + def _construct_toy_data(): + img = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype=np.uint8) + img = np.stack([img, img, img], axis=-1) + results = dict() + # image + results['img'] = img + results['img_shape'] = img.shape + results['img_fields'] = ['img'] + # bboxes + results['bbox_fields'] = ['gt_bboxes', 'gt_bboxes_ignore'] + results['gt_bboxes'] = np.array([[0., 0., 2., 1.]], dtype=np.float32) + results['gt_bboxes_ignore'] = np.array([[2., 0., 3., 1.]], + dtype=np.float32) + # labels + results['gt_labels'] = np.array([1], dtype=np.int64) + return results + + # test crop_type "relative_range" + results = _construct_toy_data() + transform = dict( + type='RandomCrop', + crop_type='relative_range', + crop_size=(0.3, 0.7), + allow_negative_crop=True) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + h, w = results_transformed['img_shape'][:2] + assert int(2 * 0.3 + 0.5) <= h <= int(2 * 1 + 0.5) + assert int(4 * 0.7 + 0.5) <= w <= int(4 * 1 + 0.5) + + # test crop_type "relative" + transform = dict( + type='RandomCrop', + crop_type='relative', + crop_size=(0.3, 0.7), + allow_negative_crop=True) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + h, w = results_transformed['img_shape'][:2] + assert h == int(2 * 0.3 + 0.5) and w == int(4 * 0.7 + 0.5) + + # test crop_type "absolute" + transform = dict( + type='RandomCrop', + crop_type='absolute', + crop_size=(1, 2), + allow_negative_crop=True) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + h, w = results_transformed['img_shape'][:2] + assert h == 1 and w == 2 + + # test crop_type "absolute_range" + transform = dict( + type='RandomCrop', + crop_type='absolute_range', + crop_size=(1, 20), + allow_negative_crop=True) + transform_module = build_from_cfg(transform, PIPELINES) + results_transformed = transform_module(copy.deepcopy(results)) + h, w = results_transformed['img_shape'][:2] + assert 1 <= h <= 2 and 1 <= w <= 4 + + +def test_min_iou_random_crop(): + + def create_random_bboxes(num_bboxes, img_w, img_h): + bboxes_left_top = np.random.uniform(0, 0.5, size=(num_bboxes, 2)) + bboxes_right_bottom = np.random.uniform(0.5, 1, size=(num_bboxes, 2)) + bboxes = np.concatenate((bboxes_left_top, bboxes_right_bottom), 1) + bboxes = (bboxes * np.array([img_w, img_h, img_w, img_h])).astype( + np.int) + return bboxes + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + results['img'] = img + + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + results['bbox_fields'] = ['gt_bboxes', 'gt_bboxes_ignore'] + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + h, w, _ = img.shape + gt_bboxes = create_random_bboxes(1, w, h) + gt_bboxes_ignore = create_random_bboxes(1, w, h) + results['gt_bboxes'] = gt_bboxes + results['gt_bboxes_ignore'] = gt_bboxes_ignore + transform = dict(type='MinIoURandomCrop') + crop_module = build_from_cfg(transform, PIPELINES) + + # Test for img_fields + results_test = copy.deepcopy(results) + results_test['img1'] = results_test['img'] + results_test['img_fields'] = ['img', 'img1'] + with pytest.raises(AssertionError): + crop_module(results_test) + results = crop_module(results) + patch = np.array([0, 0, results['img_shape'][1], results['img_shape'][0]]) + ious = bbox_overlaps(patch.reshape(-1, 4), + results['gt_bboxes']).reshape(-1) + ious_ignore = bbox_overlaps( + patch.reshape(-1, 4), results['gt_bboxes_ignore']).reshape(-1) + mode = crop_module.mode + if mode == 1: + assert np.equal(results['gt_bboxes'], gt_bboxes).all() + assert np.equal(results['gt_bboxes_ignore'], gt_bboxes_ignore).all() + else: + assert (ious >= mode).all() + assert (ious_ignore >= mode).all() + + +def test_pad(): + # test assertion if both size_divisor and size is None + with pytest.raises(AssertionError): + transform = dict(type='Pad') + build_from_cfg(transform, PIPELINES) + + transform = dict(type='Pad', size_divisor=32) + transform = build_from_cfg(transform, PIPELINES) + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + original_img = copy.deepcopy(img) + results['img'] = img + results['img2'] = copy.deepcopy(img) + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + results['img_fields'] = ['img', 'img2'] + + results = transform(results) + assert np.equal(results['img'], results['img2']).all() + # original img already divisible by 32 + assert np.equal(results['img'], original_img).all() + img_shape = results['img'].shape + assert img_shape[0] % 32 == 0 + assert img_shape[1] % 32 == 0 + + resize_transform = dict( + type='Resize', img_scale=(1333, 800), keep_ratio=True) + resize_module = build_from_cfg(resize_transform, PIPELINES) + results = resize_module(results) + results = transform(results) + img_shape = results['img'].shape + assert np.equal(results['img'], results['img2']).all() + assert img_shape[0] % 32 == 0 + assert img_shape[1] % 32 == 0 + + +def test_normalize(): + img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True) + transform = dict(type='Normalize', **img_norm_cfg) + transform = build_from_cfg(transform, PIPELINES) + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + original_img = copy.deepcopy(img) + results['img'] = img + results['img2'] = copy.deepcopy(img) + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + results['img_fields'] = ['img', 'img2'] + + results = transform(results) + assert np.equal(results['img'], results['img2']).all() + + mean = np.array(img_norm_cfg['mean']) + std = np.array(img_norm_cfg['std']) + converted_img = (original_img[..., ::-1] - mean) / std + assert np.allclose(results['img'], converted_img) + + +def test_albu_transform(): + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + + # Define simple pipeline + load = dict(type='LoadImageFromFile') + load = build_from_cfg(load, PIPELINES) + + albu_transform = dict( + type='Albu', transforms=[dict(type='ChannelShuffle', p=1)]) + albu_transform = build_from_cfg(albu_transform, PIPELINES) + + normalize = dict(type='Normalize', mean=[0] * 3, std=[0] * 3, to_rgb=True) + normalize = build_from_cfg(normalize, PIPELINES) + + # Execute transforms + results = load(results) + results = albu_transform(results) + results = normalize(results) + + assert results['img'].dtype == np.float32 + + +def test_random_center_crop_pad(): + # test assertion for invalid crop_size while test_mode=False + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=(-1, 0), + test_mode=False, + test_pad_mode=None) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid ratios while test_mode=False + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=(511, 511), + ratios=(1.0), + test_mode=False, + test_pad_mode=None) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid mean, std and to_rgb + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=(511, 511), + mean=None, + std=None, + to_rgb=None, + test_mode=False, + test_pad_mode=None) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid crop_size while test_mode=True + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=(511, 511), + ratios=None, + border=None, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True, + test_mode=True, + test_pad_mode=('logical_or', 127)) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid ratios while test_mode=True + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=None, + ratios=(0.9, 1.0, 1.1), + border=None, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True, + test_mode=True, + test_pad_mode=('logical_or', 127)) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid border while test_mode=True + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=None, + ratios=None, + border=128, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True, + test_mode=True, + test_pad_mode=('logical_or', 127)) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid test_pad_mode while test_mode=True + with pytest.raises(AssertionError): + transform = dict( + type='RandomCenterCropPad', + crop_size=None, + ratios=None, + border=None, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True, + test_mode=True, + test_pad_mode=('do_nothing', 100)) + build_from_cfg(transform, PIPELINES) + + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + + load = dict(type='LoadImageFromFile', to_float32=True) + load = build_from_cfg(load, PIPELINES) + results = load(results) + test_results = copy.deepcopy(results) + + def create_random_bboxes(num_bboxes, img_w, img_h): + bboxes_left_top = np.random.uniform(0, 0.5, size=(num_bboxes, 2)) + bboxes_right_bottom = np.random.uniform(0.5, 1, size=(num_bboxes, 2)) + bboxes = np.concatenate((bboxes_left_top, bboxes_right_bottom), 1) + bboxes = (bboxes * np.array([img_w, img_h, img_w, img_h])).astype( + np.int) + return bboxes + + h, w, _ = results['img_shape'] + gt_bboxes = create_random_bboxes(8, w, h) + gt_bboxes_ignore = create_random_bboxes(2, w, h) + results['gt_bboxes'] = gt_bboxes + results['gt_bboxes_ignore'] = gt_bboxes_ignore + train_transform = dict( + type='RandomCenterCropPad', + crop_size=(h - 20, w - 20), + ratios=(1.0, ), + border=128, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True, + test_mode=False, + test_pad_mode=None) + crop_module = build_from_cfg(train_transform, PIPELINES) + train_results = crop_module(results) + assert train_results['img'].shape[:2] == (h - 20, w - 20) + # All bboxes should be reserved after crop + assert train_results['pad_shape'][:2] == (h - 20, w - 20) + assert train_results['gt_bboxes'].shape[0] == 8 + assert train_results['gt_bboxes_ignore'].shape[0] == 2 + + test_transform = dict( + type='RandomCenterCropPad', + crop_size=None, + ratios=None, + border=None, + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True, + test_mode=True, + test_pad_mode=('logical_or', 127)) + crop_module = build_from_cfg(test_transform, PIPELINES) + + test_results = crop_module(test_results) + assert test_results['img'].shape[:2] == (h | 127, w | 127) + assert test_results['pad_shape'][:2] == (h | 127, w | 127) + assert 'border' in test_results + + +def test_multi_scale_flip_aug(): + # test assertion if give both scale_factor and img_scale + with pytest.raises(AssertionError): + transform = dict( + type='MultiScaleFlipAug', + scale_factor=1.0, + img_scale=[(1333, 800)], + transforms=[dict(type='Resize')]) + build_from_cfg(transform, PIPELINES) + + # test assertion if both scale_factor and img_scale are None + with pytest.raises(AssertionError): + transform = dict( + type='MultiScaleFlipAug', + scale_factor=None, + img_scale=None, + transforms=[dict(type='Resize')]) + build_from_cfg(transform, PIPELINES) + + # test assertion if img_scale is not tuple or list of tuple + with pytest.raises(AssertionError): + transform = dict( + type='MultiScaleFlipAug', + img_scale=[1333, 800], + transforms=[dict(type='Resize')]) + build_from_cfg(transform, PIPELINES) + + # test assertion if flip_direction is not str or list of str + with pytest.raises(AssertionError): + transform = dict( + type='MultiScaleFlipAug', + img_scale=[(1333, 800)], + flip_direction=1, + transforms=[dict(type='Resize')]) + build_from_cfg(transform, PIPELINES) + + scale_transform = dict( + type='MultiScaleFlipAug', + img_scale=[(1333, 800), (1333, 640)], + transforms=[dict(type='Resize', keep_ratio=True)]) + transform = build_from_cfg(scale_transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['img_fields'] = ['img'] + + scale_results = transform(copy.deepcopy(results)) + assert len(scale_results['img']) == 2 + assert scale_results['img'][0].shape == (750, 1333, 3) + assert scale_results['img_shape'][0] == (750, 1333, 3) + assert scale_results['img'][1].shape == (640, 1138, 3) + assert scale_results['img_shape'][1] == (640, 1138, 3) + + scale_factor_transform = dict( + type='MultiScaleFlipAug', + scale_factor=[0.8, 1.0, 1.2], + transforms=[dict(type='Resize', keep_ratio=False)]) + transform = build_from_cfg(scale_factor_transform, PIPELINES) + scale_factor_results = transform(copy.deepcopy(results)) + assert len(scale_factor_results['img']) == 3 + assert scale_factor_results['img'][0].shape == (230, 409, 3) + assert scale_factor_results['img_shape'][0] == (230, 409, 3) + assert scale_factor_results['img'][1].shape == (288, 512, 3) + assert scale_factor_results['img_shape'][1] == (288, 512, 3) + assert scale_factor_results['img'][2].shape == (345, 614, 3) + assert scale_factor_results['img_shape'][2] == (345, 614, 3) + + # test pipeline of coco_detection + results = dict( + img_prefix=osp.join(osp.dirname(__file__), '../data'), + img_info=dict(filename='color.jpg')) + load_cfg, multi_scale_cfg = mmcv.Config.fromfile( + 'configs/_base_/datasets/coco_detection.py').test_pipeline + load = build_from_cfg(load_cfg, PIPELINES) + transform = build_from_cfg(multi_scale_cfg, PIPELINES) + results = transform(load(results)) + assert len(results['img']) == 1 + assert len(results['img_metas']) == 1 + assert isinstance(results['img'][0], torch.Tensor) + assert isinstance(results['img_metas'][0], mmcv.parallel.DataContainer) + assert results['img_metas'][0].data['ori_shape'] == (288, 512, 3) + assert results['img_metas'][0].data['img_shape'] == (750, 1333, 3) + assert results['img_metas'][0].data['pad_shape'] == (768, 1344, 3) + assert results['img_metas'][0].data['scale_factor'].tolist() == [ + 2.603515625, 2.6041667461395264, 2.603515625, 2.6041667461395264 + ] + + +def test_cutout(): + # test n_holes + with pytest.raises(AssertionError): + transform = dict(type='CutOut', n_holes=(5, 3), cutout_shape=(8, 8)) + build_from_cfg(transform, PIPELINES) + with pytest.raises(AssertionError): + transform = dict(type='CutOut', n_holes=(3, 4, 5), cutout_shape=(8, 8)) + build_from_cfg(transform, PIPELINES) + # test cutout_shape and cutout_ratio + with pytest.raises(AssertionError): + transform = dict(type='CutOut', n_holes=1, cutout_shape=8) + build_from_cfg(transform, PIPELINES) + with pytest.raises(AssertionError): + transform = dict(type='CutOut', n_holes=1, cutout_ratio=0.2) + build_from_cfg(transform, PIPELINES) + # either of cutout_shape and cutout_ratio should be given + with pytest.raises(AssertionError): + transform = dict(type='CutOut', n_holes=1) + build_from_cfg(transform, PIPELINES) + with pytest.raises(AssertionError): + transform = dict( + type='CutOut', + n_holes=1, + cutout_shape=(2, 2), + cutout_ratio=(0.4, 0.4)) + build_from_cfg(transform, PIPELINES) + + results = dict() + img = mmcv.imread( + osp.join(osp.dirname(__file__), '../data/color.jpg'), 'color') + + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + results['pad_shape'] = img.shape + results['img_fields'] = ['img'] + + transform = dict(type='CutOut', n_holes=1, cutout_shape=(10, 10)) + cutout_module = build_from_cfg(transform, PIPELINES) + cutout_result = cutout_module(copy.deepcopy(results)) + assert cutout_result['img'].sum() < img.sum() + + transform = dict(type='CutOut', n_holes=1, cutout_ratio=(0.8, 0.8)) + cutout_module = build_from_cfg(transform, PIPELINES) + cutout_result = cutout_module(copy.deepcopy(results)) + assert cutout_result['img'].sum() < img.sum() + + transform = dict( + type='CutOut', + n_holes=(2, 4), + cutout_shape=[(10, 10), (15, 15)], + fill_in=(255, 255, 255)) + cutout_module = build_from_cfg(transform, PIPELINES) + cutout_result = cutout_module(copy.deepcopy(results)) + assert cutout_result['img'].sum() > img.sum() + + transform = dict( + type='CutOut', + n_holes=1, + cutout_ratio=(0.8, 0.8), + fill_in=(255, 255, 255)) + cutout_module = build_from_cfg(transform, PIPELINES) + cutout_result = cutout_module(copy.deepcopy(results)) + assert cutout_result['img'].sum() > img.sum() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_translate.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_translate.py new file mode 100644 index 00000000..87f37d0d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_translate.py @@ -0,0 +1,515 @@ +import copy + +import numpy as np +import pycocotools.mask as maskUtils +import pytest +from mmcv.utils import build_from_cfg + +from mmdet.core.mask import BitmapMasks, PolygonMasks +from mmdet.datasets.builder import PIPELINES + + +def _check_keys(results, results_translated): + assert len(set(results.keys()).difference(set( + results_translated.keys()))) == 0 + assert len(set(results_translated.keys()).difference(set( + results.keys()))) == 0 + + +def _pad(h, w, c, pad_val, axis=-1, dtype=np.float32): + assert isinstance(pad_val, (int, float, tuple)) + if isinstance(pad_val, (int, float)): + pad_val = tuple([pad_val] * c) + assert len(pad_val) == c + pad_data = np.stack([np.ones((h, w)) * pad_val[i] for i in range(c)], + axis=axis).astype(dtype) + return pad_data + + +def _construct_img(results): + h, w = results['img_info']['height'], results['img_info']['width'] + img = np.random.uniform(0, 1, (h, w, 3)) * 255 + img = img.astype(np.uint8) + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + results['img_fields'] = ['img'] + + +def _construct_ann_info(h=427, w=640, c=3): + bboxes = np.array( + [[222.62, 217.82, 241.81, 238.93], [50.5, 329.7, 130.23, 384.96], + [175.47, 331.97, 254.8, 389.26]], + dtype=np.float32) + labels = np.array([9, 2, 2], dtype=np.int64) + bboxes_ignore = np.array([[59., 253., 311., 337.]], dtype=np.float32) + masks = [ + [[222.62, 217.82, 222.62, 238.93, 241.81, 238.93, 240.85, 218.78]], + [[ + 69.19, 332.17, 82.39, 330.25, 97.24, 329.7, 114.01, 331.35, 116.76, + 337.39, 119.78, 343.17, 128.03, 344.54, 128.86, 347.84, 124.18, + 350.59, 129.96, 358.01, 130.23, 366.54, 129.13, 377.81, 125.28, + 382.48, 119.78, 381.93, 117.31, 377.54, 116.21, 379.46, 114.83, + 382.21, 107.14, 383.31, 105.49, 378.36, 77.99, 377.54, 75.79, + 381.11, 69.74, 381.93, 66.72, 378.91, 65.07, 377.81, 63.15, 379.19, + 62.32, 383.31, 52.7, 384.96, 50.5, 379.46, 51.32, 375.61, 51.6, + 370.11, 51.6, 364.06, 53.52, 354.99, 56.27, 344.54, 59.57, 336.29, + 66.45, 332.72 + ]], + [[ + 175.47, 386.86, 175.87, 376.44, 177.08, 351.2, 189.1, 332.77, + 194.31, 331.97, 236.37, 332.77, 244.79, 342.39, 246.79, 346.79, + 248.39, 345.99, 251.6, 345.59, 254.8, 348.0, 254.8, 351.6, 250.0, + 352.0, 250.0, 354.81, 251.6, 358.41, 251.6, 364.42, 251.6, 370.03, + 252.8, 378.04, 252.8, 384.05, 250.8, 387.26, 246.39, 387.66, + 245.19, 386.46, 242.38, 388.86, 233.97, 389.26, 232.77, 388.06, + 232.77, 383.65, 195.91, 381.25, 195.91, 384.86, 191.1, 384.86, + 187.49, 385.26, 186.69, 382.85, 184.29, 382.45, 183.09, 387.26, + 178.68, 388.46, 176.28, 387.66 + ]] + ] + return dict( + bboxes=bboxes, labels=labels, bboxes_ignore=bboxes_ignore, masks=masks) + + +def _load_bboxes(results): + ann_info = results['ann_info'] + results['gt_bboxes'] = ann_info['bboxes'].copy() + results['bbox_fields'] = ['gt_bboxes'] + gt_bboxes_ignore = ann_info.get('bboxes_ignore', None) + if gt_bboxes_ignore is not None: + results['gt_bboxes_ignore'] = gt_bboxes_ignore.copy() + results['bbox_fields'].append('gt_bboxes_ignore') + + +def _load_labels(results): + results['gt_labels'] = results['ann_info']['labels'].copy() + + +def _poly2mask(mask_ann, img_h, img_w): + if isinstance(mask_ann, list): + # polygon -- a single object might consist of multiple parts + # we merge all parts into one mask rle code + rles = maskUtils.frPyObjects(mask_ann, img_h, img_w) + rle = maskUtils.merge(rles) + elif isinstance(mask_ann['counts'], list): + # uncompressed RLE + rle = maskUtils.frPyObjects(mask_ann, img_h, img_w) + else: + # rle + rle = mask_ann + mask = maskUtils.decode(rle) + return mask + + +def _process_polygons(polygons): + polygons = [np.array(p) for p in polygons] + valid_polygons = [] + for polygon in polygons: + if len(polygon) % 2 == 0 and len(polygon) >= 6: + valid_polygons.append(polygon) + return valid_polygons + + +def _load_masks(results, poly2mask=True): + h, w = results['img_info']['height'], results['img_info']['width'] + gt_masks = results['ann_info']['masks'] + if poly2mask: + gt_masks = BitmapMasks([_poly2mask(mask, h, w) for mask in gt_masks], + h, w) + else: + gt_masks = PolygonMasks( + [_process_polygons(polygons) for polygons in gt_masks], h, w) + results['gt_masks'] = gt_masks + results['mask_fields'] = ['gt_masks'] + + +def _construct_semantic_seg(results): + h, w = results['img_info']['height'], results['img_info']['width'] + seg_toy = (np.random.uniform(0, 1, (h, w)) * 255).astype(np.uint8) + results['gt_semantic_seg'] = seg_toy + results['seg_fields'] = ['gt_semantic_seg'] + + +def construct_toy_data(poly2mask=True): + img_info = dict(height=427, width=640) + ann_info = _construct_ann_info(h=img_info['height'], w=img_info['width']) + results = dict(img_info=img_info, ann_info=ann_info) + # construct image, similar to 'LoadImageFromFile' + _construct_img(results) + # 'LoadAnnotations' (bboxes, labels, masks, semantic_seg) + _load_bboxes(results) + _load_labels(results) + _load_masks(results, poly2mask) + _construct_semantic_seg(results) + return results + + +def test_translate(): + # test assertion for invalid value of level + with pytest.raises(AssertionError): + transform = dict(type='Translate', level=-1) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid type of level + with pytest.raises(AssertionError): + transform = dict(type='Translate', level=[1]) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid prob + with pytest.raises(AssertionError): + transform = dict(type='Translate', level=1, prob=-0.5) + build_from_cfg(transform, PIPELINES) + + # test assertion for the num of elements in tuple img_fill_val + with pytest.raises(AssertionError): + transform = dict( + type='Translate', level=1, img_fill_val=(128, 128, 128, 128)) + build_from_cfg(transform, PIPELINES) + + # test ValueError for invalid type of img_fill_val + with pytest.raises(ValueError): + transform = dict( + type='Translate', level=1, img_fill_val=[128, 128, 128]) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid value of img_fill_val + with pytest.raises(AssertionError): + transform = dict( + type='Translate', level=1, img_fill_val=(128, -1, 256)) + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid value of direction + with pytest.raises(AssertionError): + transform = dict( + type='Translate', level=1, img_fill_val=128, direction='diagonal') + build_from_cfg(transform, PIPELINES) + + # test assertion for invalid type of max_translate_offset + with pytest.raises(AssertionError): + transform = dict( + type='Translate', + level=1, + img_fill_val=128, + max_translate_offset=(250., )) + build_from_cfg(transform, PIPELINES) + + # construct toy data example for unit test + results = construct_toy_data() + + def _check_bbox_mask(results, + results_translated, + offset, + direction, + min_size=0.): + # The key correspondence from bboxes to labels and masks. + bbox2label = { + 'gt_bboxes': 'gt_labels', + 'gt_bboxes_ignore': 'gt_labels_ignore' + } + bbox2mask = { + 'gt_bboxes': 'gt_masks', + 'gt_bboxes_ignore': 'gt_masks_ignore' + } + + def _translate_bbox(bboxes, offset, direction, max_h, max_w): + if direction == 'horizontal': + bboxes[:, 0::2] = bboxes[:, 0::2] + offset + elif direction == 'vertical': + bboxes[:, 1::2] = bboxes[:, 1::2] + offset + else: + raise ValueError + bboxes[:, 0::2] = np.clip(bboxes[:, 0::2], 0, max_w) + bboxes[:, 1::2] = np.clip(bboxes[:, 1::2], 0, max_h) + return bboxes + + h, w, c = results_translated['img'].shape + for key in results_translated.get('bbox_fields', []): + label_key, mask_key = bbox2label[key], bbox2mask[key] + # check length of key + if label_key in results: + assert len(results_translated[key]) == len( + results_translated[label_key]) + if mask_key in results: + assert len(results_translated[key]) == len( + results_translated[mask_key]) + # construct gt_bboxes + gt_bboxes = _translate_bbox( + copy.deepcopy(results[key]), offset, direction, h, w) + valid_inds = (gt_bboxes[:, 2] - gt_bboxes[:, 0] > min_size) & ( + gt_bboxes[:, 3] - gt_bboxes[:, 1] > min_size) + gt_bboxes = gt_bboxes[valid_inds] + # check bbox + assert np.equal(gt_bboxes, results_translated[key]).all() + + # construct gt_masks + if mask_key not in results: + # e.g. 'gt_masks_ignore' + continue + masks, masks_translated = results[mask_key].to_ndarray( + ), results_translated[mask_key].to_ndarray() + assert masks.dtype == masks_translated.dtype + if direction == 'horizontal': + masks_pad = _pad( + h, + abs(offset), + masks.shape[0], + 0, + axis=0, + dtype=masks.dtype) + if offset <= 0: + # left shift + gt_masks = np.concatenate( + (masks[:, :, -offset:], masks_pad), axis=-1) + else: + # right shift + gt_masks = np.concatenate( + (masks_pad, masks[:, :, :-offset]), axis=-1) + else: + masks_pad = _pad( + abs(offset), + w, + masks.shape[0], + 0, + axis=0, + dtype=masks.dtype) + if offset <= 0: + # top shift + gt_masks = np.concatenate( + (masks[:, -offset:, :], masks_pad), axis=1) + else: + # bottom shift + gt_masks = np.concatenate( + (masks_pad, masks[:, :-offset, :]), axis=1) + gt_masks = gt_masks[valid_inds] + # check masks + assert np.equal(gt_masks, masks_translated).all() + + def _check_img_seg(results, results_translated, keys, offset, fill_val, + direction): + for key in keys: + assert isinstance(results_translated[key], type(results[key])) + # assert type(results[key]) == type(results_translated[key]) + data, data_translated = results[key], results_translated[key] + if 'mask' in key: + data, data_translated = data.to_ndarray( + ), data_translated.to_ndarray() + assert data.dtype == data_translated.dtype + if 'img' in key: + data, data_translated = data.transpose( + (2, 0, 1)), data_translated.transpose((2, 0, 1)) + elif 'seg' in key: + data, data_translated = data[None, :, :], data_translated[ + None, :, :] + c, h, w = data.shape + if direction == 'horizontal': + data_pad = _pad( + h, abs(offset), c, fill_val, axis=0, dtype=data.dtype) + if offset <= 0: + # left shift + data_gt = np.concatenate((data[:, :, -offset:], data_pad), + axis=-1) + else: + # right shift + data_gt = np.concatenate((data_pad, data[:, :, :-offset]), + axis=-1) + else: + data_pad = _pad( + abs(offset), w, c, fill_val, axis=0, dtype=data.dtype) + if offset <= 0: + # top shift + data_gt = np.concatenate((data[:, -offset:, :], data_pad), + axis=1) + else: + # bottom shift + data_gt = np.concatenate((data_pad, data[:, :-offset, :]), + axis=1) + if 'mask' in key: + # TODO assertion here. ``data_translated`` must be a subset + # (or equal) of ``data_gt`` + pass + else: + assert np.equal(data_gt, data_translated).all() + + def check_translate(results, + results_translated, + offset, + img_fill_val, + seg_ignore_label, + direction, + min_size=0): + # check keys + _check_keys(results, results_translated) + # check image + _check_img_seg(results, results_translated, + results.get('img_fields', ['img']), offset, + img_fill_val, direction) + # check segmentation map + _check_img_seg(results, results_translated, + results.get('seg_fields', []), offset, seg_ignore_label, + direction) + # check masks and bboxes + _check_bbox_mask(results, results_translated, offset, direction, + min_size) + + # test case when level=0 (without translate aug) + img_fill_val = (104, 116, 124) + seg_ignore_label = 255 + transform = dict( + type='Translate', + level=0, + prob=1.0, + img_fill_val=img_fill_val, + seg_ignore_label=seg_ignore_label) + translate_module = build_from_cfg(transform, PIPELINES) + results_wo_translate = translate_module(copy.deepcopy(results)) + check_translate( + copy.deepcopy(results), + results_wo_translate, + 0, + img_fill_val, + seg_ignore_label, + 'horizontal', + ) + + # test case when level>0 and translate horizontally (left shift). + transform = dict( + type='Translate', + level=8, + prob=1.0, + img_fill_val=img_fill_val, + random_negative_prob=1.0, + seg_ignore_label=seg_ignore_label) + translate_module = build_from_cfg(transform, PIPELINES) + offset = translate_module.offset + results_translated = translate_module(copy.deepcopy(results)) + check_translate( + copy.deepcopy(results), + results_translated, + -offset, + img_fill_val, + seg_ignore_label, + 'horizontal', + ) + + # test case when level>0 and translate horizontally (right shift). + translate_module.random_negative_prob = 0.0 + results_translated = translate_module(copy.deepcopy(results)) + check_translate( + copy.deepcopy(results), + results_translated, + offset, + img_fill_val, + seg_ignore_label, + 'horizontal', + ) + + # test case when level>0 and translate vertically (top shift). + transform = dict( + type='Translate', + level=10, + prob=1.0, + img_fill_val=img_fill_val, + seg_ignore_label=seg_ignore_label, + random_negative_prob=1.0, + direction='vertical') + translate_module = build_from_cfg(transform, PIPELINES) + offset = translate_module.offset + results_translated = translate_module(copy.deepcopy(results)) + check_translate( + copy.deepcopy(results), results_translated, -offset, img_fill_val, + seg_ignore_label, 'vertical') + + # test case when level>0 and translate vertically (bottom shift). + translate_module.random_negative_prob = 0.0 + results_translated = translate_module(copy.deepcopy(results)) + check_translate( + copy.deepcopy(results), results_translated, offset, img_fill_val, + seg_ignore_label, 'vertical') + + # test case when no translation is called (prob<=0) + transform = dict( + type='Translate', + level=8, + prob=0.0, + img_fill_val=img_fill_val, + random_negative_prob=0.0, + seg_ignore_label=seg_ignore_label) + translate_module = build_from_cfg(transform, PIPELINES) + results_translated = translate_module(copy.deepcopy(results)) + + # test translate vertically with PolygonMasks (top shift) + results = construct_toy_data(False) + transform = dict( + type='Translate', + level=10, + prob=1.0, + img_fill_val=img_fill_val, + seg_ignore_label=seg_ignore_label, + direction='vertical') + translate_module = build_from_cfg(transform, PIPELINES) + offset = translate_module.offset + translate_module.random_negative_prob = 1.0 + results_translated = translate_module(copy.deepcopy(results)) + + def _translated_gt(masks, direction, offset, out_shape): + translated_masks = [] + for poly_per_obj in masks: + translated_poly_per_obj = [] + for p in poly_per_obj: + p = p.copy() + if direction == 'horizontal': + p[0::2] = np.clip(p[0::2] + offset, 0, out_shape[1]) + elif direction == 'vertical': + p[1::2] = np.clip(p[1::2] + offset, 0, out_shape[0]) + if PolygonMasks([[p]], *out_shape).areas[0] > 0: + # filter invalid (area=0) + translated_poly_per_obj.append(p) + if len(translated_poly_per_obj): + translated_masks.append(translated_poly_per_obj) + translated_masks = PolygonMasks(translated_masks, *out_shape) + return translated_masks + + h, w = results['img_shape'][:2] + for key in results.get('mask_fields', []): + masks = results[key] + translated_gt = _translated_gt(masks, 'vertical', -offset, (h, w)) + assert np.equal(results_translated[key].to_ndarray(), + translated_gt.to_ndarray()).all() + + # test translate horizontally with PolygonMasks (right shift) + results = construct_toy_data(False) + transform = dict( + type='Translate', + level=8, + prob=1.0, + img_fill_val=img_fill_val, + random_negative_prob=0.0, + seg_ignore_label=seg_ignore_label) + translate_module = build_from_cfg(transform, PIPELINES) + offset = translate_module.offset + results_translated = translate_module(copy.deepcopy(results)) + h, w = results['img_shape'][:2] + for key in results.get('mask_fields', []): + masks = results[key] + translated_gt = _translated_gt(masks, 'horizontal', offset, (h, w)) + assert np.equal(results_translated[key].to_ndarray(), + translated_gt.to_ndarray()).all() + + # test AutoAugment equipped with Translate + policies = [[dict(type='Translate', level=10, prob=1.)]] + autoaug = dict(type='AutoAugment', policies=policies) + autoaug_module = build_from_cfg(autoaug, PIPELINES) + autoaug_module(copy.deepcopy(results)) + + policies = [[ + dict(type='Translate', level=10, prob=1.), + dict( + type='Translate', + level=8, + img_fill_val=img_fill_val, + direction='vertical') + ]] + autoaug = dict(type='AutoAugment', policies=policies) + autoaug_module = build_from_cfg(autoaug, PIPELINES) + autoaug_module(copy.deepcopy(results)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_utils.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_utils.py new file mode 100644 index 00000000..2a8a23f7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_data/test_utils.py @@ -0,0 +1,61 @@ +import pytest + +from mmdet.datasets import replace_ImageToTensor + + +def test_replace_ImageToTensor(): + # with MultiScaleFlipAug + pipelines = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize'), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) + ] + expected_pipelines = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize'), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img']), + ]) + ] + with pytest.warns(UserWarning): + assert expected_pipelines == replace_ImageToTensor(pipelines) + + # without MultiScaleFlipAug + pipelines = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize'), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ] + expected_pipelines = [ + dict(type='LoadImageFromFile'), + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize'), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img']), + ] + with pytest.warns(UserWarning): + assert expected_pipelines == replace_ImageToTensor(pipelines) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_eval_hook.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_eval_hook.py new file mode 100644 index 00000000..2231aa72 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_eval_hook.py @@ -0,0 +1,263 @@ +import os.path as osp +import tempfile +import unittest.mock as mock +from collections import OrderedDict +from unittest.mock import MagicMock, patch + +import pytest +import torch +import torch.nn as nn +from mmcv.runner import EpochBasedRunner, build_optimizer +from mmcv.utils import get_logger +from torch.utils.data import DataLoader, Dataset + +from mmdet.core import DistEvalHook, EvalHook + + +class ExampleDataset(Dataset): + + def __init__(self): + self.index = 0 + self.eval_result = [0.1, 0.4, 0.3, 0.7, 0.2, 0.05, 0.4, 0.6] + + def __getitem__(self, idx): + results = dict(imgs=torch.tensor([1])) + return results + + def __len__(self): + return 1 + + @mock.create_autospec + def evaluate(self, results, logger=None): + pass + + +class EvalDataset(ExampleDataset): + + def evaluate(self, results, logger=None): + mean_ap = self.eval_result[self.index] + output = OrderedDict(mAP=mean_ap, index=self.index, score=mean_ap) + self.index += 1 + return output + + +class ExampleModel(nn.Module): + + def __init__(self): + super().__init__() + self.conv = nn.Linear(1, 1) + self.test_cfg = None + + def forward(self, imgs, rescale=False, return_loss=False): + return imgs + + def train_step(self, data_batch, optimizer, **kwargs): + outputs = { + 'loss': 0.5, + 'log_vars': { + 'accuracy': 0.98 + }, + 'num_samples': 1 + } + return outputs + + +@pytest.mark.skipif( + not torch.cuda.is_available(), reason='requires CUDA support') +@patch('mmdet.apis.single_gpu_test', MagicMock) +@patch('mmdet.apis.multi_gpu_test', MagicMock) +@pytest.mark.parametrize('EvalHookCls', (EvalHook, DistEvalHook)) +def test_eval_hook(EvalHookCls): + with pytest.raises(TypeError): + # dataloader must be a pytorch DataLoader + test_dataset = ExampleDataset() + data_loader = [ + DataLoader( + test_dataset, + batch_size=1, + sampler=None, + num_worker=0, + shuffle=False) + ] + EvalHookCls(data_loader) + + with pytest.raises(KeyError): + # rule must be in keys of rule_map + test_dataset = ExampleDataset() + data_loader = DataLoader( + test_dataset, + batch_size=1, + sampler=None, + num_workers=0, + shuffle=False) + EvalHookCls(data_loader, save_best='auto', rule='unsupport') + + with pytest.raises(ValueError): + # key_indicator must be valid when rule_map is None + test_dataset = ExampleDataset() + data_loader = DataLoader( + test_dataset, + batch_size=1, + sampler=None, + num_workers=0, + shuffle=False) + EvalHookCls(data_loader, save_best='unsupport') + + optimizer_cfg = dict( + type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) + + test_dataset = ExampleDataset() + loader = DataLoader(test_dataset, batch_size=1) + model = ExampleModel() + optimizer = build_optimizer(model, optimizer_cfg) + + data_loader = DataLoader(test_dataset, batch_size=1) + eval_hook = EvalHookCls(data_loader, save_best=None) + with tempfile.TemporaryDirectory() as tmpdir: + logger = get_logger('test_eval') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_hook(eval_hook) + runner.run([loader], [('train', 1)], 1) + assert runner.meta is None or 'best_score' not in runner.meta[ + 'hook_msgs'] + assert runner.meta is None or 'best_ckpt' not in runner.meta[ + 'hook_msgs'] + + # when `save_best` is set to 'auto', first metric will be used. + loader = DataLoader(EvalDataset(), batch_size=1) + model = ExampleModel() + data_loader = DataLoader(EvalDataset(), batch_size=1) + eval_hook = EvalHookCls(data_loader, interval=1, save_best='auto') + + with tempfile.TemporaryDirectory() as tmpdir: + logger = get_logger('test_eval') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_checkpoint_hook(dict(interval=1)) + runner.register_hook(eval_hook) + runner.run([loader], [('train', 1)], 8) + + real_path = osp.join(tmpdir, 'epoch_4.pth') + link_path = osp.join(tmpdir, 'best_mAP.pth') + + assert runner.meta['hook_msgs']['best_ckpt'] == osp.realpath(real_path) + assert osp.exists(link_path) + assert runner.meta['hook_msgs']['best_score'] == 0.7 + + loader = DataLoader(EvalDataset(), batch_size=1) + model = ExampleModel() + data_loader = DataLoader(EvalDataset(), batch_size=1) + eval_hook = EvalHookCls(data_loader, interval=1, save_best='mAP') + + with tempfile.TemporaryDirectory() as tmpdir: + logger = get_logger('test_eval') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_checkpoint_hook(dict(interval=1)) + runner.register_hook(eval_hook) + runner.run([loader], [('train', 1)], 8) + + real_path = osp.join(tmpdir, 'epoch_4.pth') + link_path = osp.join(tmpdir, 'best_mAP.pth') + + assert runner.meta['hook_msgs']['best_ckpt'] == osp.realpath(real_path) + assert osp.exists(link_path) + assert runner.meta['hook_msgs']['best_score'] == 0.7 + + data_loader = DataLoader(EvalDataset(), batch_size=1) + eval_hook = EvalHookCls( + data_loader, interval=1, save_best='score', rule='greater') + with tempfile.TemporaryDirectory() as tmpdir: + logger = get_logger('test_eval') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_checkpoint_hook(dict(interval=1)) + runner.register_hook(eval_hook) + runner.run([loader], [('train', 1)], 8) + + real_path = osp.join(tmpdir, 'epoch_4.pth') + link_path = osp.join(tmpdir, 'best_score.pth') + + assert runner.meta['hook_msgs']['best_ckpt'] == osp.realpath(real_path) + assert osp.exists(link_path) + assert runner.meta['hook_msgs']['best_score'] == 0.7 + + data_loader = DataLoader(EvalDataset(), batch_size=1) + eval_hook = EvalHookCls(data_loader, save_best='mAP', rule='less') + with tempfile.TemporaryDirectory() as tmpdir: + logger = get_logger('test_eval') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_checkpoint_hook(dict(interval=1)) + runner.register_hook(eval_hook) + runner.run([loader], [('train', 1)], 8) + + real_path = osp.join(tmpdir, 'epoch_6.pth') + link_path = osp.join(tmpdir, 'best_mAP.pth') + + assert runner.meta['hook_msgs']['best_ckpt'] == osp.realpath(real_path) + assert osp.exists(link_path) + assert runner.meta['hook_msgs']['best_score'] == 0.05 + + data_loader = DataLoader(EvalDataset(), batch_size=1) + eval_hook = EvalHookCls(data_loader, save_best='mAP') + with tempfile.TemporaryDirectory() as tmpdir: + logger = get_logger('test_eval') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_checkpoint_hook(dict(interval=1)) + runner.register_hook(eval_hook) + runner.run([loader], [('train', 1)], 2) + + real_path = osp.join(tmpdir, 'epoch_2.pth') + link_path = osp.join(tmpdir, 'best_mAP.pth') + + assert runner.meta['hook_msgs']['best_ckpt'] == osp.realpath(real_path) + assert osp.exists(link_path) + assert runner.meta['hook_msgs']['best_score'] == 0.4 + + resume_from = osp.join(tmpdir, 'latest.pth') + loader = DataLoader(ExampleDataset(), batch_size=1) + eval_hook = EvalHookCls(data_loader, save_best='mAP') + runner = EpochBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=tmpdir, + logger=logger) + runner.register_checkpoint_hook(dict(interval=1)) + runner.register_hook(eval_hook) + runner.resume(resume_from) + runner.run([loader], [('train', 1)], 8) + + real_path = osp.join(tmpdir, 'epoch_4.pth') + link_path = osp.join(tmpdir, 'best_mAP.pth') + + assert runner.meta['hook_msgs']['best_ckpt'] == osp.realpath(real_path) + assert osp.exists(link_path) + assert runner.meta['hook_msgs']['best_score'] == 0.7 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_fp16.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_fp16.py new file mode 100644 index 00000000..afcfe260 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_fp16.py @@ -0,0 +1,300 @@ +import numpy as np +import pytest +import torch +import torch.nn as nn +from mmcv.runner import auto_fp16, force_fp32 +from mmcv.runner.fp16_utils import cast_tensor_type + + +def test_cast_tensor_type(): + inputs = torch.FloatTensor([5.]) + src_type = torch.float32 + dst_type = torch.int32 + outputs = cast_tensor_type(inputs, src_type, dst_type) + assert isinstance(outputs, torch.Tensor) + assert outputs.dtype == dst_type + + inputs = 'tensor' + src_type = str + dst_type = str + outputs = cast_tensor_type(inputs, src_type, dst_type) + assert isinstance(outputs, str) + + inputs = np.array([5.]) + src_type = np.ndarray + dst_type = np.ndarray + outputs = cast_tensor_type(inputs, src_type, dst_type) + assert isinstance(outputs, np.ndarray) + + inputs = dict( + tensor_a=torch.FloatTensor([1.]), tensor_b=torch.FloatTensor([2.])) + src_type = torch.float32 + dst_type = torch.int32 + outputs = cast_tensor_type(inputs, src_type, dst_type) + assert isinstance(outputs, dict) + assert outputs['tensor_a'].dtype == dst_type + assert outputs['tensor_b'].dtype == dst_type + + inputs = [torch.FloatTensor([1.]), torch.FloatTensor([2.])] + src_type = torch.float32 + dst_type = torch.int32 + outputs = cast_tensor_type(inputs, src_type, dst_type) + assert isinstance(outputs, list) + assert outputs[0].dtype == dst_type + assert outputs[1].dtype == dst_type + + inputs = 5 + outputs = cast_tensor_type(inputs, None, None) + assert isinstance(outputs, int) + + +def test_auto_fp16(): + + with pytest.raises(TypeError): + # ExampleObject is not a subclass of nn.Module + + class ExampleObject(object): + + @auto_fp16() + def __call__(self, x): + return x + + model = ExampleObject() + input_x = torch.ones(1, dtype=torch.float32) + model(input_x) + + # apply to all input args + class ExampleModule(nn.Module): + + @auto_fp16() + def forward(self, x, y): + return x, y + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.float32) + input_y = torch.ones(1, dtype=torch.float32) + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + + model.fp16_enabled = True + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y = model(input_x.cuda(), input_y.cuda()) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + + # apply to specified input args + class ExampleModule(nn.Module): + + @auto_fp16(apply_to=('x', )) + def forward(self, x, y): + return x, y + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.float32) + input_y = torch.ones(1, dtype=torch.float32) + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + + model.fp16_enabled = True + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.float32 + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y = model(input_x.cuda(), input_y.cuda()) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.float32 + + # apply to optional input args + class ExampleModule(nn.Module): + + @auto_fp16(apply_to=('x', 'y')) + def forward(self, x, y=None, z=None): + return x, y, z + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.float32) + input_y = torch.ones(1, dtype=torch.float32) + input_z = torch.ones(1, dtype=torch.float32) + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + assert output_z.dtype == torch.float32 + + model.fp16_enabled = True + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + assert output_z.dtype == torch.float32 + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y, output_z = model( + input_x.cuda(), y=input_y.cuda(), z=input_z.cuda()) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + assert output_z.dtype == torch.float32 + + # out_fp32=True + class ExampleModule(nn.Module): + + @auto_fp16(apply_to=('x', 'y'), out_fp32=True) + def forward(self, x, y=None, z=None): + return x, y, z + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.half) + input_y = torch.ones(1, dtype=torch.float32) + input_z = torch.ones(1, dtype=torch.float32) + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.float32 + assert output_z.dtype == torch.float32 + + model.fp16_enabled = True + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + assert output_z.dtype == torch.float32 + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y, output_z = model( + input_x.cuda(), y=input_y.cuda(), z=input_z.cuda()) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + assert output_z.dtype == torch.float32 + + +def test_force_fp32(): + + with pytest.raises(TypeError): + # ExampleObject is not a subclass of nn.Module + + class ExampleObject(object): + + @force_fp32() + def __call__(self, x): + return x + + model = ExampleObject() + input_x = torch.ones(1, dtype=torch.float32) + model(input_x) + + # apply to all input args + class ExampleModule(nn.Module): + + @force_fp32() + def forward(self, x, y): + return x, y + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.half) + input_y = torch.ones(1, dtype=torch.half) + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + + model.fp16_enabled = True + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y = model(input_x.cuda(), input_y.cuda()) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + + # apply to specified input args + class ExampleModule(nn.Module): + + @force_fp32(apply_to=('x', )) + def forward(self, x, y): + return x, y + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.half) + input_y = torch.ones(1, dtype=torch.half) + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + + model.fp16_enabled = True + output_x, output_y = model(input_x, input_y) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.half + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y = model(input_x.cuda(), input_y.cuda()) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.half + + # apply to optional input args + class ExampleModule(nn.Module): + + @force_fp32(apply_to=('x', 'y')) + def forward(self, x, y=None, z=None): + return x, y, z + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.half) + input_y = torch.ones(1, dtype=torch.half) + input_z = torch.ones(1, dtype=torch.half) + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + assert output_z.dtype == torch.half + + model.fp16_enabled = True + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + assert output_z.dtype == torch.half + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y, output_z = model( + input_x.cuda(), y=input_y.cuda(), z=input_z.cuda()) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.float32 + assert output_z.dtype == torch.half + + # out_fp16=True + class ExampleModule(nn.Module): + + @force_fp32(apply_to=('x', 'y'), out_fp16=True) + def forward(self, x, y=None, z=None): + return x, y, z + + model = ExampleModule() + input_x = torch.ones(1, dtype=torch.float32) + input_y = torch.ones(1, dtype=torch.half) + input_z = torch.ones(1, dtype=torch.half) + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.float32 + assert output_y.dtype == torch.half + assert output_z.dtype == torch.half + + model.fp16_enabled = True + output_x, output_y, output_z = model(input_x, y=input_y, z=input_z) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + assert output_z.dtype == torch.half + + if torch.cuda.is_available(): + model.cuda() + output_x, output_y, output_z = model( + input_x.cuda(), y=input_y.cuda(), z=input_z.cuda()) + assert output_x.dtype == torch.half + assert output_y.dtype == torch.half + assert output_z.dtype == torch.half diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_iou2d_calculator.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_iou2d_calculator.py new file mode 100644 index 00000000..94c6400f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_iou2d_calculator.py @@ -0,0 +1,105 @@ +import numpy as np +import pytest +import torch + +from mmdet.core import BboxOverlaps2D, bbox_overlaps + + +def test_bbox_overlaps_2d(eps=1e-7): + + def _construct_bbox(num_bbox=None): + img_h = int(np.random.randint(3, 1000)) + img_w = int(np.random.randint(3, 1000)) + if num_bbox is None: + num_bbox = np.random.randint(1, 10) + x1y1 = torch.rand((num_bbox, 2)) + x2y2 = torch.max(torch.rand((num_bbox, 2)), x1y1) + bboxes = torch.cat((x1y1, x2y2), -1) + bboxes[:, 0::2] *= img_w + bboxes[:, 1::2] *= img_h + return bboxes, num_bbox + + # is_aligned is True, bboxes.size(-1) == 5 (include score) + self = BboxOverlaps2D() + bboxes1, num_bbox = _construct_bbox() + bboxes2, _ = _construct_bbox(num_bbox) + bboxes1 = torch.cat((bboxes1, torch.rand((num_bbox, 1))), 1) + bboxes2 = torch.cat((bboxes2, torch.rand((num_bbox, 1))), 1) + gious = self(bboxes1, bboxes2, 'giou', True) + assert gious.size() == (num_bbox, ), gious.size() + assert torch.all(gious >= -1) and torch.all(gious <= 1) + + # is_aligned is True, bboxes1.size(-2) == 0 + bboxes1 = torch.empty((0, 4)) + bboxes2 = torch.empty((0, 4)) + gious = self(bboxes1, bboxes2, 'giou', True) + assert gious.size() == (0, ), gious.size() + assert torch.all(gious == torch.empty((0, ))) + assert torch.all(gious >= -1) and torch.all(gious <= 1) + + # is_aligned is True, and bboxes.ndims > 2 + bboxes1, num_bbox = _construct_bbox() + bboxes2, _ = _construct_bbox(num_bbox) + bboxes1 = bboxes1.unsqueeze(0).repeat(2, 1, 1) + # test assertion when batch dim is not the same + with pytest.raises(AssertionError): + self(bboxes1, bboxes2.unsqueeze(0).repeat(3, 1, 1), 'giou', True) + bboxes2 = bboxes2.unsqueeze(0).repeat(2, 1, 1) + gious = self(bboxes1, bboxes2, 'giou', True) + assert torch.all(gious >= -1) and torch.all(gious <= 1) + assert gious.size() == (2, num_bbox) + bboxes1 = bboxes1.unsqueeze(0).repeat(2, 1, 1, 1) + bboxes2 = bboxes2.unsqueeze(0).repeat(2, 1, 1, 1) + gious = self(bboxes1, bboxes2, 'giou', True) + assert torch.all(gious >= -1) and torch.all(gious <= 1) + assert gious.size() == (2, 2, num_bbox) + + # is_aligned is False + bboxes1, num_bbox1 = _construct_bbox() + bboxes2, num_bbox2 = _construct_bbox() + gious = self(bboxes1, bboxes2, 'giou') + assert torch.all(gious >= -1) and torch.all(gious <= 1) + assert gious.size() == (num_bbox1, num_bbox2) + + # is_aligned is False, and bboxes.ndims > 2 + bboxes1 = bboxes1.unsqueeze(0).repeat(2, 1, 1) + bboxes2 = bboxes2.unsqueeze(0).repeat(2, 1, 1) + gious = self(bboxes1, bboxes2, 'giou') + assert torch.all(gious >= -1) and torch.all(gious <= 1) + assert gious.size() == (2, num_bbox1, num_bbox2) + bboxes1 = bboxes1.unsqueeze(0) + bboxes2 = bboxes2.unsqueeze(0) + gious = self(bboxes1, bboxes2, 'giou') + assert torch.all(gious >= -1) and torch.all(gious <= 1) + assert gious.size() == (1, 2, num_bbox1, num_bbox2) + + # is_aligned is False, bboxes1.size(-2) == 0 + gious = self(torch.empty(1, 2, 0, 4), bboxes2, 'giou') + assert torch.all(gious == torch.empty(1, 2, 0, bboxes2.size(-2))) + assert torch.all(gious >= -1) and torch.all(gious <= 1) + + # test allclose between bbox_overlaps and the original official + # implementation. + bboxes1 = torch.FloatTensor([ + [0, 0, 10, 10], + [10, 10, 20, 20], + [32, 32, 38, 42], + ]) + bboxes2 = torch.FloatTensor([ + [0, 0, 10, 20], + [0, 10, 10, 19], + [10, 10, 20, 20], + ]) + gious = bbox_overlaps(bboxes1, bboxes2, 'giou', is_aligned=True, eps=eps) + gious = gious.numpy().round(4) + # the gt is got with four decimal precision. + expected_gious = np.array([0.5000, -0.0500, -0.8214]) + assert np.allclose(gious, expected_gious, rtol=0, atol=eps) + + # test mode 'iof' + ious = bbox_overlaps(bboxes1, bboxes2, 'iof', is_aligned=True, eps=eps) + assert torch.all(ious >= -1) and torch.all(ious <= 1) + assert ious.size() == (bboxes1.size(0), ) + ious = bbox_overlaps(bboxes1, bboxes2, 'iof', eps=eps) + assert torch.all(ious >= -1) and torch.all(ious <= 1) + assert ious.size() == (bboxes1.size(0), bboxes2.size(0)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_masks.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_masks.py new file mode 100644 index 00000000..808cf08c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_masks.py @@ -0,0 +1,655 @@ +import numpy as np +import pytest +import torch + +from mmdet.core import BitmapMasks, PolygonMasks + + +def dummy_raw_bitmap_masks(size): + """ + Args: + size (tuple): expected shape of dummy masks, (H, W) or (N, H, W) + + Return: + ndarray: dummy mask + """ + return np.random.randint(0, 2, size, dtype=np.uint8) + + +def dummy_raw_polygon_masks(size): + """ + Args: + size (tuple): expected shape of dummy masks, (N, H, W) + + Return: + list[list[ndarray]]: dummy mask + """ + num_obj, heigt, width = size + polygons = [] + for _ in range(num_obj): + num_points = np.random.randint(5) * 2 + 6 + polygons.append([np.random.uniform(0, min(heigt, width), num_points)]) + return polygons + + +def dummy_bboxes(num, max_height, max_width): + x1y1 = np.random.randint(0, min(max_height // 2, max_width // 2), (num, 2)) + wh = np.random.randint(0, min(max_height // 2, max_width // 2), (num, 2)) + x2y2 = x1y1 + wh + return np.concatenate([x1y1, x2y2], axis=1).squeeze().astype(np.float32) + + +def test_bitmap_mask_init(): + # init with empty ndarray masks + raw_masks = np.empty((0, 28, 28), dtype=np.uint8) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + assert len(bitmap_masks) == 0 + assert bitmap_masks.height == 28 + assert bitmap_masks.width == 28 + + # init with empty list masks + raw_masks = [] + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + assert len(bitmap_masks) == 0 + assert bitmap_masks.height == 28 + assert bitmap_masks.width == 28 + + # init with ndarray masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + assert len(bitmap_masks) == 3 + assert bitmap_masks.height == 28 + assert bitmap_masks.width == 28 + + # init with list masks contain 3 instances + raw_masks = [dummy_raw_bitmap_masks((28, 28)) for _ in range(3)] + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + assert len(bitmap_masks) == 3 + assert bitmap_masks.height == 28 + assert bitmap_masks.width == 28 + + # init with raw masks of unsupported type + with pytest.raises(AssertionError): + raw_masks = [[dummy_raw_bitmap_masks((28, 28))]] + BitmapMasks(raw_masks, 28, 28) + + +def test_bitmap_mask_rescale(): + # rescale with empty bitmap masks + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + rescaled_masks = bitmap_masks.rescale((56, 72)) + assert len(rescaled_masks) == 0 + assert rescaled_masks.height == 56 + assert rescaled_masks.width == 56 + + # rescale with bitmap masks contain 1 instances + raw_masks = np.array([[[1, 0, 0, 0], [0, 1, 0, 1]]]) + bitmap_masks = BitmapMasks(raw_masks, 2, 4) + rescaled_masks = bitmap_masks.rescale((8, 8)) + assert len(rescaled_masks) == 1 + assert rescaled_masks.height == 4 + assert rescaled_masks.width == 8 + truth = np.array([[[1, 1, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 0, 0, 1, 1], [0, 0, 1, 1, 0, 0, 1, 1]]]) + assert (rescaled_masks.masks == truth).all() + + +def test_bitmap_mask_resize(): + # resize with empty bitmap masks + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + resized_masks = bitmap_masks.resize((56, 72)) + assert len(resized_masks) == 0 + assert resized_masks.height == 56 + assert resized_masks.width == 72 + + # resize with bitmap masks contain 1 instances + raw_masks = np.diag(np.ones(4, dtype=np.uint8))[np.newaxis, ...] + bitmap_masks = BitmapMasks(raw_masks, 4, 4) + resized_masks = bitmap_masks.resize((8, 8)) + assert len(resized_masks) == 1 + assert resized_masks.height == 8 + assert resized_masks.width == 8 + truth = np.array([[[1, 1, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 1, 1]]]) + assert (resized_masks.masks == truth).all() + + # resize to non-square + raw_masks = np.diag(np.ones(4, dtype=np.uint8))[np.newaxis, ...] + bitmap_masks = BitmapMasks(raw_masks, 4, 4) + resized_masks = bitmap_masks.resize((4, 8)) + assert len(resized_masks) == 1 + assert resized_masks.height == 4 + assert resized_masks.width == 8 + truth = np.array([[[1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1]]]) + assert (resized_masks.masks == truth).all() + + +def test_bitmap_mask_flip(): + # flip with empty bitmap masks + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + flipped_masks = bitmap_masks.flip(flip_direction='horizontal') + assert len(flipped_masks) == 0 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + + # horizontally flip with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + flipped_masks = bitmap_masks.flip(flip_direction='horizontal') + flipped_flipped_masks = flipped_masks.flip(flip_direction='horizontal') + assert flipped_masks.masks.shape == (3, 28, 28) + assert (bitmap_masks.masks == flipped_flipped_masks.masks).all() + assert (flipped_masks.masks == raw_masks[:, :, ::-1]).all() + + # vertically flip with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + flipped_masks = bitmap_masks.flip(flip_direction='vertical') + flipped_flipped_masks = flipped_masks.flip(flip_direction='vertical') + assert len(flipped_masks) == 3 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + assert (bitmap_masks.masks == flipped_flipped_masks.masks).all() + assert (flipped_masks.masks == raw_masks[:, ::-1, :]).all() + + # diagonal flip with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + flipped_masks = bitmap_masks.flip(flip_direction='diagonal') + flipped_flipped_masks = flipped_masks.flip(flip_direction='diagonal') + assert len(flipped_masks) == 3 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + assert (bitmap_masks.masks == flipped_flipped_masks.masks).all() + assert (flipped_masks.masks == raw_masks[:, ::-1, ::-1]).all() + + +def test_bitmap_mask_pad(): + # pad with empty bitmap masks + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + padded_masks = bitmap_masks.pad((56, 56)) + assert len(padded_masks) == 0 + assert padded_masks.height == 56 + assert padded_masks.width == 56 + + # pad with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + padded_masks = bitmap_masks.pad((56, 56)) + assert len(padded_masks) == 3 + assert padded_masks.height == 56 + assert padded_masks.width == 56 + assert (padded_masks.masks[:, 28:, 28:] == 0).all() + + +def test_bitmap_mask_crop(): + # crop with empty bitmap masks + dummy_bbox = np.array([0, 10, 10, 27], dtype=np.int) + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + cropped_masks = bitmap_masks.crop(dummy_bbox) + assert len(cropped_masks) == 0 + assert cropped_masks.height == 17 + assert cropped_masks.width == 10 + + # crop with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + cropped_masks = bitmap_masks.crop(dummy_bbox) + assert len(cropped_masks) == 3 + assert cropped_masks.height == 17 + assert cropped_masks.width == 10 + x1, y1, x2, y2 = dummy_bbox + assert (cropped_masks.masks == raw_masks[:, y1:y2, x1:x2]).all() + + # crop with invalid bbox + with pytest.raises(AssertionError): + dummy_bbox = dummy_bboxes(2, 28, 28) + bitmap_masks.crop(dummy_bbox) + + +def test_bitmap_mask_crop_and_resize(): + dummy_bbox = dummy_bboxes(5, 28, 28) + inds = np.random.randint(0, 3, (5, )) + + # crop and resize with empty bitmap masks + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + cropped_resized_masks = bitmap_masks.crop_and_resize( + dummy_bbox, (56, 56), inds) + assert len(cropped_resized_masks) == 0 + assert cropped_resized_masks.height == 56 + assert cropped_resized_masks.width == 56 + + # crop and resize with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + cropped_resized_masks = bitmap_masks.crop_and_resize( + dummy_bbox, (56, 56), inds) + assert len(cropped_resized_masks) == 5 + assert cropped_resized_masks.height == 56 + assert cropped_resized_masks.width == 56 + + +def test_bitmap_mask_expand(): + # expand with empty bitmap masks + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + expanded_masks = bitmap_masks.expand(56, 56, 12, 14) + assert len(expanded_masks) == 0 + assert expanded_masks.height == 56 + assert expanded_masks.width == 56 + + # expand with bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + expanded_masks = bitmap_masks.expand(56, 56, 12, 14) + assert len(expanded_masks) == 3 + assert expanded_masks.height == 56 + assert expanded_masks.width == 56 + assert (expanded_masks.masks[:, :12, :14] == 0).all() + assert (expanded_masks.masks[:, 12 + 28:, 14 + 28:] == 0).all() + + +def test_bitmap_mask_area(): + # area of empty bitmap mask + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + assert bitmap_masks.areas.sum() == 0 + + # area of bitmap masks contain 3 instances + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + areas = bitmap_masks.areas + assert len(areas) == 3 + assert (areas == raw_masks.sum((1, 2))).all() + + +def test_bitmap_mask_to_ndarray(): + # empty bitmap masks to ndarray + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + ndarray_masks = bitmap_masks.to_ndarray() + assert isinstance(ndarray_masks, np.ndarray) + assert ndarray_masks.shape == (0, 28, 28) + + # bitmap masks contain 3 instances to ndarray + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + ndarray_masks = bitmap_masks.to_ndarray() + assert isinstance(ndarray_masks, np.ndarray) + assert ndarray_masks.shape == (3, 28, 28) + assert (ndarray_masks == raw_masks).all() + + +def test_bitmap_mask_to_tensor(): + # empty bitmap masks to tensor + raw_masks = dummy_raw_bitmap_masks((0, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + tensor_masks = bitmap_masks.to_tensor(dtype=torch.uint8, device='cpu') + assert isinstance(tensor_masks, torch.Tensor) + assert tensor_masks.shape == (0, 28, 28) + + # bitmap masks contain 3 instances to tensor + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + tensor_masks = bitmap_masks.to_tensor(dtype=torch.uint8, device='cpu') + assert isinstance(tensor_masks, torch.Tensor) + assert tensor_masks.shape == (3, 28, 28) + assert (tensor_masks.numpy() == raw_masks).all() + + +def test_bitmap_mask_index(): + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + assert (bitmap_masks[0].masks == raw_masks[0]).all() + assert (bitmap_masks[range(2)].masks == raw_masks[range(2)]).all() + + +def test_bitmap_mask_iter(): + raw_masks = dummy_raw_bitmap_masks((3, 28, 28)) + bitmap_masks = BitmapMasks(raw_masks, 28, 28) + for i, bitmap_mask in enumerate(bitmap_masks): + assert bitmap_mask.shape == (28, 28) + assert (bitmap_mask == raw_masks[i]).all() + + +def test_polygon_mask_init(): + # init with empty masks + raw_masks = [] + polygon_masks = BitmapMasks(raw_masks, 28, 28) + assert len(polygon_masks) == 0 + assert polygon_masks.height == 28 + assert polygon_masks.width == 28 + + # init with masks contain 3 instances + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + assert isinstance(polygon_masks.masks, list) + assert isinstance(polygon_masks.masks[0], list) + assert isinstance(polygon_masks.masks[0][0], np.ndarray) + assert len(polygon_masks) == 3 + assert polygon_masks.height == 28 + assert polygon_masks.width == 28 + assert polygon_masks.to_ndarray().shape == (3, 28, 28) + + # init with raw masks of unsupported type + with pytest.raises(AssertionError): + raw_masks = [[[]]] + PolygonMasks(raw_masks, 28, 28) + + raw_masks = [dummy_raw_polygon_masks((3, 28, 28))] + PolygonMasks(raw_masks, 28, 28) + + +def test_polygon_mask_rescale(): + # rescale with empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + rescaled_masks = polygon_masks.rescale((56, 72)) + assert len(rescaled_masks) == 0 + assert rescaled_masks.height == 56 + assert rescaled_masks.width == 56 + assert rescaled_masks.to_ndarray().shape == (0, 56, 56) + + # rescale with polygon masks contain 3 instances + raw_masks = [[np.array([1, 1, 3, 1, 4, 3, 2, 4, 1, 3], dtype=np.float)]] + polygon_masks = PolygonMasks(raw_masks, 5, 5) + rescaled_masks = polygon_masks.rescale((12, 10)) + assert len(rescaled_masks) == 1 + assert rescaled_masks.height == 10 + assert rescaled_masks.width == 10 + assert rescaled_masks.to_ndarray().shape == (1, 10, 10) + truth = np.array( + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], + np.uint8) + assert (rescaled_masks.to_ndarray() == truth).all() + + +def test_polygon_mask_resize(): + # resize with empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + resized_masks = polygon_masks.resize((56, 72)) + assert len(resized_masks) == 0 + assert resized_masks.height == 56 + assert resized_masks.width == 72 + assert resized_masks.to_ndarray().shape == (0, 56, 72) + + # resize with polygon masks contain 1 instance 1 part + raw_masks1 = [[np.array([1, 1, 3, 1, 4, 3, 2, 4, 1, 3], dtype=np.float)]] + polygon_masks1 = PolygonMasks(raw_masks1, 5, 5) + resized_masks1 = polygon_masks1.resize((10, 10)) + assert len(resized_masks1) == 1 + assert resized_masks1.height == 10 + assert resized_masks1.width == 10 + assert resized_masks1.to_ndarray().shape == (1, 10, 10) + truth1 = np.array( + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 0, 0], + [0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], + np.uint8) + assert (resized_masks1.to_ndarray() == truth1).all() + + # resize with polygon masks contain 1 instance 2 part + raw_masks2 = [[ + np.array([0., 0., 1., 0., 1., 1.]), + np.array([1., 1., 2., 1., 2., 2., 1., 2.]) + ]] + polygon_masks2 = PolygonMasks(raw_masks2, 3, 3) + resized_masks2 = polygon_masks2.resize((6, 6)) + assert len(resized_masks2) == 1 + assert resized_masks2.height == 6 + assert resized_masks2.width == 6 + assert resized_masks2.to_ndarray().shape == (1, 6, 6) + truth2 = np.array( + [[0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0], + [0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]], np.uint8) + assert (resized_masks2.to_ndarray() == truth2).all() + + # resize with polygon masks contain 2 instances + raw_masks3 = [raw_masks1[0], raw_masks2[0]] + polygon_masks3 = PolygonMasks(raw_masks3, 5, 5) + resized_masks3 = polygon_masks3.resize((10, 10)) + assert len(resized_masks3) == 2 + assert resized_masks3.height == 10 + assert resized_masks3.width == 10 + assert resized_masks3.to_ndarray().shape == (2, 10, 10) + truth3 = np.stack([truth1, np.pad(truth2, ((0, 4), (0, 4)), 'constant')]) + assert (resized_masks3.to_ndarray() == truth3).all() + + # resize to non-square + raw_masks4 = [[np.array([1, 1, 3, 1, 4, 3, 2, 4, 1, 3], dtype=np.float)]] + polygon_masks4 = PolygonMasks(raw_masks4, 5, 5) + resized_masks4 = polygon_masks4.resize((5, 10)) + assert len(resized_masks4) == 1 + assert resized_masks4.height == 5 + assert resized_masks4.width == 10 + assert resized_masks4.to_ndarray().shape == (1, 5, 10) + truth4 = np.array( + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 0, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 1, 1, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], np.uint8) + assert (resized_masks4.to_ndarray() == truth4).all() + + +def test_polygon_mask_flip(): + # flip with empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + flipped_masks = polygon_masks.flip(flip_direction='horizontal') + assert len(flipped_masks) == 0 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + assert flipped_masks.to_ndarray().shape == (0, 28, 28) + + # TODO: fixed flip correctness checking after v2.0_coord is merged + # horizontally flip with polygon masks contain 3 instances + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + flipped_masks = polygon_masks.flip(flip_direction='horizontal') + flipped_flipped_masks = flipped_masks.flip(flip_direction='horizontal') + assert len(flipped_masks) == 3 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + assert flipped_masks.to_ndarray().shape == (3, 28, 28) + assert (polygon_masks.to_ndarray() == flipped_flipped_masks.to_ndarray() + ).all() + + # vertically flip with polygon masks contain 3 instances + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + flipped_masks = polygon_masks.flip(flip_direction='vertical') + flipped_flipped_masks = flipped_masks.flip(flip_direction='vertical') + assert len(flipped_masks) == 3 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + assert flipped_masks.to_ndarray().shape == (3, 28, 28) + assert (polygon_masks.to_ndarray() == flipped_flipped_masks.to_ndarray() + ).all() + + # diagonal flip with polygon masks contain 3 instances + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + flipped_masks = polygon_masks.flip(flip_direction='diagonal') + flipped_flipped_masks = flipped_masks.flip(flip_direction='diagonal') + assert len(flipped_masks) == 3 + assert flipped_masks.height == 28 + assert flipped_masks.width == 28 + assert flipped_masks.to_ndarray().shape == (3, 28, 28) + assert (polygon_masks.to_ndarray() == flipped_flipped_masks.to_ndarray() + ).all() + + +def test_polygon_mask_crop(): + dummy_bbox = np.array([0, 10, 10, 27], dtype=np.int) + # crop with empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + cropped_masks = polygon_masks.crop(dummy_bbox) + assert len(cropped_masks) == 0 + assert cropped_masks.height == 17 + assert cropped_masks.width == 10 + assert cropped_masks.to_ndarray().shape == (0, 17, 10) + + # crop with polygon masks contain 1 instances + raw_masks = [[np.array([1., 3., 5., 1., 5., 6., 1, 6])]] + polygon_masks = PolygonMasks(raw_masks, 7, 7) + bbox = np.array([0, 0, 3, 4]) + cropped_masks = polygon_masks.crop(bbox) + assert len(cropped_masks) == 1 + assert cropped_masks.height == 4 + assert cropped_masks.width == 3 + assert cropped_masks.to_ndarray().shape == (1, 4, 3) + truth = np.array([[0, 0, 0], [0, 0, 0], [0, 0, 1], [0, 1, 1]]) + assert (cropped_masks.to_ndarray() == truth).all() + + # crop with invalid bbox + with pytest.raises(AssertionError): + dummy_bbox = dummy_bboxes(2, 28, 28) + polygon_masks.crop(dummy_bbox) + + +def test_polygon_mask_pad(): + # pad with empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + padded_masks = polygon_masks.pad((56, 56)) + assert len(padded_masks) == 0 + assert padded_masks.height == 56 + assert padded_masks.width == 56 + assert padded_masks.to_ndarray().shape == (0, 56, 56) + + # pad with polygon masks contain 3 instances + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + padded_masks = polygon_masks.pad((56, 56)) + assert len(padded_masks) == 3 + assert padded_masks.height == 56 + assert padded_masks.width == 56 + assert padded_masks.to_ndarray().shape == (3, 56, 56) + assert (padded_masks.to_ndarray()[:, 28:, 28:] == 0).all() + + +def test_polygon_mask_expand(): + with pytest.raises(NotImplementedError): + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + polygon_masks.expand(56, 56, 10, 17) + + +def test_polygon_mask_crop_and_resize(): + dummy_bbox = dummy_bboxes(5, 28, 28) + inds = np.random.randint(0, 3, (5, )) + + # crop and resize with empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + cropped_resized_masks = polygon_masks.crop_and_resize( + dummy_bbox, (56, 56), inds) + assert len(cropped_resized_masks) == 0 + assert cropped_resized_masks.height == 56 + assert cropped_resized_masks.width == 56 + assert cropped_resized_masks.to_ndarray().shape == (0, 56, 56) + + # crop and resize with polygon masks contain 3 instances + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + cropped_resized_masks = polygon_masks.crop_and_resize( + dummy_bbox, (56, 56), inds) + assert len(cropped_resized_masks) == 5 + assert cropped_resized_masks.height == 56 + assert cropped_resized_masks.width == 56 + assert cropped_resized_masks.to_ndarray().shape == (5, 56, 56) + + +def test_polygon_mask_area(): + # area of empty polygon masks + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + assert polygon_masks.areas.sum() == 0 + + # area of polygon masks contain 1 instance + # here we hack a case that the gap between the area of bitmap and polygon + # is minor + raw_masks = [[np.array([1, 1, 5, 1, 3, 4])]] + polygon_masks = PolygonMasks(raw_masks, 6, 6) + polygon_area = polygon_masks.areas + bitmap_area = polygon_masks.to_bitmap().areas + assert len(polygon_area) == 1 + assert np.isclose(polygon_area, bitmap_area).all() + + +def test_polygon_mask_to_bitmap(): + # polygon masks contain 3 instances to bitmap + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + bitmap_masks = polygon_masks.to_bitmap() + assert (polygon_masks.to_ndarray() == bitmap_masks.to_ndarray()).all() + + +def test_polygon_mask_to_ndarray(): + # empty polygon masks to ndarray + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + ndarray_masks = polygon_masks.to_ndarray() + assert isinstance(ndarray_masks, np.ndarray) + assert ndarray_masks.shape == (0, 28, 28) + + # polygon masks contain 3 instances to ndarray + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + ndarray_masks = polygon_masks.to_ndarray() + assert isinstance(ndarray_masks, np.ndarray) + assert ndarray_masks.shape == (3, 28, 28) + + +def test_polygon_to_tensor(): + # empty polygon masks to tensor + raw_masks = dummy_raw_polygon_masks((0, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + tensor_masks = polygon_masks.to_tensor(dtype=torch.uint8, device='cpu') + assert isinstance(tensor_masks, torch.Tensor) + assert tensor_masks.shape == (0, 28, 28) + + # polygon masks contain 3 instances to tensor + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + tensor_masks = polygon_masks.to_tensor(dtype=torch.uint8, device='cpu') + assert isinstance(tensor_masks, torch.Tensor) + assert tensor_masks.shape == (3, 28, 28) + assert (tensor_masks.numpy() == polygon_masks.to_ndarray()).all() + + +def test_polygon_mask_index(): + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + # index by integer + polygon_masks[0] + # index by list + polygon_masks[[0, 1]] + # index by ndarray + polygon_masks[np.asarray([0, 1])] + with pytest.raises(ValueError): + # invalid index + polygon_masks[torch.Tensor([1, 2])] + + +def test_polygon_mask_iter(): + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + for i, polygon_mask in enumerate(polygon_masks): + assert np.equal(polygon_mask, raw_masks[i]).all() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_misc.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_misc.py new file mode 100644 index 00000000..2deb31e3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_misc.py @@ -0,0 +1,47 @@ +import numpy as np +import pytest +import torch + +from mmdet.core.mask.structures import BitmapMasks, PolygonMasks +from mmdet.core.utils import mask2ndarray + + +def dummy_raw_polygon_masks(size): + """ + Args: + size (tuple): expected shape of dummy masks, (N, H, W) + + Return: + list[list[ndarray]]: dummy mask + """ + num_obj, heigt, width = size + polygons = [] + for _ in range(num_obj): + num_points = np.random.randint(5) * 2 + 6 + polygons.append([np.random.uniform(0, min(heigt, width), num_points)]) + return polygons + + +def test_mask2ndarray(): + raw_masks = np.ones((3, 28, 28)) + bitmap_mask = BitmapMasks(raw_masks, 28, 28) + output_mask = mask2ndarray(bitmap_mask) + assert np.allclose(raw_masks, output_mask) + + raw_masks = dummy_raw_polygon_masks((3, 28, 28)) + polygon_masks = PolygonMasks(raw_masks, 28, 28) + output_mask = mask2ndarray(polygon_masks) + assert output_mask.shape == (3, 28, 28) + + raw_masks = np.ones((3, 28, 28)) + output_mask = mask2ndarray(raw_masks) + assert np.allclose(raw_masks, output_mask) + + raw_masks = torch.ones((3, 28, 28)) + output_mask = mask2ndarray(raw_masks) + assert np.allclose(raw_masks, output_mask) + + # test unsupported type + raw_masks = [] + with pytest.raises(TypeError): + output_mask = mask2ndarray(raw_masks) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_backbones.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_backbones.py new file mode 100644 index 00000000..7be57f32 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_backbones.py @@ -0,0 +1,1087 @@ +import pytest +import torch +from mmcv.ops import DeformConv2dPack +from torch.nn.modules import AvgPool2d, GroupNorm +from torch.nn.modules.batchnorm import _BatchNorm + +from mmdet.models.backbones import (RegNet, Res2Net, ResNeSt, ResNet, + ResNetV1d, ResNeXt, TridentResNet) +from mmdet.models.backbones.hourglass import HourglassNet +from mmdet.models.backbones.res2net import Bottle2neck +from mmdet.models.backbones.resnest import Bottleneck as BottleneckS +from mmdet.models.backbones.resnet import BasicBlock, Bottleneck +from mmdet.models.backbones.resnext import Bottleneck as BottleneckX +from mmdet.models.backbones.trident_resnet import TridentBottleneck +from mmdet.models.utils import ResLayer + + +def is_block(modules): + """Check if is ResNet building block.""" + if isinstance(modules, (BasicBlock, Bottleneck, BottleneckX, Bottle2neck)): + return True + return False + + +def is_norm(modules): + """Check if is one of the norms.""" + if isinstance(modules, (GroupNorm, _BatchNorm)): + return True + return False + + +def all_zeros(modules): + """Check if the weight(and bias) is all zero.""" + weight_zero = torch.allclose(modules.weight.data, + torch.zeros_like(modules.weight.data)) + if hasattr(modules, 'bias'): + bias_zero = torch.allclose(modules.bias.data, + torch.zeros_like(modules.bias.data)) + else: + bias_zero = True + + return weight_zero and bias_zero + + +def check_norm_state(modules, train_state): + """Check if norm layer is in correct train state.""" + for mod in modules: + if isinstance(mod, _BatchNorm): + if mod.training != train_state: + return False + return True + + +def test_resnet_basic_block(): + with pytest.raises(AssertionError): + # Not implemented yet. + dcn = dict(type='DCN', deform_groups=1, fallback_on_stride=False) + BasicBlock(64, 64, dcn=dcn) + + with pytest.raises(AssertionError): + # Not implemented yet. + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + BasicBlock(64, 64, plugins=plugins) + + with pytest.raises(AssertionError): + # Not implemented yet + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + position='after_conv2') + ] + BasicBlock(64, 64, plugins=plugins) + + # test BasicBlock structure and forward + block = BasicBlock(64, 64) + assert block.conv1.in_channels == 64 + assert block.conv1.out_channels == 64 + assert block.conv1.kernel_size == (3, 3) + assert block.conv2.in_channels == 64 + assert block.conv2.out_channels == 64 + assert block.conv2.kernel_size == (3, 3) + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test BasicBlock with checkpoint forward + block = BasicBlock(64, 64, with_cp=True) + assert block.with_cp + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + +def test_resnet_bottleneck(): + with pytest.raises(AssertionError): + # Style must be in ['pytorch', 'caffe'] + Bottleneck(64, 64, style='tensorflow') + + with pytest.raises(AssertionError): + # Allowed positions are 'after_conv1', 'after_conv2', 'after_conv3' + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv4') + ] + Bottleneck(64, 16, plugins=plugins) + + with pytest.raises(AssertionError): + # Need to specify different postfix to avoid duplicate plugin name + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + Bottleneck(64, 16, plugins=plugins) + + with pytest.raises(KeyError): + # Plugin type is not supported + plugins = [dict(cfg=dict(type='WrongPlugin'), position='after_conv3')] + Bottleneck(64, 16, plugins=plugins) + + # Test Bottleneck with checkpoint forward + block = Bottleneck(64, 16, with_cp=True) + assert block.with_cp + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test Bottleneck style + block = Bottleneck(64, 64, stride=2, style='pytorch') + assert block.conv1.stride == (1, 1) + assert block.conv2.stride == (2, 2) + block = Bottleneck(64, 64, stride=2, style='caffe') + assert block.conv1.stride == (2, 2) + assert block.conv2.stride == (1, 1) + + # Test Bottleneck DCN + dcn = dict(type='DCN', deform_groups=1, fallback_on_stride=False) + with pytest.raises(AssertionError): + Bottleneck(64, 64, dcn=dcn, conv_cfg=dict(type='Conv')) + block = Bottleneck(64, 64, dcn=dcn) + assert isinstance(block.conv2, DeformConv2dPack) + + # Test Bottleneck forward + block = Bottleneck(64, 16) + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test Bottleneck with 1 ContextBlock after conv3 + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + block = Bottleneck(64, 16, plugins=plugins) + assert block.context_block.in_channels == 64 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test Bottleneck with 1 GeneralizedAttention after conv2 + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + position='after_conv2') + ] + block = Bottleneck(64, 16, plugins=plugins) + assert block.gen_attention_block.in_channels == 16 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test Bottleneck with 1 GeneralizedAttention after conv2, 1 NonLocal2D + # after conv2, 1 ContextBlock after conv3 + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + position='after_conv2'), + dict(cfg=dict(type='NonLocal2d'), position='after_conv2'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + block = Bottleneck(64, 16, plugins=plugins) + assert block.gen_attention_block.in_channels == 16 + assert block.nonlocal_block.in_channels == 16 + assert block.context_block.in_channels == 64 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test Bottleneck with 1 ContextBlock after conv2, 2 ContextBlock after + # conv3 + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=1), + position='after_conv2'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=2), + position='after_conv3'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=3), + position='after_conv3') + ] + block = Bottleneck(64, 16, plugins=plugins) + assert block.context_block1.in_channels == 16 + assert block.context_block2.in_channels == 64 + assert block.context_block3.in_channels == 64 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + +def test_trident_resnet_bottleneck(): + trident_dilations = (1, 2, 3) + test_branch_idx = 1 + concat_output = True + trident_build_config = (trident_dilations, test_branch_idx, concat_output) + + with pytest.raises(AssertionError): + # Style must be in ['pytorch', 'caffe'] + TridentBottleneck( + *trident_build_config, inplanes=64, planes=64, style='tensorflow') + + with pytest.raises(AssertionError): + # Allowed positions are 'after_conv1', 'after_conv2', 'after_conv3' + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv4') + ] + TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + + with pytest.raises(AssertionError): + # Need to specify different postfix to avoid duplicate plugin name + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + + with pytest.raises(KeyError): + # Plugin type is not supported + plugins = [dict(cfg=dict(type='WrongPlugin'), position='after_conv3')] + TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + + # Test Bottleneck with checkpoint forward + block = TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, with_cp=True) + assert block.with_cp + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([block.num_branch, 64, 56, 56]) + + # Test Bottleneck style + block = TridentBottleneck( + *trident_build_config, + inplanes=64, + planes=64, + stride=2, + style='pytorch') + assert block.conv1.stride == (1, 1) + assert block.conv2.stride == (2, 2) + block = TridentBottleneck( + *trident_build_config, inplanes=64, planes=64, stride=2, style='caffe') + assert block.conv1.stride == (2, 2) + assert block.conv2.stride == (1, 1) + + # Test Bottleneck forward + block = TridentBottleneck(*trident_build_config, inplanes=64, planes=16) + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([block.num_branch, 64, 56, 56]) + + # Test Bottleneck with 1 ContextBlock after conv3 + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + block = TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + assert block.context_block.in_channels == 64 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([block.num_branch, 64, 56, 56]) + + # Test Bottleneck with 1 GeneralizedAttention after conv2 + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + position='after_conv2') + ] + block = TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + assert block.gen_attention_block.in_channels == 16 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([block.num_branch, 64, 56, 56]) + + # Test Bottleneck with 1 GeneralizedAttention after conv2, 1 NonLocal2D + # after conv2, 1 ContextBlock after conv3 + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + position='after_conv2'), + dict(cfg=dict(type='NonLocal2d'), position='after_conv2'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + position='after_conv3') + ] + block = TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + assert block.gen_attention_block.in_channels == 16 + assert block.nonlocal_block.in_channels == 16 + assert block.context_block.in_channels == 64 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([block.num_branch, 64, 56, 56]) + + # Test Bottleneck with 1 ContextBlock after conv2, 2 ContextBlock after + # conv3 + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=1), + position='after_conv2'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=2), + position='after_conv3'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=3), + position='after_conv3') + ] + block = TridentBottleneck( + *trident_build_config, inplanes=64, planes=16, plugins=plugins) + assert block.context_block1.in_channels == 16 + assert block.context_block2.in_channels == 64 + assert block.context_block3.in_channels == 64 + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([block.num_branch, 64, 56, 56]) + + +def test_trident_resnet_backbone(): + tridentresnet_config = dict( + num_branch=3, + test_branch_idx=1, + strides=(1, 2, 2), + dilations=(1, 1, 1), + trident_dilations=(1, 2, 3), + out_indices=(2, ), + ) + """Test tridentresnet backbone.""" + with pytest.raises(AssertionError): + # TridentResNet depth should be in [50, 101, 152] + TridentResNet(18, **tridentresnet_config) + + with pytest.raises(AssertionError): + # In TridentResNet: num_stages == 3 + TridentResNet(50, num_stages=4, **tridentresnet_config) + + model = TridentResNet(50, num_stages=3, **tridentresnet_config) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 1 + assert feat[0].shape == torch.Size([3, 1024, 14, 14]) + + +def test_resnet_res_layer(): + # Test ResLayer of 3 Bottleneck w\o downsample + layer = ResLayer(Bottleneck, 64, 16, 3) + assert len(layer) == 3 + assert layer[0].conv1.in_channels == 64 + assert layer[0].conv1.out_channels == 16 + for i in range(1, len(layer)): + assert layer[i].conv1.in_channels == 64 + assert layer[i].conv1.out_channels == 16 + for i in range(len(layer)): + assert layer[i].downsample is None + x = torch.randn(1, 64, 56, 56) + x_out = layer(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test ResLayer of 3 Bottleneck with downsample + layer = ResLayer(Bottleneck, 64, 64, 3) + assert layer[0].downsample[0].out_channels == 256 + for i in range(1, len(layer)): + assert layer[i].downsample is None + x = torch.randn(1, 64, 56, 56) + x_out = layer(x) + assert x_out.shape == torch.Size([1, 256, 56, 56]) + + # Test ResLayer of 3 Bottleneck with stride=2 + layer = ResLayer(Bottleneck, 64, 64, 3, stride=2) + assert layer[0].downsample[0].out_channels == 256 + assert layer[0].downsample[0].stride == (2, 2) + for i in range(1, len(layer)): + assert layer[i].downsample is None + x = torch.randn(1, 64, 56, 56) + x_out = layer(x) + assert x_out.shape == torch.Size([1, 256, 28, 28]) + + # Test ResLayer of 3 Bottleneck with stride=2 and average downsample + layer = ResLayer(Bottleneck, 64, 64, 3, stride=2, avg_down=True) + assert isinstance(layer[0].downsample[0], AvgPool2d) + assert layer[0].downsample[1].out_channels == 256 + assert layer[0].downsample[1].stride == (1, 1) + for i in range(1, len(layer)): + assert layer[i].downsample is None + x = torch.randn(1, 64, 56, 56) + x_out = layer(x) + assert x_out.shape == torch.Size([1, 256, 28, 28]) + + # Test ResLayer of 3 BasicBlock with stride=2 and downsample_first=False + layer = ResLayer(BasicBlock, 64, 64, 3, stride=2, downsample_first=False) + assert layer[2].downsample[0].out_channels == 64 + assert layer[2].downsample[0].stride == (2, 2) + for i in range(len(layer) - 1): + assert layer[i].downsample is None + x = torch.randn(1, 64, 56, 56) + x_out = layer(x) + assert x_out.shape == torch.Size([1, 64, 28, 28]) + + +def test_resnest_stem(): + # Test default stem_channels + model = ResNet(50) + assert model.stem_channels == 64 + assert model.conv1.out_channels == 64 + assert model.norm1.num_features == 64 + + # Test default stem_channels, with base_channels=32 + model = ResNet(50, base_channels=32) + assert model.stem_channels == 32 + assert model.conv1.out_channels == 32 + assert model.norm1.num_features == 32 + assert model.layer1[0].conv1.in_channels == 32 + + # Test stem_channels=64 + model = ResNet(50, stem_channels=64) + assert model.stem_channels == 64 + assert model.conv1.out_channels == 64 + assert model.norm1.num_features == 64 + assert model.layer1[0].conv1.in_channels == 64 + + # Test stem_channels=64, with base_channels=32 + model = ResNet(50, stem_channels=64, base_channels=32) + assert model.stem_channels == 64 + assert model.conv1.out_channels == 64 + assert model.norm1.num_features == 64 + assert model.layer1[0].conv1.in_channels == 64 + + # Test stem_channels=128 + model = ResNet(depth=50, stem_channels=128) + model.init_weights() + model.train() + assert model.conv1.out_channels == 128 + assert model.layer1[0].conv1.in_channels == 128 + + # Test V1d stem_channels + model = ResNetV1d(depth=50, stem_channels=128) + model.init_weights() + model.train() + assert model.stem[0].out_channels == 64 + assert model.stem[1].num_features == 64 + assert model.stem[3].out_channels == 64 + assert model.stem[4].num_features == 64 + assert model.stem[6].out_channels == 128 + assert model.stem[7].num_features == 128 + assert model.layer1[0].conv1.in_channels == 128 + + +def test_resnet_backbone(): + """Test resnet backbone.""" + with pytest.raises(KeyError): + # ResNet depth should be in [18, 34, 50, 101, 152] + ResNet(20) + + with pytest.raises(AssertionError): + # In ResNet: 1 <= num_stages <= 4 + ResNet(50, num_stages=0) + + with pytest.raises(AssertionError): + # len(stage_with_dcn) == num_stages + dcn = dict(type='DCN', deform_groups=1, fallback_on_stride=False) + ResNet(50, dcn=dcn, stage_with_dcn=(True, )) + + with pytest.raises(AssertionError): + # len(stage_with_plugin) == num_stages + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + stages=(False, True, True), + position='after_conv3') + ] + ResNet(50, plugins=plugins) + + with pytest.raises(AssertionError): + # In ResNet: 1 <= num_stages <= 4 + ResNet(50, num_stages=5) + + with pytest.raises(AssertionError): + # len(strides) == len(dilations) == num_stages + ResNet(50, strides=(1, ), dilations=(1, 1), num_stages=3) + + with pytest.raises(TypeError): + # pretrained must be a string path + model = ResNet(50) + model.init_weights(pretrained=0) + + with pytest.raises(AssertionError): + # Style must be in ['pytorch', 'caffe'] + ResNet(50, style='tensorflow') + + # Test ResNet50 norm_eval=True + model = ResNet(50, norm_eval=True) + model.init_weights() + model.train() + assert check_norm_state(model.modules(), False) + + # Test ResNet50 with torchvision pretrained weight + model = ResNet(depth=50, norm_eval=True) + model.init_weights('torchvision://resnet50') + model.train() + assert check_norm_state(model.modules(), False) + + # Test ResNet50 with first stage frozen + frozen_stages = 1 + model = ResNet(50, frozen_stages=frozen_stages) + model.init_weights() + model.train() + assert model.norm1.training is False + for layer in [model.conv1, model.norm1]: + for param in layer.parameters(): + assert param.requires_grad is False + for i in range(1, frozen_stages + 1): + layer = getattr(model, f'layer{i}') + for mod in layer.modules(): + if isinstance(mod, _BatchNorm): + assert mod.training is False + for param in layer.parameters(): + assert param.requires_grad is False + + # Test ResNet50V1d with first stage frozen + model = ResNetV1d(depth=50, frozen_stages=frozen_stages) + assert len(model.stem) == 9 + model.init_weights() + model.train() + check_norm_state(model.stem, False) + for param in model.stem.parameters(): + assert param.requires_grad is False + for i in range(1, frozen_stages + 1): + layer = getattr(model, f'layer{i}') + for mod in layer.modules(): + if isinstance(mod, _BatchNorm): + assert mod.training is False + for param in layer.parameters(): + assert param.requires_grad is False + + # Test ResNet18 forward + model = ResNet(18) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 64, 56, 56]) + assert feat[1].shape == torch.Size([1, 128, 28, 28]) + assert feat[2].shape == torch.Size([1, 256, 14, 14]) + assert feat[3].shape == torch.Size([1, 512, 7, 7]) + + # Test ResNet18 with checkpoint forward + model = ResNet(18, with_cp=True) + for m in model.modules(): + if is_block(m): + assert m.with_cp + + # Test ResNet50 with BatchNorm forward + model = ResNet(50) + for m in model.modules(): + if is_norm(m): + assert isinstance(m, _BatchNorm) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + # Test ResNet50 with layers 1, 2, 3 out forward + model = ResNet(50, out_indices=(0, 1, 2)) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 3 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + + # Test ResNet50 with checkpoint forward + model = ResNet(50, with_cp=True) + for m in model.modules(): + if is_block(m): + assert m.with_cp + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + # Test ResNet50 with GroupNorm forward + model = ResNet( + 50, norm_cfg=dict(type='GN', num_groups=32, requires_grad=True)) + for m in model.modules(): + if is_norm(m): + assert isinstance(m, GroupNorm) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + # Test ResNet50 with 1 GeneralizedAttention after conv2, 1 NonLocal2D + # after conv2, 1 ContextBlock after conv3 in layers 2, 3, 4 + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + stages=(False, True, True, True), + position='after_conv2'), + dict(cfg=dict(type='NonLocal2d'), position='after_conv2'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16), + stages=(False, True, True, False), + position='after_conv3') + ] + model = ResNet(50, plugins=plugins) + for m in model.layer1.modules(): + if is_block(m): + assert not hasattr(m, 'context_block') + assert not hasattr(m, 'gen_attention_block') + assert m.nonlocal_block.in_channels == 64 + for m in model.layer2.modules(): + if is_block(m): + assert m.nonlocal_block.in_channels == 128 + assert m.gen_attention_block.in_channels == 128 + assert m.context_block.in_channels == 512 + + for m in model.layer3.modules(): + if is_block(m): + assert m.nonlocal_block.in_channels == 256 + assert m.gen_attention_block.in_channels == 256 + assert m.context_block.in_channels == 1024 + + for m in model.layer4.modules(): + if is_block(m): + assert m.nonlocal_block.in_channels == 512 + assert m.gen_attention_block.in_channels == 512 + assert not hasattr(m, 'context_block') + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + # Test ResNet50 with 1 ContextBlock after conv2, 1 ContextBlock after + # conv3 in layers 2, 3, 4 + plugins = [ + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=1), + stages=(False, True, True, False), + position='after_conv3'), + dict( + cfg=dict(type='ContextBlock', ratio=1. / 16, postfix=2), + stages=(False, True, True, False), + position='after_conv3') + ] + + model = ResNet(50, plugins=plugins) + for m in model.layer1.modules(): + if is_block(m): + assert not hasattr(m, 'context_block') + assert not hasattr(m, 'context_block1') + assert not hasattr(m, 'context_block2') + for m in model.layer2.modules(): + if is_block(m): + assert not hasattr(m, 'context_block') + assert m.context_block1.in_channels == 512 + assert m.context_block2.in_channels == 512 + + for m in model.layer3.modules(): + if is_block(m): + assert not hasattr(m, 'context_block') + assert m.context_block1.in_channels == 1024 + assert m.context_block2.in_channels == 1024 + + for m in model.layer4.modules(): + if is_block(m): + assert not hasattr(m, 'context_block') + assert not hasattr(m, 'context_block1') + assert not hasattr(m, 'context_block2') + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + # Test ResNet50 zero initialization of residual + model = ResNet(50, zero_init_residual=True) + model.init_weights() + for m in model.modules(): + if isinstance(m, Bottleneck): + assert all_zeros(m.norm3) + elif isinstance(m, BasicBlock): + assert all_zeros(m.norm2) + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + # Test ResNetV1d forward + model = ResNetV1d(depth=50) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + +def test_renext_bottleneck(): + with pytest.raises(AssertionError): + # Style must be in ['pytorch', 'caffe'] + BottleneckX(64, 64, groups=32, base_width=4, style='tensorflow') + + # Test ResNeXt Bottleneck structure + block = BottleneckX( + 64, 64, groups=32, base_width=4, stride=2, style='pytorch') + assert block.conv2.stride == (2, 2) + assert block.conv2.groups == 32 + assert block.conv2.out_channels == 128 + + # Test ResNeXt Bottleneck with DCN + dcn = dict(type='DCN', deform_groups=1, fallback_on_stride=False) + with pytest.raises(AssertionError): + # conv_cfg must be None if dcn is not None + BottleneckX( + 64, + 64, + groups=32, + base_width=4, + dcn=dcn, + conv_cfg=dict(type='Conv')) + BottleneckX(64, 64, dcn=dcn) + + # Test ResNeXt Bottleneck forward + block = BottleneckX(64, 16, groups=32, base_width=4) + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + # Test ResNeXt Bottleneck forward with plugins + plugins = [ + dict( + cfg=dict( + type='GeneralizedAttention', + spatial_range=-1, + num_heads=8, + attention_type='0010', + kv_stride=2), + stages=(False, False, True, True), + position='after_conv2') + ] + block = BottleneckX(64, 16, groups=32, base_width=4, plugins=plugins) + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + +def test_resnext_backbone(): + with pytest.raises(KeyError): + # ResNeXt depth should be in [50, 101, 152] + ResNeXt(depth=18) + + # Test ResNeXt with group 32, base_width 4 + model = ResNeXt(depth=50, groups=32, base_width=4) + for m in model.modules(): + if is_block(m): + assert m.conv2.groups == 32 + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + +regnet_test_data = [ + ('regnetx_400mf', + dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, + bot_mul=1.0), [32, 64, 160, 384]), + ('regnetx_800mf', + dict(w0=56, wa=35.73, wm=2.28, group_w=16, depth=16, + bot_mul=1.0), [64, 128, 288, 672]), + ('regnetx_1.6gf', + dict(w0=80, wa=34.01, wm=2.25, group_w=24, depth=18, + bot_mul=1.0), [72, 168, 408, 912]), + ('regnetx_3.2gf', + dict(w0=88, wa=26.31, wm=2.25, group_w=48, depth=25, + bot_mul=1.0), [96, 192, 432, 1008]), + ('regnetx_4.0gf', + dict(w0=96, wa=38.65, wm=2.43, group_w=40, depth=23, + bot_mul=1.0), [80, 240, 560, 1360]), + ('regnetx_6.4gf', + dict(w0=184, wa=60.83, wm=2.07, group_w=56, depth=17, + bot_mul=1.0), [168, 392, 784, 1624]), + ('regnetx_8.0gf', + dict(w0=80, wa=49.56, wm=2.88, group_w=120, depth=23, + bot_mul=1.0), [80, 240, 720, 1920]), + ('regnetx_12gf', + dict(w0=168, wa=73.36, wm=2.37, group_w=112, depth=19, + bot_mul=1.0), [224, 448, 896, 2240]), +] + + +@pytest.mark.parametrize('arch_name,arch,out_channels', regnet_test_data) +def test_regnet_backbone(arch_name, arch, out_channels): + with pytest.raises(AssertionError): + # ResNeXt depth should be in [50, 101, 152] + RegNet(arch_name + '233') + + # Test RegNet with arch_name + model = RegNet(arch_name) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, out_channels[0], 56, 56]) + assert feat[1].shape == torch.Size([1, out_channels[1], 28, 28]) + assert feat[2].shape == torch.Size([1, out_channels[2], 14, 14]) + assert feat[3].shape == torch.Size([1, out_channels[3], 7, 7]) + + # Test RegNet with arch + model = RegNet(arch) + assert feat[0].shape == torch.Size([1, out_channels[0], 56, 56]) + assert feat[1].shape == torch.Size([1, out_channels[1], 28, 28]) + assert feat[2].shape == torch.Size([1, out_channels[2], 14, 14]) + assert feat[3].shape == torch.Size([1, out_channels[3], 7, 7]) + + +def test_res2net_bottle2neck(): + with pytest.raises(AssertionError): + # Style must be in ['pytorch', 'caffe'] + Bottle2neck(64, 64, base_width=26, scales=4, style='tensorflow') + + with pytest.raises(AssertionError): + # Scale must be larger than 1 + Bottle2neck(64, 64, base_width=26, scales=1, style='pytorch') + + # Test Res2Net Bottle2neck structure + block = Bottle2neck( + 64, 64, base_width=26, stride=2, scales=4, style='pytorch') + assert block.scales == 4 + + # Test Res2Net Bottle2neck with DCN + dcn = dict(type='DCN', deform_groups=1, fallback_on_stride=False) + with pytest.raises(AssertionError): + # conv_cfg must be None if dcn is not None + Bottle2neck( + 64, + 64, + base_width=26, + scales=4, + dcn=dcn, + conv_cfg=dict(type='Conv')) + Bottle2neck(64, 64, dcn=dcn) + + # Test Res2Net Bottle2neck forward + block = Bottle2neck(64, 16, base_width=26, scales=4) + x = torch.randn(1, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([1, 64, 56, 56]) + + +def test_res2net_backbone(): + with pytest.raises(KeyError): + # Res2Net depth should be in [50, 101, 152] + Res2Net(depth=18) + + # Test Res2Net with scales 4, base_width 26 + model = Res2Net(depth=50, scales=4, base_width=26) + for m in model.modules(): + if is_block(m): + assert m.scales == 4 + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([1, 256, 56, 56]) + assert feat[1].shape == torch.Size([1, 512, 28, 28]) + assert feat[2].shape == torch.Size([1, 1024, 14, 14]) + assert feat[3].shape == torch.Size([1, 2048, 7, 7]) + + +def test_hourglass_backbone(): + with pytest.raises(AssertionError): + # HourglassNet's num_stacks should larger than 0 + HourglassNet(num_stacks=0) + + with pytest.raises(AssertionError): + # len(stage_channels) should equal len(stage_blocks) + HourglassNet( + stage_channels=[256, 256, 384, 384, 384], + stage_blocks=[2, 2, 2, 2, 2, 4]) + + with pytest.raises(AssertionError): + # len(stage_channels) should lagrer than downsample_times + HourglassNet( + downsample_times=5, + stage_channels=[256, 256, 384, 384, 384], + stage_blocks=[2, 2, 2, 2, 2]) + + # Test HourglassNet-52 + model = HourglassNet(num_stacks=1) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 511, 511) + feat = model(imgs) + assert len(feat) == 1 + assert feat[0].shape == torch.Size([1, 256, 128, 128]) + + # Test HourglassNet-104 + model = HourglassNet(num_stacks=2) + model.init_weights() + model.train() + + imgs = torch.randn(1, 3, 511, 511) + feat = model(imgs) + assert len(feat) == 2 + assert feat[0].shape == torch.Size([1, 256, 128, 128]) + assert feat[1].shape == torch.Size([1, 256, 128, 128]) + + +def test_resnest_bottleneck(): + with pytest.raises(AssertionError): + # Style must be in ['pytorch', 'caffe'] + BottleneckS(64, 64, radix=2, reduction_factor=4, style='tensorflow') + + # Test ResNeSt Bottleneck structure + block = BottleneckS( + 64, 256, radix=2, reduction_factor=4, stride=2, style='pytorch') + assert block.avd_layer.stride == 2 + assert block.conv2.channels == 256 + + # Test ResNeSt Bottleneck forward + block = BottleneckS(64, 16, radix=2, reduction_factor=4) + x = torch.randn(2, 64, 56, 56) + x_out = block(x) + assert x_out.shape == torch.Size([2, 64, 56, 56]) + + +def test_resnest_backbone(): + with pytest.raises(KeyError): + # ResNeSt depth should be in [50, 101, 152, 200] + ResNeSt(depth=18) + + # Test ResNeSt with radix 2, reduction_factor 4 + model = ResNeSt( + depth=50, radix=2, reduction_factor=4, out_indices=(0, 1, 2, 3)) + model.init_weights() + model.train() + + imgs = torch.randn(2, 3, 224, 224) + feat = model(imgs) + assert len(feat) == 4 + assert feat[0].shape == torch.Size([2, 256, 56, 56]) + assert feat[1].shape == torch.Size([2, 512, 28, 28]) + assert feat[2].shape == torch.Size([2, 1024, 14, 14]) + assert feat[3].shape == torch.Size([2, 2048, 7, 7]) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_forward.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_forward.py new file mode 100644 index 00000000..8776201d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_forward.py @@ -0,0 +1,491 @@ +"""pytest tests/test_forward.py.""" +import copy +from os.path import dirname, exists, join + +import numpy as np +import pytest +import torch + + +def _get_config_directory(): + """Find the predefined detector config directory.""" + try: + # Assume we are running in the source mmdetection repo + repo_dpath = dirname(dirname(dirname(__file__))) + except NameError: + # For IPython development when this __file__ is not defined + import mmdet + repo_dpath = dirname(dirname(mmdet.__file__)) + config_dpath = join(repo_dpath, 'configs') + if not exists(config_dpath): + raise Exception('Cannot find config path') + return config_dpath + + +def _get_config_module(fname): + """Load a configuration as a python module.""" + from mmcv import Config + config_dpath = _get_config_directory() + config_fpath = join(config_dpath, fname) + config_mod = Config.fromfile(config_fpath) + return config_mod + + +def _get_detector_cfg(fname): + """Grab configs necessary to create a detector. + + These are deep copied to allow for safe modification of parameters without + influencing other tests. + """ + config = _get_config_module(fname) + model = copy.deepcopy(config.model) + return model + + +def test_sparse_rcnn_forward(): + config_path = 'sparse_rcnn/sparse_rcnn_r50_fpn_1x_coco.py' + model = _get_detector_cfg(config_path) + model['pretrained'] = None + from mmdet.models import build_detector + detector = build_detector(model) + input_shape = (1, 3, 550, 550) + mm_inputs = _demo_mm_inputs(input_shape, num_items=[5]) + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + # Test forward train with non-empty truth batch + detector = detector + imgs = imgs + detector.train() + gt_bboxes = mm_inputs['gt_bboxes'] + gt_bboxes = [item for item in gt_bboxes] + gt_labels = mm_inputs['gt_labels'] + gt_labels = [item for item in gt_labels] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + assert float(loss.item()) > 0 + detector.forward_dummy(imgs) + + # Test forward train with an empty truth batch + mm_inputs = _demo_mm_inputs(input_shape, num_items=[0]) + imgs = mm_inputs.pop('imgs') + imgs = imgs + img_metas = mm_inputs.pop('img_metas') + gt_bboxes = mm_inputs['gt_bboxes'] + gt_bboxes = [item for item in gt_bboxes] + gt_labels = mm_inputs['gt_labels'] + gt_labels = [item for item in gt_labels] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + assert float(loss.item()) > 0 + + # Test forward test + detector.eval() + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + rescale=True, + return_loss=False) + batch_results.append(result) + + +def test_rpn_forward(): + model = _get_detector_cfg('rpn/rpn_r50_fpn_1x_coco.py') + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (1, 3, 224, 224) + mm_inputs = _demo_mm_inputs(input_shape) + + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + + # Test forward train + gt_bboxes = mm_inputs['gt_bboxes'] + losses = detector.forward( + imgs, img_metas, gt_bboxes=gt_bboxes, return_loss=True) + assert isinstance(losses, dict) + + # Test forward test + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + return_loss=False) + batch_results.append(result) + + +@pytest.mark.parametrize( + 'cfg_file', + [ + 'retinanet/retinanet_r50_fpn_1x_coco.py', + 'guided_anchoring/ga_retinanet_r50_fpn_1x_coco.py', + 'ghm/retinanet_ghm_r50_fpn_1x_coco.py', + 'fcos/fcos_center_r50_caffe_fpn_gn-head_4x4_1x_coco.py', + 'foveabox/fovea_align_r50_fpn_gn-head_4x4_2x_coco.py', + # 'free_anchor/retinanet_free_anchor_r50_fpn_1x_coco.py', + # 'atss/atss_r50_fpn_1x_coco.py', # not ready for topk + 'reppoints/reppoints_moment_r50_fpn_1x_coco.py', + 'yolo/yolov3_d53_mstrain-608_273e_coco.py' + ]) +def test_single_stage_forward_gpu(cfg_file): + if not torch.cuda.is_available(): + import pytest + pytest.skip('test requires GPU and torch+cuda') + + model = _get_detector_cfg(cfg_file) + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (2, 3, 224, 224) + mm_inputs = _demo_mm_inputs(input_shape) + + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + + detector = detector.cuda() + imgs = imgs.cuda() + # Test forward train + gt_bboxes = [b.cuda() for b in mm_inputs['gt_bboxes']] + gt_labels = [g.cuda() for g in mm_inputs['gt_labels']] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + + # Test forward test + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + return_loss=False) + batch_results.append(result) + + +def test_faster_rcnn_ohem_forward(): + model = _get_detector_cfg( + 'faster_rcnn/faster_rcnn_r50_fpn_ohem_1x_coco.py') + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (1, 3, 256, 256) + + # Test forward train with a non-empty truth batch + mm_inputs = _demo_mm_inputs(input_shape, num_items=[10]) + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + assert float(loss.item()) > 0 + + # Test forward train with an empty truth batch + mm_inputs = _demo_mm_inputs(input_shape, num_items=[0]) + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + assert float(loss.item()) > 0 + + +# HTC is not ready yet +@pytest.mark.parametrize('cfg_file', [ + 'cascade_rcnn/cascade_mask_rcnn_r50_fpn_1x_coco.py', + 'mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py', + 'grid_rcnn/grid_rcnn_r50_fpn_gn-head_2x_coco.py', + 'ms_rcnn/ms_rcnn_r50_fpn_1x_coco.py' +]) +def test_two_stage_forward(cfg_file): + model = _get_detector_cfg(cfg_file) + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (1, 3, 256, 256) + + # Test forward train with a non-empty truth batch + mm_inputs = _demo_mm_inputs(input_shape, num_items=[10]) + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + gt_masks = mm_inputs['gt_masks'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + gt_masks=gt_masks, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + loss.requires_grad_(True) + assert float(loss.item()) > 0 + loss.backward() + + # Test forward train with an empty truth batch + mm_inputs = _demo_mm_inputs(input_shape, num_items=[0]) + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + gt_masks = mm_inputs['gt_masks'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + gt_masks=gt_masks, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + loss.requires_grad_(True) + assert float(loss.item()) > 0 + loss.backward() + + # Test forward test + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + return_loss=False) + batch_results.append(result) + + +@pytest.mark.parametrize( + 'cfg_file', ['ghm/retinanet_ghm_r50_fpn_1x_coco.py', 'ssd/ssd300_coco.py']) +def test_single_stage_forward_cpu(cfg_file): + model = _get_detector_cfg(cfg_file) + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (1, 3, 300, 300) + mm_inputs = _demo_mm_inputs(input_shape) + + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + + # Test forward train + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + + # Test forward test + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + return_loss=False) + batch_results.append(result) + + +def _demo_mm_inputs(input_shape=(1, 3, 300, 300), + num_items=None, num_classes=10): # yapf: disable + """Create a superset of inputs needed to run test or train batches. + + Args: + input_shape (tuple): + input batch dimensions + + num_items (None | List[int]): + specifies the number of boxes in each batch item + + num_classes (int): + number of different labels a box might have + """ + from mmdet.core import BitmapMasks + + (N, C, H, W) = input_shape + + rng = np.random.RandomState(0) + + imgs = rng.rand(*input_shape) + + img_metas = [{ + 'img_shape': (H, W, C), + 'ori_shape': (H, W, C), + 'pad_shape': (H, W, C), + 'filename': '.png', + 'scale_factor': 1.0, + 'flip': False, + } for _ in range(N)] + + gt_bboxes = [] + gt_labels = [] + gt_masks = [] + + for batch_idx in range(N): + if num_items is None: + num_boxes = rng.randint(1, 10) + else: + num_boxes = num_items[batch_idx] + + cx, cy, bw, bh = rng.rand(num_boxes, 4).T + + tl_x = ((cx * W) - (W * bw / 2)).clip(0, W) + tl_y = ((cy * H) - (H * bh / 2)).clip(0, H) + br_x = ((cx * W) + (W * bw / 2)).clip(0, W) + br_y = ((cy * H) + (H * bh / 2)).clip(0, H) + + boxes = np.vstack([tl_x, tl_y, br_x, br_y]).T + class_idxs = rng.randint(1, num_classes, size=num_boxes) + + gt_bboxes.append(torch.FloatTensor(boxes)) + gt_labels.append(torch.LongTensor(class_idxs)) + + mask = np.random.randint(0, 2, (len(boxes), H, W), dtype=np.uint8) + gt_masks.append(BitmapMasks(mask, H, W)) + + mm_inputs = { + 'imgs': torch.FloatTensor(imgs).requires_grad_(True), + 'img_metas': img_metas, + 'gt_bboxes': gt_bboxes, + 'gt_labels': gt_labels, + 'gt_bboxes_ignore': None, + 'gt_masks': gt_masks, + } + return mm_inputs + + +def test_yolact_forward(): + model = _get_detector_cfg('yolact/yolact_r50_1x8_coco.py') + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (1, 3, 550, 550) + mm_inputs = _demo_mm_inputs(input_shape) + + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + + # Test forward train + detector.train() + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + gt_masks = mm_inputs['gt_masks'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + gt_masks=gt_masks, + return_loss=True) + assert isinstance(losses, dict) + + # Test forward test + detector.eval() + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + rescale=True, + return_loss=False) + batch_results.append(result) + + +def test_detr_forward(): + model = _get_detector_cfg('detr/detr_r50_8x2_150e_coco.py') + model['pretrained'] = None + + from mmdet.models import build_detector + detector = build_detector(model) + + input_shape = (1, 3, 550, 550) + mm_inputs = _demo_mm_inputs(input_shape) + + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + + # Test forward train with non-empty truth batch + detector.train() + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + assert float(loss.item()) > 0 + + # Test forward train with an empty truth batch + mm_inputs = _demo_mm_inputs(input_shape, num_items=[0]) + imgs = mm_inputs.pop('imgs') + img_metas = mm_inputs.pop('img_metas') + gt_bboxes = mm_inputs['gt_bboxes'] + gt_labels = mm_inputs['gt_labels'] + losses = detector.forward( + imgs, + img_metas, + gt_bboxes=gt_bboxes, + gt_labels=gt_labels, + return_loss=True) + assert isinstance(losses, dict) + loss, _ = detector._parse_losses(losses) + assert float(loss.item()) > 0 + + # Test forward test + detector.eval() + with torch.no_grad(): + img_list = [g[None, :] for g in imgs] + batch_results = [] + for one_img, one_meta in zip(img_list, img_metas): + result = detector.forward([one_img], [[one_meta]], + rescale=True, + return_loss=False) + batch_results.append(result) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_heads.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_heads.py new file mode 100644 index 00000000..04ef584e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_heads.py @@ -0,0 +1,1311 @@ +import mmcv +import numpy as np +import torch + +from mmdet.core import bbox2roi, build_assigner, build_sampler +from mmdet.core.evaluation.bbox_overlaps import bbox_overlaps +from mmdet.models.dense_heads import (AnchorHead, CornerHead, FCOSHead, + FSAFHead, GuidedAnchorHead, PAAHead, + SABLRetinaHead, TransformerHead, + VFNetHead, YOLACTHead, YOLACTProtonet, + YOLACTSegmHead, paa_head) +from mmdet.models.dense_heads.paa_head import levels_to_images +from mmdet.models.roi_heads.bbox_heads import BBoxHead, SABLHead +from mmdet.models.roi_heads.mask_heads import FCNMaskHead, MaskIoUHead + + +def test_paa_head_loss(): + """Tests paa head loss when truth is empty and non-empty.""" + + class mock_skm(object): + + def GaussianMixture(self, *args, **kwargs): + return self + + def fit(self, loss): + pass + + def predict(self, loss): + components = np.zeros_like(loss, dtype=np.long) + return components.reshape(-1) + + def score_samples(self, loss): + scores = np.random.random(len(loss)) + return scores + + paa_head.skm = mock_skm() + + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + train_cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.1, + neg_iou_thr=0.1, + min_pos_iou=0, + ignore_iof_thr=-1), + allowed_border=-1, + pos_weight=-1, + debug=False)) + # since Focal Loss is not supported on CPU + self = PAAHead( + num_classes=4, + in_channels=1, + train_cfg=train_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='GIoULoss', loss_weight=1.3), + loss_centerness=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=0.5)) + feat = [ + torch.rand(1, 1, s // feat_size, s // feat_size) + for feat_size in [4, 8, 16, 32, 64] + ] + self.init_weights() + cls_scores, bbox_preds, iou_preds = self(feat) + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, iou_preds, gt_bboxes, + gt_labels, img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = empty_gt_losses['loss_cls'] + empty_box_loss = empty_gt_losses['loss_bbox'] + empty_iou_loss = empty_gt_losses['loss_iou'] + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + assert empty_iou_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(cls_scores, bbox_preds, iou_preds, gt_bboxes, + gt_labels, img_metas, gt_bboxes_ignore) + onegt_cls_loss = one_gt_losses['loss_cls'] + onegt_box_loss = one_gt_losses['loss_bbox'] + onegt_iou_loss = one_gt_losses['loss_iou'] + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + assert onegt_iou_loss.item() > 0, 'box loss should be non-zero' + n, c, h, w = 10, 4, 20, 20 + mlvl_tensor = [torch.ones(n, c, h, w) for i in range(5)] + results = levels_to_images(mlvl_tensor) + assert len(results) == n + assert results[0].size() == (h * w * 5, c) + assert self.with_score_voting + cls_scores = [torch.ones(4, 5, 5)] + bbox_preds = [torch.ones(4, 5, 5)] + iou_preds = [torch.ones(1, 5, 5)] + mlvl_anchors = [torch.ones(5 * 5, 4)] + img_shape = None + scale_factor = [0.5, 0.5] + cfg = mmcv.Config( + dict( + nms_pre=1000, + min_bbox_size=0, + score_thr=0.05, + nms=dict(type='nms', iou_threshold=0.6), + max_per_img=100)) + rescale = False + self._get_bboxes_single( + cls_scores, + bbox_preds, + iou_preds, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=rescale) + + +def test_fcos_head_loss(): + """Tests fcos head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + train_cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.4, + min_pos_iou=0, + ignore_iof_thr=-1), + allowed_border=-1, + pos_weight=-1, + debug=False)) + # since Focal Loss is not supported on CPU + self = FCOSHead( + num_classes=4, + in_channels=1, + train_cfg=train_cfg, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)) + feat = [ + torch.rand(1, 1, s // feat_size, s // feat_size) + for feat_size in [4, 8, 16, 32, 64] + ] + cls_scores, bbox_preds, centerness = self.forward(feat) + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, centerness, gt_bboxes, + gt_labels, img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = empty_gt_losses['loss_cls'] + empty_box_loss = empty_gt_losses['loss_bbox'] + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(cls_scores, bbox_preds, centerness, gt_bboxes, + gt_labels, img_metas, gt_bboxes_ignore) + onegt_cls_loss = one_gt_losses['loss_cls'] + onegt_box_loss = one_gt_losses['loss_bbox'] + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + +def test_vfnet_head_loss(): + """Tests vfnet head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + train_cfg = mmcv.Config( + dict( + assigner=dict(type='ATSSAssigner', topk=9), + allowed_border=-1, + pos_weight=-1, + debug=False)) + # since Focal Loss is not supported on CPU + self = VFNetHead( + num_classes=4, + in_channels=1, + train_cfg=train_cfg, + loss_cls=dict(type='VarifocalLoss', use_sigmoid=True, loss_weight=1.0)) + if torch.cuda.is_available(): + self.cuda() + feat = [ + torch.rand(1, 1, s // feat_size, s // feat_size).cuda() + for feat_size in [4, 8, 16, 32, 64] + ] + cls_scores, bbox_preds, bbox_preds_refine = self.forward(feat) + # Test that empty ground truth encourages the network to predict + # background + gt_bboxes = [torch.empty((0, 4)).cuda()] + gt_labels = [torch.LongTensor([]).cuda()] + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, bbox_preds_refine, + gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there + # should be no box loss. + empty_cls_loss = empty_gt_losses['loss_cls'] + empty_box_loss = empty_gt_losses['loss_bbox'] + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero + # for random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]).cuda(), + ] + gt_labels = [torch.LongTensor([2]).cuda()] + one_gt_losses = self.loss(cls_scores, bbox_preds, bbox_preds_refine, + gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + onegt_cls_loss = one_gt_losses['loss_cls'] + onegt_box_loss = one_gt_losses['loss_bbox'] + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + +def test_anchor_head_loss(): + """Tests anchor head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=0, + pos_weight=-1, + debug=False)) + self = AnchorHead(num_classes=4, in_channels=1, train_cfg=cfg) + + # Anchor head expects a multiple levels of features per image + feat = [ + torch.rand(1, 1, s // (2**(i + 2)), s // (2**(i + 2))) + for i in range(len(self.anchor_generator.strides)) + ] + cls_scores, bbox_preds = self.forward(feat) + + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = sum(empty_gt_losses['loss_cls']) + empty_box_loss = sum(empty_gt_losses['loss_bbox']) + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + onegt_cls_loss = sum(one_gt_losses['loss_cls']) + onegt_box_loss = sum(one_gt_losses['loss_bbox']) + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + +def test_fsaf_head_loss(): + """Tests anchor head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + cfg = dict( + reg_decoded_bbox=True, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=1, + scales_per_octave=1, + ratios=[1.0], + strides=[8, 16, 32, 64, 128]), + bbox_coder=dict(type='TBLRBBoxCoder', normalizer=4.0), + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0, + reduction='none'), + loss_bbox=dict( + type='IoULoss', eps=1e-6, loss_weight=1.0, reduction='none')) + + train_cfg = mmcv.Config( + dict( + assigner=dict( + type='CenterRegionAssigner', + pos_scale=0.2, + neg_scale=0.2, + min_pos_iof=0.01), + allowed_border=-1, + pos_weight=-1, + debug=False)) + head = FSAFHead(num_classes=4, in_channels=1, train_cfg=train_cfg, **cfg) + if torch.cuda.is_available(): + head.cuda() + # FSAF head expects a multiple levels of features per image + feat = [ + torch.rand(1, 1, s // (2**(i + 2)), s // (2**(i + 2))).cuda() + for i in range(len(head.anchor_generator.strides)) + ] + cls_scores, bbox_preds = head.forward(feat) + gt_bboxes_ignore = None + + # When truth is non-empty then both cls and box loss should be nonzero + # for random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]).cuda(), + ] + gt_labels = [torch.LongTensor([2]).cuda()] + one_gt_losses = head.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + onegt_cls_loss = sum(one_gt_losses['loss_cls']) + onegt_box_loss = sum(one_gt_losses['loss_bbox']) + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + # Test that empty ground truth encourages the network to predict bkg + gt_bboxes = [torch.empty((0, 4)).cuda()] + gt_labels = [torch.LongTensor([]).cuda()] + + empty_gt_losses = head.loss(cls_scores, bbox_preds, gt_bboxes, + gt_labels, img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there + # should be no box loss. + empty_cls_loss = sum(empty_gt_losses['loss_cls']) + empty_box_loss = sum(empty_gt_losses['loss_bbox']) + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + +def test_ga_anchor_head_loss(): + """Tests anchor head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + ga_assigner=dict( + type='ApproxMaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + ignore_iof_thr=-1), + ga_sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + allowed_border=-1, + center_ratio=0.2, + ignore_ratio=0.5, + pos_weight=-1, + debug=False)) + head = GuidedAnchorHead(num_classes=4, in_channels=4, train_cfg=cfg) + + # Anchor head expects a multiple levels of features per image + if torch.cuda.is_available(): + head.cuda() + feat = [ + torch.rand(1, 4, s // (2**(i + 2)), s // (2**(i + 2))).cuda() + for i in range(len(head.approx_anchor_generator.base_anchors)) + ] + cls_scores, bbox_preds, shape_preds, loc_preds = head.forward(feat) + + # Test that empty ground truth encourages the network to predict + # background + gt_bboxes = [torch.empty((0, 4)).cuda()] + gt_labels = [torch.LongTensor([]).cuda()] + + gt_bboxes_ignore = None + + empty_gt_losses = head.loss(cls_scores, bbox_preds, shape_preds, + loc_preds, gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + + # When there is no truth, the cls loss should be nonzero but there + # should be no box loss. + empty_cls_loss = sum(empty_gt_losses['loss_cls']) + empty_box_loss = sum(empty_gt_losses['loss_bbox']) + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero + # for random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]).cuda(), + ] + gt_labels = [torch.LongTensor([2]).cuda()] + one_gt_losses = head.loss(cls_scores, bbox_preds, shape_preds, + loc_preds, gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + onegt_cls_loss = sum(one_gt_losses['loss_cls']) + onegt_box_loss = sum(one_gt_losses['loss_bbox']) + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + +def test_bbox_head_loss(): + """Tests bbox head loss when truth is empty and non-empty.""" + self = BBoxHead(in_channels=8, roi_feat_size=3) + + # Dummy proposals + proposal_list = [ + torch.Tensor([[23.6667, 23.8757, 228.6326, 153.8874]]), + ] + + target_cfg = mmcv.Config(dict(pos_weight=1)) + + # Test bbox loss when truth is empty + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + + sampling_results = _dummy_bbox_sampling(proposal_list, gt_bboxes, + gt_labels) + + bbox_targets = self.get_targets(sampling_results, gt_bboxes, gt_labels, + target_cfg) + labels, label_weights, bbox_targets, bbox_weights = bbox_targets + + # Create dummy features "extracted" for each sampled bbox + num_sampled = sum(len(res.bboxes) for res in sampling_results) + rois = bbox2roi([res.bboxes for res in sampling_results]) + dummy_feats = torch.rand(num_sampled, 8 * 3 * 3) + cls_scores, bbox_preds = self.forward(dummy_feats) + + losses = self.loss(cls_scores, bbox_preds, rois, labels, label_weights, + bbox_targets, bbox_weights) + assert losses.get('loss_cls', 0) > 0, 'cls-loss should be non-zero' + assert losses.get('loss_bbox', 0) == 0, 'empty gt loss should be zero' + + # Test bbox loss when truth is non-empty + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + + sampling_results = _dummy_bbox_sampling(proposal_list, gt_bboxes, + gt_labels) + rois = bbox2roi([res.bboxes for res in sampling_results]) + + bbox_targets = self.get_targets(sampling_results, gt_bboxes, gt_labels, + target_cfg) + labels, label_weights, bbox_targets, bbox_weights = bbox_targets + + # Create dummy features "extracted" for each sampled bbox + num_sampled = sum(len(res.bboxes) for res in sampling_results) + dummy_feats = torch.rand(num_sampled, 8 * 3 * 3) + cls_scores, bbox_preds = self.forward(dummy_feats) + + losses = self.loss(cls_scores, bbox_preds, rois, labels, label_weights, + bbox_targets, bbox_weights) + assert losses.get('loss_cls', 0) > 0, 'cls-loss should be non-zero' + assert losses.get('loss_bbox', 0) > 0, 'box-loss should be non-zero' + + +def test_sabl_bbox_head_loss(): + """Tests bbox head loss when truth is empty and non-empty.""" + self = SABLHead( + num_classes=4, + cls_in_channels=3, + reg_in_channels=3, + cls_out_channels=3, + reg_offset_out_channels=3, + reg_cls_out_channels=3, + roi_feat_size=7) + + # Dummy proposals + proposal_list = [ + torch.Tensor([[23.6667, 23.8757, 228.6326, 153.8874]]), + ] + + target_cfg = mmcv.Config(dict(pos_weight=1)) + + # Test bbox loss when truth is empty + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + + sampling_results = _dummy_bbox_sampling(proposal_list, gt_bboxes, + gt_labels) + + bbox_targets = self.get_targets(sampling_results, gt_bboxes, gt_labels, + target_cfg) + labels, label_weights, bbox_targets, bbox_weights = bbox_targets + + # Create dummy features "extracted" for each sampled bbox + num_sampled = sum(len(res.bboxes) for res in sampling_results) + rois = bbox2roi([res.bboxes for res in sampling_results]) + dummy_feats = torch.rand(num_sampled, 3, 7, 7) + cls_scores, bbox_preds = self.forward(dummy_feats) + + losses = self.loss(cls_scores, bbox_preds, rois, labels, label_weights, + bbox_targets, bbox_weights) + assert losses.get('loss_cls', 0) > 0, 'cls-loss should be non-zero' + assert losses.get('loss_bbox_cls', + 0) == 0, 'empty gt bbox-cls-loss should be zero' + assert losses.get('loss_bbox_reg', + 0) == 0, 'empty gt bbox-reg-loss should be zero' + + # Test bbox loss when truth is non-empty + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + + sampling_results = _dummy_bbox_sampling(proposal_list, gt_bboxes, + gt_labels) + rois = bbox2roi([res.bboxes for res in sampling_results]) + + bbox_targets = self.get_targets(sampling_results, gt_bboxes, gt_labels, + target_cfg) + labels, label_weights, bbox_targets, bbox_weights = bbox_targets + + # Create dummy features "extracted" for each sampled bbox + num_sampled = sum(len(res.bboxes) for res in sampling_results) + dummy_feats = torch.rand(num_sampled, 3, 7, 7) + cls_scores, bbox_preds = self.forward(dummy_feats) + + losses = self.loss(cls_scores, bbox_preds, rois, labels, label_weights, + bbox_targets, bbox_weights) + assert losses.get('loss_bbox_cls', + 0) > 0, 'empty gt bbox-cls-loss should be zero' + assert losses.get('loss_bbox_reg', + 0) > 0, 'empty gt bbox-reg-loss should be zero' + + +def test_sabl_retina_head_loss(): + """Tests anchor head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + cfg = mmcv.Config( + dict( + assigner=dict( + type='ApproxMaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.4, + min_pos_iou=0.0, + ignore_iof_thr=-1), + allowed_border=-1, + pos_weight=-1, + debug=False)) + head = SABLRetinaHead( + num_classes=4, + in_channels=3, + feat_channels=10, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + train_cfg=cfg) + if torch.cuda.is_available(): + head.cuda() + # Anchor head expects a multiple levels of features per image + feat = [ + torch.rand(1, 3, s // (2**(i + 2)), s // (2**(i + 2))).cuda() + for i in range(len(head.approx_anchor_generator.base_anchors)) + ] + cls_scores, bbox_preds = head.forward(feat) + + # Test that empty ground truth encourages the network + # to predict background + gt_bboxes = [torch.empty((0, 4)).cuda()] + gt_labels = [torch.LongTensor([]).cuda()] + + gt_bboxes_ignore = None + empty_gt_losses = head.loss(cls_scores, bbox_preds, gt_bboxes, + gt_labels, img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there + # should be no box loss. + empty_cls_loss = sum(empty_gt_losses['loss_cls']) + empty_box_cls_loss = sum(empty_gt_losses['loss_bbox_cls']) + empty_box_reg_loss = sum(empty_gt_losses['loss_bbox_reg']) + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_cls_loss.item() == 0, ( + 'there should be no box cls loss when there are no true boxes') + assert empty_box_reg_loss.item() == 0, ( + 'there should be no box reg loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should + # be nonzero for random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]).cuda(), + ] + gt_labels = [torch.LongTensor([2]).cuda()] + one_gt_losses = head.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + onegt_cls_loss = sum(one_gt_losses['loss_cls']) + onegt_box_cls_loss = sum(one_gt_losses['loss_bbox_cls']) + onegt_box_reg_loss = sum(one_gt_losses['loss_bbox_reg']) + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_cls_loss.item() > 0, 'box loss cls should be non-zero' + assert onegt_box_reg_loss.item() > 0, 'box loss reg should be non-zero' + + +def test_refine_boxes(): + """Mirrors the doctest in + ``mmdet.models.bbox_heads.bbox_head.BBoxHead.refine_boxes`` but checks for + multiple values of n_roi / n_img.""" + self = BBoxHead(reg_class_agnostic=True) + + test_settings = [ + + # Corner case: less rois than images + { + 'n_roi': 2, + 'n_img': 4, + 'rng': 34285940 + }, + + # Corner case: no images + { + 'n_roi': 0, + 'n_img': 0, + 'rng': 52925222 + }, + + # Corner cases: few images / rois + { + 'n_roi': 1, + 'n_img': 1, + 'rng': 1200281 + }, + { + 'n_roi': 2, + 'n_img': 1, + 'rng': 1200282 + }, + { + 'n_roi': 2, + 'n_img': 2, + 'rng': 1200283 + }, + { + 'n_roi': 1, + 'n_img': 2, + 'rng': 1200284 + }, + + # Corner case: no rois few images + { + 'n_roi': 0, + 'n_img': 1, + 'rng': 23955860 + }, + { + 'n_roi': 0, + 'n_img': 2, + 'rng': 25830516 + }, + + # Corner case: no rois many images + { + 'n_roi': 0, + 'n_img': 10, + 'rng': 671346 + }, + { + 'n_roi': 0, + 'n_img': 20, + 'rng': 699807 + }, + + # Corner case: cal_similarity num rois and images + { + 'n_roi': 20, + 'n_img': 20, + 'rng': 1200238 + }, + { + 'n_roi': 10, + 'n_img': 20, + 'rng': 1200238 + }, + { + 'n_roi': 5, + 'n_img': 5, + 'rng': 1200238 + }, + + # ---------------------------------- + # Common case: more rois than images + { + 'n_roi': 100, + 'n_img': 1, + 'rng': 337156 + }, + { + 'n_roi': 150, + 'n_img': 2, + 'rng': 275898 + }, + { + 'n_roi': 500, + 'n_img': 5, + 'rng': 4903221 + }, + ] + + for demokw in test_settings: + try: + n_roi = demokw['n_roi'] + n_img = demokw['n_img'] + rng = demokw['rng'] + + print(f'Test refine_boxes case: {demokw!r}') + tup = _demodata_refine_boxes(n_roi, n_img, rng=rng) + rois, labels, bbox_preds, pos_is_gts, img_metas = tup + bboxes_list = self.refine_bboxes(rois, labels, bbox_preds, + pos_is_gts, img_metas) + assert len(bboxes_list) == n_img + assert sum(map(len, bboxes_list)) <= n_roi + assert all(b.shape[1] == 4 for b in bboxes_list) + except Exception: + print(f'Test failed with demokw={demokw!r}') + raise + + +def _demodata_refine_boxes(n_roi, n_img, rng=0): + """Create random test data for the + ``mmdet.models.bbox_heads.bbox_head.BBoxHead.refine_boxes`` method.""" + import numpy as np + from mmdet.core.bbox.demodata import random_boxes + from mmdet.core.bbox.demodata import ensure_rng + try: + import kwarray + except ImportError: + import pytest + pytest.skip('kwarray is required for this test') + scale = 512 + rng = ensure_rng(rng) + img_metas = [{'img_shape': (scale, scale)} for _ in range(n_img)] + # Create rois in the expected format + roi_boxes = random_boxes(n_roi, scale=scale, rng=rng) + if n_img == 0: + assert n_roi == 0, 'cannot have any rois if there are no images' + img_ids = torch.empty((0, ), dtype=torch.long) + roi_boxes = torch.empty((0, 4), dtype=torch.float32) + else: + img_ids = rng.randint(0, n_img, (n_roi, )) + img_ids = torch.from_numpy(img_ids) + rois = torch.cat([img_ids[:, None].float(), roi_boxes], dim=1) + # Create other args + labels = rng.randint(0, 2, (n_roi, )) + labels = torch.from_numpy(labels).long() + bbox_preds = random_boxes(n_roi, scale=scale, rng=rng) + # For each image, pretend random positive boxes are gts + is_label_pos = (labels.numpy() > 0).astype(np.int) + lbl_per_img = kwarray.group_items(is_label_pos, img_ids.numpy()) + pos_per_img = [sum(lbl_per_img.get(gid, [])) for gid in range(n_img)] + # randomly generate with numpy then sort with torch + _pos_is_gts = [ + rng.randint(0, 2, (npos, )).astype(np.uint8) for npos in pos_per_img + ] + pos_is_gts = [ + torch.from_numpy(p).sort(descending=True)[0] for p in _pos_is_gts + ] + return rois, labels, bbox_preds, pos_is_gts, img_metas + + +def test_mask_head_loss(): + """Test mask head loss when mask target is empty.""" + self = FCNMaskHead( + num_convs=1, + roi_feat_size=6, + in_channels=8, + conv_out_channels=8, + num_classes=8) + + # Dummy proposals + proposal_list = [ + torch.Tensor([[23.6667, 23.8757, 228.6326, 153.8874]]), + ] + + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + sampling_results = _dummy_bbox_sampling(proposal_list, gt_bboxes, + gt_labels) + + # create dummy mask + import numpy as np + from mmdet.core import BitmapMasks + dummy_mask = np.random.randint(0, 2, (1, 160, 240), dtype=np.uint8) + gt_masks = [BitmapMasks(dummy_mask, 160, 240)] + + # create dummy train_cfg + train_cfg = mmcv.Config(dict(mask_size=12, mask_thr_binary=0.5)) + + # Create dummy features "extracted" for each sampled bbox + num_sampled = sum(len(res.bboxes) for res in sampling_results) + dummy_feats = torch.rand(num_sampled, 8, 6, 6) + + mask_pred = self.forward(dummy_feats) + mask_targets = self.get_targets(sampling_results, gt_masks, train_cfg) + pos_labels = torch.cat([res.pos_gt_labels for res in sampling_results]) + loss_mask = self.loss(mask_pred, mask_targets, pos_labels) + + onegt_mask_loss = sum(loss_mask['loss_mask']) + assert onegt_mask_loss.item() > 0, 'mask loss should be non-zero' + + # test mask_iou_head + mask_iou_head = MaskIoUHead( + num_convs=1, + num_fcs=1, + roi_feat_size=6, + in_channels=8, + conv_out_channels=8, + fc_out_channels=8, + num_classes=8) + + pos_mask_pred = mask_pred[range(mask_pred.size(0)), pos_labels] + mask_iou_pred = mask_iou_head(dummy_feats, pos_mask_pred) + pos_mask_iou_pred = mask_iou_pred[range(mask_iou_pred.size(0)), pos_labels] + + mask_iou_targets = mask_iou_head.get_targets(sampling_results, gt_masks, + pos_mask_pred, mask_targets, + train_cfg) + loss_mask_iou = mask_iou_head.loss(pos_mask_iou_pred, mask_iou_targets) + onegt_mask_iou_loss = loss_mask_iou['loss_mask_iou'].sum() + assert onegt_mask_iou_loss.item() >= 0 + + +def _dummy_bbox_sampling(proposal_list, gt_bboxes, gt_labels): + """Create sample results that can be passed to BBoxHead.get_targets.""" + num_imgs = 1 + feat = torch.rand(1, 1, 3, 3) + assign_config = dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0.5, + ignore_iof_thr=-1) + sampler_config = dict( + type='RandomSampler', + num=512, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True) + bbox_assigner = build_assigner(assign_config) + bbox_sampler = build_sampler(sampler_config) + gt_bboxes_ignore = [None for _ in range(num_imgs)] + sampling_results = [] + for i in range(num_imgs): + assign_result = bbox_assigner.assign(proposal_list[i], gt_bboxes[i], + gt_bboxes_ignore[i], gt_labels[i]) + sampling_result = bbox_sampler.sample( + assign_result, + proposal_list[i], + gt_bboxes[i], + gt_labels[i], + feats=feat) + sampling_results.append(sampling_result) + + return sampling_results + + +def test_corner_head_loss(): + """Tests corner head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + self = CornerHead(num_classes=4, in_channels=1) + + # Corner head expects a multiple levels of features per image + feat = [ + torch.rand(1, 1, s // 4, s // 4) for _ in range(self.num_feat_levels) + ] + tl_heats, br_heats, tl_embs, br_embs, tl_offs, br_offs = self.forward(feat) + + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + + gt_bboxes_ignore = None + empty_gt_losses = self.loss(tl_heats, br_heats, tl_embs, br_embs, tl_offs, + br_offs, gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + empty_det_loss = sum(empty_gt_losses['det_loss']) + empty_push_loss = sum(empty_gt_losses['push_loss']) + empty_pull_loss = sum(empty_gt_losses['pull_loss']) + empty_off_loss = sum(empty_gt_losses['off_loss']) + assert empty_det_loss.item() > 0, 'det loss should be non-zero' + assert empty_push_loss.item() == 0, ( + 'there should be no push loss when there are no true boxes') + assert empty_pull_loss.item() == 0, ( + 'there should be no pull loss when there are no true boxes') + assert empty_off_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(tl_heats, br_heats, tl_embs, br_embs, tl_offs, + br_offs, gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + onegt_det_loss = sum(one_gt_losses['det_loss']) + onegt_push_loss = sum(one_gt_losses['push_loss']) + onegt_pull_loss = sum(one_gt_losses['pull_loss']) + onegt_off_loss = sum(one_gt_losses['off_loss']) + assert onegt_det_loss.item() > 0, 'det loss should be non-zero' + assert onegt_push_loss.item() == 0, ( + 'there should be no push loss when there are only one true box') + assert onegt_pull_loss.item() > 0, 'pull loss should be non-zero' + assert onegt_off_loss.item() > 0, 'off loss should be non-zero' + + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874], + [123.6667, 123.8757, 138.6326, 251.8874]]), + ] + gt_labels = [torch.LongTensor([2, 3])] + + # equalize the corners' embedding value of different objects to make the + # push_loss larger than 0 + gt_bboxes_ind = (gt_bboxes[0] // 4).int().tolist() + for tl_emb_feat, br_emb_feat in zip(tl_embs, br_embs): + tl_emb_feat[:, :, gt_bboxes_ind[0][1], + gt_bboxes_ind[0][0]] = tl_emb_feat[:, :, + gt_bboxes_ind[1][1], + gt_bboxes_ind[1][0]] + br_emb_feat[:, :, gt_bboxes_ind[0][3], + gt_bboxes_ind[0][2]] = br_emb_feat[:, :, + gt_bboxes_ind[1][3], + gt_bboxes_ind[1][2]] + + two_gt_losses = self.loss(tl_heats, br_heats, tl_embs, br_embs, tl_offs, + br_offs, gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + twogt_det_loss = sum(two_gt_losses['det_loss']) + twogt_push_loss = sum(two_gt_losses['push_loss']) + twogt_pull_loss = sum(two_gt_losses['pull_loss']) + twogt_off_loss = sum(two_gt_losses['off_loss']) + assert twogt_det_loss.item() > 0, 'det loss should be non-zero' + assert twogt_push_loss.item() > 0, 'push loss should be non-zero' + assert twogt_pull_loss.item() > 0, 'pull loss should be non-zero' + assert twogt_off_loss.item() > 0, 'off loss should be non-zero' + + +def test_corner_head_encode_and_decode_heatmap(): + """Tests corner head generating and decoding the heatmap.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3), + 'border': (0, 0, 0, 0) + }] + + gt_bboxes = [ + torch.Tensor([[10, 20, 200, 240], [40, 50, 100, 200], + [10, 20, 200, 240]]) + ] + gt_labels = [torch.LongTensor([1, 1, 2])] + + self = CornerHead(num_classes=4, in_channels=1, corner_emb_channels=1) + + feat = [ + torch.rand(1, 1, s // 4, s // 4) for _ in range(self.num_feat_levels) + ] + + targets = self.get_targets( + gt_bboxes, + gt_labels, + feat[0].shape, + img_metas[0]['pad_shape'], + with_corner_emb=self.with_corner_emb) + + gt_tl_heatmap = targets['topleft_heatmap'] + gt_br_heatmap = targets['bottomright_heatmap'] + gt_tl_offset = targets['topleft_offset'] + gt_br_offset = targets['bottomright_offset'] + embedding = targets['corner_embedding'] + [top, left], [bottom, right] = embedding[0][0] + gt_tl_embedding_heatmap = torch.zeros([1, 1, s // 4, s // 4]) + gt_br_embedding_heatmap = torch.zeros([1, 1, s // 4, s // 4]) + gt_tl_embedding_heatmap[0, 0, top, left] = 1 + gt_br_embedding_heatmap[0, 0, bottom, right] = 1 + + batch_bboxes, batch_scores, batch_clses = self.decode_heatmap( + tl_heat=gt_tl_heatmap, + br_heat=gt_br_heatmap, + tl_off=gt_tl_offset, + br_off=gt_br_offset, + tl_emb=gt_tl_embedding_heatmap, + br_emb=gt_br_embedding_heatmap, + img_meta=img_metas[0], + k=100, + kernel=3, + distance_threshold=0.5) + + bboxes = batch_bboxes.view(-1, 4) + scores = batch_scores.view(-1, 1) + clses = batch_clses.view(-1, 1) + + idx = scores.argsort(dim=0, descending=True) + bboxes = bboxes[idx].view(-1, 4) + scores = scores[idx].view(-1) + clses = clses[idx].view(-1) + + valid_bboxes = bboxes[torch.where(scores > 0.05)] + valid_labels = clses[torch.where(scores > 0.05)] + max_coordinate = valid_bboxes.max() + offsets = valid_labels.to(valid_bboxes) * (max_coordinate + 1) + gt_offsets = gt_labels[0].to(gt_bboxes[0]) * (max_coordinate + 1) + + offset_bboxes = valid_bboxes + offsets[:, None] + offset_gtbboxes = gt_bboxes[0] + gt_offsets[:, None] + + iou_matrix = bbox_overlaps(offset_bboxes.numpy(), offset_gtbboxes.numpy()) + assert (iou_matrix == 1).sum() == 3 + + +def test_yolact_head_loss(): + """Tests yolact head losses when truth is empty and non-empty.""" + s = 550 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + train_cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.4, + min_pos_iou=0., + ignore_iof_thr=-1, + gt_max_assign_all=False), + smoothl1_beta=1., + allowed_border=-1, + pos_weight=-1, + neg_pos_ratio=3, + debug=False, + min_gt_box_wh=[4.0, 4.0])) + bbox_head = YOLACTHead( + num_classes=80, + in_channels=256, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=3, + scales_per_octave=1, + base_sizes=[8, 16, 32, 64, 128], + ratios=[0.5, 1.0, 2.0], + strides=[550.0 / x for x in [69, 35, 18, 9, 5]], + centers=[(550 * 0.5 / x, 550 * 0.5 / x) + for x in [69, 35, 18, 9, 5]]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[0.1, 0.1, 0.2, 0.2]), + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + reduction='none', + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.5), + num_head_convs=1, + num_protos=32, + use_ohem=True, + train_cfg=train_cfg) + segm_head = YOLACTSegmHead( + in_channels=256, + num_classes=80, + loss_segm=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)) + mask_head = YOLACTProtonet( + num_classes=80, + in_channels=256, + num_protos=32, + max_masks_to_train=100, + loss_mask_weight=6.125) + feat = [ + torch.rand(1, 256, feat_size, feat_size) + for feat_size in [69, 35, 18, 9, 5] + ] + cls_score, bbox_pred, coeff_pred = bbox_head.forward(feat) + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + gt_masks = [torch.empty((0, 550, 550))] + gt_bboxes_ignore = None + empty_gt_losses, sampling_results = bbox_head.loss( + cls_score, + bbox_pred, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = sum(empty_gt_losses['loss_cls']) + empty_box_loss = sum(empty_gt_losses['loss_bbox']) + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # Test segm head and mask head + segm_head_outs = segm_head(feat[0]) + empty_segm_loss = segm_head.loss(segm_head_outs, gt_masks, gt_labels) + mask_pred = mask_head(feat[0], coeff_pred, gt_bboxes, img_metas, + sampling_results) + empty_mask_loss = mask_head.loss(mask_pred, gt_masks, gt_bboxes, img_metas, + sampling_results) + # When there is no truth, the segm and mask loss should be zero. + empty_segm_loss = sum(empty_segm_loss['loss_segm']) + empty_mask_loss = sum(empty_mask_loss['loss_mask']) + assert empty_segm_loss.item() == 0, ( + 'there should be no segm loss when there are no true boxes') + assert empty_mask_loss == 0, ( + 'there should be no mask loss when there are no true boxes') + + # When truth is non-empty then cls, box, mask, segm loss should be + # nonzero for random inputs. + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + gt_masks = [(torch.rand((1, 550, 550)) > 0.5).float()] + + one_gt_losses, sampling_results = bbox_head.loss( + cls_score, + bbox_pred, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=gt_bboxes_ignore) + one_gt_cls_loss = sum(one_gt_losses['loss_cls']) + one_gt_box_loss = sum(one_gt_losses['loss_bbox']) + assert one_gt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert one_gt_box_loss.item() > 0, 'box loss should be non-zero' + + one_gt_segm_loss = segm_head.loss(segm_head_outs, gt_masks, gt_labels) + mask_pred = mask_head(feat[0], coeff_pred, gt_bboxes, img_metas, + sampling_results) + one_gt_mask_loss = mask_head.loss(mask_pred, gt_masks, gt_bboxes, + img_metas, sampling_results) + one_gt_segm_loss = sum(one_gt_segm_loss['loss_segm']) + one_gt_mask_loss = sum(one_gt_mask_loss['loss_mask']) + assert one_gt_segm_loss.item() > 0, 'segm loss should be non-zero' + assert one_gt_mask_loss.item() > 0, 'mask loss should be non-zero' + + +def test_transformer_head_loss(): + """Tests transformer head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3), + 'batch_input_shape': (s, s) + }] + train_cfg = dict( + assigner=dict( + type='HungarianAssigner', + cls_cost=dict(type='ClassificationCost', weight=1.0), + reg_cost=dict(type='BBoxL1Cost', weight=5.0), + iou_cost=dict(type='IoUCost', iou_mode='giou', weight=2.0))) + transformer_cfg = dict( + type='Transformer', + embed_dims=4, + num_heads=1, + num_encoder_layers=1, + num_decoder_layers=1, + feedforward_channels=1, + dropout=0.1, + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2, + pre_norm=False, + return_intermediate_dec=True) + positional_encoding_cfg = dict( + type='SinePositionalEncoding', num_feats=2, normalize=True) + self = TransformerHead( + num_classes=4, + in_channels=1, + num_fcs=2, + train_cfg=train_cfg, + transformer=transformer_cfg, + positional_encoding=positional_encoding_cfg) + self.init_weights() + feat = [ + torch.rand(1, 1, s // feat_size, s // feat_size) + for feat_size in [4, 8, 16, 32, 64] + ] + cls_scores, bbox_preds = self.forward(feat, img_metas) + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + for key, loss in empty_gt_losses.items(): + if 'cls' in key: + assert loss.item() > 0, 'cls loss should be non-zero' + elif 'bbox' in key: + assert loss.item( + ) == 0, 'there should be no box loss when there are no true boxes' + elif 'iou' in key: + assert loss.item( + ) == 0, 'there should be no iou loss when there are no true boxes' + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + for loss in one_gt_losses.values(): + assert loss.item( + ) > 0, 'cls loss, or box loss, or iou loss should be non-zero' + + # test forward_train + self.forward_train(feat, img_metas, gt_bboxes, gt_labels) + + # test inference mode + self.get_bboxes(cls_scores, bbox_preds, img_metas, rescale=True) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_losses.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_losses.py new file mode 100644 index 00000000..8a85cee4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_losses.py @@ -0,0 +1,136 @@ +import pytest +import torch + +from mmdet.models import Accuracy, build_loss + + +def test_ce_loss(): + # use_mask and use_sigmoid cannot be true at the same time + with pytest.raises(AssertionError): + loss_cfg = dict( + type='CrossEntropyLoss', + use_mask=True, + use_sigmoid=True, + loss_weight=1.0) + build_loss(loss_cfg) + + # test loss with class weights + loss_cls_cfg = dict( + type='CrossEntropyLoss', + use_sigmoid=False, + class_weight=[0.8, 0.2], + loss_weight=1.0) + loss_cls = build_loss(loss_cls_cfg) + fake_pred = torch.Tensor([[100, -100]]) + fake_label = torch.Tensor([1]).long() + assert torch.allclose(loss_cls(fake_pred, fake_label), torch.tensor(40.)) + + loss_cls_cfg = dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0) + loss_cls = build_loss(loss_cls_cfg) + assert torch.allclose(loss_cls(fake_pred, fake_label), torch.tensor(200.)) + + +def test_varifocal_loss(): + # only sigmoid version of VarifocalLoss is implemented + with pytest.raises(AssertionError): + loss_cfg = dict( + type='VarifocalLoss', use_sigmoid=False, loss_weight=1.0) + build_loss(loss_cfg) + + # test that alpha should be greater than 0 + with pytest.raises(AssertionError): + loss_cfg = dict( + type='VarifocalLoss', + alpha=-0.75, + gamma=2.0, + use_sigmoid=True, + loss_weight=1.0) + build_loss(loss_cfg) + + # test that pred and target should be of the same size + loss_cls_cfg = dict( + type='VarifocalLoss', + use_sigmoid=True, + alpha=0.75, + gamma=2.0, + iou_weighted=True, + reduction='mean', + loss_weight=1.0) + loss_cls = build_loss(loss_cls_cfg) + with pytest.raises(AssertionError): + fake_pred = torch.Tensor([[100.0, -100.0]]) + fake_target = torch.Tensor([[1.0]]) + loss_cls(fake_pred, fake_target) + + # test the calculation + loss_cls = build_loss(loss_cls_cfg) + fake_pred = torch.Tensor([[100.0, -100.0]]) + fake_target = torch.Tensor([[1.0, 0.0]]) + assert torch.allclose(loss_cls(fake_pred, fake_target), torch.tensor(0.0)) + + # test the loss with weights + loss_cls = build_loss(loss_cls_cfg) + fake_pred = torch.Tensor([[0.0, 100.0]]) + fake_target = torch.Tensor([[1.0, 1.0]]) + fake_weight = torch.Tensor([0.0, 1.0]) + assert torch.allclose( + loss_cls(fake_pred, fake_target, fake_weight), torch.tensor(0.0)) + + +def test_accuracy(): + # test for empty pred + pred = torch.empty(0, 4) + label = torch.empty(0) + accuracy = Accuracy(topk=1) + acc = accuracy(pred, label) + assert acc.item() == 0 + + pred = torch.Tensor([[0.2, 0.3, 0.6, 0.5], [0.1, 0.1, 0.2, 0.6], + [0.9, 0.0, 0.0, 0.1], [0.4, 0.7, 0.1, 0.1], + [0.0, 0.0, 0.99, 0]]) + # test for top1 + true_label = torch.Tensor([2, 3, 0, 1, 2]).long() + accuracy = Accuracy(topk=1) + acc = accuracy(pred, true_label) + assert acc.item() == 100 + + # test for top1 with score thresh=0.8 + true_label = torch.Tensor([2, 3, 0, 1, 2]).long() + accuracy = Accuracy(topk=1, thresh=0.8) + acc = accuracy(pred, true_label) + assert acc.item() == 40 + + # test for top2 + accuracy = Accuracy(topk=2) + label = torch.Tensor([3, 2, 0, 0, 2]).long() + acc = accuracy(pred, label) + assert acc.item() == 100 + + # test for both top1 and top2 + accuracy = Accuracy(topk=(1, 2)) + true_label = torch.Tensor([2, 3, 0, 1, 2]).long() + acc = accuracy(pred, true_label) + for a in acc: + assert a.item() == 100 + + # topk is larger than pred class number + with pytest.raises(AssertionError): + accuracy = Accuracy(topk=5) + accuracy(pred, true_label) + + # wrong topk type + with pytest.raises(AssertionError): + accuracy = Accuracy(topk='wrong type') + accuracy(pred, true_label) + + # label size is larger than required + with pytest.raises(AssertionError): + label = torch.Tensor([2, 3, 0, 1, 2, 0]).long() # size mismatch + accuracy = Accuracy() + accuracy(pred, label) + + # wrong pred dimension + with pytest.raises(AssertionError): + accuracy = Accuracy() + accuracy(pred[:, :, None], true_label) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_necks.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_necks.py new file mode 100644 index 00000000..56885477 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_necks.py @@ -0,0 +1,238 @@ +import pytest +import torch +from torch.nn.modules.batchnorm import _BatchNorm + +from mmdet.models.necks import FPN, ChannelMapper + + +def test_fpn(): + """Tests fpn.""" + s = 64 + in_channels = [8, 16, 32, 64] + feat_sizes = [s // 2**i for i in range(4)] # [64, 32, 16, 8] + out_channels = 8 + # `num_outs` is not equal to len(in_channels) - start_level + with pytest.raises(AssertionError): + FPN(in_channels=in_channels, + out_channels=out_channels, + start_level=1, + num_outs=2) + + # `end_level` is larger than len(in_channels) - 1 + with pytest.raises(AssertionError): + FPN(in_channels=in_channels, + out_channels=out_channels, + start_level=1, + end_level=4, + num_outs=2) + + # `num_outs` is not equal to end_level - start_level + with pytest.raises(AssertionError): + FPN(in_channels=in_channels, + out_channels=out_channels, + start_level=1, + end_level=3, + num_outs=1) + + # Invalid `add_extra_convs` option + with pytest.raises(AssertionError): + FPN(in_channels=in_channels, + out_channels=out_channels, + start_level=1, + add_extra_convs='on_xxx', + num_outs=5) + + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + start_level=1, + add_extra_convs=True, + num_outs=5) + + # FPN expects a multiple levels of features per image + feats = [ + torch.rand(1, in_channels[i], feat_sizes[i], feat_sizes[i]) + for i in range(len(in_channels)) + ] + outs = fpn_model(feats) + assert fpn_model.add_extra_convs == 'on_input' + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # Tests for fpn with no extra convs (pooling is used instead) + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + start_level=1, + add_extra_convs=False, + num_outs=5) + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + assert not fpn_model.add_extra_convs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # Tests for fpn with lateral bns + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + start_level=1, + add_extra_convs=True, + no_norm_on_lateral=False, + norm_cfg=dict(type='BN', requires_grad=True), + num_outs=5) + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + assert fpn_model.add_extra_convs == 'on_input' + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + bn_exist = False + for m in fpn_model.modules(): + if isinstance(m, _BatchNorm): + bn_exist = True + assert bn_exist + + # Bilinear upsample + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + start_level=1, + add_extra_convs=True, + upsample_cfg=dict(mode='bilinear', align_corners=True), + num_outs=5) + fpn_model(feats) + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + assert fpn_model.add_extra_convs == 'on_input' + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # Scale factor instead of fixed upsample size upsample + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + start_level=1, + add_extra_convs=True, + upsample_cfg=dict(scale_factor=2), + num_outs=5) + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # Extra convs source is 'inputs' + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + add_extra_convs='on_input', + start_level=1, + num_outs=5) + assert fpn_model.add_extra_convs == 'on_input' + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # Extra convs source is 'laterals' + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + add_extra_convs='on_lateral', + start_level=1, + num_outs=5) + assert fpn_model.add_extra_convs == 'on_lateral' + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # Extra convs source is 'outputs' + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + add_extra_convs='on_output', + start_level=1, + num_outs=5) + assert fpn_model.add_extra_convs == 'on_output' + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # extra_convs_on_inputs=False is equal to extra convs source is 'on_output' + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + add_extra_convs=True, + extra_convs_on_inputs=False, + start_level=1, + num_outs=5, + ) + assert fpn_model.add_extra_convs == 'on_output' + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + # extra_convs_on_inputs=True is equal to extra convs source is 'on_input' + fpn_model = FPN( + in_channels=in_channels, + out_channels=out_channels, + add_extra_convs=True, + extra_convs_on_inputs=True, + start_level=1, + num_outs=5, + ) + assert fpn_model.add_extra_convs == 'on_input' + outs = fpn_model(feats) + assert len(outs) == fpn_model.num_outs + for i in range(fpn_model.num_outs): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) + + +def test_channel_mapper(): + """Tests ChannelMapper.""" + s = 64 + in_channels = [8, 16, 32, 64] + feat_sizes = [s // 2**i for i in range(4)] # [64, 32, 16, 8] + out_channels = 8 + kernel_size = 3 + feats = [ + torch.rand(1, in_channels[i], feat_sizes[i], feat_sizes[i]) + for i in range(len(in_channels)) + ] + + # in_channels must be a list + with pytest.raises(AssertionError): + channel_mapper = ChannelMapper( + in_channels=10, out_channels=out_channels, kernel_size=kernel_size) + # the length of channel_mapper's inputs must be equal to the length of + # in_channels + with pytest.raises(AssertionError): + channel_mapper = ChannelMapper( + in_channels=in_channels[:-1], + out_channels=out_channels, + kernel_size=kernel_size) + channel_mapper(feats) + + channel_mapper = ChannelMapper( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=kernel_size) + + outs = channel_mapper(feats) + assert len(outs) == len(feats) + for i in range(len(feats)): + outs[i].shape[1] == out_channels + outs[i].shape[2] == outs[i].shape[3] == s // (2**i) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_pisa_heads.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_pisa_heads.py new file mode 100644 index 00000000..6b1d42db --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_pisa_heads.py @@ -0,0 +1,244 @@ +import mmcv +import torch + +from mmdet.models.dense_heads import PISARetinaHead, PISASSDHead +from mmdet.models.roi_heads import PISARoIHead + + +def test_pisa_retinanet_head_loss(): + """Tests pisa retinanet head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='RandomSampler', + num=256, + pos_fraction=0.5, + neg_pos_ub=-1, + add_gt_as_proposals=False), + isr=dict(k=2., bias=0.), + carl=dict(k=1., bias=0.2), + allowed_border=0, + pos_weight=-1, + debug=False)) + self = PISARetinaHead(num_classes=4, in_channels=1, train_cfg=cfg) + + # Anchor head expects a multiple levels of features per image + feat = [ + torch.rand(1, 1, s // (2**(i + 2)), s // (2**(i + 2))) + for i in range(len(self.anchor_generator.strides)) + ] + cls_scores, bbox_preds = self.forward(feat) + + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = empty_gt_losses['loss_cls'].sum() + empty_box_loss = empty_gt_losses['loss_bbox'].sum() + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + onegt_cls_loss = one_gt_losses['loss_cls'].sum() + onegt_box_loss = one_gt_losses['loss_bbox'].sum() + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + +def test_pisa_ssd_head_loss(): + """Tests pisa ssd head loss when truth is empty and non-empty.""" + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.5, + neg_iou_thr=0.5, + min_pos_iou=0., + ignore_iof_thr=-1, + gt_max_assign_all=False), + isr=dict(k=2., bias=0.), + carl=dict(k=1., bias=0.2), + smoothl1_beta=1., + allowed_border=-1, + pos_weight=-1, + neg_pos_ratio=3, + debug=False)) + ssd_anchor_generator = dict( + type='SSDAnchorGenerator', + scale_major=False, + input_size=300, + strides=[1], + ratios=([2], ), + basesize_ratio_range=(0.15, 0.9)) + self = PISASSDHead( + num_classes=4, + in_channels=(1, ), + train_cfg=cfg, + anchor_generator=ssd_anchor_generator) + + # Anchor head expects a multiple levels of features per image + feat = [ + torch.rand(1, 1, s // (2**(i + 2)), s // (2**(i + 2))) + for i in range(len(self.anchor_generator.strides)) + ] + cls_scores, bbox_preds = self.forward(feat) + + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + + gt_bboxes_ignore = None + empty_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = sum(empty_gt_losses['loss_cls']) + empty_box_loss = sum(empty_gt_losses['loss_bbox']) + # SSD is special, #pos:#neg = 1: 3, so empth gt will also lead loss cls = 0 + assert empty_cls_loss.item() == 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + one_gt_losses = self.loss(cls_scores, bbox_preds, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore) + onegt_cls_loss = sum(one_gt_losses['loss_cls']) + onegt_box_loss = sum(one_gt_losses['loss_bbox']) + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' + + +def test_pisa_roi_head_loss(): + """Tests pisa roi head loss when truth is empty and non-empty.""" + train_cfg = mmcv.Config( + dict( + assigner=dict( + type='MaxIoUAssigner', + pos_iou_thr=0.7, + neg_iou_thr=0.3, + min_pos_iou=0.3, + match_low_quality=True, + ignore_iof_thr=-1), + sampler=dict( + type='ScoreHLRSampler', + num=4, + pos_fraction=0.25, + neg_pos_ub=-1, + add_gt_as_proposals=True, + k=0.5, + bias=0.), + isr=dict(k=2., bias=0.), + carl=dict(k=1., bias=0.2), + allowed_border=0, + pos_weight=-1, + debug=False)) + + bbox_roi_extractor = dict( + type='SingleRoIExtractor', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0), + out_channels=1, + featmap_strides=[1]) + + bbox_head = dict( + type='Shared2FCBBoxHead', + in_channels=1, + fc_out_channels=2, + roi_feat_size=7, + num_classes=4, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=1.0)) + + self = PISARoIHead(bbox_roi_extractor, bbox_head, train_cfg=train_cfg) + + s = 256 + img_metas = [{ + 'img_shape': (s, s, 3), + 'scale_factor': 1, + 'pad_shape': (s, s, 3) + }] + + # Anchor head expects a multiple levels of features per image + feat = [ + torch.rand(1, 1, s // (2**(i + 2)), s // (2**(i + 2))) + for i in range(1) + ] + + proposal_list = [ + torch.Tensor([[22.6667, 22.8757, 238.6326, 151.8874], [0, 3, 5, 7]]) + ] + + # Test that empty ground truth encourages the network to predict background + gt_bboxes = [torch.empty((0, 4))] + gt_labels = [torch.LongTensor([])] + gt_bboxes_ignore = None + + empty_gt_losses = self.forward_train(feat, img_metas, proposal_list, + gt_bboxes, gt_labels, + gt_bboxes_ignore) + + # When there is no truth, the cls loss should be nonzero but there should + # be no box loss. + empty_cls_loss = empty_gt_losses['loss_cls'].sum() + empty_box_loss = empty_gt_losses['loss_bbox'].sum() + assert empty_cls_loss.item() > 0, 'cls loss should be non-zero' + assert empty_box_loss.item() == 0, ( + 'there should be no box loss when there are no true boxes') + + # When truth is non-empty then both cls and box loss should be nonzero for + # random inputs + gt_bboxes = [ + torch.Tensor([[23.6667, 23.8757, 238.6326, 151.8874]]), + ] + gt_labels = [torch.LongTensor([2])] + + one_gt_losses = self.forward_train(feat, img_metas, proposal_list, + gt_bboxes, gt_labels, gt_bboxes_ignore) + onegt_cls_loss = one_gt_losses['loss_cls'].sum() + onegt_box_loss = one_gt_losses['loss_bbox'].sum() + assert onegt_cls_loss.item() > 0, 'cls loss should be non-zero' + assert onegt_box_loss.item() > 0, 'box loss should be non-zero' diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_position_encoding.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_position_encoding.py new file mode 100644 index 00000000..94fdd479 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_position_encoding.py @@ -0,0 +1,38 @@ +import pytest +import torch + +from mmdet.models.utils import (LearnedPositionalEncoding, + SinePositionalEncoding) + + +def test_sine_positional_encoding(num_feats=16, batch_size=2): + # test invalid type of scale + with pytest.raises(AssertionError): + module = SinePositionalEncoding( + num_feats, scale=(3., ), normalize=True) + + module = SinePositionalEncoding(num_feats) + h, w = 10, 6 + mask = torch.rand(batch_size, h, w) > 0.5 + assert not module.normalize + out = module(mask) + assert out.shape == (batch_size, num_feats * 2, h, w) + + # set normalize + module = SinePositionalEncoding(num_feats, normalize=True) + assert module.normalize + out = module(mask) + assert out.shape == (batch_size, num_feats * 2, h, w) + + +def test_learned_positional_encoding(num_feats=16, + row_num_embed=10, + col_num_embed=10, + batch_size=2): + module = LearnedPositionalEncoding(num_feats, row_num_embed, col_num_embed) + assert module.row_embed.weight.shape == (row_num_embed, num_feats) + assert module.col_embed.weight.shape == (col_num_embed, num_feats) + h, w = 10, 6 + mask = torch.rand(batch_size, h, w) > 0.5 + out = module(mask) + assert out.shape == (batch_size, num_feats * 2, h, w) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_roi_extractor.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_roi_extractor.py new file mode 100644 index 00000000..22743f2d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_roi_extractor.py @@ -0,0 +1,113 @@ +import pytest +import torch + +from mmdet.models.roi_heads.roi_extractors import GenericRoIExtractor + + +def test_groie(): + # test with pre/post + cfg = dict( + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=2), + out_channels=256, + featmap_strides=[4, 8, 16, 32], + pre_cfg=dict( + type='ConvModule', + in_channels=256, + out_channels=256, + kernel_size=5, + padding=2, + inplace=False, + ), + post_cfg=dict( + type='ConvModule', + in_channels=256, + out_channels=256, + kernel_size=5, + padding=2, + inplace=False)) + + groie = GenericRoIExtractor(**cfg) + + feats = ( + torch.rand((1, 256, 200, 336)), + torch.rand((1, 256, 100, 168)), + torch.rand((1, 256, 50, 84)), + torch.rand((1, 256, 25, 42)), + ) + + rois = torch.tensor([[0.0000, 587.8285, 52.1405, 886.2484, 341.5644]]) + + res = groie(feats, rois) + assert res.shape == torch.Size([1, 256, 7, 7]) + + # test w.o. pre/post + cfg = dict( + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=2), + out_channels=256, + featmap_strides=[4, 8, 16, 32]) + + groie = GenericRoIExtractor(**cfg) + + feats = ( + torch.rand((1, 256, 200, 336)), + torch.rand((1, 256, 100, 168)), + torch.rand((1, 256, 50, 84)), + torch.rand((1, 256, 25, 42)), + ) + + rois = torch.tensor([[0.0000, 587.8285, 52.1405, 886.2484, 341.5644]]) + + res = groie(feats, rois) + assert res.shape == torch.Size([1, 256, 7, 7]) + + # test w.o. pre/post concat + cfg = dict( + aggregation='concat', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=2), + out_channels=256 * 4, + featmap_strides=[4, 8, 16, 32]) + + groie = GenericRoIExtractor(**cfg) + + feats = ( + torch.rand((1, 256, 200, 336)), + torch.rand((1, 256, 100, 168)), + torch.rand((1, 256, 50, 84)), + torch.rand((1, 256, 25, 42)), + ) + + rois = torch.tensor([[0.0000, 587.8285, 52.1405, 886.2484, 341.5644]]) + + res = groie(feats, rois) + assert res.shape == torch.Size([1, 1024, 7, 7]) + + # test not supported aggregate method + with pytest.raises(AssertionError): + cfg = dict( + aggregation='not support', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=2), + out_channels=1024, + featmap_strides=[4, 8, 16, 32]) + _ = GenericRoIExtractor(**cfg) + + # test concat channels number + cfg = dict( + aggregation='concat', + roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=2), + out_channels=256 * 5, # 256*5 != 256*4 + featmap_strides=[4, 8, 16, 32]) + + groie = GenericRoIExtractor(**cfg) + + feats = ( + torch.rand((1, 256, 200, 336)), + torch.rand((1, 256, 100, 168)), + torch.rand((1, 256, 50, 84)), + torch.rand((1, 256, 25, 42)), + ) + + rois = torch.tensor([[0.0000, 587.8285, 52.1405, 886.2484, 341.5644]]) + + # out_channels does not sum of feat channels + with pytest.raises(AssertionError): + _ = groie(feats, rois) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_transformer.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_transformer.py new file mode 100644 index 00000000..0e21549a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_models/test_transformer.py @@ -0,0 +1,523 @@ +from unittest.mock import patch + +import pytest +import torch + +from mmdet.models.utils import (FFN, MultiheadAttention, Transformer, + TransformerDecoder, TransformerDecoderLayer, + TransformerEncoder, TransformerEncoderLayer) + + +def _ffn_forward(self, x, residual=None): + if residual is None: + residual = x + residual_str = residual.split('_')[-1] + if '(residual' in residual_str: + residual_str = residual_str.split('(residual')[0] + return x + '_ffn(residual={})'.format(residual_str) + + +def _multihead_attention_forward(self, + x, + key=None, + value=None, + residual=None, + query_pos=None, + key_pos=None, + attn_mask=None, + key_padding_mask=None, + selfattn=True): + if residual is None: + residual = x + residual_str = residual.split('_')[-1] + if '(residual' in residual_str: + residual_str = residual_str.split('(residual')[0] + attn_str = 'selfattn' if selfattn else 'multiheadattn' + return x + '_{}(residual={})'.format(attn_str, residual_str) + + +def _encoder_layer_forward(self, + x, + pos=None, + attn_mask=None, + key_padding_mask=None): + norm_cnt = 0 + inp_residual = x + for layer in self.order: + if layer == 'selfattn': + x = self.self_attn( + x, + x, + x, + inp_residual if self.pre_norm else None, + query_pos=pos, + attn_mask=attn_mask, + key_padding_mask=key_padding_mask) + inp_residual = x + elif layer == 'norm': + x = x + '_norm{}'.format(norm_cnt) + norm_cnt += 1 + elif layer == 'ffn': + x = self.ffn(x, inp_residual if self.pre_norm else None) + else: + raise ValueError(f'Unsupported layer type {layer}.') + return x + + +def _decoder_layer_forward(self, + x, + memory, + memory_pos=None, + query_pos=None, + memory_attn_mask=None, + target_attn_mask=None, + memory_key_padding_mask=None, + target_key_padding_mask=None): + norm_cnt = 0 + inp_residual = x + for layer in self.order: + if layer == 'selfattn': + x = self.self_attn( + x, + x, + x, + inp_residual if self.pre_norm else None, + query_pos, + attn_mask=target_attn_mask, + key_padding_mask=target_key_padding_mask) + inp_residual = x + elif layer == 'norm': + x = x + '_norm{}'.format(norm_cnt) + norm_cnt += 1 + elif layer == 'multiheadattn': + x = self.multihead_attn( + x, + memory, + memory, + inp_residual if self.pre_norm else None, + query_pos, + key_pos=memory_pos, + attn_mask=memory_attn_mask, + key_padding_mask=memory_key_padding_mask, + selfattn=False) + inp_residual = x + elif layer == 'ffn': + x = self.ffn(x, inp_residual if self.pre_norm else None) + else: + raise ValueError(f'Unsupported layer type {layer}.') + return x + + +def test_multihead_attention(embed_dims=8, + num_heads=2, + dropout=0.1, + num_query=5, + num_key=10, + batch_size=1): + module = MultiheadAttention(embed_dims, num_heads, dropout) + # self attention + query = torch.rand(num_query, batch_size, embed_dims) + out = module(query) + assert out.shape == (num_query, batch_size, embed_dims) + + # set key + key = torch.rand(num_key, batch_size, embed_dims) + out = module(query, key) + assert out.shape == (num_query, batch_size, embed_dims) + + # set residual + residual = torch.rand(num_query, batch_size, embed_dims) + out = module(query, key, key, residual) + assert out.shape == (num_query, batch_size, embed_dims) + + # set query_pos and key_pos + query_pos = torch.rand(num_query, batch_size, embed_dims) + key_pos = torch.rand(num_key, batch_size, embed_dims) + out = module(query, key, None, residual, query_pos, key_pos) + assert out.shape == (num_query, batch_size, embed_dims) + + # set key_padding_mask + key_padding_mask = torch.rand(batch_size, num_key) > 0.5 + out = module(query, key, None, residual, query_pos, key_pos, None, + key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + # set attn_mask + attn_mask = torch.rand(num_query, num_key) > 0.5 + out = module(query, key, key, residual, query_pos, key_pos, attn_mask, + key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + +def test_ffn(embed_dims=8, feedforward_channels=8, num_fcs=2, batch_size=1): + # test invalid num_fcs + with pytest.raises(AssertionError): + module = FFN(embed_dims, feedforward_channels, 1) + + module = FFN(embed_dims, feedforward_channels, num_fcs) + x = torch.rand(batch_size, embed_dims) + out = module(x) + assert out.shape == (batch_size, embed_dims) + # set residual + residual = torch.rand(batch_size, embed_dims) + out = module(x, residual) + assert out.shape == (batch_size, embed_dims) + + # test case with no residual + module = FFN(embed_dims, feedforward_channels, num_fcs, add_residual=False) + x = torch.rand(batch_size, embed_dims) + out = module(x) + assert out.shape == (batch_size, embed_dims) + + +def test_transformer_encoder_layer(embed_dims=8, + num_heads=2, + feedforward_channels=8, + num_key=10, + batch_size=1): + x = torch.rand(num_key, batch_size, embed_dims) + # test invalid number of order + with pytest.raises(AssertionError): + order = ('norm', 'selfattn', 'norm', 'ffn', 'norm') + module = TransformerEncoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + + # test invalid value of order + with pytest.raises(AssertionError): + order = ('norm', 'selfattn', 'norm', 'unknown') + module = TransformerEncoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + + module = TransformerEncoderLayer(embed_dims, num_heads, + feedforward_channels) + + key_padding_mask = torch.rand(batch_size, num_key) > 0.5 + out = module(x, key_padding_mask=key_padding_mask) + assert not module.pre_norm + assert out.shape == (num_key, batch_size, embed_dims) + + # set pos + pos = torch.rand(num_key, batch_size, embed_dims) + out = module(x, pos, key_padding_mask=key_padding_mask) + assert out.shape == (num_key, batch_size, embed_dims) + + # set attn_mask + attn_mask = torch.rand(num_key, num_key) > 0.5 + out = module(x, pos, attn_mask, key_padding_mask) + assert out.shape == (num_key, batch_size, embed_dims) + + # set pre_norm + order = ('norm', 'selfattn', 'norm', 'ffn') + module = TransformerEncoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + assert module.pre_norm + out = module(x, pos, attn_mask, key_padding_mask) + assert out.shape == (num_key, batch_size, embed_dims) + + @patch('mmdet.models.utils.TransformerEncoderLayer.forward', + _encoder_layer_forward) + @patch('mmdet.models.utils.FFN.forward', _ffn_forward) + @patch('mmdet.models.utils.MultiheadAttention.forward', + _multihead_attention_forward) + def test_order(): + module = TransformerEncoderLayer(embed_dims, num_heads, + feedforward_channels) + out = module('input') + assert out == 'input_selfattn(residual=input)_norm0_ffn' \ + '(residual=norm0)_norm1' + + # pre_norm + order = ('norm', 'selfattn', 'norm', 'ffn') + module = TransformerEncoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + out = module('input') + assert out == 'input_norm0_selfattn(residual=input)_' \ + 'norm1_ffn(residual=selfattn)' + + test_order() + + +def test_transformer_decoder_layer(embed_dims=8, + num_heads=2, + feedforward_channels=8, + num_key=10, + num_query=5, + batch_size=1): + query = torch.rand(num_query, batch_size, embed_dims) + # test invalid number of order + with pytest.raises(AssertionError): + order = ('norm', 'selfattn', 'norm', 'multiheadattn', 'norm', 'ffn', + 'norm') + module = TransformerDecoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + + # test invalid value of order + with pytest.raises(AssertionError): + order = ('norm', 'selfattn', 'unknown', 'multiheadattn', 'norm', 'ffn') + module = TransformerDecoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + + module = TransformerDecoderLayer(embed_dims, num_heads, + feedforward_channels) + memory = torch.rand(num_key, batch_size, embed_dims) + assert not module.pre_norm + out = module(query, memory) + assert out.shape == (num_query, batch_size, embed_dims) + + # set query_pos + query_pos = torch.rand(num_query, batch_size, embed_dims) + out = module(query, memory, memory_pos=None, query_pos=query_pos) + assert out.shape == (num_query, batch_size, embed_dims) + + # set memory_pos + memory_pos = torch.rand(num_key, batch_size, embed_dims) + out = module(query, memory, memory_pos, query_pos) + assert out.shape == (num_query, batch_size, embed_dims) + + # set memory_key_padding_mask + memory_key_padding_mask = torch.rand(batch_size, num_key) > 0.5 + out = module( + query, + memory, + memory_pos, + query_pos, + memory_key_padding_mask=memory_key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + # set target_key_padding_mask + target_key_padding_mask = torch.rand(batch_size, num_query) > 0.5 + out = module( + query, + memory, + memory_pos, + query_pos, + memory_key_padding_mask=memory_key_padding_mask, + target_key_padding_mask=target_key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + # set memory_attn_mask + memory_attn_mask = torch.rand(num_query, num_key) + out = module( + query, + memory, + memory_pos, + query_pos, + memory_attn_mask, + memory_key_padding_mask=memory_key_padding_mask, + target_key_padding_mask=target_key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + # set target_attn_mask + target_attn_mask = torch.rand(num_query, num_query) + out = module(query, memory, memory_pos, query_pos, memory_attn_mask, + target_attn_mask, memory_key_padding_mask, + target_key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + # pre_norm + order = ('norm', 'selfattn', 'norm', 'multiheadattn', 'norm', 'ffn') + module = TransformerDecoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + assert module.pre_norm + out = module( + query, + memory, + memory_pos, + query_pos, + memory_attn_mask, + memory_key_padding_mask=memory_key_padding_mask, + target_key_padding_mask=target_key_padding_mask) + assert out.shape == (num_query, batch_size, embed_dims) + + @patch('mmdet.models.utils.TransformerDecoderLayer.forward', + _decoder_layer_forward) + @patch('mmdet.models.utils.FFN.forward', _ffn_forward) + @patch('mmdet.models.utils.MultiheadAttention.forward', + _multihead_attention_forward) + def test_order(): + module = TransformerDecoderLayer(embed_dims, num_heads, + feedforward_channels) + out = module('input', 'memory') + assert out == 'input_selfattn(residual=input)_norm0_multiheadattn' \ + '(residual=norm0)_norm1_ffn(residual=norm1)_norm2' + + # pre_norm + order = ('norm', 'selfattn', 'norm', 'multiheadattn', 'norm', 'ffn') + module = TransformerDecoderLayer( + embed_dims, num_heads, feedforward_channels, order=order) + out = module('input', 'memory') + assert out == 'input_norm0_selfattn(residual=input)_norm1_' \ + 'multiheadattn(residual=selfattn)_norm2_ffn(residual=' \ + 'multiheadattn)' + + test_order() + + +def test_transformer_encoder(num_layers=2, + embed_dims=8, + num_heads=2, + feedforward_channels=8, + num_key=10, + batch_size=1): + module = TransformerEncoder(num_layers, embed_dims, num_heads, + feedforward_channels) + assert not module.pre_norm + assert module.norm is None + x = torch.rand(num_key, batch_size, embed_dims) + out = module(x) + assert out.shape == (num_key, batch_size, embed_dims) + + # set pos + pos = torch.rand(num_key, batch_size, embed_dims) + out = module(x, pos) + assert out.shape == (num_key, batch_size, embed_dims) + + # set key_padding_mask + key_padding_mask = torch.rand(batch_size, num_key) > 0.5 + out = module(x, pos, None, key_padding_mask) + assert out.shape == (num_key, batch_size, embed_dims) + + # set attn_mask + attn_mask = torch.rand(num_key, num_key) > 0.5 + out = module(x, pos, attn_mask, key_padding_mask) + assert out.shape == (num_key, batch_size, embed_dims) + + # pre_norm + order = ('norm', 'selfattn', 'norm', 'ffn') + module = TransformerEncoder( + num_layers, embed_dims, num_heads, feedforward_channels, order=order) + assert module.pre_norm + assert module.norm is not None + out = module(x, pos, attn_mask, key_padding_mask) + assert out.shape == (num_key, batch_size, embed_dims) + + +def test_transformer_decoder(num_layers=2, + embed_dims=8, + num_heads=2, + feedforward_channels=8, + num_key=10, + num_query=5, + batch_size=1): + module = TransformerDecoder(num_layers, embed_dims, num_heads, + feedforward_channels) + query = torch.rand(num_query, batch_size, embed_dims) + memory = torch.rand(num_key, batch_size, embed_dims) + out = module(query, memory) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # set query_pos + query_pos = torch.rand(num_query, batch_size, embed_dims) + out = module(query, memory, query_pos=query_pos) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # set memory_pos + memory_pos = torch.rand(num_key, batch_size, embed_dims) + out = module(query, memory, memory_pos, query_pos) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # set memory_key_padding_mask + memory_key_padding_mask = torch.rand(batch_size, num_key) > 0.5 + out = module( + query, + memory, + memory_pos, + query_pos, + memory_key_padding_mask=memory_key_padding_mask) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # set target_key_padding_mask + target_key_padding_mask = torch.rand(batch_size, num_query) > 0.5 + out = module( + query, + memory, + memory_pos, + query_pos, + memory_key_padding_mask=memory_key_padding_mask, + target_key_padding_mask=target_key_padding_mask) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # set memory_attn_mask + memory_attn_mask = torch.rand(num_query, num_key) > 0.5 + out = module(query, memory, memory_pos, query_pos, memory_attn_mask, None, + memory_key_padding_mask, target_key_padding_mask) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # set target_attn_mask + target_attn_mask = torch.rand(num_query, num_query) > 0.5 + out = module(query, memory, memory_pos, query_pos, memory_attn_mask, + target_attn_mask, memory_key_padding_mask, + target_key_padding_mask) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # pre_norm + order = ('norm', 'selfattn', 'norm', 'multiheadattn', 'norm', 'ffn') + module = TransformerDecoder( + num_layers, embed_dims, num_heads, feedforward_channels, order=order) + out = module(query, memory, memory_pos, query_pos, memory_attn_mask, + target_attn_mask, memory_key_padding_mask, + target_key_padding_mask) + assert out.shape == (1, num_query, batch_size, embed_dims) + + # return_intermediate + module = TransformerDecoder( + num_layers, + embed_dims, + num_heads, + feedforward_channels, + order=order, + return_intermediate=True) + out = module(query, memory, memory_pos, query_pos, memory_attn_mask, + target_attn_mask, memory_key_padding_mask, + target_key_padding_mask) + assert out.shape == (num_layers, num_query, batch_size, embed_dims) + + +def test_transformer(num_enc_layers=2, + num_dec_layers=2, + embed_dims=8, + num_heads=2, + num_query=5, + batch_size=1): + module = Transformer(embed_dims, num_heads, num_enc_layers, num_dec_layers) + height, width = 8, 6 + x = torch.rand(batch_size, embed_dims, height, width) + mask = torch.rand(batch_size, height, width) > 0.5 + query_embed = torch.rand(num_query, embed_dims) + pos_embed = torch.rand(batch_size, embed_dims, height, width) + hs, mem = module(x, mask, query_embed, pos_embed) + assert hs.shape == (1, batch_size, num_query, embed_dims) + assert mem.shape == (batch_size, embed_dims, height, width) + + # pre_norm + module = Transformer( + embed_dims, num_heads, num_enc_layers, num_dec_layers, pre_norm=True) + hs, mem = module(x, mask, query_embed, pos_embed) + assert hs.shape == (1, batch_size, num_query, embed_dims) + assert mem.shape == (batch_size, embed_dims, height, width) + + # return_intermediate + module = Transformer( + embed_dims, + num_heads, + num_enc_layers, + num_dec_layers, + return_intermediate_dec=True) + hs, mem = module(x, mask, query_embed, pos_embed) + assert hs.shape == (num_dec_layers, batch_size, num_query, embed_dims) + assert mem.shape == (batch_size, embed_dims, height, width) + + # pre_norm and return_intermediate + module = Transformer( + embed_dims, + num_heads, + num_enc_layers, + num_dec_layers, + pre_norm=True, + return_intermediate_dec=True) + hs, mem = module(x, mask, query_embed, pos_embed) + assert hs.shape == (num_dec_layers, batch_size, num_query, embed_dims) + assert mem.shape == (batch_size, embed_dims, height, width) + + # test init_weights + module.init_weights() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_version.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_version.py new file mode 100644 index 00000000..6ddf45c0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_version.py @@ -0,0 +1,15 @@ +from mmdet import digit_version + + +def test_version_check(): + assert digit_version('1.0.5') > digit_version('1.0.5rc0') + assert digit_version('1.0.5') > digit_version('1.0.4rc0') + assert digit_version('1.0.5') > digit_version('1.0rc0') + assert digit_version('1.0.0') > digit_version('0.6.2') + assert digit_version('1.0.0') > digit_version('0.2.16') + assert digit_version('1.0.5rc0') > digit_version('1.0.0rc0') + assert digit_version('1.0.0rc1') > digit_version('1.0.0rc0') + assert digit_version('1.0.0rc2') > digit_version('1.0.0rc0') + assert digit_version('1.0.0rc2') > digit_version('1.0.0rc1') + assert digit_version('1.0.1rc1') > digit_version('1.0.0rc1') + assert digit_version('1.0.0') > digit_version('1.0.0rc1') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tests/test_visualization.py b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_visualization.py new file mode 100644 index 00000000..bb247e2b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tests/test_visualization.py @@ -0,0 +1,98 @@ +# Copyright (c) Open-MMLab. All rights reserved. +import os +import os.path as osp +import tempfile + +import mmcv +import numpy as np +import pytest +import torch + +from mmdet.core import visualization as vis + + +def test_color(): + assert vis.color_val_matplotlib(mmcv.Color.blue) == (0., 0., 1.) + assert vis.color_val_matplotlib('green') == (0., 1., 0.) + assert vis.color_val_matplotlib((1, 2, 3)) == (3 / 255, 2 / 255, 1 / 255) + assert vis.color_val_matplotlib(100) == (100 / 255, 100 / 255, 100 / 255) + assert vis.color_val_matplotlib(np.zeros(3, dtype=np.int)) == (0., 0., 0.) + # forbid white color + with pytest.raises(TypeError): + vis.color_val_matplotlib([255, 255, 255]) + # forbid float + with pytest.raises(TypeError): + vis.color_val_matplotlib(1.0) + # overflowed + with pytest.raises(AssertionError): + vis.color_val_matplotlib((0, 0, 500)) + + +def test_imshow_det_bboxes(): + tmp_filename = osp.join(tempfile.gettempdir(), 'det_bboxes_image', + 'image.jpg') + image = np.ones((10, 10, 3), np.uint8) + bbox = np.array([[2, 1, 3, 3], [3, 4, 6, 6]]) + label = np.array([0, 1]) + vis.imshow_det_bboxes( + image, bbox, label, out_file=tmp_filename, show=False) + assert osp.isfile(tmp_filename) + + # test shaped (0,) + image = np.ones((10, 10, 3), np.uint8) + bbox = np.ones((0, 4)) + label = np.ones((0, )) + vis.imshow_det_bboxes( + image, bbox, label, out_file=tmp_filename, show=False) + + # test mask + image = np.ones((10, 10, 3), np.uint8) + bbox = np.array([[2, 1, 3, 3], [3, 4, 6, 6]]) + label = np.array([0, 1]) + segms = np.random.random((2, 10, 10)) > 0.5 + segms = np.array(segms, np.int32) + vis.imshow_det_bboxes( + image, bbox, label, segms, out_file=tmp_filename, show=False) + assert osp.isfile(tmp_filename) + + os.remove(tmp_filename) + + # test tensor mask type error + with pytest.raises(AttributeError): + segms = torch.tensor(segms) + vis.imshow_det_bboxes(image, bbox, label, segms, show=False) + + +def test_imshow_gt_det_bboxes(): + tmp_filename = osp.join(tempfile.gettempdir(), 'det_bboxes_image', + 'image.jpg') + image = np.ones((10, 10, 3), np.uint8) + bbox = np.array([[2, 1, 3, 3], [3, 4, 6, 6]]) + label = np.array([0, 1]) + annotation = dict(gt_bboxes=bbox, gt_labels=label) + det_result = np.array([[2, 1, 3, 3, 0], [3, 4, 6, 6, 1]]) + result = [det_result] + vis.imshow_gt_det_bboxes( + image, annotation, result, out_file=tmp_filename, show=False) + assert osp.isfile(tmp_filename) + + # test numpy mask + gt_mask = np.ones((2, 10, 10)) + annotation['gt_masks'] = gt_mask + vis.imshow_gt_det_bboxes( + image, annotation, result, out_file=tmp_filename, show=False) + assert osp.isfile(tmp_filename) + + # test tensor mask + gt_mask = torch.ones((2, 10, 10)) + annotation['gt_masks'] = gt_mask + vis.imshow_gt_det_bboxes( + image, annotation, result, out_file=tmp_filename, show=False) + assert osp.isfile(tmp_filename) + + os.remove(tmp_filename) + + # test unsupported type + annotation['gt_masks'] = [] + with pytest.raises(TypeError): + vis.imshow_gt_det_bboxes(image, annotation, result, show=False) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_logs.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_logs.py new file mode 100644 index 00000000..83464f76 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_logs.py @@ -0,0 +1,179 @@ +import argparse +import json +from collections import defaultdict + +import matplotlib.pyplot as plt +import numpy as np +import seaborn as sns + + +def cal_train_time(log_dicts, args): + for i, log_dict in enumerate(log_dicts): + print(f'{"-" * 5}Analyze train time of {args.json_logs[i]}{"-" * 5}') + all_times = [] + for epoch in log_dict.keys(): + if args.include_outliers: + all_times.append(log_dict[epoch]['time']) + else: + all_times.append(log_dict[epoch]['time'][1:]) + all_times = np.array(all_times) + epoch_ave_time = all_times.mean(-1) + slowest_epoch = epoch_ave_time.argmax() + fastest_epoch = epoch_ave_time.argmin() + std_over_epoch = epoch_ave_time.std() + print(f'slowest epoch {slowest_epoch + 1}, ' + f'average time is {epoch_ave_time[slowest_epoch]:.4f}') + print(f'fastest epoch {fastest_epoch + 1}, ' + f'average time is {epoch_ave_time[fastest_epoch]:.4f}') + print(f'time std over epochs is {std_over_epoch:.4f}') + print(f'average iter time: {np.mean(all_times):.4f} s/iter') + print() + + +def plot_curve(log_dicts, args): + if args.backend is not None: + plt.switch_backend(args.backend) + sns.set_style(args.style) + # if legend is None, use {filename}_{key} as legend + legend = args.legend + if legend is None: + legend = [] + for json_log in args.json_logs: + for metric in args.keys: + legend.append(f'{json_log}_{metric}') + assert len(legend) == (len(args.json_logs) * len(args.keys)) + metrics = args.keys + + num_metrics = len(metrics) + for i, log_dict in enumerate(log_dicts): + epochs = list(log_dict.keys()) + for j, metric in enumerate(metrics): + print(f'plot curve of {args.json_logs[i]}, metric is {metric}') + if metric not in log_dict[epochs[0]]: + raise KeyError( + f'{args.json_logs[i]} does not contain metric {metric}') + + if 'mAP' in metric: + xs = np.arange(1, max(epochs) + 1) + ys = [] + for epoch in epochs: + ys += log_dict[epoch][metric] + ax = plt.gca() + ax.set_xticks(xs) + plt.xlabel('epoch') + plt.plot(xs, ys, label=legend[i * num_metrics + j], marker='o') + else: + xs = [] + ys = [] + num_iters_per_epoch = log_dict[epochs[0]]['iter'][-1] + for epoch in epochs: + iters = log_dict[epoch]['iter'] + if log_dict[epoch]['mode'][-1] == 'val': + iters = iters[:-1] + xs.append( + np.array(iters) + (epoch - 1) * num_iters_per_epoch) + ys.append(np.array(log_dict[epoch][metric][:len(iters)])) + xs = np.concatenate(xs) + ys = np.concatenate(ys) + plt.xlabel('iter') + plt.plot( + xs, ys, label=legend[i * num_metrics + j], linewidth=0.5) + plt.legend() + if args.title is not None: + plt.title(args.title) + if args.out is None: + plt.show() + else: + print(f'save curve to: {args.out}') + plt.savefig(args.out) + plt.cla() + + +def add_plot_parser(subparsers): + parser_plt = subparsers.add_parser( + 'plot_curve', help='parser for plotting curves') + parser_plt.add_argument( + 'json_logs', + type=str, + nargs='+', + help='path of train log in json format') + parser_plt.add_argument( + '--keys', + type=str, + nargs='+', + default=['bbox_mAP'], + help='the metric that you want to plot') + parser_plt.add_argument('--title', type=str, help='title of figure') + parser_plt.add_argument( + '--legend', + type=str, + nargs='+', + default=None, + help='legend of each plot') + parser_plt.add_argument( + '--backend', type=str, default=None, help='backend of plt') + parser_plt.add_argument( + '--style', type=str, default='dark', help='style of plt') + parser_plt.add_argument('--out', type=str, default=None) + + +def add_time_parser(subparsers): + parser_time = subparsers.add_parser( + 'cal_train_time', + help='parser for computing the average time per training iteration') + parser_time.add_argument( + 'json_logs', + type=str, + nargs='+', + help='path of train log in json format') + parser_time.add_argument( + '--include-outliers', + action='store_true', + help='include the first value of every epoch when computing ' + 'the average time') + + +def parse_args(): + parser = argparse.ArgumentParser(description='Analyze Json Log') + # currently only support plot curve and calculate average train time + subparsers = parser.add_subparsers(dest='task', help='task parser') + add_plot_parser(subparsers) + add_time_parser(subparsers) + args = parser.parse_args() + return args + + +def load_json_logs(json_logs): + # load and convert json_logs to log_dict, key is epoch, value is a sub dict + # keys of sub dict is different metrics, e.g. memory, bbox_mAP + # value of sub dict is a list of corresponding values of all iterations + log_dicts = [dict() for _ in json_logs] + for json_log, log_dict in zip(json_logs, log_dicts): + with open(json_log, 'r') as log_file: + for line in log_file: + log = json.loads(line.strip()) + # skip lines without `epoch` field + if 'epoch' not in log: + continue + epoch = log.pop('epoch') + if epoch not in log_dict: + log_dict[epoch] = defaultdict(list) + for k, v in log.items(): + log_dict[epoch][k].append(v) + return log_dicts + + +def main(): + args = parse_args() + + json_logs = args.json_logs + for json_log in json_logs: + assert json_log.endswith('.json') + + log_dicts = load_json_logs(json_logs) + + eval(args.task)(log_dicts, args) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_results.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_results.py new file mode 100644 index 00000000..d14e2fea --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/analyze_results.py @@ -0,0 +1,203 @@ +import argparse +import os.path as osp + +import mmcv +import numpy as np +from mmcv import Config, DictAction + +from mmdet.core.evaluation import eval_map +from mmdet.core.visualization import imshow_gt_det_bboxes +from mmdet.datasets import build_dataset, get_loading_pipeline + + +def bbox_map_eval(det_result, annotation): + """Evaluate mAP of single image det result. + + Args: + det_result (list[list]): [[cls1_det, cls2_det, ...], ...]. + The outer list indicates images, and the inner list indicates + per-class detected bboxes. + annotation (dict): Ground truth annotations where keys of + annotations are: + + - bboxes: numpy array of shape (n, 4) + - labels: numpy array of shape (n, ) + - bboxes_ignore (optional): numpy array of shape (k, 4) + - labels_ignore (optional): numpy array of shape (k, ) + + Returns: + float: mAP + """ + + # use only bbox det result + if isinstance(det_result, tuple): + bbox_det_result = [det_result[0]] + else: + bbox_det_result = [det_result] + # mAP + iou_thrs = np.linspace( + .5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True) + mean_aps = [] + for thr in iou_thrs: + mean_ap, _ = eval_map( + bbox_det_result, [annotation], iou_thr=thr, logger='silent') + mean_aps.append(mean_ap) + return sum(mean_aps) / len(mean_aps) + + +class ResultVisualizer(object): + """Display and save evaluation results. + + Args: + show (bool): Whether to show the image. Default: True + wait_time (float): Value of waitKey param. Default: 0. + """ + + def __init__(self, show=False, wait_time=0): + self.show = show + self.wait_time = wait_time + + def _save_image_gts_results(self, dataset, results, mAPs, out_dir=None): + mmcv.mkdir_or_exist(out_dir) + + for mAP_info in mAPs: + index, mAP = mAP_info + data_info = dataset.prepare_train_img(index) + + # calc save file path + filename = data_info['filename'] + if data_info['img_prefix'] is not None: + filename = osp.join(data_info['img_prefix'], filename) + else: + filename = data_info['filename'] + fname, name = osp.splitext(osp.basename(filename)) + save_filename = fname + '_' + str(round(mAP, 3)) + name + out_file = osp.join(out_dir, save_filename) + imshow_gt_det_bboxes( + data_info['img'], + data_info, + results[index], + dataset.CLASSES, + show=self.show, + wait_time=self.wait_time, + out_file=out_file) + + def evaluate_and_show(self, + dataset, + results, + topk=20, + show_dir='work_dir', + eval_fn=None): + """Evaluate and show results. + + Args: + dataset (Dataset): A PyTorch dataset. + results (list): Det results from test results pkl file + topk (int): Number of the highest topk and + lowest topk after evaluation index sorting. Default: 20 + show_dir (str, optional): The filename to write the image. + Default: 'work_dir' + eval_fn (callable, optional): Eval function, Default: None + """ + + assert topk > 0 + if (topk * 2) > len(dataset): + topk = len(dataset) // 2 + + if eval_fn is None: + eval_fn = bbox_map_eval + else: + assert callable(eval_fn) + + prog_bar = mmcv.ProgressBar(len(results)) + _mAPs = {} + for i, (result, ) in enumerate(zip(results)): + # self.dataset[i] should not call directly + # because there is a risk of mismatch + data_info = dataset.prepare_train_img(i) + mAP = eval_fn(result, data_info['ann_info']) + _mAPs[i] = mAP + prog_bar.update() + + # descending select topk image + _mAPs = list(sorted(_mAPs.items(), key=lambda kv: kv[1])) + good_mAPs = _mAPs[-topk:] + bad_mAPs = _mAPs[:topk] + + good_dir = osp.abspath(osp.join(show_dir, 'good')) + bad_dir = osp.abspath(osp.join(show_dir, 'bad')) + self._save_image_gts_results(dataset, results, good_mAPs, good_dir) + self._save_image_gts_results(dataset, results, bad_mAPs, bad_dir) + + +def parse_args(): + parser = argparse.ArgumentParser( + description='MMDet eval image prediction result for each') + parser.add_argument('config', help='test config file path') + parser.add_argument( + 'prediction_path', help='prediction path where test pkl result') + parser.add_argument( + 'show_dir', help='directory where painted images will be saved') + parser.add_argument('--show', action='store_true', help='show results') + parser.add_argument( + '--wait-time', + type=float, + default=0, + help='the interval of show (s), 0 is block') + parser.add_argument( + 'eval', + type=str, + help='evaluation metrics, which depends on the dataset, e.g., "bbox",' + ' "segm", "proposal" for COCO, and "mAP", "recall" for PASCAL VOC') + parser.add_argument( + '--topk', + default=20, + type=int, + help='saved Number of the highest topk ' + 'and lowest topk after index sorting') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. If the value to ' + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + 'Note that the quotation marks are necessary and that no white space ' + 'is allowed.') + parser.add_argument( + '--eval-options', + nargs='+', + action=DictAction, + help='custom options for evaluation, the key-value pair in xxx=yyy ' + 'format will be kwargs for dataset.evaluate() function') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + + mmcv.check_file_exist(args.prediction_path) + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + cfg.data.test.test_mode = True + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + + cfg.data.test.pop('samples_per_gpu', 0) + cfg.data.test.pipeline = get_loading_pipeline(cfg.data.train.pipeline) + dataset = build_dataset(cfg.data.test) + outputs = mmcv.load(args.prediction_path) + + result_visualizer = ResultVisualizer(args.show, args.wait_time) + result_visualizer.evaluate_and_show( + dataset, outputs, topk=args.topk, show_dir=args.show_dir) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/benchmark.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/benchmark.py new file mode 100644 index 00000000..22f59d68 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/benchmark.py @@ -0,0 +1,101 @@ +import argparse +import time + +import torch +from mmcv import Config +from mmcv.cnn import fuse_conv_bn +from mmcv.parallel import MMDataParallel +from mmcv.runner import load_checkpoint, wrap_fp16_model + +from mmdet.datasets import (build_dataloader, build_dataset, + replace_ImageToTensor) +from mmdet.models import build_detector + + +def parse_args(): + parser = argparse.ArgumentParser(description='MMDet benchmark a model') + parser.add_argument('config', help='test config file path') + parser.add_argument('checkpoint', help='checkpoint file') + parser.add_argument( + '--log-interval', default=50, help='interval of logging') + parser.add_argument( + '--fuse-conv-bn', + action='store_true', + help='Whether to fuse conv and bn, this will slightly increase' + 'the inference speed') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + + cfg = Config.fromfile(args.config) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + cfg.model.pretrained = None + cfg.data.test.test_mode = True + + # build the dataloader + samples_per_gpu = cfg.data.test.pop('samples_per_gpu', 1) + if samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.test.pipeline = replace_ImageToTensor(cfg.data.test.pipeline) + dataset = build_dataset(cfg.data.test) + data_loader = build_dataloader( + dataset, + samples_per_gpu=1, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=False, + shuffle=False) + + # build the model and load checkpoint + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg')) + fp16_cfg = cfg.get('fp16', None) + if fp16_cfg is not None: + wrap_fp16_model(model) + load_checkpoint(model, args.checkpoint, map_location='cpu') + if args.fuse_conv_bn: + model = fuse_conv_bn(model) + + model = MMDataParallel(model, device_ids=[0]) + + model.eval() + + # the first several iterations may be very slow so skip them + num_warmup = 5 + pure_inf_time = 0 + + # benchmark with 2000 image and take the average + for i, data in enumerate(data_loader): + + torch.cuda.synchronize() + start_time = time.perf_counter() + + with torch.no_grad(): + model(return_loss=False, rescale=True, **data) + + torch.cuda.synchronize() + elapsed = time.perf_counter() - start_time + + if i >= num_warmup: + pure_inf_time += elapsed + if (i + 1) % args.log_interval == 0: + fps = (i + 1 - num_warmup) / pure_inf_time + print(f'Done image [{i + 1:<3}/ 2000], fps: {fps:.1f} img / s') + + if (i + 1) == 2000: + pure_inf_time += elapsed + fps = (i + 1 - num_warmup) / pure_inf_time + print(f'Overall fps: {fps:.1f} img / s') + break + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/coco_error_analysis.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/coco_error_analysis.py new file mode 100644 index 00000000..fba96caf --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/coco_error_analysis.py @@ -0,0 +1,171 @@ +import copy +import os +from argparse import ArgumentParser +from multiprocessing import Pool + +import matplotlib.pyplot as plt +import numpy as np +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval + + +def makeplot(rs, ps, outDir, class_name, iou_type): + cs = np.vstack([ + np.ones((2, 3)), + np.array([.31, .51, .74]), + np.array([.75, .31, .30]), + np.array([.36, .90, .38]), + np.array([.50, .39, .64]), + np.array([1, .6, 0]) + ]) + areaNames = ['allarea', 'small', 'medium', 'large'] + types = ['C75', 'C50', 'Loc', 'Sim', 'Oth', 'BG', 'FN'] + for i in range(len(areaNames)): + area_ps = ps[..., i, 0] + figure_tile = iou_type + '-' + class_name + '-' + areaNames[i] + aps = [ps_.mean() for ps_ in area_ps] + ps_curve = [ + ps_.mean(axis=1) if ps_.ndim > 1 else ps_ for ps_ in area_ps + ] + ps_curve.insert(0, np.zeros(ps_curve[0].shape)) + fig = plt.figure() + ax = plt.subplot(111) + for k in range(len(types)): + ax.plot(rs, ps_curve[k + 1], color=[0, 0, 0], linewidth=0.5) + ax.fill_between( + rs, + ps_curve[k], + ps_curve[k + 1], + color=cs[k], + label=str(f'[{aps[k]:.3f}]' + types[k])) + plt.xlabel('recall') + plt.ylabel('precision') + plt.xlim(0, 1.) + plt.ylim(0, 1.) + plt.title(figure_tile) + plt.legend() + # plt.show() + fig.savefig(outDir + f'/{figure_tile}.png') + plt.close(fig) + + +def analyze_individual_category(k, cocoDt, cocoGt, catId, iou_type): + nm = cocoGt.loadCats(catId)[0] + print(f'--------------analyzing {k + 1}-{nm["name"]}---------------') + ps_ = {} + dt = copy.deepcopy(cocoDt) + nm = cocoGt.loadCats(catId)[0] + imgIds = cocoGt.getImgIds() + dt_anns = dt.dataset['annotations'] + select_dt_anns = [] + for ann in dt_anns: + if ann['category_id'] == catId: + select_dt_anns.append(ann) + dt.dataset['annotations'] = select_dt_anns + dt.createIndex() + # compute precision but ignore superclass confusion + gt = copy.deepcopy(cocoGt) + child_catIds = gt.getCatIds(supNms=[nm['supercategory']]) + for idx, ann in enumerate(gt.dataset['annotations']): + if (ann['category_id'] in child_catIds + and ann['category_id'] != catId): + gt.dataset['annotations'][idx]['ignore'] = 1 + gt.dataset['annotations'][idx]['iscrowd'] = 1 + gt.dataset['annotations'][idx]['category_id'] = catId + cocoEval = COCOeval(gt, copy.deepcopy(dt), iou_type) + cocoEval.params.imgIds = imgIds + cocoEval.params.maxDets = [100] + cocoEval.params.iouThrs = [.1] + cocoEval.params.useCats = 1 + cocoEval.evaluate() + cocoEval.accumulate() + ps_supercategory = cocoEval.eval['precision'][0, :, k, :, :] + ps_['ps_supercategory'] = ps_supercategory + # compute precision but ignore any class confusion + gt = copy.deepcopy(cocoGt) + for idx, ann in enumerate(gt.dataset['annotations']): + if ann['category_id'] != catId: + gt.dataset['annotations'][idx]['ignore'] = 1 + gt.dataset['annotations'][idx]['iscrowd'] = 1 + gt.dataset['annotations'][idx]['category_id'] = catId + cocoEval = COCOeval(gt, copy.deepcopy(dt), iou_type) + cocoEval.params.imgIds = imgIds + cocoEval.params.maxDets = [100] + cocoEval.params.iouThrs = [.1] + cocoEval.params.useCats = 1 + cocoEval.evaluate() + cocoEval.accumulate() + ps_allcategory = cocoEval.eval['precision'][0, :, k, :, :] + ps_['ps_allcategory'] = ps_allcategory + return k, ps_ + + +def analyze_results(res_file, ann_file, res_types, out_dir): + for res_type in res_types: + assert res_type in ['bbox', 'segm'] + + directory = os.path.dirname(out_dir + '/') + if not os.path.exists(directory): + print(f'-------------create {out_dir}-----------------') + os.makedirs(directory) + + cocoGt = COCO(ann_file) + cocoDt = cocoGt.loadRes(res_file) + imgIds = cocoGt.getImgIds() + for res_type in res_types: + res_out_dir = out_dir + '/' + res_type + '/' + res_directory = os.path.dirname(res_out_dir) + if not os.path.exists(res_directory): + print(f'-------------create {res_out_dir}-----------------') + os.makedirs(res_directory) + iou_type = res_type + cocoEval = COCOeval( + copy.deepcopy(cocoGt), copy.deepcopy(cocoDt), iou_type) + cocoEval.params.imgIds = imgIds + cocoEval.params.iouThrs = [.75, .5, .1] + cocoEval.params.maxDets = [100] + cocoEval.evaluate() + cocoEval.accumulate() + ps = cocoEval.eval['precision'] + ps = np.vstack([ps, np.zeros((4, *ps.shape[1:]))]) + catIds = cocoGt.getCatIds() + recThrs = cocoEval.params.recThrs + with Pool(processes=48) as pool: + args = [(k, cocoDt, cocoGt, catId, iou_type) + for k, catId in enumerate(catIds)] + analyze_results = pool.starmap(analyze_individual_category, args) + for k, catId in enumerate(catIds): + nm = cocoGt.loadCats(catId)[0] + print(f'--------------saving {k + 1}-{nm["name"]}---------------') + analyze_result = analyze_results[k] + assert k == analyze_result[0] + ps_supercategory = analyze_result[1]['ps_supercategory'] + ps_allcategory = analyze_result[1]['ps_allcategory'] + # compute precision but ignore superclass confusion + ps[3, :, k, :, :] = ps_supercategory + # compute precision but ignore any class confusion + ps[4, :, k, :, :] = ps_allcategory + # fill in background and false negative errors and plot + ps[ps == -1] = 0 + ps[5, :, k, :, :] = (ps[4, :, k, :, :] > 0) + ps[6, :, k, :, :] = 1.0 + makeplot(recThrs, ps[:, :, k], res_out_dir, nm['name'], iou_type) + makeplot(recThrs, ps, res_out_dir, 'allclass', iou_type) + + +def main(): + parser = ArgumentParser(description='COCO Error Analysis Tool') + parser.add_argument('result', help='result file (json format) path') + parser.add_argument('out_dir', help='dir to save analyze result images') + parser.add_argument( + '--ann', + default='data/coco/annotations/instances_val2017.json', + help='annotation file path') + parser.add_argument( + '--types', type=str, nargs='+', default=['bbox'], help='result types') + args = parser.parse_args() + analyze_results(args.result, args.ann, args.types, out_dir=args.out_dir) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/eval_metric.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/eval_metric.py new file mode 100644 index 00000000..73c551ca --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/eval_metric.py @@ -0,0 +1,79 @@ +import argparse + +import mmcv +from mmcv import Config, DictAction + +from mmdet.datasets import build_dataset + + +def parse_args(): + parser = argparse.ArgumentParser(description='Evaluate metric of the ' + 'results saved in pkl format') + parser.add_argument('config', help='Config of the model') + parser.add_argument('pkl_results', help='Results in pickle format') + parser.add_argument( + '--format-only', + action='store_true', + help='Format the output results without perform evaluation. It is' + 'useful when you want to format the result to a specific format and ' + 'submit it to the test server') + parser.add_argument( + '--eval', + type=str, + nargs='+', + help='Evaluation metrics, which depends on the dataset, e.g., "bbox",' + ' "segm", "proposal" for COCO, and "mAP", "recall" for PASCAL VOC') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. If the value to ' + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + 'Note that the quotation marks are necessary and that no white space ' + 'is allowed.') + parser.add_argument( + '--eval-options', + nargs='+', + action=DictAction, + help='custom options for evaluation, the key-value pair in xxx=yyy ' + 'format will be kwargs for dataset.evaluate() function') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + + cfg = Config.fromfile(args.config) + assert args.eval or args.format_only, ( + 'Please specify at least one operation (eval/format the results) with ' + 'the argument "--eval", "--format-only"') + if args.eval and args.format_only: + raise ValueError('--eval and --format_only cannot be both specified') + + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + cfg.data.test.test_mode = True + + dataset = build_dataset(cfg.data.test) + outputs = mmcv.load(args.pkl_results) + + kwargs = {} if args.eval_options is None else args.eval_options + if args.format_only: + dataset.format_results(outputs, **kwargs) + if args.eval: + eval_kwargs = cfg.get('evaluation', {}).copy() + # hard-code way to remove EvalHook args + for key in [ + 'interval', 'tmpdir', 'start', 'gpu_collect', 'save_best', + 'rule' + ]: + eval_kwargs.pop(key, None) + eval_kwargs.update(dict(metric=args.eval, **kwargs)) + print(dataset.evaluate(outputs, **eval_kwargs)) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/get_flops.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/get_flops.py new file mode 100644 index 00000000..3a7f471e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/get_flops.py @@ -0,0 +1,69 @@ +import argparse + +import torch +from mmcv import Config + +from mmdet.models import build_detector + +try: + from mmcv.cnn import get_model_complexity_info +except ImportError: + raise ImportError('Please upgrade mmcv to >0.6.2') + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train a detector') + parser.add_argument('config', help='train config file path') + parser.add_argument( + '--shape', + type=int, + nargs='+', + default=[1280, 800], + help='input image size') + args = parser.parse_args() + return args + + +def main(): + + args = parse_args() + + if len(args.shape) == 1: + input_shape = (3, args.shape[0], args.shape[0]) + elif len(args.shape) == 2: + input_shape = (3, ) + tuple(args.shape) + else: + raise ValueError('invalid input shape') + + cfg = Config.fromfile(args.config) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + + model = build_detector( + cfg.model, + train_cfg=cfg.get('train_cfg'), + test_cfg=cfg.get('test_cfg')) + if torch.cuda.is_available(): + model.cuda() + model.eval() + + if hasattr(model, 'forward_dummy'): + model.forward = model.forward_dummy + else: + raise NotImplementedError( + 'FLOPs counter is currently not currently supported with {}'. + format(model.__class__.__name__)) + + flops, params = get_model_complexity_info(model, input_shape) + split_line = '=' * 30 + print(f'{split_line}\nInput shape: {input_shape}\n' + f'Flops: {flops}\nParams: {params}\n{split_line}') + print('!!!Please be cautious if you use the results in papers. ' + 'You may need to check if all ops are supported and verify that the ' + 'flops computation is correct.') + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/robustness_eval.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/robustness_eval.py new file mode 100644 index 00000000..a1b4ce88 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/robustness_eval.py @@ -0,0 +1,250 @@ +import os.path as osp +from argparse import ArgumentParser + +import mmcv +import numpy as np + + +def print_coco_results(results): + + def _print(result, ap=1, iouThr=None, areaRng='all', maxDets=100): + titleStr = 'Average Precision' if ap == 1 else 'Average Recall' + typeStr = '(AP)' if ap == 1 else '(AR)' + iouStr = '0.50:0.95' \ + if iouThr is None else f'{iouThr:0.2f}' + iStr = f' {titleStr:<18} {typeStr} @[ IoU={iouStr:<9} | ' + iStr += f'area={areaRng:>6s} | maxDets={maxDets:>3d} ] = {result:0.3f}' + print(iStr) + + stats = np.zeros((12, )) + stats[0] = _print(results[0], 1) + stats[1] = _print(results[1], 1, iouThr=.5) + stats[2] = _print(results[2], 1, iouThr=.75) + stats[3] = _print(results[3], 1, areaRng='small') + stats[4] = _print(results[4], 1, areaRng='medium') + stats[5] = _print(results[5], 1, areaRng='large') + stats[6] = _print(results[6], 0, maxDets=1) + stats[7] = _print(results[7], 0, maxDets=10) + stats[8] = _print(results[8], 0) + stats[9] = _print(results[9], 0, areaRng='small') + stats[10] = _print(results[10], 0, areaRng='medium') + stats[11] = _print(results[11], 0, areaRng='large') + + +def get_coco_style_results(filename, + task='bbox', + metric=None, + prints='mPC', + aggregate='benchmark'): + + assert aggregate in ['benchmark', 'all'] + + if prints == 'all': + prints = ['P', 'mPC', 'rPC'] + elif isinstance(prints, str): + prints = [prints] + for p in prints: + assert p in ['P', 'mPC', 'rPC'] + + if metric is None: + metrics = [ + 'AP', 'AP50', 'AP75', 'APs', 'APm', 'APl', 'AR1', 'AR10', 'AR100', + 'ARs', 'ARm', 'ARl' + ] + elif isinstance(metric, list): + metrics = metric + else: + metrics = [metric] + + for metric_name in metrics: + assert metric_name in [ + 'AP', 'AP50', 'AP75', 'APs', 'APm', 'APl', 'AR1', 'AR10', 'AR100', + 'ARs', 'ARm', 'ARl' + ] + + eval_output = mmcv.load(filename) + + num_distortions = len(list(eval_output.keys())) + results = np.zeros((num_distortions, 6, len(metrics)), dtype='float32') + + for corr_i, distortion in enumerate(eval_output): + for severity in eval_output[distortion]: + for metric_j, metric_name in enumerate(metrics): + mAP = eval_output[distortion][severity][task][metric_name] + results[corr_i, severity, metric_j] = mAP + + P = results[0, 0, :] + if aggregate == 'benchmark': + mPC = np.mean(results[:15, 1:, :], axis=(0, 1)) + else: + mPC = np.mean(results[:, 1:, :], axis=(0, 1)) + rPC = mPC / P + + print(f'\nmodel: {osp.basename(filename)}') + if metric is None: + if 'P' in prints: + print(f'Performance on Clean Data [P] ({task})') + print_coco_results(P) + if 'mPC' in prints: + print(f'Mean Performance under Corruption [mPC] ({task})') + print_coco_results(mPC) + if 'rPC' in prints: + print(f'Realtive Performance under Corruption [rPC] ({task})') + print_coco_results(rPC) + else: + if 'P' in prints: + print(f'Performance on Clean Data [P] ({task})') + for metric_i, metric_name in enumerate(metrics): + print(f'{metric_name:5} = {P[metric_i]:0.3f}') + if 'mPC' in prints: + print(f'Mean Performance under Corruption [mPC] ({task})') + for metric_i, metric_name in enumerate(metrics): + print(f'{metric_name:5} = {mPC[metric_i]:0.3f}') + if 'rPC' in prints: + print(f'Relative Performance under Corruption [rPC] ({task})') + for metric_i, metric_name in enumerate(metrics): + print(f'{metric_name:5} => {rPC[metric_i] * 100:0.1f} %') + + return results + + +def get_voc_style_results(filename, prints='mPC', aggregate='benchmark'): + + assert aggregate in ['benchmark', 'all'] + + if prints == 'all': + prints = ['P', 'mPC', 'rPC'] + elif isinstance(prints, str): + prints = [prints] + for p in prints: + assert p in ['P', 'mPC', 'rPC'] + + eval_output = mmcv.load(filename) + + num_distortions = len(list(eval_output.keys())) + results = np.zeros((num_distortions, 6, 20), dtype='float32') + + for i, distortion in enumerate(eval_output): + for severity in eval_output[distortion]: + mAP = [ + eval_output[distortion][severity][j]['ap'] + for j in range(len(eval_output[distortion][severity])) + ] + results[i, severity, :] = mAP + + P = results[0, 0, :] + if aggregate == 'benchmark': + mPC = np.mean(results[:15, 1:, :], axis=(0, 1)) + else: + mPC = np.mean(results[:, 1:, :], axis=(0, 1)) + rPC = mPC / P + + print(f'\nmodel: {osp.basename(filename)}') + if 'P' in prints: + print(f'Performance on Clean Data [P] in AP50 = {np.mean(P):0.3f}') + if 'mPC' in prints: + print('Mean Performance under Corruption [mPC] in AP50 = ' + f'{np.mean(mPC):0.3f}') + if 'rPC' in prints: + print('Realtive Performance under Corruption [rPC] in % = ' + f'{np.mean(rPC) * 100:0.1f}') + + return np.mean(results, axis=2, keepdims=True) + + +def get_results(filename, + dataset='coco', + task='bbox', + metric=None, + prints='mPC', + aggregate='benchmark'): + assert dataset in ['coco', 'voc', 'cityscapes'] + + if dataset in ['coco', 'cityscapes']: + results = get_coco_style_results( + filename, + task=task, + metric=metric, + prints=prints, + aggregate=aggregate) + elif dataset == 'voc': + if task != 'bbox': + print('Only bbox analysis is supported for Pascal VOC') + print('Will report bbox results\n') + if metric not in [None, ['AP'], ['AP50']]: + print('Only the AP50 metric is supported for Pascal VOC') + print('Will report AP50 metric\n') + results = get_voc_style_results( + filename, prints=prints, aggregate=aggregate) + + return results + + +def get_distortions_from_file(filename): + + eval_output = mmcv.load(filename) + + return get_distortions_from_results(eval_output) + + +def get_distortions_from_results(eval_output): + distortions = [] + for i, distortion in enumerate(eval_output): + distortions.append(distortion.replace('_', ' ')) + return distortions + + +def main(): + parser = ArgumentParser(description='Corruption Result Analysis') + parser.add_argument('filename', help='result file path') + parser.add_argument( + '--dataset', + type=str, + choices=['coco', 'voc', 'cityscapes'], + default='coco', + help='dataset type') + parser.add_argument( + '--task', + type=str, + nargs='+', + choices=['bbox', 'segm'], + default=['bbox'], + help='task to report') + parser.add_argument( + '--metric', + nargs='+', + choices=[ + None, 'AP', 'AP50', 'AP75', 'APs', 'APm', 'APl', 'AR1', 'AR10', + 'AR100', 'ARs', 'ARm', 'ARl' + ], + default=None, + help='metric to report') + parser.add_argument( + '--prints', + type=str, + nargs='+', + choices=['P', 'mPC', 'rPC'], + default='mPC', + help='corruption benchmark metric to print') + parser.add_argument( + '--aggregate', + type=str, + choices=['all', 'benchmark'], + default='benchmark', + help='aggregate all results or only those \ + for benchmark corruptions') + + args = parser.parse_args() + + for task in args.task: + get_results( + args.filename, + dataset=args.dataset, + task=task, + metric=args.metric, + prints=args.prints, + aggregate=args.aggregate) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/test_robustness.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/test_robustness.py new file mode 100644 index 00000000..dfc6778e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/analysis_tools/test_robustness.py @@ -0,0 +1,377 @@ +import argparse +import copy +import os +import os.path as osp + +import mmcv +import torch +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import (get_dist_info, init_dist, load_checkpoint, + wrap_fp16_model) +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval +from tools.analysis_tools.robustness_eval import get_results + +from mmdet import datasets +from mmdet.apis import multi_gpu_test, set_random_seed, single_gpu_test +from mmdet.core import eval_map +from mmdet.datasets import build_dataloader, build_dataset +from mmdet.models import build_detector + + +def coco_eval_with_return(result_files, + result_types, + coco, + max_dets=(100, 300, 1000)): + for res_type in result_types: + assert res_type in ['proposal', 'bbox', 'segm', 'keypoints'] + + if mmcv.is_str(coco): + coco = COCO(coco) + assert isinstance(coco, COCO) + + eval_results = {} + for res_type in result_types: + result_file = result_files[res_type] + assert result_file.endswith('.json') + + coco_dets = coco.loadRes(result_file) + img_ids = coco.getImgIds() + iou_type = 'bbox' if res_type == 'proposal' else res_type + cocoEval = COCOeval(coco, coco_dets, iou_type) + cocoEval.params.imgIds = img_ids + if res_type == 'proposal': + cocoEval.params.useCats = 0 + cocoEval.params.maxDets = list(max_dets) + cocoEval.evaluate() + cocoEval.accumulate() + cocoEval.summarize() + if res_type == 'segm' or res_type == 'bbox': + metric_names = [ + 'AP', 'AP50', 'AP75', 'APs', 'APm', 'APl', 'AR1', 'AR10', + 'AR100', 'ARs', 'ARm', 'ARl' + ] + eval_results[res_type] = { + metric_names[i]: cocoEval.stats[i] + for i in range(len(metric_names)) + } + else: + eval_results[res_type] = cocoEval.stats + + return eval_results + + +def voc_eval_with_return(result_file, + dataset, + iou_thr=0.5, + logger='print', + only_ap=True): + det_results = mmcv.load(result_file) + annotations = [dataset.get_ann_info(i) for i in range(len(dataset))] + if hasattr(dataset, 'year') and dataset.year == 2007: + dataset_name = 'voc07' + else: + dataset_name = dataset.CLASSES + mean_ap, eval_results = eval_map( + det_results, + annotations, + scale_ranges=None, + iou_thr=iou_thr, + dataset=dataset_name, + logger=logger) + + if only_ap: + eval_results = [{ + 'ap': eval_results[i]['ap'] + } for i in range(len(eval_results))] + + return mean_ap, eval_results + + +def parse_args(): + parser = argparse.ArgumentParser(description='MMDet test detector') + parser.add_argument('config', help='test config file path') + parser.add_argument('checkpoint', help='checkpoint file') + parser.add_argument('--out', help='output result file') + parser.add_argument( + '--corruptions', + type=str, + nargs='+', + default='benchmark', + choices=[ + 'all', 'benchmark', 'noise', 'blur', 'weather', 'digital', + 'holdout', 'None', 'gaussian_noise', 'shot_noise', 'impulse_noise', + 'defocus_blur', 'glass_blur', 'motion_blur', 'zoom_blur', 'snow', + 'frost', 'fog', 'brightness', 'contrast', 'elastic_transform', + 'pixelate', 'jpeg_compression', 'speckle_noise', 'gaussian_blur', + 'spatter', 'saturate' + ], + help='corruptions') + parser.add_argument( + '--severities', + type=int, + nargs='+', + default=[0, 1, 2, 3, 4, 5], + help='corruption severity levels') + parser.add_argument( + '--eval', + type=str, + nargs='+', + choices=['proposal', 'proposal_fast', 'bbox', 'segm', 'keypoints'], + help='eval types') + parser.add_argument( + '--iou-thr', + type=float, + default=0.5, + help='IoU threshold for pascal voc evaluation') + parser.add_argument( + '--summaries', + type=bool, + default=False, + help='Print summaries for every corruption and severity') + parser.add_argument( + '--workers', type=int, default=32, help='workers per gpu') + parser.add_argument('--show', action='store_true', help='show results') + parser.add_argument( + '--show-dir', help='directory where painted images will be saved') + parser.add_argument( + '--show-score-thr', + type=float, + default=0.3, + help='score threshold (default: 0.3)') + parser.add_argument('--tmpdir', help='tmp dir for writing some results') + parser.add_argument('--seed', type=int, default=None, help='random seed') + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + parser.add_argument( + '--final-prints', + type=str, + nargs='+', + choices=['P', 'mPC', 'rPC'], + default='mPC', + help='corruption benchmark metric to print at the end') + parser.add_argument( + '--final-prints-aggregate', + type=str, + choices=['all', 'benchmark'], + default='benchmark', + help='aggregate all results or only those for benchmark corruptions') + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + return args + + +def main(): + args = parse_args() + + assert args.out or args.show or args.show_dir, \ + ('Please specify at least one operation (save or show the results) ' + 'with the argument "--out", "--show" or "show-dir"') + + if args.out is not None and not args.out.endswith(('.pkl', '.pickle')): + raise ValueError('The output file must be a pkl file.') + + cfg = mmcv.Config.fromfile(args.config) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + cfg.model.pretrained = None + cfg.data.test.test_mode = True + if args.workers == 0: + args.workers = cfg.data.workers_per_gpu + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + + # set random seeds + if args.seed is not None: + set_random_seed(args.seed) + + if 'all' in args.corruptions: + corruptions = [ + 'gaussian_noise', 'shot_noise', 'impulse_noise', 'defocus_blur', + 'glass_blur', 'motion_blur', 'zoom_blur', 'snow', 'frost', 'fog', + 'brightness', 'contrast', 'elastic_transform', 'pixelate', + 'jpeg_compression', 'speckle_noise', 'gaussian_blur', 'spatter', + 'saturate' + ] + elif 'benchmark' in args.corruptions: + corruptions = [ + 'gaussian_noise', 'shot_noise', 'impulse_noise', 'defocus_blur', + 'glass_blur', 'motion_blur', 'zoom_blur', 'snow', 'frost', 'fog', + 'brightness', 'contrast', 'elastic_transform', 'pixelate', + 'jpeg_compression' + ] + elif 'noise' in args.corruptions: + corruptions = ['gaussian_noise', 'shot_noise', 'impulse_noise'] + elif 'blur' in args.corruptions: + corruptions = [ + 'defocus_blur', 'glass_blur', 'motion_blur', 'zoom_blur' + ] + elif 'weather' in args.corruptions: + corruptions = ['snow', 'frost', 'fog', 'brightness'] + elif 'digital' in args.corruptions: + corruptions = [ + 'contrast', 'elastic_transform', 'pixelate', 'jpeg_compression' + ] + elif 'holdout' in args.corruptions: + corruptions = ['speckle_noise', 'gaussian_blur', 'spatter', 'saturate'] + elif 'None' in args.corruptions: + corruptions = ['None'] + args.severities = [0] + else: + corruptions = args.corruptions + + rank, _ = get_dist_info() + aggregated_results = {} + for corr_i, corruption in enumerate(corruptions): + aggregated_results[corruption] = {} + for sev_i, corruption_severity in enumerate(args.severities): + # evaluate severity 0 (= no corruption) only once + if corr_i > 0 and corruption_severity == 0: + aggregated_results[corruption][0] = \ + aggregated_results[corruptions[0]][0] + continue + + test_data_cfg = copy.deepcopy(cfg.data.test) + # assign corruption and severity + if corruption_severity > 0: + corruption_trans = dict( + type='Corrupt', + corruption=corruption, + severity=corruption_severity) + # TODO: hard coded "1", we assume that the first step is + # loading images, which needs to be fixed in the future + test_data_cfg['pipeline'].insert(1, corruption_trans) + + # print info + print(f'\nTesting {corruption} at severity {corruption_severity}') + + # build the dataloader + # TODO: support multiple images per gpu + # (only minor changes are needed) + dataset = build_dataset(test_data_cfg) + data_loader = build_dataloader( + dataset, + samples_per_gpu=1, + workers_per_gpu=args.workers, + dist=distributed, + shuffle=False) + + # build the model and load checkpoint + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg')) + fp16_cfg = cfg.get('fp16', None) + if fp16_cfg is not None: + wrap_fp16_model(model) + checkpoint = load_checkpoint( + model, args.checkpoint, map_location='cpu') + # old versions did not save class info in checkpoints, + # this walkaround is for backward compatibility + if 'CLASSES' in checkpoint['meta']: + model.CLASSES = checkpoint['meta']['CLASSES'] + else: + model.CLASSES = dataset.CLASSES + + if not distributed: + model = MMDataParallel(model, device_ids=[0]) + show_dir = args.show_dir + if show_dir is not None: + show_dir = osp.join(show_dir, corruption) + show_dir = osp.join(show_dir, str(corruption_severity)) + if not osp.exists(show_dir): + osp.makedirs(show_dir) + outputs = single_gpu_test(model, data_loader, args.show, + show_dir, args.show_score_thr) + else: + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False) + outputs = multi_gpu_test(model, data_loader, args.tmpdir) + + if args.out and rank == 0: + eval_results_filename = ( + osp.splitext(args.out)[0] + '_results' + + osp.splitext(args.out)[1]) + mmcv.dump(outputs, args.out) + eval_types = args.eval + if cfg.dataset_type == 'VOCDataset': + if eval_types: + for eval_type in eval_types: + if eval_type == 'bbox': + test_dataset = mmcv.runner.obj_from_dict( + cfg.data.test, datasets) + logger = 'print' if args.summaries else None + mean_ap, eval_results = \ + voc_eval_with_return( + args.out, test_dataset, + args.iou_thr, logger) + aggregated_results[corruption][ + corruption_severity] = eval_results + else: + print('\nOnly "bbox" evaluation \ + is supported for pascal voc') + else: + if eval_types: + print(f'Starting evaluate {" and ".join(eval_types)}') + if eval_types == ['proposal_fast']: + result_file = args.out + else: + if not isinstance(outputs[0], dict): + result_files = dataset.results2json( + outputs, args.out) + else: + for name in outputs[0]: + print(f'\nEvaluating {name}') + outputs_ = [out[name] for out in outputs] + result_file = args.out + + f'.{name}' + result_files = dataset.results2json( + outputs_, result_file) + eval_results = coco_eval_with_return( + result_files, eval_types, dataset.coco) + aggregated_results[corruption][ + corruption_severity] = eval_results + else: + print('\nNo task was selected for evaluation;' + '\nUse --eval to select a task') + + # save results after each evaluation + mmcv.dump(aggregated_results, eval_results_filename) + + if rank == 0: + # print filan results + print('\nAggregated results:') + prints = args.final_prints + aggregate = args.final_prints_aggregate + + if cfg.dataset_type == 'VOCDataset': + get_results( + eval_results_filename, + dataset='voc', + prints=prints, + aggregate=aggregate) + else: + get_results( + eval_results_filename, + dataset='coco', + prints=prints, + aggregate=aggregate) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/cityscapes.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/cityscapes.py new file mode 100644 index 00000000..86ef84fa --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/cityscapes.py @@ -0,0 +1,151 @@ +import argparse +import glob +import os.path as osp + +import cityscapesscripts.helpers.labels as CSLabels +import mmcv +import numpy as np +import pycocotools.mask as maskUtils + + +def collect_files(img_dir, gt_dir): + suffix = 'leftImg8bit.png' + files = [] + for img_file in glob.glob(osp.join(img_dir, '**/*.png')): + assert img_file.endswith(suffix), img_file + inst_file = gt_dir + img_file[ + len(img_dir):-len(suffix)] + 'gtFine_instanceIds.png' + # Note that labelIds are not converted to trainId for seg map + segm_file = gt_dir + img_file[ + len(img_dir):-len(suffix)] + 'gtFine_labelIds.png' + files.append((img_file, inst_file, segm_file)) + assert len(files), f'No images found in {img_dir}' + print(f'Loaded {len(files)} images from {img_dir}') + + return files + + +def collect_annotations(files, nproc=1): + print('Loading annotation images') + if nproc > 1: + images = mmcv.track_parallel_progress( + load_img_info, files, nproc=nproc) + else: + images = mmcv.track_progress(load_img_info, files) + + return images + + +def load_img_info(files): + img_file, inst_file, segm_file = files + inst_img = mmcv.imread(inst_file, 'unchanged') + # ids < 24 are stuff labels (filtering them first is about 5% faster) + unique_inst_ids = np.unique(inst_img[inst_img >= 24]) + anno_info = [] + for inst_id in unique_inst_ids: + # For non-crowd annotations, inst_id // 1000 is the label_id + # Crowd annotations have <1000 instance ids + label_id = inst_id // 1000 if inst_id >= 1000 else inst_id + label = CSLabels.id2label[label_id] + if not label.hasInstances or label.ignoreInEval: + continue + + category_id = label.id + iscrowd = int(inst_id < 1000) + mask = np.asarray(inst_img == inst_id, dtype=np.uint8, order='F') + mask_rle = maskUtils.encode(mask[:, :, None])[0] + + area = maskUtils.area(mask_rle) + # convert to COCO style XYWH format + bbox = maskUtils.toBbox(mask_rle) + + # for json encoding + mask_rle['counts'] = mask_rle['counts'].decode() + + anno = dict( + iscrowd=iscrowd, + category_id=category_id, + bbox=bbox.tolist(), + area=area.tolist(), + segmentation=mask_rle) + anno_info.append(anno) + video_name = osp.basename(osp.dirname(img_file)) + img_info = dict( + # remove img_prefix for filename + file_name=osp.join(video_name, osp.basename(img_file)), + height=inst_img.shape[0], + width=inst_img.shape[1], + anno_info=anno_info, + segm_file=osp.join(video_name, osp.basename(segm_file))) + + return img_info + + +def cvt_annotations(image_infos, out_json_name): + out_json = dict() + img_id = 0 + ann_id = 0 + out_json['images'] = [] + out_json['categories'] = [] + out_json['annotations'] = [] + for image_info in image_infos: + image_info['id'] = img_id + anno_infos = image_info.pop('anno_info') + out_json['images'].append(image_info) + for anno_info in anno_infos: + anno_info['image_id'] = img_id + anno_info['id'] = ann_id + out_json['annotations'].append(anno_info) + ann_id += 1 + img_id += 1 + for label in CSLabels.labels: + if label.hasInstances and not label.ignoreInEval: + cat = dict(id=label.id, name=label.name) + out_json['categories'].append(cat) + + if len(out_json['annotations']) == 0: + out_json.pop('annotations') + + mmcv.dump(out_json, out_json_name) + return out_json + + +def parse_args(): + parser = argparse.ArgumentParser( + description='Convert Cityscapes annotations to COCO format') + parser.add_argument('cityscapes_path', help='cityscapes data path') + parser.add_argument('--img-dir', default='leftImg8bit', type=str) + parser.add_argument('--gt-dir', default='gtFine', type=str) + parser.add_argument('-o', '--out-dir', help='output path') + parser.add_argument( + '--nproc', default=1, type=int, help='number of process') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + cityscapes_path = args.cityscapes_path + out_dir = args.out_dir if args.out_dir else cityscapes_path + mmcv.mkdir_or_exist(out_dir) + + img_dir = osp.join(cityscapes_path, args.img_dir) + gt_dir = osp.join(cityscapes_path, args.gt_dir) + + set_name = dict( + train='instancesonly_filtered_gtFine_train.json', + val='instancesonly_filtered_gtFine_val.json', + test='instancesonly_filtered_gtFine_test.json') + + for split, json_name in set_name.items(): + print(f'Converting {split} into {json_name}') + with mmcv.Timer( + print_tmpl='It tooks {}s to convert Cityscapes annotation'): + files = collect_files( + osp.join(img_dir, split), osp.join(gt_dir, split)) + image_infos = collect_annotations(files, nproc=args.nproc) + cvt_annotations(image_infos, osp.join(out_dir, json_name)) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/pascal_voc.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/pascal_voc.py new file mode 100644 index 00000000..307c93cb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/dataset_converters/pascal_voc.py @@ -0,0 +1,139 @@ +import argparse +import os.path as osp +import xml.etree.ElementTree as ET + +import mmcv +import numpy as np + +from mmdet.core import voc_classes + +label_ids = {name: i for i, name in enumerate(voc_classes())} + + +def parse_xml(args): + xml_path, img_path = args + tree = ET.parse(xml_path) + root = tree.getroot() + size = root.find('size') + w = int(size.find('width').text) + h = int(size.find('height').text) + bboxes = [] + labels = [] + bboxes_ignore = [] + labels_ignore = [] + for obj in root.findall('object'): + name = obj.find('name').text + label = label_ids[name] + difficult = int(obj.find('difficult').text) + bnd_box = obj.find('bndbox') + bbox = [ + int(bnd_box.find('xmin').text), + int(bnd_box.find('ymin').text), + int(bnd_box.find('xmax').text), + int(bnd_box.find('ymax').text) + ] + if difficult: + bboxes_ignore.append(bbox) + labels_ignore.append(label) + else: + bboxes.append(bbox) + labels.append(label) + if not bboxes: + bboxes = np.zeros((0, 4)) + labels = np.zeros((0, )) + else: + bboxes = np.array(bboxes, ndmin=2) - 1 + labels = np.array(labels) + if not bboxes_ignore: + bboxes_ignore = np.zeros((0, 4)) + labels_ignore = np.zeros((0, )) + else: + bboxes_ignore = np.array(bboxes_ignore, ndmin=2) - 1 + labels_ignore = np.array(labels_ignore) + annotation = { + 'filename': img_path, + 'width': w, + 'height': h, + 'ann': { + 'bboxes': bboxes.astype(np.float32), + 'labels': labels.astype(np.int64), + 'bboxes_ignore': bboxes_ignore.astype(np.float32), + 'labels_ignore': labels_ignore.astype(np.int64) + } + } + return annotation + + +def cvt_annotations(devkit_path, years, split, out_file): + if not isinstance(years, list): + years = [years] + annotations = [] + for year in years: + filelist = osp.join(devkit_path, + f'VOC{year}/ImageSets/Main/{split}.txt') + if not osp.isfile(filelist): + print(f'filelist does not exist: {filelist}, ' + f'skip voc{year} {split}') + return + img_names = mmcv.list_from_file(filelist) + xml_paths = [ + osp.join(devkit_path, f'VOC{year}/Annotations/{img_name}.xml') + for img_name in img_names + ] + img_paths = [ + f'VOC{year}/JPEGImages/{img_name}.jpg' for img_name in img_names + ] + part_annotations = mmcv.track_progress(parse_xml, + list(zip(xml_paths, img_paths))) + annotations.extend(part_annotations) + mmcv.dump(annotations, out_file) + return annotations + + +def parse_args(): + parser = argparse.ArgumentParser( + description='Convert PASCAL VOC annotations to mmdetection format') + parser.add_argument('devkit_path', help='pascal voc devkit path') + parser.add_argument('-o', '--out-dir', help='output path') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + devkit_path = args.devkit_path + out_dir = args.out_dir if args.out_dir else devkit_path + mmcv.mkdir_or_exist(out_dir) + + years = [] + if osp.isdir(osp.join(devkit_path, 'VOC2007')): + years.append('2007') + if osp.isdir(osp.join(devkit_path, 'VOC2012')): + years.append('2012') + if '2007' in years and '2012' in years: + years.append(['2007', '2012']) + if not years: + raise IOError(f'The devkit path {devkit_path} contains neither ' + '"VOC2007" nor "VOC2012" subfolder') + for year in years: + if year == '2007': + prefix = 'voc07' + elif year == '2012': + prefix = 'voc12' + elif year == ['2007', '2012']: + prefix = 'voc0712' + for split in ['train', 'val', 'trainval']: + dataset_name = prefix + '_' + split + print(f'processing {dataset_name} ...') + cvt_annotations(devkit_path, year, split, + osp.join(out_dir, dataset_name + '.pkl')) + if not isinstance(year, list): + dataset_name = prefix + '_test' + print(f'processing {dataset_name} ...') + cvt_annotations(devkit_path, year, 'test', + osp.join(out_dir, dataset_name + '.pkl')) + print('Done!') + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/deployment/pytorch2onnx.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/deployment/pytorch2onnx.py new file mode 100644 index 00000000..1305a799 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/deployment/pytorch2onnx.py @@ -0,0 +1,230 @@ +import argparse +import os.path as osp +import warnings + +import numpy as np +import onnx +import onnxruntime as rt +import torch + +from mmdet.core import (build_model_from_cfg, generate_inputs_and_wrap_model, + preprocess_example_input) + + +def pytorch2onnx(config_path, + checkpoint_path, + input_img, + input_shape, + opset_version=11, + show=False, + output_file='tmp.onnx', + verify=False, + normalize_cfg=None, + dataset='coco', + test_img=None, + do_simplify=False): + + input_config = { + 'input_shape': input_shape, + 'input_path': input_img, + 'normalize_cfg': normalize_cfg + } + + # prepare original model and meta for verifying the onnx model + orig_model = build_model_from_cfg(config_path, checkpoint_path) + one_img, one_meta = preprocess_example_input(input_config) + model, tensor_data = generate_inputs_and_wrap_model( + config_path, checkpoint_path, input_config) + output_names = ['boxes'] + if model.with_bbox: + output_names.append('labels') + if model.with_mask: + output_names.append('masks') + + torch.onnx.export( + model, + tensor_data, + output_file, + input_names=['input'], + output_names=output_names, + export_params=True, + keep_initializers_as_inputs=True, + do_constant_folding=True, + verbose=show, + opset_version=opset_version) + + model.forward = orig_model.forward + + # simplify onnx model + if do_simplify: + from mmdet import digit_version + import mmcv + + min_required_version = '1.2.5' + assert digit_version(mmcv.__version__) >= digit_version( + min_required_version + ), f'Requires to install mmcv>={min_required_version}' + from mmcv.onnx.simplify import simplify + + input_dic = {'input': one_img.detach().cpu().numpy()} + _ = simplify(output_file, [input_dic], output_file) + print(f'Successfully exported ONNX model: {output_file}') + if verify: + from mmdet.core import get_classes, bbox2result + from mmdet.apis import show_result_pyplot + + ort_custom_op_path = '' + try: + from mmcv.ops import get_onnxruntime_op_path + ort_custom_op_path = get_onnxruntime_op_path() + except (ImportError, ModuleNotFoundError): + warnings.warn('If input model has custom op from mmcv, \ + you may have to build mmcv with ONNXRuntime from source.') + model.CLASSES = get_classes(dataset) + num_classes = len(model.CLASSES) + # check by onnx + onnx_model = onnx.load(output_file) + onnx.checker.check_model(onnx_model) + if test_img is not None: + input_config['input_path'] = test_img + one_img, one_meta = preprocess_example_input(input_config) + tensor_data = [one_img] + # check the numerical value + # get pytorch output + pytorch_results = model(tensor_data, [[one_meta]], return_loss=False) + pytorch_results = pytorch_results[0] + # get onnx output + input_all = [node.name for node in onnx_model.graph.input] + input_initializer = [ + node.name for node in onnx_model.graph.initializer + ] + net_feed_input = list(set(input_all) - set(input_initializer)) + assert (len(net_feed_input) == 1) + session_options = rt.SessionOptions() + # register custom op for onnxruntime + if osp.exists(ort_custom_op_path): + session_options.register_custom_ops_library(ort_custom_op_path) + sess = rt.InferenceSession(output_file, session_options) + onnx_outputs = sess.run(None, + {net_feed_input[0]: one_img.detach().numpy()}) + output_names = [_.name for _ in sess.get_outputs()] + output_shapes = [_.shape for _ in onnx_outputs] + print(f'onnxruntime output names: {output_names}, \ + output shapes: {output_shapes}') + nrof_out = len(onnx_outputs) + assert nrof_out > 0, 'Must have output' + with_mask = nrof_out == 3 + if nrof_out == 1: + onnx_results = onnx_outputs[0] + else: + det_bboxes, det_labels = onnx_outputs[:2] + onnx_results = bbox2result(det_bboxes, det_labels, num_classes) + if with_mask: + segm_results = onnx_outputs[2].squeeze(1) + cls_segms = [[] for _ in range(num_classes)] + for i in range(det_bboxes.shape[0]): + cls_segms[det_labels[i]].append(segm_results[i]) + onnx_results = (onnx_results, cls_segms) + # visualize predictions + + if show: + show_result_pyplot( + model, one_meta['show_img'], pytorch_results, title='Pytorch') + show_result_pyplot( + model, one_meta['show_img'], onnx_results, title='ONNX') + + # compare a part of result + + if with_mask: + compare_pairs = list(zip(onnx_results, pytorch_results)) + else: + compare_pairs = [(onnx_results, pytorch_results)] + for onnx_res, pytorch_res in compare_pairs: + for o_res, p_res in zip(onnx_res, pytorch_res): + np.testing.assert_allclose( + o_res, + p_res, + rtol=1e-03, + atol=1e-05, + ) + print('The numerical values are the same between Pytorch and ONNX') + + +def parse_args(): + parser = argparse.ArgumentParser( + description='Convert MMDetection models to ONNX') + parser.add_argument('config', help='test config file path') + parser.add_argument('checkpoint', help='checkpoint file') + parser.add_argument('--input-img', type=str, help='Images for input') + parser.add_argument('--show', action='store_true', help='show onnx graph') + parser.add_argument('--output-file', type=str, default='tmp.onnx') + parser.add_argument('--opset-version', type=int, default=11) + parser.add_argument( + '--test-img', type=str, default=None, help='Images for test') + parser.add_argument( + '--dataset', type=str, default='coco', help='Dataset name') + parser.add_argument( + '--verify', + action='store_true', + help='verify the onnx model output against pytorch output') + parser.add_argument( + '--simplify', + action='store_true', + help='Whether to simplify onnx model.') + parser.add_argument( + '--shape', + type=int, + nargs='+', + default=[800, 1216], + help='input image size') + parser.add_argument( + '--mean', + type=float, + nargs='+', + default=[123.675, 116.28, 103.53], + help='mean value used for preprocess input data') + parser.add_argument( + '--std', + type=float, + nargs='+', + default=[58.395, 57.12, 57.375], + help='variance value used for preprocess input data') + args = parser.parse_args() + return args + + +if __name__ == '__main__': + args = parse_args() + + assert args.opset_version == 11, 'MMDet only support opset 11 now' + + if not args.input_img: + args.input_img = osp.join( + osp.dirname(__file__), '../../tests/data/color.jpg') + + if len(args.shape) == 1: + input_shape = (1, 3, args.shape[0], args.shape[0]) + elif len(args.shape) == 2: + input_shape = (1, 3) + tuple(args.shape) + else: + raise ValueError('invalid input shape') + + assert len(args.mean) == 3 + assert len(args.std) == 3 + + normalize_cfg = {'mean': args.mean, 'std': args.std} + + # convert model to onnx file + pytorch2onnx( + args.config, + args.checkpoint, + args.input_img, + input_shape, + opset_version=args.opset_version, + show=args.show, + output_file=args.output_file, + verify=args.verify, + normalize_cfg=normalize_cfg, + dataset=args.dataset, + test_img=args.test_img, + do_simplify=args.simplify) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/dist_test.sh b/PyTorch/NLP/Conformer-main/mmdetection/tools/dist_test.sh new file mode 100644 index 00000000..3c74ec6e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/dist_test.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +CONFIG=$1 +CHECKPOINT=$2 +GPUS=$3 +PORT=${PORT:-29500} + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ +python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ + $(dirname "$0")/test.py $CONFIG $CHECKPOINT --launcher pytorch ${@:4} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/dist_train.sh b/PyTorch/NLP/Conformer-main/mmdetection/tools/dist_train.sh new file mode 100644 index 00000000..5b43fffb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/dist_train.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +CONFIG=$1 +GPUS=$2 +PORT=${PORT:-29500} + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ +python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ + $(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/misc/browse_dataset.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/misc/browse_dataset.py new file mode 100644 index 00000000..12964ce2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/misc/browse_dataset.py @@ -0,0 +1,80 @@ +import argparse +import os +from pathlib import Path + +import mmcv +from mmcv import Config + +from mmdet.core.utils import mask2ndarray +from mmdet.core.visualization import imshow_det_bboxes +from mmdet.datasets.builder import build_dataset + + +def parse_args(): + parser = argparse.ArgumentParser(description='Browse a dataset') + parser.add_argument('config', help='train config file path') + parser.add_argument( + '--skip-type', + type=str, + nargs='+', + default=['DefaultFormatBundle', 'Normalize', 'Collect'], + help='skip some useless pipeline') + parser.add_argument( + '--output-dir', + default=None, + type=str, + help='If there is no display interface, you can save it') + parser.add_argument('--not-show', default=False, action='store_true') + parser.add_argument( + '--show-interval', + type=float, + default=2, + help='the interval of show (s)') + args = parser.parse_args() + return args + + +def retrieve_data_cfg(config_path, skip_type): + cfg = Config.fromfile(config_path) + train_data_cfg = cfg.data.train + train_data_cfg['pipeline'] = [ + x for x in train_data_cfg.pipeline if x['type'] not in skip_type + ] + + return cfg + + +def main(): + args = parse_args() + cfg = retrieve_data_cfg(args.config, args.skip_type) + + dataset = build_dataset(cfg.data.train) + + progress_bar = mmcv.ProgressBar(len(dataset)) + + for item in dataset: + filename = os.path.join(args.output_dir, + Path(item['filename']).name + ) if args.output_dir is not None else None + + gt_masks = item.get('gt_masks', None) + if gt_masks is not None: + gt_masks = mask2ndarray(gt_masks) + + imshow_det_bboxes( + item['img'], + item['gt_bboxes'], + item['gt_labels'], + gt_masks, + class_names=dataset.CLASSES, + show=not args.not_show, + wait_time=args.show_interval, + out_file=filename, + bbox_color=(255, 102, 61), + text_color=(255, 102, 61)) + + progress_bar.update() + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/misc/print_config.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/misc/print_config.py new file mode 100644 index 00000000..2ba994fb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/misc/print_config.py @@ -0,0 +1,26 @@ +import argparse + +from mmcv import Config, DictAction + + +def parse_args(): + parser = argparse.ArgumentParser(description='Print the whole config') + parser.add_argument('config', help='config file path') + parser.add_argument( + '--options', nargs='+', action=DictAction, help='arguments in dict') + args = parser.parse_args() + + return args + + +def main(): + args = parse_args() + + cfg = Config.fromfile(args.config) + if args.options is not None: + cfg.merge_from_dict(args.options) + print(f'Config:\n{cfg.pretty_text}') + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/detectron2pytorch.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/detectron2pytorch.py new file mode 100644 index 00000000..961e6f57 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/detectron2pytorch.py @@ -0,0 +1,82 @@ +import argparse +from collections import OrderedDict + +import mmcv +import torch + +arch_settings = {50: (3, 4, 6, 3), 101: (3, 4, 23, 3)} + + +def convert_bn(blobs, state_dict, caffe_name, torch_name, converted_names): + # detectron replace bn with affine channel layer + state_dict[torch_name + '.bias'] = torch.from_numpy(blobs[caffe_name + + '_b']) + state_dict[torch_name + '.weight'] = torch.from_numpy(blobs[caffe_name + + '_s']) + bn_size = state_dict[torch_name + '.weight'].size() + state_dict[torch_name + '.running_mean'] = torch.zeros(bn_size) + state_dict[torch_name + '.running_var'] = torch.ones(bn_size) + converted_names.add(caffe_name + '_b') + converted_names.add(caffe_name + '_s') + + +def convert_conv_fc(blobs, state_dict, caffe_name, torch_name, + converted_names): + state_dict[torch_name + '.weight'] = torch.from_numpy(blobs[caffe_name + + '_w']) + converted_names.add(caffe_name + '_w') + if caffe_name + '_b' in blobs: + state_dict[torch_name + '.bias'] = torch.from_numpy(blobs[caffe_name + + '_b']) + converted_names.add(caffe_name + '_b') + + +def convert(src, dst, depth): + """Convert keys in detectron pretrained ResNet models to pytorch style.""" + # load arch_settings + if depth not in arch_settings: + raise ValueError('Only support ResNet-50 and ResNet-101 currently') + block_nums = arch_settings[depth] + # load caffe model + caffe_model = mmcv.load(src, encoding='latin1') + blobs = caffe_model['blobs'] if 'blobs' in caffe_model else caffe_model + # convert to pytorch style + state_dict = OrderedDict() + converted_names = set() + convert_conv_fc(blobs, state_dict, 'conv1', 'conv1', converted_names) + convert_bn(blobs, state_dict, 'res_conv1_bn', 'bn1', converted_names) + for i in range(1, len(block_nums) + 1): + for j in range(block_nums[i - 1]): + if j == 0: + convert_conv_fc(blobs, state_dict, f'res{i + 1}_{j}_branch1', + f'layer{i}.{j}.downsample.0', converted_names) + convert_bn(blobs, state_dict, f'res{i + 1}_{j}_branch1_bn', + f'layer{i}.{j}.downsample.1', converted_names) + for k, letter in enumerate(['a', 'b', 'c']): + convert_conv_fc(blobs, state_dict, + f'res{i + 1}_{j}_branch2{letter}', + f'layer{i}.{j}.conv{k+1}', converted_names) + convert_bn(blobs, state_dict, + f'res{i + 1}_{j}_branch2{letter}_bn', + f'layer{i}.{j}.bn{k + 1}', converted_names) + # check if all layers are converted + for key in blobs: + if key not in converted_names: + print(f'Not Convert: {key}') + # save checkpoint + checkpoint = dict() + checkpoint['state_dict'] = state_dict + torch.save(checkpoint, dst) + + +def main(): + parser = argparse.ArgumentParser(description='Convert model keys') + parser.add_argument('src', help='src detectron model path') + parser.add_argument('dst', help='save path') + parser.add_argument('depth', type=int, help='ResNet model depth') + args = parser.parse_args() + convert(args.src, args.dst, args.depth) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/publish_model.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/publish_model.py new file mode 100644 index 00000000..c20e7e38 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/publish_model.py @@ -0,0 +1,39 @@ +import argparse +import subprocess + +import torch + + +def parse_args(): + parser = argparse.ArgumentParser( + description='Process a checkpoint to be published') + parser.add_argument('in_file', help='input checkpoint filename') + parser.add_argument('out_file', help='output checkpoint filename') + args = parser.parse_args() + return args + + +def process_checkpoint(in_file, out_file): + checkpoint = torch.load(in_file, map_location='cpu') + # remove optimizer for smaller file size + if 'optimizer' in checkpoint: + del checkpoint['optimizer'] + # if it is necessary to remove some sensitive data in checkpoint['meta'], + # add the code here. + torch.save(checkpoint, out_file) + sha = subprocess.check_output(['sha256sum', out_file]).decode() + if out_file.endswith('.pth'): + out_file_name = out_file[:-4] + else: + out_file_name = out_file + final_file = out_file_name + f'-{sha[:8]}.pth' + subprocess.Popen(['mv', out_file, final_file]) + + +def main(): + args = parse_args() + process_checkpoint(args.in_file, args.out_file) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/regnet2mmdet.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/regnet2mmdet.py new file mode 100644 index 00000000..9f4e316d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/regnet2mmdet.py @@ -0,0 +1,89 @@ +import argparse +from collections import OrderedDict + +import torch + + +def convert_stem(model_key, model_weight, state_dict, converted_names): + new_key = model_key.replace('stem.conv', 'conv1') + new_key = new_key.replace('stem.bn', 'bn1') + state_dict[new_key] = model_weight + converted_names.add(model_key) + print(f'Convert {model_key} to {new_key}') + + +def convert_head(model_key, model_weight, state_dict, converted_names): + new_key = model_key.replace('head.fc', 'fc') + state_dict[new_key] = model_weight + converted_names.add(model_key) + print(f'Convert {model_key} to {new_key}') + + +def convert_reslayer(model_key, model_weight, state_dict, converted_names): + split_keys = model_key.split('.') + layer, block, module = split_keys[:3] + block_id = int(block[1:]) + layer_name = f'layer{int(layer[1:])}' + block_name = f'{block_id - 1}' + + if block_id == 1 and module == 'bn': + new_key = f'{layer_name}.{block_name}.downsample.1.{split_keys[-1]}' + elif block_id == 1 and module == 'proj': + new_key = f'{layer_name}.{block_name}.downsample.0.{split_keys[-1]}' + elif module == 'f': + if split_keys[3] == 'a_bn': + module_name = 'bn1' + elif split_keys[3] == 'b_bn': + module_name = 'bn2' + elif split_keys[3] == 'c_bn': + module_name = 'bn3' + elif split_keys[3] == 'a': + module_name = 'conv1' + elif split_keys[3] == 'b': + module_name = 'conv2' + elif split_keys[3] == 'c': + module_name = 'conv3' + new_key = f'{layer_name}.{block_name}.{module_name}.{split_keys[-1]}' + else: + raise ValueError(f'Unsupported conversion of key {model_key}') + print(f'Convert {model_key} to {new_key}') + state_dict[new_key] = model_weight + converted_names.add(model_key) + + +def convert(src, dst): + """Convert keys in pycls pretrained RegNet models to mmdet style.""" + # load caffe model + regnet_model = torch.load(src) + blobs = regnet_model['model_state'] + # convert to pytorch style + state_dict = OrderedDict() + converted_names = set() + for key, weight in blobs.items(): + if 'stem' in key: + convert_stem(key, weight, state_dict, converted_names) + elif 'head' in key: + convert_head(key, weight, state_dict, converted_names) + elif key.startswith('s'): + convert_reslayer(key, weight, state_dict, converted_names) + + # check if all layers are converted + for key in blobs: + if key not in converted_names: + print(f'not converted: {key}') + # save checkpoint + checkpoint = dict() + checkpoint['state_dict'] = state_dict + torch.save(checkpoint, dst) + + +def main(): + parser = argparse.ArgumentParser(description='Convert model keys') + parser.add_argument('src', help='src detectron model path') + parser.add_argument('dst', help='save path') + args = parser.parse_args() + convert(args.src, args.dst) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/upgrade_model_version.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/upgrade_model_version.py new file mode 100644 index 00000000..a8e15d4b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/model_converters/upgrade_model_version.py @@ -0,0 +1,209 @@ +import argparse +import re +import tempfile +from collections import OrderedDict + +import torch +from mmcv import Config + + +def is_head(key): + valid_head_list = [ + 'bbox_head', 'mask_head', 'semantic_head', 'grid_head', 'mask_iou_head' + ] + + return any(key.startswith(h) for h in valid_head_list) + + +def parse_config(config_strings): + temp_file = tempfile.NamedTemporaryFile() + config_path = f'{temp_file.name}.py' + with open(config_path, 'w') as f: + f.write(config_strings) + + config = Config.fromfile(config_path) + is_two_stage = True + is_ssd = False + is_retina = False + reg_cls_agnostic = False + if 'rpn_head' not in config.model: + is_two_stage = False + # check whether it is SSD + if config.model.bbox_head.type == 'SSDHead': + is_ssd = True + elif config.model.bbox_head.type == 'RetinaHead': + is_retina = True + elif isinstance(config.model['bbox_head'], list): + reg_cls_agnostic = True + elif 'reg_class_agnostic' in config.model.bbox_head: + reg_cls_agnostic = config.model.bbox_head \ + .reg_class_agnostic + temp_file.close() + return is_two_stage, is_ssd, is_retina, reg_cls_agnostic + + +def reorder_cls_channel(val, num_classes=81): + # bias + if val.dim() == 1: + new_val = torch.cat((val[1:], val[:1]), dim=0) + # weight + else: + out_channels, in_channels = val.shape[:2] + # conv_cls for softmax output + if out_channels != num_classes and out_channels % num_classes == 0: + new_val = val.reshape(-1, num_classes, in_channels, *val.shape[2:]) + new_val = torch.cat((new_val[:, 1:], new_val[:, :1]), dim=1) + new_val = new_val.reshape(val.size()) + # fc_cls + elif out_channels == num_classes: + new_val = torch.cat((val[1:], val[:1]), dim=0) + # agnostic | retina_cls | rpn_cls + else: + new_val = val + + return new_val + + +def truncate_cls_channel(val, num_classes=81): + + # bias + if val.dim() == 1: + if val.size(0) % num_classes == 0: + new_val = val[:num_classes - 1] + else: + new_val = val + # weight + else: + out_channels, in_channels = val.shape[:2] + # conv_logits + if out_channels % num_classes == 0: + new_val = val.reshape(num_classes, in_channels, *val.shape[2:])[1:] + new_val = new_val.reshape(-1, *val.shape[1:]) + # agnostic + else: + new_val = val + + return new_val + + +def truncate_reg_channel(val, num_classes=81): + # bias + if val.dim() == 1: + # fc_reg | rpn_reg + if val.size(0) % num_classes == 0: + new_val = val.reshape(num_classes, -1)[:num_classes - 1] + new_val = new_val.reshape(-1) + # agnostic + else: + new_val = val + # weight + else: + out_channels, in_channels = val.shape[:2] + # fc_reg | rpn_reg + if out_channels % num_classes == 0: + new_val = val.reshape(num_classes, -1, in_channels, + *val.shape[2:])[1:] + new_val = new_val.reshape(-1, *val.shape[1:]) + # agnostic + else: + new_val = val + + return new_val + + +def convert(in_file, out_file, num_classes): + """Convert keys in checkpoints. + + There can be some breaking changes during the development of mmdetection, + and this tool is used for upgrading checkpoints trained with old versions + to the latest one. + """ + checkpoint = torch.load(in_file) + in_state_dict = checkpoint.pop('state_dict') + out_state_dict = OrderedDict() + meta_info = checkpoint['meta'] + is_two_stage, is_ssd, is_retina, reg_cls_agnostic = parse_config( + meta_info['config']) + if meta_info['mmdet_version'] <= '0.5.3' and is_retina: + upgrade_retina = True + else: + upgrade_retina = False + + # MMDetection v2.5.0 unifies the class order in RPN + # if the model is trained in version=2.5.0 + if meta_info['mmdet_version'] < '2.5.0': + upgrade_rpn = True + else: + upgrade_rpn = False + + for key, val in in_state_dict.items(): + new_key = key + new_val = val + if is_two_stage and is_head(key): + new_key = 'roi_head.{}'.format(key) + + # classification + if upgrade_rpn: + m = re.search( + r'(conv_cls|retina_cls|rpn_cls|fc_cls|fcos_cls|' + r'fovea_cls).(weight|bias)', new_key) + else: + m = re.search( + r'(conv_cls|retina_cls|fc_cls|fcos_cls|' + r'fovea_cls).(weight|bias)', new_key) + if m is not None: + print(f'reorder cls channels of {new_key}') + new_val = reorder_cls_channel(val, num_classes) + + # regression + if upgrade_rpn: + m = re.search(r'(fc_reg).(weight|bias)', new_key) + else: + m = re.search(r'(fc_reg|rpn_reg).(weight|bias)', new_key) + if m is not None and not reg_cls_agnostic: + print(f'truncate regression channels of {new_key}') + new_val = truncate_reg_channel(val, num_classes) + + # mask head + m = re.search(r'(conv_logits).(weight|bias)', new_key) + if m is not None: + print(f'truncate mask prediction channels of {new_key}') + new_val = truncate_cls_channel(val, num_classes) + + m = re.search(r'(cls_convs|reg_convs).\d.(weight|bias)', key) + # Legacy issues in RetinaNet since V1.x + # Use ConvModule instead of nn.Conv2d in RetinaNet + # cls_convs.0.weight -> cls_convs.0.conv.weight + if m is not None and upgrade_retina: + param = m.groups()[1] + new_key = key.replace(param, f'conv.{param}') + out_state_dict[new_key] = val + print(f'rename the name of {key} to {new_key}') + continue + + m = re.search(r'(cls_convs).\d.(weight|bias)', key) + if m is not None and is_ssd: + print(f'reorder cls channels of {new_key}') + new_val = reorder_cls_channel(val, num_classes) + + out_state_dict[new_key] = new_val + checkpoint['state_dict'] = out_state_dict + torch.save(checkpoint, out_file) + + +def main(): + parser = argparse.ArgumentParser(description='Upgrade model version') + parser.add_argument('in_file', help='input checkpoint file') + parser.add_argument('out_file', help='output checkpoint file') + parser.add_argument( + '--num-classes', + type=int, + default=81, + help='number of classes of the original model') + args = parser.parse_args() + convert(args.in_file, args.out_file, args.num_classes) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_test.sh b/PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_test.sh new file mode 100644 index 00000000..6dd67e57 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_test.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -x + +PARTITION=$1 +JOB_NAME=$2 +CONFIG=$3 +CHECKPOINT=$4 +GPUS=${GPUS:-8} +GPUS_PER_NODE=${GPUS_PER_NODE:-8} +CPUS_PER_TASK=${CPUS_PER_TASK:-5} +PY_ARGS=${@:5} +SRUN_ARGS=${SRUN_ARGS:-""} + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ +srun -p ${PARTITION} \ + --job-name=${JOB_NAME} \ + --gres=gpu:${GPUS_PER_NODE} \ + --ntasks=${GPUS} \ + --ntasks-per-node=${GPUS_PER_NODE} \ + --cpus-per-task=${CPUS_PER_TASK} \ + --kill-on-bad-exit=1 \ + ${SRUN_ARGS} \ + python -u tools/test.py ${CONFIG} ${CHECKPOINT} --launcher="slurm" ${PY_ARGS} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_train.sh b/PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_train.sh new file mode 100644 index 00000000..b3feb3d9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/slurm_train.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -x + +PARTITION=$1 +JOB_NAME=$2 +CONFIG=$3 +WORK_DIR=$4 +GPUS=${GPUS:-8} +GPUS_PER_NODE=${GPUS_PER_NODE:-8} +CPUS_PER_TASK=${CPUS_PER_TASK:-5} +SRUN_ARGS=${SRUN_ARGS:-""} +PY_ARGS=${@:5} + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ +srun -p ${PARTITION} \ + --job-name=${JOB_NAME} \ + --gres=gpu:${GPUS_PER_NODE} \ + --ntasks=${GPUS} \ + --ntasks-per-node=${GPUS_PER_NODE} \ + --cpus-per-task=${CPUS_PER_TASK} \ + --kill-on-bad-exit=1 \ + ${SRUN_ARGS} \ + python -u tools/train.py ${CONFIG} --work-dir=${WORK_DIR} --launcher="slurm" ${PY_ARGS} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/test.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/test.py new file mode 100644 index 00000000..84e05594 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/test.py @@ -0,0 +1,220 @@ +import argparse +import os +import warnings + +import mmcv +import torch +from mmcv import Config, DictAction +from mmcv.cnn import fuse_conv_bn +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import (get_dist_info, init_dist, load_checkpoint, + wrap_fp16_model) + +from mmdet.apis import multi_gpu_test, single_gpu_test +from mmdet.datasets import (build_dataloader, build_dataset, + replace_ImageToTensor) +from mmdet.models import build_detector + + +def parse_args(): + parser = argparse.ArgumentParser( + description='MMDet test (and eval) a model') + parser.add_argument('config', help='test config file path') + parser.add_argument('checkpoint', help='checkpoint file') + parser.add_argument('--out', help='output result file in pickle format') + parser.add_argument( + '--fuse-conv-bn', + action='store_true', + help='Whether to fuse conv and bn, this will slightly increase' + 'the inference speed') + parser.add_argument( + '--format-only', + action='store_true', + help='Format the output results without perform evaluation. It is' + 'useful when you want to format the result to a specific format and ' + 'submit it to the test server') + parser.add_argument( + '--eval', + type=str, + nargs='+', + help='evaluation metrics, which depends on the dataset, e.g., "bbox",' + ' "segm", "proposal" for COCO, and "mAP", "recall" for PASCAL VOC') + parser.add_argument('--show', action='store_true', help='show results') + parser.add_argument( + '--show-dir', help='directory where painted images will be saved') + parser.add_argument( + '--show-score-thr', + type=float, + default=0.3, + help='score threshold (default: 0.3)') + parser.add_argument( + '--gpu-collect', + action='store_true', + help='whether to use gpu to collect results.') + parser.add_argument( + '--tmpdir', + help='tmp directory used for collecting results from multiple ' + 'workers, available when gpu-collect is not specified') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. If the value to ' + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + 'Note that the quotation marks are necessary and that no white space ' + 'is allowed.') + parser.add_argument( + '--options', + nargs='+', + action=DictAction, + help='custom options for evaluation, the key-value pair in xxx=yyy ' + 'format will be kwargs for dataset.evaluate() function (deprecate), ' + 'change to --eval-options instead.') + parser.add_argument( + '--eval-options', + nargs='+', + action=DictAction, + help='custom options for evaluation, the key-value pair in xxx=yyy ' + 'format will be kwargs for dataset.evaluate() function') + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + + if args.options and args.eval_options: + raise ValueError( + '--options and --eval-options cannot be both ' + 'specified, --options is deprecated in favor of --eval-options') + if args.options: + warnings.warn('--options is deprecated in favor of --eval-options') + args.eval_options = args.options + return args + + +def main(): + args = parse_args() + + assert args.out or args.eval or args.format_only or args.show \ + or args.show_dir, \ + ('Please specify at least one operation (save/eval/format/show the ' + 'results / save the results) with the argument "--out", "--eval"' + ', "--format-only", "--show" or "--show-dir"') + + if args.eval and args.format_only: + raise ValueError('--eval and --format_only cannot be both specified') + + if args.out is not None and not args.out.endswith(('.pkl', '.pickle')): + raise ValueError('The output file must be a pkl file.') + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + cfg.model.pretrained = None + if cfg.model.get('neck'): + if isinstance(cfg.model.neck, list): + for neck_cfg in cfg.model.neck: + if neck_cfg.get('rfp_backbone'): + if neck_cfg.rfp_backbone.get('pretrained'): + neck_cfg.rfp_backbone.pretrained = None + elif cfg.model.neck.get('rfp_backbone'): + if cfg.model.neck.rfp_backbone.get('pretrained'): + cfg.model.neck.rfp_backbone.pretrained = None + + # in case the test dataset is concatenated + samples_per_gpu = 1 + if isinstance(cfg.data.test, dict): + cfg.data.test.test_mode = True + samples_per_gpu = cfg.data.test.pop('samples_per_gpu', 1) + if samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.test.pipeline = replace_ImageToTensor( + cfg.data.test.pipeline) + elif isinstance(cfg.data.test, list): + for ds_cfg in cfg.data.test: + ds_cfg.test_mode = True + samples_per_gpu = max( + [ds_cfg.pop('samples_per_gpu', 1) for ds_cfg in cfg.data.test]) + if samples_per_gpu > 1: + for ds_cfg in cfg.data.test: + ds_cfg.pipeline = replace_ImageToTensor(ds_cfg.pipeline) + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + + # build the dataloader + dataset = build_dataset(cfg.data.test) + data_loader = build_dataloader( + dataset, + samples_per_gpu=samples_per_gpu, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False) + + # build the model and load checkpoint + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg')) + fp16_cfg = cfg.get('fp16', None) + if fp16_cfg is not None: + wrap_fp16_model(model) + checkpoint = load_checkpoint(model, args.checkpoint, map_location='cpu') + if args.fuse_conv_bn: + model = fuse_conv_bn(model) + # old versions did not save class info in checkpoints, this walkaround is + # for backward compatibility + if 'meta' in checkpoint and 'CLASSES' in checkpoint['meta']: + model.CLASSES = checkpoint['meta']['CLASSES'] + else: + model.CLASSES = dataset.CLASSES + + if not distributed: + model = MMDataParallel(model, device_ids=[0]) + outputs = single_gpu_test(model, data_loader, args.show, args.show_dir, + args.show_score_thr) + else: + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False) + outputs = multi_gpu_test(model, data_loader, args.tmpdir, + args.gpu_collect) + + rank, _ = get_dist_info() + if rank == 0: + if args.out: + print(f'\nwriting results to {args.out}') + mmcv.dump(outputs, args.out) + kwargs = {} if args.eval_options is None else args.eval_options + if args.format_only: + dataset.format_results(outputs, **kwargs) + if args.eval: + eval_kwargs = cfg.get('evaluation', {}).copy() + # hard-code way to remove EvalHook args + for key in [ + 'interval', 'tmpdir', 'start', 'gpu_collect', 'save_best', + 'rule' + ]: + eval_kwargs.pop(key, None) + eval_kwargs.update(dict(metric=args.eval, **kwargs)) + print(dataset.evaluate(outputs, **eval_kwargs)) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/tools/train.py b/PyTorch/NLP/Conformer-main/mmdetection/tools/train.py new file mode 100644 index 00000000..1f355f3b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/tools/train.py @@ -0,0 +1,187 @@ +import argparse +import copy +import os +import os.path as osp +import time +import warnings + +import mmcv +import torch +from mmcv import Config, DictAction +from mmcv.runner import get_dist_info, init_dist +from mmcv.utils import get_git_hash + +from mmdet import __version__ +from mmdet.apis import set_random_seed, train_detector +from mmdet.datasets import build_dataset +from mmdet.models import build_detector +from mmdet.utils import collect_env, get_root_logger + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train a detector') + parser.add_argument('config', help='train config file path') + parser.add_argument('--work-dir', help='the dir to save logs and models') + parser.add_argument( + '--resume-from', help='the checkpoint file to resume from') + parser.add_argument( + '--no-validate', + action='store_true', + help='whether not to evaluate the checkpoint during training') + group_gpus = parser.add_mutually_exclusive_group() + group_gpus.add_argument( + '--gpus', + type=int, + help='number of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-ids', + type=int, + nargs='+', + help='ids of gpus to use ' + '(only applicable to non-distributed training)') + parser.add_argument('--seed', type=int, default=None, help='random seed') + parser.add_argument( + '--deterministic', + action='store_true', + help='whether to set deterministic options for CUDNN backend.') + parser.add_argument( + '--options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file (deprecate), ' + 'change to --cfg-options instead.') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. If the value to ' + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + 'Note that the quotation marks are necessary and that no white space ' + 'is allowed.') + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + + if args.options and args.cfg_options: + raise ValueError( + '--options and --cfg-options cannot be both ' + 'specified, --options is deprecated in favor of --cfg-options') + if args.options: + warnings.warn('--options is deprecated in favor of --cfg-options') + args.cfg_options = args.options + + return args + + +def main(): + args = parse_args() + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + + # work_dir is determined in this priority: CLI > segment in file > filename + if args.work_dir is not None: + # update configs according to CLI args if args.work_dir is not None + cfg.work_dir = args.work_dir + elif cfg.get('work_dir', None) is None: + # use config filename as default work_dir if cfg.work_dir is None + cfg.work_dir = osp.join('./work_dirs', + osp.splitext(osp.basename(args.config))[0]) + if args.resume_from is not None: + cfg.resume_from = args.resume_from + if args.gpu_ids is not None: + cfg.gpu_ids = args.gpu_ids + else: + cfg.gpu_ids = range(1) if args.gpus is None else range(args.gpus) + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + # re-set gpu_ids with distributed training mode + _, world_size = get_dist_info() + cfg.gpu_ids = range(world_size) + + # create work_dir + mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir)) + # dump config + cfg.dump(osp.join(cfg.work_dir, osp.basename(args.config))) + # init the logger before other steps + timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime()) + log_file = osp.join(cfg.work_dir, f'{timestamp}.log') + logger = get_root_logger(log_file=log_file, log_level=cfg.log_level) + + # init the meta dict to record some important information such as + # environment info and seed, which will be logged + meta = dict() + # log env info + env_info_dict = collect_env() + env_info = '\n'.join([(f'{k}: {v}') for k, v in env_info_dict.items()]) + dash_line = '-' * 60 + '\n' + logger.info('Environment info:\n' + dash_line + env_info + '\n' + + dash_line) + meta['env_info'] = env_info + meta['config'] = cfg.pretty_text + # log some basic info + logger.info(f'Distributed training: {distributed}') + logger.info(f'Config:\n{cfg.pretty_text}') + + # set random seeds + if args.seed is not None: + logger.info(f'Set random seed to {args.seed}, ' + f'deterministic: {args.deterministic}') + set_random_seed(args.seed, deterministic=args.deterministic) + cfg.seed = args.seed + meta['seed'] = args.seed + meta['exp_name'] = osp.basename(args.config) + + model = build_detector( + cfg.model, + train_cfg=cfg.get('train_cfg'), + test_cfg=cfg.get('test_cfg')) + + datasets = [build_dataset(cfg.data.train)] + if len(cfg.workflow) == 2: + val_dataset = copy.deepcopy(cfg.data.val) + val_dataset.pipeline = cfg.data.train.pipeline + datasets.append(build_dataset(val_dataset)) + if cfg.checkpoint_config is not None: + # save mmdet version, config file content and class names in + # checkpoints as meta data + cfg.checkpoint_config.meta = dict( + mmdet_version=__version__ + get_git_hash()[:7], + CLASSES=datasets[0].CLASSES) + # add an attribute for visualization convenience + model.CLASSES = datasets[0].CLASSES + train_detector( + model, + datasets, + cfg, + distributed=distributed, + validate=(not args.no_validate), + timestamp=timestamp, + meta=meta) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/models.py b/PyTorch/NLP/Conformer-main/models.py new file mode 100644 index 00000000..29050d7b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/models.py @@ -0,0 +1,94 @@ +import torch +import torch.nn as nn +from functools import partial + +# from timm.models.vision_transformer import VisionTransformer, _cfg + +from vision_transformer import VisionTransformer, _cfg +from conformer import Conformer +from timm.models.registry import register_model + + +@register_model +def deit_tiny_patch16_224(pretrained=False, **kwargs): + model = VisionTransformer( + patch_size=16, embed_dim=192, depth=12, num_heads=3, mlp_ratio=4, qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), **kwargs) + model.default_cfg = _cfg() + if pretrained: + checkpoint = torch.hub.load_state_dict_from_url( + url="https://dl.fbaipublicfiles.com/deit/deit_tiny_patch16_224-a1311bcf.pth", + map_location="cpu", check_hash=True + ) + model.load_state_dict(checkpoint["model"]) + return model + +@register_model +def deit_small_patch16_224(pretrained=False, **kwargs): + model = VisionTransformer( + patch_size=16, embed_dim=384, depth=12, num_heads=6, mlp_ratio=4, qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), **kwargs) + model.default_cfg = _cfg() + if pretrained: + checkpoint = torch.hub.load_state_dict_from_url( + url="https://dl.fbaipublicfiles.com/deit/deit_small_patch16_224-cd65a155.pth", + map_location="cpu", check_hash=True + ) + model.load_state_dict(checkpoint["model"]) + return model + +@register_model +def deit_med_patch16_224(pretrained=False, **kwargs): + model = VisionTransformer( + patch_size=16, embed_dim=576, depth=12, num_heads=9, mlp_ratio=4, qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), **kwargs) + model.default_cfg = _cfg() + if pretrained: + raise NotImplementedError + return model + +@register_model +def deit_base_patch16_224(pretrained=False, **kwargs): + model = VisionTransformer( + patch_size=16, embed_dim=768, depth=12, num_heads=12, mlp_ratio=4, qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), **kwargs) + model.default_cfg = _cfg() + if pretrained: + checkpoint = torch.hub.load_state_dict_from_url( + url="https://dl.fbaipublicfiles.com/deit/deit_base_patch16_224-b5f2ef4d.pth", + map_location="cpu", check_hash=True + ) + model.load_state_dict(checkpoint["model"]) + return model + +@register_model +def Conformer_tiny_patch16(pretrained=False, **kwargs): + model = Conformer(patch_size=16, channel_ratio=1, embed_dim=384, depth=12, + num_heads=6, mlp_ratio=4, qkv_bias=True, **kwargs) + if pretrained: + raise NotImplementedError + return model + +@register_model +def Conformer_small_patch16(pretrained=False, **kwargs): + model = Conformer(patch_size=16, channel_ratio=4, embed_dim=384, depth=12, + num_heads=6, mlp_ratio=4, qkv_bias=True, **kwargs) + if pretrained: + raise NotImplementedError + return model + +@register_model +def Conformer_small_patch32(pretrained=False, **kwargs): + model = Conformer(patch_size=32, channel_ratio=4, embed_dim=384, depth=12, + num_heads=6, mlp_ratio=4, qkv_bias=True, **kwargs) + if pretrained: + raise NotImplementedError + return model + +@register_model +def Conformer_base_patch16(pretrained=False, **kwargs): + model = Conformer(patch_size=16, channel_ratio=6, embed_dim=576, depth=12, + num_heads=9, mlp_ratio=4, qkv_bias=True, **kwargs) + if pretrained: + raise NotImplementedError + return model \ No newline at end of file diff --git a/PyTorch/NLP/Conformer-main/run.sh b/PyTorch/NLP/Conformer-main/run.sh new file mode 100644 index 00000000..fa810c1d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/run.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# Train +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 +OUTPUT='./output/Conformer_small_patch16_batch_1024_lr1e-3_300epochs' + +python -m torch.distributed.launch --master_port 50132 --nproc_per_node=8 --use_env main.py \ + --model Conformer_small_patch16 \ + --data-set IMNET \ + --batch-size 128 \ + --lr 0.001 \ + --num_workers 4 \ + --data-path /data/user/Dataset/ImageNet_ILSVRC2012/ \ + --output_dir ${OUTPUT} \ + --epochs 300 + +# Inference +#CUDA_VISIBLE_DEVICES=0, python main.py --model Conformer_tiny_patch16 --eval --batch-size 64 \ +# --input-size 224 \ +# --data-set IMNET \ +# --num_workers 4 \ +# --data-path ../ImageNet_ILSVRC2012/ \ +# --epochs 100 \ +# --resume ../Conformer_tiny_patch16.pth + + diff --git a/PyTorch/NLP/Conformer-main/run1.sh b/PyTorch/NLP/Conformer-main/run1.sh new file mode 100644 index 00000000..8b3b7cdd --- /dev/null +++ b/PyTorch/NLP/Conformer-main/run1.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +export HSA_FORCE_FINE_GRAIN_PCIE=1 +export MIOPEN_FIND_MODE=3 + +export MIOPEN_ENABLE_LOGGING_CMD=1 +export ROCBLAS_LAYER=3 + + +module unload compiler/rocm/2.9 +echo "MIOPEN_FIND_MODE=$MIOPEN_FIND_MODE" +lrank=$OMPI_COMM_WORLD_LOCAL_RANK +comm_rank=$OMPI_COMM_WORLD_RANK +comm_size=$OMPI_COMM_WORLD_SIZE + +#NCCL_DEBUG=INFO + +export HIP_VISIBLE_DEVICES=0 +python -m torch.distributed.launch --master_port 50130 --nnodes 1 --nproc_per_node=1 --use_env main.py \ + --model Conformer_small_patch16 \ + --data-set IMNET \ + --batch-size 64 \ + --lr 0.001 \ + --num_workers 1 \ + --data-path /public/software/apps/DeepLearning/Data/ImageNet-pytorch \ + --output_dir /public/home/hepj/SothisAI/Conformer-main/out_dir_1 \ + --epochs 1 + diff --git a/PyTorch/NLP/Conformer-main/run4.sh b/PyTorch/NLP/Conformer-main/run4.sh new file mode 100644 index 00000000..8ac5f999 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/run4.sh @@ -0,0 +1,10 @@ +export HIP_VISIBLE_DEVICES=0,1,2,3 +python -m torch.distributed.launch --master_port 50130 --nnodes 1 --nproc_per_node=4 --use_env main.py \ + --model Conformer_small_patch16 \ + --data-set IMNET \ + --batch-size 64 \ + --lr 0.001 \ + --num_workers 4 \ + --data-path /public/software/apps/DeepLearning/Data/ImageNet-pytorch \ + --output_dir /public/home/hepj/SothisAI/Conformer-main/test_dir \ + --epochs 1 diff --git a/PyTorch/NLP/Conformer-main/samplers.py b/PyTorch/NLP/Conformer-main/samplers.py new file mode 100644 index 00000000..f1234ed6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/samplers.py @@ -0,0 +1,57 @@ +import torch +import torch.distributed as dist +import math + + +class RASampler(torch.utils.data.Sampler): + """Sampler that restricts data loading to a subset of the dataset for distributed, + with repeated augmentation. + It ensures that different each augmented version of a sample will be visible to a + different process (GPU) + Heavily based on torch.utils.data.DistributedSampler + """ + + def __init__(self, dataset, num_replicas=None, rank=None, shuffle=True): + if num_replicas is None: + if not dist.is_available(): + raise RuntimeError("Requires distributed package to be available") + num_replicas = dist.get_world_size() + if rank is None: + if not dist.is_available(): + raise RuntimeError("Requires distributed package to be available") + rank = dist.get_rank() + self.dataset = dataset + self.num_replicas = num_replicas + self.rank = rank + self.epoch = 0 + self.num_samples = int(math.ceil(len(self.dataset) * 3.0 / self.num_replicas)) + self.total_size = self.num_samples * self.num_replicas + # self.num_selected_samples = int(math.ceil(len(self.dataset) / self.num_replicas)) + self.num_selected_samples = int(math.floor(len(self.dataset) // 256 * 256 / self.num_replicas)) + self.shuffle = shuffle + + def __iter__(self): + # deterministically shuffle based on epoch + g = torch.Generator() + g.manual_seed(self.epoch) + if self.shuffle: + indices = torch.randperm(len(self.dataset), generator=g).tolist() + else: + indices = list(range(len(self.dataset))) + + # add extra samples to make it evenly divisible + indices = [ele for ele in indices for i in range(3)] + indices += indices[:(self.total_size - len(indices))] + assert len(indices) == self.total_size + + # subsample + indices = indices[self.rank:self.total_size:self.num_replicas] + assert len(indices) == self.num_samples + + return iter(indices[:self.num_selected_samples]) + + def __len__(self): + return self.num_selected_samples + + def set_epoch(self, epoch): + self.epoch = epoch diff --git a/PyTorch/NLP/Conformer-main/utils.py b/PyTorch/NLP/Conformer-main/utils.py new file mode 100644 index 00000000..b9a83dc7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/utils.py @@ -0,0 +1,236 @@ +""" +Misc functions, including distributed helpers. + +Mostly copy-paste from torchvision references. +""" +import io +import os +import time +from collections import defaultdict, deque +import datetime + +import torch +import torch.distributed as dist + + +class SmoothedValue(object): + """Track a series of values and provide access to smoothed values over a + window or the global series average. + """ + + def __init__(self, window_size=20, fmt=None): + if fmt is None: + fmt = "{median:.4f} ({global_avg:.4f})" + self.deque = deque(maxlen=window_size) + self.total = 0.0 + self.count = 0 + self.fmt = fmt + + def update(self, value, n=1): + self.deque.append(value) + self.count += n + self.total += value * n + + def synchronize_between_processes(self): + """ + Warning: does not synchronize the deque! + """ + if not is_dist_avail_and_initialized(): + return + t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda') + dist.barrier() + dist.all_reduce(t) + t = t.tolist() + self.count = int(t[0]) + self.total = t[1] + + @property + def median(self): + d = torch.tensor(list(self.deque)) + return d.median().item() + + @property + def avg(self): + d = torch.tensor(list(self.deque), dtype=torch.float32) + return d.mean().item() + + @property + def global_avg(self): + return self.total / self.count + + @property + def max(self): + return max(self.deque) + + @property + def value(self): + return self.deque[-1] + + def __str__(self): + return self.fmt.format( + median=self.median, + avg=self.avg, + global_avg=self.global_avg, + max=self.max, + value=self.value) + + +class MetricLogger(object): + def __init__(self, delimiter="\t"): + self.meters = defaultdict(SmoothedValue) + self.delimiter = delimiter + + def update(self, **kwargs): + for k, v in kwargs.items(): + if isinstance(v, torch.Tensor): + v = v.item() + assert isinstance(v, (float, int)) + self.meters[k].update(v) + + def __getattr__(self, attr): + if attr in self.meters: + return self.meters[attr] + if attr in self.__dict__: + return self.__dict__[attr] + raise AttributeError("'{}' object has no attribute '{}'".format( + type(self).__name__, attr)) + + def __str__(self): + loss_str = [] + for name, meter in self.meters.items(): + loss_str.append( + "{}: {}".format(name, str(meter)) + ) + return self.delimiter.join(loss_str) + + def synchronize_between_processes(self): + for meter in self.meters.values(): + meter.synchronize_between_processes() + + def add_meter(self, name, meter): + self.meters[name] = meter + + def log_every(self, iterable, print_freq, header=None): + i = 0 + if not header: + header = '' + start_time = time.time() + end = time.time() + iter_time = SmoothedValue(fmt='{avg:.4f}') + data_time = SmoothedValue(fmt='{avg:.4f}') + space_fmt = ':' + str(len(str(len(iterable)))) + 'd' + log_msg = [ + header, + '[{0' + space_fmt + '}/{1}]', + 'eta: {eta}', + '{meters}', + 'time: {time}', + 'data: {data}' + ] + if torch.cuda.is_available(): + log_msg.append('max mem: {memory:.0f}') + log_msg = self.delimiter.join(log_msg) + MB = 1024.0 * 1024.0 + for obj in iterable: + data_time.update(time.time() - end) + yield obj + iter_time.update(time.time() - end) + if i % print_freq == 0 or i == len(iterable) - 1: + eta_seconds = iter_time.global_avg * (len(iterable) - i) + eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) + if torch.cuda.is_available(): + print(log_msg.format( + i, len(iterable), eta=eta_string, + meters=str(self), + time=str(iter_time), data=str(data_time), + memory=torch.cuda.max_memory_allocated() / MB)) + else: + print(log_msg.format( + i, len(iterable), eta=eta_string, + meters=str(self), + time=str(iter_time), data=str(data_time))) + i += 1 + end = time.time() + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print('{} Total time: {} ({:.4f} s / it)'.format( + header, total_time_str, total_time / len(iterable))) + + +def _load_checkpoint_for_ema(model_ema, checkpoint): + """ + Workaround for ModelEma._load_checkpoint to accept an already-loaded object + """ + mem_file = io.BytesIO() + torch.save(checkpoint, mem_file) + mem_file.seek(0) + model_ema._load_checkpoint(mem_file) + + +def setup_for_distributed(is_master): + """ + This function disables printing when not in master process + """ + import builtins as __builtin__ + builtin_print = __builtin__.print + + def print(*args, **kwargs): + force = kwargs.pop('force', False) + if is_master or force: + builtin_print(*args, **kwargs) + + __builtin__.print = print + + +def is_dist_avail_and_initialized(): + if not dist.is_available(): + return False + if not dist.is_initialized(): + return False + return True + + +def get_world_size(): + if not is_dist_avail_and_initialized(): + return 1 + return dist.get_world_size() + + +def get_rank(): + if not is_dist_avail_and_initialized(): + return 0 + return dist.get_rank() + + +def is_main_process(): + return get_rank() == 0 + + +def save_on_master(*args, **kwargs): + if is_main_process(): + torch.save(*args, **kwargs) + + +def init_distributed_mode(args): + if 'RANK' in os.environ and 'WORLD_SIZE' in os.environ: + args.rank = int(os.environ["RANK"]) + args.world_size = int(os.environ['WORLD_SIZE']) + args.gpu = int(os.environ['LOCAL_RANK']) + elif 'SLURM_PROCID' in os.environ: + args.rank = int(os.environ['SLURM_PROCID']) + args.gpu = args.rank % torch.cuda.device_count() + else: + print('Not using distributed mode') + args.distributed = False + return + + args.distributed = True + + torch.cuda.set_device(args.gpu) + args.dist_backend = 'nccl' + print('| distributed init (rank {}): {}'.format( + args.rank, args.dist_url), flush=True) + torch.distributed.init_process_group(backend=args.dist_backend, init_method=args.dist_url, + world_size=args.world_size, rank=args.rank) + torch.distributed.barrier() + setup_for_distributed(args.rank == 0) diff --git a/PyTorch/NLP/Conformer-main/vision_transformer.py b/PyTorch/NLP/Conformer-main/vision_transformer.py new file mode 100644 index 00000000..d866836a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/vision_transformer.py @@ -0,0 +1,603 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from functools import partial + +from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD +from timm.models.helpers import load_pretrained +from timm.models.layers import DropPath, to_2tuple, trunc_normal_ +from timm.models.resnet import resnet26d, resnet50d, resnet26, resnet50 +from timm.models.registry import register_model + +import logging +_logger = logging.getLogger(__name__) + +from torchvision.ops import roi_align +import math +_DEFAULT_SCALE_CLAMP = math.log(100000.0 / 16) + +import pdb + +def _cfg(url='', **kwargs): + return { + 'url': url, + 'num_classes': 1000, 'input_size': (3, 224, 224), 'pool_size': None, + 'crop_pct': .9, 'interpolation': 'bicubic', + 'mean': IMAGENET_DEFAULT_MEAN, 'std': IMAGENET_DEFAULT_STD, + 'first_conv': 'patch_embed.proj', 'classifier': 'head', + **kwargs + } + + +default_cfgs = { + # patch models + 'vit_small_patch16_224': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/vit_small_p16_224-15ec54c9.pth', + ), + 'vit_base_patch16_224': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_p16_224-80ecf9dd.pth', + mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), + ), + 'vit_base_patch16_384': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_p16_384-83fb41ba.pth', + input_size=(3, 384, 384), mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=1.0), + 'vit_base_patch32_384': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_p32_384-830016f5.pth', + input_size=(3, 384, 384), mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=1.0), + 'vit_large_patch16_224': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_p16_224-4ee7a4dc.pth', + mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), + 'vit_large_patch16_384': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_p16_384-b3be5167.pth', + input_size=(3, 384, 384), mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=1.0), + 'vit_large_patch32_384': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_p32_384-9b920ba8.pth', + input_size=(3, 384, 384), mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=1.0), + + # patch models, imagenet21k (weights ported from official Google JAX impl) + 'vit_base_patch16_224_in21k': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_patch16_224_in21k-e5005f0a.pth', + num_classes=21843, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), + 'vit_base_patch32_224_in21k': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_patch32_224_in21k-8db57226.pth', + num_classes=21843, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), + 'vit_large_patch16_224_in21k': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_patch16_224_in21k-606da67d.pth', + num_classes=21843, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), + 'vit_large_patch32_224_in21k': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_patch32_224_in21k-9046d2e7.pth', + num_classes=21843, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), + 'vit_huge_patch14_224_in21k': _cfg( + url='', # FIXME I have weights for this but > 2GB limit for github release binaries + num_classes=21843, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)), + + # hybrid models (weights ported from official Google JAX impl) + 'vit_base_resnet50_224_in21k': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_resnet50_224_in21k-6f7c7740.pth', + num_classes=21843, mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=0.9, first_conv='patch_embed.backbone.stem.conv'), + 'vit_base_resnet50_384': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_base_resnet50_384-9fd3c705.pth', + input_size=(3, 384, 384), mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5), crop_pct=1.0, first_conv='patch_embed.backbone.stem.conv'), + + # hybrid models (my experiments) + 'vit_small_resnet26d_224': _cfg(), + 'vit_small_resnet50d_s3_224': _cfg(), + 'vit_base_resnet26d_224': _cfg(), + 'vit_base_resnet50d_224': _cfg(), +} + + +class Mlp(nn.Module): + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim // num_heads + # NOTE scale factor was wrong in my original version, can set manually to be compat with prev weights + self.scale = qk_scale or head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class Block(nn.Module): + + def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0., + drop_path=0., act_layer=nn.GELU, norm_layer=partial(nn.LayerNorm, eps=1e-6), vis=False): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention( + dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + def forward(self, x): + x = x + self.drop_path(self.attn(self.norm1(x))) + x = x + self.drop_path(self.mlp(self.norm2(x))) + return x + + +class PatchEmbed(nn.Module): + """ Image to Patch Embedding + """ + def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768): + super().__init__() + img_size = to_2tuple(img_size) + patch_size = to_2tuple(patch_size) + num_patches = (img_size[1] // patch_size[1]) * (img_size[0] // patch_size[0]) + self.img_size = img_size + self.patch_size = patch_size + self.num_patches = num_patches + + self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size) + + def forward(self, x): + B, C, H, W = x.shape + # FIXME look at relaxing size constraints + # assert H == self.img_size[0] and W == self.img_size[1], \ + # f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})." + x = self.proj(x).flatten(2).transpose(1, 2) + return x + + +class HybridEmbed(nn.Module): + """ CNN Feature Map Embedding + Extract feature map from CNN, flatten, project to embedding dim. + """ + def __init__(self, backbone, img_size=224, feature_size=None, in_chans=3, embed_dim=768): + super().__init__() + assert isinstance(backbone, nn.Module) + img_size = to_2tuple(img_size) + self.img_size = img_size + self.backbone = backbone + if feature_size is None: + with torch.no_grad(): + # FIXME this is hacky, but most reliable way of determining the exact dim of the output feature + # map for all networks, the feature metadata has reliable channel and stride info, but using + # stride to calc feature dim requires info about padding of each stage that isn't captured. + training = backbone.training + if training: + backbone.eval() + o = self.backbone(torch.zeros(1, in_chans, img_size[0], img_size[1])) + if isinstance(o, (list, tuple)): + o = o[-1] # last feature if backbone outputs list/tuple of features + feature_size = o.shape[-2:] + feature_dim = o.shape[1] + backbone.train(training) + else: + feature_size = to_2tuple(feature_size) + if hasattr(self.backbone, 'feature_info'): + feature_dim = self.backbone.feature_info.channels()[-1] + else: + feature_dim = self.backbone.num_features + self.num_patches = feature_size[0] * feature_size[1] + self.proj = nn.Conv2d(feature_dim, embed_dim, 1) + + def forward(self, x): + x = self.backbone(x) + if isinstance(x, (list, tuple)): + x = x[-1] # last feature if backbone outputs list/tuple of features + x = self.proj(x).flatten(2).transpose(1, 2) + return x + + +class VisionTransformer(nn.Module): + """ Vision Transformer with support for patch or hybrid CNN input stage + """ + def __init__(self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, embed_dim=768, depth=12, + num_heads=12, mlp_ratio=4., qkv_bias=True, qk_scale=None, drop_rate=0., attn_drop_rate=0., + drop_path_rate=0., hybrid_backbone=None, norm_layer=nn.LayerNorm): + super().__init__() + self.num_classes = num_classes + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) + + if hybrid_backbone is not None: + self.patch_embed = HybridEmbed( + hybrid_backbone, img_size=img_size, in_chans=in_chans, embed_dim=embed_dim) + else: + self.patch_embed = PatchEmbed( + img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim) + num_patches = self.patch_embed.num_patches + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) + self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim)) + self.pos_drop = nn.Dropout(p=drop_rate) + + self.dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + self.blocks = nn.ModuleList([ + Block( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=self.dpr[i], norm_layer=norm_layer, + ) + for i in range(depth)]) + self.norm = norm_layer(embed_dim) + + # NOTE as per official impl, we could have a pre-logits representation dense layer + tanh here + #self.repr = nn.Linear(embed_dim, representation_size) + #self.repr_act = nn.Tanh() + + # Classifier head + self.head = nn.Linear(embed_dim, num_classes) if num_classes > 0 else nn.Identity() + + trunc_normal_(self.pos_embed, std=.02) + trunc_normal_(self.cls_token, std=.02) + self.apply(self._init_weights) + + def _init_weights(self, m): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if isinstance(m, nn.Linear) and m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.LayerNorm): + nn.init.constant_(m.bias, 0) + nn.init.constant_(m.weight, 1.0) + + @torch.jit.ignore + def no_weight_decay(self): + return {'pos_embed', 'cls_token'} + + def get_classifier(self): + return self.head + + def reset_classifier(self, num_classes, global_pool=''): + self.num_classes = num_classes + self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() + + def forward_features(self, x): + B = x.shape[0] + x = self.patch_embed(x) + + cls_tokens = self.cls_token.expand(B, -1, -1) # stole cls_tokens impl from Phil Wang, thanks + x = torch.cat((cls_tokens, x), dim=1) + x = x + self.pos_embed + x = self.pos_drop(x) + + for blk in self.blocks: + x = blk(x) + + x = self.norm(x) + return x[:, 0] + + def forward(self, x): + x = self.forward_features(x) + x = self.head(x) + return x + + +def resize_pos_embed(posemb, posemb_new): + # Rescale the grid of position embeddings when loading from state_dict. Adapted from + # https://github.com/google-research/vision_transformer/blob/00883dd691c63a6830751563748663526e811cee/vit_jax/checkpoint.py#L224 + _logger.info('Resized position embedding: %s to %s', posemb.shape, posemb_new.shape) + ntok_new = posemb_new.shape[1] + if True: + posemb_tok, posemb_grid = posemb[:, :1], posemb[0, 1:] + ntok_new -= 1 + else: + posemb_tok, posemb_grid = posemb[:, :0], posemb[0] + gs_old = int(math.sqrt(len(posemb_grid))) + gs_new = int(math.sqrt(ntok_new)) + _logger.info('Position embedding grid-size from %s to %s', gs_old, gs_new) + posemb_grid = posemb_grid.reshape(1, gs_old, gs_old, -1).permute(0, 3, 1, 2) + posemb_grid = F.interpolate(posemb_grid, size=(gs_new, gs_new), mode='bilinear') + posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, gs_new * gs_new, -1) + posemb = torch.cat([posemb_tok, posemb_grid], dim=1) + return posemb + + +def checkpoint_filter_fn(state_dict, model): + """ convert patch embedding weight from manual patchify + linear proj to conv""" + out_dict = {} + if 'model' in state_dict: + # For deit models + state_dict = state_dict['model'] + for k, v in state_dict.items(): + if 'patch_embed.proj.weight' in k and len(v.shape) < 4: + # For old models that I trained prior to conv based patchification + O, I, H, W = model.patch_embed.proj.weight.shape + v = v.reshape(O, -1, H, W) + elif k == 'pos_embed' and v.shape != model.pos_embed.shape: + # To resize pos embedding when using model at different size from pretrained weights + v = resize_pos_embed(v, model.pos_embed) + out_dict[k] = v + return out_dict + + +def _create_vision_transformer(variant, pretrained=False, distilled=False, **kwargs): + default_cfg = default_cfgs[variant] + default_num_classes = default_cfg['num_classes'] + default_img_size = default_cfg['input_size'][-1] + + num_classes = kwargs.pop('num_classes', default_num_classes) + img_size = kwargs.pop('img_size', default_img_size) + repr_size = kwargs.pop('representation_size', None) + if repr_size is not None and num_classes != default_num_classes: + # Remove representation layer if fine-tuning. This may not always be the desired action, + # but I feel better than doing nothing by default for fine-tuning. Perhaps a better interface? + _logger.warning("Removing representation layer for fine-tuning.") + repr_size = None + + # model_cls = DistilledVisionTransformer if distilled else VisionTransformer + model_cls = VisionTransformer + # model = model_cls(img_size=img_size, num_classes=num_classes, representation_size=repr_size, **kwargs) + model = model_cls(img_size=img_size, num_classes=num_classes, **kwargs) + model.default_cfg = default_cfg + + if pretrained: + load_pretrained( + model, num_classes=num_classes, in_chans=kwargs.get('in_chans', 3), + filter_fn=partial(checkpoint_filter_fn, model=model)) + return model + + +@register_model +def vit_small_patch16_224(pretrained=False, **kwargs): + """ My custom 'small' ViT model. Depth=8, heads=8= mlp_ratio=3.""" + model_kwargs = dict( + patch_size=16, embed_dim=768, depth=8, num_heads=8, mlp_ratio=3., + qkv_bias=False, norm_layer=nn.LayerNorm, **kwargs) + if pretrained: + # NOTE my scale was wrong for original weights, leaving this here until I have better ones for this model + model_kwargs.setdefault('qk_scale', 768 ** -0.5) + model = _create_vision_transformer('vit_small_patch16_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_patch16_224(pretrained=False, **kwargs): + """ ViT-Base (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=16, embed_dim=768, depth=12, num_heads=12, **kwargs) + model = _create_vision_transformer('vit_base_patch16_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_patch32_224(pretrained=False, **kwargs): + """ ViT-Base (ViT-B/32) from original paper (https://arxiv.org/abs/2010.11929). No pretrained weights. + """ + model_kwargs = dict(patch_size=32, embed_dim=768, depth=12, num_heads=12, **kwargs) + model = _create_vision_transformer('vit_base_patch32_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_patch16_384(pretrained=False, **kwargs): + """ ViT-Base model (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 384x384, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=16, embed_dim=768, depth=12, num_heads=12, **kwargs) + model = _create_vision_transformer('vit_base_patch16_384', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_patch32_384(pretrained=False, **kwargs): + """ ViT-Base model (ViT-B/32) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 384x384, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=32, embed_dim=768, depth=12, num_heads=12, **kwargs) + model = _create_vision_transformer('vit_base_patch32_384', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_large_patch16_224(pretrained=False, **kwargs): + """ ViT-Large model (ViT-L/32) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=16, embed_dim=1024, depth=24, num_heads=16, **kwargs) + model = _create_vision_transformer('vit_large_patch16_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_large_patch32_224(pretrained=False, **kwargs): + """ ViT-Large model (ViT-L/32) from original paper (https://arxiv.org/abs/2010.11929). No pretrained weights. + """ + model_kwargs = dict(patch_size=32, embed_dim=1024, depth=24, num_heads=16, **kwargs) + model = _create_vision_transformer('vit_large_patch32_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_large_patch16_384(pretrained=False, **kwargs): + """ ViT-Large model (ViT-L/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 384x384, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=16, embed_dim=1024, depth=24, num_heads=16, **kwargs) + model = _create_vision_transformer('vit_large_patch16_384', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_large_patch32_384(pretrained=False, **kwargs): + """ ViT-Large model (ViT-L/32) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 384x384, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=32, embed_dim=1024, depth=24, num_heads=16, **kwargs) + model = _create_vision_transformer('vit_large_patch32_384', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_patch16_224_in21k(pretrained=False, **kwargs): + """ ViT-Base model (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict( + patch_size=16, embed_dim=768, depth=12, num_heads=12, representation_size=768, **kwargs) + model = _create_vision_transformer('vit_base_patch16_224_in21k', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_patch32_224_in21k(pretrained=False, **kwargs): + """ ViT-Base model (ViT-B/32) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict( + patch_size=32, embed_dim=768, depth=12, num_heads=12, representation_size=768, **kwargs) + model = _create_vision_transformer('vit_base_patch32_224_in21k', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_large_patch16_224_in21k(pretrained=False, **kwargs): + """ ViT-Large model (ViT-L/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict( + patch_size=16, embed_dim=1024, depth=24, num_heads=16, representation_size=1024, **kwargs) + model = _create_vision_transformer('vit_large_patch16_224_in21k', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_large_patch32_224_in21k(pretrained=False, **kwargs): + """ ViT-Large model (ViT-L/32) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict( + patch_size=32, embed_dim=1024, depth=24, num_heads=16, representation_size=1024, **kwargs) + model = _create_vision_transformer('vit_large_patch32_224_in21k', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_huge_patch14_224_in21k(pretrained=False, **kwargs): + """ ViT-Huge model (ViT-H/14) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + NOTE: converted weights not currently available, too large for github release hosting. + """ + model_kwargs = dict( + patch_size=14, embed_dim=1280, depth=32, num_heads=16, representation_size=1280, **kwargs) + model = _create_vision_transformer('vit_huge_patch14_224_in21k', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_resnet50_224_in21k(pretrained=False, **kwargs): + """ R50+ViT-B/16 hybrid model from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + """ + # create a ResNetV2 w/o pre-activation, that uses StdConv and GroupNorm and has 3 stages, no head + backbone = ResNetV2( + layers=(3, 4, 9), num_classes=0, global_pool='', in_chans=kwargs.get('in_chans', 3), + preact=False, stem_type='same', conv_layer=StdConv2dSame) + model_kwargs = dict( + embed_dim=768, depth=12, num_heads=12, hybrid_backbone=backbone, + representation_size=768, **kwargs) + model = _create_vision_transformer('vit_base_resnet50_224_in21k', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_resnet50_384(pretrained=False, **kwargs): + """ R50+ViT-B/16 hybrid from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 384x384, source https://github.com/google-research/vision_transformer. + """ + # create a ResNetV2 w/o pre-activation, that uses StdConv and GroupNorm and has 3 stages, no head + backbone = ResNetV2( + layers=(3, 4, 9), num_classes=0, global_pool='', in_chans=kwargs.get('in_chans', 3), + preact=False, stem_type='same', conv_layer=StdConv2dSame) + model_kwargs = dict(embed_dim=768, depth=12, num_heads=12, hybrid_backbone=backbone, **kwargs) + model = _create_vision_transformer('vit_base_resnet50_384', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_small_resnet26d_224(pretrained=False, **kwargs): + """ Custom ViT small hybrid w/ ResNet26D stride 32. No pretrained weights. + """ + backbone = resnet26d(pretrained=pretrained, in_chans=kwargs.get('in_chans', 3), features_only=True, out_indices=[4]) + model_kwargs = dict(embed_dim=768, depth=8, num_heads=8, mlp_ratio=3, hybrid_backbone=backbone, **kwargs) + model = _create_vision_transformer('vit_small_resnet26d_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_small_resnet50d_s3_224(pretrained=False, **kwargs): + """ Custom ViT small hybrid w/ ResNet50D 3-stages, stride 16. No pretrained weights. + """ + backbone = resnet50d(pretrained=pretrained, in_chans=kwargs.get('in_chans', 3), features_only=True, out_indices=[3]) + model_kwargs = dict(embed_dim=768, depth=8, num_heads=8, mlp_ratio=3, hybrid_backbone=backbone, **kwargs) + model = _create_vision_transformer('vit_small_resnet50d_s3_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_resnet26d_224(pretrained=False, **kwargs): + """ Custom ViT base hybrid w/ ResNet26D stride 32. No pretrained weights. + """ + backbone = resnet26d(pretrained=pretrained, in_chans=kwargs.get('in_chans', 3), features_only=True, out_indices=[4]) + model_kwargs = dict(embed_dim=768, depth=12, num_heads=12, hybrid_backbone=backbone, **kwargs) + model = _create_vision_transformer('vit_base_resnet26d_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_base_resnet50d_224(pretrained=False, **kwargs): + """ Custom ViT base hybrid w/ ResNet50D stride 32. No pretrained weights. + """ + backbone = resnet50d(pretrained=pretrained, in_chans=kwargs.get('in_chans', 3), features_only=True, out_indices=[4]) + model_kwargs = dict(embed_dim=768, depth=12, num_heads=12, hybrid_backbone=backbone, **kwargs) + model = _create_vision_transformer('vit_base_resnet50d_224', pretrained=pretrained, **model_kwargs) + return model + + +@register_model +def vit_deit_tiny_patch16_224(pretrained=False, **kwargs): + """ DeiT-tiny model @ 224x224 from paper (https://arxiv.org/abs/2012.12877). + ImageNet-1k weights from https://github.com/facebookresearch/deit. + """ + model_kwargs = dict(patch_size=16, embed_dim=192, depth=12, num_heads=3, **kwargs) + model = _create_vision_transformer('vit_deit_tiny_patch16_224', pretrained=pretrained, **model_kwargs) + return model + +@register_model +def deit_small_resnet50_224(pretrained=False, **kwargs): + pretrained_backbone = kwargs.get('pretrained_backbone', False) # default to True for now, for testing + backbone = resnet50(pretrained=pretrained_backbone, features_only=True, out_indices=[4]) + model = VisionTransformer(patch_size=16, embed_dim=384, depth=12, num_heads=6, mlp_ratio=4, qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), hybrid_backbone=backbone, **kwargs) + model.default_cfg = default_cfgs['vit_small_resnet50_224'] + return model \ No newline at end of file -- GitLab

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 z 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

m}*-{!hMw~oRHq*$GKAN8`xqhQKVVf+Gn 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" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# show the results\n", + "show_result_pyplot(model, img, result)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/PyTorch/NLP/Conformer-main/mmdetection/demo/webcam_demo.py b/PyTorch/NLP/Conformer-main/mmdetection/demo/webcam_demo.py new file mode 100644 index 00000000..5bded14f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/demo/webcam_demo.py @@ -0,0 +1,46 @@ +import argparse + +import cv2 +import torch + +from mmdet.apis import inference_detector, init_detector + + +def parse_args(): + parser = argparse.ArgumentParser(description='MMDetection webcam demo') + parser.add_argument('config', help='test config file path') + parser.add_argument('checkpoint', help='checkpoint file') + parser.add_argument( + '--device', type=str, default='cuda:0', help='CPU/CUDA device option') + parser.add_argument( + '--camera-id', type=int, default=0, help='camera device id') + parser.add_argument( + '--score-thr', type=float, default=0.5, help='bbox score threshold') + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + + device = torch.device(args.device) + + model = init_detector(args.config, args.checkpoint, device=device) + + camera = cv2.VideoCapture(args.camera_id) + + print('Press "Esc", "q" or "Q" to exit.') + while True: + ret_val, img = camera.read() + result = inference_detector(model, img) + + ch = cv2.waitKey(1) + if ch == 27 or ch == ord('q') or ch == ord('Q'): + break + + model.show_result( + img, result, score_thr=args.score_thr, wait_time=1, show=True) + + +if __name__ == '__main__': + main() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docker/Dockerfile b/PyTorch/NLP/Conformer-main/mmdetection/docker/Dockerfile new file mode 100644 index 00000000..81e458fc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docker/Dockerfile @@ -0,0 +1,24 @@ +ARG PYTORCH="1.6.0" +ARG CUDA="10.1" +ARG CUDNN="7" + +FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel + +ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX" +ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" +ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" + +RUN apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install MMCV +RUN pip install mmcv-full==latest+torch1.6.0+cu101 -f https://openmmlab.oss-accelerate.aliyuncs.com/mmcv/dist/index.html + +# Install MMDetection +RUN conda clean --all +RUN git clone https://github.com/open-mmlab/mmdetection.git /mmdetection +WORKDIR /mmdetection +ENV FORCE_CUDA="1" +RUN pip install -r requirements/build.txt +RUN pip install --no-cache-dir -e . diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/1_exist_data_model.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/1_exist_data_model.md new file mode 100644 index 00000000..852b9b4b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/1_exist_data_model.md @@ -0,0 +1,496 @@ +# 1: Inference and train with existing models and standard datasets + +MMDetection provides hundreds of existing and existing detection models in [Model Zoo](https://mmdetection.readthedocs.io/en/latest/model_zoo.html)), and supports multiple standard datasets, including Pascal VOC, COCO, CityScapes, LVIS, etc. This note will show how to perform common tasks on these existing models and standard datasets, including: + +- Use existing models to inference on given images. +- Test existing models on standard datasets. +- Train predefined models on standard datasets. + +## Inference with existing models + +By inference, we mean using trained models to detect objects on images. In MMDetection, a model is defined by a configuration file and existing model parameters are save in a checkpoint file. + +To start with, we recommend [Faster RCNN](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn) with this [configuration file](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py) and this [checkpoint file](http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth). It is recommended to download the checkpoint file to `checkpoints` directory. + +### High-level APIs for inference + +MMDetection provide high-level Python APIs for inference on images. Here is an example of building the model and inference on given images or videos. + +```python +from mmdet.apis import init_detector, inference_detector +import mmcv + +# Specify the path to model config and checkpoint file +config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' +checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth' + +# build the model from a config file and a checkpoint file +model = init_detector(config_file, checkpoint_file, device='cuda:0') + +# test a single image and show the results +img = 'test.jpg' # or img = mmcv.imread(img), which will only load it once +result = inference_detector(model, img) +# visualize the results in a new window +model.show_result(img, result) +# or save the visualization results to image files +model.show_result(img, result, out_file='result.jpg') + +# test a video and show the results +video = mmcv.VideoReader('video.mp4') +for frame in video: + result = inference_detector(model, frame) + model.show_result(frame, result, wait_time=1) +``` + +A notebook demo can be found in [demo/inference_demo.ipynb](https://github.com/open-mmlab/mmdetection/blob/master/demo/inference_demo.ipynb). + +Note: `inference_detector` only supports single-image inference for now. + +### Asynchronous interface - supported for Python 3.7+ + +For Python 3.7+, MMDetection also supports async interfaces. +By utilizing CUDA streams, it allows not to block CPU on GPU bound inference code and enables better CPU/GPU utilization for single-threaded application. Inference can be done concurrently either between different input data samples or between different models of some inference pipeline. + +See `tests/async_benchmark.py` to compare the speed of synchronous and asynchronous interfaces. + +```python +import asyncio +import torch +from mmdet.apis import init_detector, async_inference_detector +from mmdet.utils.contextmanagers import concurrent + +async def main(): + config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' + checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth' + device = 'cuda:0' + model = init_detector(config_file, checkpoint=checkpoint_file, device=device) + + # queue is used for concurrent inference of multiple images + streamqueue = asyncio.Queue() + # queue size defines concurrency level + streamqueue_size = 3 + + for _ in range(streamqueue_size): + streamqueue.put_nowait(torch.cuda.Stream(device=device)) + + # test a single image and show the results + img = 'test.jpg' # or img = mmcv.imread(img), which will only load it once + + async with concurrent(streamqueue): + result = await async_inference_detector(model, img) + + # visualize the results in a new window + model.show_result(img, result) + # or save the visualization results to image files + model.show_result(img, result, out_file='result.jpg') + + +asyncio.run(main()) + +``` + +### Demos + +We also provide two demo scripts, implemented with high-level APIs and supporting functionality codes. +Source codes are available [here](https://github.com/open-mmlab/mmdetection/tree/master/demo). + +#### Image demo + +This script performs inference on a single image. + +```shell +python demo/image_demo.py \ + ${IMAGE_FILE} \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + [--device ${GPU_ID}] \ + [--score-thr ${SCORE_THR}] +``` + +Examples: + +```shell +python demo/image_demo.py demo/demo.jpg \ + configs/faster_rcnn_r50_fpn_1x_coco.py \ + checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \ + --device cpu +``` + +#### Webcam demo + +This is a live demo from a webcam. + +```shell +python demo/webcam_demo.py \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + [--device ${GPU_ID}] \ + [--camera-id ${CAMERA-ID}] \ + [--score-thr ${SCORE_THR}] +``` + +Examples: + +```shell +python demo/webcam_demo.py \ + configs/faster_rcnn_r50_fpn_1x_coco.py \ + checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth +``` + +## Test existing models on standard datasets + +To evaluate a model's accuracy, one usually tests the model on some standard datasets. +MMDetection supports multiple public datasets including COCO, Pascal VOC, CityScapes, and [more](https://github.com/open-mmlab/mmdetection/tree/master/configs/_base_/datasets). +This section will show how to test existing models on supported datasets. + +### Prepare datasets + +Public datasets like [Pascal VOC](http://host.robots.ox.ac.uk/pascal/VOC/index.html) or mirror and [COCO](https://cocodataset.org/#download) are available from official websites or mirrors. Note: In the detection task, Pascal VOC 2012 is an extension of Pascal VOC 2007 without overlap, and we usually use them together. +It is recommended to download and extract the dataset somewhere outside the project directory and symlink the dataset root to `$MMDETECTION/data` as below. +If your folder structure is different, you may need to change the corresponding paths in config files. + +```plain +mmdetection +├── mmdet +├── tools +├── configs +├── data +│ ├── coco +│ │ ├── annotations +│ │ ├── train2017 +│ │ ├── val2017 +│ │ ├── test2017 +│ ├── cityscapes +│ │ ├── annotations +│ │ ├── leftImg8bit +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── gtFine +│ │ │ ├── train +│ │ │ ├── val +│ ├── VOCdevkit +│ │ ├── VOC2007 +│ │ ├── VOC2012 + +``` + +The [cityscapes](https://www.cityscapes-dataset.com/) annotations need to be converted into the coco format using `tools/dataset_converters/cityscapes.py`: + +```shell +pip install cityscapesscripts + +python tools/dataset_converters/cityscapes.py \ + ./data/cityscapes \ + --nproc 8 \ + --out-dir ./data/cityscapes/annotations +``` + +TODO: CHANGE TO THE NEW PATH + +### Test existing models + +We provide testing scripts for evaluating an existing model on the whole dataset (COCO, PASCAL VOC, Cityscapes, etc.). +The following testing environments are supported: + +- single GPU +- single node multiple GPUs +- multiple nodes + +Choose the proper script to perform testing depending on the testing environment. + +```shell +# single-gpu testing +python tools/test.py \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + [--out ${RESULT_FILE}] \ + [--eval ${EVAL_METRICS}] \ + [--show] + +# multi-gpu testing +bash tools/dist_test.sh \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + ${GPU_NUM} \ + [--out ${RESULT_FILE}] \ + [--eval ${EVAL_METRICS}] +``` + +`tools/dist_test.sh` also supports multi-node testing, but relies on PyTorch's [launch utility](https://pytorch.org/docs/stable/distributed.html#launch-utility). + +Optional arguments: + +- `RESULT_FILE`: Filename of the output results in pickle format. If not specified, the results will not be saved to a file. +- `EVAL_METRICS`: Items to be evaluated on the results. Allowed values depend on the dataset, e.g., `proposal_fast`, `proposal`, `bbox`, `segm` are available for COCO, `mAP`, `recall` for PASCAL VOC. Cityscapes could be evaluated by `cityscapes` as well as all COCO metrics. +- `--show`: If specified, detection results will be plotted on the images and shown in a new window. It is only applicable to single GPU testing and used for debugging and visualization. Please make sure that GUI is available in your environment. Otherwise, you may encounter an error like `cannot connect to X server`. +- `--show-dir`: If specified, detection results will be plotted on the images and saved to the specified directory. It is only applicable to single GPU testing and used for debugging and visualization. You do NOT need a GUI available in your environment for using this option. +- `--show-score-thr`: If specified, detections with scores below this threshold will be removed. +- `--cfg-options`: if specified, the key-value pair optional cfg will be merged into config file +- `--eval-options`: if specified, the key-value pair optional eval cfg will be kwargs for dataset.evaluate() function, it's only for evaluation + +### Examples + +Assume that you have already downloaded the checkpoints to the directory `checkpoints/`. + +1. Test Faster R-CNN and visualize the results. Press any key for the next image. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn). + + ```shell + python tools/test.py \ + configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py \ + checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \ + --show + ``` + +2. Test Faster R-CNN and save the painted images for future visualization. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn). + + ```shell + python tools/test.py \ + configs/faster_rcnn/faster_rcnn_r50_fpn_1x.py \ + checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth \ + --show-dir faster_rcnn_r50_fpn_1x_results + ``` + +3. Test Faster R-CNN on PASCAL VOC (without saving the test results) and evaluate the mAP. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/pascal_voc). + + ```shell + python tools/test.py \ + configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc.py \ + checkpoints/faster_rcnn_r50_fpn_1x_voc0712_20200624-c9895d40.pth \ + --eval mAP + ``` + +4. Test Mask R-CNN with 8 GPUs, and evaluate the bbox and mask AP. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn). + + ```shell + ./tools/dist_test.sh \ + configs/mask_rcnn_r50_fpn_1x_coco.py \ + checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \ + 8 \ + --out results.pkl \ + --eval bbox segm + ``` + +5. Test Mask R-CNN with 8 GPUs, and evaluate the **classwise** bbox and mask AP. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn). + + ```shell + ./tools/dist_test.sh \ + configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \ + checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \ + 8 \ + --out results.pkl \ + --eval bbox segm \ + --options "classwise=True" + ``` + +6. Test Mask R-CNN on COCO test-dev with 8 GPUs, and generate JSON files for submitting to the official evaluation server. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask_rcnn). + + ```shell + ./tools/dist_test.sh \ + configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py \ + checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth \ + 8 \ + -format-only \ + --options "jsonfile_prefix=./mask_rcnn_test-dev_results" + ``` + + This command generates two JSON files `mask_rcnn_test-dev_results.bbox.json` and `mask_rcnn_test-dev_results.segm.json`. + +7. Test Mask R-CNN on Cityscapes test with 8 GPUs, and generate txt and png files for submitting to the official evaluation server. + Config and checkpoint files are available [here](https://github.com/open-mmlab/mmdetection/tree/master/configs/cityscapes). + + ```shell + ./tools/dist_test.sh \ + configs/cityscapes/mask_rcnn_r50_fpn_1x_cityscapes.py \ + checkpoints/mask_rcnn_r50_fpn_1x_cityscapes_20200227-afe51d5a.pth \ + 8 \ + --format-only \ + --options "txtfile_prefix=./mask_rcnn_cityscapes_test_results" + ``` + + The generated png and txt would be under `./mask_rcnn_cityscapes_test_results` directory. + +### Batch Inference + +MMDetection supports inference with a single image or batched images in test mode. By default, we use single-image inference and you can use batch inference by modifying `samples_per_gpu` in the config of test data. You can do that either by modifying the config as below. + +```shell +data = dict(train=dict(...), val=dict(...), test=dict(samples_per_gpu=2, ...)) +``` + +Or you can set it through `--cfg-options` as `--cfg-options data.test.samples_per_gpu=2` + +### Deprecated ImageToTensor + +In test mode, `ImageToTensor` pipeline is deprecated, it's replaced by `DefaultFormatBundle` that recommended to manually replace it in the test data pipeline in your config file. examples: + +```python +# use ImageToTensor (deprecated) +pipelines = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) + ] + +# manually replace ImageToTensor to DefaultFormatBundle (recommended) +pipelines = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img']), + ]) + ] +``` + +## Train predefined models on standard datasets + +MMDetection also provides out-of-the-box tools for training detection models. +This section will show how to train _predefined_ models (under [configs](https://github.com/open-mmlab/mmdetection/tree/master/configs)) on standard datasets i.e. COCO. + +**Important**: The default learning rate in config files is for 8 GPUs and 2 img/gpu (batch size = 8\*2 = 16). +According to the [linear scaling rule](https://arxiv.org/abs/1706.02677), you need to set the learning rate proportional to the batch size if you use different GPUs or images per GPU, e.g., `lr=0.01` for 4 GPUs \* 2 imgs/gpu and `lr=0.08` for 16 GPUs \* 4 imgs/gpu. + +### Prepare datasets + +Training requires preparing datasets too. See section [Prepare datasets](#prepare-datasets) above for details. + +**Note**: +Currently, the config files under `configs/cityscapes` use COCO pretrained weights to initialize. +You could download the existing models in advance if the network connection is unavailable or slow. Otherwise, it would cause errors at the beginning of training. + +### Training on a single GPU + +We provide `tools/train.py` to launch training jobs on a single GPU. +The basic usage is as follows. + +```shell +python tools/train.py \ + ${CONFIG_FILE} \ + [optional arguments] +``` + +During training, log files and checkpoints will be saved to the working directory, which is specified by `work_dir` in the config file or via CLI argument `--work-dir`. + +By default, the model is evaluated on the validation set every epoch, the evaluation interval can be specified in the config file as shown below. + +```python +# evaluate the model every 12 epoch. +evaluation = dict(interval=12) +``` + +This tool accepts several optional arguments, including: + +- `--no-validate` (**not suggested**): Disable evaluation during training. +- `--work-dir ${WORK_DIR}`: Override the working directory. +- `--resume-from ${CHECKPOINT_FILE}`: Resume from a previous checkpoint file. +- `--options 'Key=value'`: Overrides other settings in the used config. + +**Note**: + +Difference between `resume-from` and `load-from`: + +`resume-from` loads both the model weights and optimizer status, and the epoch is also inherited from the specified checkpoint. It is usually used for resuming the training process that is interrupted accidentally. +`load-from` only loads the model weights and the training epoch starts from 0. It is usually used for finetuning. + +### Training on multiple GPUs + +We provide `tools/dist_train.sh` to launch training on multiple GPUs. +The basic usage is as follows. + +```shell +bash ./tools/dist_train.sh \ + ${CONFIG_FILE} \ + ${GPU_NUM} \ + [optional arguments] +``` + +Optional arguments remain the same as stated [above](#train-with-a-single-GPU). + +#### Launch multiple jobs simultaneously + +If you would like to launch multiple jobs on a single machine, e.g., 2 jobs of 4-GPU training on a machine with 8 GPUs, +you need to specify different ports (29500 by default) for each job to avoid communication conflict. + +If you use `dist_train.sh` to launch training jobs, you can set the port in commands. + +```shell +CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4 +CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4 +``` + +### Training on multiple nodes + +MMDetection relies on `torch.distributed` package for distributed training. +Thus, as a basic usage, one can launch distributed training via PyTorch's [launch utility](https://pytorch.org/docs/stable/distributed.html#launch-utility). + +### Manage jobs with Slurm + +[Slurm](https://slurm.schedmd.com/) is a good job scheduling system for computing clusters. +On a cluster managed by Slurm, you can use `slurm_train.sh` to spawn training jobs. It supports both single-node and multi-node training. + +The basic usage is as follows. + +```shell +[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} +``` + +Below is an example of using 16 GPUs to train Mask R-CNN on a Slurm partition named _dev_, and set the work-dir to some shared file systems. + +```shell +GPUS=16 ./tools/slurm_train.sh dev mask_r50_1x configs/mask_rcnn_r50_fpn_1x_coco.py /nfs/xxxx/mask_rcnn_r50_fpn_1x +``` + +You can check [the source code](https://github.com/open-mmlab/mmdetection/blob/master/tools/slurm_train.sh) to review full arguments and environment variables. + +When using Slurm, the port option need to be set in one of the following ways: + +1. Set the port through `--options`. This is more recommended since it does not change the original configs. + + ```shell + CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} --options 'dist_params.port=29500' + CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} --options 'dist_params.port=29501' + ``` + +2. Modify the config files to set different communication ports. + + In `config1.py`, set + + ```python + dist_params = dict(backend='nccl', port=29500) + ``` + + In `config2.py`, set + + ```python + dist_params = dict(backend='nccl', port=29501) + ``` + + Then you can launch two jobs with `config1.py` and `config2.py`. + + ```shell + CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} + CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} + ``` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/2_new_data_model.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/2_new_data_model.md new file mode 100644 index 00000000..b2045151 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/2_new_data_model.md @@ -0,0 +1,263 @@ +# 2: Train with customized datasets + +In this note, you will know how to inference, test, and train predefined models with customized datasets. We use the [ballon dataset](https://github.com/matterport/Mask_RCNN/tree/master/samples/balloon) as an example to describe the whole process. + +The basic steps are as below: + +1. Prepare the customized dataset +2. Prepare a config +3. Train, test, inference models on the customized dataset. + +## Prepare the customized dataset + +There are three ways to support a new dataset in MMDetection: + +1. reorganize the dataset into COCO format. +2. reorganize the dataset into a middle format. +3. implement a new dataset. + +Usually we recommend to use the first two methods which are usually easier than the third. + +In this note, we give an example for converting the data into COCO format. + +**Note**: MMDetection only supports evaluating mask AP of dataset in COCO format for now. +So for instance segmentation task users should convert the data into coco format. + +### COCO annotation format + +The necessary keys of COCO format for instance segmentation is as below, for the complete details, please refer [here](https://cocodataset.org/#format-data). + +```json +{ + "images": [image], + "annotations": [annotation], + "categories": [category] +} + + +image = { + "id": int, + "width": int, + "height": int, + "file_name": str, +} + +annotation = { + "id": int, + "image_id": int, + "category_id": int, + "segmentation": RLE or [polygon], + "area": float, + "bbox": [x,y,width,height], + "iscrowd": 0 or 1, +} + +categories = [{ + "id": int, + "name": str, + "supercategory": str, +}] +``` + +Assume we use the ballon dataset. +After downloading the data, we need to implement a function to convert the annotation format into the COCO format. Then we can use implemented COCODataset to load the data and perform training and evaluation. + +If you take a look at the dataset, you will find the dataset format is as below: + +```json +{'base64_img_data': '', + 'file_attributes': {}, + 'filename': '34020010494_e5cb88e1c4_k.jpg', + 'fileref': '', + 'regions': {'0': {'region_attributes': {}, + 'shape_attributes': {'all_points_x': [1020, + 1000, + 994, + 1003, + 1023, + 1050, + 1089, + 1134, + 1190, + 1265, + 1321, + 1361, + 1403, + 1428, + 1442, + 1445, + 1441, + 1427, + 1400, + 1361, + 1316, + 1269, + 1228, + 1198, + 1207, + 1210, + 1190, + 1177, + 1172, + 1174, + 1170, + 1153, + 1127, + 1104, + 1061, + 1032, + 1020], + 'all_points_y': [963, + 899, + 841, + 787, + 738, + 700, + 663, + 638, + 621, + 619, + 643, + 672, + 720, + 765, + 800, + 860, + 896, + 942, + 990, + 1035, + 1079, + 1112, + 1129, + 1134, + 1144, + 1153, + 1166, + 1166, + 1150, + 1136, + 1129, + 1122, + 1112, + 1084, + 1037, + 989, + 963], + 'name': 'polygon'}}}, + 'size': 1115004} +``` + +The annotation is a JSON file where each key indicates an image's all annotations. +The code to convert the ballon dataset into coco format is as below. + +```python +import os.path as osp + +def convert_balloon_to_coco(ann_file, out_file, image_prefix): + data_infos = mmcv.load(ann_file) + + annotations = [] + images = [] + obj_count = 0 + for idx, v in enumerate(mmcv.track_iter_progress(data_infos.values())): + filename = v['filename'] + img_path = osp.join(image_prefix, filename) + height, width = mmcv.imread(img_path).shape[:2] + + images.append(dict( + id=idx, + file_name=filename, + height=height, + width=width)) + + bboxes = [] + labels = [] + masks = [] + for _, obj in v['regions'].items(): + assert not obj['region_attributes'] + obj = obj['shape_attributes'] + px = obj['all_points_x'] + py = obj['all_points_y'] + poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)] + poly = [p for x in poly for p in x] + + x_min, y_min, x_max, y_max = ( + min(px), min(py), max(px), max(py)) + + + data_anno = dict( + image_id=idx, + id=obj_count, + category_id=0, + bbox=[x_min, y_min, x_max - x_min, y_max - y_min], + area=(x_max - x_min) * (y_max - y_min), + segmentation=[poly], + iscrowd=0) + annotations.append(data_anno) + obj_count += 1 + + coco_format_json = dict( + images=images, + annotations=annotations, + categories=[{'id':0, 'name': 'balloon'}]) + mmcv.dump(coco_format_json, out_file) + +``` + +Using the function above, users can successfully convert the annotation file into json format, then we can use `CocoDataset` to train and evaluate the model. + +## Prepare a config + +The second step is to prepare a config thus the dataset could be successfully loaded. Assume that we want to use Mask R-CNN with FPN, the config to train the detector on ballon dataset is as below. Assume the config is under directory `configs/ballon/` and named as `mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py`, the config is as below. + +```python +# The new config inherits a base config to highlight the necessary modification +_base_ = 'mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py' + +# We also need to change the num_classes in head to match the dataset's annotation +model = dict( + roi_head=dict( + bbox_head=dict(num_classes=1), + mask_head=dict(num_classes=1))) + +# Modify dataset related settings +dataset_type = 'COCODataset' +classes = ('balloon',) +data = dict( + train=dict( + img_prefix='balloon/train/', + classes=classes, + ann_file='balloon/train/annotation_coco.json'), + val=dict( + img_prefix='balloon/val/', + classes=classes, + ann_file='balloon/val/annotation_coco.json'), + test=dict( + img_prefix='balloon/val/', + classes=classes, + ann_file='balloon/val/annotation_coco.json')) + +# We can use the pre-trained Mask RCNN model to obtain higher performance +load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth' +``` + +## Train a new model + +To train a model with the new config, you can simply run + +```shell +python tools/train.py configs/ballon/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py +``` + +For more detailed usages, please refer to the [Case 1](1_exist_data_model.md). + +## Test and inference + +To test the trained model, you can simply run + +```shell +python tools/test.py configs/ballon/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py work_dirs/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py/latest.pth --eval bbox segm +``` + +For more detailed usages, please refer to the [Case 1](1_exist_data_model.md). diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/3_exist_data_new_model.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/3_exist_data_new_model.md new file mode 100644 index 00000000..90495648 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/3_exist_data_new_model.md @@ -0,0 +1,275 @@ +# 3: Train with customized models and standard datasets + +In this note, you will know how to train, test and inference your own customized models under standard datasets. We use the cityscapes dataset to train a customized Cascade Mask R-CNN R50 model as an example to demonstrate the whole process, which using [`AugFPN`](https://github.com/Gus-Guo/AugFPN) to replace the defalut `FPN` as neck, and add `Rotate` or `Translate` as training-time auto augmentation. + +The basic steps are as below: + +1. Prepare the standard dataset +2. Prepare your own customized model +3. Prepare a config +4. Train, test, and inference models on the standard dataset. + +## Prepare the standard dataset + +In this note, as we use the standard cityscapes dataset as an example. + +It is recommended to symlink the dataset root to `$MMDETECTION/data`. +If your folder structure is different, you may need to change the corresponding paths in config files. + +```none +mmdetection +├── mmdet +├── tools +├── configs +├── data +│ ├── coco +│ │ ├── annotations +│ │ ├── train2017 +│ │ ├── val2017 +│ │ ├── test2017 +│ ├── cityscapes +│ │ ├── annotations +│ │ ├── leftImg8bit +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── gtFine +│ │ │ ├── train +│ │ │ ├── val +│ ├── VOCdevkit +│ │ ├── VOC2007 +│ │ ├── VOC2012 + +``` + +The cityscapes annotations have to be converted into the coco format using `tools/dataset_converters/cityscapes.py`: + +```shell +pip install cityscapesscripts +python tools/dataset_converters/cityscapes.py ./data/cityscapes --nproc 8 --out-dir ./data/cityscapes/annotations +``` + +Currently the config files in `cityscapes` use COCO pre-trained weights to initialize. +You could download the pre-trained models in advance if network is unavailable or slow, otherwise it would cause errors at the beginning of training. + +## Prepare your own customized model + +The second step is to use your own module or training setting. Assume that we want to implement a new neck called `AugFPN` to replace with the default `FPN` under the existing detector Cascade Mask R-CNN R50. The following implements`AugFPN` under MMDetection. + +### 1. Define a new neck (e.g. AugFPN) + +Firstly create a new file `mmdet/models/necks/augfpn.py`. + +```python +from ..builder import NECKS + +@NECKS.register_module() +class AugFPN(nn.Module): + + def __init__(self, + in_channels, + out_channels, + num_outs, + start_level=0, + end_level=-1, + add_extra_convs=False): + pass + + def forward(self, inputs): + # implementation is ignored + pass +``` + +### 2. Import the module + +You can either add the following line to `mmdet/models/necks/__init__.py`, + +```python +from .augfpn import AugFPN +``` + +or alternatively add + +```python +custom_imports = dict( + imports=['mmdet.models.necks.augfpn.py'], + allow_failed_imports=False) +``` + +to the config file and avoid modifying the original code. + +### 3. Modify the config file + +```python +neck=dict( + type='AugFPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5) +``` + +For more detailed usages about customize your own models (e.g. implement a new backbone, head, loss, etc) and runtime training settings (e.g. define a new optimizer, use gradient clip, customize training schedules and hooks, etc), please refer to the guideline [Customize Models](tutorials/customize_models.md) and [Customize Runtime Settings](tutorials/customize_runtime.md) respectively. + +## Prepare a config + +The third step is to prepare a config for your own training setting. Assume that we want to add `AugFPN` and `Rotate` or `Translate` augmentation to existing Cascade Mask R-CNN R50 to train the cityscapes dataset, and assume the config is under directory `configs/cityscapes/` and named as `cascade_mask_rcnn_r50_augfpn_autoaug_10e_cityscapes.py`, the config is as below. + +```python +# The new config inherits the base configs to highlight the necessary modification +_base_ = [ + '../_base_/models/cascade_mask_rcnn_r50_fpn.py', + '../_base_/datasets/cityscapes_instance.py', '../_base_/default_runtime.py' +] + +model = dict( + # set None to avoid loading ImageNet pretrained backbone, + # instead here we set `load_from` to load from COCO pretrained detectors. + pretrained=None, + # replace neck from defaultly `FPN` to our new implemented module `AugFPN` + neck=dict( + type='AugFPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5), + # We also need to change the num_classes in head from 80 to 8, to match the + # cityscapes dataset's annotation. This modification involves `bbox_head` and `mask_head`. + roi_head=dict( + bbox_head=[ + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + # change the number of classes from defaultly COCO to cityscapes + num_classes=8, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + # change the number of classes from defaultly COCO to cityscapes + num_classes=8, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.05, 0.05, 0.1, 0.1]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)), + dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + # change the number of classes from defaultly COCO to cityscapes + num_classes=8, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.033, 0.033, 0.067, 0.067]), + reg_class_agnostic=True, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)) + ], + mask_head=dict( + type='FCNMaskHead', + num_convs=4, + in_channels=256, + conv_out_channels=256, + # change the number of classes from defaultly COCO to cityscapes + num_classes=8, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)))) + +# over-write `train_pipeline` for new added `AutoAugment` training setting +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='AutoAugment', + policies=[ + [dict( + type='Rotate', + level=5, + img_fill_val=(124, 116, 104), + prob=0.5, + scale=1) + ], + [dict(type='Rotate', level=7, img_fill_val=(124, 116, 104)), + dict( + type='Translate', + level=5, + prob=0.5, + img_fill_val=(124, 116, 104)) + ], + ]), + dict( + type='Resize', img_scale=[(2048, 800), (2048, 1024)], keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] + +# set batch_size per gpu, and set new training pipeline +data = dict( + samples_per_gpu=1, + workers_per_gpu=3, + # over-write `pipeline` with new training pipeline setting + train=dict(dataset=dict(pipeline=train_pipeline))) + +# Set optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) +optimizer_config = dict(grad_clip=None) +# Set customized learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[8]) +total_epochs = 10 + +# We can use the COCO pretrained Cascade Mask R-CNN R50 model for more stable performance initialization +load_from = 'http://download.openmmlab.com/mmdetection/v2.0/cascade_rcnn/cascade_mask_rcnn_r50_fpn_1x_coco/cascade_mask_rcnn_r50_fpn_1x_coco_20200203-9d4dcb24.pth' +``` + +## Train a new model + +To train a model with the new config, you can simply run + +```shell +python tools/train.py configs/cityscapes/cascade_mask_rcnn_r50_augfpn_autoaug_10e_cityscapes.py +``` + +For more detailed usages, please refer to the [Case 1](1_exist_data_model.md). + +## Test and inference + +To test the trained model, you can simply run + +```shell +python tools/test.py configs/cityscapes/cascade_mask_rcnn_r50_augfpn_autoaug_10e_cityscapes.py work_dirs/cascade_mask_rcnn_r50_augfpn_autoaug_10e_cityscapes.py/latest.pth --eval bbox segm +``` + +For more detailed usages, please refer to the [Case 1](1_exist_data_model.md). diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/Makefile b/PyTorch/NLP/Conformer-main/mmdetection/docs/Makefile new file mode 100644 index 00000000..d4bb2cbb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/api.rst b/PyTorch/NLP/Conformer-main/mmdetection/docs/api.rst new file mode 100644 index 00000000..04406303 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/api.rst @@ -0,0 +1,101 @@ +API Reference +================= + +mmdet.apis +-------------- +.. automodule:: mmdet.apis + :members: + +mmdet.core +-------------- + +anchor +^^^^^^^^^^ +.. automodule:: mmdet.core.anchor + :members: + +bbox +^^^^^^^^^^ +.. automodule:: mmdet.core.bbox + :members: + +export +^^^^^^^^^^ +.. automodule:: mmdet.core.export + :members: + +mask +^^^^^^^^^^ +.. automodule:: mmdet.core.mask + :members: + +evaluation +^^^^^^^^^^ +.. automodule:: mmdet.core.evaluation + :members: + +post_processing +^^^^^^^^^^^^^^^ +.. automodule:: mmdet.core.post_processing + :members: + +optimizer +^^^^^^^^^^ +.. automodule:: mmdet.core.optimizer + :members: + +utils +^^^^^^^^^^ +.. automodule:: mmdet.core.utils + :members: + +mmdet.datasets +-------------- + +datasets +^^^^^^^^^^ +.. automodule:: mmdet.datasets + :members: + +pipelines +^^^^^^^^^^ +.. automodule:: mmdet.datasets.pipelines + :members: + +mmdet.models +-------------- + +detectors +^^^^^^^^^^ +.. automodule:: mmdet.models.detectors + :members: + +backbones +^^^^^^^^^^ +.. automodule:: mmdet.models.backbones + :members: + +necks +^^^^^^^^^^^^ +.. automodule:: mmdet.models.necks + :members: + +dense_heads +^^^^^^^^^^^^ +.. automodule:: mmdet.models.dense_heads + :members: + +roi_heads +^^^^^^^^^^ +.. automodule:: mmdet.models.roi_heads + :members: + +losses +^^^^^^^^^^ +.. automodule:: mmdet.models.losses + :members: + +utils +^^^^^^^^^^ +.. automodule:: mmdet.models.utils + :members: diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/changelog.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/changelog.md new file mode 100644 index 00000000..0e361dd4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/changelog.md @@ -0,0 +1,683 @@ +## Changelog + +### v2.8.0 (04/01/2021) + +#### Highlights + +- Support new methods: [Cascade RPN](https://arxiv.org/abs/1909.06720), [TridentNet](https://arxiv.org/abs/1901.01892) + +#### New Features + +- Support [Cascade RPN](https://arxiv.org/abs/1909.06720) (#1900) +- Support [TridentNet](https://arxiv.org/abs/1901.01892) (#3313) + +#### Bug Fixes + +- Fix bug of show result in async_benchmark (#4367) +- Fix scale factor in MaskTestMixin (#4366) +- Fix but when returning indices in `multiclass_nms` (#4362) +- Fix bug of empirical attention in resnext backbone error (#4300) +- Fix bug of `img_norm_cfg` in FCOS-HRNet models with updated performance and models (#4250) +- Fix invalid checkpoint and log in Mask R-CNN models on Cityscapes dataset (#4287) +- Fix bug in distributed sampler when dataset is too small (#4257) +- Fix bug of 'PAFPN has no attribute extra_convs_on_inputs' (#4235) + +#### Improvements + +- Update model url from aws to aliyun (#4349) +- Update ATSS for PyTorch 1.6+ (#4359) +- Update script to install ruby in pre-commit installation (#4360) +- Delete deprecated `mmdet.ops` (#4325) +- Refactor hungarian assigner for more general usage in Sparse R-CNN (#4259) +- Handle scipy import in DETR to reduce package dependencies (#4339) +- Update documentation of usages for config options after MMCV (1.2.3) supports overriding list in config (#4326) +- Update pre-train models of faster rcnn trained on COCO subsets (#4307) +- Avoid zero or too small value for beta in Dynamic R-CNN (#4303) +- Add doccumentation for Pytorch2ONNX (#4271) +- Add deprecated warning FPN arguments (#4264) +- Support returning indices of kept bboxes when using nms (#4251) +- Update type and device requirements when creating tensors `GFLHead` (#4210) +- Update device requirements when creating tensors in `CrossEntropyLoss` (#4224) + +### v2.7.0 (30/11/2020) + +- Support new method: [DETR](https://arxiv.org/abs/2005.12872), [ResNest](https://arxiv.org/abs/2004.08955), Faster R-CNN DC5. +- Support YOLO, Mask R-CNN, and Cascade R-CNN models exportable to ONNX. + +#### New Features + +- Support [DETR](https://arxiv.org/abs/2005.12872) (#4201, #4206) +- Support to link the best checkpoint in training (#3773) +- Support to override config through options in inference.py (#4175) +- Support YOLO, Mask R-CNN, and Cascade R-CNN models exportable to ONNX (#4087, #4083) +- Support [ResNeSt](https://arxiv.org/abs/2004.08955) backbone (#2959) +- Support unclip border bbox regression (#4076) +- Add tpfp func in evaluating AP (#4069) +- Support mixed precision training of SSD detector with other backbones (#4081) +- Add Faster R-CNN DC5 models (#4043) + +#### Bug Fixes + +- Fix bug of `gpu_id` in distributed training mode (#4163) +- Support Albumentations with version higher than 0.5 (#4032) +- Fix num_classes bug in faster rcnn config (#4088) +- Update code in docs/2_new_data_model.md (#4041) + +#### Improvements + +- Ensure DCN offset to have similar type as features in VFNet (#4198) +- Add config links in README files of models (#4190) +- Add tutorials for loss conventions (#3818) +- Add solution to installation issues in 30-series GPUs (#4176) +- Update docker version in get_started.md (#4145) +- Add model statistics and polish some titles in configs README (#4140) +- Clamp neg probability in FreeAnchor (#4082) +- Speed up expanding large images (#4089) +- Fix Pytorch 1.7 incompatibility issues (#4103) +- Update trouble shooting page to resolve segmentation fault (#4055) +- Update aLRP-Loss in project page (#4078) +- Clean duplicated `reduce_mean` function (#4056) +- Refactor Q&A (#4045) + +### v2.6.0 (1/11/2020) + +- Support new method: [VarifocalNet](https://arxiv.org/abs/2008.13367). +- Refactored documentation with more tutorials. + +#### New Features + +- Support GIoU calculation in `BboxOverlaps2D`, and re-implement `giou_loss` using `bbox_overlaps` (#3936) +- Support random sampling in CPU mode (#3948) +- Support VarifocalNet (#3666, #4024) + +#### Bug Fixes + +- Fix SABL validating bug in Cascade R-CNN (#3913) +- Avoid division by zero in PAA head when num_pos=0 (#3938) +- Fix temporary directory bug of multi-node testing error (#4034, #4017) +- Fix `--show-dir` option in test script (#4025) +- Fix GA-RetinaNet r50 model url (#3983) +- Update code in docs and fix broken urls (#3947) + +#### Improvements + +- Refactor pytorch2onnx API into `mmdet.core.export` and use `generate_inputs_and_wrap_model` for pytorch2onnx (#3857, #3912) +- Update RPN upgrade scripts for v2.5.0 compatibility (#3986) +- Use mmcv `tensor2imgs` (#4010) +- Update test robustness (#4000) +- Update trouble shooting page (#3994) +- Accelerate PAA training speed (#3985) +- Support batch_size > 1 in validation (#3966) +- Use RoIAlign implemented in MMCV for inference in CPU mode (#3930) +- Documentation refactoring (#4031) + +### v2.5.0 (5/10/2020) + +#### Highlights + +- Support new methods: [YOLACT](https://arxiv.org/abs/1904.02689), [CentripetalNet](https://arxiv.org/abs/2003.09119). +- Add more documentations for easier and more clear usage. + +#### Backwards Incompatible Changes + +**FP16 related methods are imported from mmcv instead of mmdet. (#3766, #3822)** +Mixed precision training utils in `mmdet.core.fp16` are moved to `mmcv.runner`, including `force_fp32`, `auto_fp16`, `wrap_fp16_model`, and `Fp16OptimizerHook`. A deprecation warning will be raised if users attempt to import those methods from `mmdet.core.fp16`, and will be finally removed in V2.8.0. + +**[0, N-1] represents foreground classes and N indicates background classes for all models. (#3221)** +Before v2.5.0, the background label for RPN is 0, and N for other heads. Now the behavior is consistent for all models. Thus `self.background_labels` in `dense_heads` is removed and all heads use `self.num_classes` to indicate the class index of background labels. +This change has no effect on the pre-trained models in the v2.x model zoo, but will affect the training of all models with RPN heads. Two-stage detectors whose RPN head uses softmax will be affected because the order of categories is changed. + +**Only call `get_subset_by_classes` when `test_mode=True` and `self.filter_empty_gt=True` (#3695)** +Function `get_subset_by_classes` in dataset is refactored and only filters out images when `test_mode=True` and `self.filter_empty_gt=True`. + In the original implementation, `get_subset_by_classes` is not related to the flag `self.filter_empty_gt` and will only be called when the classes is set during initialization no matter `test_mode` is `True` or `False`. This brings ambiguous behavior and potential bugs in many cases. After v2.5.0, if `filter_empty_gt=False`, no matter whether the classes are specified in a dataset, the dataset will use all the images in the annotations. If `filter_empty_gt=True` and `test_mode=True`, no matter whether the classes are specified, the dataset will call ``get_subset_by_classes` to check the images and filter out images containing no GT boxes. Therefore, the users should be responsible for the data filtering/cleaning process for the test dataset. + +#### New Features + +- Test time augmentation for single stage detectors (#3844, #3638) +- Support to show the name of experiments during training (#3764) +- Add `Shear`, `Rotate`, `Translate` Augmentation (#3656, #3619, #3687) +- Add image-only transformations including `Constrast`, `Equalize`, `Color`, and `Brightness`. (#3643) +- Support [YOLACT](https://arxiv.org/abs/1904.02689) (#3456) +- Support [CentripetalNet](https://arxiv.org/abs/2003.09119) (#3390) +- Support PyTorch 1.6 in docker (#3905) + +#### Bug Fixes + +- Fix the bug of training ATSS when there is no ground truth boxes (#3702) +- Fix the bug of using Focal Loss when there is `num_pos` is 0 (#3702) +- Fix the label index mapping in dataset browser (#3708) +- Fix Mask R-CNN training stuck problem when ther is no positive rois (#3713) +- Fix the bug of `self.rpn_head.test_cfg` in `RPNTestMixin` by using `self.rpn_head` in rpn head (#3808) +- Fix deprecated `Conv2d` from mmcv.ops (#3791) +- Fix device bug in RepPoints (#3836) +- Fix SABL validating bug (#3849) +- Use `https://download.openmmlab.com/mmcv/dist/index.html` for installing MMCV (#3840) +- Fix nonzero in NMS for PyTorch 1.6.0 (#3867) +- Fix the API change bug of PAA (#3883) +- Fix typo in bbox_flip (#3886) +- Fix cv2 import error of ligGL.so.1 in Dockerfile (#3891) + +#### Improvements + +- Change to use `mmcv.utils.collect_env` for collecting environment information to avoid duplicate codes (#3779) +- Update checkpoint file names to v2.0 models in documentation (#3795) +- Update tutorials for changing runtime settings (#3778), modifing loss (#3777) +- Improve the function of `simple_test_bboxes` in SABL (#3853) +- Convert mask to bool before using it as img's index for robustness and speedup (#3870) +- Improve documentation of modules and dataset customization (#3821) + +### v2.4.0 (5/9/2020) + +**Highlights** + +- Fix lots of issues/bugs and reorganize the trouble shooting page +- Support new methods [SABL](https://arxiv.org/abs/1912.04260), [YOLOv3](https://arxiv.org/abs/1804.02767), and [PAA Assign](https://arxiv.org/abs/2007.08103) +- Support Batch Inference +- Start to publish `mmdet` package to PyPI since v2.3.0 +- Switch model zoo to download.openmmlab.com + +**Backwards Incompatible Changes** + +- Support Batch Inference (#3564, #3686, #3705): Since v2.4.0, MMDetection could inference model with multiple images in a single GPU. + This change influences all the test APIs in MMDetection and downstream codebases. To help the users migrate their code, we use `replace_ImageToTensor` (#3686) to convert legacy test data pipelines during dataset initialization. +- Support RandomFlip with horizontal/vertical/diagonal direction (#3608): Since v2.4.0, MMDetection supports horizontal/vertical/diagonal flip in the data augmentation. This influences bounding box, mask, and image transformations in data augmentation process and the process that will map those data back to the original format. +- Migrate to use `mmlvis` and `mmpycocotools` for COCO and LVIS dataset (#3727). The APIs are fully compatible with the original `lvis` and `pycocotools`. Users need to uninstall the existing pycocotools and lvis packages in their environment first and install `mmlvis` & `mmpycocotools`. + +**Bug Fixes** + +- Fix default mean/std for onnx (#3491) +- Fix coco evaluation and add metric items (#3497) +- Fix typo for install.md (#3516) +- Fix atss when sampler per gpu is 1 (#3528) +- Fix import of fuse_conv_bn (#3529) +- Fix bug of gaussian_target, update unittest of heatmap (#3543) +- Fixed VOC2012 evaluate (#3553) +- Fix scale factor bug of rescale (#3566) +- Fix with_xxx_attributes in base detector (#3567) +- Fix boxes scaling when number is 0 (#3575) +- Fix rfp check when neck config is a list (#3591) +- Fix import of fuse conv bn in benchmark.py (#3606) +- Fix webcam demo (#3634) +- Fix typo and itemize issues in tutorial (#3658) +- Fix error in distributed training when some levels of FPN are not assigned with bounding boxes (#3670) +- Fix the width and height orders of stride in valid flag generation (#3685) +- Fix weight initialization bug in Res2Net DCN (#3714) +- Fix bug in OHEMSampler (#3677) + +**New Features** + +- Support Cutout augmentation (#3521) +- Support evaluation on multiple datasets through ConcatDataset (#3522) +- Support [PAA assign](https://arxiv.org/abs/2007.08103) #(3547) +- Support eval metric with pickle results (#3607) +- Support [YOLOv3](https://arxiv.org/abs/1804.02767) (#3083) +- Support [SABL](https://arxiv.org/abs/1912.04260) (#3603) +- Support to publish to Pypi in github-action (#3510) +- Support custom imports (#3641) + +**Improvements** + +- Refactor common issues in documentation (#3530) +- Add pytorch 1.6 to CI config (#3532) +- Add config to runner meta (#3534) +- Add eval-option flag for testing (#3537) +- Add init_eval to evaluation hook (#3550) +- Add include_bkg in ClassBalancedDataset (#3577) +- Using config's loading in inference_detector (#3611) +- Add ATSS ResNet-101 models in model zoo (#3639) +- Update urls to download.openmmlab.com (#3665) +- Support non-mask training for CocoDataset (#3711) + +### v2.3.0 (5/8/2020) + +**Highlights** + +- The CUDA/C++ operators have been moved to `mmcv.ops`. For backward compatibility `mmdet.ops` is kept as warppers of `mmcv.ops`. +- Support new methods [CornerNet](https://arxiv.org/abs/1808.01244), [DIOU](https://arxiv.org/abs/1911.08287)/[CIOU](https://arxiv.org/abs/2005.03572) loss, and new dataset: [LVIS V1](https://arxiv.org/abs/1908.03195) +- Provide more detailed colab training tutorials and more complete documentation. +- Support to convert RetinaNet from Pytorch to ONNX. + +**Bug Fixes** + +- Fix the model initialization bug of DetectoRS (#3187) +- Fix the bug of module names in NASFCOSHead (#3205) +- Fix the filename bug in publish_model.py (#3237) +- Fix the dimensionality bug when `inside_flags.any()` is `False` in dense heads (#3242) +- Fix the bug of forgetting to pass flip directions in `MultiScaleFlipAug` (#3262) +- Fixed the bug caused by default value of `stem_channels` (#3333) +- Fix the bug of model checkpoint loading for CPU inference (#3318, #3316) +- Fix topk bug when box number is smaller than the expected topk number in ATSSAssigner (#3361) +- Fix the gt priority bug in center_region_assigner.py (#3208) +- Fix NaN issue of iou calculation in iou_loss.py (#3394) +- Fix the bug that `iou_thrs` is not actually used during evaluation in coco.py (#3407) +- Fix test-time augmentation of RepPoints (#3435) +- Fix runtimeError caused by incontiguous tensor in Res2Net+DCN (#3412) + +**New Features** + +- Support [CornerNet](https://arxiv.org/abs/1808.01244) (#3036) +- Support [DIOU](https://arxiv.org/abs/1911.08287)/[CIOU](https://arxiv.org/abs/2005.03572) loss (#3151) +- Support [LVIS V1](https://arxiv.org/abs/1908.03195) dataset (#) +- Support customized hooks in training (#3395) +- Support fp16 training of generalized focal loss (#3410) +- Support to convert RetinaNet from Pytorch to ONNX (#3075) + +**Improvements** + +- Support to process ignore boxes in ATSS assigner (#3082) +- Allow to crop images without ground truth in `RandomCrop` (#3153) +- Enable the the `Accuracy` module to set threshold (#3155) +- Refactoring unit tests (#3206) +- Unify the training settings of `to_float32` and `norm_cfg` in RegNets configs (#3210) +- Add colab training tutorials for beginners (#3213, #3273) +- Move CUDA/C++ operators into `mmcv.ops` and keep `mmdet.ops` as warppers for backward compatibility (#3232)(#3457) +- Update installation scripts in documentation (#3290) and dockerfile (#3320) +- Support to set image resize backend (#3392) +- Remove git hash in version file (#3466) +- Check mmcv version to force version compatibility (#3460) + +### v2.2.0 (1/7/2020) + +**Highlights** + +- Support new methods: [DetectoRS](https://arxiv.org/abs/2006.02334), [PointRend](https://arxiv.org/abs/1912.08193), [Generalized Focal Loss](https://arxiv.org/abs/2006.04388), [Dynamic R-CNN](https://arxiv.org/abs/2004.06002) + +**Bug Fixes** + +- Fix FreeAnchor when no gt in image (#3176) +- Clean up deprecated usage of `register_module()` (#3092, #3161) +- Fix pretrain bug in NAS FCOS (#3145) +- Fix `num_classes` in SSD (#3142) +- Fix FCOS warmup (#3119) +- Fix `rstrip` in `tools/publish_model.py` +- Fix `flip_ratio` default value in RandomFLip pipeline (#3106) +- Fix cityscapes eval with ms_rcnn (#3112) +- Fix RPN softmax (#3056) +- Fix filename of LVIS@v0.5 (#2998) +- Fix nan loss by filtering out-of-frame gt_bboxes in COCO (#2999) +- Fix bug in FSAF (#3018) +- Add FocalLoss `num_classes` check (#2964) +- Fix PISA Loss when there are no gts (#2992) +- Avoid nan in `iou_calculator` (#2975) +- Prevent possible bugs in loading and transforms caused by shallow copy (#2967) + +**New Features** + +- Add DetectoRS (#3064) +- Support Generalize Focal Loss (#3097) +- Support PointRend (#2752) +- Support Dynamic R-CNN (#3040) +- Add DeepFashion dataset (#2968) +- Implement FCOS training tricks (#2935) +- Use BaseDenseHead as base class for anchor-base heads (#2963) +- Add `with_cp` for BasicBlock (#2891) +- Add `stem_channles` argument for ResNet (#2954) + +**Improvements** + +- Add anchor free base head (#2867) +- Migrate to github action (#3137) +- Add docstring for datasets, pipelines, core modules and methods (#3130, #3125, #3120) +- Add VOC benchmark (#3060) +- Add `concat` mode in GRoI (#3098) +- Remove cmd arg `autorescale-lr` (#3080) +- Use `len(data['img_metas'])` to indicate `num_samples` (#3073, #3053) +- Switch to EpochBasedRunner (#2976) + +### v2.1.0 (8/6/2020) + +**Highlights** + +- Support new backbones: [RegNetX](https://arxiv.org/abs/2003.13678), [Res2Net](https://arxiv.org/abs/1904.01169) +- Support new methods: [NASFCOS](https://arxiv.org/abs/1906.04423), [PISA](https://arxiv.org/abs/1904.04821), [GRoIE](https://arxiv.org/abs/2004.13665) +- Support new dataset: [LVIS](https://arxiv.org/abs/1908.03195) + +**Bug Fixes** + +- Change the CLI argument `--validate` to `--no-validate` to enable validation after training epochs by default. (#2651) +- Add missing cython to docker file (#2713) +- Fix bug in nms cpu implementation (#2754) +- Fix bug when showing mask results (#2763) +- Fix gcc requirement (#2806) +- Fix bug in async test (#2820) +- Fix mask encoding-decoding bugs in test API (#2824) +- Fix bug in test time augmentation (#2858, #2921, #2944) +- Fix a typo in comment of apis/train (#2877) +- Fix the bug of returning None when no gt bboxes are in the original image in `RandomCrop`. Fix the bug that misses to handle `gt_bboxes_ignore`, `gt_label_ignore`, and `gt_masks_ignore` in `RandomCrop`, `MinIoURandomCrop` and `Expand` modules. (#2810) +- Fix bug of `base_channels` of regnet (#2917) +- Fix the bug of logger when loading pre-trained weights in base detector (#2936) + +**New Features** + +- Add IoU models (#2666) +- Add colab demo for inference +- Support class agnostic nms (#2553) +- Add benchmark gathering scripts for development only (#2676) +- Add mmdet-based project links (#2736, #2767, #2895) +- Add config dump in training (#2779) +- Add ClassBalancedDataset (#2721) +- Add res2net backbone (#2237) +- Support RegNetX models (#2710) +- Use `mmcv.FileClient` to support different storage backends (#2712) +- Add ClassBalancedDataset (#2721) +- Code Release: Prime Sample Attention in Object Detection (CVPR 2020) (#2626) +- Implement NASFCOS (#2682) +- Add class weight in CrossEntropyLoss (#2797) +- Support LVIS dataset (#2088) +- Support GRoIE (#2584) + +**Improvements** + +- Allow different x and y strides in anchor heads. (#2629) +- Make FSAF loss more robust to no gt (#2680) +- Compute pure inference time instead (#2657) and update inference speed (#2730) +- Avoided the possibility that a patch with 0 area is cropped. (#2704) +- Add warnings when deprecated `imgs_per_gpu` is used. (#2700) +- Add a mask rcnn example for config (#2645) +- Update model zoo (#2762, #2866, #2876, #2879, #2831) +- Add `ori_filename` to img_metas and use it in test show-dir (#2612) +- Use `img_fields` to handle multiple images during image transform (#2800) +- Add upsample_cfg support in FPN (#2787) +- Add `['img']` as default `img_fields` for back compatibility (#2809) +- Rename the pretrained model from `open-mmlab://resnet50_caffe` and `open-mmlab://resnet50_caffe_bgr` to `open-mmlab://detectron/resnet50_caffe` and `open-mmlab://detectron2/resnet50_caffe`. (#2832) +- Added sleep(2) in test.py to reduce hanging problem (#2847) +- Support `c10::half` in CARAFE (#2890) +- Improve documentations (#2918, #2714) +- Use optimizer constructor in mmcv and clean the original implementation in `mmdet.core.optimizer` (#2947) + +### v2.0.0 (6/5/2020) + +In this release, we made lots of major refactoring and modifications. + +1. **Faster speed**. We optimize the training and inference speed for common models, achieving up to 30% speedup for training and 25% for inference. Please refer to [model zoo](model_zoo.md#comparison-with-detectron2) for details. + +2. **Higher performance**. We change some default hyperparameters with no additional cost, which leads to a gain of performance for most models. Please refer to [compatibility](compatibility.md#training-hyperparameters) for details. + +3. **More documentation and tutorials**. We add a bunch of documentation and tutorials to help users get started more smoothly. Read it [here](https://mmdetection.readthedocs.io/en/latest/). + +4. **Support PyTorch 1.5**. The support for 1.1 and 1.2 is dropped, and we switch to some new APIs. + +5. **Better configuration system**. Inheritance is supported to reduce the redundancy of configs. + +6. **Better modular design**. Towards the goal of simplicity and flexibility, we simplify some encapsulation while add more other configurable modules like BBoxCoder, IoUCalculator, OptimizerConstructor, RoIHead. Target computation is also included in heads and the call hierarchy is simpler. + +7. Support new methods: [FSAF](https://arxiv.org/abs/1903.00621) and PAFPN (part of [PAFPN](https://arxiv.org/abs/1803.01534)). + +**Breaking Changes** +Models training with MMDetection 1.x are not fully compatible with 2.0, please refer to the [compatibility doc](compatibility.md) for the details and how to migrate to the new version. + +**Improvements** + +- Unify cuda and cpp API for custom ops. (#2277) +- New config files with inheritance. (#2216) +- Encapsulate the second stage into RoI heads. (#1999) +- Refactor GCNet/EmpericalAttention into plugins. (#2345) +- Set low quality match as an option in IoU-based bbox assigners. (#2375) +- Change the codebase's coordinate system. (#2380) +- Refactor the category order in heads. 0 means the first positive class instead of background now. (#2374) +- Add bbox sampler and assigner registry. (#2419) +- Speed up the inference of RPN. (#2420) +- Add `train_cfg` and `test_cfg` as class members in all anchor heads. (#2422) +- Merge target computation methods into heads. (#2429) +- Add bbox coder to support different bbox encoding and losses. (#2480) +- Unify the API for regression loss. (#2156) +- Refactor Anchor Generator. (#2474) +- Make `lr` an optional argument for optimizers. (#2509) +- Migrate to modules and methods in MMCV. (#2502, #2511, #2569, #2572) +- Support PyTorch 1.5. (#2524) +- Drop the support for Python 3.5 and use F-string in the codebase. (#2531) + +**Bug Fixes** + +- Fix the scale factors for resized images without keep the aspect ratio. (#2039) +- Check if max_num > 0 before slicing in NMS. (#2486) +- Fix Deformable RoIPool when there is no instance. (#2490) +- Fix the default value of assigned labels. (#2536) +- Fix the evaluation of Cityscapes. (#2578) + +**New Features** + +- Add deep_stem and avg_down option to ResNet, i.e., support ResNetV1d. (#2252) +- Add L1 loss. (#2376) +- Support both polygon and bitmap for instance masks. (#2353, #2540) +- Support CPU mode for inference. (#2385) +- Add optimizer constructor for complicated configuration of optimizers. (#2397, #2488) +- Implement PAFPN. (#2392) +- Support empty tensor input for some modules. (#2280) +- Support for custom dataset classes without overriding it. (#2408, #2443) +- Support to train subsets of coco dataset. (#2340) +- Add iou_calculator to potentially support more IoU calculation methods. (2405) +- Support class wise mean AP (was removed in the last version). (#2459) +- Add option to save the testing result images. (#2414) +- Support MomentumUpdaterHook. (#2571) +- Add a demo to inference a single image. (#2605) + +### v1.1.0 (24/2/2020) + +**Highlights** + +- Dataset evaluation is rewritten with a unified api, which is used by both evaluation hooks and test scripts. +- Support new methods: [CARAFE](https://arxiv.org/abs/1905.02188). + +**Breaking Changes** + +- The new MMDDP inherits from the official DDP, thus the `__init__` api is changed to be the same as official DDP. +- The `mask_head` field in HTC config files is modified. +- The evaluation and testing script is updated. +- In all transforms, instance masks are stored as a numpy array shaped (n, h, w) instead of a list of (h, w) arrays, where n is the number of instances. + +**Bug Fixes** + +- Fix IOU assigners when ignore_iof_thr > 0 and there is no pred boxes. (#2135) +- Fix mAP evaluation when there are no ignored boxes. (#2116) +- Fix the empty RoI input for Deformable RoI Pooling. (#2099) +- Fix the dataset settings for multiple workflows. (#2103) +- Fix the warning related to `torch.uint8` in PyTorch 1.4. (#2105) +- Fix the inference demo on devices other than gpu:0. (#2098) +- Fix Dockerfile. (#2097) +- Fix the bug that `pad_val` is unused in Pad transform. (#2093) +- Fix the albumentation transform when there is no ground truth bbox. (#2032) + +**Improvements** + +- Use torch instead of numpy for random sampling. (#2094) +- Migrate to the new MMDDP implementation in MMCV v0.3. (#2090) +- Add meta information in logs. (#2086) +- Rewrite Soft NMS with pytorch extension and remove cython as a dependency. (#2056) +- Rewrite dataset evaluation. (#2042, #2087, #2114, #2128) +- Use numpy array for masks in transforms. (#2030) + +**New Features** + +- Implement "CARAFE: Content-Aware ReAssembly of FEatures". (#1583) +- Add `worker_init_fn()` in data_loader when seed is set. (#2066, #2111) +- Add logging utils. (#2035) + +### v1.0.0 (30/1/2020) + +This release mainly improves the code quality and add more docstrings. + +**Highlights** + +- Documentation is online now: https://mmdetection.readthedocs.io. +- Support new models: [ATSS](https://arxiv.org/abs/1912.02424). +- DCN is now available with the api `build_conv_layer` and `ConvModule` like the normal conv layer. +- A tool to collect environment information is available for trouble shooting. + +**Bug Fixes** + +- Fix the incompatibility of the latest numpy and pycocotools. (#2024) +- Fix the case when distributed package is unavailable, e.g., on Windows. (#1985) +- Fix the dimension issue for `refine_bboxes()`. (#1962) +- Fix the typo when `seg_prefix` is a list. (#1906) +- Add segmentation map cropping to RandomCrop. (#1880) +- Fix the return value of `ga_shape_target_single()`. (#1853) +- Fix the loaded shape of empty proposals. (#1819) +- Fix the mask data type when using albumentation. (#1818) + +**Improvements** + +- Enhance AssignResult and SamplingResult. (#1995) +- Add ability to overwrite existing module in Registry. (#1982) +- Reorganize requirements and make albumentations and imagecorruptions optional. (#1969) +- Check NaN in `SSDHead`. (#1935) +- Encapsulate the DCN in ResNe(X)t into a ConvModule & Conv_layers. (#1894) +- Refactoring for mAP evaluation and support multiprocessing and logging. (#1889) +- Init the root logger before constructing Runner to log more information. (#1865) +- Split `SegResizeFlipPadRescale` into different existing transforms. (#1852) +- Move `init_dist()` to MMCV. (#1851) +- Documentation and docstring improvements. (#1971, #1938, #1869, #1838) +- Fix the color of the same class for mask visualization. (#1834) +- Remove the option `keep_all_stages` in HTC and Cascade R-CNN. (#1806) + +**New Features** + +- Add two test-time options `crop_mask` and `rle_mask_encode` for mask heads. (#2013) +- Support loading grayscale images as single channel. (#1975) +- Implement "Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection". (#1872) +- Add sphinx generated docs. (#1859, #1864) +- Add GN support for flops computation. (#1850) +- Collect env info for trouble shooting. (#1812) + +### v1.0rc1 (13/12/2019) + +The RC1 release mainly focuses on improving the user experience, and fixing bugs. + +**Highlights** + +- Support new models: [FoveaBox](https://arxiv.org/abs/1904.03797), [RepPoints](https://arxiv.org/abs/1904.11490) and [FreeAnchor](https://arxiv.org/abs/1909.02466). +- Add a Dockerfile. +- Add a jupyter notebook demo and a webcam demo. +- Setup the code style and CI. +- Add lots of docstrings and unit tests. +- Fix lots of bugs. + +**Breaking Changes** + +- There was a bug for computing COCO-style mAP w.r.t different scales (AP_s, AP_m, AP_l), introduced by #621. (#1679) + +**Bug Fixes** + +- Fix a sampling interval bug in Libra R-CNN. (#1800) +- Fix the learning rate in SSD300 WIDER FACE. (#1781) +- Fix the scaling issue when `keep_ratio=False`. (#1730) +- Fix typos. (#1721, #1492, #1242, #1108, #1107) +- Fix the shuffle argument in `build_dataloader`. (#1693) +- Clip the proposal when computing mask targets. (#1688) +- Fix the "index out of range" bug for samplers in some corner cases. (#1610, #1404) +- Fix the NMS issue on devices other than GPU:0. (#1603) +- Fix SSD Head and GHM Loss on CPU. (#1578) +- Fix the OOM error when there are too many gt bboxes. (#1575) +- Fix the wrong keyword argument `nms_cfg` in HTC. (#1573) +- Process masks and semantic segmentation in Expand and MinIoUCrop transforms. (#1550, #1361) +- Fix a scale bug in the Non Local op. (#1528) +- Fix a bug in transforms when `gt_bboxes_ignore` is None. (#1498) +- Fix a bug when `img_prefix` is None. (#1497) +- Pass the device argument to `grid_anchors` and `valid_flags`. (#1478) +- Fix the data pipeline for test_robustness. (#1476) +- Fix the argument type of deformable pooling. (#1390) +- Fix the coco_eval when there are only two classes. (#1376) +- Fix a bug in Modulated DeformableConv when deformable_group>1. (#1359) +- Fix the mask cropping in RandomCrop. (#1333) +- Fix zero outputs in DeformConv when not running on cuda:0. (#1326) +- Fix the type issue in Expand. (#1288) +- Fix the inference API. (#1255) +- Fix the inplace operation in Expand. (#1249) +- Fix the from-scratch training config. (#1196) +- Fix inplace add in RoIExtractor which cause an error in PyTorch 1.2. (#1160) +- Fix FCOS when input images has no positive sample. (#1136) +- Fix recursive imports. (#1099) + +**Improvements** + +- Print the config file and mmdet version in the log. (#1721) +- Lint the code before compiling in travis CI. (#1715) +- Add a probability argument for the `Expand` transform. (#1651) +- Update the PyTorch and CUDA version in the docker file. (#1615) +- Raise a warning when specifying `--validate` in non-distributed training. (#1624, #1651) +- Beautify the mAP printing. (#1614) +- Add pre-commit hook. (#1536) +- Add the argument `in_channels` to backbones. (#1475) +- Add lots of docstrings and unit tests, thanks to [@Erotemic](https://github.com/Erotemic). (#1603, #1517, #1506, #1505, #1491, #1479, #1477, #1475, #1474) +- Add support for multi-node distributed test when there is no shared storage. (#1399) +- Optimize Dockerfile to reduce the image size. (#1306) +- Update new results of HRNet. (#1284, #1182) +- Add an argument `no_norm_on_lateral` in FPN. (#1240) +- Test the compiling in CI. (#1235) +- Move docs to a separate folder. (#1233) +- Add a jupyter notebook demo. (#1158) +- Support different type of dataset for training. (#1133) +- Use int64_t instead of long in cuda kernels. (#1131) +- Support unsquare RoIs for bbox and mask heads. (#1128) +- Manually add type promotion to make compatible to PyTorch 1.2. (#1114) +- Allowing validation dataset for computing validation loss. (#1093) +- Use `.scalar_type()` instead of `.type()` to suppress some warnings. (#1070) + +**New Features** + +- Add an option `--with_ap` to compute the AP for each class. (#1549) +- Implement "FreeAnchor: Learning to Match Anchors for Visual Object Detection". (#1391) +- Support [Albumentations](https://github.com/albumentations-team/albumentations) for augmentations in the data pipeline. (#1354) +- Implement "FoveaBox: Beyond Anchor-based Object Detector". (#1339) +- Support horizontal and vertical flipping. (#1273, #1115) +- Implement "RepPoints: Point Set Representation for Object Detection". (#1265) +- Add test-time augmentation to HTC and Cascade R-CNN. (#1251) +- Add a COCO result analysis tool. (#1228) +- Add Dockerfile. (#1168) +- Add a webcam demo. (#1155, #1150) +- Add FLOPs counter. (#1127) +- Allow arbitrary layer order for ConvModule. (#1078) + +### v1.0rc0 (27/07/2019) + +- Implement lots of new methods and components (Mixed Precision Training, HTC, Libra R-CNN, Guided Anchoring, Empirical Attention, Mask Scoring R-CNN, Grid R-CNN (Plus), GHM, GCNet, FCOS, HRNet, Weight Standardization, etc.). Thank all collaborators! +- Support two additional datasets: WIDER FACE and Cityscapes. +- Refactoring for loss APIs and make it more flexible to adopt different losses and related hyper-parameters. +- Speed up multi-gpu testing. +- Integrate all compiling and installing in a single script. + +### v0.6.0 (14/04/2019) + +- Up to 30% speedup compared to the model zoo. +- Support both PyTorch stable and nightly version. +- Replace NMS and SigmoidFocalLoss with Pytorch CUDA extensions. + +### v0.6rc0(06/02/2019) + +- Migrate to PyTorch 1.0. + +### v0.5.7 (06/02/2019) + +- Add support for Deformable ConvNet v2. (Many thanks to the authors and [@chengdazhi](https://github.com/chengdazhi)) +- This is the last release based on PyTorch 0.4.1. + +### v0.5.6 (17/01/2019) + +- Add support for Group Normalization. +- Unify RPNHead and single stage heads (RetinaHead, SSDHead) with AnchorHead. + +### v0.5.5 (22/12/2018) + +- Add SSD for COCO and PASCAL VOC. +- Add ResNeXt backbones and detection models. +- Refactoring for Samplers/Assigners and add OHEM. +- Add VOC dataset and evaluation scripts. + +### v0.5.4 (27/11/2018) + +- Add SingleStageDetector and RetinaNet. + +### v0.5.3 (26/11/2018) + +- Add Cascade R-CNN and Cascade Mask R-CNN. +- Add support for Soft-NMS in config files. + +### v0.5.2 (21/10/2018) + +- Add support for custom datasets. +- Add a script to convert PASCAL VOC annotations to the expected format. + +### v0.5.1 (20/10/2018) + +- Add BBoxAssigner and BBoxSampler, the `train_cfg` field in config files are restructured. +- `ConvFCRoIHead` / `SharedFCRoIHead` are renamed to `ConvFCBBoxHead` / `SharedFCBBoxHead` for consistency. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/compatibility.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/compatibility.md new file mode 100644 index 00000000..922fc532 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/compatibility.md @@ -0,0 +1,82 @@ +# Compatibility with MMDetection 1.x + +MMDetection 2.0 goes through a big refactoring and addresses many legacy issues. It is not compatible with the 1.x version, i.e., running inference with the same model weights in these two versions will produce different results. Thus, MMDetection 2.0 re-benchmarks all the models and provides their links and logs in the model zoo. + +The major differences are in four folds: coordinate system, codebase conventions, training hyperparameters, and modular design. + +## Coordinate System + +The new coordinate system is consistent with [Detectron2](https://github.com/facebookresearch/detectron2/) and treats the center of the most left-top pixel as (0, 0) rather than the left-top corner of that pixel. +Accordingly, the system interprets the coordinates in COCO bounding box and segmentation annotations as coordinates in range `[0, width]` or `[0, height]`. +This modification affects all the computation related to the bbox and pixel selection, +which is more natural and accurate. + +- The height and width of a box with corners (x1, y1) and (x2, y2) in the new coordinate system is computed as `width = x2 - x1` and `height = y2 - y1`. + In MMDetection 1.x and previous version, a "+ 1" was added both height and width. + This modification are in three folds: + + 1. Box transformation and encoding/decoding in regression. + 2. IoU calculation. This affects the matching process between ground truth and bounding box and the NMS process. The effect to compatibility is very negligible, though. + 3. The corners of bounding box is in float type and no longer quantized. This should provide more accurate bounding box results. This also makes the bounding box and RoIs not required to have minimum size of 1, whose effect is small, though. + +- The anchors are center-aligned to feature grid points and in float type. + In MMDetection 1.x and previous version, the anchors are in `int` type and not center-aligned. + This affects the anchor generation in RPN and all the anchor-based methods. + +- ROIAlign is better aligned with the image coordinate system. The new implementation is adopted from [Detectron2](https://github.com/facebookresearch/detectron2/tree/master/detectron2/layers/csrc/ROIAlign). + The RoIs are shifted by half a pixel by default when they are used to cropping RoI features, compared to MMDetection 1.x. + The old behavior is still available by setting `aligned=False` instead of `aligned=True`. + +- Mask cropping and pasting are more accurate. + + 1. We use the new RoIAlign to crop mask targets. In MMDetection 1.x, the bounding box is quantized before it is used to crop mask target, and the crop process is implemented by numpy. In new implementation, the bounding box for crop is not quantized and sent to RoIAlign. This implementation accelerates the training speed by a large margin (~0.1s per iter, ~2 hour when training Mask R50 for 1x schedule) and should be more accurate. + + 2. In MMDetection 2.0, the "`paste_mask()`" function is different and should be more accurate than those in previous versions. This change follows the modification in [Detectron2](https://github.com/facebookresearch/detectron2/blob/master/detectron2/structures/masks.py) and can improve mask AP on COCO by ~0.5% absolute. + +## Codebase Conventions + +- MMDetection 2.0 changes the order of class labels to reduce unused parameters in regression and mask branch more naturally (without +1 and -1). + This effect all the classification layers of the model to have a different ordering of class labels. The final layers of regression branch and mask head no longer keep K+1 channels for K categories, and their class orders are consistent with the classification branch. + + - In MMDetection 2.0, label "K" means background, and labels [0, K-1] correspond to the K = num_categories object categories. + + - In MMDetection 1.x and previous version, label "0" means background, and labels [1, K] correspond to the K categories. + + - **Note**: The class order of softmax RPN is still the same as that in 1.x in versions<=2.4.0 while sigmoid RPN is not affected. The class orders in all heads are unified since MMDetection v2.5.0. + +- Low quality matching in R-CNN is not used. In MMDetection 1.x and previous versions, the `max_iou_assigner` will match low quality boxes for each ground truth box in both RPN and R-CNN training. We observe this sometimes does not assign the most perfect GT box to some bounding boxes, + thus MMDetection 2.0 do not allow low quality matching by default in R-CNN training in the new system. This sometimes may slightly improve the box AP (~0.1% absolute). + +- Separate scale factors for width and height. In MMDetection 1.x and previous versions, the scale factor is a single float in mode `keep_ratio=True`. This is slightly inaccurate because the scale factors for width and height have slight difference. MMDetection 2.0 adopts separate scale factors for width and height, the improvement on AP ~0.1% absolute. + +- Configs name conventions are changed. MMDetection V2.0 adopts the new name convention to maintain the gradually growing model zoo as the following: + + ```shell + [model]_(model setting)_[backbone]_[neck]_(norm setting)_(misc)_(gpu x batch)_[schedule]_[dataset].py, + ``` + + where the (`misc`) includes DCN and GCBlock, etc. More details are illustrated in the [documentation for config](config.md) + +- MMDetection V2.0 uses new ResNet Caffe backbones to reduce warnings when loading pre-trained models. Most of the new backbones' weights are the same as the former ones but do not have `conv.bias`, except that they use a different `img_norm_cfg`. Thus, the new backbone will not cause warning of unexpected keys. + +## Training Hyperparameters + +The change in training hyperparameters does not affect +model-level compatibility but slightly improves the performance. The major ones are: + +- The number of proposals after nms is changed from 2000 to 1000 by setting `nms_post=1000` and `max_num=1000`. + This slightly improves both mask AP and bbox AP by ~0.2% absolute. + +- The default box regression losses for Mask R-CNN, Faster R-CNN and RetinaNet are changed from smooth L1 Loss to L1 loss. This leads to an overall improvement in box AP (~0.6% absolute). However, using L1-loss for other methods such as Cascade R-CNN and HTC does not improve the performance, so we keep the original settings for these methods. + +- The sample num of RoIAlign layer is set to be 0 for simplicity. This leads to slightly improvement on mask AP (~0.2% absolute). + +- The default setting does not use gradient clipping anymore during training for faster training speed. This does not degrade performance of the most of models. For some models such as RepPoints we keep using gradient clipping to stabilize the training process and to obtain better performance. + +- The default warmup ratio is changed from 1/3 to 0.001 for a more smooth warming up process since the gradient clipping is usually not used. The effect is found negligible during our re-benchmarking, though. + +## Upgrade Models from 1.x to 2.0 + +To convert the models trained by MMDetection V1.x to MMDetection V2.0, the users can use the script `tools/model_converters/upgrade_model_version.py` to convert +their models. The converted models can be run in MMDetection V2.0 with slightly dropped performance (less than 1% AP absolute). +Details can be found in `configs/legacy`. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/conf.py b/PyTorch/NLP/Conformer-main/mmdetection/docs/conf.py new file mode 100644 index 00000000..1c60d9c5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/conf.py @@ -0,0 +1,90 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import subprocess +import sys + +sys.path.insert(0, os.path.abspath('..')) + +# -- Project information ----------------------------------------------------- + +project = 'MMDetection' +copyright = '2018-2020, OpenMMLab' +author = 'MMDetection Authors' +version_file = '../mmdet/version.py' + + +def get_version(): + with open(version_file, 'r') as f: + exec(compile(f.read(), version_file, 'exec')) + return locals()['__version__'] + + +# The full version, including alpha/beta/rc tags +release = get_version() + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'recommonmark', + 'sphinx_markdown_tables', +] + +autodoc_mock_imports = [ + 'matplotlib', 'pycocotools', 'terminaltables', 'mmdet.version', 'mmcv.ops' +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = { + '.rst': 'restructuredtext', + '.md': 'markdown', +} + +# The master toctree document. +master_doc = 'index' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + + +def builder_inited_handler(app): + subprocess.run(['./stat.py']) + + +def setup(app): + app.connect('builder-inited', builder_inited_handler) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/conventions.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/conventions.md new file mode 100644 index 00000000..86e8cb72 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/conventions.md @@ -0,0 +1,31 @@ +# Conventions + +Please check the following conventions if you would like to modify MMDetection as your own project. + +## Loss + +In MMDetection, a `dict` containing losses and metrics will be returned by `model(**data)`. + +For example, in bbox head, + +```python +class BBoxHead(nn.Module): + ... + def loss(self, ...): + losses = dict() + # classification loss + losses['loss_cls'] = self.loss_cls(...) + # classification accuracy + losses['acc'] = accuracy(...) + # bbox regression loss + losses['loss_bbox'] = self.loss_bbox(...) + return losses +``` + +`bbox_head.loss()` will be called during model forward. +The returned dict contains `'loss_bbox'`, `'loss_cls'`, `'acc'` . +Only `'loss_bbox'`, `'loss_cls'` will be used during back propagation, +`'acc'` will only be used as a metric to monitor training process. + +By default, only values whose keys contain `'loss'` will be back propagated. +This behavior could be changed by modifying `BaseDetector.train_step()`. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/faq.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/faq.md new file mode 100644 index 00000000..f438d7ec --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/faq.md @@ -0,0 +1,78 @@ +We list some common troubles faced by many users and their corresponding solutions here. Feel free to enrich the list if you find any frequent issues and have ways to help others to solve them. If the contents here do not cover your issue, please create an issue using the [provided templates](https://github.com/open-mmlab/mmdetection/blob/master/.github/ISSUE_TEMPLATE/error-report.md) and make sure you fill in all required information in the template. + +## MMCV Installation + +- Compatibility issue between MMCV and MMDetection; "ConvWS is already registered in conv layer"; "AssertionError: MMCV==xxx is used but incompatible. Please install mmcv>=xxx, <=xxx." + + Please install the correct version of MMCV for the version of your MMDetection following the [installation instruction](https://mmdetection.readthedocs.io/en/latest/get_started.html#installation). + +- "No module named 'mmcv.ops'"; "No module named 'mmcv._ext'". + + 1. Uninstall existing mmcv in the environment using `pip uninstall mmcv`. + 2. Install mmcv-full following the [installation instruction](https://mmcv.readthedocs.io/en/latest/#installation). + +## PyTorch/CUDA Environment + +- "RTX 30 series card fails when building MMCV or MMDet" + + 1. Temporary work-around: do `MMCV_WITH_OPS=1 MMCV_CUDA_ARGS='-gencode=arch=compute_80,code=sm_80' pip install -e .`. + The common issue is `nvcc fatal : Unsupported gpu architecture 'compute_86'`. This means that the compiler should optimize for sm_86, i.e., nvidia 30 series card, but such optimizations have not been supported by CUDA toolkit 11.0. + This work-around modifies the compile flag by adding `MMCV_CUDA_ARGS='-gencode=arch=compute_80,code=sm_80'`, which tells `nvcc` to optimize for **sm_80**, i.e., Nvidia A100. Although A100 is different from the 30 series card, they use similar ampere architecture. This may hurt the performance but it works. + 2. PyTorch developers have updated that the default compiler flags should be fixed by [pytorch/pytorch#47585](https://github.com/pytorch/pytorch/pull/47585). So using PyTorch-nightly may also be able to solve the problem, though we have not tested it yet. + +- "invalid device function" or "no kernel image is available for execution". + + 1. Check if your cuda runtime version (under `/usr/local/`), `nvcc --version` and `conda list cudatoolkit` version match. + 2. Run `python mmdet/utils/collect_env.py` to check whether PyTorch, torchvision, and MMCV are built for the correct GPU architecture. + You may need to set `TORCH_CUDA_ARCH_LIST` to reinstall MMCV. + The GPU arch table could be found [here](https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list), + i.e. run `TORCH_CUDA_ARCH_LIST=7.0 pip install mmcv-full` to build MMCV for Volta GPUs. + The compatibility issue could happen when using old GPUS, e.g., Tesla K80 (3.7) on colab. + 3. Check whether the running environment is the same as that when mmcv/mmdet has compiled. + For example, you may compile mmcv using CUDA 10.0 but run it on CUDA 9.0 environments. + +- "undefined symbol" or "cannot open xxx.so". + + 1. If those symbols are CUDA/C++ symbols (e.g., libcudart.so or GLIBCXX), check whether the CUDA/GCC runtimes are the same as those used for compiling mmcv, + i.e. run `python mmdet/utils/collect_env.py` to see if `"MMCV Compiler"`/`"MMCV CUDA Compiler"` is the same as `"GCC"`/`"CUDA_HOME"`. + 2. If those symbols are PyTorch symbols (e.g., symbols containing caffe, aten, and TH), check whether the PyTorch version is the same as that used for compiling mmcv. + 3. Run `python mmdet/utils/collect_env.py` to check whether PyTorch, torchvision, and MMCV are built by and running on the same environment. + +- setuptools.sandbox.UnpickleableException: DistutilsSetupError("each element of 'ext_modules' option must be an Extension instance or 2-tuple") + + 1. If you are using miniconda rather than anaconda, check whether Cython is installed as indicated in [#3379](https://github.com/open-mmlab/mmdetection/issues/3379). + You need to manually install Cython first and then run command `pip install -r requirements.txt`. + 2. You may also need to check the compatibility between the `setuptools`, `Cython`, and `PyTorch` in your environment. + +- "Segmentation fault". + 1. Check you GCC version and use GCC 5.4. This usually caused by the incompatibility between PyTorch and the environment (e.g., GCC < 4.9 for PyTorch). We also recommand the users to avoid using GCC 5.5 because many feedbacks report that GCC 5.5 will cause "segmentation fault" and simply changing it to GCC 5.4 could solve the problem. + + 2. Check whether PyTorch is correctly installed and could use CUDA op, e.g. type the following command in your terminal. + + ```shell + python -c 'import torch; print(torch.cuda.is_available())' + ``` + + And see whether they could correctly output results. + + 3. If Pytorch is correctly installed, check whether MMCV is correctly installed. + + ```shell + python -c 'import mmcv; import mmcv.ops' + ``` + + If MMCV is correctly installed, then there will be no issue of the above two commands. + + 4. If MMCV and Pytorch is correctly installed, you man use `ipdb`, `pdb` to set breakpoints or directly add 'print' in mmdetection code and see which part leads the segmentation fault. + +## Training + +- "Loss goes Nan" + 1. Check if the dataset annotations are valid: zero-size bounding boxes will cause the regression loss to be Nan due to the commonly used transformation for box regression. Some small size (width or height are smaller than 1) boxes will also cause this problem after data augmentation (e.g., instaboost). So check the data and try to filter out those zero-size boxes and skip some risky augmentations on the small-size boxes when you face the problem. + 2. Reduce the learning rate: the learning rate might be too large due to some reasons, e.g., change of batch size. You can rescale them to the value that could stably train the model. + 3. Extend the warmup iterations: some models are sensitive to the learning rate at the start of the training. You can extend the warmup iterations, e.g., change the `warmup_iters` from 500 to 1000 or 2000. + 4. Add gradient clipping: some models requires gradient clipping to stablize the training process. You can add gradient clippint to avoid gradients that are too large. +- ’GPU out of memory" + 1. There are some scenarios when there are large amount of ground truth boxes, which may cause OOM during target assignment. You can set `gpu_assign_thr=N` in the config of assigner thus the assigner will calculate box overlaps through CPU when there are more than N GT boxes. + 2. Set `with_cp=True` in the backbone. This uses the sublinear strategy in PyTorch to reduce GPU memory cost in the backbone. + 3. Try mixed precision training using following the examples in `config/fp16`. The `loss_scale` might need further tuning for different models. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/get_started.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/get_started.md new file mode 100644 index 00000000..e2b8aa76 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/get_started.md @@ -0,0 +1,207 @@ +## Prerequisites + +- Linux or macOS (Windows is in experimental support) +- Python 3.6+ +- PyTorch 1.3+ +- CUDA 9.2+ (If you build PyTorch from source, CUDA 9.0 is also compatible) +- GCC 5+ +- [MMCV](https://mmcv.readthedocs.io/en/latest/#installation) + +The compatible MMDetection and MMCV versions are as below. Please install the correct version of MMCV to avoid installation issues. + +| MMDetection version | MMCV version | +|:-------------------:|:-------------------:| +| master | mmcv-full>=1.2.4, <1.3| +| 2.8.0 | mmcv-full>=1.2.4, <1.3| +| 2.7.0 | mmcv-full>=1.1.5, <1.3| +| 2.6.0 | mmcv-full>=1.1.5, <1.3| +| 2.5.0 | mmcv-full>=1.1.5, <1.3| +| 2.4.0 | mmcv-full>=1.1.1, <1.3| +| 2.3.0 | mmcv-full==1.0.5 | +| 2.3.0rc0 | mmcv-full>=1.0.2 | +| 2.2.1 | mmcv==0.6.2 | +| 2.2.0 | mmcv==0.6.2 | +| 2.1.0 | mmcv>=0.5.9, <=0.6.1| +| 2.0.0 | mmcv>=0.5.1, <=0.5.8| + +Note: You need to run `pip uninstall mmcv` first if you have mmcv installed. +If mmcv and mmcv-full are both installed, there will be `ModuleNotFoundError`. + +## Installation + +1. Create a conda virtual environment and activate it. + + ```shell + conda create -n open-mmlab python=3.7 -y + conda activate open-mmlab + ``` + +2. Install PyTorch and torchvision following the [official instructions](https://pytorch.org/), e.g., + + ```shell + conda install pytorch torchvision -c pytorch + ``` + + Note: Make sure that your compilation CUDA version and runtime CUDA version match. + You can check the supported CUDA version for precompiled packages on the [PyTorch website](https://pytorch.org/). + + `E.g.1` If you have CUDA 10.1 installed under `/usr/local/cuda` and would like to install + PyTorch 1.5, you need to install the prebuilt PyTorch with CUDA 10.1. + + ```shell + conda install pytorch cudatoolkit=10.1 torchvision -c pytorch + ``` + + `E.g. 2` If you have CUDA 9.2 installed under `/usr/local/cuda` and would like to install + PyTorch 1.3.1., you need to install the prebuilt PyTorch with CUDA 9.2. + + ```shell + conda install pytorch=1.3.1 cudatoolkit=9.2 torchvision=0.4.2 -c pytorch + ``` + + If you build PyTorch from source instead of installing the prebuilt pacakge, + you can use more CUDA versions such as 9.0. + +3. Install mmcv-full, we recommend you to install the pre-build package as below. + + ```shell + pip install mmcv-full==latest+torch1.6.0+cu101 -f https://download.openmmlab.com/mmcv/dist/index.html + ``` + + See [here](https://github.com/open-mmlab/mmcv#install-with-pip) for different versions of MMCV compatible to different PyTorch and CUDA versions. + Optionally you can choose to compile mmcv from source by the following command + + ```shell + git clone https://github.com/open-mmlab/mmcv.git + cd mmcv + MMCV_WITH_OPS=1 pip install -e . # package mmcv-full will be installed after this step + cd .. + ``` + + Or directly run + + ```shell + pip install mmcv-full + ``` + +4. Clone the MMDetection repository. + + ```shell + git clone https://github.com/open-mmlab/mmdetection.git + cd mmdetection + ``` + +5. Install build requirements and then install MMDetection. + + ```shell + pip install -r requirements/build.txt + pip install -v -e . # or "python setup.py develop" + ``` + +Note: + +a. Following the above instructions, MMDetection is installed on `dev` mode +, any local modifications made to the code will take effect without the need to reinstall it. + +b. If you would like to use `opencv-python-headless` instead of `opencv +-python`, +you can install it before installing MMCV. + +c. Some dependencies are optional. Simply running `pip install -v -e .` will + only install the minimum runtime requirements. To use optional dependencies like `albumentations` and `imagecorruptions` either install them manually with `pip install -r requirements/optional.txt` or specify desired extras when calling `pip` (e.g. `pip install -v -e .[optional]`). Valid keys for the extras field are: `all`, `tests`, `build`, and `optional`. + +### Install with CPU only + +The code can be built for CPU only environment (where CUDA isn't available). + +In CPU mode you can run the demo/webcam_demo.py for example. +However some functionality is gone in this mode: + +- Deformable Convolution +- Modulated Deformable Convolution +- ROI pooling +- Deformable ROI pooling +- CARAFE: Content-Aware ReAssembly of FEatures +- SyncBatchNorm +- CrissCrossAttention: Criss-Cross Attention +- MaskedConv2d +- Temporal Interlace Shift +- nms_cuda +- sigmoid_focal_loss_cuda +- bbox_overlaps + +So if you try to run inference with a model containing above ops you will get an error. The following table lists the related methods that cannot inference on CPU due to dependency on these operators + +| Operator | Model | +| :-----------------------------------------------------: | :----------------------------------------------------------: | +| Deformable Convolution/Modulated Deformable Convolution | DCN、Guided Anchoring、RepPoints、CentripetalNet、VFNet、CascadeRPN、NAS-FCOS、DetectoRS | +| MaskedConv2d | Guided Anchoring | +| CARAFE | CARAFE | +| SyncBatchNorm | ResNeSt | + +**Notice**: MMDetection does not support training with CPU for now. + +### Another option: Docker Image + +We provide a [Dockerfile](https://github.com/open-mmlab/mmdetection/blob/master/docker/Dockerfile) to build an image. Ensure that you are using [docker version](https://docs.docker.com/engine/install/) >=19.03. + +```shell +# build an image with PyTorch 1.6, CUDA 10.1 +docker build -t mmdetection docker/ +``` + +Run it with + +```shell +docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection/data mmdetection +``` + +### A from-scratch setup script + +Assuming that you already have CUDA 10.1 installed, here is a full script for setting up MMDetection with conda. + +```shell +conda create -n open-mmlab python=3.7 -y +conda activate open-mmlab + +conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch -y + +# install the latest mmcv +pip install mmcv-full==latest+torch1.6.0+cu101 -f https://download.openmmlab.com/mmcv/dist/index.html + +# install mmdetection +git clone https://github.com/open-mmlab/mmdetection.git +cd mmdetection +pip install -r requirements/build.txt +pip install -v -e . +``` + +### Developing with multiple MMDetection versions + +The train and test scripts already modify the `PYTHONPATH` to ensure the script use the MMDetection in the current directory. + +To use the default MMDetection installed in the environment rather than that you are working with, you can remove the following line in those scripts + +```shell +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH +``` + +## Verification + +To verify whether MMDetection and the required environment are installed correctly, we can run sample Python code to initialize a detector and run inference a demo image: + +```python +from mmdet.apis import init_detector, inference_detector + +config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' +# download the checkpoint from model zoo and put it in `checkpoints/` +# url: http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth +checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth' +device = 'cuda:0' +# init a detector +model = init_detector(config_file, checkpoint_file, device=device) +# inference the demo image +inference_detector(model, 'demo/demo.jpg') +``` + +The above code is supposed to run successfully upon you finish the installation. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/index.rst b/PyTorch/NLP/Conformer-main/mmdetection/docs/index.rst new file mode 100644 index 00000000..5b30e241 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/index.rst @@ -0,0 +1,50 @@ +Welcome to MMDetection's documentation! +======================================= + +.. toctree:: + :maxdepth: 2 + :caption: Get Started + + get_started.md + modelzoo_statistics.md + model_zoo.md + +.. toctree:: + :maxdepth: 2 + :caption: Quick Run + + 1_exist_data_model.md + 2_new_data_model.md + +.. toctree:: + :maxdepth: 2 + :caption: Tutorials + + tutorials/index.rst + +.. toctree:: + :maxdepth: 2 + :caption: Useful Tools and Scripts + + useful_tools.md + +.. toctree:: + :maxdepth: 2 + :caption: Notes + + conventions.md + compatibility.md + projects.md + changelog.md + faq.md + +.. toctree:: + :caption: API Reference + + api.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/make.bat b/PyTorch/NLP/Conformer-main/mmdetection/docs/make.bat new file mode 100644 index 00000000..922152e9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/model_zoo.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/model_zoo.md new file mode 100644 index 00000000..fbf11f71 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/model_zoo.md @@ -0,0 +1,267 @@ +# Benchmark and Model Zoo + +## Mirror sites + +We use AWS as the main site to host our model zoo, and maintain a mirror on aliyun. +You can replace `https://s3.ap-northeast-2.amazonaws.com/open-mmlab` with `https://open-mmlab.oss-cn-beijing.aliyuncs.com` in model urls. + +## Common settings + +- All models were trained on `coco_2017_train`, and tested on the `coco_2017_val`. +- We use distributed training. +- All pytorch-style pretrained backbones on ImageNet are from PyTorch model zoo, caffe-style pretrained backbones are converted from the newly released model from detectron2. +- For fair comparison with other codebases, we report the GPU memory as the maximum value of `torch.cuda.max_memory_allocated()` for all 8 GPUs. Note that this value is usually less than what `nvidia-smi` shows. +- We report the inference time as the total time of network forwarding and post-processing, excluding the data loading time. Results are obtained with the script [benchmark.py](https://github.com/open-mmlab/mmdetection/blob/master/tools/analysis_tools/benchmark.py) which computes the average time on 2000 images. + +## Baselines + +### RPN + +Please refer to [RPN](https://github.com/open-mmlab/mmdetection/blob/master/configs/rpn) for details. + +### Faster R-CNN + +Please refer to [Faster R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn) for details. + +### Mask R-CNN + +Please refer to [Mask R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/mask_rcnn) for details. + +### Fast R-CNN (with pre-computed proposals) + +Please refer to [Fast R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/fast_rcnn) for details. + +### RetinaNet + +Please refer to [RetinaNet](https://github.com/open-mmlab/mmdetection/blob/master/configs/retinanet) for details. + +### Cascade R-CNN and Cascade Mask R-CNN + +Please refer to [Cascade R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/cascade_rcnn) for details. + +### Hybrid Task Cascade (HTC) + +Please refer to [HTC](https://github.com/open-mmlab/mmdetection/blob/master/configs/htc) for details. + +### SSD + +Please refer to [SSD](https://github.com/open-mmlab/mmdetection/blob/master/configs/ssd) for details. + +### Group Normalization (GN) + +Please refer to [Group Normalization](https://github.com/open-mmlab/mmdetection/blob/master/configs/gn) for details. + +### Weight Standardization + +Please refer to [Weight Standardization](https://github.com/open-mmlab/mmdetection/blob/master/configs/gn+ws) for details. + +### Deformable Convolution v2 + +Please refer to [Deformable Convolutional Networks](https://github.com/open-mmlab/mmdetection/blob/master/configs/dcn) for details. + +### CARAFE: Content-Aware ReAssembly of FEatures + +Please refer to [CARAFE](https://github.com/open-mmlab/mmdetection/blob/master/configs/carafe) for details. + +### Instaboost + +Please refer to [Instaboost](https://github.com/open-mmlab/mmdetection/blob/master/configs/instaboost) for details. + +### Libra R-CNN + +Please refer to [Libra R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/libra_rcnn) for details. + +### Guided Anchoring + +Please refer to [Guided Anchoring](https://github.com/open-mmlab/mmdetection/blob/master/configs/guided_anchoring) for details. + +### FCOS + +Please refer to [FCOS](https://github.com/open-mmlab/mmdetection/blob/master/configs/fcos) for details. + +### FoveaBox + +Please refer to [FoveaBox](https://github.com/open-mmlab/mmdetection/blob/master/configs/foveabox) for details. + +### RepPoints + +Please refer to [RepPoints](https://github.com/open-mmlab/mmdetection/blob/master/configs/reppoints) for details. + +### FreeAnchor + +Please refer to [FreeAnchor](https://github.com/open-mmlab/mmdetection/blob/master/configs/free_anchor) for details. + +### Grid R-CNN (plus) + +Please refer to [Grid R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/grid_rcnn) for details. + +### GHM + +Please refer to [GHM](https://github.com/open-mmlab/mmdetection/blob/master/configs/ghm) for details. + +### GCNet + +Please refer to [GCNet](https://github.com/open-mmlab/mmdetection/blob/master/configs/gcnet) for details. + +### HRNet + +Please refer to [HRNet](https://github.com/open-mmlab/mmdetection/blob/master/configs/hrnet) for details. + +### Mask Scoring R-CNN + +Please refer to [Mask Scoring R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/ms_rcnn) for details. + +### Train from Scratch + +Please refer to [Rethinking ImageNet Pre-training](https://github.com/open-mmlab/mmdetection/blob/master/configs/scratch) for details. + +### NAS-FPN + +Please refer to [NAS-FPN](https://github.com/open-mmlab/mmdetection/blob/master/configs/nas_fpn) for details. + +### ATSS + +Please refer to [ATSS](https://github.com/open-mmlab/mmdetection/blob/master/configs/atss) for details. + +### FSAF + +Please refer to [FSAF](https://github.com/open-mmlab/mmdetection/blob/master/configs/fsaf) for details. + +### RegNetX + +Please refer to [RegNet](https://github.com/open-mmlab/mmdetection/blob/master/configs/regnet) for details. + +### Res2Net + +Please refer to [Res2Net](https://github.com/open-mmlab/mmdetection/blob/master/configs/res2net) for details. + +### GRoIE + +Please refer to [GRoIE](https://github.com/open-mmlab/mmdetection/blob/master/configs/groie) for details. + +### Dynamic R-CNN + +Please refer to [Dynamic R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/dynamic_rcnn) for details. + +### PointRend + +Please refer to [PointRend](https://github.com/open-mmlab/mmdetection/blob/master/configs/point_rend) for details. + +### DetectoRS + +Please refer to [DetectoRS](https://github.com/open-mmlab/mmdetection/blob/master/configs/detectors) for details. + +### Generalized Focal Loss + +Please refer to [Generalized Focal Loss](https://github.com/open-mmlab/mmdetection/blob/master/configs/gfl) for details. + +### CornerNet + +Please refer to [CornerNet](https://github.com/open-mmlab/mmdetection/blob/master/configs/cornernet) for details. + +### YOLOv3 + +Please refer to [YOLOv3](https://github.com/open-mmlab/mmdetection/blob/master/configs/yolo) for details. + +### PAA + +Please refer to [PAA](https://github.com/open-mmlab/mmdetection/blob/master/configs/paa) for details. + +### SABL + +Please refer to [SABL](https://github.com/open-mmlab/mmdetection/blob/master/configs/sabl) for details. + +### CentripetalNet + +Please refer to [CentripetalNet](https://github.com/open-mmlab/mmdetection/blob/master/configs/centripetalnet) for details. + +### ResNeSt + +Please refer to [ResNeSt](https://github.com/open-mmlab/mmdetection/blob/master/configs/resnest) for details. + +### DETR + +Please refer to [DETR](https://github.com/open-mmlab/mmdetection/blob/master/configs/detr) for details. + +### Other datasets + +We also benchmark some methods on [PASCAL VOC](https://github.com/open-mmlab/mmdetection/blob/master/configs/pascal_voc), [Cityscapes](https://github.com/open-mmlab/mmdetection/blob/master/configs/cityscapes) and [WIDER FACE](https://github.com/open-mmlab/mmdetection/blob/master/configs/wider_face). + +### Pre-trained Models + +We also train [Faster R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn) and [Mask R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/mask_rcnn) using ResNet-50 and [RegNetX-3.2G](https://github.com/open-mmlab/mmdetection/blob/master/configs/regnet) with multi-scale training and longer schedules. These models serve as strong pre-trained models for downstream tasks for convenience. + +## Speed benchmark + +We compare the training speed of Mask R-CNN with some other popular frameworks (The data is copied from [detectron2](https://github.com/facebookresearch/detectron2/blob/master/docs/notes/benchmarks.md)). +For mmdetection, we benchmark with [mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py](https://github.com/open-mmlab/mmdetection/blob/master/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_poly_1x_coco_v1.py), which should have the same setting with [mask_rcnn_R_50_FPN_noaug_1x.yaml](https://github.com/facebookresearch/detectron2/blob/master/configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml) of detectron2. +We also provide the [checkpoint](http://download.openmmlab.com/mmdetection/v2.0/benchmark/mask_rcnn_r50_caffe_fpn_poly_1x_coco_no_aug/mask_rcnn_r50_caffe_fpn_poly_1x_coco_no_aug_compare_20200518-10127928.pth) and [training log](http://download.openmmlab.com/mmdetection/v2.0/benchmark/mask_rcnn_r50_caffe_fpn_poly_1x_coco_no_aug/mask_rcnn_r50_caffe_fpn_poly_1x_coco_no_aug_20200518_105755.log.json) for reference. The throughput is computed as the average throughput in iterations 100-500 to skip GPU warmup time. + +| Implementation | Throughput (img/s) | +|----------------------|--------------------| +| [Detectron2](https://github.com/facebookresearch/detectron2) | 62 | +| [MMDetection](https://github.com/open-mmlab/mmdetection) | 61 | +| [maskrcnn-benchmark](https://github.com/facebookresearch/maskrcnn-benchmark/) | 53 | +| [tensorpack](https://github.com/tensorpack/tensorpack/tree/master/examples/FasterRCNN) | 50 | +| [simpledet](https://github.com/TuSimple/simpledet/) | 39 | +| [Detectron](https://github.com/facebookresearch/Detectron) | 19 | +| [matterport/Mask_RCNN](https://github.com/matterport/Mask_RCNN/) | 14 | + +## Comparison with Detectron2 + +We compare mmdetection with [Detectron2](https://github.com/facebookresearch/detectron2.git) in terms of speed and performance. +We use the commit id [185c27e](https://github.com/facebookresearch/detectron2/tree/185c27e4b4d2d4c68b5627b3765420c6d7f5a659)(30/4/2020) of detectron. +For fair comparison, we install and run both frameworks on the same machine. + +### Hardware + +- 8 NVIDIA Tesla V100 (32G) GPUs +- Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz + +### Software environment + +- Python 3.7 +- PyTorch 1.4 +- CUDA 10.1 +- CUDNN 7.6.03 +- NCCL 2.4.08 + +### Performance + +| Type | Lr schd | Detectron2 | mmdetection | Download | +|--------------|---------|-------------|-------------|-------------| +| [Faster R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco.py) | 1x | [37.9](https://github.com/facebookresearch/detectron2/blob/master/configs/COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml) | 38.0 | [model](http://download.openmmlab.com/mmdetection/v2.0/benchmark/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco-5324cff8.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/benchmark/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco_20200429_234554.log.json) | +| [Mask R-CNN](https://github.com/open-mmlab/mmdetection/blob/master/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py) | 1x | [38.6 & 35.2](https://github.com/facebookresearch/detectron2/blob/master/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml) | 38.8 & 35.4 | [model](http://download.openmmlab.com/mmdetection/v2.0/benchmark/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco-dbecf295.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/benchmark/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco_20200430_054239.log.json) | +| [Retinanet](https://github.com/open-mmlab/mmdetection/blob/master/configs/retinanet/retinanet_r50_caffe_fpn_mstrain_1x_coco.py) | 1x | [36.5](https://github.com/facebookresearch/detectron2/blob/master/configs/COCO-Detection/retinanet_R_50_FPN_1x.yaml) | 37.0 | [model](http://download.openmmlab.com/mmdetection/v2.0/benchmark/retinanet_r50_caffe_fpn_mstrain_1x_coco/retinanet_r50_caffe_fpn_mstrain_1x_coco-586977a0.pth) | [log](http://download.openmmlab.com/mmdetection/v2.0/benchmark/retinanet_r50_caffe_fpn_mstrain_1x_coco/retinanet_r50_caffe_fpn_mstrain_1x_coco_20200430_014748.log.json) | + +### Training Speed + +The training speed is measure with s/iter. The lower, the better. + +| Type | Detectron2 | mmdetection | +|--------------|------------|-------------| +| Faster R-CNN | 0.210 | 0.216 | +| Mask R-CNN | 0.261 | 0.265 | +| Retinanet | 0.200 | 0.205 | + +### Inference Speed + +The inference speed is measured with fps (img/s) on a single GPU, the higher, the better. +To be consistent with Detectron2, we report the pure inference speed (without the time of data loading). +For Mask R-CNN, we exclude the time of RLE encoding in post-processing. +We also include the officially reported speed in the parentheses, which is slightly higher +than the results tested on our server due to differences of hardwares. + +| Type | Detectron2 | mmdetection | +|--------------|-------------|-------------| +| Faster R-CNN | 25.6 (26.3) | 22.2 | +| Mask R-CNN | 22.5 (23.3) | 19.6 | +| Retinanet | 17.8 (18.2) | 20.6 | + +### Training memory + +| Type | Detectron2 | mmdetection | +|--------------|------------|-------------| +| Faster R-CNN | 3.0 | 3.8 | +| Mask R-CNN | 3.4 | 3.9 | +| Retinanet | 3.9 | 3.4 | diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/projects.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/projects.md new file mode 100644 index 00000000..110e1df8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/projects.md @@ -0,0 +1,46 @@ +# Projects based on MMDetection + +There are many projects built upon MMDetection. +We list some of them as examples of how to extend MMDetection for your own projects. +Pull requests are also welcomed. + +## Projects as an extension + +Some projects extend the boundary of MMDetection for deployment or other research fields. +They reveal the potential of what MMDetection can do. We list several of them as below. + +- [OTEDetection](https://github.com/opencv/mmdetection): OpenVINO training extensions for object detection. +- [MMDetection3d](https://github.com/open-mmlab/mmdetection3d): OpenMMLab's next-generation platform for general 3D object detection. + +## Projects of papers + +There are also projects released with papers. +Some of the papers are published in top-tier conferences (CVPR, ICCV, and ECCV), the others are also highly influential. +To make this list also a reference for the community to develop and compare new object detection algorithms, we list them following the time order of top-tier conferences. +Methods already supported and maintained by MMDetection are not listed. + +- Overcoming Classifier Imbalance for Long-tail Object Detection with Balanced Group Softmax, CVPR2020. [[paper]](http://openaccess.thecvf.com/content_CVPR_2020/papers/Li_Overcoming_Classifier_Imbalance_for_Long-Tail_Object_Detection_With_Balanced_Group_CVPR_2020_paper.pdf)[[github]](https://github.com/FishYuLi/BalancedGroupSoftmax) +- Coherent Reconstruction of Multiple Humans from a Single Image, CVPR2020. [[paper]](https://jiangwenpl.github.io/multiperson/)[[github]](https://github.com/JiangWenPL/multiperson) +- Look-into-Object: Self-supervised Structure Modeling for Object Recognition, CVPR 2020. [[paper]](http://openaccess.thecvf.com/content_CVPR_2020/papers/Zhou_Look-Into-Object_Self-Supervised_Structure_Modeling_for_Object_Recognition_CVPR_2020_paper.pdf)[[github]](https://github.com/JDAI-CV/LIO) +- Video Panoptic Segmentation, CVPR2020. [[paper]](https://arxiv.org/abs/2006.11339)[[github]](https://github.com/mcahny/vps) +- D2Det: Towards High Quality Object Detection and Instance Segmentation, CVPR2020. [[paper]](http://openaccess.thecvf.com/content_CVPR_2020/html/Cao_D2Det_Towards_High_Quality_Object_Detection_and_Instance_Segmentation_CVPR_2020_paper.html)[[github]](https://github.com/JialeCao001/D2Det) +- CentripetalNet: Pursuing High-quality Keypoint Pairs for Object Detection, CVPR2020. [[paper]](https://arxiv.org/abs/2003.09119)[[github]](https://github.com/KiveeDong/CentripetalNet) +- Learning a Unified Sample Weighting Network for Object Detection, CVPR 2020. [[paper]](http://openaccess.thecvf.com/content_CVPR_2020/html/Cai_Learning_a_Unified_Sample_Weighting_Network_for_Object_Detection_CVPR_2020_paper.html)[[github]](https://github.com/caiqi/sample-weighting-network) +- Scale-equalizing Pyramid Convolution for Object Detection, CVPR2020. [[paper]](https://arxiv.org/abs/2005.03101) [[github]](https://github.com/jshilong/SEPC) +- Revisiting the Sibling Head in Object Detector, CVPR2020. [[paper]](https://arxiv.org/abs/2003.07540)[[github]](https://github.com/Sense-X/TSD) +- PolarMask: Single Shot Instance Segmentation with Polar Representation, CVPR2020. [[paper]](https://arxiv.org/abs/1909.13226)[[github]](https://github.com/xieenze/PolarMask) +- Hit-Detector: Hierarchical Trinity Architecture Search for Object Detection, CVPR2020. [[paper]](https://arxiv.org/abs/2003.11818)[[github]](https://github.com/ggjy/HitDet.pytorch) +- ZeroQ: A Novel Zero Shot Quantization Framework, CVPR2020. [[paper]](https://arxiv.org/abs/2001.00281)[[github]](https://github.com/amirgholami/ZeroQ) +- CBNet: A Novel Composite Backbone Network Architecture for Object Detection, AAAI2020. [[paper]](https://aaai.org/Papers/AAAI/2020GB/AAAI-LiuY.1833.pdf)[[github]](https://github.com/VDIGPKU/CBNet) +- RDSNet: A New Deep Architecture for Reciprocal Object Detection and Instance Segmentation, AAAI2020. [[paper]](https://arxiv.org/abs/1912.05070)[[github]](https://github.com/wangsr126/RDSNet) +- Training-Time-Friendly Network for Real-Time Object Detection, AAAI2020. [[paper]](https://arxiv.org/abs/1909.00700)[[github]](https://github.com/ZJULearning/ttfnet) +- Cascade RPN: Delving into High-Quality Region Proposal Network with Adaptive Convolution, NeurIPS 2019. [[paper]](https://arxiv.org/abs/1909.06720)[[github]](https://github.com/thangvubk/Cascade-RPN) +- Reasoning R-CNN: Unifying Adaptive Global Reasoning into Large-scale Object Detection, CVPR2019. [[paper]](http://openaccess.thecvf.com/content_CVPR_2019/papers/Xu_Reasoning-RCNN_Unifying_Adaptive_Global_Reasoning_Into_Large-Scale_Object_Detection_CVPR_2019_paper.pdf)[[github]](https://github.com/chanyn/Reasoning-RCNN) +- Learning RoI Transformer for Oriented Object Detection in Aerial Images, CVPR2019. [[paper]](https://arxiv.org/abs/1812.00155)[[github]](https://github.com/dingjiansw101/AerialDetection) +- SOLO: Segmenting Objects by Locations. [[paper]](https://arxiv.org/abs/1912.04488)[[github]](https://github.com/WXinlong/SOLO) +- SOLOv2: Dynamic, Faster and Stronger. [[paper]](https://arxiv.org/abs/2003.10152)[[github]](https://github.com/WXinlong/SOLO) +- Dense Peppoints: Representing Visual Objects with Dense Point Sets. [[paper]](https://arxiv.org/abs/1912.11473)[[github]](https://github.com/justimyhxu/Dense-RepPoints) +- IterDet: Iterative Scheme for Object Detection in Crowded Environments. [[paper]](https://arxiv.org/abs/2005.05708)[[github]](https://github.com/saic-vul/iterdet) +- Cross-Iteration Batch Normalization. [[paper]](https://arxiv.org/abs/2002.05712)[[github]](https://github.com/Howal/Cross-iterationBatchNorm) +- Pedestrian Detection: The Elephant In The Room. [[paper]](https://arxiv.org/abs/2003.08799)[[github]](https://github.com/hasanirtiza/Pedestron) +- A Ranking-based, Balanced Loss Function Unifying Classification and Localisation in Object Detection, NeurIPS2020 [[paper]](https://arxiv.org/abs/2009.13592)[[github]](https://github.com/kemaloksuz/aLRPLoss) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/robustness_benchmarking.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/robustness_benchmarking.md new file mode 100644 index 00000000..60bd0e64 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/robustness_benchmarking.md @@ -0,0 +1,110 @@ +# Corruption Benchmarking + +## Introduction + +We provide tools to test object detection and instance segmentation models on the image corruption benchmark defined in [Benchmarking Robustness in Object Detection: Autonomous Driving when Winter is Coming](https://arxiv.org/abs/1907.07484). +This page provides basic tutorials how to use the benchmark. + +```latex +@article{michaelis2019winter, + title={Benchmarking Robustness in Object Detection: + Autonomous Driving when Winter is Coming}, + author={Michaelis, Claudio and Mitzkus, Benjamin and + Geirhos, Robert and Rusak, Evgenia and + Bringmann, Oliver and Ecker, Alexander S. and + Bethge, Matthias and Brendel, Wieland}, + journal={arXiv:1907.07484}, + year={2019} +} +``` + +![image corruption example](../resources/corruptions_sev_3.png) + +## About the benchmark + +To submit results to the benchmark please visit the [benchmark homepage](https://github.com/bethgelab/robust-detection-benchmark) + +The benchmark is modelled after the [imagenet-c benchmark](https://github.com/hendrycks/robustness) which was originally +published in [Benchmarking Neural Network Robustness to Common Corruptions and Perturbations](https://arxiv.org/abs/1903.12261) (ICLR 2019) by Dan Hendrycks and Thomas Dietterich. + +The image corruption functions are included in this library but can be installed separately using: + +```shell +pip install imagecorruptions +``` + +Compared to imagenet-c a few changes had to be made to handle images of arbitrary size and greyscale images. +We also modfied the 'motion blur' and 'snow' corruptions to remove dependency from a linux specific library, +which would have to be installed separately otherwise. For details please refer to the [imagecorruptions repository](https://github.com/bethgelab/imagecorruptions). + +## Inference with pretrained models + +We provide a testing script to evaluate a models performance on any combination of the corruptions provided in the benchmark. + +### Test a dataset + +- [x] single GPU testing +- [ ] multiple GPU testing +- [ ] visualize detection results + +You can use the following commands to test a models performance under the 15 corruptions used in the benchmark. + +```shell +# single-gpu testing +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] +``` + +Alternatively different group of corruptions can be selected. + +```shell +# noise +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --corruptions noise + +# blur +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --corruptions blur + +# wetaher +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --corruptions weather + +# digital +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --corruptions digital +``` + +Or a costom set of corruptions e.g.: + +```shell +# gaussian noise, zoom blur and snow +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --corruptions gaussian_noise zoom_blur snow +``` + +Finally the corruption severities to evaluate can be chosen. +Severity 0 corresponds to clean data and the effect increases from 1 to 5. + +```shell +# severity 1 +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --severities 1 + +# severities 0,2,4 +python tools/test_robustness.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] --severities 0 2 4 +``` + +## Results for modelzoo models + +The results on COCO 2017val are shown in the below table. + +Model | Backbone | Style | Lr schd | box AP clean | box AP corr. | box % | mask AP clean | mask AP corr. | mask % | +:-----:|:---------:|:-------:|:-------:|:------------:|:------------:|:-----:|:-------------:|:-------------:|:------:| +Faster R-CNN | R-50-FPN | pytorch | 1x | 36.3 | 18.2 | 50.2 | - | - | - | +Faster R-CNN | R-101-FPN | pytorch | 1x | 38.5 | 20.9 | 54.2 | - | - | - | +Faster R-CNN | X-101-32x4d-FPN | pytorch |1x | 40.1 | 22.3 | 55.5 | - | - | - | +Faster R-CNN | X-101-64x4d-FPN | pytorch |1x | 41.3 | 23.4 | 56.6 | - | - | - | +Faster R-CNN | R-50-FPN-DCN | pytorch | 1x | 40.0 | 22.4 | 56.1 | - | - | - | +Faster R-CNN | X-101-32x4d-FPN-DCN | pytorch | 1x | 43.4 | 26.7 | 61.6 | - | - | - | +Mask R-CNN | R-50-FPN | pytorch | 1x | 37.3 | 18.7 | 50.1 | 34.2 | 16.8 | 49.1 | +Mask R-CNN | R-50-FPN-DCN | pytorch | 1x | 41.1 | 23.3 | 56.7 | 37.2 | 20.7 | 55.7 | +Cascade R-CNN | R-50-FPN | pytorch | 1x | 40.4 | 20.1 | 49.7 | - | - | - | +Cascade Mask R-CNN | R-50-FPN | pytorch | 1x| 41.2 | 20.7 | 50.2 | 35.7 | 17.6 | 49.3 | +RetinaNet | R-50-FPN | pytorch | 1x | 35.6 | 17.8 | 50.1 | - | - | - | +Hybrid Task Cascade | X-101-64x4d-FPN-DCN | pytorch | 1x | 50.6 | 32.7 | 64.7 | 43.8 | 28.1 | 64.0 | + +Results may vary slightly due to the stochastic application of the corruptions. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/stat.py b/PyTorch/NLP/Conformer-main/mmdetection/docs/stat.py new file mode 100644 index 00000000..9625c62e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/stat.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +import functools as func +import glob +import os.path as osp +import re + +import numpy as np + +url_prefix = 'https://github.com/open-mmlab/mmdetection/blob/master/' + +files = sorted(glob.glob('../configs/*/README.md')) + +stats = [] +titles = [] +num_ckpts = 0 + +for f in files: + url = osp.dirname(f.replace('../', url_prefix)) + + with open(f, 'r') as content_file: + content = content_file.read() + + title = content.split('\n')[0].replace('# ', '').strip() + ckpts = set(x.lower().strip() + for x in re.findall(r'\[model\]\((https?.*)\)', content)) + + if len(ckpts) == 0: + continue + + _papertype = [x for x in re.findall(r'\[([A-Z]+)\]', content)] + assert len(_papertype) > 0 + papertype = _papertype[0] + + paper = set([(papertype, title)]) + + titles.append(title) + num_ckpts += len(ckpts) + + statsmsg = f""" +\t* [{papertype}] [{title}]({url}) ({len(ckpts)} ckpts) +""" + stats.append((paper, ckpts, statsmsg)) + +allpapers = func.reduce(lambda a, b: a.union(b), [p for p, _, _ in stats]) +msglist = '\n'.join(x for _, _, x in stats) + +papertypes, papercounts = np.unique([t for t, _ in allpapers], + return_counts=True) +countstr = '\n'.join( + [f' - {t}: {c}' for t, c in zip(papertypes, papercounts)]) + +modelzoo = f""" +# Model Zoo Statistics + +* Number of papers: {len(set(titles))} +{countstr} + +* Number of checkpoints: {num_ckpts} + +{msglist} +""" + +with open('modelzoo_statistics.md', 'w') as f: + f.write(modelzoo) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/config.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/config.md new file mode 100644 index 00000000..b5a54d16 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/config.md @@ -0,0 +1,527 @@ +# Tutorial 1: Learn about Configs + +We incorporate modular and inheritance design into our config system, which is convenient to conduct various experiments. +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. + +## Modify config through script arguments + +When submitting jobs using "tools/train.py" or "tools/test.py", you may specify `--cfg-options` to in-place modify the config. + +- Update config keys of dict chains. + + The config options can be specified following the order of the dict keys in the original config. + For example, `--cfg-options model.backbone.norm_eval=False` changes the all BN modules in model backbones to `train` mode. + +- Update keys inside a list of configs. + + Some config dicts are composed as a list in your config. For example, the training pipeline `data.train.pipeline` is normally a list + e.g. `[dict(type='LoadImageFromFile'), ...]`. If you want to change `'LoadImageFromFile'` to `'LoadImageFromWebcam'` in the pipeline, + you may specify `--cfg-options data.train.pipeline.0.type=LoadImageFromWebcam`. + +- Update values of list/tuples. + + If the value to be updated is a list or a tuple. For example, the config file normally sets `workflow=[('train', 1)]`. If you want to + change this key, you may specify `--cfg-options workflow="[(train,1),(val,1)]"`. 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. + +## Config File Structure + +There are 4 basic component types under `config/_base_`, dataset, model, schedule, default_runtime. +Many methods could be easily constructed with one of each like Faster R-CNN, Mask R-CNN, Cascade R-CNN, RPN, SSD. +The configs that are composed by components from `_base_` are called _primitive_. + +For 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. + +For easy understanding, we recommend contributors to inherit from exiting methods. +For example, if some modification is made base on Faster R-CNN, user may first inherit the basic Faster R-CNN structure by specifying `_base_ = ../faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py`, then modify the necessary fields in the config files. + +If you are building an entirely new method that does not share the structure with any of the existing methods, you may create a folder `xxx_rcnn` under `configs`, + +Please refer to [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#config) for detailed documentation. + +## Config Name Style + +We follow the below style to name config files. Contributors are advised to follow the same style. + +``` +{model}_[model setting]_{backbone}_{neck}_[norm setting]_[misc]_[gpu x batch_per_gpu]_{schedule}_{dataset} +``` + +`{xxx}` is required field and `[yyy]` is optional. + +- `{model}`: model type like `faster_rcnn`, `mask_rcnn`, etc. +- `[model setting]`: specific setting for some model, like `without_semantic` for `htc`, `moment` for `reppoints`, etc. +- `{backbone}`: backbone type like `r50` (ResNet-50), `x101` (ResNeXt-101). +- `{neck}`: neck type like `fpn`, `pafpn`, `nasfpn`, `c4`. +- `[norm_setting]`: `bn` (Batch Normalization) is used unless specified, other norm layer type could be `gn` (Group Normalization), `syncbn` (Synchronized Batch Normalization). + `gn-head`/`gn-neck` indicates GN is applied in head/neck only, while `gn-all` means GN is applied in the entire model, e.g. backbone, neck, head. +- `[misc]`: miscellaneous setting/plugins of model, e.g. `dconv`, `gcb`, `attention`, `albu`, `mstrain`. +- `[gpu x batch_per_gpu]`: GPUs and samples per GPU, `8x2` is used by default. +- `{schedule}`: training schedule, options are `1x`, `2x`, `20e`, etc. + `1x` and `2x` means 12 epochs and 24 epochs respectively. + `20e` is adopted in cascade models, which denotes 20 epochs. + For `1x`/`2x`, initial learning rate decays by a factor of 10 at the 8/16th and 11/22th epochs. + For `20e`, initial learning rate decays by a factor of 10 at the 16th and 19th epochs. +- `{dataset}`: dataset like `coco`, `cityscapes`, `voc_0712`, `wider_face`. + +## Deprecated train_cfg/test_cfg + +The `train_cfg` and `test_cfg` are deprecated in config file, please specify them in the model config. The original config structure is as below. + +```python +# deprecated +model = dict( + type=..., + ... +) +train_cfg=dict(...) +test_cfg=dict(...) +``` + +The migration example is as below. + +```python +# recommended +model = dict( + type=..., + ... + train_cfg=dict(...), + test_cfg=dict(...), +) +``` + +## An Example of Mask R-CNN + +To help the users have a basic idea of a complete config and the modules in a modern detection system, +we make brief comments on the config of Mask R-CNN using ResNet50 and FPN as the following. +For more detailed usage and the corresponding alternative for each modules, please refer to the API documentation. + +```python +model = dict( + type='MaskRCNN', # The name of detector + pretrained= + 'torchvision://resnet50', # The ImageNet pretrained backbone to be loaded + backbone=dict( # The config of backbone + type='ResNet', # The type of the backbone, refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/backbones/resnet.py#L288 for more details. + depth=50, # The depth of backbone, usually it is 50 or 101 for ResNet and ResNext backbones. + num_stages=4, # Number of stages of the backbone. + out_indices=(0, 1, 2, 3), # The index of output feature maps produced in each stages + frozen_stages=1, # The weights in the first 1 stage are fronzen + norm_cfg=dict( # The config of normalization layers. + type='BN', # Type of norm layer, usually it is BN or GN + requires_grad=True), # Whether to train the gamma and beta in BN + norm_eval=True, # Whether to freeze the statistics in BN + style='pytorch'), # The style of backbone, 'pytorch' means that stride 2 layers are in 3x3 conv, 'caffe' means stride 2 layers are in 1x1 convs. + neck=dict( + type='FPN', # The neck of detector is FPN. We also support 'NASFPN', 'PAFPN', etc. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/necks/fpn.py#L10 for more details. + in_channels=[256, 512, 1024, 2048], # The input channels, this is consistent with the output channels of backbone + out_channels=256, # The output channels of each level of the pyramid feature map + num_outs=5), # The number of output scales + rpn_head=dict( + type='RPNHead', # The type of RPN head is 'RPNHead', we also support 'GARPNHead', etc. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/dense_heads/rpn_head.py#L12 for more details. + in_channels=256, # The input channels of each input feature map, this is consistent with the output channels of neck + feat_channels=256, # Feature channels of convolutional layers in the head. + anchor_generator=dict( # The config of anchor generator + type='AnchorGenerator', # Most of methods use AnchorGenerator, SSD Detectors uses `SSDAnchorGenerator`. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/anchor/anchor_generator.py#L10 for more details + scales=[8], # Basic scale of the anchor, the area of the anchor in one position of a feature map will be scale * base_sizes + ratios=[0.5, 1.0, 2.0], # The ratio between height and width. + strides=[4, 8, 16, 32, 64]), # The strides of the anchor generator. This is consistent with the FPN feature strides. The strides will be taken as base_sizes if base_sizes is not set. + bbox_coder=dict( # Config of box coder to encode and decode the boxes during training and testing + type='DeltaXYWHBBoxCoder', # Type of box coder. 'DeltaXYWHBBoxCoder' is applied for most of methods. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py#L9 for more details. + target_means=[0.0, 0.0, 0.0, 0.0], # The target means used to encode and decode boxes + target_stds=[1.0, 1.0, 1.0, 1.0]), # The standard variance used to encode and decode boxes + loss_cls=dict( # Config of loss function for the classification branch + type='CrossEntropyLoss', # Type of loss for classification branch, we also support FocalLoss etc. + use_sigmoid=True, # RPN usually perform two-class classification, so it usually uses sigmoid function. + loss_weight=1.0), # Loss weight of the classification branch. + loss_bbox=dict( # Config of loss function for the regression branch. + type='L1Loss', # Type of loss, we also support many IoU Losses and smooth L1-loss, etc. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/losses/smooth_l1_loss.py#L56 for implementation. + loss_weight=1.0)), # Loss weight of the regression branch. + roi_head=dict( # RoIHead encapsulates the second stage of two-stage/cascade detectors. + type='StandardRoIHead', # Type of the RoI head. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/roi_heads/standard_roi_head.py#L10 for implementation. + bbox_roi_extractor=dict( # RoI feature extractor for bbox regression. + type='SingleRoIExtractor', # Type of the RoI feature extractor, most of methods uses SingleRoIExtractor. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/roi_heads/roi_extractors/single_level.py#L10 for details. + roi_layer=dict( # Config of RoI Layer + type='RoIAlign', # Type of RoI Layer, DeformRoIPoolingPack and ModulatedDeformRoIPoolingPack are also supported. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/ops/roi_align/roi_align.py#L79 for details. + output_size=7, # The output size of feature maps. + sampling_ratio=0), # Sampling ratio when extracting the RoI features. 0 means adaptive ratio. + out_channels=256, # output channels of the extracted feature. + featmap_strides=[4, 8, 16, 32]), # Strides of multi-scale feature maps. It should be consistent to the architecture of the backbone. + bbox_head=dict( # Config of box head in the RoIHead. + type='Shared2FCBBoxHead', # Type of the bbox head, Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py#L177 for implementation details. + in_channels=256, # Input channels for bbox head. This is consistent with the out_channels in roi_extractor + fc_out_channels=1024, # Output feature channels of FC layers. + roi_feat_size=7, # Size of RoI features + num_classes=80, # Number of classes for classification + bbox_coder=dict( # Box coder used in the second stage. + type='DeltaXYWHBBoxCoder', # Type of box coder. 'DeltaXYWHBBoxCoder' is applied for most of methods. + target_means=[0.0, 0.0, 0.0, 0.0], # Means used to encode and decode box + target_stds=[0.1, 0.1, 0.2, 0.2]), # Standard variance for encoding and decoding. It is smaller since the boxes are more accurate. [0.1, 0.1, 0.2, 0.2] is a conventional setting. + reg_class_agnostic=False, # Whether the regression is class agnostic. + loss_cls=dict( # Config of loss function for the classification branch + type='CrossEntropyLoss', # Type of loss for classification branch, we also support FocalLoss etc. + use_sigmoid=False, # Whether to use sigmoid. + loss_weight=1.0), # Loss weight of the classification branch. + loss_bbox=dict( # Config of loss function for the regression branch. + type='L1Loss', # Type of loss, we also support many IoU Losses and smooth L1-loss, etc. + loss_weight=1.0)), # Loss weight of the regression branch. + mask_roi_extractor=dict( # RoI feature extractor for bbox regression. + type='SingleRoIExtractor', # Type of the RoI feature extractor, most of methods uses SingleRoIExtractor. + roi_layer=dict( # Config of RoI Layer that extracts features for instance segmentation + type='RoIAlign', # Type of RoI Layer, DeformRoIPoolingPack and ModulatedDeformRoIPoolingPack are also supported + output_size=14, # The output size of feature maps. + sampling_ratio=0), # Sampling ratio when extracting the RoI features. + out_channels=256, # Output channels of the extracted feature. + featmap_strides=[4, 8, 16, 32]), # Strides of multi-scale feature maps. + mask_head=dict( # Mask prediction head + type='FCNMaskHead', # Type of mask head, refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py#L21 for implementation details. + num_convs=4, # Number of convolutional layers in mask head. + in_channels=256, # Input channels, should be consistent with the output channels of mask roi extractor. + conv_out_channels=256, # Output channels of the convolutional layer. + num_classes=80, # Number of class to be segmented. + loss_mask=dict( # Config of loss function for the mask branch. + type='CrossEntropyLoss', # Type of loss used for segmentation + use_mask=True, # Whether to only train the mask in the correct class. + loss_weight=1.0)))) # Loss weight of mask branch. + train_cfg = dict( # Config of training hyperparameters for rpn and rcnn + rpn=dict( # Training config of rpn + assigner=dict( # Config of assigner + type='MaxIoUAssigner', # Type of assigner, MaxIoUAssigner is used for many common detectors. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/bbox/assigners/max_iou_assigner.py#L10 for more details. + pos_iou_thr=0.7, # IoU >= threshold 0.7 will be taken as positive samples + neg_iou_thr=0.3, # IoU < threshold 0.3 will be taken as negative samples + min_pos_iou=0.3, # The minimal IoU threshold to take boxes as positive samples + match_low_quality=True, # Whether to match the boxes under low quality (see API doc for more details). + ignore_iof_thr=-1), # IoF threshold for ignoring bboxes + sampler=dict( # Config of positive/negative sampler + type='RandomSampler', # Type of sampler, PseudoSampler and other samplers are also supported. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/bbox/samplers/random_sampler.py#L8 for implementation details. + num=256, # Number of samples + pos_fraction=0.5, # The ratio of positive samples in the total samples. + neg_pos_ub=-1, # The upper bound of negative samples based on the number of positive samples. + add_gt_as_proposals=False), # Whether add GT as proposals after sampling. + allowed_border=-1, # The border allowed after padding for valid anchors. + pos_weight=-1, # The weight of positive samples during training. + debug=False), # Whether to set the debug mode + rpn_proposal=dict( # The config to generate proposals during training + nms_across_levels=False, # Whether to do NMS for boxes across levels + nms_pre=2000, # The number of boxes before NMS + nms_post=1000, # The number of boxes to be kept by NMS + max_num=1000, # The number of boxes to be used after NMS + nms_thr=0.7, # The threshold to be used during NMS + min_bbox_size=0), # The allowed minimal box size + rcnn=dict( # The config for the roi heads. + assigner=dict( # Config of assigner for second stage, this is different for that in rpn + type='MaxIoUAssigner', # Type of assigner, MaxIoUAssigner is used for all roi_heads for now. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/bbox/assigners/max_iou_assigner.py#L10 for more details. + pos_iou_thr=0.5, # IoU >= threshold 0.5 will be taken as positive samples + neg_iou_thr=0.5, # IoU >= threshold 0.5 will be taken as positive samples + min_pos_iou=0.5, # The minimal IoU threshold to take boxes as positive samples + match_low_quality=False, # Whether to match the boxes under low quality (see API doc for more details). + ignore_iof_thr=-1), # IoF threshold for ignoring bboxes + sampler=dict( + type='RandomSampler', # Type of sampler, PseudoSampler and other samplers are also supported. Refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/bbox/samplers/random_sampler.py#L8 for implementation details. + num=512, # Number of samples + pos_fraction=0.25, # The ratio of positive samples in the total samples. + neg_pos_ub=-1, # The upper bound of negative samples based on the number of positive samples. + add_gt_as_proposals=True + ), # Whether add GT as proposals after sampling. + mask_size=28, # Size of mask + pos_weight=-1, # The weight of positive samples during training. + debug=False)) # Whether to set the debug mode + test_cfg = dict( # Config for testing hyperparameters for rpn and rcnn + rpn=dict( # The config to generate proposals during testing + nms_across_levels=False, # Whether to do NMS for boxes across levels + nms_pre=1000, # The number of boxes before NMS + nms_post=1000, # The number of boxes to be kept by NMS + max_num=1000, # The number of boxes to be used after NMS + nms_thr=0.7, # The threshold to be used during NMS + min_bbox_size=0), # The allowed minimal box size + rcnn=dict( # The config for the roi heads. + score_thr=0.05, # Threshold to filter out boxes + nms=dict( # Config of nms in the second stage + type='nms', # Type of nms + iou_thr=0.5), # NMS threshold + max_per_img=100, # Max number of detections of each image + mask_thr_binary=0.5)) # Threshold of mask prediction +dataset_type = 'CocoDataset' # Dataset type, this will be used to define the dataset +data_root = 'data/coco/' # Root path of data +img_norm_cfg = dict( # Image normalization config to normalize the input images + mean=[123.675, 116.28, 103.53], # Mean values used to pre-training the pre-trained backbone models + std=[58.395, 57.12, 57.375], # Standard variance used to pre-training the pre-trained backbone models + to_rgb=True +) # The channel orders of image used to pre-training the pre-trained backbone models +train_pipeline = [ # Training pipeline + dict(type='LoadImageFromFile'), # First pipeline to load images from file path + dict( + type='LoadAnnotations', # Second pipeline to load annotations for current image + with_bbox=True, # Whether to use bounding box, True for detection + with_mask=True, # Whether to use instance mask, True for instance segmentation + poly2mask=False), # Whether to convert the polygon mask to instance mask, set False for acceleration and to save memory + dict( + type='Resize', # Augmentation pipeline that resize the images and their annotations + img_scale=(1333, 800), # The largest scale of image + keep_ratio=True + ), # whether to keep the ratio between height and width. + dict( + type='RandomFlip', # Augmentation pipeline that flip the images and their annotations + flip_ratio=0.5), # The ratio or probability to flip + dict( + type='Normalize', # Augmentation pipeline that normalize the input images + mean=[123.675, 116.28, 103.53], # These keys are the same of img_norm_cfg since the + std=[58.395, 57.12, 57.375], # keys of img_norm_cfg are used here as arguments + to_rgb=True), + dict( + type='Pad', # Padding config + size_divisor=32), # The number the padded images should be divisible + dict(type='DefaultFormatBundle'), # Default format bundle to gather data in the pipeline + dict( + type='Collect', # Pipeline that decides which keys in the data should be passed to the detector + keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']) +] +test_pipeline = [ + dict(type='LoadImageFromFile'), # First pipeline to load images from file path + dict( + type='MultiScaleFlipAug', # An encapsulation that encapsulates the testing augmentations + img_scale=(1333, 800), # Decides the largest scale for testing, used for the Resize pipeline + flip=False, # Whether to flip images during testing + transforms=[ + dict(type='Resize', # Use resize augmentation + keep_ratio=True), # Whether to keep the ratio between height and width, the img_scale set here will be supressed by the img_scale set above. + dict(type='RandomFlip'), # Thought RandomFlip is added in pipeline, it is not used because flip=False + dict( + type='Normalize', # Normalization config, the values are from img_norm_cfg + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict( + type='Pad', # Padding config to pad images divisable by 32. + size_divisor=32), + dict( + type='ImageToTensor', # convert image to tensor + keys=['img']), + dict( + type='Collect', # Collect pipeline that collect necessary keys for testing. + keys=['img']) + ]) +] +data = dict( + samples_per_gpu=2, # Batch size of a single GPU + workers_per_gpu=2, # Worker to pre-fetch data for each single GPU + train=dict( # Train dataset config + type='CocoDataset', # Type of dataset, refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/datasets/coco.py#L19 for details. + ann_file='data/coco/annotations/instances_train2017.json', # Path of annotation file + img_prefix='data/coco/train2017/', # Prefix of image path + pipeline=[ # pipeline, this is passed by the train_pipeline created before. + dict(type='LoadImageFromFile'), + dict( + type='LoadAnnotations', + with_bbox=True, + with_mask=True, + poly2mask=False), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict( + type='Collect', + keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']) + ]), + val=dict( # Validation dataset config + type='CocoDataset', + ann_file='data/coco/annotations/instances_val2017.json', + img_prefix='data/coco/val2017/', + pipeline=[ # Pipeline is passed by test_pipeline created before + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) + ]), + test=dict( # Test dataset config, modify the ann_file for test-dev/test submission + type='CocoDataset', + ann_file='data/coco/annotations/instances_val2017.json', + img_prefix='data/coco/val2017/', + pipeline=[ # Pipeline is passed by test_pipeline created before + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) + ], + samples_per_gpu=2 # Batch size of a single GPU used in testing + )) +evaluation = dict( # The config to build the evaluation hook, refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/evaluation/eval_hooks.py#L7 for more details. + interval=1, # Evaluation interval + metric=['bbox', 'segm']) # Metrics used during evaluation +optimizer = dict( # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch + type='SGD', # Type of optimizers, refer to https://github.com/open-mmlab/mmdetection/blob/master/mmdet/core/optimizer/default_constructor.py#L13 for more details + lr=0.02, # Learning rate of optimizers, see detail usages of the parameters in the documentaion of PyTorch + momentum=0.9, # Momentum + weight_decay=0.0001) # Weight decay of SGD +optimizer_config = dict( # Config used to build the optimizer hook, refer to https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/optimizer.py#L8 for implementation details. + grad_clip=None) # Most of the methods do not use gradient clip +lr_config = dict( # Learning rate scheduler config used to register LrUpdater hook + policy='step', # The policy of scheduler, also support CosineAnnealing, Cyclic, etc. Refer to details of supported LrUpdater from https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/lr_updater.py#L9. + warmup='linear', # The warmup policy, also support `exp` and `constant`. + warmup_iters=500, # The number of iterations for warmup + warmup_ratio= + 0.001, # The ratio of the starting learning rate used for warmup + step=[8, 11]) # Steps to decay the learning rate +total_epochs = 12 # Total epochs to train the model +checkpoint_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. + interval=1) # The save interval is 1 +log_config = dict( # config to register logger hook + interval=50, # Interval to print the log + hooks=[ + # dict(type='TensorboardLoggerHook') # The Tensorboard logger is also supported + dict(type='TextLoggerHook') + ]) # The logger used to record the training process. +dist_params = dict(backend='nccl') # Parameters to setup distributed training, the port can also be set. +log_level = 'INFO' # The level of logging. +load_from = None # load models as a pre-trained model from a given path. This will not resume training. +resume_from = None # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved. +workflow = [('train', 1)] # Workflow for runner. [('train', 1)] means there is only one workflow and the workflow named 'train' is executed once. The workflow trains the model by 12 epochs according to the total_epochs. +work_dir = 'work_dir' # Directory to save the model checkpoints and logs for the current experiments. + +``` + +## FAQ + +### Ignore some fields in the base configs + +Sometimes, you may set `_delete_=True` to ignore some of fields in base configs. +You may refer to [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#inherit-from-base-config-with-ignored-fields) for simple inllustration. + +In MMDetection, for example, to change the backbone of Mask R-CNN with the following config. + +```python +model = dict( + type='MaskRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNet', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + frozen_stages=1, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + style='pytorch'), + neck=dict(...), + rpn_head=dict(...), + roi_head=dict(...)) +``` + +`ResNet` and `HRNet` use different keywords to construct. + +```python +_base_ = '../mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w32', + backbone=dict( + _delete_=True, + type='HRNet', + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(32, 64)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(32, 64, 128)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(32, 64, 128, 256)))), + neck=dict(...)) +``` + +The `_delete_=True` would replace all old keys in `backbone` field with new keys. + +### Use intermediate variables in configs + +Some intermediate variables are used in the configs files, like `train_pipeline`/`test_pipeline` in datasets. +It's worth noting that when modifying intermediate variables in the children configs, user need to pass the intermediate variables into corresponding fields again. +For example, we would like to use multi scale strategy to train a Mask R-CNN. `train_pipeline`/`test_pipeline` are intermediate variable we would like modify. + +```python +_base_ = './mask_rcnn_r50_fpn_1x_coco.py' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True, with_mask=True), + dict( + type='Resize', + img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), + (1333, 768), (1333, 800)], + multiscale_mode="value", + keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels', 'gt_masks']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) +``` + +We first define the new `train_pipeline`/`test_pipeline` and pass them into `data`. diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_dataset.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_dataset.md new file mode 100644 index 00000000..7c4f845e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_dataset.md @@ -0,0 +1,486 @@ +# Tutorial 2: Customize Datasets + +## Support new data format + +To support a new data format, you can either convert them to existing formats (COCO format or PASCAL format) or directly convert them to the middle format. You could also choose to convert them offline (before training by a script) or online (implement a new dataset and do the conversion at training). In MMDetection, we recommand to convert the data into COCO formats and do the conversion offline, thus you only need to modify the config's data annotation pathes and classes after the conversion to your data. + +### Reorganize new data formats to existing format + +The simplest way is to convert your dataset to existing dataset formats (COCO or PASCAL VOC). + +The annotation json files in COCO format has the following necessary keys: + +```python +'images': [ + { + 'file_name': 'COCO_val2014_000000001268.jpg', + 'height': 427, + 'width': 640, + 'id': 1268 + }, + ... +], + +'annotations': [ + { + 'segmentation': [[192.81, + 247.09, + ... + 219.03, + 249.06]], # if you have mask labels + 'area': 1035.749, + 'iscrowd': 0, + 'image_id': 1268, + 'bbox': [192.81, 224.8, 74.73, 33.43], + 'category_id': 16, + 'id': 42986 + }, + ... +], + +'categories': [ + {'id': 0, 'name': 'car'}, + ] +``` + +There are three necessary keys in the json file: + +- `images`: contains a list of images with their informations like `file_name`, `height`, `width`, and `id`. +- `annotations`: contains the list of instance annotations. +- `categories`: contains the list of categories names and their ID. + +After the data pre-processing, there are two steps for users to train the customized new dataset with existing format (e.g. COCO format): + +1. Modify the config file for using the customized dataset. +2. Check the annotations of the customized dataset. + +Here we give an example to show the above two steps, which uses a customized dataset of 5 classes with COCO format to train an existing Cascade MaskRCNN R50 FPN detector. + +#### 1. Modify the config file for using the customized dataset + +There are two aspects involved in the modification of config file: + +1. The `data` field. Specifically, you need to explicitly add the `classes` fields in `data.train`, `data.val` and `data.test`. +2. The `num_classes` field in the `model` part. Explicitly over-write all the `num_classes` from default value (e.g. 80 in COCO) to your classes number. + +In `configs/my_custom_config.py`: + +```python + +# the new config inherits the base configs to highlight the necessary modification +_base_ = './cascade_mask_rcnn_r50_fpn_1x_coco.py' + +# 1. dataset settings +dataset_type = 'CocoDataset' +classes = ('a', 'b', 'c', 'd', 'e') +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + # explicitly add your class names to the field `classes` + classes=classes, + ann_file='path/to/your/train/annotation_data', + img_prefix='path/to/your/train/image_data'), + val=dict( + type=dataset_type, + # explicitly add your class names to the field `classes` + classes=classes, + ann_file='path/to/your/val/annotation_data', + img_prefix='path/to/your/val/image_data'), + test=dict( + type=dataset_type, + # explicitly add your class names to the field `classes` + classes=classes, + ann_file='path/to/your/test/annotation_data', + img_prefix='path/to/your/test/image_data')) + +# 2. model settings + +# explicitly over-write all the `num_classes` field from default 80 to 5. +model = dict( + roi_head=dict( + bbox_head=[ + dict( + type='Shared2FCBBoxHead', + # explicitly over-write all the `num_classes` field from default 80 to 5. + num_classes=5), + dict( + type='Shared2FCBBoxHead', + # explicitly over-write all the `num_classes` field from default 80 to 5. + num_classes=5), + dict( + type='Shared2FCBBoxHead', + # explicitly over-write all the `num_classes` field from default 80 to 5. + num_classes=5)], + # explicitly over-write all the `num_classes` field from default 80 to 5. + mask_head=dict(num_classes=5))) +``` + +#### 2. Check the annotations of the customized dataset + +Assuming your customized dataset is COCO format, make sure you have the correct annotations in the customized dataset: + +1. The length for `categories` field in annotations should exactly equal the tuple length of `classes` fields in your config, meaning the number of classes (e.g. 5 in this example). +2. The `classes` fields in your config file should have exactly the same elements and the same order with the `name` in `categories` of annotations. MMDetection automatically maps the uncontinuous `id` in `categories` to the continuous label indices, so the string order of `name` in `categories` field affects the order of label indices. Meanwhile, the string order of `classes` in config affects the label text during visualization of predicted bounding boxes. +3. The `category_id` in `annotations` field should be valid, i.e., all values in `category_id` should belong to `id` in `categories`. + +Here is a valid example of annotations: + +```python + +'annotations': [ + { + 'segmentation': [[192.81, + 247.09, + ... + 219.03, + 249.06]], # if you have mask labels + 'area': 1035.749, + 'iscrowd': 0, + 'image_id': 1268, + 'bbox': [192.81, 224.8, 74.73, 33.43], + 'category_id': 16, + 'id': 42986 + }, + ... +], + +# MMDetection automatically maps the uncontinuous `id` to the continuous label indices. +'categories': [ + {'id': 1, 'name': 'a'}, {'id': 3, 'name': 'b'}, {'id': 4, 'name': 'c'}, {'id': 16, 'name': 'd'}, {'id': 17, 'name': 'e'}, + ] +``` + +We use this way to support CityScapes dataset. The script is in [cityscapes.py](https://github.com/open-mmlab/mmdetection/blob/master/tools/dataset_converters/cityscapes.py) and we also provide the finetuning [configs](https://github.com/open-mmlab/mmdetection/blob/master/configs/cityscapes). + +**Note** + +1. For instance segmentation datasets, **MMDetection only supports evaluating mask AP of dataset in COCO format for now**. +2. It is recommanded to convert the data offline before training, thus you can still use `CocoDataset` and only need to modify the path of annotations and the training classes. + +### Reorganize new data format to middle format + +It is also fine if you do not want to convert the annotation format to COCO or PASCAL format. +Actually, we define a simple annotation format and all existing datasets are +processed to be compatible with it, either online or offline. + +The annotation of a dataset is a list of dict, each dict corresponds to an image. +There are 3 field `filename` (relative path), `width`, `height` for testing, +and an additional field `ann` for training. `ann` is also a dict containing at least 2 fields: +`bboxes` and `labels`, both of which are numpy arrays. Some datasets may provide +annotations like crowd/difficult/ignored bboxes, we use `bboxes_ignore` and `labels_ignore` +to cover them. + +Here is an example. + +```python + +[ + { + 'filename': 'a.jpg', + 'width': 1280, + 'height': 720, + 'ann': { + 'bboxes': (n, 4), + 'labels': (n, ), + 'bboxes_ignore': (k, 4), + 'labels_ignore': (k, ) (optional field) + } + }, + ... +] +``` + +There are two ways to work with custom datasets. + +- online conversion + + You can write a new Dataset class inherited from `CustomDataset`, and overwrite two methods + `load_annotations(self, ann_file)` and `get_ann_info(self, idx)`, + like [CocoDataset](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/datasets/coco.py) and [VOCDataset](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/datasets/voc.py). + +- offline conversion + + You can convert the annotation format to the expected format above and save it to + a pickle or json file, like [pascal_voc.py](https://github.com/open-mmlab/mmdetection/blob/master/tools/dataset_converters/pascal_voc.py). + Then you can simply use `CustomDataset`. + +### An example of customized dataset + +Assume the annotation is in a new format in text files. +The bounding boxes annotations are stored in text file `annotation.txt` as the following + +``` +# +000001.jpg +1280 720 +2 +10 20 40 60 1 +20 40 50 60 2 +# +000002.jpg +1280 720 +3 +50 20 40 60 2 +20 40 30 45 2 +30 40 50 60 3 +``` + +We can create a new dataset in `mmdet/datasets/my_dataset.py` to load the data. + +```python +import mmcv +import numpy as np + +from .builder import DATASETS +from .custom import CustomDataset + + +@DATASETS.register_module() +class MyDataset(CustomDataset): + + CLASSES = ('person', 'bicycle', 'car', 'motorcycle') + + def load_annotations(self, ann_file): + ann_list = mmcv.list_from_file(ann_file) + + data_infos = [] + for i, ann_line in enumerate(ann_list): + if ann_line != '#': + continue + + img_shape = ann_list[i + 2].split(' ') + width = int(img_shape[0]) + height = int(img_shape[1]) + bbox_number = int(ann_list[i + 3]) + + anns = ann_line.split(' ') + bboxes = [] + labels = [] + for anns in ann_list[i + 4:i + 4 + bbox_number]: + bboxes.append([float(ann) for ann in anns[:4]]) + labels.append(int(anns[4])) + + data_infos.append( + dict( + filename=ann_list[i + 1], + width=width, + height=height, + ann=dict( + bboxes=np.array(bboxes).astype(np.float32), + labels=np.array(labels).astype(np.int64)) + )) + + return data_infos + + def get_ann_info(self, idx): + return self.data_infos[idx]['ann'] + +``` + +Then in the config, to use `MyDataset` you can modify the config as the following + +```python +dataset_A_train = dict( + type='MyDataset', + ann_file = 'image_list.txt', + pipeline=train_pipeline +) +``` + +## Customize datasets by dataset wrappers + +MMDetection also supports many dataset wrappers to mix the dataset or modify the dataset distribution for training. +Currently it supports to three dataset wrappers as below: + +- `RepeatDataset`: simply repeat the whole dataset. +- `ClassBalancedDataset`: repeat dataset in a class balanced manner. +- `ConcatDataset`: concat datasets. + +### Repeat dataset + +We use `RepeatDataset` as wrapper to repeat the dataset. For example, suppose the original dataset is `Dataset_A`, to repeat it, the config looks like the following + +```python +dataset_A_train = dict( + type='RepeatDataset', + times=N, + dataset=dict( # This is the original config of Dataset_A + type='Dataset_A', + ... + pipeline=train_pipeline + ) + ) +``` + +### Class balanced dataset + +We use `ClassBalancedDataset` as wrapper to repeat the dataset based on category +frequency. The dataset to repeat needs to instantiate function `self.get_cat_ids(idx)` +to support `ClassBalancedDataset`. +For example, to repeat `Dataset_A` with `oversample_thr=1e-3`, the config looks like the following + +```python +dataset_A_train = dict( + type='ClassBalancedDataset', + oversample_thr=1e-3, + dataset=dict( # This is the original config of Dataset_A + type='Dataset_A', + ... + pipeline=train_pipeline + ) + ) +``` + +You may refer to [source code](../../mmdet/datasets/dataset_wrappers.py) for details. + +### Concatenate dataset + +There are three ways to concatenate the dataset. + +1. If the datasets you want to concatenate are in the same type with different annotation files, you can concatenate the dataset configs like the following. + + ```python + dataset_A_train = dict( + type='Dataset_A', + ann_file = ['anno_file_1', 'anno_file_2'], + pipeline=train_pipeline + ) + ``` + + If the concatenated dataset is used for test or evaluation, this manner supports to evaluate each dataset separately. To test the concatenated datasets as a whole, you can set `separate_eval=False` as below. + + ```python + dataset_A_train = dict( + type='Dataset_A', + ann_file = ['anno_file_1', 'anno_file_2'], + separate_eval=False, + pipeline=train_pipeline + ) + ``` + +2. In case the dataset you want to concatenate is different, you can concatenate the dataset configs like the following. + + ```python + dataset_A_train = dict() + dataset_B_train = dict() + + data = dict( + imgs_per_gpu=2, + workers_per_gpu=2, + train = [ + dataset_A_train, + dataset_B_train + ], + val = dataset_A_val, + test = dataset_A_test + ) + ``` + + If the concatenated dataset is used for test or evaluation, this manner also supports to evaluate each dataset separately. + +3. We also support to define `ConcatDataset` explicitly as the following. + + ```python + dataset_A_val = dict() + dataset_B_val = dict() + + data = dict( + imgs_per_gpu=2, + workers_per_gpu=2, + train=dataset_A_train, + val=dict( + type='ConcatDataset', + datasets=[dataset_A_val, dataset_B_val], + separate_eval=False)) + ``` + + This manner allows users to evaluate all the datasets as a single one by setting `separate_eval=False`. + +**Note:** + +1. The option `separate_eval=False` assumes the datasets use `self.data_infos` during evaluation. Therefore, COCO datasets do not support this behavior since COCO datasets do not fully rely on `self.data_infos` for evaluation. Combining different types of datasets and evaluating them as a whole is not tested thus is not suggested. +2. Evaluating `ClassBalancedDataset` and `RepeatDataset` is not supported thus evaluating concatenated datasets of these types is also not supported. + +A more complex example that repeats `Dataset_A` and `Dataset_B` by N and M times, respectively, and then concatenates the repeated datasets is as the following. + +```python +dataset_A_train = dict( + type='RepeatDataset', + times=N, + dataset=dict( + type='Dataset_A', + ... + pipeline=train_pipeline + ) +) +dataset_A_val = dict( + ... + pipeline=test_pipeline +) +dataset_A_test = dict( + ... + pipeline=test_pipeline +) +dataset_B_train = dict( + type='RepeatDataset', + times=M, + dataset=dict( + type='Dataset_B', + ... + pipeline=train_pipeline + ) +) +data = dict( + imgs_per_gpu=2, + workers_per_gpu=2, + train = [ + dataset_A_train, + dataset_B_train + ], + val = dataset_A_val, + test = dataset_A_test +) + +``` + +## Modify Dataset Classes + +With existing dataset types, we can modify the class names of them to train subset of the annotations. +For example, if you want to train only three classes of the current dataset, +you can modify the classes of dataset. +The dataset will filter out the ground truth boxes of other classes automatically. + +```python +classes = ('person', 'bicycle', 'car') +data = dict( + train=dict(classes=classes), + val=dict(classes=classes), + test=dict(classes=classes)) +``` + +MMDetection V2.0 also supports to read the classes from a file, which is common in real applications. +For example, assume the `classes.txt` contains the name of classes as the following. + +``` +person +bicycle +car +``` + +Users can set the classes as a file path, the dataset will load it and convert it to a list automatically. + +```python +classes = 'path/to/classes.txt' +data = dict( + train=dict(classes=classes), + val=dict(classes=classes), + test=dict(classes=classes)) +``` + +**Note**: + +- Before MMDetection v2.5.0, the dataset will filter out the empty GT images automatically if the classes are set and there is no way to disable that through config. This is an undesirable behavior and introduces confusion because if the classes are not set, the dataset only filter the empty GT images when `filter_empty_gt=True` and `test_mode=False`. After MMDetection v2.5.0, we decouple the image filtering process and the classes modification, i.e., the dataset will only filter empty GT images when `filter_empty_gt=True` and `test_mode=False`, no matter whether the classes are set. Thus, setting the classes only influences the annotations of classes used for training and users could decide whether to filter empty GT images by themselves. +- Since the middle format only has box labels and does not contain the class names, when using `CustomDataset`, users cannot filter out the empty GT images through configs but only do this offline. +- The features for setting dataset classes and dataset filtering will be refactored to be more user-friendly in v2.8.0 or v2.9.0 (depends on the progress). diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_losses.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_losses.md new file mode 100644 index 00000000..c3e1ddd8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_losses.md @@ -0,0 +1,105 @@ +# Tutorial 6: Customize Losses + +MMDetection provides users with different loss functions. But the default configuration may be not applicable for different datasets or models, so users may want to modify a specific loss to adapt the new situation. + +This tutorial first elaborate the computation pipeline of losses, then give some instructions about how to modify each step. The modification can be categorized as tweaking and weighting. + +## Computation pipeline of a loss + +Given the input prediction and target, as well as the weights, a loss function maps the input tensor to the final loss scalar. The mapping can be divided into four steps: + +1. Get **element-wise** or sample-wise loss by the loss kernel function. + +2. Weighting the loss with a weight tensor **element-wisely**. + +3. Reduce the loss tensor to a **scalar**. + +4. Weighting the loss with a **scalar**. + +## Tweaking loss + +Tweaking a loss is more related with step 1, 3, 4, and most modifications can be specified in the config. +Here we take [Focal Loss (FL)](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/losses/focal_loss.py) as an example. +The following code sniper are the construction method and config of FL respectively, they are actually one to one correspondence. + +```python +@LOSSES.register_module() +class FocalLoss(nn.Module): + + def __init__(self, + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + reduction='mean', + loss_weight=1.0): +``` + +```python +loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0) +``` + +### Tweaking hyper-parameters (step 1) + +`gamma` and `beta` are two hyper-parameters in the Focal Loss. Say if we want to change the value of `gamma` to be 1.5 and `alpha` to be 0.5, then we can specify them in the config as follows: + +```python +loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=1.5, + alpha=0.5, + loss_weight=1.0) +``` + +### Tweaking the way of reduction (step 3) + +The default way of reduction is `mean` for FL. Say if we want to change the reduction from `mean` to `sum`, we can specify it in the config as follows: + +```python +loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0, + reduction='sum') +``` + +### Tweaking loss weight (step 4) + +The loss weight here is a scalar which controls the weight of different losses in multi-task learning, e.g. classification loss and regression loss. Say if we want to change to loss weight of classification loss to be 0.5, we can specify it in the config as follows: + +```python +loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=0.5) +``` + +## Weighting loss (step 2) + +Weighting loss means we re-weight the loss element-wisely. To be more specific, we multiply the loss tensor with a weight tensor which has the same shape. As a result, different entries of the loss can be scaled differently, and so called element-wisely. +The loss weight varies across different models and highly context related, but overall there are two kinds of loss weights, `label_weights` for classification loss and `bbox_weights` for bbox regression loss. You can find them in the `get_target` method of the corresponding head. Here we take [ATSSHead](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/dense_heads/atss_head.py#L530) as an example, which inherit [AnchorHead](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/dense_heads/anchor_head.py) but overwrite its `get_targets` method which yields different `label_weights` and `bbox_weights`. + +``` +class ATSSHead(AnchorHead): + + ... + + def get_targets(self, + anchor_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=1, + unmap_outputs=True): +``` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_models.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_models.md new file mode 100644 index 00000000..173fb0a9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_models.md @@ -0,0 +1,369 @@ +# Tutorial 4: Customize Models + +We basically categorize model components into 5 types. + +- backbone: usually an FCN network to extract feature maps, e.g., ResNet, MobileNet. +- neck: the component between backbones and heads, e.g., FPN, PAFPN. +- head: the component for specific tasks, e.g., bbox prediction and mask prediction. +- roi extractor: the part for extracting RoI features from feature maps, e.g., RoI Align. +- loss: the component in head for calculating losses, e.g., FocalLoss, L1Loss, and GHMLoss. + +## Develop new components + +### Add a new backbone + +Here we show how to develop new components with an example of MobileNet. + +#### 1. Define a new backbone (e.g. MobileNet) + +Create a new file `mmdet/models/backbones/mobilenet.py`. + +```python +import torch.nn as nn + +from ..builder import BACKBONES + + +@BACKBONES.register_module() +class MobileNet(nn.Module): + + def __init__(self, arg1, arg2): + pass + + def forward(self, x): # should return a tuple + pass + + def init_weights(self, pretrained=None): + pass +``` + +#### 2. Import the module + +You can either add the following line to `mmdet/models/backbones/__init__.py` + +```python +from .mobilenet import MobileNet +``` + +or alternatively add + +```python +custom_imports = dict( + imports=['mmdet.models.backbones.mobilenet'], + allow_failed_imports=False) +``` + +to the config file to avoid modifying the original code. + +#### 3. Use the backbone in your config file + +```python +model = dict( + ... + backbone=dict( + type='MobileNet', + arg1=xxx, + arg2=xxx), + ... +``` + +### Add new necks + +#### 1. Define a neck (e.g. PAFPN) + +Create a new file `mmdet/models/necks/pafpn.py`. + +```python +from ..builder import NECKS + +@NECKS.register_module() +class PAFPN(nn.Module): + + def __init__(self, + in_channels, + out_channels, + num_outs, + start_level=0, + end_level=-1, + add_extra_convs=False): + pass + + def forward(self, inputs): + # implementation is ignored + pass +``` + +#### 2. Import the module + +You can either add the following line to `mmdet/models/necks/__init__.py`, + +```python +from .pafpn import PAFPN +``` + +or alternatively add + +```python +custom_imports = dict( + imports=['mmdet.models.necks.pafpn.py'], + allow_failed_imports=False) +``` + +to the config file and avoid modifying the original code. + +#### 3. Modify the config file + +```python +neck=dict( + type='PAFPN', + in_channels=[256, 512, 1024, 2048], + out_channels=256, + num_outs=5) +``` + +### Add new heads + +Here we show how to develop a new head with the example of [Double Head R-CNN](https://arxiv.org/abs/1904.06493) as the following. + +First, add a new bbox head in `mmdet/models/roi_heads/bbox_heads/double_bbox_head.py`. +Double Head R-CNN implements a new bbox head for object detection. +To implement a bbox head, basically we need to implement three functions of the new module as the following. + +```python +from mmdet.models.builder import HEADS +from .bbox_head import BBoxHead + +@HEADS.register_module() +class DoubleConvFCBBoxHead(BBoxHead): + r"""Bbox head used in Double-Head R-CNN + + /-> cls + /-> shared convs -> + \-> reg + roi features + /-> cls + \-> shared fc -> + \-> reg + """ # noqa: W605 + + def __init__(self, + num_convs=0, + num_fcs=0, + conv_out_channels=1024, + fc_out_channels=1024, + conv_cfg=None, + norm_cfg=dict(type='BN'), + **kwargs): + kwargs.setdefault('with_avg_pool', True) + super(DoubleConvFCBBoxHead, self).__init__(**kwargs) + + def init_weights(self): + # conv layers are already initialized by ConvModule + + def forward(self, x_cls, x_reg): + +``` + +Second, implement a new RoI Head if it is necessary. We plan to inherit the new `DoubleHeadRoIHead` from `StandardRoIHead`. We can find that a `StandardRoIHead` already implements the following functions. + +```python +import torch + +from mmdet.core import bbox2result, bbox2roi, build_assigner, build_sampler +from ..builder import HEADS, build_head, build_roi_extractor +from .base_roi_head import BaseRoIHead +from .test_mixins import BBoxTestMixin, MaskTestMixin + + +@HEADS.register_module() +class StandardRoIHead(BaseRoIHead, BBoxTestMixin, MaskTestMixin): + """Simplest base roi head including one bbox head and one mask head. + """ + + def init_assigner_sampler(self): + + def init_bbox_head(self, bbox_roi_extractor, bbox_head): + + def init_mask_head(self, mask_roi_extractor, mask_head): + + def init_weights(self, pretrained): + + def forward_dummy(self, x, proposals): + + + def forward_train(self, + x, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None): + + def _bbox_forward(self, x, rois): + + def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels, + img_metas): + + def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks, + img_metas): + + def _mask_forward(self, x, rois=None, pos_inds=None, bbox_feats=None): + + + def simple_test(self, + x, + proposal_list, + img_metas, + proposals=None, + rescale=False): + """Test without augmentation.""" + +``` + +Double Head's modification is mainly in the bbox_forward logic, and it inherits other logics from the `StandardRoIHead`. +In the `mmdet/models/roi_heads/double_roi_head.py`, we implement the new RoI Head as the following: + +```python +from ..builder import HEADS +from .standard_roi_head import StandardRoIHead + + +@HEADS.register_module() +class DoubleHeadRoIHead(StandardRoIHead): + """RoI head for Double Head RCNN + + https://arxiv.org/abs/1904.06493 + """ + + def __init__(self, reg_roi_scale_factor, **kwargs): + super(DoubleHeadRoIHead, self).__init__(**kwargs) + self.reg_roi_scale_factor = reg_roi_scale_factor + + def _bbox_forward(self, x, rois): + bbox_cls_feats = self.bbox_roi_extractor( + x[:self.bbox_roi_extractor.num_inputs], rois) + bbox_reg_feats = self.bbox_roi_extractor( + x[:self.bbox_roi_extractor.num_inputs], + rois, + roi_scale_factor=self.reg_roi_scale_factor) + if self.with_shared_head: + bbox_cls_feats = self.shared_head(bbox_cls_feats) + bbox_reg_feats = self.shared_head(bbox_reg_feats) + cls_score, bbox_pred = self.bbox_head(bbox_cls_feats, bbox_reg_feats) + + bbox_results = dict( + cls_score=cls_score, + bbox_pred=bbox_pred, + bbox_feats=bbox_cls_feats) + return bbox_results +``` + +Last, the users need to add the module in +`mmdet/models/bbox_heads/__init__.py` and `mmdet/models/roi_heads/__init__.py` thus the corresponding registry could find and load them. + +Alternatively, the users can add + +```python +custom_imports=dict( + imports=['mmdet.models.roi_heads.double_roi_head', 'mmdet.models.bbox_heads.double_bbox_head']) +``` + +to the config file and achieve the same goal. + +The config file of Double Head R-CNN is as the following + +```python +_base_ = '../faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' +model = dict( + roi_head=dict( + type='DoubleHeadRoIHead', + reg_roi_scale_factor=1.3, + bbox_head=dict( + _delete_=True, + type='DoubleConvFCBBoxHead', + num_convs=4, + num_fcs=2, + in_channels=256, + conv_out_channels=1024, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=2.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=2.0)))) + +``` + +Since MMDetection 2.0, the config system supports to inherit configs such that the users can focus on the modification. +The Double Head R-CNN mainly uses a new DoubleHeadRoIHead and a new +`DoubleConvFCBBoxHead`, the arguments are set according to the `__init__` function of each module. + +### Add new loss + +Assume you want to add a new loss as `MyLoss`, for bounding box regression. +To add a new loss function, the users need implement it in `mmdet/models/losses/my_loss.py`. +The decorator `weighted_loss` enable the loss to be weighted for each element. + +```python +import torch +import torch.nn as nn + +from ..builder import LOSSES +from .utils import weighted_loss + +@weighted_loss +def my_loss(pred, target): + assert pred.size() == target.size() and target.numel() > 0 + loss = torch.abs(pred - target) + return loss + +@LOSSES.register_module() +class MyLoss(nn.Module): + + def __init__(self, reduction='mean', loss_weight=1.0): + super(MyLoss, self).__init__() + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss_bbox = self.loss_weight * my_loss( + pred, target, weight, reduction=reduction, avg_factor=avg_factor) + return loss_bbox +``` + +Then the users need to add it in the `mmdet/models/losses/__init__.py`. + +```python +from .my_loss import MyLoss, my_loss + +``` + +Alternatively, you can add + +```python +custom_imports=dict( + imports=['mmdet.models.losses.my_loss']) +``` + +to the config file and achieve the same goal. + +To use it, modify the `loss_xxx` field. +Since MyLoss is for regression, you need to modify the `loss_bbox` field in the head. + +```python +loss_bbox=dict(type='MyLoss', loss_weight=1.0)) +``` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_runtime.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_runtime.md new file mode 100644 index 00000000..3f52b273 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/customize_runtime.md @@ -0,0 +1,319 @@ +# Tutorial 5: Customize Runtime Settings + +## Customize optimization settings + +### Customize optimizer supported by Pytorch + +We already support to use all the optimizers implemented by PyTorch, and the only modification is to change the `optimizer` field of config files. +For example, if you want to use `ADAM` (note that the performance could drop a lot), the modification could be as the following. + +```python +optimizer = dict(type='Adam', lr=0.0003, weight_decay=0.0001) +``` + +To modify the learning rate of the model, the users only need to modify the `lr` in the config of optimizer. The users can directly set arguments following the [API doc](https://pytorch.org/docs/stable/optim.html?highlight=optim#module-torch.optim) of PyTorch. + +### Customize self-implemented optimizer + +#### 1. Define a new optimizer + +A customized optimizer could be defined as following. + +Assume you want to add a optimizer named `MyOptimizer`, which has arguments `a`, `b`, and `c`. +You need to create a new directory named `mmdet/core/optimizer`. +And then implement the new optimizer in a file, e.g., in `mmdet/core/optimizer/my_optimizer.py`: + +```python +from .registry import OPTIMIZERS +from torch.optim import Optimizer + + +@OPTIMIZERS.register_module() +class MyOptimizer(Optimizer): + + def __init__(self, a, b, c) + +``` + +#### 2. Add the optimizer to registry + +To find the above module defined above, this module should be imported into the main namespace at first. There are two options to achieve it. + +- Modify `mmdet/core/optimizer/__init__.py` to import it. + + The newly defined module should be imported in `mmdet/core/optimizer/__init__.py` so that the registry will + find the new module and add it: + +```python +from .my_optimizer import MyOptimizer +``` + +- Use `custom_imports` in the config to manually import it + +```python +custom_imports = dict(imports=['mmdet.core.optimizer.my_optimizer'], allow_failed_imports=False) +``` + +The module `mmdet.core.optimizer.my_optimizer` will be imported at the beginning of the program and the class `MyOptimizer` is then automatically registered. +Note that only the package containing the class `MyOptimizer` should be imported. +`mmdet.core.optimizer.my_optimizer.MyOptimizer` **cannot** be imported directly. + +Actually users can use a totally different file directory structure using this importing method, as long as the module root can be located in `PYTHONPATH`. + +#### 3. Specify the optimizer in the config file + +Then you can use `MyOptimizer` in `optimizer` field of config files. +In the configs, the optimizers are defined by the field `optimizer` like the following: + +```python +optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) +``` + +To use your own optimizer, the field can be changed to + +```python +optimizer = dict(type='MyOptimizer', a=a_value, b=b_value, c=c_value) +``` + +### Customize optimizer constructor + +Some models may have some parameter-specific settings for optimization, e.g. weight decay for BatchNorm layers. +The users can do those fine-grained parameter tuning through customizing optimizer constructor. + +```python +from mmcv.utils import build_from_cfg + +from mmcv.runner.optimizer import OPTIMIZER_BUILDERS, OPTIMIZERS +from mmdet.utils import get_root_logger +from .my_optimizer import MyOptimizer + + +@OPTIMIZER_BUILDERS.register_module() +class MyOptimizerConstructor(object): + + def __init__(self, optimizer_cfg, paramwise_cfg=None): + + def __call__(self, model): + + return my_optimizer + +``` + +The default optimizer constructor is implemented [here](https://github.com/open-mmlab/mmcv/blob/9ecd6b0d5ff9d2172c49a182eaa669e9f27bb8e7/mmcv/runner/optimizer/default_constructor.py#L11), which could also serve as a template for new optimizer constructor. + +### Additional settings + +Tricks not implemented by the optimizer should be implemented through optimizer constructor (e.g., set parameter-wise learning rates) or hooks. We list some common settings that could stabilize the training or accelerate the training. Feel free to create PR, issue for more settings. + +- __Use gradient clip to stabilize training__: + Some models need gradient clip to clip the gradients to stabilize the training process. An example is as below: + + ```python + optimizer_config = dict( + _delete_=True, grad_clip=dict(max_norm=35, norm_type=2)) + ``` + + If your config inherits the base config which already sets the `optimizer_config`, you might need `_delete_=True` to overide the unnecessary settings. See the [config documenetation](https://mmdetection.readthedocs.io/en/latest/config.html) for more details. + +- __Use momentum schedule to accelerate model convergence__: + We support momentum scheduler to modify model's momentum according to learning rate, which could make the model converge in a faster way. + Momentum scheduler is usually used with LR scheduler, for example, the following config is used in 3D detection to accelerate convergence. + For more details, please refer to the implementation of [CyclicLrUpdater](https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/lr_updater.py#L327) and [CyclicMomentumUpdater](https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/momentum_updater.py#L130). + + ```python + lr_config = dict( + policy='cyclic', + target_ratio=(10, 1e-4), + cyclic_times=1, + step_ratio_up=0.4, + ) + momentum_config = dict( + policy='cyclic', + target_ratio=(0.85 / 0.95, 1), + cyclic_times=1, + step_ratio_up=0.4, + ) + ``` + +## Customize training schedules + +By default we use step learning rate with 1x schedule, this calls [`StepLRHook`](https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/lr_updater.py#L153) in MMCV. +We support many other learning rate schedule [here](https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/lr_updater.py), such as `CosineAnnealing` and `Poly` schedule. Here are some examples + +- Poly schedule: + + ```python + lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) + ``` + +- ConsineAnnealing schedule: + + ```python + lr_config = dict( + policy='CosineAnnealing', + warmup='linear', + warmup_iters=1000, + warmup_ratio=1.0 / 10, + min_lr_ratio=1e-5) + ``` + +## Customize workflow + +Workflow is a list of (phase, epochs) to specify the running order and epochs. +By default it is set to be + +```python +workflow = [('train', 1)] +``` + +which means running 1 epoch for training. +Sometimes user may want to check some metrics (e.g. loss, accuracy) about the model on the validate set. +In such case, we can set the workflow as + +```python +[('train', 1), ('val', 1)] +``` + +so that 1 epoch for training and 1 epoch for validation will be run iteratively. + +**Note**: + +1. The parameters of model will not be updated during val epoch. +2. Keyword `total_epochs` in the config only controls the number of training epochs and will not affect the validation workflow. +3. Workflows `[('train', 1), ('val', 1)]` and `[('train', 1)]` will not change the behavior of `EvalHook` because `EvalHook` is called by `after_train_epoch` and validation workflow only affect hooks that are called through `after_val_epoch`. Therefore, the only difference between `[('train', 1), ('val', 1)]` and `[('train', 1)]` is that the runner will calculate losses on validation set after each training epoch. + +## Customize hooks + +### Customize self-implemented hooks + +#### 1. Implement a new hook + +There are some occasions when the users might need to implement a new hook. MMDetection supports customized hooks in training (#3395) since v2.3.0. Thus the users could implement a hook directly in mmdet or their mmdet-based codebases and use the hook by only modifying the config in training. +Before v2.3.0, the users need to modify the code to get the hook registered before training starts. +Here we give an example of creating a new hook in mmdet and using it in training. + +```python +from mmcv.runner import HOOKS, Hook + + +@HOOKS.register_module() +class MyHook(Hook): + + def __init__(self, a, b): + pass + + def before_run(self, runner): + pass + + def after_run(self, runner): + pass + + def before_epoch(self, runner): + pass + + def after_epoch(self, runner): + pass + + def before_iter(self, runner): + pass + + def after_iter(self, runner): + pass +``` + +Depending on the functionality of the hook, the users need to specify what the hook will do at each stage of the training in `before_run`, `after_run`, `before_epoch`, `after_epoch`, `before_iter`, and `after_iter`. + +#### 2. Register the new hook + +Then we need to make `MyHook` imported. Assuming the file is in `mmdet/core/utils/my_hook.py` there are two ways to do that: + +- Modify `mmdet/core/utils/__init__.py` to import it. + + The newly defined module should be imported in `mmdet/core/utils/__init__.py` so that the registry will + find the new module and add it: + +```python +from .my_hook import MyHook +``` + +- Use `custom_imports` in the config to manually import it + +```python +custom_imports = dict(imports=['mmdet.core.utils.my_hook'], allow_failed_imports=False) +``` + +#### 3. Modify the config + +```python +custom_hooks = [ + dict(type='MyHook', a=a_value, b=b_value) +] +``` + +You can also set the priority of the hook by adding key `priority` to `'NORMAL'` or `'HIGHEST'` as below + +```python +custom_hooks = [ + dict(type='MyHook', a=a_value, b=b_value, priority='NORMAL') +] +``` + +By default the hook's priority is set as `NORMAL` during registration. + +### Use hooks implemented in MMCV + +If the hook is already implemented in MMCV, you can directly modify the config to use the hook as below + +```python +custom_hooks = [ + dict(type='MyHook', a=a_value, b=b_value, priority='NORMAL') +] +``` + +### Modify default runtime hooks + +There are some common hooks that are not registerd through `custom_hooks`, they are + +- log_config +- checkpoint_config +- evaluation +- lr_config +- optimizer_config +- momentum_config + +In those hooks, only the logger hook has the `VERY_LOW` priority, others' priority are `NORMAL`. +The above-mentioned tutorials already covers how to modify `optimizer_config`, `momentum_config`, and `lr_config`. +Here we reveals how what we can do with `log_config`, `checkpoint_config`, and `evaluation`. + +#### Checkpoint config + +The MMCV runner will use `checkpoint_config` to initialize [`CheckpointHook`](https://github.com/open-mmlab/mmcv/blob/9ecd6b0d5ff9d2172c49a182eaa669e9f27bb8e7/mmcv/runner/hooks/checkpoint.py#L9). + +```python +checkpoint_config = dict(interval=1) +``` + +The users could set `max_keep_ckpts` to only save only small number of checkpoints or decide whether to store state dict of optimizer by `save_optimizer`. More details of the arguments are [here](https://mmcv.readthedocs.io/en/latest/api.html#mmcv.runner.CheckpointHook) + +#### Log config + +The `log_config` wraps multiple logger hooks and enables to set intervals. Now MMCV supports `WandbLoggerHook`, `MlflowLoggerHook`, and `TensorboardLoggerHook`. +The detail usages can be found in the [doc](https://mmcv.readthedocs.io/en/latest/api.html#mmcv.runner.LoggerHook). + +```python +log_config = dict( + interval=50, + hooks=[ + dict(type='TextLoggerHook'), + dict(type='TensorboardLoggerHook') + ]) +``` + +#### Evaluation config + +The config of `evaluation` will be used to initialize the [`EvalHook`](https://github.com/open-mmlab/mmdetection/blob/7a404a2c000620d52156774a5025070d9e00d918/mmdet/core/evaluation/eval_hooks.py#L8). +Except the key `interval`, other arguments such as `metric` will be passed to the `dataset.evaluate()` + +```python +evaluation = dict(interval=1, metric='bbox') +``` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/data_pipeline.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/data_pipeline.md new file mode 100644 index 00000000..7ea5665f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/data_pipeline.md @@ -0,0 +1,184 @@ +# Tutorial 3: Customize Data Pipelines + +## Design of Data pipelines + +Following 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. +Since the data in object detection may not be the same size (image size, gt bbox size, etc.), +we introduce a new `DataContainer` type in MMCV to help collect and distribute +data of different size. +See [here](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py) for more details. + +The 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. +A pipeline consists of a sequence of operations. Each operation takes a dict as input and also output a dict for the next transform. + +We present a classical pipeline in the following figure. The blue blocks are pipeline operations. With the pipeline going on, each operator can add new keys (marked as green) to the result dict or update the existing keys (marked as orange). +![pipeline figure](../../resources/data_pipeline.png) + +The operations are categorized into data loading, pre-processing, formatting and test-time augmentation. + +Here is a pipeline example for Faster R-CNN. + +```python +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +``` + +For each operation, we list the related dict fields that are added/updated/removed. + +### Data loading + +`LoadImageFromFile` + +- add: img, img_shape, ori_shape + +`LoadAnnotations` + +- add: gt_bboxes, gt_bboxes_ignore, gt_labels, gt_masks, gt_semantic_seg, bbox_fields, mask_fields + +`LoadProposals` + +- add: proposals + +### Pre-processing + +`Resize` + +- add: scale, scale_idx, pad_shape, scale_factor, keep_ratio +- update: img, img_shape, *bbox_fields, *mask_fields, *seg_fields + +`RandomFlip` + +- add: flip +- update: img, *bbox_fields, *mask_fields, *seg_fields + +`Pad` + +- add: pad_fixed_size, pad_size_divisor +- update: img, pad_shape, *mask_fields, *seg_fields + +`RandomCrop` + +- update: img, pad_shape, gt_bboxes, gt_labels, gt_masks, *bbox_fields + +`Normalize` + +- add: img_norm_cfg +- update: img + +`SegRescale` + +- update: gt_semantic_seg + +`PhotoMetricDistortion` + +- update: img + +`Expand` + +- update: img, gt_bboxes + +`MinIoURandomCrop` + +- update: img, gt_bboxes, gt_labels + +`Corrupt` + +- update: img + +### Formatting + +`ToTensor` + +- update: specified by `keys`. + +`ImageToTensor` + +- update: specified by `keys`. + +`Transpose` + +- update: specified by `keys`. + +`ToDataContainer` + +- update: specified by `fields`. + +`DefaultFormatBundle` + +- update: img, proposals, gt_bboxes, gt_bboxes_ignore, gt_labels, gt_masks, gt_semantic_seg + +`Collect` + +- add: img_meta (the keys of img_meta is specified by `meta_keys`) +- remove: all other keys except for those specified by `keys` + +### Test time augmentation + +`MultiScaleFlipAug` + +## Extend and use custom pipelines + +1. Write a new pipeline in any file, e.g., `my_pipeline.py`. It takes a dict as input and return a dict. + + ```python + from mmdet.datasets import PIPELINES + + @PIPELINES.register_module() + class MyTransform: + + def __call__(self, results): + results['dummy'] = True + return results + ``` + +2. Import the new class. + + ```python + from .my_pipeline import MyTransform + ``` + +3. Use it in config files. + + ```python + img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) + train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', with_bbox=True), + dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='MyTransform'), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']), + ] + ``` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/finetune.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/finetune.md new file mode 100644 index 00000000..95cb1d5e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/finetune.md @@ -0,0 +1,89 @@ +# Tutorial 7: Finetuning Models + +Detectors pre-trained on the COCO dataset can serve as a good pre-trained model for other datasets, e.g., CityScapes and KITTI Dataset. +This tutorial provides instruction for users to use the models provided in the [Model Zoo](../model_zoo.md) for other datasets to obtain better performance. + +There are two steps to finetune a model on a new dataset. + +- Add support for the new dataset following [Tutorial 2: Customize Datasets](customize_dataset.md). +- Modify the configs as will be discussed in this tutorial. + +Take the finetuning process on Cityscapes Dataset as an example, the users need to modify five parts in the config. + +## Inherit base configs + +To release the burden and reduce bugs in writing the whole configs, MMDetection V2.0 support inheriting configs from multiple existing configs. To finetune a Mask RCNN model, the new config needs to inherit +`_base_/models/mask_rcnn_r50_fpn.py` to build the basic structure of the model. To use the Cityscapes Dataset, the new config can also simply inherit `_base_/datasets/cityscapes_instance.py`. For runtime settings such as training schedules, the new config needs to inherit `_base_/default_runtime.py`. This configs are in the `configs` directory and the users can also choose to write the whole contents rather than use inheritance. + +```python +_base_ = [ + '../_base_/models/mask_rcnn_r50_fpn.py', + '../_base_/datasets/cityscapes_instance.py', '../_base_/default_runtime.py' +] +``` + +## Modify head + +Then the new config needs to modify the head according to the class numbers of the new datasets. By only changing `num_classes` in the roi_head, the weights of the pre-trained models are mostly reused except the final prediction head. + +```python +model = dict( + pretrained=None, + roi_head=dict( + bbox_head=dict( + type='Shared2FCBBoxHead', + in_channels=256, + fc_out_channels=1024, + roi_feat_size=7, + num_classes=8, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), + mask_head=dict( + type='FCNMaskHead', + num_convs=4, + in_channels=256, + conv_out_channels=256, + num_classes=8, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)))) +``` + +## Modify dataset + +The users may also need to prepare the dataset and write the configs about dataset. MMDetection V2.0 already support VOC, WIDER FACE, COCO and Cityscapes Dataset. + +## Modify training schedule + +The finetuning hyperparameters vary from the default schedule. It usually requires smaller learning rate and less training epochs + +```python +# optimizer +# lr is set for a batch size of 8 +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + # [7] yields higher performance than [6] + step=[7]) +total_epochs = 8 # actual epoch = 8 * 8 = 64 +log_config = dict(interval=100) +``` + +## Use pre-trained model + +To use the pre-trained model, the new config add the link of pre-trained models in the `load_from`. The users might need to download the model weights before training to avoid the download time during training. + +```python +load_from = 'http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth' # noqa + +``` diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/index.rst b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/index.rst new file mode 100644 index 00000000..358a765f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/index.rst @@ -0,0 +1,11 @@ +.. toctree:: + :maxdepth: 2 + + config.md + customize_dataset.md + data_pipeline.md + customize_models.md + customize_runtime.md + customize_losses.md + finetune.md + pytorch2onnx.md diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/pytorch2onnx.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/pytorch2onnx.md new file mode 100644 index 00000000..ba030517 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/tutorials/pytorch2onnx.md @@ -0,0 +1,101 @@ +# Tutorial 8: Pytorch to ONNX (Experimental) + + + +- [Tutorial 8: Pytorch to ONNX (Experimental)](#tutorial-8-pytorch-to-onnx-experimental) + - [How to convert models from Pytorch to ONNX](#how-to-convert-models-from-pytorch-to-onnx) + - [Prerequisite](#prerequisite) + - [Usage](#usage) + - [List of supported models exportable to ONNX](#list-of-supported-models-exportable-to-onnx) + - [Reminders](#reminders) + - [FAQs](#faqs) + + + +## How to convert models from Pytorch to ONNX + +### Prerequisite + +1. Please refer to [get_started.md](../get_started.md) for installation of MMCV and MMDetection. +2. Install onnx and onnxruntime + + ```shell + pip install onnx onnxruntime + ``` + +### Usage + +```bash +python tools/deployment/pytorch2onnx.py \ + ${CONFIG_FILE} \ + ${CHECKPOINT_FILE} \ + --output-file ${OUTPUT_FILE} \ + --input-img ${INPUT_IMAGE_PATH} \ + --shape ${IMAGE_SHAPE} \ + --mean ${IMAGE_MEAN} \ + --std ${IMAGE_STD} \ + --dataset ${DATASET_NAME} \ + --test-img ${TEST_IMAGE_PATH} \ + --opset-version ${OPSET_VERSION} \ + --show \ + --verify \ +``` + +Description of all arguments: + +- `config` : The path of a model config file. +- `checkpoint` : The path of a model checkpoint file. +- `--output-file`: The path of output ONNX model. If not specified, it will be set to `tmp.onnx`. +- `--input-img` : The path of an input image for tracing and conversion. By default, it will be set to `tests/data/color.jpg`. +- `--shape`: The height and width of input tensor to the model. If not specified, it will be set to `800 1216`. +- `--mean` : Three mean values for the input image. If not specified, it will be set to `123.675 116.28 103.53`. +- `--std` : Three std values for the input image. If not specified, it will be set to `58.395 57.12 57.375`. +- `--dataset` : The dataset name for the input model. If not specified, it will be set to `coco`. +- `--test-img` : The path of an image to verify the exported ONNX model. By default, it will be set to `None`, meaning it will use `--input-img` for verification. +- `--opset-version` : The opset version of ONNX. If not specified, it will be set to `11`. +- `--show`: Determines whether to print the architecture of the exported model. If not specified, it will be set to `False`. +- `--verify`: Determines whether to verify the correctness of an exported model. If not specified, it will be set to `False`. +- `--simplify`: Determines whether to simplify the exported ONNX model. If not specified, it will be set to `False`. + +Example: + +```bash +python tools/deployment/pytorch2onnx.py \ + configs/yolo/yolov3_d53_mstrain-608_273e_coco.py \ + checkpoints/yolo/yolov3_d53_mstrain-608_273e_coco.pth \ + --output-file checkpoints/yolo/yolov3_d53_mstrain-608_273e_coco.onnx \ + --input-img demo/demo.jpg \ + --test-img tests/data/color.jpg \ + --shape 608 608 \ + --mean 0 0 0 \ + --std 255 255 255 \ + --show \ + --verify \ +``` + +## List of supported models exportable to ONNX + +The table below lists the models that are guaranteed to be exportable to ONNX and runnable in ONNX Runtime. + +| Model | Config | Note | +| :---------: | :--------------------------------------------------: | :---: | +| SSD | `configs/ssd/ssd300_coco.py` | | +| YOLOv3 | `configs/yolo/yolov3_d53_mstrain-608_273e_coco.py` | | +| FSAF | `configs/fsaf/fsaf_r50_fpn_1x_coco.py` | | +| RetinaNet | `configs/retinanet/retinanet_r50_fpn_1x_coco.py` | | +| Faster-RCNN | `configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py` | | + +Notes: + +- *All models above are tested with Pytorch==1.6.0* + +## Reminders + +- When the input model has custom op such as `RoIAlign` and if you want to verify the exported ONNX model, you may have to build `mmcv` with [ONNXRuntime](https://mmcv.readthedocs.io/en/latest/onnxruntime_op.html) from source. +- `mmcv.onnx.simplify` feature is based on [onnx-simplifier](https://github.com/daquexian/onnx-simplifier). If you want to try it, please refer to [onnx in `mmcv`](https://mmcv.readthedocs.io/en/latest/onnx.html) and [onnxruntime op in `mmcv`](https://mmcv.readthedocs.io/en/latest/onnxruntime_op.html) for more information. +- If you meet any problem with the listed models above, please create an issue and it would be taken care of soon. For models not included in the list, please try to dig a little deeper and debug a little bit more and hopefully solve them by yourself. +- Because this feature is experimental and may change fast, please always try with the latest `mmcv` and `mmdetecion`. + +## FAQs + +- None diff --git a/PyTorch/NLP/Conformer-main/mmdetection/docs/useful_tools.md b/PyTorch/NLP/Conformer-main/mmdetection/docs/useful_tools.md new file mode 100644 index 00000000..1c39a417 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/docs/useful_tools.md @@ -0,0 +1,210 @@ +Apart from training/testing scripts, We provide lots of useful tools under the + `tools/` directory. + +## Log Analysis + +`tools/analysis_tools/analyze_logs.py` plots loss/mAP curves given a training + log file. Run `pip install seaborn` first to install the dependency. + + ```shell +python tools/analysis_tools/analyze_logs.py plot_curve [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUT_FILE}] +``` + +![loss curve image](../resources/loss_curve.png) + +Examples: + +- Plot the classification loss of some run. + + ```shell + python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls + ``` + +- Plot the classification and regression loss of some run, and save the figure to a pdf. + + ```shell + python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys loss_cls loss_bbox --out losses.pdf + ``` + +- Compare the bbox mAP of two runs in the same figure. + + ```shell + python tools/analysis_tools/analyze_logs.py plot_curve log1.json log2.json --keys bbox_mAP --legend run1 run2 + ``` + +- Compute the average training speed. + + ```shell + python tools/analysis_tools/analyze_logs.py cal_train_time log.json [--include-outliers] + ``` + + The output is expected to be like the following. + + ```text + -----Analyze train time of work_dirs/some_exp/20190611_192040.log.json----- + slowest epoch 11, average time is 1.2024 + fastest epoch 1, average time is 1.1909 + time std over epochs is 0.0028 + average iter time: 1.1959 s/iter + ``` + +## Visualization + +### Visualize Datasets + +`tools/misc/browse_dataset.py` helps the user to browse a detection dataset (both + images and bounding box annotations) visually, or save the image to a + designated directory. + +```shell +python tools/misc/browse_dataset.py ${CONFIG} [-h] [--skip-type ${SKIP_TYPE[SKIP_TYPE...]}] [--output-dir ${OUTPUT_DIR}] [--not-show] [--show-interval ${SHOW_INTERVAL}] +``` + +### Visualize Models + +First, convert the model to ONNX as described +[here](#convert-mmdetection-model-to-onnx-experimental). +Note that currently only RetinaNet is supported, support for other models + will be coming in later versions. +The converted model could be visualized by tools like [Netron](https://github.com/lutzroeder/netron). + +### Visualize Predictions + +If you need a lightweight GUI for visualizing the detection results, you can refer [DetVisGUI project](https://github.com/Chien-Hung/DetVisGUI/tree/mmdetection). + +## Error Analysis + +`tools/analysis_tools/coco_error_analysis.py` analyzes COCO results per category and by + different criterion. It can also make a plot to provide useful + information. + +```shell +python tools/analysis_tools/coco_error_analysis.py ${RESULT} ${OUT_DIR} [-h] [--ann ${ANN}] [--types ${TYPES[TYPES...]}] +``` + +## Model Complexity + +`tools/analysis_tools/get_flops.py` is a script adapted from [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) to compute the FLOPs and params of a given model. + +```shell +python tools/analysis_tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}] +``` + +You will get the results like this. + +```text +============================== +Input shape: (3, 1280, 800) +Flops: 239.32 GFLOPs +Params: 37.74 M +============================== +``` + +**Note**: This tool is still experimental and we do not guarantee that the + number is absolutely correct. You may well use the result for simple + comparisons, but double check it before you adopt it in technical reports or papers. + +1. FLOPs are related to the input shape while parameters are not. The default + input shape is (1, 3, 1280, 800). +2. Some operators are not counted into FLOPs like GN and custom operators. Refer to [`mmcv.cnn.get_model_complexity_info()`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py) for details. +3. The FLOPs of two-stage detectors is dependent on the number of proposals. + +## Model conversion + +### MMDetection model to ONNX (experimental) + +We provide a script to convert model to [ONNX](https://github.com/onnx/onnx) format. We also support comparing the output results between Pytorch and ONNX model for verification. + +```shell +python tools/deployment/pytorch2onnx.py ${CONFIG_FILE} ${CHECKPOINT_FILE} --output_file ${ONNX_FILE} [--shape ${INPUT_SHAPE} --verify] +``` + +**Note**: This tool is still experimental. Some customized operators are not supported for now. For a detailed description of the usage and the list of supported models, please refer to [pytorch2onnx](tutorials/pytorch2onnx.md). + +### MMDetection 1.x model to MMDetection 2.x + +`tools/model_converters/upgrade_model_version.py` upgrades a previous MMDetection checkpoint + to the new version. Note that this script is not guaranteed to work as some + breaking changes are introduced in the new version. It is recommended to + directly use the new checkpoints. + +```shell +python tools/model_converters/upgrade_model_version.py ${IN_FILE} ${OUT_FILE} [-h] [--num-classes NUM_CLASSES] +``` + +### RegNet model to MMDetection + +`tools/model_converters/regnet2mmdet.py` convert keys in pycls pretrained RegNet models to + MMDetection style. + +```shell +python tools/model_converters/regnet2mmdet.py ${SRC} ${DST} [-h] +``` + +### Detectron ResNet to Pytorch + +`tools/model_converters/detectron2pytorch.py` converts keys in the original detectron pretrained + ResNet models to PyTorch style. + +```shell +python tools/model_converters/detectron2pytorch.py ${SRC} ${DST} ${DEPTH} [-h] +``` + +### Prepare a model for publishing + +`tools/model_converters/publish_model.py` helps users to prepare their model for publishing. + +Before you upload a model to AWS, you may want to + +1. convert model weights to CPU tensors +2. delete the optimizer states and +3. compute the hash of the checkpoint file and append the hash id to the + filename. + +```shell +python tools/model_converters/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME} +``` + +E.g., + +```shell +python tools/model_converters/publish_model.py work_dirs/faster_rcnn/latest.pth faster_rcnn_r50_fpn_1x_20190801.pth +``` + +The final output filename will be `faster_rcnn_r50_fpn_1x_20190801-{hash id}.pth`. + +## Dataset Conversion + +`tools/data_converters/` contains tools to convert the Cityscapes dataset + and Pascal VOC dataset to the COCO format. + +```shell +python tools/dataset_converters/cityscapes.py ${CITYSCAPES_PATH} [-h] [--img-dir ${IMG_DIR}] [--gt-dir ${GT_DIR}] [-o ${OUT_DIR}] [--nproc ${NPROC}] +python tools/dataset_converters/pascal_voc.py ${DEVKIT_PATH} [-h] [-o ${OUT_DIR}] +``` + +## Miscellaneous + +### Evaluating a metric + +`tools/analysis_tools/eval_metric.py` evaluates certain metrics of a pkl result file + according to a config file. + +```shell +python tools/analysis_tools/eval_metric.py ${CONFIG} ${PKL_RESULTS} [-h] [--format-only] [--eval ${EVAL[EVAL ...]}] + [--cfg-options ${CFG_OPTIONS [CFG_OPTIONS ...]}] + [--eval-options ${EVAL_OPTIONS [EVAL_OPTIONS ...]}] +``` + +### Print the entire config + +`tools/misc/print_config.py` prints the whole config verbatim, expanding all its + imports. + +```shell +python tools/misc/print_config.py ${CONFIG} [-h] [--options ${OPTIONS [OPTIONS...]}] +``` + +### Test the robustness of detectors + +Please refer to [robustness_benchmarking.md](robustness_benchmarking.md). diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/__init__.py new file mode 100644 index 00000000..430cc55e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/__init__.py @@ -0,0 +1,28 @@ +import mmcv + +from .version import __version__, short_version + + +def digit_version(version_str): + digit_version = [] + for x in version_str.split('.'): + if x.isdigit(): + digit_version.append(int(x)) + elif x.find('rc') != -1: + patch_version = x.split('rc') + digit_version.append(int(patch_version[0]) - 1) + digit_version.append(int(patch_version[1])) + return digit_version + + +mmcv_minimum_version = '1.2.4' +mmcv_maximum_version = '1.3' +mmcv_version = digit_version(mmcv.__version__) + + +assert (mmcv_version >= digit_version(mmcv_minimum_version) + and mmcv_version <= digit_version(mmcv_maximum_version)), \ + f'MMCV=={mmcv.__version__} is used but incompatible. ' \ + f'Please install mmcv>={mmcv_minimum_version}, <={mmcv_maximum_version}.' + +__all__ = ['__version__', 'short_version'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/__init__.py new file mode 100644 index 00000000..1d8035b7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/__init__.py @@ -0,0 +1,10 @@ +from .inference import (async_inference_detector, inference_detector, + init_detector, show_result_pyplot) +from .test import multi_gpu_test, single_gpu_test +from .train import get_root_logger, set_random_seed, train_detector + +__all__ = [ + 'get_root_logger', 'set_random_seed', 'train_detector', 'init_detector', + 'async_inference_detector', 'inference_detector', 'show_result_pyplot', + 'multi_gpu_test', 'single_gpu_test' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/inference.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/inference.py new file mode 100644 index 00000000..e5074a51 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/inference.py @@ -0,0 +1,199 @@ +import warnings + +import mmcv +import numpy as np +import torch +from mmcv.ops import RoIPool +from mmcv.parallel import collate, scatter +from mmcv.runner import load_checkpoint + +from mmdet.core import get_classes +from mmdet.datasets import replace_ImageToTensor +from mmdet.datasets.pipelines import Compose +from mmdet.models import build_detector + + +def init_detector(config, checkpoint=None, device='cuda:0', cfg_options=None): + """Initialize a detector from config file. + + Args: + config (str or :obj:`mmcv.Config`): Config file path or the config + object. + checkpoint (str, optional): Checkpoint path. If left as None, the model + will not load any weights. + cfg_options (dict): Options to override some settings in the used + config. + + Returns: + nn.Module: The constructed detector. + """ + if isinstance(config, str): + config = mmcv.Config.fromfile(config) + elif not isinstance(config, mmcv.Config): + raise TypeError('config must be a filename or Config object, ' + f'but got {type(config)}') + if cfg_options is not None: + config.merge_from_dict(cfg_options) + config.model.pretrained = None + config.model.train_cfg = None + model = build_detector(config.model, test_cfg=config.get('test_cfg')) + if checkpoint is not None: + map_loc = 'cpu' if device == 'cpu' else None + checkpoint = load_checkpoint(model, checkpoint, map_location=map_loc) + if 'CLASSES' in checkpoint['meta']: + model.CLASSES = checkpoint['meta']['CLASSES'] + else: + warnings.simplefilter('once') + warnings.warn('Class names are not saved in the checkpoint\'s ' + 'meta data, use COCO classes by default.') + model.CLASSES = get_classes('coco') + model.cfg = config # save the config in the model for convenience + model.to(device) + model.eval() + return model + + +class LoadImage(object): + """A simple pipeline to load image.""" + + def __call__(self, results): + """Call function to load images into results. + + Args: + results (dict): A result dict contains the file name + of the image to be read. + + Returns: + dict: ``results`` will be returned containing loaded image. + """ + if isinstance(results['img'], str): + results['filename'] = results['img'] + results['ori_filename'] = results['img'] + else: + results['filename'] = None + results['ori_filename'] = None + img = mmcv.imread(results['img']) + results['img'] = img + results['img_fields'] = ['img'] + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + return results + + +def inference_detector(model, img): + """Inference image(s) with the detector. + + Args: + model (nn.Module): The loaded detector. + imgs (str/ndarray or list[str/ndarray]): Either image files or loaded + images. + + Returns: + If imgs is a str, a generator will be returned, otherwise return the + detection results directly. + """ + cfg = model.cfg + device = next(model.parameters()).device # model device + # prepare data + if isinstance(img, np.ndarray): + # directly add img + data = dict(img=img) + cfg = cfg.copy() + # set loading pipeline type + cfg.data.test.pipeline[0].type = 'LoadImageFromWebcam' + else: + # add information into dict + data = dict(img_info=dict(filename=img), img_prefix=None) + # build the data pipeline + cfg.data.test.pipeline = replace_ImageToTensor(cfg.data.test.pipeline) + test_pipeline = Compose(cfg.data.test.pipeline) + data = test_pipeline(data) + data = collate([data], samples_per_gpu=1) + # just get the actual data from DataContainer + data['img_metas'] = [img_metas.data[0] for img_metas in data['img_metas']] + data['img'] = [img.data[0] for img in data['img']] + if next(model.parameters()).is_cuda: + # scatter to specified GPU + data = scatter(data, [device])[0] + else: + for m in model.modules(): + assert not isinstance( + m, RoIPool + ), 'CPU inference with RoIPool is not supported currently.' + + # forward the model + with torch.no_grad(): + result = model(return_loss=False, rescale=True, **data)[0] + return result + + +async def async_inference_detector(model, img): + """Async inference image(s) with the detector. + + Args: + model (nn.Module): The loaded detector. + img (str | ndarray): Either image files or loaded images. + + Returns: + Awaitable detection results. + """ + cfg = model.cfg + device = next(model.parameters()).device # model device + # prepare data + if isinstance(img, np.ndarray): + # directly add img + data = dict(img=img) + cfg = cfg.copy() + # set loading pipeline type + cfg.data.test.pipeline[0].type = 'LoadImageFromWebcam' + else: + # add information into dict + data = dict(img_info=dict(filename=img), img_prefix=None) + # build the data pipeline + test_pipeline = Compose(cfg.data.test.pipeline) + data = test_pipeline(data) + data = scatter(collate([data], samples_per_gpu=1), [device])[0] + + # We don't restore `torch.is_grad_enabled()` value during concurrent + # inference since execution can overlap + torch.set_grad_enabled(False) + result = await model.aforward_test(rescale=True, **data) + return result + + +def show_result_pyplot(model, + img, + result, + score_thr=0.3, + fig_size=(15, 10), + title='result', + block=True, + wait_time=0): + """Visualize the detection results on the image. + + Args: + model (nn.Module): The loaded detector. + img (str or np.ndarray): Image filename or loaded image. + result (tuple[list] or list): The detection result, can be either + (bbox, segm) or just bbox. + score_thr (float): The threshold to visualize the bboxes and masks. + fig_size (tuple): Figure size of the pyplot figure. + title (str): Title of the pyplot figure. + block (bool): Whether to block GUI. Default: True + wait_time (float): Value of waitKey param. + Default: 0. + """ + warnings.warn('"block" will be deprecated in v2.9.0,' + 'Please use "wait_time"') + if hasattr(model, 'module'): + model = model.module + model.show_result( + img, + result, + score_thr=score_thr, + show=True, + wait_time=wait_time, + fig_size=fig_size, + win_name=title, + bbox_color=(72, 101, 241), + text_color=(72, 101, 241)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/test.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/test.py new file mode 100644 index 00000000..e54b1b8c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/test.py @@ -0,0 +1,190 @@ +import os.path as osp +import pickle +import shutil +import tempfile +import time + +import mmcv +import torch +import torch.distributed as dist +from mmcv.image import tensor2imgs +from mmcv.runner import get_dist_info + +from mmdet.core import encode_mask_results + + +def single_gpu_test(model, + data_loader, + show=False, + out_dir=None, + show_score_thr=0.3): + model.eval() + results = [] + dataset = data_loader.dataset + prog_bar = mmcv.ProgressBar(len(dataset)) + for i, data in enumerate(data_loader): + with torch.no_grad(): + result = model(return_loss=False, rescale=True, **data) + + batch_size = len(result) + if show or out_dir: + if batch_size == 1 and isinstance(data['img'][0], torch.Tensor): + img_tensor = data['img'][0] + else: + img_tensor = data['img'][0].data[0] + img_metas = data['img_metas'][0].data[0] + imgs = tensor2imgs(img_tensor, **img_metas[0]['img_norm_cfg']) + assert len(imgs) == len(img_metas) + + for i, (img, img_meta) in enumerate(zip(imgs, img_metas)): + h, w, _ = img_meta['img_shape'] + img_show = img[:h, :w, :] + + ori_h, ori_w = img_meta['ori_shape'][:-1] + img_show = mmcv.imresize(img_show, (ori_w, ori_h)) + + if out_dir: + out_file = osp.join(out_dir, img_meta['ori_filename']) + else: + out_file = None + + model.module.show_result( + img_show, + result[i], + show=show, + out_file=out_file, + score_thr=show_score_thr) + + # encode mask results + if isinstance(result[0], tuple): + result = [(bbox_results, encode_mask_results(mask_results)) + for bbox_results, mask_results in result] + results.extend(result) + + for _ in range(batch_size): + prog_bar.update() + return results + + +def multi_gpu_test(model, data_loader, tmpdir=None, gpu_collect=False): + """Test model with multiple gpus. + + This method tests model with multiple gpus and collects the results + under two different modes: gpu and cpu modes. By setting 'gpu_collect=True' + it encodes results to gpu tensors and use gpu communication for results + collection. On cpu mode it saves the results on different gpus to 'tmpdir' + and collects them by the rank 0 worker. + + Args: + model (nn.Module): Model to be tested. + data_loader (nn.Dataloader): Pytorch data loader. + tmpdir (str): Path of directory to save the temporary results from + different gpus under cpu mode. + gpu_collect (bool): Option to use either gpu or cpu to collect results. + + Returns: + list: The prediction results. + """ + model.eval() + results = [] + dataset = data_loader.dataset + rank, world_size = get_dist_info() + if rank == 0: + prog_bar = mmcv.ProgressBar(len(dataset)) + time.sleep(2) # This line can prevent deadlock problem in some cases. + for i, data in enumerate(data_loader): + with torch.no_grad(): + result = model(return_loss=False, rescale=True, **data) + # encode mask results + if isinstance(result[0], tuple): + result = [(bbox_results, encode_mask_results(mask_results)) + for bbox_results, mask_results in result] + results.extend(result) + + if rank == 0: + batch_size = len(result) + for _ in range(batch_size * world_size): + prog_bar.update() + + # collect results from all ranks + if gpu_collect: + results = collect_results_gpu(results, len(dataset)) + else: + results = collect_results_cpu(results, len(dataset), tmpdir) + return results + + +def collect_results_cpu(result_part, size, tmpdir=None): + rank, world_size = get_dist_info() + # create a tmp dir if it is not specified + if tmpdir is None: + MAX_LEN = 512 + # 32 is whitespace + dir_tensor = torch.full((MAX_LEN, ), + 32, + dtype=torch.uint8, + device='cuda') + if rank == 0: + mmcv.mkdir_or_exist('.dist_test') + tmpdir = tempfile.mkdtemp(dir='.dist_test') + tmpdir = torch.tensor( + bytearray(tmpdir.encode()), dtype=torch.uint8, device='cuda') + dir_tensor[:len(tmpdir)] = tmpdir + dist.broadcast(dir_tensor, 0) + tmpdir = dir_tensor.cpu().numpy().tobytes().decode().rstrip() + else: + mmcv.mkdir_or_exist(tmpdir) + # dump the part result to the dir + mmcv.dump(result_part, osp.join(tmpdir, f'part_{rank}.pkl')) + dist.barrier() + # collect all parts + if rank != 0: + return None + else: + # load results of all parts from tmp dir + part_list = [] + for i in range(world_size): + part_file = osp.join(tmpdir, f'part_{i}.pkl') + part_list.append(mmcv.load(part_file)) + # sort the results + ordered_results = [] + for res in zip(*part_list): + ordered_results.extend(list(res)) + # the dataloader may pad some samples + ordered_results = ordered_results[:size] + # remove tmp dir + shutil.rmtree(tmpdir) + return ordered_results + + +def collect_results_gpu(result_part, size): + rank, world_size = get_dist_info() + # dump result part to tensor with pickle + part_tensor = torch.tensor( + bytearray(pickle.dumps(result_part)), dtype=torch.uint8, device='cuda') + # gather all result part tensor shape + shape_tensor = torch.tensor(part_tensor.shape, device='cuda') + shape_list = [shape_tensor.clone() for _ in range(world_size)] + dist.all_gather(shape_list, shape_tensor) + # padding result part tensor to max length + shape_max = torch.tensor(shape_list).max() + part_send = torch.zeros(shape_max, dtype=torch.uint8, device='cuda') + part_send[:shape_tensor[0]] = part_tensor + part_recv_list = [ + part_tensor.new_zeros(shape_max) for _ in range(world_size) + ] + # gather all result part + dist.all_gather(part_recv_list, part_send) + + if rank == 0: + part_list = [] + for recv, shape in zip(part_recv_list, shape_list): + part_list.append( + pickle.loads(recv[:shape[0]].cpu().numpy().tobytes())) + # sort the results + ordered_results = [] + for res in zip(*part_list): + ordered_results.extend(list(res)) + # the dataloader may pad some samples + ordered_results = ordered_results[:size] + return ordered_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/train.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/train.py new file mode 100644 index 00000000..ad17a537 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/apis/train.py @@ -0,0 +1,150 @@ +import random + +import numpy as np +import torch +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import (HOOKS, DistSamplerSeedHook, EpochBasedRunner, + Fp16OptimizerHook, OptimizerHook, build_optimizer) +from mmcv.utils import build_from_cfg + +from mmdet.core import DistEvalHook, EvalHook +from mmdet.datasets import (build_dataloader, build_dataset, + replace_ImageToTensor) +from mmdet.utils import get_root_logger + + +def set_random_seed(seed, deterministic=False): + """Set random seed. + + Args: + seed (int): Seed to be used. + deterministic (bool): Whether to set the deterministic option for + CUDNN backend, i.e., set `torch.backends.cudnn.deterministic` + to True and `torch.backends.cudnn.benchmark` to False. + Default: False. + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + if deterministic: + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def train_detector(model, + dataset, + cfg, + distributed=False, + validate=False, + timestamp=None, + meta=None): + logger = get_root_logger(cfg.log_level) + + # prepare data loaders + dataset = dataset if isinstance(dataset, (list, tuple)) else [dataset] + if 'imgs_per_gpu' in cfg.data: + logger.warning('"imgs_per_gpu" is deprecated in MMDet V2.0. ' + 'Please use "samples_per_gpu" instead') + if 'samples_per_gpu' in cfg.data: + logger.warning( + f'Got "imgs_per_gpu"={cfg.data.imgs_per_gpu} and ' + f'"samples_per_gpu"={cfg.data.samples_per_gpu}, "imgs_per_gpu"' + f'={cfg.data.imgs_per_gpu} is used in this experiments') + else: + logger.warning( + 'Automatically set "samples_per_gpu"="imgs_per_gpu"=' + f'{cfg.data.imgs_per_gpu} in this experiments') + cfg.data.samples_per_gpu = cfg.data.imgs_per_gpu + + data_loaders = [ + build_dataloader( + ds, + cfg.data.samples_per_gpu, + cfg.data.workers_per_gpu, + # cfg.gpus will be ignored if distributed + len(cfg.gpu_ids), + dist=distributed, + seed=cfg.seed) for ds in dataset + ] + + # put model on gpus + if distributed: + find_unused_parameters = cfg.get('find_unused_parameters', False) + # Sets the `find_unused_parameters` parameter in + # torch.nn.parallel.DistributedDataParallel + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False, + find_unused_parameters=find_unused_parameters) + else: + model = MMDataParallel( + model.cuda(cfg.gpu_ids[0]), device_ids=cfg.gpu_ids) + + # build runner + optimizer = build_optimizer(model, cfg.optimizer) + runner = EpochBasedRunner( + model, + optimizer=optimizer, + work_dir=cfg.work_dir, + logger=logger, + meta=meta) + # an ugly workaround to make .log and .log.json filenames the same + runner.timestamp = timestamp + + # fp16 setting + fp16_cfg = cfg.get('fp16', None) + if fp16_cfg is not None: + optimizer_config = Fp16OptimizerHook( + **cfg.optimizer_config, **fp16_cfg, distributed=distributed) + elif distributed and 'type' not in cfg.optimizer_config: + optimizer_config = OptimizerHook(**cfg.optimizer_config) + else: + optimizer_config = cfg.optimizer_config + + # register hooks + runner.register_training_hooks(cfg.lr_config, optimizer_config, + cfg.checkpoint_config, cfg.log_config, + cfg.get('momentum_config', None)) + if distributed: + runner.register_hook(DistSamplerSeedHook()) + + # register eval hooks + if validate: + # Support batch_size > 1 in validation + val_samples_per_gpu = cfg.data.val.pop('samples_per_gpu', 1) + if val_samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.val.pipeline = replace_ImageToTensor( + cfg.data.val.pipeline) + val_dataset = build_dataset(cfg.data.val, dict(test_mode=True)) + val_dataloader = build_dataloader( + val_dataset, + samples_per_gpu=val_samples_per_gpu, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False) + eval_cfg = cfg.get('evaluation', {}) + eval_hook = DistEvalHook if distributed else EvalHook + runner.register_hook(eval_hook(val_dataloader, **eval_cfg)) + + # user-defined hooks + if cfg.get('custom_hooks', None): + custom_hooks = cfg.custom_hooks + assert isinstance(custom_hooks, list), \ + f'custom_hooks expect list type, but got {type(custom_hooks)}' + for hook_cfg in cfg.custom_hooks: + assert isinstance(hook_cfg, dict), \ + 'Each item in custom_hooks expects dict type, but got ' \ + f'{type(hook_cfg)}' + hook_cfg = hook_cfg.copy() + priority = hook_cfg.pop('priority', 'NORMAL') + hook = build_from_cfg(hook_cfg, HOOKS) + runner.register_hook(hook, priority=priority) + + if cfg.resume_from: + runner.resume(cfg.resume_from) + elif cfg.load_from: + runner.load_checkpoint(cfg.load_from) + runner.run(data_loaders, cfg.workflow, cfg.total_epochs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/__init__.py new file mode 100644 index 00000000..b0753690 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/__init__.py @@ -0,0 +1,8 @@ +from .anchor import * # noqa: F401, F403 +from .bbox import * # noqa: F401, F403 +from .evaluation import * # noqa: F401, F403 +from .export import * # noqa: F401, F403 +from .fp16 import * # noqa: F401, F403 +from .mask import * # noqa: F401, F403 +from .post_processing import * # noqa: F401, F403 +from .utils import * # noqa: F401, F403 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/__init__.py new file mode 100644 index 00000000..5838ff3e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/__init__.py @@ -0,0 +1,11 @@ +from .anchor_generator import (AnchorGenerator, LegacyAnchorGenerator, + YOLOAnchorGenerator) +from .builder import ANCHOR_GENERATORS, build_anchor_generator +from .point_generator import PointGenerator +from .utils import anchor_inside_flags, calc_region, images_to_levels + +__all__ = [ + 'AnchorGenerator', 'LegacyAnchorGenerator', 'anchor_inside_flags', + 'PointGenerator', 'images_to_levels', 'calc_region', + 'build_anchor_generator', 'ANCHOR_GENERATORS', 'YOLOAnchorGenerator' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/anchor_generator.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/anchor_generator.py new file mode 100644 index 00000000..29b5ed04 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/anchor_generator.py @@ -0,0 +1,728 @@ +import mmcv +import numpy as np +import torch +from torch.nn.modules.utils import _pair + +from .builder import ANCHOR_GENERATORS + + +@ANCHOR_GENERATORS.register_module() +class AnchorGenerator(object): + """Standard anchor generator for 2D anchor-based detectors. + + Args: + strides (list[int] | list[tuple[int, int]]): Strides of anchors + in multiple feature levels in order (w, h). + ratios (list[float]): The list of ratios between the height and width + of anchors in a single level. + scales (list[int] | None): Anchor scales for anchors in a single level. + It cannot be set at the same time if `octave_base_scale` and + `scales_per_octave` are set. + base_sizes (list[int] | None): The basic sizes + of anchors in multiple levels. + If None is given, strides will be used as base_sizes. + (If strides are non square, the shortest stride is taken.) + scale_major (bool): Whether to multiply scales first when generating + base anchors. If true, the anchors in the same row will have the + same scales. By default it is True in V2.0 + octave_base_scale (int): The base scale of octave. + scales_per_octave (int): Number of scales for each octave. + `octave_base_scale` and `scales_per_octave` are usually used in + retinanet and the `scales` should be None when they are set. + centers (list[tuple[float, float]] | None): The centers of the anchor + relative to the feature grid center in multiple feature levels. + By default it is set to be None and not used. If a list of tuple of + float is given, they will be used to shift the centers of anchors. + center_offset (float): The offset of center in proportion to anchors' + width and height. By default it is 0 in V2.0. + + Examples: + >>> from mmdet.core import AnchorGenerator + >>> self = AnchorGenerator([16], [1.], [1.], [9]) + >>> all_anchors = self.grid_anchors([(2, 2)], device='cpu') + >>> print(all_anchors) + [tensor([[-4.5000, -4.5000, 4.5000, 4.5000], + [11.5000, -4.5000, 20.5000, 4.5000], + [-4.5000, 11.5000, 4.5000, 20.5000], + [11.5000, 11.5000, 20.5000, 20.5000]])] + >>> self = AnchorGenerator([16, 32], [1.], [1.], [9, 18]) + >>> all_anchors = self.grid_anchors([(2, 2), (1, 1)], device='cpu') + >>> print(all_anchors) + [tensor([[-4.5000, -4.5000, 4.5000, 4.5000], + [11.5000, -4.5000, 20.5000, 4.5000], + [-4.5000, 11.5000, 4.5000, 20.5000], + [11.5000, 11.5000, 20.5000, 20.5000]]), \ + tensor([[-9., -9., 9., 9.]])] + """ + + def __init__(self, + strides, + ratios, + scales=None, + base_sizes=None, + scale_major=True, + octave_base_scale=None, + scales_per_octave=None, + centers=None, + center_offset=0.): + # check center and center_offset + if center_offset != 0: + assert centers is None, 'center cannot be set when center_offset' \ + f'!=0, {centers} is given.' + if not (0 <= center_offset <= 1): + raise ValueError('center_offset should be in range [0, 1], ' + f'{center_offset} is given.') + if centers is not None: + assert len(centers) == len(strides), \ + 'The number of strides should be the same as centers, got ' \ + f'{strides} and {centers}' + + # calculate base sizes of anchors + self.strides = [_pair(stride) for stride in strides] + self.base_sizes = [min(stride) for stride in self.strides + ] if base_sizes is None else base_sizes + assert len(self.base_sizes) == len(self.strides), \ + 'The number of strides should be the same as base sizes, got ' \ + f'{self.strides} and {self.base_sizes}' + + # calculate scales of anchors + assert ((octave_base_scale is not None + and scales_per_octave is not None) ^ (scales is not None)), \ + 'scales and octave_base_scale with scales_per_octave cannot' \ + ' be set at the same time' + if scales is not None: + self.scales = torch.Tensor(scales) + elif octave_base_scale is not None and scales_per_octave is not None: + octave_scales = np.array( + [2**(i / scales_per_octave) for i in range(scales_per_octave)]) + scales = octave_scales * octave_base_scale + self.scales = torch.Tensor(scales) + else: + raise ValueError('Either scales or octave_base_scale with ' + 'scales_per_octave should be set') + + self.octave_base_scale = octave_base_scale + self.scales_per_octave = scales_per_octave + self.ratios = torch.Tensor(ratios) + self.scale_major = scale_major + self.centers = centers + self.center_offset = center_offset + self.base_anchors = self.gen_base_anchors() + + @property + def num_base_anchors(self): + """list[int]: total number of base anchors in a feature grid""" + return [base_anchors.size(0) for base_anchors in self.base_anchors] + + @property + def num_levels(self): + """int: number of feature levels that the generator will be applied""" + return len(self.strides) + + def gen_base_anchors(self): + """Generate base anchors. + + Returns: + list(torch.Tensor): Base anchors of a feature grid in multiple \ + feature levels. + """ + multi_level_base_anchors = [] + for i, base_size in enumerate(self.base_sizes): + center = None + if self.centers is not None: + center = self.centers[i] + multi_level_base_anchors.append( + self.gen_single_level_base_anchors( + base_size, + scales=self.scales, + ratios=self.ratios, + center=center)) + return multi_level_base_anchors + + def gen_single_level_base_anchors(self, + base_size, + scales, + ratios, + center=None): + """Generate base anchors of a single level. + + Args: + base_size (int | float): Basic size of an anchor. + scales (torch.Tensor): Scales of the anchor. + ratios (torch.Tensor): The ratio between between the height + and width of anchors in a single level. + center (tuple[float], optional): The center of the base anchor + related to a single feature grid. Defaults to None. + + Returns: + torch.Tensor: Anchors in a single-level feature maps. + """ + w = base_size + h = base_size + if center is None: + x_center = self.center_offset * w + y_center = self.center_offset * h + else: + x_center, y_center = center + + h_ratios = torch.sqrt(ratios) + w_ratios = 1 / h_ratios + if self.scale_major: + ws = (w * w_ratios[:, None] * scales[None, :]).view(-1) + hs = (h * h_ratios[:, None] * scales[None, :]).view(-1) + else: + ws = (w * scales[:, None] * w_ratios[None, :]).view(-1) + hs = (h * scales[:, None] * h_ratios[None, :]).view(-1) + + # use float anchor and the anchor's center is aligned with the + # pixel center + base_anchors = [ + x_center - 0.5 * ws, y_center - 0.5 * hs, x_center + 0.5 * ws, + y_center + 0.5 * hs + ] + base_anchors = torch.stack(base_anchors, dim=-1) + + return base_anchors + + def _meshgrid(self, x, y, row_major=True): + """Generate mesh grid of x and y. + + Args: + x (torch.Tensor): Grids of x dimension. + y (torch.Tensor): Grids of y dimension. + row_major (bool, optional): Whether to return y grids first. + Defaults to True. + + Returns: + tuple[torch.Tensor]: The mesh grids of x and y. + """ + xx = x.repeat(len(y)) + yy = y.view(-1, 1).repeat(1, len(x)).view(-1) + if row_major: + return xx, yy + else: + return yy, xx + + def grid_anchors(self, featmap_sizes, device='cuda'): + """Generate grid anchors in multiple feature levels. + + Args: + featmap_sizes (list[tuple]): List of feature map sizes in + multiple feature levels. + device (str): Device where the anchors will be put on. + + Return: + list[torch.Tensor]: Anchors in multiple feature levels. \ + The sizes of each tensor should be [N, 4], where \ + N = width * height * num_base_anchors, width and height \ + are the sizes of the corresponding feature level, \ + num_base_anchors is the number of anchors for that level. + """ + assert self.num_levels == len(featmap_sizes) + multi_level_anchors = [] + for i in range(self.num_levels): + anchors = self.single_level_grid_anchors( + self.base_anchors[i].to(device), + featmap_sizes[i], + self.strides[i], + device=device) + multi_level_anchors.append(anchors) + return multi_level_anchors + + def single_level_grid_anchors(self, + base_anchors, + featmap_size, + stride=(16, 16), + device='cuda'): + """Generate grid anchors of a single level. + + Note: + This function is usually called by method ``self.grid_anchors``. + + Args: + base_anchors (torch.Tensor): The base anchors of a feature grid. + featmap_size (tuple[int]): Size of the feature maps. + stride (tuple[int], optional): Stride of the feature map in order + (w, h). Defaults to (16, 16). + device (str, optional): Device the tensor will be put on. + Defaults to 'cuda'. + + Returns: + torch.Tensor: Anchors in the overall feature maps. + """ + feat_h, feat_w = featmap_size + # convert Tensor to int, so that we can covert to ONNX correctlly + feat_h = int(feat_h) + feat_w = int(feat_w) + shift_x = torch.arange(0, feat_w, device=device) * stride[0] + shift_y = torch.arange(0, feat_h, device=device) * stride[1] + + shift_xx, shift_yy = self._meshgrid(shift_x, shift_y) + shifts = torch.stack([shift_xx, shift_yy, shift_xx, shift_yy], dim=-1) + shifts = shifts.type_as(base_anchors) + # first feat_w elements correspond to the first row of shifts + # add A anchors (1, A, 4) to K shifts (K, 1, 4) to get + # shifted anchors (K, A, 4), reshape to (K*A, 4) + + all_anchors = base_anchors[None, :, :] + shifts[:, None, :] + all_anchors = all_anchors.view(-1, 4) + # first A rows correspond to A anchors of (0, 0) in feature map, + # then (0, 1), (0, 2), ... + return all_anchors + + def valid_flags(self, featmap_sizes, pad_shape, device='cuda'): + """Generate valid flags of anchors in multiple feature levels. + + Args: + featmap_sizes (list(tuple)): List of feature map sizes in + multiple feature levels. + pad_shape (tuple): The padded shape of the image. + device (str): Device where the anchors will be put on. + + Return: + list(torch.Tensor): Valid flags of anchors in multiple levels. + """ + assert self.num_levels == len(featmap_sizes) + multi_level_flags = [] + for i in range(self.num_levels): + anchor_stride = self.strides[i] + feat_h, feat_w = featmap_sizes[i] + h, w = pad_shape[:2] + valid_feat_h = min(int(np.ceil(h / anchor_stride[1])), feat_h) + valid_feat_w = min(int(np.ceil(w / anchor_stride[0])), feat_w) + flags = self.single_level_valid_flags((feat_h, feat_w), + (valid_feat_h, valid_feat_w), + self.num_base_anchors[i], + device=device) + multi_level_flags.append(flags) + return multi_level_flags + + def single_level_valid_flags(self, + featmap_size, + valid_size, + num_base_anchors, + device='cuda'): + """Generate the valid flags of anchor in a single feature map. + + Args: + featmap_size (tuple[int]): The size of feature maps. + valid_size (tuple[int]): The valid size of the feature maps. + num_base_anchors (int): The number of base anchors. + device (str, optional): Device where the flags will be put on. + Defaults to 'cuda'. + + Returns: + torch.Tensor: The valid flags of each anchor in a single level \ + feature map. + """ + feat_h, feat_w = featmap_size + valid_h, valid_w = valid_size + assert valid_h <= feat_h and valid_w <= feat_w + valid_x = torch.zeros(feat_w, dtype=torch.bool, device=device) + valid_y = torch.zeros(feat_h, dtype=torch.bool, device=device) + valid_x[:valid_w] = 1 + valid_y[:valid_h] = 1 + valid_xx, valid_yy = self._meshgrid(valid_x, valid_y) + valid = valid_xx & valid_yy + valid = valid[:, None].expand(valid.size(0), + num_base_anchors).contiguous().view(-1) + return valid + + def __repr__(self): + """str: a string that describes the module""" + indent_str = ' ' + repr_str = self.__class__.__name__ + '(\n' + repr_str += f'{indent_str}strides={self.strides},\n' + repr_str += f'{indent_str}ratios={self.ratios},\n' + repr_str += f'{indent_str}scales={self.scales},\n' + repr_str += f'{indent_str}base_sizes={self.base_sizes},\n' + repr_str += f'{indent_str}scale_major={self.scale_major},\n' + repr_str += f'{indent_str}octave_base_scale=' + repr_str += f'{self.octave_base_scale},\n' + repr_str += f'{indent_str}scales_per_octave=' + repr_str += f'{self.scales_per_octave},\n' + repr_str += f'{indent_str}num_levels={self.num_levels}\n' + repr_str += f'{indent_str}centers={self.centers},\n' + repr_str += f'{indent_str}center_offset={self.center_offset})' + return repr_str + + +@ANCHOR_GENERATORS.register_module() +class SSDAnchorGenerator(AnchorGenerator): + """Anchor generator for SSD. + + Args: + strides (list[int] | list[tuple[int, int]]): Strides of anchors + in multiple feature levels. + ratios (list[float]): The list of ratios between the height and width + of anchors in a single level. + basesize_ratio_range (tuple(float)): Ratio range of anchors. + input_size (int): Size of feature map, 300 for SSD300, + 512 for SSD512. + scale_major (bool): Whether to multiply scales first when generating + base anchors. If true, the anchors in the same row will have the + same scales. It is always set to be False in SSD. + """ + + def __init__(self, + strides, + ratios, + basesize_ratio_range, + input_size=300, + scale_major=True): + assert len(strides) == len(ratios) + assert mmcv.is_tuple_of(basesize_ratio_range, float) + + self.strides = [_pair(stride) for stride in strides] + self.input_size = input_size + self.centers = [(stride[0] / 2., stride[1] / 2.) + for stride in self.strides] + self.basesize_ratio_range = basesize_ratio_range + + # calculate anchor ratios and sizes + min_ratio, max_ratio = basesize_ratio_range + min_ratio = int(min_ratio * 100) + max_ratio = int(max_ratio * 100) + step = int(np.floor(max_ratio - min_ratio) / (self.num_levels - 2)) + min_sizes = [] + max_sizes = [] + for ratio in range(int(min_ratio), int(max_ratio) + 1, step): + min_sizes.append(int(self.input_size * ratio / 100)) + max_sizes.append(int(self.input_size * (ratio + step) / 100)) + if self.input_size == 300: + if basesize_ratio_range[0] == 0.15: # SSD300 COCO + min_sizes.insert(0, int(self.input_size * 7 / 100)) + max_sizes.insert(0, int(self.input_size * 15 / 100)) + elif basesize_ratio_range[0] == 0.2: # SSD300 VOC + min_sizes.insert(0, int(self.input_size * 10 / 100)) + max_sizes.insert(0, int(self.input_size * 20 / 100)) + else: + raise ValueError( + 'basesize_ratio_range[0] should be either 0.15' + 'or 0.2 when input_size is 300, got ' + f'{basesize_ratio_range[0]}.') + elif self.input_size == 512: + if basesize_ratio_range[0] == 0.1: # SSD512 COCO + min_sizes.insert(0, int(self.input_size * 4 / 100)) + max_sizes.insert(0, int(self.input_size * 10 / 100)) + elif basesize_ratio_range[0] == 0.15: # SSD512 VOC + min_sizes.insert(0, int(self.input_size * 7 / 100)) + max_sizes.insert(0, int(self.input_size * 15 / 100)) + else: + raise ValueError('basesize_ratio_range[0] should be either 0.1' + 'or 0.15 when input_size is 512, got' + f' {basesize_ratio_range[0]}.') + else: + raise ValueError('Only support 300 or 512 in SSDAnchorGenerator' + f', got {self.input_size}.') + + anchor_ratios = [] + anchor_scales = [] + for k in range(len(self.strides)): + scales = [1., np.sqrt(max_sizes[k] / min_sizes[k])] + anchor_ratio = [1.] + for r in ratios[k]: + anchor_ratio += [1 / r, r] # 4 or 6 ratio + anchor_ratios.append(torch.Tensor(anchor_ratio)) + anchor_scales.append(torch.Tensor(scales)) + + self.base_sizes = min_sizes + self.scales = anchor_scales + self.ratios = anchor_ratios + self.scale_major = scale_major + self.center_offset = 0 + self.base_anchors = self.gen_base_anchors() + + def gen_base_anchors(self): + """Generate base anchors. + + Returns: + list(torch.Tensor): Base anchors of a feature grid in multiple \ + feature levels. + """ + multi_level_base_anchors = [] + for i, base_size in enumerate(self.base_sizes): + base_anchors = self.gen_single_level_base_anchors( + base_size, + scales=self.scales[i], + ratios=self.ratios[i], + center=self.centers[i]) + indices = list(range(len(self.ratios[i]))) + indices.insert(1, len(indices)) + base_anchors = torch.index_select(base_anchors, 0, + torch.LongTensor(indices)) + multi_level_base_anchors.append(base_anchors) + return multi_level_base_anchors + + def __repr__(self): + """str: a string that describes the module""" + indent_str = ' ' + repr_str = self.__class__.__name__ + '(\n' + repr_str += f'{indent_str}strides={self.strides},\n' + repr_str += f'{indent_str}scales={self.scales},\n' + repr_str += f'{indent_str}scale_major={self.scale_major},\n' + repr_str += f'{indent_str}input_size={self.input_size},\n' + repr_str += f'{indent_str}scales={self.scales},\n' + repr_str += f'{indent_str}ratios={self.ratios},\n' + repr_str += f'{indent_str}num_levels={self.num_levels},\n' + repr_str += f'{indent_str}base_sizes={self.base_sizes},\n' + repr_str += f'{indent_str}basesize_ratio_range=' + repr_str += f'{self.basesize_ratio_range})' + return repr_str + + +@ANCHOR_GENERATORS.register_module() +class LegacyAnchorGenerator(AnchorGenerator): + """Legacy anchor generator used in MMDetection V1.x. + + Note: + Difference to the V2.0 anchor generator: + + 1. The center offset of V1.x anchors are set to be 0.5 rather than 0. + 2. The width/height are minused by 1 when calculating the anchors' \ + centers and corners to meet the V1.x coordinate system. + 3. The anchors' corners are quantized. + + Args: + strides (list[int] | list[tuple[int]]): Strides of anchors + in multiple feature levels. + ratios (list[float]): The list of ratios between the height and width + of anchors in a single level. + scales (list[int] | None): Anchor scales for anchors in a single level. + It cannot be set at the same time if `octave_base_scale` and + `scales_per_octave` are set. + base_sizes (list[int]): The basic sizes of anchors in multiple levels. + If None is given, strides will be used to generate base_sizes. + scale_major (bool): Whether to multiply scales first when generating + base anchors. If true, the anchors in the same row will have the + same scales. By default it is True in V2.0 + octave_base_scale (int): The base scale of octave. + scales_per_octave (int): Number of scales for each octave. + `octave_base_scale` and `scales_per_octave` are usually used in + retinanet and the `scales` should be None when they are set. + centers (list[tuple[float, float]] | None): The centers of the anchor + relative to the feature grid center in multiple feature levels. + By default it is set to be None and not used. It a list of float + is given, this list will be used to shift the centers of anchors. + center_offset (float): The offset of center in propotion to anchors' + width and height. By default it is 0.5 in V2.0 but it should be 0.5 + in v1.x models. + + Examples: + >>> from mmdet.core import LegacyAnchorGenerator + >>> self = LegacyAnchorGenerator( + >>> [16], [1.], [1.], [9], center_offset=0.5) + >>> all_anchors = self.grid_anchors(((2, 2),), device='cpu') + >>> print(all_anchors) + [tensor([[ 0., 0., 8., 8.], + [16., 0., 24., 8.], + [ 0., 16., 8., 24.], + [16., 16., 24., 24.]])] + """ + + def gen_single_level_base_anchors(self, + base_size, + scales, + ratios, + center=None): + """Generate base anchors of a single level. + + Note: + The width/height of anchors are minused by 1 when calculating \ + the centers and corners to meet the V1.x coordinate system. + + Args: + base_size (int | float): Basic size of an anchor. + scales (torch.Tensor): Scales of the anchor. + ratios (torch.Tensor): The ratio between between the height. + and width of anchors in a single level. + center (tuple[float], optional): The center of the base anchor + related to a single feature grid. Defaults to None. + + Returns: + torch.Tensor: Anchors in a single-level feature map. + """ + w = base_size + h = base_size + if center is None: + x_center = self.center_offset * (w - 1) + y_center = self.center_offset * (h - 1) + else: + x_center, y_center = center + + h_ratios = torch.sqrt(ratios) + w_ratios = 1 / h_ratios + if self.scale_major: + ws = (w * w_ratios[:, None] * scales[None, :]).view(-1) + hs = (h * h_ratios[:, None] * scales[None, :]).view(-1) + else: + ws = (w * scales[:, None] * w_ratios[None, :]).view(-1) + hs = (h * scales[:, None] * h_ratios[None, :]).view(-1) + + # use float anchor and the anchor's center is aligned with the + # pixel center + base_anchors = [ + x_center - 0.5 * (ws - 1), y_center - 0.5 * (hs - 1), + x_center + 0.5 * (ws - 1), y_center + 0.5 * (hs - 1) + ] + base_anchors = torch.stack(base_anchors, dim=-1).round() + + return base_anchors + + +@ANCHOR_GENERATORS.register_module() +class LegacySSDAnchorGenerator(SSDAnchorGenerator, LegacyAnchorGenerator): + """Legacy anchor generator used in MMDetection V1.x. + + The difference between `LegacySSDAnchorGenerator` and `SSDAnchorGenerator` + can be found in `LegacyAnchorGenerator`. + """ + + def __init__(self, + strides, + ratios, + basesize_ratio_range, + input_size=300, + scale_major=True): + super(LegacySSDAnchorGenerator, + self).__init__(strides, ratios, basesize_ratio_range, input_size, + scale_major) + self.centers = [((stride - 1) / 2., (stride - 1) / 2.) + for stride in strides] + self.base_anchors = self.gen_base_anchors() + + +@ANCHOR_GENERATORS.register_module() +class YOLOAnchorGenerator(AnchorGenerator): + """Anchor generator for YOLO. + + Args: + strides (list[int] | list[tuple[int, int]]): Strides of anchors + in multiple feature levels. + base_sizes (list[list[tuple[int, int]]]): The basic sizes + of anchors in multiple levels. + """ + + def __init__(self, strides, base_sizes): + self.strides = [_pair(stride) for stride in strides] + self.centers = [(stride[0] / 2., stride[1] / 2.) + for stride in self.strides] + self.base_sizes = [] + num_anchor_per_level = len(base_sizes[0]) + for base_sizes_per_level in base_sizes: + assert num_anchor_per_level == len(base_sizes_per_level) + self.base_sizes.append( + [_pair(base_size) for base_size in base_sizes_per_level]) + self.base_anchors = self.gen_base_anchors() + + @property + def num_levels(self): + """int: number of feature levels that the generator will be applied""" + return len(self.base_sizes) + + def gen_base_anchors(self): + """Generate base anchors. + + Returns: + list(torch.Tensor): Base anchors of a feature grid in multiple \ + feature levels. + """ + multi_level_base_anchors = [] + for i, base_sizes_per_level in enumerate(self.base_sizes): + center = None + if self.centers is not None: + center = self.centers[i] + multi_level_base_anchors.append( + self.gen_single_level_base_anchors(base_sizes_per_level, + center)) + return multi_level_base_anchors + + def gen_single_level_base_anchors(self, base_sizes_per_level, center=None): + """Generate base anchors of a single level. + + Args: + base_sizes_per_level (list[tuple[int, int]]): Basic sizes of + anchors. + center (tuple[float], optional): The center of the base anchor + related to a single feature grid. Defaults to None. + + Returns: + torch.Tensor: Anchors in a single-level feature maps. + """ + x_center, y_center = center + base_anchors = [] + for base_size in base_sizes_per_level: + w, h = base_size + + # use float anchor and the anchor's center is aligned with the + # pixel center + base_anchor = torch.Tensor([ + x_center - 0.5 * w, y_center - 0.5 * h, x_center + 0.5 * w, + y_center + 0.5 * h + ]) + base_anchors.append(base_anchor) + base_anchors = torch.stack(base_anchors, dim=0) + + return base_anchors + + def responsible_flags(self, featmap_sizes, gt_bboxes, device='cuda'): + """Generate responsible anchor flags of grid cells in multiple scales. + + Args: + featmap_sizes (list(tuple)): List of feature map sizes in multiple + feature levels. + gt_bboxes (Tensor): Ground truth boxes, shape (n, 4). + device (str): Device where the anchors will be put on. + + Return: + list(torch.Tensor): responsible flags of anchors in multiple level + """ + assert self.num_levels == len(featmap_sizes) + multi_level_responsible_flags = [] + for i in range(self.num_levels): + anchor_stride = self.strides[i] + flags = self.single_level_responsible_flags( + featmap_sizes[i], + gt_bboxes, + anchor_stride, + self.num_base_anchors[i], + device=device) + multi_level_responsible_flags.append(flags) + return multi_level_responsible_flags + + def single_level_responsible_flags(self, + featmap_size, + gt_bboxes, + stride, + num_base_anchors, + device='cuda'): + """Generate the responsible flags of anchor in a single feature map. + + Args: + featmap_size (tuple[int]): The size of feature maps. + gt_bboxes (Tensor): Ground truth boxes, shape (n, 4). + stride (tuple(int)): stride of current level + num_base_anchors (int): The number of base anchors. + device (str, optional): Device where the flags will be put on. + Defaults to 'cuda'. + + Returns: + torch.Tensor: The valid flags of each anchor in a single level \ + feature map. + """ + feat_h, feat_w = featmap_size + gt_bboxes_cx = ((gt_bboxes[:, 0] + gt_bboxes[:, 2]) * 0.5).to(device) + gt_bboxes_cy = ((gt_bboxes[:, 1] + gt_bboxes[:, 3]) * 0.5).to(device) + gt_bboxes_grid_x = torch.floor(gt_bboxes_cx / stride[0]).long() + gt_bboxes_grid_y = torch.floor(gt_bboxes_cy / stride[1]).long() + + # row major indexing + gt_bboxes_grid_idx = gt_bboxes_grid_y * feat_w + gt_bboxes_grid_x + + responsible_grid = torch.zeros( + feat_h * feat_w, dtype=torch.uint8, device=device) + responsible_grid[gt_bboxes_grid_idx] = 1 + + responsible_grid = responsible_grid[:, None].expand( + responsible_grid.size(0), num_base_anchors).contiguous().view(-1) + return responsible_grid diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/builder.py new file mode 100644 index 00000000..d79b448e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/builder.py @@ -0,0 +1,7 @@ +from mmcv.utils import Registry, build_from_cfg + +ANCHOR_GENERATORS = Registry('Anchor generator') + + +def build_anchor_generator(cfg, default_args=None): + return build_from_cfg(cfg, ANCHOR_GENERATORS, default_args) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/point_generator.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/point_generator.py new file mode 100644 index 00000000..e6fbd988 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/point_generator.py @@ -0,0 +1,37 @@ +import torch + +from .builder import ANCHOR_GENERATORS + + +@ANCHOR_GENERATORS.register_module() +class PointGenerator(object): + + def _meshgrid(self, x, y, row_major=True): + xx = x.repeat(len(y)) + yy = y.view(-1, 1).repeat(1, len(x)).view(-1) + if row_major: + return xx, yy + else: + return yy, xx + + def grid_points(self, featmap_size, stride=16, device='cuda'): + feat_h, feat_w = featmap_size + shift_x = torch.arange(0., feat_w, device=device) * stride + shift_y = torch.arange(0., feat_h, device=device) * stride + shift_xx, shift_yy = self._meshgrid(shift_x, shift_y) + stride = shift_x.new_full((shift_xx.shape[0], ), stride) + shifts = torch.stack([shift_xx, shift_yy, stride], dim=-1) + all_points = shifts.to(device) + return all_points + + def valid_flags(self, featmap_size, valid_size, device='cuda'): + feat_h, feat_w = featmap_size + valid_h, valid_w = valid_size + assert valid_h <= feat_h and valid_w <= feat_w + valid_x = torch.zeros(feat_w, dtype=torch.bool, device=device) + valid_y = torch.zeros(feat_h, dtype=torch.bool, device=device) + valid_x[:valid_w] = 1 + valid_y[:valid_h] = 1 + valid_xx, valid_yy = self._meshgrid(valid_x, valid_y) + valid = valid_xx & valid_yy + return valid diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/utils.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/utils.py new file mode 100644 index 00000000..ab9b53f3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/anchor/utils.py @@ -0,0 +1,71 @@ +import torch + + +def images_to_levels(target, num_levels): + """Convert targets by image to targets by feature level. + + [target_img0, target_img1] -> [target_level0, target_level1, ...] + """ + target = torch.stack(target, 0) + level_targets = [] + start = 0 + for n in num_levels: + end = start + n + # level_targets.append(target[:, start:end].squeeze(0)) + level_targets.append(target[:, start:end]) + start = end + return level_targets + + +def anchor_inside_flags(flat_anchors, + valid_flags, + img_shape, + allowed_border=0): + """Check whether the anchors are inside the border. + + Args: + flat_anchors (torch.Tensor): Flatten anchors, shape (n, 4). + valid_flags (torch.Tensor): An existing valid flags of anchors. + img_shape (tuple(int)): Shape of current image. + allowed_border (int, optional): The border to allow the valid anchor. + Defaults to 0. + + Returns: + torch.Tensor: Flags indicating whether the anchors are inside a \ + valid range. + """ + img_h, img_w = img_shape[:2] + if allowed_border >= 0: + inside_flags = valid_flags & \ + (flat_anchors[:, 0] >= -allowed_border) & \ + (flat_anchors[:, 1] >= -allowed_border) & \ + (flat_anchors[:, 2] < img_w + allowed_border) & \ + (flat_anchors[:, 3] < img_h + allowed_border) + else: + inside_flags = valid_flags + return inside_flags + + +def calc_region(bbox, ratio, featmap_size=None): + """Calculate a proportional bbox region. + + The bbox center are fixed and the new h' and w' is h * ratio and w * ratio. + + Args: + bbox (Tensor): Bboxes to calculate regions, shape (n, 4). + ratio (float): Ratio of the output region. + featmap_size (tuple): Feature map size used for clipping the boundary. + + Returns: + tuple: x1, y1, x2, y2 + """ + x1 = torch.round((1 - ratio) * bbox[0] + ratio * bbox[2]).long() + y1 = torch.round((1 - ratio) * bbox[1] + ratio * bbox[3]).long() + x2 = torch.round(ratio * bbox[0] + (1 - ratio) * bbox[2]).long() + y2 = torch.round(ratio * bbox[1] + (1 - ratio) * bbox[3]).long() + if featmap_size is not None: + x1 = x1.clamp(min=0, max=featmap_size[1]) + y1 = y1.clamp(min=0, max=featmap_size[0]) + x2 = x2.clamp(min=0, max=featmap_size[1]) + y2 = y2.clamp(min=0, max=featmap_size[0]) + return (x1, y1, x2, y2) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/__init__.py new file mode 100644 index 00000000..a3537297 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/__init__.py @@ -0,0 +1,27 @@ +from .assigners import (AssignResult, BaseAssigner, CenterRegionAssigner, + MaxIoUAssigner, RegionAssigner) +from .builder import build_assigner, build_bbox_coder, build_sampler +from .coder import (BaseBBoxCoder, DeltaXYWHBBoxCoder, PseudoBBoxCoder, + TBLRBBoxCoder) +from .iou_calculators import BboxOverlaps2D, bbox_overlaps +from .samplers import (BaseSampler, CombinedSampler, + InstanceBalancedPosSampler, IoUBalancedNegSampler, + OHEMSampler, PseudoSampler, RandomSampler, + SamplingResult, ScoreHLRSampler) +from .transforms import (bbox2distance, bbox2result, bbox2roi, + bbox_cxcywh_to_xyxy, bbox_flip, bbox_mapping, + bbox_mapping_back, bbox_rescale, bbox_xyxy_to_cxcywh, + distance2bbox, roi2bbox) + +__all__ = [ + 'bbox_overlaps', 'BboxOverlaps2D', 'BaseAssigner', 'MaxIoUAssigner', + 'AssignResult', 'BaseSampler', 'PseudoSampler', 'RandomSampler', + 'InstanceBalancedPosSampler', 'IoUBalancedNegSampler', 'CombinedSampler', + 'OHEMSampler', 'SamplingResult', 'ScoreHLRSampler', 'build_assigner', + 'build_sampler', 'bbox_flip', 'bbox_mapping', 'bbox_mapping_back', + 'bbox2roi', 'roi2bbox', 'bbox2result', 'distance2bbox', 'bbox2distance', + 'build_bbox_coder', 'BaseBBoxCoder', 'PseudoBBoxCoder', + 'DeltaXYWHBBoxCoder', 'TBLRBBoxCoder', 'CenterRegionAssigner', + 'bbox_rescale', 'bbox_cxcywh_to_xyxy', 'bbox_xyxy_to_cxcywh', + 'RegionAssigner' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/__init__.py new file mode 100644 index 00000000..95e34a84 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/__init__.py @@ -0,0 +1,16 @@ +from .approx_max_iou_assigner import ApproxMaxIoUAssigner +from .assign_result import AssignResult +from .atss_assigner import ATSSAssigner +from .base_assigner import BaseAssigner +from .center_region_assigner import CenterRegionAssigner +from .grid_assigner import GridAssigner +from .hungarian_assigner import HungarianAssigner +from .max_iou_assigner import MaxIoUAssigner +from .point_assigner import PointAssigner +from .region_assigner import RegionAssigner + +__all__ = [ + 'BaseAssigner', 'MaxIoUAssigner', 'ApproxMaxIoUAssigner', 'AssignResult', + 'PointAssigner', 'ATSSAssigner', 'CenterRegionAssigner', 'GridAssigner', + 'HungarianAssigner', 'RegionAssigner' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/approx_max_iou_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/approx_max_iou_assigner.py new file mode 100644 index 00000000..6d07656d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/approx_max_iou_assigner.py @@ -0,0 +1,145 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from ..iou_calculators import build_iou_calculator +from .max_iou_assigner import MaxIoUAssigner + + +@BBOX_ASSIGNERS.register_module() +class ApproxMaxIoUAssigner(MaxIoUAssigner): + """Assign a corresponding gt bbox or background to each bbox. + + Each proposals will be assigned with an integer indicating the ground truth + index. (semi-positive index: gt label (0-based), -1: background) + + - -1: negative sample, no assigned gt + - semi-positive integer: positive sample, index (0-based) of assigned gt + + Args: + pos_iou_thr (float): IoU threshold for positive bboxes. + neg_iou_thr (float or tuple): IoU threshold for negative bboxes. + min_pos_iou (float): Minimum iou for a bbox to be considered as a + positive bbox. Positive samples can have smaller IoU than + pos_iou_thr due to the 4th step (assign max IoU sample to each gt). + gt_max_assign_all (bool): Whether to assign all bboxes with the same + highest overlap with some gt to that gt. + ignore_iof_thr (float): IoF threshold for ignoring bboxes (if + `gt_bboxes_ignore` is specified). Negative values mean not + ignoring any bboxes. + ignore_wrt_candidates (bool): Whether to compute the iof between + `bboxes` and `gt_bboxes_ignore`, or the contrary. + match_low_quality (bool): Whether to allow quality matches. This is + usually allowed for RPN and single stage detectors, but not allowed + in the second stage. + gpu_assign_thr (int): The upper bound of the number of GT for GPU + assign. When the number of gt is above this threshold, will assign + on CPU device. Negative values mean not assign on CPU. + """ + + def __init__(self, + pos_iou_thr, + neg_iou_thr, + min_pos_iou=.0, + gt_max_assign_all=True, + ignore_iof_thr=-1, + ignore_wrt_candidates=True, + match_low_quality=True, + gpu_assign_thr=-1, + iou_calculator=dict(type='BboxOverlaps2D')): + self.pos_iou_thr = pos_iou_thr + self.neg_iou_thr = neg_iou_thr + self.min_pos_iou = min_pos_iou + self.gt_max_assign_all = gt_max_assign_all + self.ignore_iof_thr = ignore_iof_thr + self.ignore_wrt_candidates = ignore_wrt_candidates + self.gpu_assign_thr = gpu_assign_thr + self.match_low_quality = match_low_quality + self.iou_calculator = build_iou_calculator(iou_calculator) + + def assign(self, + approxs, + squares, + approxs_per_octave, + gt_bboxes, + gt_bboxes_ignore=None, + gt_labels=None): + """Assign gt to approxs. + + This method assign a gt bbox to each group of approxs (bboxes), + each group of approxs is represent by a base approx (bbox) and + will be assigned with -1, or a semi-positive number. + background_label (-1) means negative sample, + semi-positive number is the index (0-based) of assigned gt. + The assignment is done in following steps, the order matters. + + 1. assign every bbox to background_label (-1) + 2. use the max IoU of each group of approxs to assign + 2. assign proposals whose iou with all gts < neg_iou_thr to background + 3. for each bbox, if the iou with its nearest gt >= pos_iou_thr, + assign it to that bbox + 4. for each gt bbox, assign its nearest proposals (may be more than + one) to itself + + Args: + approxs (Tensor): Bounding boxes to be assigned, + shape(approxs_per_octave*n, 4). + squares (Tensor): Base Bounding boxes to be assigned, + shape(n, 4). + approxs_per_octave (int): number of approxs per octave + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_bboxes_ignore (Tensor, optional): Ground truth bboxes that are + labelled as `ignored`, e.g., crowd boxes in COCO. + gt_labels (Tensor, optional): Label of gt_bboxes, shape (k, ). + + Returns: + :obj:`AssignResult`: The assign result. + """ + num_squares = squares.size(0) + num_gts = gt_bboxes.size(0) + + if num_squares == 0 or num_gts == 0: + # No predictions and/or truth, return empty assignment + overlaps = approxs.new(num_gts, num_squares) + assign_result = self.assign_wrt_overlaps(overlaps, gt_labels) + return assign_result + + # re-organize anchors by approxs_per_octave x num_squares + approxs = torch.transpose( + approxs.view(num_squares, approxs_per_octave, 4), 0, + 1).contiguous().view(-1, 4) + assign_on_cpu = True if (self.gpu_assign_thr > 0) and ( + num_gts > self.gpu_assign_thr) else False + # compute overlap and assign gt on CPU when number of GT is large + if assign_on_cpu: + device = approxs.device + approxs = approxs.cpu() + gt_bboxes = gt_bboxes.cpu() + if gt_bboxes_ignore is not None: + gt_bboxes_ignore = gt_bboxes_ignore.cpu() + if gt_labels is not None: + gt_labels = gt_labels.cpu() + all_overlaps = self.iou_calculator(approxs, gt_bboxes) + + overlaps, _ = all_overlaps.view(approxs_per_octave, num_squares, + num_gts).max(dim=0) + overlaps = torch.transpose(overlaps, 0, 1) + + if (self.ignore_iof_thr > 0 and gt_bboxes_ignore is not None + and gt_bboxes_ignore.numel() > 0 and squares.numel() > 0): + if self.ignore_wrt_candidates: + ignore_overlaps = self.iou_calculator( + squares, gt_bboxes_ignore, mode='iof') + ignore_max_overlaps, _ = ignore_overlaps.max(dim=1) + else: + ignore_overlaps = self.iou_calculator( + gt_bboxes_ignore, squares, mode='iof') + ignore_max_overlaps, _ = ignore_overlaps.max(dim=0) + overlaps[:, ignore_max_overlaps > self.ignore_iof_thr] = -1 + + assign_result = self.assign_wrt_overlaps(overlaps, gt_labels) + if assign_on_cpu: + assign_result.gt_inds = assign_result.gt_inds.to(device) + assign_result.max_overlaps = assign_result.max_overlaps.to(device) + if assign_result.labels is not None: + assign_result.labels = assign_result.labels.to(device) + return assign_result diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/assign_result.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/assign_result.py new file mode 100644 index 00000000..4639fbdb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/assign_result.py @@ -0,0 +1,204 @@ +import torch + +from mmdet.utils import util_mixins + + +class AssignResult(util_mixins.NiceRepr): + """Stores assignments between predicted and truth boxes. + + Attributes: + num_gts (int): the number of truth boxes considered when computing this + assignment + + gt_inds (LongTensor): for each predicted box indicates the 1-based + index of the assigned truth box. 0 means unassigned and -1 means + ignore. + + max_overlaps (FloatTensor): the iou between the predicted box and its + assigned truth box. + + labels (None | LongTensor): If specified, for each predicted box + indicates the category label of the assigned truth box. + + Example: + >>> # An assign result between 4 predicted boxes and 9 true boxes + >>> # where only two boxes were assigned. + >>> num_gts = 9 + >>> max_overlaps = torch.LongTensor([0, .5, .9, 0]) + >>> gt_inds = torch.LongTensor([-1, 1, 2, 0]) + >>> labels = torch.LongTensor([0, 3, 4, 0]) + >>> self = AssignResult(num_gts, gt_inds, max_overlaps, labels) + >>> print(str(self)) # xdoctest: +IGNORE_WANT + + >>> # Force addition of gt labels (when adding gt as proposals) + >>> new_labels = torch.LongTensor([3, 4, 5]) + >>> self.add_gt_(new_labels) + >>> print(str(self)) # xdoctest: +IGNORE_WANT + + """ + + def __init__(self, num_gts, gt_inds, max_overlaps, labels=None): + self.num_gts = num_gts + self.gt_inds = gt_inds + self.max_overlaps = max_overlaps + self.labels = labels + # Interface for possible user-defined properties + self._extra_properties = {} + + @property + def num_preds(self): + """int: the number of predictions in this assignment""" + return len(self.gt_inds) + + def set_extra_property(self, key, value): + """Set user-defined new property.""" + assert key not in self.info + self._extra_properties[key] = value + + def get_extra_property(self, key): + """Get user-defined property.""" + return self._extra_properties.get(key, None) + + @property + def info(self): + """dict: a dictionary of info about the object""" + basic_info = { + 'num_gts': self.num_gts, + 'num_preds': self.num_preds, + 'gt_inds': self.gt_inds, + 'max_overlaps': self.max_overlaps, + 'labels': self.labels, + } + basic_info.update(self._extra_properties) + return basic_info + + def __nice__(self): + """str: a "nice" summary string describing this assign result""" + parts = [] + parts.append(f'num_gts={self.num_gts!r}') + if self.gt_inds is None: + parts.append(f'gt_inds={self.gt_inds!r}') + else: + parts.append(f'gt_inds.shape={tuple(self.gt_inds.shape)!r}') + if self.max_overlaps is None: + parts.append(f'max_overlaps={self.max_overlaps!r}') + else: + parts.append('max_overlaps.shape=' + f'{tuple(self.max_overlaps.shape)!r}') + if self.labels is None: + parts.append(f'labels={self.labels!r}') + else: + parts.append(f'labels.shape={tuple(self.labels.shape)!r}') + return ', '.join(parts) + + @classmethod + def random(cls, **kwargs): + """Create random AssignResult for tests or debugging. + + Args: + num_preds: number of predicted boxes + num_gts: number of true boxes + p_ignore (float): probability of a predicted box assinged to an + ignored truth + p_assigned (float): probability of a predicted box not being + assigned + p_use_label (float | bool): with labels or not + rng (None | int | numpy.random.RandomState): seed or state + + Returns: + :obj:`AssignResult`: Randomly generated assign results. + + Example: + >>> from mmdet.core.bbox.assigners.assign_result import * # NOQA + >>> self = AssignResult.random() + >>> print(self.info) + """ + from mmdet.core.bbox import demodata + rng = demodata.ensure_rng(kwargs.get('rng', None)) + + num_gts = kwargs.get('num_gts', None) + num_preds = kwargs.get('num_preds', None) + p_ignore = kwargs.get('p_ignore', 0.3) + p_assigned = kwargs.get('p_assigned', 0.7) + p_use_label = kwargs.get('p_use_label', 0.5) + num_classes = kwargs.get('p_use_label', 3) + + if num_gts is None: + num_gts = rng.randint(0, 8) + if num_preds is None: + num_preds = rng.randint(0, 16) + + if num_gts == 0: + max_overlaps = torch.zeros(num_preds, dtype=torch.float32) + gt_inds = torch.zeros(num_preds, dtype=torch.int64) + if p_use_label is True or p_use_label < rng.rand(): + labels = torch.zeros(num_preds, dtype=torch.int64) + else: + labels = None + else: + import numpy as np + # Create an overlap for each predicted box + max_overlaps = torch.from_numpy(rng.rand(num_preds)) + + # Construct gt_inds for each predicted box + is_assigned = torch.from_numpy(rng.rand(num_preds) < p_assigned) + # maximum number of assignments constraints + n_assigned = min(num_preds, min(num_gts, is_assigned.sum())) + + assigned_idxs = np.where(is_assigned)[0] + rng.shuffle(assigned_idxs) + assigned_idxs = assigned_idxs[0:n_assigned] + assigned_idxs.sort() + + is_assigned[:] = 0 + is_assigned[assigned_idxs] = True + + is_ignore = torch.from_numpy( + rng.rand(num_preds) < p_ignore) & is_assigned + + gt_inds = torch.zeros(num_preds, dtype=torch.int64) + + true_idxs = np.arange(num_gts) + rng.shuffle(true_idxs) + true_idxs = torch.from_numpy(true_idxs) + gt_inds[is_assigned] = true_idxs[:n_assigned] + + gt_inds = torch.from_numpy( + rng.randint(1, num_gts + 1, size=num_preds)) + gt_inds[is_ignore] = -1 + gt_inds[~is_assigned] = 0 + max_overlaps[~is_assigned] = 0 + + if p_use_label is True or p_use_label < rng.rand(): + if num_classes == 0: + labels = torch.zeros(num_preds, dtype=torch.int64) + else: + labels = torch.from_numpy( + # remind that we set FG labels to [0, num_class-1] + # since mmdet v2.0 + # BG cat_id: num_class + rng.randint(0, num_classes, size=num_preds)) + labels[~is_assigned] = 0 + else: + labels = None + + self = cls(num_gts, gt_inds, max_overlaps, labels) + return self + + def add_gt_(self, gt_labels): + """Add ground truth as assigned results. + + Args: + gt_labels (torch.Tensor): Labels of gt boxes + """ + self_inds = torch.arange( + 1, len(gt_labels) + 1, dtype=torch.long, device=gt_labels.device) + self.gt_inds = torch.cat([self_inds, self.gt_inds]) + + self.max_overlaps = torch.cat( + [self.max_overlaps.new_ones(len(gt_labels)), self.max_overlaps]) + + if self.labels is not None: + self.labels = torch.cat([gt_labels, self.labels]) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/atss_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/atss_assigner.py new file mode 100644 index 00000000..8e21726b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/atss_assigner.py @@ -0,0 +1,178 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from ..iou_calculators import build_iou_calculator +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + + +@BBOX_ASSIGNERS.register_module() +class ATSSAssigner(BaseAssigner): + """Assign a corresponding gt bbox or background to each bbox. + + Each proposals will be assigned with `0` or a positive integer + indicating the ground truth index. + + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + + Args: + topk (float): number of bbox selected in each level + """ + + def __init__(self, + topk, + iou_calculator=dict(type='BboxOverlaps2D'), + ignore_iof_thr=-1): + self.topk = topk + self.iou_calculator = build_iou_calculator(iou_calculator) + self.ignore_iof_thr = ignore_iof_thr + + # https://github.com/sfzhang15/ATSS/blob/master/atss_core/modeling/rpn/atss/loss.py + + def assign(self, + bboxes, + num_level_bboxes, + gt_bboxes, + gt_bboxes_ignore=None, + gt_labels=None): + """Assign gt to bboxes. + + The assignment is done in following steps + + 1. compute iou between all bbox (bbox of all pyramid levels) and gt + 2. compute center distance between all bbox and gt + 3. on each pyramid level, for each gt, select k bbox whose center + are closest to the gt center, so we total select k*l bbox as + candidates for each gt + 4. get corresponding iou for the these candidates, and compute the + mean and std, set mean + std as the iou threshold + 5. select these candidates whose iou are greater than or equal to + the threshold as postive + 6. limit the positive sample's center in gt + + + Args: + bboxes (Tensor): Bounding boxes to be assigned, shape(n, 4). + num_level_bboxes (List): num of bboxes in each level + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_bboxes_ignore (Tensor, optional): Ground truth bboxes that are + labelled as `ignored`, e.g., crowd boxes in COCO. + gt_labels (Tensor, optional): Label of gt_bboxes, shape (k, ). + + Returns: + :obj:`AssignResult`: The assign result. + """ + INF = 100000000 + bboxes = bboxes[:, :4] + num_gt, num_bboxes = gt_bboxes.size(0), bboxes.size(0) + + # compute iou between all bbox and gt + overlaps = self.iou_calculator(bboxes, gt_bboxes) + + # assign 0 by default + assigned_gt_inds = overlaps.new_full((num_bboxes, ), + 0, + dtype=torch.long) + + if num_gt == 0 or num_bboxes == 0: + # No ground truth or boxes, return empty assignment + max_overlaps = overlaps.new_zeros((num_bboxes, )) + if num_gt == 0: + # No truth, assign everything to background + assigned_gt_inds[:] = 0 + if gt_labels is None: + assigned_labels = None + else: + assigned_labels = overlaps.new_full((num_bboxes, ), + -1, + dtype=torch.long) + return AssignResult( + num_gt, assigned_gt_inds, max_overlaps, labels=assigned_labels) + + # compute center distance between all bbox and gt + gt_cx = (gt_bboxes[:, 0] + gt_bboxes[:, 2]) / 2.0 + gt_cy = (gt_bboxes[:, 1] + gt_bboxes[:, 3]) / 2.0 + gt_points = torch.stack((gt_cx, gt_cy), dim=1) + + bboxes_cx = (bboxes[:, 0] + bboxes[:, 2]) / 2.0 + bboxes_cy = (bboxes[:, 1] + bboxes[:, 3]) / 2.0 + bboxes_points = torch.stack((bboxes_cx, bboxes_cy), dim=1) + + distances = (bboxes_points[:, None, :] - + gt_points[None, :, :]).pow(2).sum(-1).sqrt() + + if (self.ignore_iof_thr > 0 and gt_bboxes_ignore is not None + and gt_bboxes_ignore.numel() > 0 and bboxes.numel() > 0): + ignore_overlaps = self.iou_calculator( + bboxes, gt_bboxes_ignore, mode='iof') + ignore_max_overlaps, _ = ignore_overlaps.max(dim=1) + ignore_idxs = ignore_max_overlaps > self.ignore_iof_thr + distances[ignore_idxs, :] = INF + assigned_gt_inds[ignore_idxs] = -1 + + # Selecting candidates based on the center distance + candidate_idxs = [] + start_idx = 0 + for level, bboxes_per_level in enumerate(num_level_bboxes): + # on each pyramid level, for each gt, + # select k bbox whose center are closest to the gt center + end_idx = start_idx + bboxes_per_level + distances_per_level = distances[start_idx:end_idx, :] + selectable_k = min(self.topk, bboxes_per_level) + _, topk_idxs_per_level = distances_per_level.topk( + selectable_k, dim=0, largest=False) + candidate_idxs.append(topk_idxs_per_level + start_idx) + start_idx = end_idx + candidate_idxs = torch.cat(candidate_idxs, dim=0) + + # get corresponding iou for the these candidates, and compute the + # mean and std, set mean + std as the iou threshold + candidate_overlaps = overlaps[candidate_idxs, torch.arange(num_gt)] + overlaps_mean_per_gt = candidate_overlaps.mean(0) + overlaps_std_per_gt = candidate_overlaps.std(0) + overlaps_thr_per_gt = overlaps_mean_per_gt + overlaps_std_per_gt + + is_pos = candidate_overlaps >= overlaps_thr_per_gt[None, :] + + # limit the positive sample's center in gt + for gt_idx in range(num_gt): + candidate_idxs[:, gt_idx] += gt_idx * num_bboxes + ep_bboxes_cx = bboxes_cx.view(1, -1).expand( + num_gt, num_bboxes).contiguous().view(-1) + ep_bboxes_cy = bboxes_cy.view(1, -1).expand( + num_gt, num_bboxes).contiguous().view(-1) + candidate_idxs = candidate_idxs.view(-1) + + # calculate the left, top, right, bottom distance between positive + # bbox center and gt side + l_ = ep_bboxes_cx[candidate_idxs].view(-1, num_gt) - gt_bboxes[:, 0] + t_ = ep_bboxes_cy[candidate_idxs].view(-1, num_gt) - gt_bboxes[:, 1] + r_ = gt_bboxes[:, 2] - ep_bboxes_cx[candidate_idxs].view(-1, num_gt) + b_ = gt_bboxes[:, 3] - ep_bboxes_cy[candidate_idxs].view(-1, num_gt) + is_in_gts = torch.stack([l_, t_, r_, b_], dim=1).min(dim=1)[0] > 0.01 + is_pos = is_pos & is_in_gts + + # if an anchor box is assigned to multiple gts, + # the one with the highest IoU will be selected. + overlaps_inf = torch.full_like(overlaps, + -INF).t().contiguous().view(-1) + index = candidate_idxs.view(-1)[is_pos.view(-1)] + overlaps_inf[index] = overlaps.t().contiguous().view(-1)[index] + overlaps_inf = overlaps_inf.view(num_gt, -1).t() + + max_overlaps, argmax_overlaps = overlaps_inf.max(dim=1) + assigned_gt_inds[ + max_overlaps != -INF] = argmax_overlaps[max_overlaps != -INF] + 1 + + if gt_labels is not None: + assigned_labels = assigned_gt_inds.new_full((num_bboxes, ), -1) + pos_inds = torch.nonzero( + assigned_gt_inds > 0, as_tuple=False).squeeze() + if pos_inds.numel() > 0: + assigned_labels[pos_inds] = gt_labels[ + assigned_gt_inds[pos_inds] - 1] + else: + assigned_labels = None + return AssignResult( + num_gt, assigned_gt_inds, max_overlaps, labels=assigned_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/base_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/base_assigner.py new file mode 100644 index 00000000..2da9e0f4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/base_assigner.py @@ -0,0 +1,10 @@ +from abc import ABCMeta, abstractmethod + + +class BaseAssigner(metaclass=ABCMeta): + """Base assigner that assigns boxes to ground truth boxes.""" + + @abstractmethod + def assign(self, bboxes, gt_bboxes, gt_bboxes_ignore=None, gt_labels=None): + """Assign boxes to either a ground truth boxe or a negative boxes.""" + pass diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/center_region_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/center_region_assigner.py new file mode 100644 index 00000000..488e3b61 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/center_region_assigner.py @@ -0,0 +1,335 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from ..iou_calculators import build_iou_calculator +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + + +def scale_boxes(bboxes, scale): + """Expand an array of boxes by a given scale. + + Args: + bboxes (Tensor): Shape (m, 4) + scale (float): The scale factor of bboxes + + Returns: + (Tensor): Shape (m, 4). Scaled bboxes + """ + assert bboxes.size(1) == 4 + w_half = (bboxes[:, 2] - bboxes[:, 0]) * .5 + h_half = (bboxes[:, 3] - bboxes[:, 1]) * .5 + x_c = (bboxes[:, 2] + bboxes[:, 0]) * .5 + y_c = (bboxes[:, 3] + bboxes[:, 1]) * .5 + + w_half *= scale + h_half *= scale + + boxes_scaled = torch.zeros_like(bboxes) + boxes_scaled[:, 0] = x_c - w_half + boxes_scaled[:, 2] = x_c + w_half + boxes_scaled[:, 1] = y_c - h_half + boxes_scaled[:, 3] = y_c + h_half + return boxes_scaled + + +def is_located_in(points, bboxes): + """Are points located in bboxes. + + Args: + points (Tensor): Points, shape: (m, 2). + bboxes (Tensor): Bounding boxes, shape: (n, 4). + + Return: + Tensor: Flags indicating if points are located in bboxes, shape: (m, n). + """ + assert points.size(1) == 2 + assert bboxes.size(1) == 4 + return (points[:, 0].unsqueeze(1) > bboxes[:, 0].unsqueeze(0)) & \ + (points[:, 0].unsqueeze(1) < bboxes[:, 2].unsqueeze(0)) & \ + (points[:, 1].unsqueeze(1) > bboxes[:, 1].unsqueeze(0)) & \ + (points[:, 1].unsqueeze(1) < bboxes[:, 3].unsqueeze(0)) + + +def bboxes_area(bboxes): + """Compute the area of an array of bboxes. + + Args: + bboxes (Tensor): The coordinates ox bboxes. Shape: (m, 4) + + Returns: + Tensor: Area of the bboxes. Shape: (m, ) + """ + assert bboxes.size(1) == 4 + w = (bboxes[:, 2] - bboxes[:, 0]) + h = (bboxes[:, 3] - bboxes[:, 1]) + areas = w * h + return areas + + +@BBOX_ASSIGNERS.register_module() +class CenterRegionAssigner(BaseAssigner): + """Assign pixels at the center region of a bbox as positive. + + Each proposals will be assigned with `-1`, `0`, or a positive integer + indicating the ground truth index. + - -1: negative samples + - semi-positive numbers: positive sample, index (0-based) of assigned gt + + Args: + pos_scale (float): Threshold within which pixels are + labelled as positive. + neg_scale (float): Threshold above which pixels are + labelled as positive. + min_pos_iof (float): Minimum iof of a pixel with a gt to be + labelled as positive. Default: 1e-2 + ignore_gt_scale (float): Threshold within which the pixels + are ignored when the gt is labelled as shadowed. Default: 0.5 + foreground_dominate (bool): If True, the bbox will be assigned as + positive when a gt's kernel region overlaps with another's shadowed + (ignored) region, otherwise it is set as ignored. Default to False. + """ + + def __init__(self, + pos_scale, + neg_scale, + min_pos_iof=1e-2, + ignore_gt_scale=0.5, + foreground_dominate=False, + iou_calculator=dict(type='BboxOverlaps2D')): + self.pos_scale = pos_scale + self.neg_scale = neg_scale + self.min_pos_iof = min_pos_iof + self.ignore_gt_scale = ignore_gt_scale + self.foreground_dominate = foreground_dominate + self.iou_calculator = build_iou_calculator(iou_calculator) + + def get_gt_priorities(self, gt_bboxes): + """Get gt priorities according to their areas. + + Smaller gt has higher priority. + + Args: + gt_bboxes (Tensor): Ground truth boxes, shape (k, 4). + + Returns: + Tensor: The priority of gts so that gts with larger priority is \ + more likely to be assigned. Shape (k, ) + """ + gt_areas = bboxes_area(gt_bboxes) + # Rank all gt bbox areas. Smaller objects has larger priority + _, sort_idx = gt_areas.sort(descending=True) + sort_idx = sort_idx.argsort() + return sort_idx + + def assign(self, bboxes, gt_bboxes, gt_bboxes_ignore=None, gt_labels=None): + """Assign gt to bboxes. + + This method assigns gts to every bbox (proposal/anchor), each bbox \ + will be assigned with -1, or a semi-positive number. -1 means \ + negative sample, semi-positive number is the index (0-based) of \ + assigned gt. + + Args: + bboxes (Tensor): Bounding boxes to be assigned, shape(n, 4). + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_bboxes_ignore (tensor, optional): Ground truth bboxes that are + labelled as `ignored`, e.g., crowd boxes in COCO. + gt_labels (tensor, optional): Label of gt_bboxes, shape (num_gts,). + + Returns: + :obj:`AssignResult`: The assigned result. Note that \ + shadowed_labels of shape (N, 2) is also added as an \ + `assign_result` attribute. `shadowed_labels` is a tensor \ + composed of N pairs of anchor_ind, class_label], where N \ + is the number of anchors that lie in the outer region of a \ + gt, anchor_ind is the shadowed anchor index and class_label \ + is the shadowed class label. + + Example: + >>> self = CenterRegionAssigner(0.2, 0.2) + >>> bboxes = torch.Tensor([[0, 0, 10, 10], [10, 10, 20, 20]]) + >>> gt_bboxes = torch.Tensor([[0, 0, 10, 10]]) + >>> assign_result = self.assign(bboxes, gt_bboxes) + >>> expected_gt_inds = torch.LongTensor([1, 0]) + >>> assert torch.all(assign_result.gt_inds == expected_gt_inds) + """ + # There are in total 5 steps in the pixel assignment + # 1. Find core (the center region, say inner 0.2) + # and shadow (the relatively ourter part, say inner 0.2-0.5) + # regions of every gt. + # 2. Find all prior bboxes that lie in gt_core and gt_shadow regions + # 3. Assign prior bboxes in gt_core with a one-hot id of the gt in + # the image. + # 3.1. For overlapping objects, the prior bboxes in gt_core is + # assigned with the object with smallest area + # 4. Assign prior bboxes with class label according to its gt id. + # 4.1. Assign -1 to prior bboxes lying in shadowed gts + # 4.2. Assign positive prior boxes with the corresponding label + # 5. Find pixels lying in the shadow of an object and assign them with + # background label, but set the loss weight of its corresponding + # gt to zero. + assert bboxes.size(1) == 4, 'bboxes must have size of 4' + # 1. Find core positive and shadow region of every gt + gt_core = scale_boxes(gt_bboxes, self.pos_scale) + gt_shadow = scale_boxes(gt_bboxes, self.neg_scale) + + # 2. Find prior bboxes that lie in gt_core and gt_shadow regions + bbox_centers = (bboxes[:, 2:4] + bboxes[:, 0:2]) / 2 + # The center points lie within the gt boxes + is_bbox_in_gt = is_located_in(bbox_centers, gt_bboxes) + # Only calculate bbox and gt_core IoF. This enables small prior bboxes + # to match large gts + bbox_and_gt_core_overlaps = self.iou_calculator( + bboxes, gt_core, mode='iof') + # The center point of effective priors should be within the gt box + is_bbox_in_gt_core = is_bbox_in_gt & ( + bbox_and_gt_core_overlaps > self.min_pos_iof) # shape (n, k) + + is_bbox_in_gt_shadow = ( + self.iou_calculator(bboxes, gt_shadow, mode='iof') > + self.min_pos_iof) + # Rule out center effective positive pixels + is_bbox_in_gt_shadow &= (~is_bbox_in_gt_core) + + num_gts, num_bboxes = gt_bboxes.size(0), bboxes.size(0) + if num_gts == 0 or num_bboxes == 0: + # If no gts exist, assign all pixels to negative + assigned_gt_ids = \ + is_bbox_in_gt_core.new_zeros((num_bboxes,), + dtype=torch.long) + pixels_in_gt_shadow = assigned_gt_ids.new_empty((0, 2)) + else: + # Step 3: assign a one-hot gt id to each pixel, and smaller objects + # have high priority to assign the pixel. + sort_idx = self.get_gt_priorities(gt_bboxes) + assigned_gt_ids, pixels_in_gt_shadow = \ + self.assign_one_hot_gt_indices(is_bbox_in_gt_core, + is_bbox_in_gt_shadow, + gt_priority=sort_idx) + + if gt_bboxes_ignore is not None and gt_bboxes_ignore.numel() > 0: + # No ground truth or boxes, return empty assignment + gt_bboxes_ignore = scale_boxes( + gt_bboxes_ignore, scale=self.ignore_gt_scale) + is_bbox_in_ignored_gts = is_located_in(bbox_centers, + gt_bboxes_ignore) + is_bbox_in_ignored_gts = is_bbox_in_ignored_gts.any(dim=1) + assigned_gt_ids[is_bbox_in_ignored_gts] = -1 + + # 4. Assign prior bboxes with class label according to its gt id. + assigned_labels = None + shadowed_pixel_labels = None + if gt_labels is not None: + # Default assigned label is the background (-1) + assigned_labels = assigned_gt_ids.new_full((num_bboxes, ), -1) + pos_inds = torch.nonzero( + assigned_gt_ids > 0, as_tuple=False).squeeze() + if pos_inds.numel() > 0: + assigned_labels[pos_inds] = gt_labels[assigned_gt_ids[pos_inds] + - 1] + # 5. Find pixels lying in the shadow of an object + shadowed_pixel_labels = pixels_in_gt_shadow.clone() + if pixels_in_gt_shadow.numel() > 0: + pixel_idx, gt_idx =\ + pixels_in_gt_shadow[:, 0], pixels_in_gt_shadow[:, 1] + assert (assigned_gt_ids[pixel_idx] != gt_idx).all(), \ + 'Some pixels are dually assigned to ignore and gt!' + shadowed_pixel_labels[:, 1] = gt_labels[gt_idx - 1] + override = ( + assigned_labels[pixel_idx] == shadowed_pixel_labels[:, 1]) + if self.foreground_dominate: + # When a pixel is both positive and shadowed, set it as pos + shadowed_pixel_labels = shadowed_pixel_labels[~override] + else: + # When a pixel is both pos and shadowed, set it as shadowed + assigned_labels[pixel_idx[override]] = -1 + assigned_gt_ids[pixel_idx[override]] = 0 + + assign_result = AssignResult( + num_gts, assigned_gt_ids, None, labels=assigned_labels) + # Add shadowed_labels as assign_result property. Shape: (num_shadow, 2) + assign_result.set_extra_property('shadowed_labels', + shadowed_pixel_labels) + return assign_result + + def assign_one_hot_gt_indices(self, + is_bbox_in_gt_core, + is_bbox_in_gt_shadow, + gt_priority=None): + """Assign only one gt index to each prior box. + + Gts with large gt_priority are more likely to be assigned. + + Args: + is_bbox_in_gt_core (Tensor): Bool tensor indicating the bbox center + is in the core area of a gt (e.g. 0-0.2). + Shape: (num_prior, num_gt). + is_bbox_in_gt_shadow (Tensor): Bool tensor indicating the bbox + center is in the shadowed area of a gt (e.g. 0.2-0.5). + Shape: (num_prior, num_gt). + gt_priority (Tensor): Priorities of gts. The gt with a higher + priority is more likely to be assigned to the bbox when the bbox + match with multiple gts. Shape: (num_gt, ). + + Returns: + tuple: Returns (assigned_gt_inds, shadowed_gt_inds). + + - assigned_gt_inds: The assigned gt index of each prior bbox \ + (i.e. index from 1 to num_gts). Shape: (num_prior, ). + - shadowed_gt_inds: shadowed gt indices. It is a tensor of \ + shape (num_ignore, 2) with first column being the \ + shadowed prior bbox indices and the second column the \ + shadowed gt indices (1-based). + """ + num_bboxes, num_gts = is_bbox_in_gt_core.shape + + if gt_priority is None: + gt_priority = torch.arange( + num_gts, device=is_bbox_in_gt_core.device) + assert gt_priority.size(0) == num_gts + # The bigger gt_priority, the more preferable to be assigned + # The assigned inds are by default 0 (background) + assigned_gt_inds = is_bbox_in_gt_core.new_zeros((num_bboxes, ), + dtype=torch.long) + # Shadowed bboxes are assigned to be background. But the corresponding + # label is ignored during loss calculation, which is done through + # shadowed_gt_inds + shadowed_gt_inds = torch.nonzero(is_bbox_in_gt_shadow, as_tuple=False) + if is_bbox_in_gt_core.sum() == 0: # No gt match + shadowed_gt_inds[:, 1] += 1 # 1-based. For consistency issue + return assigned_gt_inds, shadowed_gt_inds + + # The priority of each prior box and gt pair. If one prior box is + # matched bo multiple gts. Only the pair with the highest priority + # is saved + pair_priority = is_bbox_in_gt_core.new_full((num_bboxes, num_gts), + -1, + dtype=torch.long) + + # Each bbox could match with multiple gts. + # The following codes deal with this situation + # Matched bboxes (to any gt). Shape: (num_pos_anchor, ) + inds_of_match = torch.any(is_bbox_in_gt_core, dim=1) + # The matched gt index of each positive bbox. Length >= num_pos_anchor + # , since one bbox could match multiple gts + matched_bbox_gt_inds = torch.nonzero( + is_bbox_in_gt_core, as_tuple=False)[:, 1] + # Assign priority to each bbox-gt pair. + pair_priority[is_bbox_in_gt_core] = gt_priority[matched_bbox_gt_inds] + _, argmax_priority = pair_priority[inds_of_match].max(dim=1) + assigned_gt_inds[inds_of_match] = argmax_priority + 1 # 1-based + # Zero-out the assigned anchor box to filter the shadowed gt indices + is_bbox_in_gt_core[inds_of_match, argmax_priority] = 0 + # Concat the shadowed indices due to overlapping with that out side of + # effective scale. shape: (total_num_ignore, 2) + shadowed_gt_inds = torch.cat( + (shadowed_gt_inds, torch.nonzero( + is_bbox_in_gt_core, as_tuple=False)), + dim=0) + # `is_bbox_in_gt_core` should be changed back to keep arguments intact. + is_bbox_in_gt_core[inds_of_match, argmax_priority] = 1 + # 1-based shadowed gt indices, to be consistent with `assigned_gt_inds` + if shadowed_gt_inds.numel() > 0: + shadowed_gt_inds[:, 1] += 1 + return assigned_gt_inds, shadowed_gt_inds diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/grid_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/grid_assigner.py new file mode 100644 index 00000000..7390ea63 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/grid_assigner.py @@ -0,0 +1,155 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from ..iou_calculators import build_iou_calculator +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + + +@BBOX_ASSIGNERS.register_module() +class GridAssigner(BaseAssigner): + """Assign a corresponding gt bbox or background to each bbox. + + Each proposals will be assigned with `-1`, `0`, or a positive integer + indicating the ground truth index. + + - -1: don't care + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + + Args: + pos_iou_thr (float): IoU threshold for positive bboxes. + neg_iou_thr (float or tuple): IoU threshold for negative bboxes. + min_pos_iou (float): Minimum iou for a bbox to be considered as a + positive bbox. Positive samples can have smaller IoU than + pos_iou_thr due to the 4th step (assign max IoU sample to each gt). + gt_max_assign_all (bool): Whether to assign all bboxes with the same + highest overlap with some gt to that gt. + """ + + def __init__(self, + pos_iou_thr, + neg_iou_thr, + min_pos_iou=.0, + gt_max_assign_all=True, + iou_calculator=dict(type='BboxOverlaps2D')): + self.pos_iou_thr = pos_iou_thr + self.neg_iou_thr = neg_iou_thr + self.min_pos_iou = min_pos_iou + self.gt_max_assign_all = gt_max_assign_all + self.iou_calculator = build_iou_calculator(iou_calculator) + + def assign(self, bboxes, box_responsible_flags, gt_bboxes, gt_labels=None): + """Assign gt to bboxes. The process is very much like the max iou + assigner, except that positive samples are constrained within the cell + that the gt boxes fell in. + + This method assign a gt bbox to every bbox (proposal/anchor), each bbox + will be assigned with -1, 0, or a positive number. -1 means don't care, + 0 means negative sample, positive number is the index (1-based) of + assigned gt. + The assignment is done in following steps, the order matters. + + 1. assign every bbox to -1 + 2. assign proposals whose iou with all gts <= neg_iou_thr to 0 + 3. for each bbox within a cell, if the iou with its nearest gt > + pos_iou_thr and the center of that gt falls inside the cell, + assign it to that bbox + 4. for each gt bbox, assign its nearest proposals within the cell the + gt bbox falls in to itself. + + Args: + bboxes (Tensor): Bounding boxes to be assigned, shape(n, 4). + box_responsible_flags (Tensor): flag to indicate whether box is + responsible for prediction, shape(n, ) + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_labels (Tensor, optional): Label of gt_bboxes, shape (k, ). + + Returns: + :obj:`AssignResult`: The assign result. + """ + num_gts, num_bboxes = gt_bboxes.size(0), bboxes.size(0) + + # compute iou between all gt and bboxes + overlaps = self.iou_calculator(gt_bboxes, bboxes) + + # 1. assign -1 by default + assigned_gt_inds = overlaps.new_full((num_bboxes, ), + -1, + dtype=torch.long) + + if num_gts == 0 or num_bboxes == 0: + # No ground truth or boxes, return empty assignment + max_overlaps = overlaps.new_zeros((num_bboxes, )) + if num_gts == 0: + # No truth, assign everything to background + assigned_gt_inds[:] = 0 + if gt_labels is None: + assigned_labels = None + else: + assigned_labels = overlaps.new_full((num_bboxes, ), + -1, + dtype=torch.long) + return AssignResult( + num_gts, + assigned_gt_inds, + max_overlaps, + labels=assigned_labels) + + # 2. assign negative: below + # for each anchor, which gt best overlaps with it + # for each anchor, the max iou of all gts + # shape of max_overlaps == argmax_overlaps == num_bboxes + max_overlaps, argmax_overlaps = overlaps.max(dim=0) + + if isinstance(self.neg_iou_thr, float): + assigned_gt_inds[(max_overlaps >= 0) + & (max_overlaps <= self.neg_iou_thr)] = 0 + elif isinstance(self.neg_iou_thr, (tuple, list)): + assert len(self.neg_iou_thr) == 2 + assigned_gt_inds[(max_overlaps > self.neg_iou_thr[0]) + & (max_overlaps <= self.neg_iou_thr[1])] = 0 + + # 3. assign positive: falls into responsible cell and above + # positive IOU threshold, the order matters. + # the prior condition of comparision is to filter out all + # unrelated anchors, i.e. not box_responsible_flags + overlaps[:, ~box_responsible_flags.type(torch.bool)] = -1. + + # calculate max_overlaps again, but this time we only consider IOUs + # for anchors responsible for prediction + max_overlaps, argmax_overlaps = overlaps.max(dim=0) + + # for each gt, which anchor best overlaps with it + # for each gt, the max iou of all proposals + # shape of gt_max_overlaps == gt_argmax_overlaps == num_gts + gt_max_overlaps, gt_argmax_overlaps = overlaps.max(dim=1) + + pos_inds = (max_overlaps > + self.pos_iou_thr) & box_responsible_flags.type(torch.bool) + assigned_gt_inds[pos_inds] = argmax_overlaps[pos_inds] + 1 + + # 4. assign positive to max overlapped anchors within responsible cell + for i in range(num_gts): + if gt_max_overlaps[i] > self.min_pos_iou: + if self.gt_max_assign_all: + max_iou_inds = (overlaps[i, :] == gt_max_overlaps[i]) & \ + box_responsible_flags.type(torch.bool) + assigned_gt_inds[max_iou_inds] = i + 1 + elif box_responsible_flags[gt_argmax_overlaps[i]]: + assigned_gt_inds[gt_argmax_overlaps[i]] = i + 1 + + # assign labels of positive anchors + if gt_labels is not None: + assigned_labels = assigned_gt_inds.new_full((num_bboxes, ), -1) + pos_inds = torch.nonzero( + assigned_gt_inds > 0, as_tuple=False).squeeze() + if pos_inds.numel() > 0: + assigned_labels[pos_inds] = gt_labels[ + assigned_gt_inds[pos_inds] - 1] + + else: + assigned_labels = None + + return AssignResult( + num_gts, assigned_gt_inds, max_overlaps, labels=assigned_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/hungarian_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/hungarian_assigner.py new file mode 100644 index 00000000..454326ec --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/hungarian_assigner.py @@ -0,0 +1,145 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from ..match_costs import build_match_cost +from ..transforms import bbox_cxcywh_to_xyxy +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + +try: + from scipy.optimize import linear_sum_assignment +except ImportError: + linear_sum_assignment = None + + +@BBOX_ASSIGNERS.register_module() +class HungarianAssigner(BaseAssigner): + """Computes one-to-one matching between predictions and ground truth. + + This class computes an assignment between the targets and the predictions + based on the costs. The costs are weighted sum of three components: + classfication cost, regression L1 cost and regression iou cost. The + targets don't include the no_object, so generally there are more + predictions than targets. After the one-to-one matching, the un-matched + are treated as backgrounds. Thus each query prediction will be assigned + with `0` or a positive integer indicating the ground truth index: + + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + + Args: + cls_weight (int | float, optional): The scale factor for classification + cost. Default 1.0. + bbox_weight (int | float, optional): The scale factor for regression + L1 cost. Default 1.0. + iou_weight (int | float, optional): The scale factor for regression + iou cost. Default 1.0. + iou_calculator (dict | optional): The config for the iou calculation. + Default type `BboxOverlaps2D`. + iou_mode (str | optional): "iou" (intersection over union), "iof" + (intersection over foreground), or "giou" (generalized + intersection over union). Default "giou". + """ + + def __init__(self, + cls_cost=dict(type='ClassificationCost', weight=1.), + reg_cost=dict(type='BBoxL1Cost', weight=1.0), + iou_cost=dict(type='IoUCost', iou_mode='giou', weight=1.0)): + self.cls_cost = build_match_cost(cls_cost) + self.reg_cost = build_match_cost(reg_cost) + self.iou_cost = build_match_cost(iou_cost) + + def assign(self, + bbox_pred, + cls_pred, + gt_bboxes, + gt_labels, + img_meta, + gt_bboxes_ignore=None, + eps=1e-7): + """Computes one-to-one matching based on the weighted costs. + + This method assign each query prediction to a ground truth or + background. The `assigned_gt_inds` with -1 means don't care, + 0 means negative sample, and positive number is the index (1-based) + of assigned gt. + The assignment is done in the following steps, the order matters. + + 1. assign every prediction to -1 + 2. compute the weighted costs + 3. do Hungarian matching on CPU based on the costs + 4. assign all to 0 (background) first, then for each matched pair + between predictions and gts, treat this prediction as foreground + and assign the corresponding gt index (plus 1) to it. + + Args: + bbox_pred (Tensor): Predicted boxes with normalized coordinates + (cx, cy, w, h), which are all in range [0, 1]. Shape + [num_query, 4]. + cls_pred (Tensor): Predicted classification logits, shape + [num_query, num_class]. + gt_bboxes (Tensor): Ground truth boxes with unnormalized + coordinates (x1, y1, x2, y2). Shape [num_gt, 4]. + gt_labels (Tensor): Label of `gt_bboxes`, shape (num_gt,). + img_meta (dict): Meta information for current image. + gt_bboxes_ignore (Tensor, optional): Ground truth bboxes that are + labelled as `ignored`. Default None. + eps (int | float, optional): A value added to the denominator for + numerical stability. Default 1e-7. + + Returns: + :obj:`AssignResult`: The assigned result. + """ + assert gt_bboxes_ignore is None, \ + 'Only case when gt_bboxes_ignore is None is supported.' + num_gts, num_bboxes = gt_bboxes.size(0), bbox_pred.size(0) + + # 1. assign -1 by default + assigned_gt_inds = bbox_pred.new_full((num_bboxes, ), + -1, + dtype=torch.long) + assigned_labels = bbox_pred.new_full((num_bboxes, ), + -1, + dtype=torch.long) + if num_gts == 0 or num_bboxes == 0: + # No ground truth or boxes, return empty assignment + if num_gts == 0: + # No ground truth, assign all to background + assigned_gt_inds[:] = 0 + return AssignResult( + num_gts, assigned_gt_inds, None, labels=assigned_labels) + img_h, img_w, _ = img_meta['img_shape'] + factor = gt_bboxes.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + + # 2. compute the weighted costs + # classification and bboxcost. + cls_cost = self.cls_cost(cls_pred, gt_labels) + # regression L1 cost + normalize_gt_bboxes = gt_bboxes / factor + reg_cost = self.reg_cost(bbox_pred, normalize_gt_bboxes) + # regression iou cost, defaultly giou is used in official DETR. + bboxes = bbox_cxcywh_to_xyxy(bbox_pred) * factor + iou_cost = self.iou_cost(bboxes, gt_bboxes) + # weighted sum of above three costs + cost = cls_cost + reg_cost + iou_cost + + # 3. do Hungarian matching on CPU using linear_sum_assignment + cost = cost.detach().cpu() + if linear_sum_assignment is None: + raise ImportError('Please run "pip install scipy" ' + 'to install scipy first.') + matched_row_inds, matched_col_inds = linear_sum_assignment(cost) + matched_row_inds = torch.from_numpy(matched_row_inds).to( + bbox_pred.device) + matched_col_inds = torch.from_numpy(matched_col_inds).to( + bbox_pred.device) + + # 4. assign backgrounds and foregrounds + # assign all indices to backgrounds first + assigned_gt_inds[:] = 0 + # assign foregrounds based on matching results + assigned_gt_inds[matched_row_inds] = matched_col_inds + 1 + assigned_labels[matched_row_inds] = gt_labels[matched_col_inds] + return AssignResult( + num_gts, assigned_gt_inds, None, labels=assigned_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/max_iou_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/max_iou_assigner.py new file mode 100644 index 00000000..a99f77e1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/max_iou_assigner.py @@ -0,0 +1,212 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from ..iou_calculators import build_iou_calculator +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + + +@BBOX_ASSIGNERS.register_module() +class MaxIoUAssigner(BaseAssigner): + """Assign a corresponding gt bbox or background to each bbox. + + Each proposals will be assigned with `-1`, or a semi-positive integer + indicating the ground truth index. + + - -1: negative sample, no assigned gt + - semi-positive integer: positive sample, index (0-based) of assigned gt + + Args: + pos_iou_thr (float): IoU threshold for positive bboxes. + neg_iou_thr (float or tuple): IoU threshold for negative bboxes. + min_pos_iou (float): Minimum iou for a bbox to be considered as a + positive bbox. Positive samples can have smaller IoU than + pos_iou_thr due to the 4th step (assign max IoU sample to each gt). + gt_max_assign_all (bool): Whether to assign all bboxes with the same + highest overlap with some gt to that gt. + ignore_iof_thr (float): IoF threshold for ignoring bboxes (if + `gt_bboxes_ignore` is specified). Negative values mean not + ignoring any bboxes. + ignore_wrt_candidates (bool): Whether to compute the iof between + `bboxes` and `gt_bboxes_ignore`, or the contrary. + match_low_quality (bool): Whether to allow low quality matches. This is + usually allowed for RPN and single stage detectors, but not allowed + in the second stage. Details are demonstrated in Step 4. + gpu_assign_thr (int): The upper bound of the number of GT for GPU + assign. When the number of gt is above this threshold, will assign + on CPU device. Negative values mean not assign on CPU. + """ + + def __init__(self, + pos_iou_thr, + neg_iou_thr, + min_pos_iou=.0, + gt_max_assign_all=True, + ignore_iof_thr=-1, + ignore_wrt_candidates=True, + match_low_quality=True, + gpu_assign_thr=-1, + iou_calculator=dict(type='BboxOverlaps2D')): + self.pos_iou_thr = pos_iou_thr + self.neg_iou_thr = neg_iou_thr + self.min_pos_iou = min_pos_iou + self.gt_max_assign_all = gt_max_assign_all + self.ignore_iof_thr = ignore_iof_thr + self.ignore_wrt_candidates = ignore_wrt_candidates + self.gpu_assign_thr = gpu_assign_thr + self.match_low_quality = match_low_quality + self.iou_calculator = build_iou_calculator(iou_calculator) + + def assign(self, bboxes, gt_bboxes, gt_bboxes_ignore=None, gt_labels=None): + """Assign gt to bboxes. + + This method assign a gt bbox to every bbox (proposal/anchor), each bbox + will be assigned with -1, or a semi-positive number. -1 means negative + sample, semi-positive number is the index (0-based) of assigned gt. + The assignment is done in following steps, the order matters. + + 1. assign every bbox to the background + 2. assign proposals whose iou with all gts < neg_iou_thr to 0 + 3. for each bbox, if the iou with its nearest gt >= pos_iou_thr, + assign it to that bbox + 4. for each gt bbox, assign its nearest proposals (may be more than + one) to itself + + Args: + bboxes (Tensor): Bounding boxes to be assigned, shape(n, 4). + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_bboxes_ignore (Tensor, optional): Ground truth bboxes that are + labelled as `ignored`, e.g., crowd boxes in COCO. + gt_labels (Tensor, optional): Label of gt_bboxes, shape (k, ). + + Returns: + :obj:`AssignResult`: The assign result. + + Example: + >>> self = MaxIoUAssigner(0.5, 0.5) + >>> bboxes = torch.Tensor([[0, 0, 10, 10], [10, 10, 20, 20]]) + >>> gt_bboxes = torch.Tensor([[0, 0, 10, 9]]) + >>> assign_result = self.assign(bboxes, gt_bboxes) + >>> expected_gt_inds = torch.LongTensor([1, 0]) + >>> assert torch.all(assign_result.gt_inds == expected_gt_inds) + """ + assign_on_cpu = True if (self.gpu_assign_thr > 0) and ( + gt_bboxes.shape[0] > self.gpu_assign_thr) else False + # compute overlap and assign gt on CPU when number of GT is large + if assign_on_cpu: + device = bboxes.device + bboxes = bboxes.cpu() + gt_bboxes = gt_bboxes.cpu() + if gt_bboxes_ignore is not None: + gt_bboxes_ignore = gt_bboxes_ignore.cpu() + if gt_labels is not None: + gt_labels = gt_labels.cpu() + + overlaps = self.iou_calculator(gt_bboxes, bboxes) + + if (self.ignore_iof_thr > 0 and gt_bboxes_ignore is not None + and gt_bboxes_ignore.numel() > 0 and bboxes.numel() > 0): + if self.ignore_wrt_candidates: + ignore_overlaps = self.iou_calculator( + bboxes, gt_bboxes_ignore, mode='iof') + ignore_max_overlaps, _ = ignore_overlaps.max(dim=1) + else: + ignore_overlaps = self.iou_calculator( + gt_bboxes_ignore, bboxes, mode='iof') + ignore_max_overlaps, _ = ignore_overlaps.max(dim=0) + overlaps[:, ignore_max_overlaps > self.ignore_iof_thr] = -1 + + assign_result = self.assign_wrt_overlaps(overlaps, gt_labels) + if assign_on_cpu: + assign_result.gt_inds = assign_result.gt_inds.to(device) + assign_result.max_overlaps = assign_result.max_overlaps.to(device) + if assign_result.labels is not None: + assign_result.labels = assign_result.labels.to(device) + return assign_result + + def assign_wrt_overlaps(self, overlaps, gt_labels=None): + """Assign w.r.t. the overlaps of bboxes with gts. + + Args: + overlaps (Tensor): Overlaps between k gt_bboxes and n bboxes, + shape(k, n). + gt_labels (Tensor, optional): Labels of k gt_bboxes, shape (k, ). + + Returns: + :obj:`AssignResult`: The assign result. + """ + num_gts, num_bboxes = overlaps.size(0), overlaps.size(1) + + # 1. assign -1 by default + assigned_gt_inds = overlaps.new_full((num_bboxes, ), + -1, + dtype=torch.long) + + if num_gts == 0 or num_bboxes == 0: + # No ground truth or boxes, return empty assignment + max_overlaps = overlaps.new_zeros((num_bboxes, )) + if num_gts == 0: + # No truth, assign everything to background + assigned_gt_inds[:] = 0 + if gt_labels is None: + assigned_labels = None + else: + assigned_labels = overlaps.new_full((num_bboxes, ), + -1, + dtype=torch.long) + return AssignResult( + num_gts, + assigned_gt_inds, + max_overlaps, + labels=assigned_labels) + + # for each anchor, which gt best overlaps with it + # for each anchor, the max iou of all gts + max_overlaps, argmax_overlaps = overlaps.max(dim=0) + # for each gt, which anchor best overlaps with it + # for each gt, the max iou of all proposals + gt_max_overlaps, gt_argmax_overlaps = overlaps.max(dim=1) + + # 2. assign negative: below + # the negative inds are set to be 0 + if isinstance(self.neg_iou_thr, float): + assigned_gt_inds[(max_overlaps >= 0) + & (max_overlaps < self.neg_iou_thr)] = 0 + elif isinstance(self.neg_iou_thr, tuple): + assert len(self.neg_iou_thr) == 2 + assigned_gt_inds[(max_overlaps >= self.neg_iou_thr[0]) + & (max_overlaps < self.neg_iou_thr[1])] = 0 + + # 3. assign positive: above positive IoU threshold + pos_inds = max_overlaps >= self.pos_iou_thr + assigned_gt_inds[pos_inds] = argmax_overlaps[pos_inds] + 1 + + if self.match_low_quality: + # Low-quality matching will overwirte the assigned_gt_inds assigned + # in Step 3. Thus, the assigned gt might not be the best one for + # prediction. + # For example, if bbox A has 0.9 and 0.8 iou with GT bbox 1 & 2, + # bbox 1 will be assigned as the best target for bbox A in step 3. + # However, if GT bbox 2's gt_argmax_overlaps = A, bbox A's + # assigned_gt_inds will be overwritten to be bbox B. + # This might be the reason that it is not used in ROI Heads. + for i in range(num_gts): + if gt_max_overlaps[i] >= self.min_pos_iou: + if self.gt_max_assign_all: + max_iou_inds = overlaps[i, :] == gt_max_overlaps[i] + assigned_gt_inds[max_iou_inds] = i + 1 + else: + assigned_gt_inds[gt_argmax_overlaps[i]] = i + 1 + + if gt_labels is not None: + assigned_labels = assigned_gt_inds.new_full((num_bboxes, ), -1) + pos_inds = torch.nonzero( + assigned_gt_inds > 0, as_tuple=False).squeeze() + if pos_inds.numel() > 0: + assigned_labels[pos_inds] = gt_labels[ + assigned_gt_inds[pos_inds] - 1] + else: + assigned_labels = None + + return AssignResult( + num_gts, assigned_gt_inds, max_overlaps, labels=assigned_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/point_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/point_assigner.py new file mode 100644 index 00000000..fb8f5e4e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/point_assigner.py @@ -0,0 +1,133 @@ +import torch + +from ..builder import BBOX_ASSIGNERS +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + + +@BBOX_ASSIGNERS.register_module() +class PointAssigner(BaseAssigner): + """Assign a corresponding gt bbox or background to each point. + + Each proposals will be assigned with `0`, or a positive integer + indicating the ground truth index. + + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + """ + + def __init__(self, scale=4, pos_num=3): + self.scale = scale + self.pos_num = pos_num + + def assign(self, points, gt_bboxes, gt_bboxes_ignore=None, gt_labels=None): + """Assign gt to points. + + This method assign a gt bbox to every points set, each points set + will be assigned with the background_label (-1), or a label number. + -1 is background, and semi-positive number is the index (0-based) of + assigned gt. + The assignment is done in following steps, the order matters. + + 1. assign every points to the background_label (-1) + 2. A point is assigned to some gt bbox if + (i) the point is within the k closest points to the gt bbox + (ii) the distance between this point and the gt is smaller than + other gt bboxes + + Args: + points (Tensor): points to be assigned, shape(n, 3) while last + dimension stands for (x, y, stride). + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_bboxes_ignore (Tensor, optional): Ground truth bboxes that are + labelled as `ignored`, e.g., crowd boxes in COCO. + NOTE: currently unused. + gt_labels (Tensor, optional): Label of gt_bboxes, shape (k, ). + + Returns: + :obj:`AssignResult`: The assign result. + """ + num_points = points.shape[0] + num_gts = gt_bboxes.shape[0] + + if num_gts == 0 or num_points == 0: + # If no truth assign everything to the background + assigned_gt_inds = points.new_full((num_points, ), + 0, + dtype=torch.long) + if gt_labels is None: + assigned_labels = None + else: + assigned_labels = points.new_full((num_points, ), + -1, + dtype=torch.long) + return AssignResult( + num_gts, assigned_gt_inds, None, labels=assigned_labels) + + points_xy = points[:, :2] + points_stride = points[:, 2] + points_lvl = torch.log2( + points_stride).int() # [3...,4...,5...,6...,7...] + lvl_min, lvl_max = points_lvl.min(), points_lvl.max() + + # assign gt box + gt_bboxes_xy = (gt_bboxes[:, :2] + gt_bboxes[:, 2:]) / 2 + gt_bboxes_wh = (gt_bboxes[:, 2:] - gt_bboxes[:, :2]).clamp(min=1e-6) + scale = self.scale + gt_bboxes_lvl = ((torch.log2(gt_bboxes_wh[:, 0] / scale) + + torch.log2(gt_bboxes_wh[:, 1] / scale)) / 2).int() + gt_bboxes_lvl = torch.clamp(gt_bboxes_lvl, min=lvl_min, max=lvl_max) + + # stores the assigned gt index of each point + assigned_gt_inds = points.new_zeros((num_points, ), dtype=torch.long) + # stores the assigned gt dist (to this point) of each point + assigned_gt_dist = points.new_full((num_points, ), float('inf')) + points_range = torch.arange(points.shape[0]) + + for idx in range(num_gts): + gt_lvl = gt_bboxes_lvl[idx] + # get the index of points in this level + lvl_idx = gt_lvl == points_lvl + points_index = points_range[lvl_idx] + # get the points in this level + lvl_points = points_xy[lvl_idx, :] + # get the center point of gt + gt_point = gt_bboxes_xy[[idx], :] + # get width and height of gt + gt_wh = gt_bboxes_wh[[idx], :] + # compute the distance between gt center and + # all points in this level + points_gt_dist = ((lvl_points - gt_point) / gt_wh).norm(dim=1) + # find the nearest k points to gt center in this level + min_dist, min_dist_index = torch.topk( + points_gt_dist, self.pos_num, largest=False) + # the index of nearest k points to gt center in this level + min_dist_points_index = points_index[min_dist_index] + # The less_than_recorded_index stores the index + # of min_dist that is less then the assigned_gt_dist. Where + # assigned_gt_dist stores the dist from previous assigned gt + # (if exist) to each point. + less_than_recorded_index = min_dist < assigned_gt_dist[ + min_dist_points_index] + # The min_dist_points_index stores the index of points satisfy: + # (1) it is k nearest to current gt center in this level. + # (2) it is closer to current gt center than other gt center. + min_dist_points_index = min_dist_points_index[ + less_than_recorded_index] + # assign the result + assigned_gt_inds[min_dist_points_index] = idx + 1 + assigned_gt_dist[min_dist_points_index] = min_dist[ + less_than_recorded_index] + + if gt_labels is not None: + assigned_labels = assigned_gt_inds.new_full((num_points, ), -1) + pos_inds = torch.nonzero( + assigned_gt_inds > 0, as_tuple=False).squeeze() + if pos_inds.numel() > 0: + assigned_labels[pos_inds] = gt_labels[ + assigned_gt_inds[pos_inds] - 1] + else: + assigned_labels = None + + return AssignResult( + num_gts, assigned_gt_inds, None, labels=assigned_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/region_assigner.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/region_assigner.py new file mode 100644 index 00000000..c6926055 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/assigners/region_assigner.py @@ -0,0 +1,204 @@ +import torch + +from mmdet.core import anchor_inside_flags +from ..builder import BBOX_ASSIGNERS +from .assign_result import AssignResult +from .base_assigner import BaseAssigner + + +def calc_region(bbox, ratio, stride, featmap_size=None): + """Calculate region of the box defined by the ratio, the ratio is from the + center of the box to every edge.""" + # project bbox on the feature + f_bbox = bbox / stride + x1 = torch.round((1 - ratio) * f_bbox[0] + ratio * f_bbox[2]) + y1 = torch.round((1 - ratio) * f_bbox[1] + ratio * f_bbox[3]) + x2 = torch.round(ratio * f_bbox[0] + (1 - ratio) * f_bbox[2]) + y2 = torch.round(ratio * f_bbox[1] + (1 - ratio) * f_bbox[3]) + if featmap_size is not None: + x1 = x1.clamp(min=0, max=featmap_size[1]) + y1 = y1.clamp(min=0, max=featmap_size[0]) + x2 = x2.clamp(min=0, max=featmap_size[1]) + y2 = y2.clamp(min=0, max=featmap_size[0]) + return (x1, y1, x2, y2) + + +def anchor_ctr_inside_region_flags(anchors, stride, region): + """Get the flag indicate whether anchor centers are inside regions.""" + x1, y1, x2, y2 = region + f_anchors = anchors / stride + x = (f_anchors[:, 0] + f_anchors[:, 2]) * 0.5 + y = (f_anchors[:, 1] + f_anchors[:, 3]) * 0.5 + flags = (x >= x1) & (x <= x2) & (y >= y1) & (y <= y2) + return flags + + +@BBOX_ASSIGNERS.register_module() +class RegionAssigner(BaseAssigner): + """Assign a corresponding gt bbox or background to each bbox. + + Each proposals will be assigned with `-1`, `0`, or a positive integer + indicating the ground truth index. + + - -1: don't care + - 0: negative sample, no assigned gt + - positive integer: positive sample, index (1-based) of assigned gt + + Args: + center_ratio: ratio of the region in the center of the bbox to + define positive sample. + ignore_ratio: ratio of the region to define ignore samples. + """ + + def __init__(self, center_ratio=0.2, ignore_ratio=0.5): + self.center_ratio = center_ratio + self.ignore_ratio = ignore_ratio + + def assign(self, + mlvl_anchors, + mlvl_valid_flags, + gt_bboxes, + img_meta, + featmap_sizes, + anchor_scale, + anchor_strides, + gt_bboxes_ignore=None, + gt_labels=None, + allowed_border=0): + """Assign gt to anchors. + + This method assign a gt bbox to every bbox (proposal/anchor), each bbox + will be assigned with -1, 0, or a positive number. -1 means don't care, + 0 means negative sample, positive number is the index (1-based) of + assigned gt. + The assignment is done in following steps, the order matters. + + 1. Assign every anchor to 0 (negative) + For each gt_bboxes: + 2. Compute ignore flags based on ignore_region then + assign -1 to anchors w.r.t. ignore flags + 3. Compute pos flags based on center_region then + assign gt_bboxes to anchors w.r.t. pos flags + 4. Compute ignore flags based on adjacent anchor lvl then + assign -1 to anchors w.r.t. ignore flags + 5. Assign anchor outside of image to -1 + + Args: + mlvl_anchors (list[Tensor]): Multi level anchors. + mlvl_valid_flags (list[Tensor]): Multi level valid flags. + gt_bboxes (Tensor): Ground truth bboxes of image + img_meta (dict): Meta info of image. + featmap_sizes (list[Tensor]): Feature mapsize each level + anchor_scale (int): Scale of the anchor. + anchor_strides (list[int]): Stride of the anchor. + gt_bboxes (Tensor): Groundtruth boxes, shape (k, 4). + gt_bboxes_ignore (Tensor, optional): Ground truth bboxes that are + labelled as `ignored`, e.g., crowd boxes in COCO. + gt_labels (Tensor, optional): Label of gt_bboxes, shape (k, ). + allowed_border (int, optional): The border to allow the valid + anchor. Defaults to 0. + + Returns: + :obj:`AssignResult`: The assign result. + """ + # TODO support gt_bboxes_ignore + if gt_bboxes_ignore is not None: + raise NotImplementedError + if gt_bboxes.shape[0] == 0: + raise ValueError('No gt bboxes') + num_gts = gt_bboxes.shape[0] + num_lvls = len(mlvl_anchors) + r1 = (1 - self.center_ratio) / 2 + r2 = (1 - self.ignore_ratio) / 2 + + scale = torch.sqrt((gt_bboxes[:, 2] - gt_bboxes[:, 0]) * + (gt_bboxes[:, 3] - gt_bboxes[:, 1])) + min_anchor_size = scale.new_full( + (1, ), float(anchor_scale * anchor_strides[0])) + target_lvls = torch.floor( + torch.log2(scale) - torch.log2(min_anchor_size) + 0.5) + target_lvls = target_lvls.clamp(min=0, max=num_lvls - 1).long() + + # 1. assign 0 (negative) by default + mlvl_assigned_gt_inds = [] + mlvl_ignore_flags = [] + for lvl in range(num_lvls): + h, w = featmap_sizes[lvl] + assert h * w == mlvl_anchors[lvl].shape[0] + assigned_gt_inds = gt_bboxes.new_full((h * w, ), + 0, + dtype=torch.long) + ignore_flags = torch.zeros_like(assigned_gt_inds) + mlvl_assigned_gt_inds.append(assigned_gt_inds) + mlvl_ignore_flags.append(ignore_flags) + + for gt_id in range(num_gts): + lvl = target_lvls[gt_id].item() + featmap_size = featmap_sizes[lvl] + stride = anchor_strides[lvl] + anchors = mlvl_anchors[lvl] + gt_bbox = gt_bboxes[gt_id, :4] + + # Compute regions + ignore_region = calc_region(gt_bbox, r2, stride, featmap_size) + ctr_region = calc_region(gt_bbox, r1, stride, featmap_size) + + # 2. Assign -1 to ignore flags + ignore_flags = anchor_ctr_inside_region_flags( + anchors, stride, ignore_region) + mlvl_assigned_gt_inds[lvl][ignore_flags] = -1 + + # 3. Assign gt_bboxes to pos flags + pos_flags = anchor_ctr_inside_region_flags(anchors, stride, + ctr_region) + mlvl_assigned_gt_inds[lvl][pos_flags] = gt_id + 1 + + # 4. Assign -1 to ignore adjacent lvl + if lvl > 0: + d_lvl = lvl - 1 + d_anchors = mlvl_anchors[d_lvl] + d_featmap_size = featmap_sizes[d_lvl] + d_stride = anchor_strides[d_lvl] + d_ignore_region = calc_region(gt_bbox, r2, d_stride, + d_featmap_size) + ignore_flags = anchor_ctr_inside_region_flags( + d_anchors, d_stride, d_ignore_region) + mlvl_ignore_flags[d_lvl][ignore_flags] = 1 + if lvl < num_lvls - 1: + u_lvl = lvl + 1 + u_anchors = mlvl_anchors[u_lvl] + u_featmap_size = featmap_sizes[u_lvl] + u_stride = anchor_strides[u_lvl] + u_ignore_region = calc_region(gt_bbox, r2, u_stride, + u_featmap_size) + ignore_flags = anchor_ctr_inside_region_flags( + u_anchors, u_stride, u_ignore_region) + mlvl_ignore_flags[u_lvl][ignore_flags] = 1 + + # 4. (cont.) Assign -1 to ignore adjacent lvl + for lvl in range(num_lvls): + ignore_flags = mlvl_ignore_flags[lvl] + mlvl_assigned_gt_inds[lvl][ignore_flags] = -1 + + # 5. Assign -1 to anchor outside of image + flat_assigned_gt_inds = torch.cat(mlvl_assigned_gt_inds) + flat_anchors = torch.cat(mlvl_anchors) + flat_valid_flags = torch.cat(mlvl_valid_flags) + assert (flat_assigned_gt_inds.shape[0] == flat_anchors.shape[0] == + flat_valid_flags.shape[0]) + inside_flags = anchor_inside_flags(flat_anchors, flat_valid_flags, + img_meta['img_shape'], + allowed_border) + outside_flags = ~inside_flags + flat_assigned_gt_inds[outside_flags] = -1 + + if gt_labels is not None: + assigned_labels = torch.zeros_like(flat_assigned_gt_inds) + pos_flags = assigned_gt_inds > 0 + assigned_labels[pos_flags] = gt_labels[ + flat_assigned_gt_inds[pos_flags] - 1] + else: + assigned_labels = None + + return AssignResult( + num_gts, flat_assigned_gt_inds, None, labels=assigned_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/builder.py new file mode 100644 index 00000000..682683b6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/builder.py @@ -0,0 +1,20 @@ +from mmcv.utils import Registry, build_from_cfg + +BBOX_ASSIGNERS = Registry('bbox_assigner') +BBOX_SAMPLERS = Registry('bbox_sampler') +BBOX_CODERS = Registry('bbox_coder') + + +def build_assigner(cfg, **default_args): + """Builder of box assigner.""" + return build_from_cfg(cfg, BBOX_ASSIGNERS, default_args) + + +def build_sampler(cfg, **default_args): + """Builder of box sampler.""" + return build_from_cfg(cfg, BBOX_SAMPLERS, default_args) + + +def build_bbox_coder(cfg, **default_args): + """Builder of box coder.""" + return build_from_cfg(cfg, BBOX_CODERS, default_args) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/__init__.py new file mode 100644 index 00000000..ae455ba8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/__init__.py @@ -0,0 +1,13 @@ +from .base_bbox_coder import BaseBBoxCoder +from .bucketing_bbox_coder import BucketingBBoxCoder +from .delta_xywh_bbox_coder import DeltaXYWHBBoxCoder +from .legacy_delta_xywh_bbox_coder import LegacyDeltaXYWHBBoxCoder +from .pseudo_bbox_coder import PseudoBBoxCoder +from .tblr_bbox_coder import TBLRBBoxCoder +from .yolo_bbox_coder import YOLOBBoxCoder + +__all__ = [ + 'BaseBBoxCoder', 'PseudoBBoxCoder', 'DeltaXYWHBBoxCoder', + 'LegacyDeltaXYWHBBoxCoder', 'TBLRBBoxCoder', 'YOLOBBoxCoder', + 'BucketingBBoxCoder' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/base_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/base_bbox_coder.py new file mode 100644 index 00000000..6e427272 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/base_bbox_coder.py @@ -0,0 +1,19 @@ +from abc import ABCMeta, abstractmethod + + +class BaseBBoxCoder(metaclass=ABCMeta): + """Base bounding box coder.""" + + def __init__(self, **kwargs): + pass + + @abstractmethod + def encode(self, bboxes, gt_bboxes): + """Encode deltas between bboxes and ground truth boxes.""" + pass + + @abstractmethod + def decode(self, bboxes, bboxes_pred): + """Decode the predicted bboxes according to prediction and base + boxes.""" + pass diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/bucketing_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/bucketing_bbox_coder.py new file mode 100644 index 00000000..e8c450c5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/bucketing_bbox_coder.py @@ -0,0 +1,346 @@ +import numpy as np +import torch +import torch.nn.functional as F + +from ..builder import BBOX_CODERS +from ..transforms import bbox_rescale +from .base_bbox_coder import BaseBBoxCoder + + +@BBOX_CODERS.register_module() +class BucketingBBoxCoder(BaseBBoxCoder): + """Bucketing BBox Coder for Side-Aware Bounday Localization (SABL). + + Boundary Localization with Bucketing and Bucketing Guided Rescoring + are implemented here. + + Please refer to https://arxiv.org/abs/1912.04260 for more details. + + Args: + num_buckets (int): Number of buckets. + scale_factor (int): Scale factor of proposals to generate buckets. + offset_topk (int): Topk buckets are used to generate + bucket fine regression targets. Defaults to 2. + offset_upperbound (float): Offset upperbound to generate + bucket fine regression targets. + To avoid too large offset displacements. Defaults to 1.0. + cls_ignore_neighbor (bool): Ignore second nearest bucket or Not. + Defaults to True. + clip_border (bool, optional): Whether clip the objects outside the + border of the image. Defaults to True. + """ + + def __init__(self, + num_buckets, + scale_factor, + offset_topk=2, + offset_upperbound=1.0, + cls_ignore_neighbor=True, + clip_border=True): + super(BucketingBBoxCoder, self).__init__() + self.num_buckets = num_buckets + self.scale_factor = scale_factor + self.offset_topk = offset_topk + self.offset_upperbound = offset_upperbound + self.cls_ignore_neighbor = cls_ignore_neighbor + self.clip_border = clip_border + + def encode(self, bboxes, gt_bboxes): + """Get bucketing estimation and fine regression targets during + training. + + Args: + bboxes (torch.Tensor): source boxes, e.g., object proposals. + gt_bboxes (torch.Tensor): target of the transformation, e.g., + ground truth boxes. + + Returns: + encoded_bboxes(tuple[Tensor]): bucketing estimation + and fine regression targets and weights + """ + + assert bboxes.size(0) == gt_bboxes.size(0) + assert bboxes.size(-1) == gt_bboxes.size(-1) == 4 + encoded_bboxes = bbox2bucket(bboxes, gt_bboxes, self.num_buckets, + self.scale_factor, self.offset_topk, + self.offset_upperbound, + self.cls_ignore_neighbor) + return encoded_bboxes + + def decode(self, bboxes, pred_bboxes, max_shape=None): + """Apply transformation `pred_bboxes` to `boxes`. + Args: + boxes (torch.Tensor): Basic boxes. + pred_bboxes (torch.Tensor): Predictions for bucketing estimation + and fine regression + max_shape (tuple[int], optional): Maximum shape of boxes. + Defaults to None. + + Returns: + torch.Tensor: Decoded boxes. + """ + assert len(pred_bboxes) == 2 + cls_preds, offset_preds = pred_bboxes + assert cls_preds.size(0) == bboxes.size(0) and offset_preds.size( + 0) == bboxes.size(0) + decoded_bboxes = bucket2bbox(bboxes, cls_preds, offset_preds, + self.num_buckets, self.scale_factor, + max_shape, self.clip_border) + + return decoded_bboxes + + +def generat_buckets(proposals, num_buckets, scale_factor=1.0): + """Generate buckets w.r.t bucket number and scale factor of proposals. + + Args: + proposals (Tensor): Shape (n, 4) + num_buckets (int): Number of buckets. + scale_factor (float): Scale factor to rescale proposals. + + Returns: + tuple[Tensor]: (bucket_w, bucket_h, l_buckets, r_buckets, + t_buckets, d_buckets) + + - bucket_w: Width of buckets on x-axis. Shape (n, ). + - bucket_h: Height of buckets on y-axis. Shape (n, ). + - l_buckets: Left buckets. Shape (n, ceil(side_num/2)). + - r_buckets: Right buckets. Shape (n, ceil(side_num/2)). + - t_buckets: Top buckets. Shape (n, ceil(side_num/2)). + - d_buckets: Down buckets. Shape (n, ceil(side_num/2)). + """ + proposals = bbox_rescale(proposals, scale_factor) + + # number of buckets in each side + side_num = int(np.ceil(num_buckets / 2.0)) + pw = proposals[..., 2] - proposals[..., 0] + ph = proposals[..., 3] - proposals[..., 1] + px1 = proposals[..., 0] + py1 = proposals[..., 1] + px2 = proposals[..., 2] + py2 = proposals[..., 3] + + bucket_w = pw / num_buckets + bucket_h = ph / num_buckets + + # left buckets + l_buckets = px1[:, None] + (0.5 + torch.arange( + 0, side_num).to(proposals).float())[None, :] * bucket_w[:, None] + # right buckets + r_buckets = px2[:, None] - (0.5 + torch.arange( + 0, side_num).to(proposals).float())[None, :] * bucket_w[:, None] + # top buckets + t_buckets = py1[:, None] + (0.5 + torch.arange( + 0, side_num).to(proposals).float())[None, :] * bucket_h[:, None] + # down buckets + d_buckets = py2[:, None] - (0.5 + torch.arange( + 0, side_num).to(proposals).float())[None, :] * bucket_h[:, None] + return bucket_w, bucket_h, l_buckets, r_buckets, t_buckets, d_buckets + + +def bbox2bucket(proposals, + gt, + num_buckets, + scale_factor, + offset_topk=2, + offset_upperbound=1.0, + cls_ignore_neighbor=True): + """Generate buckets estimation and fine regression targets. + + Args: + proposals (Tensor): Shape (n, 4) + gt (Tensor): Shape (n, 4) + num_buckets (int): Number of buckets. + scale_factor (float): Scale factor to rescale proposals. + offset_topk (int): Topk buckets are used to generate + bucket fine regression targets. Defaults to 2. + offset_upperbound (float): Offset allowance to generate + bucket fine regression targets. + To avoid too large offset displacements. Defaults to 1.0. + cls_ignore_neighbor (bool): Ignore second nearest bucket or Not. + Defaults to True. + + Returns: + tuple[Tensor]: (offsets, offsets_weights, bucket_labels, cls_weights). + + - offsets: Fine regression targets. \ + Shape (n, num_buckets*2). + - offsets_weights: Fine regression weights. \ + Shape (n, num_buckets*2). + - bucket_labels: Bucketing estimation labels. \ + Shape (n, num_buckets*2). + - cls_weights: Bucketing estimation weights. \ + Shape (n, num_buckets*2). + """ + assert proposals.size() == gt.size() + + # generate buckets + proposals = proposals.float() + gt = gt.float() + (bucket_w, bucket_h, l_buckets, r_buckets, t_buckets, + d_buckets) = generat_buckets(proposals, num_buckets, scale_factor) + + gx1 = gt[..., 0] + gy1 = gt[..., 1] + gx2 = gt[..., 2] + gy2 = gt[..., 3] + + # generate offset targets and weights + # offsets from buckets to gts + l_offsets = (l_buckets - gx1[:, None]) / bucket_w[:, None] + r_offsets = (r_buckets - gx2[:, None]) / bucket_w[:, None] + t_offsets = (t_buckets - gy1[:, None]) / bucket_h[:, None] + d_offsets = (d_buckets - gy2[:, None]) / bucket_h[:, None] + + # select top-k nearset buckets + l_topk, l_label = l_offsets.abs().topk( + offset_topk, dim=1, largest=False, sorted=True) + r_topk, r_label = r_offsets.abs().topk( + offset_topk, dim=1, largest=False, sorted=True) + t_topk, t_label = t_offsets.abs().topk( + offset_topk, dim=1, largest=False, sorted=True) + d_topk, d_label = d_offsets.abs().topk( + offset_topk, dim=1, largest=False, sorted=True) + + offset_l_weights = l_offsets.new_zeros(l_offsets.size()) + offset_r_weights = r_offsets.new_zeros(r_offsets.size()) + offset_t_weights = t_offsets.new_zeros(t_offsets.size()) + offset_d_weights = d_offsets.new_zeros(d_offsets.size()) + inds = torch.arange(0, proposals.size(0)).to(proposals).long() + + # generate offset weights of top-k nearset buckets + for k in range(offset_topk): + if k >= 1: + offset_l_weights[inds, l_label[:, + k]] = (l_topk[:, k] < + offset_upperbound).float() + offset_r_weights[inds, r_label[:, + k]] = (r_topk[:, k] < + offset_upperbound).float() + offset_t_weights[inds, t_label[:, + k]] = (t_topk[:, k] < + offset_upperbound).float() + offset_d_weights[inds, d_label[:, + k]] = (d_topk[:, k] < + offset_upperbound).float() + else: + offset_l_weights[inds, l_label[:, k]] = 1.0 + offset_r_weights[inds, r_label[:, k]] = 1.0 + offset_t_weights[inds, t_label[:, k]] = 1.0 + offset_d_weights[inds, d_label[:, k]] = 1.0 + + offsets = torch.cat([l_offsets, r_offsets, t_offsets, d_offsets], dim=-1) + offsets_weights = torch.cat([ + offset_l_weights, offset_r_weights, offset_t_weights, offset_d_weights + ], + dim=-1) + + # generate bucket labels and weight + side_num = int(np.ceil(num_buckets / 2.0)) + labels = torch.stack( + [l_label[:, 0], r_label[:, 0], t_label[:, 0], d_label[:, 0]], dim=-1) + + batch_size = labels.size(0) + bucket_labels = F.one_hot(labels.view(-1), side_num).view(batch_size, + -1).float() + bucket_cls_l_weights = (l_offsets.abs() < 1).float() + bucket_cls_r_weights = (r_offsets.abs() < 1).float() + bucket_cls_t_weights = (t_offsets.abs() < 1).float() + bucket_cls_d_weights = (d_offsets.abs() < 1).float() + bucket_cls_weights = torch.cat([ + bucket_cls_l_weights, bucket_cls_r_weights, bucket_cls_t_weights, + bucket_cls_d_weights + ], + dim=-1) + # ignore second nearest buckets for cls if necessay + if cls_ignore_neighbor: + bucket_cls_weights = (~((bucket_cls_weights == 1) & + (bucket_labels == 0))).float() + else: + bucket_cls_weights[:] = 1.0 + return offsets, offsets_weights, bucket_labels, bucket_cls_weights + + +def bucket2bbox(proposals, + cls_preds, + offset_preds, + num_buckets, + scale_factor=1.0, + max_shape=None, + clip_border=True): + """Apply bucketing estimation (cls preds) and fine regression (offset + preds) to generate det bboxes. + + Args: + proposals (Tensor): Boxes to be transformed. Shape (n, 4) + cls_preds (Tensor): bucketing estimation. Shape (n, num_buckets*2). + offset_preds (Tensor): fine regression. Shape (n, num_buckets*2). + num_buckets (int): Number of buckets. + scale_factor (float): Scale factor to rescale proposals. + max_shape (tuple[int, int]): Maximum bounds for boxes. specifies (H, W) + clip_border (bool, optional): Whether clip the objects outside the + border of the image. Defaults to True. + + Returns: + tuple[Tensor]: (bboxes, loc_confidence). + + - bboxes: predicted bboxes. Shape (n, 4) + - loc_confidence: localization confidence of predicted bboxes. + Shape (n,). + """ + + side_num = int(np.ceil(num_buckets / 2.0)) + cls_preds = cls_preds.view(-1, side_num) + offset_preds = offset_preds.view(-1, side_num) + + scores = F.softmax(cls_preds, dim=1) + score_topk, score_label = scores.topk(2, dim=1, largest=True, sorted=True) + + rescaled_proposals = bbox_rescale(proposals, scale_factor) + + pw = rescaled_proposals[..., 2] - rescaled_proposals[..., 0] + ph = rescaled_proposals[..., 3] - rescaled_proposals[..., 1] + px1 = rescaled_proposals[..., 0] + py1 = rescaled_proposals[..., 1] + px2 = rescaled_proposals[..., 2] + py2 = rescaled_proposals[..., 3] + + bucket_w = pw / num_buckets + bucket_h = ph / num_buckets + + score_inds_l = score_label[0::4, 0] + score_inds_r = score_label[1::4, 0] + score_inds_t = score_label[2::4, 0] + score_inds_d = score_label[3::4, 0] + l_buckets = px1 + (0.5 + score_inds_l.float()) * bucket_w + r_buckets = px2 - (0.5 + score_inds_r.float()) * bucket_w + t_buckets = py1 + (0.5 + score_inds_t.float()) * bucket_h + d_buckets = py2 - (0.5 + score_inds_d.float()) * bucket_h + + offsets = offset_preds.view(-1, 4, side_num) + inds = torch.arange(proposals.size(0)).to(proposals).long() + l_offsets = offsets[:, 0, :][inds, score_inds_l] + r_offsets = offsets[:, 1, :][inds, score_inds_r] + t_offsets = offsets[:, 2, :][inds, score_inds_t] + d_offsets = offsets[:, 3, :][inds, score_inds_d] + + x1 = l_buckets - l_offsets * bucket_w + x2 = r_buckets - r_offsets * bucket_w + y1 = t_buckets - t_offsets * bucket_h + y2 = d_buckets - d_offsets * bucket_h + + if clip_border and max_shape is not None: + x1 = x1.clamp(min=0, max=max_shape[1] - 1) + y1 = y1.clamp(min=0, max=max_shape[0] - 1) + x2 = x2.clamp(min=0, max=max_shape[1] - 1) + y2 = y2.clamp(min=0, max=max_shape[0] - 1) + bboxes = torch.cat([x1[:, None], y1[:, None], x2[:, None], y2[:, None]], + dim=-1) + + # bucketing guided rescoring + loc_confidence = score_topk[:, 0] + top2_neighbor_inds = (score_label[:, 0] - score_label[:, 1]).abs() == 1 + loc_confidence += score_topk[:, 1] * top2_neighbor_inds.float() + loc_confidence = loc_confidence.view(-1, 4).mean(dim=1) + + return bboxes, loc_confidence diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py new file mode 100644 index 00000000..e9eb3579 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/delta_xywh_bbox_coder.py @@ -0,0 +1,204 @@ +import numpy as np +import torch + +from ..builder import BBOX_CODERS +from .base_bbox_coder import BaseBBoxCoder + + +@BBOX_CODERS.register_module() +class DeltaXYWHBBoxCoder(BaseBBoxCoder): + """Delta XYWH BBox coder. + + Following the practice in `R-CNN `_, + this coder encodes bbox (x1, y1, x2, y2) into delta (dx, dy, dw, dh) and + decodes delta (dx, dy, dw, dh) back to original bbox (x1, y1, x2, y2). + + Args: + target_means (Sequence[float]): Denormalizing means of target for + delta coordinates + target_stds (Sequence[float]): Denormalizing standard deviation of + target for delta coordinates + clip_border (bool, optional): Whether clip the objects outside the + border of the image. Defaults to True. + """ + + def __init__(self, + target_means=(0., 0., 0., 0.), + target_stds=(1., 1., 1., 1.), + clip_border=True): + super(BaseBBoxCoder, self).__init__() + self.means = target_means + self.stds = target_stds + self.clip_border = clip_border + + def encode(self, bboxes, gt_bboxes): + """Get box regression transformation deltas that can be used to + transform the ``bboxes`` into the ``gt_bboxes``. + + Args: + bboxes (torch.Tensor): Source boxes, e.g., object proposals. + gt_bboxes (torch.Tensor): Target of the transformation, e.g., + ground-truth boxes. + + Returns: + torch.Tensor: Box transformation deltas + """ + + assert bboxes.size(0) == gt_bboxes.size(0) + assert bboxes.size(-1) == gt_bboxes.size(-1) == 4 + encoded_bboxes = bbox2delta(bboxes, gt_bboxes, self.means, self.stds) + return encoded_bboxes + + def decode(self, + bboxes, + pred_bboxes, + max_shape=None, + wh_ratio_clip=16 / 1000): + """Apply transformation `pred_bboxes` to `boxes`. + + Args: + boxes (torch.Tensor): Basic boxes. + pred_bboxes (torch.Tensor): Encoded boxes with shape + max_shape (tuple[int], optional): Maximum shape of boxes. + Defaults to None. + wh_ratio_clip (float, optional): The allowed ratio between + width and height. + + Returns: + torch.Tensor: Decoded boxes. + """ + + assert pred_bboxes.size(0) == bboxes.size(0) + decoded_bboxes = delta2bbox(bboxes, pred_bboxes, self.means, self.stds, + max_shape, wh_ratio_clip, self.clip_border) + + return decoded_bboxes + + +def bbox2delta(proposals, gt, means=(0., 0., 0., 0.), stds=(1., 1., 1., 1.)): + """Compute deltas of proposals w.r.t. gt. + + We usually compute the deltas of x, y, w, h of proposals w.r.t ground + truth bboxes to get regression target. + This is the inverse function of :func:`delta2bbox`. + + Args: + proposals (Tensor): Boxes to be transformed, shape (N, ..., 4) + gt (Tensor): Gt bboxes to be used as base, shape (N, ..., 4) + means (Sequence[float]): Denormalizing means for delta coordinates + stds (Sequence[float]): Denormalizing standard deviation for delta + coordinates + + Returns: + Tensor: deltas with shape (N, 4), where columns represent dx, dy, + dw, dh. + """ + assert proposals.size() == gt.size() + + proposals = proposals.float() + gt = gt.float() + px = (proposals[..., 0] + proposals[..., 2]) * 0.5 + py = (proposals[..., 1] + proposals[..., 3]) * 0.5 + pw = proposals[..., 2] - proposals[..., 0] + ph = proposals[..., 3] - proposals[..., 1] + + gx = (gt[..., 0] + gt[..., 2]) * 0.5 + gy = (gt[..., 1] + gt[..., 3]) * 0.5 + gw = gt[..., 2] - gt[..., 0] + gh = gt[..., 3] - gt[..., 1] + + dx = (gx - px) / pw + dy = (gy - py) / ph + dw = torch.log(gw / pw) + dh = torch.log(gh / ph) + deltas = torch.stack([dx, dy, dw, dh], dim=-1) + + means = deltas.new_tensor(means).unsqueeze(0) + stds = deltas.new_tensor(stds).unsqueeze(0) + deltas = deltas.sub_(means).div_(stds) + + return deltas + + +def delta2bbox(rois, + deltas, + means=(0., 0., 0., 0.), + stds=(1., 1., 1., 1.), + max_shape=None, + wh_ratio_clip=16 / 1000, + clip_border=True): + """Apply deltas to shift/scale base boxes. + + Typically the rois are anchor or proposed bounding boxes and the deltas are + network outputs used to shift/scale those boxes. + This is the inverse function of :func:`bbox2delta`. + + Args: + rois (Tensor): Boxes to be transformed. Has shape (N, 4) + deltas (Tensor): Encoded offsets with respect to each roi. + Has shape (N, 4 * num_classes). Note N = num_anchors * W * H when + rois is a grid of anchors. Offset encoding follows [1]_. + means (Sequence[float]): Denormalizing means for delta coordinates + stds (Sequence[float]): Denormalizing standard deviation for delta + coordinates + max_shape (tuple[int, int]): Maximum bounds for boxes. specifies (H, W) + wh_ratio_clip (float): Maximum aspect ratio for boxes. + clip_border (bool, optional): Whether clip the objects outside the + border of the image. Defaults to True. + + Returns: + Tensor: Boxes with shape (N, 4), where columns represent + tl_x, tl_y, br_x, br_y. + + References: + .. [1] https://arxiv.org/abs/1311.2524 + + Example: + >>> rois = torch.Tensor([[ 0., 0., 1., 1.], + >>> [ 0., 0., 1., 1.], + >>> [ 0., 0., 1., 1.], + >>> [ 5., 5., 5., 5.]]) + >>> deltas = torch.Tensor([[ 0., 0., 0., 0.], + >>> [ 1., 1., 1., 1.], + >>> [ 0., 0., 2., -1.], + >>> [ 0.7, -1.9, -0.5, 0.3]]) + >>> delta2bbox(rois, deltas, max_shape=(32, 32)) + tensor([[0.0000, 0.0000, 1.0000, 1.0000], + [0.1409, 0.1409, 2.8591, 2.8591], + [0.0000, 0.3161, 4.1945, 0.6839], + [5.0000, 5.0000, 5.0000, 5.0000]]) + """ + means = deltas.new_tensor(means).view(1, -1).repeat(1, deltas.size(1) // 4) + stds = deltas.new_tensor(stds).view(1, -1).repeat(1, deltas.size(1) // 4) + denorm_deltas = deltas * stds + means + dx = denorm_deltas[:, 0::4] + dy = denorm_deltas[:, 1::4] + dw = denorm_deltas[:, 2::4] + dh = denorm_deltas[:, 3::4] + max_ratio = np.abs(np.log(wh_ratio_clip)) + dw = dw.clamp(min=-max_ratio, max=max_ratio) + dh = dh.clamp(min=-max_ratio, max=max_ratio) + # Compute center of each roi + px = ((rois[:, 0] + rois[:, 2]) * 0.5).unsqueeze(1).expand_as(dx) + py = ((rois[:, 1] + rois[:, 3]) * 0.5).unsqueeze(1).expand_as(dy) + # Compute width/height of each roi + pw = (rois[:, 2] - rois[:, 0]).unsqueeze(1).expand_as(dw) + ph = (rois[:, 3] - rois[:, 1]).unsqueeze(1).expand_as(dh) + # Use exp(network energy) to enlarge/shrink each roi + gw = pw * dw.exp() + gh = ph * dh.exp() + # Use network energy to shift the center of each roi + gx = px + pw * dx + gy = py + ph * dy + # Convert center-xy/width/height to top-left, bottom-right + x1 = gx - gw * 0.5 + y1 = gy - gh * 0.5 + x2 = gx + gw * 0.5 + y2 = gy + gh * 0.5 + if clip_border and max_shape is not None: + x1 = x1.clamp(min=0, max=max_shape[1]) + y1 = y1.clamp(min=0, max=max_shape[0]) + x2 = x2.clamp(min=0, max=max_shape[1]) + y2 = y2.clamp(min=0, max=max_shape[0]) + bboxes = torch.stack([x1, y1, x2, y2], dim=-1).view(deltas.size()) + return bboxes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/legacy_delta_xywh_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/legacy_delta_xywh_bbox_coder.py new file mode 100644 index 00000000..74e801a1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/legacy_delta_xywh_bbox_coder.py @@ -0,0 +1,212 @@ +import numpy as np +import torch + +from ..builder import BBOX_CODERS +from .base_bbox_coder import BaseBBoxCoder + + +@BBOX_CODERS.register_module() +class LegacyDeltaXYWHBBoxCoder(BaseBBoxCoder): + """Legacy Delta XYWH BBox coder used in MMDet V1.x. + + Following the practice in R-CNN [1]_, this coder encodes bbox (x1, y1, x2, + y2) into delta (dx, dy, dw, dh) and decodes delta (dx, dy, dw, dh) + back to original bbox (x1, y1, x2, y2). + + Note: + The main difference between :class`LegacyDeltaXYWHBBoxCoder` and + :class:`DeltaXYWHBBoxCoder` is whether ``+ 1`` is used during width and + height calculation. We suggest to only use this coder when testing with + MMDet V1.x models. + + References: + .. [1] https://arxiv.org/abs/1311.2524 + + Args: + target_means (Sequence[float]): denormalizing means of target for + delta coordinates + target_stds (Sequence[float]): denormalizing standard deviation of + target for delta coordinates + """ + + def __init__(self, + target_means=(0., 0., 0., 0.), + target_stds=(1., 1., 1., 1.)): + super(BaseBBoxCoder, self).__init__() + self.means = target_means + self.stds = target_stds + + def encode(self, bboxes, gt_bboxes): + """Get box regression transformation deltas that can be used to + transform the ``bboxes`` into the ``gt_bboxes``. + + Args: + bboxes (torch.Tensor): source boxes, e.g., object proposals. + gt_bboxes (torch.Tensor): target of the transformation, e.g., + ground-truth boxes. + + Returns: + torch.Tensor: Box transformation deltas + """ + assert bboxes.size(0) == gt_bboxes.size(0) + assert bboxes.size(-1) == gt_bboxes.size(-1) == 4 + encoded_bboxes = legacy_bbox2delta(bboxes, gt_bboxes, self.means, + self.stds) + return encoded_bboxes + + def decode(self, + bboxes, + pred_bboxes, + max_shape=None, + wh_ratio_clip=16 / 1000): + """Apply transformation `pred_bboxes` to `boxes`. + + Args: + boxes (torch.Tensor): Basic boxes. + pred_bboxes (torch.Tensor): Encoded boxes with shape + max_shape (tuple[int], optional): Maximum shape of boxes. + Defaults to None. + wh_ratio_clip (float, optional): The allowed ratio between + width and height. + + Returns: + torch.Tensor: Decoded boxes. + """ + assert pred_bboxes.size(0) == bboxes.size(0) + decoded_bboxes = legacy_delta2bbox(bboxes, pred_bboxes, self.means, + self.stds, max_shape, wh_ratio_clip) + + return decoded_bboxes + + +def legacy_bbox2delta(proposals, + gt, + means=(0., 0., 0., 0.), + stds=(1., 1., 1., 1.)): + """Compute deltas of proposals w.r.t. gt in the MMDet V1.x manner. + + We usually compute the deltas of x, y, w, h of proposals w.r.t ground + truth bboxes to get regression target. + This is the inverse function of `delta2bbox()` + + Args: + proposals (Tensor): Boxes to be transformed, shape (N, ..., 4) + gt (Tensor): Gt bboxes to be used as base, shape (N, ..., 4) + means (Sequence[float]): Denormalizing means for delta coordinates + stds (Sequence[float]): Denormalizing standard deviation for delta + coordinates + + Returns: + Tensor: deltas with shape (N, 4), where columns represent dx, dy, + dw, dh. + """ + assert proposals.size() == gt.size() + + proposals = proposals.float() + gt = gt.float() + px = (proposals[..., 0] + proposals[..., 2]) * 0.5 + py = (proposals[..., 1] + proposals[..., 3]) * 0.5 + pw = proposals[..., 2] - proposals[..., 0] + 1.0 + ph = proposals[..., 3] - proposals[..., 1] + 1.0 + + gx = (gt[..., 0] + gt[..., 2]) * 0.5 + gy = (gt[..., 1] + gt[..., 3]) * 0.5 + gw = gt[..., 2] - gt[..., 0] + 1.0 + gh = gt[..., 3] - gt[..., 1] + 1.0 + + dx = (gx - px) / pw + dy = (gy - py) / ph + dw = torch.log(gw / pw) + dh = torch.log(gh / ph) + deltas = torch.stack([dx, dy, dw, dh], dim=-1) + + means = deltas.new_tensor(means).unsqueeze(0) + stds = deltas.new_tensor(stds).unsqueeze(0) + deltas = deltas.sub_(means).div_(stds) + + return deltas + + +def legacy_delta2bbox(rois, + deltas, + means=(0., 0., 0., 0.), + stds=(1., 1., 1., 1.), + max_shape=None, + wh_ratio_clip=16 / 1000): + """Apply deltas to shift/scale base boxes in the MMDet V1.x manner. + + Typically the rois are anchor or proposed bounding boxes and the deltas are + network outputs used to shift/scale those boxes. + This is the inverse function of `bbox2delta()` + + Args: + rois (Tensor): Boxes to be transformed. Has shape (N, 4) + deltas (Tensor): Encoded offsets with respect to each roi. + Has shape (N, 4 * num_classes). Note N = num_anchors * W * H when + rois is a grid of anchors. Offset encoding follows [1]_. + means (Sequence[float]): Denormalizing means for delta coordinates + stds (Sequence[float]): Denormalizing standard deviation for delta + coordinates + max_shape (tuple[int, int]): Maximum bounds for boxes. specifies (H, W) + wh_ratio_clip (float): Maximum aspect ratio for boxes. + + Returns: + Tensor: Boxes with shape (N, 4), where columns represent + tl_x, tl_y, br_x, br_y. + + References: + .. [1] https://arxiv.org/abs/1311.2524 + + Example: + >>> rois = torch.Tensor([[ 0., 0., 1., 1.], + >>> [ 0., 0., 1., 1.], + >>> [ 0., 0., 1., 1.], + >>> [ 5., 5., 5., 5.]]) + >>> deltas = torch.Tensor([[ 0., 0., 0., 0.], + >>> [ 1., 1., 1., 1.], + >>> [ 0., 0., 2., -1.], + >>> [ 0.7, -1.9, -0.5, 0.3]]) + >>> legacy_delta2bbox(rois, deltas, max_shape=(32, 32)) + tensor([[0.0000, 0.0000, 1.5000, 1.5000], + [0.0000, 0.0000, 5.2183, 5.2183], + [0.0000, 0.1321, 7.8891, 0.8679], + [5.3967, 2.4251, 6.0033, 3.7749]]) + """ + means = deltas.new_tensor(means).repeat(1, deltas.size(1) // 4) + stds = deltas.new_tensor(stds).repeat(1, deltas.size(1) // 4) + denorm_deltas = deltas * stds + means + dx = denorm_deltas[:, 0::4] + dy = denorm_deltas[:, 1::4] + dw = denorm_deltas[:, 2::4] + dh = denorm_deltas[:, 3::4] + max_ratio = np.abs(np.log(wh_ratio_clip)) + dw = dw.clamp(min=-max_ratio, max=max_ratio) + dh = dh.clamp(min=-max_ratio, max=max_ratio) + # Compute center of each roi + px = ((rois[:, 0] + rois[:, 2]) * 0.5).unsqueeze(1).expand_as(dx) + py = ((rois[:, 1] + rois[:, 3]) * 0.5).unsqueeze(1).expand_as(dy) + # Compute width/height of each roi + pw = (rois[:, 2] - rois[:, 0] + 1.0).unsqueeze(1).expand_as(dw) + ph = (rois[:, 3] - rois[:, 1] + 1.0).unsqueeze(1).expand_as(dh) + # Use exp(network energy) to enlarge/shrink each roi + gw = pw * dw.exp() + gh = ph * dh.exp() + # Use network energy to shift the center of each roi + gx = px + pw * dx + gy = py + ph * dy + # Convert center-xy/width/height to top-left, bottom-right + + # The true legacy box coder should +- 0.5 here. + # However, current implementation improves the performance when testing + # the models trained in MMDetection 1.X (~0.5 bbox AP, 0.2 mask AP) + x1 = gx - gw * 0.5 + y1 = gy - gh * 0.5 + x2 = gx + gw * 0.5 + y2 = gy + gh * 0.5 + if max_shape is not None: + x1 = x1.clamp(min=0, max=max_shape[1] - 1) + y1 = y1.clamp(min=0, max=max_shape[0] - 1) + x2 = x2.clamp(min=0, max=max_shape[1] - 1) + y2 = y2.clamp(min=0, max=max_shape[0] - 1) + bboxes = torch.stack([x1, y1, x2, y2], dim=-1).view_as(deltas) + return bboxes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/pseudo_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/pseudo_bbox_coder.py new file mode 100644 index 00000000..1c8346f4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/pseudo_bbox_coder.py @@ -0,0 +1,18 @@ +from ..builder import BBOX_CODERS +from .base_bbox_coder import BaseBBoxCoder + + +@BBOX_CODERS.register_module() +class PseudoBBoxCoder(BaseBBoxCoder): + """Pseudo bounding box coder.""" + + def __init__(self, **kwargs): + super(BaseBBoxCoder, self).__init__(**kwargs) + + def encode(self, bboxes, gt_bboxes): + """torch.Tensor: return the given ``bboxes``""" + return gt_bboxes + + def decode(self, bboxes, pred_bboxes): + """torch.Tensor: return the given ``pred_bboxes``""" + return pred_bboxes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/tblr_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/tblr_bbox_coder.py new file mode 100644 index 00000000..436670b4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/tblr_bbox_coder.py @@ -0,0 +1,172 @@ +import torch + +from ..builder import BBOX_CODERS +from .base_bbox_coder import BaseBBoxCoder + + +@BBOX_CODERS.register_module() +class TBLRBBoxCoder(BaseBBoxCoder): + """TBLR BBox coder. + + Following the practice in `FSAF `_, + this coder encodes gt bboxes (x1, y1, x2, y2) into (top, bottom, left, + right) and decode it back to the original. + + Args: + normalizer (list | float): Normalization factor to be + divided with when coding the coordinates. If it is a list, it should + have length of 4 indicating normalization factor in tblr dims. + Otherwise it is a unified float factor for all dims. Default: 4.0 + clip_border (bool, optional): Whether clip the objects outside the + border of the image. Defaults to True. + """ + + def __init__(self, normalizer=4.0, clip_border=True): + super(BaseBBoxCoder, self).__init__() + self.normalizer = normalizer + self.clip_border = clip_border + + def encode(self, bboxes, gt_bboxes): + """Get box regression transformation deltas that can be used to + transform the ``bboxes`` into the ``gt_bboxes`` in the (top, left, + bottom, right) order. + + Args: + bboxes (torch.Tensor): source boxes, e.g., object proposals. + gt_bboxes (torch.Tensor): target of the transformation, e.g., + ground truth boxes. + + Returns: + torch.Tensor: Box transformation deltas + """ + assert bboxes.size(0) == gt_bboxes.size(0) + assert bboxes.size(-1) == gt_bboxes.size(-1) == 4 + encoded_bboxes = bboxes2tblr( + bboxes, gt_bboxes, normalizer=self.normalizer) + return encoded_bboxes + + def decode(self, bboxes, pred_bboxes, max_shape=None): + """Apply transformation `pred_bboxes` to `boxes`. + + Args: + boxes (torch.Tensor): Basic boxes. + pred_bboxes (torch.Tensor): Encoded boxes with shape + max_shape (tuple[int], optional): Maximum shape of boxes. + Defaults to None. + + Returns: + torch.Tensor: Decoded boxes. + """ + assert pred_bboxes.size(0) == bboxes.size(0) + decoded_bboxes = tblr2bboxes( + bboxes, + pred_bboxes, + normalizer=self.normalizer, + max_shape=max_shape, + clip_border=self.clip_border) + + return decoded_bboxes + + +def bboxes2tblr(priors, gts, normalizer=4.0, normalize_by_wh=True): + """Encode ground truth boxes to tblr coordinate. + + It first convert the gt coordinate to tblr format, + (top, bottom, left, right), relative to prior box centers. + The tblr coordinate may be normalized by the side length of prior bboxes + if `normalize_by_wh` is specified as True, and it is then normalized by + the `normalizer` factor. + + Args: + priors (Tensor): Prior boxes in point form + Shape: (num_proposals,4). + gts (Tensor): Coords of ground truth for each prior in point-form + Shape: (num_proposals, 4). + normalizer (Sequence[float] | float): normalization parameter of + encoded boxes. If it is a list, it has to have length = 4. + Default: 4.0 + normalize_by_wh (bool): Whether to normalize tblr coordinate by the + side length (wh) of prior bboxes. + + Return: + encoded boxes (Tensor), Shape: (num_proposals, 4) + """ + + # dist b/t match center and prior's center + if not isinstance(normalizer, float): + normalizer = torch.tensor(normalizer, device=priors.device) + assert len(normalizer) == 4, 'Normalizer must have length = 4' + assert priors.size(0) == gts.size(0) + prior_centers = (priors[:, 0:2] + priors[:, 2:4]) / 2 + xmin, ymin, xmax, ymax = gts.split(1, dim=1) + top = prior_centers[:, 1].unsqueeze(1) - ymin + bottom = ymax - prior_centers[:, 1].unsqueeze(1) + left = prior_centers[:, 0].unsqueeze(1) - xmin + right = xmax - prior_centers[:, 0].unsqueeze(1) + loc = torch.cat((top, bottom, left, right), dim=1) + if normalize_by_wh: + # Normalize tblr by anchor width and height + wh = priors[:, 2:4] - priors[:, 0:2] + w, h = torch.split(wh, 1, dim=1) + loc[:, :2] /= h # tb is normalized by h + loc[:, 2:] /= w # lr is normalized by w + # Normalize tblr by the given normalization factor + return loc / normalizer + + +def tblr2bboxes(priors, + tblr, + normalizer=4.0, + normalize_by_wh=True, + max_shape=None, + clip_border=True): + """Decode tblr outputs to prediction boxes. + + The process includes 3 steps: 1) De-normalize tblr coordinates by + multiplying it with `normalizer`; 2) De-normalize tblr coordinates by the + prior bbox width and height if `normalize_by_wh` is `True`; 3) Convert + tblr (top, bottom, left, right) pair relative to the center of priors back + to (xmin, ymin, xmax, ymax) coordinate. + + Args: + priors (Tensor): Prior boxes in point form (x0, y0, x1, y1) + Shape: (n,4). + tblr (Tensor): Coords of network output in tblr form + Shape: (n, 4). + normalizer (Sequence[float] | float): Normalization parameter of + encoded boxes. By list, it represents the normalization factors at + tblr dims. By float, it is the unified normalization factor at all + dims. Default: 4.0 + normalize_by_wh (bool): Whether the tblr coordinates have been + normalized by the side length (wh) of prior bboxes. + max_shape (tuple, optional): Shape of the image. Decoded bboxes + exceeding which will be clamped. + clip_border (bool, optional): Whether clip the objects outside the + border of the image. Defaults to True. + + Return: + encoded boxes (Tensor), Shape: (n, 4) + """ + if not isinstance(normalizer, float): + normalizer = torch.tensor(normalizer, device=priors.device) + assert len(normalizer) == 4, 'Normalizer must have length = 4' + assert priors.size(0) == tblr.size(0) + loc_decode = tblr * normalizer + prior_centers = (priors[:, 0:2] + priors[:, 2:4]) / 2 + if normalize_by_wh: + wh = priors[:, 2:4] - priors[:, 0:2] + w, h = torch.split(wh, 1, dim=1) + loc_decode[:, :2] *= h # tb + loc_decode[:, 2:] *= w # lr + top, bottom, left, right = loc_decode.split((1, 1, 1, 1), dim=1) + xmin = prior_centers[:, 0].unsqueeze(1) - left + xmax = prior_centers[:, 0].unsqueeze(1) + right + ymin = prior_centers[:, 1].unsqueeze(1) - top + ymax = prior_centers[:, 1].unsqueeze(1) + bottom + boxes = torch.cat((xmin, ymin, xmax, ymax), dim=1) + if clip_border and max_shape is not None: + boxes[:, 0].clamp_(min=0, max=max_shape[1]) + boxes[:, 1].clamp_(min=0, max=max_shape[0]) + boxes[:, 2].clamp_(min=0, max=max_shape[1]) + boxes[:, 3].clamp_(min=0, max=max_shape[0]) + return boxes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/yolo_bbox_coder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/yolo_bbox_coder.py new file mode 100644 index 00000000..2a1dc34f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/coder/yolo_bbox_coder.py @@ -0,0 +1,86 @@ +import torch + +from ..builder import BBOX_CODERS +from .base_bbox_coder import BaseBBoxCoder + + +@BBOX_CODERS.register_module() +class YOLOBBoxCoder(BaseBBoxCoder): + """YOLO BBox coder. + + Following `YOLO `_, this coder divide + image into grids, and encode bbox (x1, y1, x2, y2) into (cx, cy, dw, dh). + cx, cy in [0., 1.], denotes relative center position w.r.t the center of + bboxes. dw, dh are the same as :obj:`DeltaXYWHBBoxCoder`. + + Args: + eps (float): Min value of cx, cy when encoding. + """ + + def __init__(self, eps=1e-6): + super(BaseBBoxCoder, self).__init__() + self.eps = eps + + def encode(self, bboxes, gt_bboxes, stride): + """Get box regression transformation deltas that can be used to + transform the ``bboxes`` into the ``gt_bboxes``. + + Args: + bboxes (torch.Tensor): Source boxes, e.g., anchors. + gt_bboxes (torch.Tensor): Target of the transformation, e.g., + ground-truth boxes. + stride (torch.Tensor | int): Stride of bboxes. + + Returns: + torch.Tensor: Box transformation deltas + """ + + assert bboxes.size(0) == gt_bboxes.size(0) + assert bboxes.size(-1) == gt_bboxes.size(-1) == 4 + x_center_gt = (gt_bboxes[..., 0] + gt_bboxes[..., 2]) * 0.5 + y_center_gt = (gt_bboxes[..., 1] + gt_bboxes[..., 3]) * 0.5 + w_gt = gt_bboxes[..., 2] - gt_bboxes[..., 0] + h_gt = gt_bboxes[..., 3] - gt_bboxes[..., 1] + x_center = (bboxes[..., 0] + bboxes[..., 2]) * 0.5 + y_center = (bboxes[..., 1] + bboxes[..., 3]) * 0.5 + w = bboxes[..., 2] - bboxes[..., 0] + h = bboxes[..., 3] - bboxes[..., 1] + w_target = torch.log((w_gt / w).clamp(min=self.eps)) + h_target = torch.log((h_gt / h).clamp(min=self.eps)) + x_center_target = ((x_center_gt - x_center) / stride + 0.5).clamp( + self.eps, 1 - self.eps) + y_center_target = ((y_center_gt - y_center) / stride + 0.5).clamp( + self.eps, 1 - self.eps) + encoded_bboxes = torch.stack( + [x_center_target, y_center_target, w_target, h_target], dim=-1) + return encoded_bboxes + + def decode(self, bboxes, pred_bboxes, stride): + """Apply transformation `pred_bboxes` to `boxes`. + + Args: + boxes (torch.Tensor): Basic boxes, e.g. anchors. + pred_bboxes (torch.Tensor): Encoded boxes with shape + stride (torch.Tensor | int): Strides of bboxes. + + Returns: + torch.Tensor: Decoded boxes. + """ + assert pred_bboxes.size(0) == bboxes.size(0) + assert pred_bboxes.size(-1) == bboxes.size(-1) == 4 + x_center = (bboxes[..., 0] + bboxes[..., 2]) * 0.5 + y_center = (bboxes[..., 1] + bboxes[..., 3]) * 0.5 + w = bboxes[..., 2] - bboxes[..., 0] + h = bboxes[..., 3] - bboxes[..., 1] + # Get outputs x, y + x_center_pred = (pred_bboxes[..., 0] - 0.5) * stride + x_center + y_center_pred = (pred_bboxes[..., 1] - 0.5) * stride + y_center + w_pred = torch.exp(pred_bboxes[..., 2]) * w + h_pred = torch.exp(pred_bboxes[..., 3]) * h + + decoded_bboxes = torch.stack( + (x_center_pred - w_pred / 2, y_center_pred - h_pred / 2, + x_center_pred + w_pred / 2, y_center_pred + h_pred / 2), + dim=-1) + + return decoded_bboxes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/demodata.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/demodata.py new file mode 100644 index 00000000..94308585 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/demodata.py @@ -0,0 +1,63 @@ +import numpy as np +import torch + + +def ensure_rng(rng=None): + """Simple version of the ``kwarray.ensure_rng`` + + Args: + rng (int | numpy.random.RandomState | None): + if None, then defaults to the global rng. Otherwise this can be an + integer or a RandomState class + Returns: + (numpy.random.RandomState) : rng - + a numpy random number generator + + References: + https://gitlab.kitware.com/computer-vision/kwarray/blob/master/kwarray/util_random.py#L270 + """ + + if rng is None: + rng = np.random.mtrand._rand + elif isinstance(rng, int): + rng = np.random.RandomState(rng) + else: + rng = rng + return rng + + +def random_boxes(num=1, scale=1, rng=None): + """Simple version of ``kwimage.Boxes.random`` + + Returns: + Tensor: shape (n, 4) in x1, y1, x2, y2 format. + + References: + https://gitlab.kitware.com/computer-vision/kwimage/blob/master/kwimage/structs/boxes.py#L1390 + + Example: + >>> num = 3 + >>> scale = 512 + >>> rng = 0 + >>> boxes = random_boxes(num, scale, rng) + >>> print(boxes) + tensor([[280.9925, 278.9802, 308.6148, 366.1769], + [216.9113, 330.6978, 224.0446, 456.5878], + [405.3632, 196.3221, 493.3953, 270.7942]]) + """ + rng = ensure_rng(rng) + + tlbr = rng.rand(num, 4).astype(np.float32) + + tl_x = np.minimum(tlbr[:, 0], tlbr[:, 2]) + tl_y = np.minimum(tlbr[:, 1], tlbr[:, 3]) + br_x = np.maximum(tlbr[:, 0], tlbr[:, 2]) + br_y = np.maximum(tlbr[:, 1], tlbr[:, 3]) + + tlbr[:, 0] = tl_x * scale + tlbr[:, 1] = tl_y * scale + tlbr[:, 2] = br_x * scale + tlbr[:, 3] = br_y * scale + + boxes = torch.from_numpy(tlbr) + return boxes diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/__init__.py new file mode 100644 index 00000000..e71369a5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/__init__.py @@ -0,0 +1,4 @@ +from .builder import build_iou_calculator +from .iou2d_calculator import BboxOverlaps2D, bbox_overlaps + +__all__ = ['build_iou_calculator', 'BboxOverlaps2D', 'bbox_overlaps'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/builder.py new file mode 100644 index 00000000..09094d7e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/builder.py @@ -0,0 +1,8 @@ +from mmcv.utils import Registry, build_from_cfg + +IOU_CALCULATORS = Registry('IoU calculator') + + +def build_iou_calculator(cfg, default_args=None): + """Builder of IoU calculator.""" + return build_from_cfg(cfg, IOU_CALCULATORS, default_args) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/iou2d_calculator.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/iou2d_calculator.py new file mode 100644 index 00000000..97adcca5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/iou_calculators/iou2d_calculator.py @@ -0,0 +1,159 @@ +import torch + +from .builder import IOU_CALCULATORS + + +@IOU_CALCULATORS.register_module() +class BboxOverlaps2D(object): + """2D Overlaps (e.g. IoUs, GIoUs) Calculator.""" + + def __call__(self, bboxes1, bboxes2, mode='iou', is_aligned=False): + """Calculate IoU between 2D bboxes. + + Args: + bboxes1 (Tensor): bboxes have shape (m, 4) in + format, or shape (m, 5) in format. + bboxes2 (Tensor): bboxes have shape (m, 4) in + format, shape (m, 5) in format, or be + empty. If ``is_aligned `` is ``True``, then m and n must be + equal. + mode (str): "iou" (intersection over union), "iof" (intersection + over foreground), or "giou" (generalized intersection over + union). + is_aligned (bool, optional): If True, then m and n must be equal. + Default False. + + Returns: + Tensor: shape (m, n) if ``is_aligned `` is False else shape (m,) + """ + assert bboxes1.size(-1) in [0, 4, 5] + assert bboxes2.size(-1) in [0, 4, 5] + if bboxes2.size(-1) == 5: + bboxes2 = bboxes2[..., :4] + if bboxes1.size(-1) == 5: + bboxes1 = bboxes1[..., :4] + return bbox_overlaps(bboxes1, bboxes2, mode, is_aligned) + + def __repr__(self): + """str: a string describing the module""" + repr_str = self.__class__.__name__ + '()' + return repr_str + + +def bbox_overlaps(bboxes1, bboxes2, mode='iou', is_aligned=False, eps=1e-6): + """Calculate overlap between two set of bboxes. + + If ``is_aligned `` is ``False``, then calculate the overlaps between each + bbox of bboxes1 and bboxes2, otherwise the overlaps between each aligned + pair of bboxes1 and bboxes2. + + Args: + bboxes1 (Tensor): shape (B, m, 4) in format or empty. + bboxes2 (Tensor): shape (B, n, 4) in format or empty. + B indicates the batch dim, in shape (B1, B2, ..., Bn). + If ``is_aligned `` is ``True``, then m and n must be equal. + mode (str): "iou" (intersection over union), "iof" (intersection over + foreground) or "giou" (generalized intersection over union). + Default "iou". + is_aligned (bool, optional): If True, then m and n must be equal. + Default False. + eps (float, optional): A value added to the denominator for numerical + stability. Default 1e-6. + + Returns: + Tensor: shape (m, n) if ``is_aligned `` is False else shape (m,) + + Example: + >>> bboxes1 = torch.FloatTensor([ + >>> [0, 0, 10, 10], + >>> [10, 10, 20, 20], + >>> [32, 32, 38, 42], + >>> ]) + >>> bboxes2 = torch.FloatTensor([ + >>> [0, 0, 10, 20], + >>> [0, 10, 10, 19], + >>> [10, 10, 20, 20], + >>> ]) + >>> overlaps = bbox_overlaps(bboxes1, bboxes2) + >>> assert overlaps.shape == (3, 3) + >>> overlaps = bbox_overlaps(bboxes1, bboxes2, is_aligned=True) + >>> assert overlaps.shape == (3, ) + + Example: + >>> empty = torch.empty(0, 4) + >>> nonempty = torch.FloatTensor([[0, 0, 10, 9]]) + >>> assert tuple(bbox_overlaps(empty, nonempty).shape) == (0, 1) + >>> assert tuple(bbox_overlaps(nonempty, empty).shape) == (1, 0) + >>> assert tuple(bbox_overlaps(empty, empty).shape) == (0, 0) + """ + + assert mode in ['iou', 'iof', 'giou'], f'Unsupported mode {mode}' + # Either the boxes are empty or the length of boxes's last dimenstion is 4 + assert (bboxes1.size(-1) == 4 or bboxes1.size(0) == 0) + assert (bboxes2.size(-1) == 4 or bboxes2.size(0) == 0) + + # Batch dim must be the same + # Batch dim: (B1, B2, ... Bn) + assert bboxes1.shape[:-2] == bboxes2.shape[:-2] + batch_shape = bboxes1.shape[:-2] + + rows = bboxes1.size(-2) + cols = bboxes2.size(-2) + if is_aligned: + assert rows == cols + + if rows * cols == 0: + if is_aligned: + return bboxes1.new(batch_shape + (rows, )) + else: + return bboxes1.new(batch_shape + (rows, cols)) + + area1 = (bboxes1[..., 2] - bboxes1[..., 0]) * ( + bboxes1[..., 3] - bboxes1[..., 1]) + area2 = (bboxes2[..., 2] - bboxes2[..., 0]) * ( + bboxes2[..., 3] - bboxes2[..., 1]) + + if is_aligned: + lt = torch.max(bboxes1[..., :2], bboxes2[..., :2]) # [B, rows, 2] + rb = torch.min(bboxes1[..., 2:], bboxes2[..., 2:]) # [B, rows, 2] + + wh = (rb - lt).clamp(min=0) # [B, rows, 2] + overlap = wh[..., 0] * wh[..., 1] + + if mode in ['iou', 'giou']: + union = area1 + area2 - overlap + else: + union = area1 + if mode == 'giou': + enclosed_lt = torch.min(bboxes1[..., :2], bboxes2[..., :2]) + enclosed_rb = torch.max(bboxes1[..., 2:], bboxes2[..., 2:]) + else: + lt = torch.max(bboxes1[..., :, None, :2], + bboxes2[..., None, :, :2]) # [B, rows, cols, 2] + rb = torch.min(bboxes1[..., :, None, 2:], + bboxes2[..., None, :, 2:]) # [B, rows, cols, 2] + + wh = (rb - lt).clamp(min=0) # [B, rows, cols, 2] + overlap = wh[..., 0] * wh[..., 1] + + if mode in ['iou', 'giou']: + union = area1[..., None] + area2[..., None, :] - overlap + else: + union = area1[..., None] + if mode == 'giou': + enclosed_lt = torch.min(bboxes1[..., :, None, :2], + bboxes2[..., None, :, :2]) + enclosed_rb = torch.max(bboxes1[..., :, None, 2:], + bboxes2[..., None, :, 2:]) + + eps = union.new_tensor([eps]) + union = torch.max(union, eps) + ious = overlap / union + if mode in ['iou', 'iof']: + return ious + # calculate gious + enclose_wh = (enclosed_rb - enclosed_lt).clamp(min=0) + enclose_area = enclose_wh[..., 0] * enclose_wh[..., 1] + enclose_area = torch.max(enclose_area, eps) + gious = ious - (enclose_area - union) / enclose_area + return gious diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/__init__.py new file mode 100644 index 00000000..add5e0d3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/__init__.py @@ -0,0 +1,7 @@ +from .builder import build_match_cost +from .match_cost import BBoxL1Cost, ClassificationCost, FocalLossCost, IoUCost + +__all__ = [ + 'build_match_cost', 'ClassificationCost', 'BBoxL1Cost', 'IoUCost', + 'FocalLossCost' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/builder.py new file mode 100644 index 00000000..6894017d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/builder.py @@ -0,0 +1,8 @@ +from mmcv.utils import Registry, build_from_cfg + +MATCH_COST = Registry('Match Cost') + + +def build_match_cost(cfg, default_args=None): + """Builder of IoU calculator.""" + return build_from_cfg(cfg, MATCH_COST, default_args) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/match_cost.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/match_cost.py new file mode 100644 index 00000000..7c4d20cc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/match_costs/match_cost.py @@ -0,0 +1,184 @@ +import torch + +from mmdet.core.bbox.iou_calculators import bbox_overlaps +from mmdet.core.bbox.transforms import bbox_cxcywh_to_xyxy, bbox_xyxy_to_cxcywh +from .builder import MATCH_COST + + +@MATCH_COST.register_module() +class BBoxL1Cost(object): + """BBoxL1Cost. + + Args: + weight (int | float, optional): loss_weight + box_format (str, optional): 'xyxy' for DETR, 'xywh' for Sparse_RCNN + + Examples: + >>> from mmdet.core.bbox.match_costs.match_cost import BBoxL1Cost + >>> import torch + >>> self = BBoxL1Cost() + >>> bbox_pred = torch.rand(1, 4) + >>> gt_bboxes= torch.FloatTensor([[0, 0, 2, 4], [1, 2, 3, 4]]) + >>> factor = torch.tensor([10, 8, 10, 8]) + >>> self(bbox_pred, gt_bboxes, factor) + tensor([[1.6172, 1.6422]]) + """ + + def __init__(self, weight=1., box_format='xyxy'): + self.weight = weight + assert box_format in ['xyxy', 'xywh'] + self.box_format = box_format + + def __call__(self, bbox_pred, gt_bboxes): + """ + Args: + bbox_pred (Tensor): Predicted boxes with normalized coordinates + (cx, cy, w, h), which are all in range [0, 1]. Shape + [num_query, 4]. + gt_bboxes (Tensor): Ground truth boxes with normalized + coordinates (x1, y1, x2, y2). Shape [num_gt, 4]. + + Returns: + torch.Tensor: bbox_cost value with weight + """ + if self.box_format == 'xywh': + gt_bboxes = bbox_xyxy_to_cxcywh(gt_bboxes) + elif self.box_format == 'xyxy': + bbox_pred = bbox_cxcywh_to_xyxy(bbox_pred) + bbox_cost = torch.cdist(bbox_pred, gt_bboxes, p=1) + return bbox_cost * self.weight + + +@MATCH_COST.register_module() +class FocalLossCost(object): + """FocalLossCost. + + Args: + weight (int | float, optional): loss_weight + alpha (int | float, optional): focal_loss alpha + gamma (int | float, optional): focal_loss gamma + eps (float, optional): default 1e-12 + + Examples: + >>> from mmdet.core.bbox.match_costs.match_cost import FocalLossCost + >>> import torch + >>> self = FocalLossCost() + >>> cls_pred = torch.rand(4, 3) + >>> gt_labels = torch.tensor([0, 1, 2]) + >>> factor = torch.tensor([10, 8, 10, 8]) + >>> self(cls_pred, gt_labels) + tensor([[-0.3236, -0.3364, -0.2699], + [-0.3439, -0.3209, -0.4807], + [-0.4099, -0.3795, -0.2929], + [-0.1950, -0.1207, -0.2626]]) + """ + + def __init__(self, weight=1., alpha=0.25, gamma=2, eps=1e-12): + self.weight = weight + self.alpha = alpha + self.gamma = gamma + self.eps = eps + + def __call__(self, cls_pred, gt_labels): + """ + Args: + cls_pred (Tensor): Predicted classification logits, shape + [num_query, num_class]. + gt_labels (Tensor): Label of `gt_bboxes`, shape (num_gt,). + + Returns: + torch.Tensor: cls_cost value with weight + """ + cls_pred = cls_pred.sigmoid() + neg_cost = -(1 - cls_pred + self.eps).log() * ( + 1 - self.alpha) * cls_pred.pow(self.gamma) + pos_cost = -(cls_pred + self.eps).log() * self.alpha * ( + 1 - cls_pred).pow(self.gamma) + cls_cost = pos_cost[:, gt_labels] - neg_cost[:, gt_labels] + return cls_cost * self.weight + + +@MATCH_COST.register_module() +class ClassificationCost(object): + """ClsSoftmaxCost. + + Args: + weight (int | float, optional): loss_weight + + Examples: + >>> from mmdet.core.bbox.match_costs.match_cost import \ + ... ClassificationCost + >>> import torch + >>> self = ClassificationCost() + >>> cls_pred = torch.rand(4, 3) + >>> gt_labels = torch.tensor([0, 1, 2]) + >>> factor = torch.tensor([10, 8, 10, 8]) + >>> self(cls_pred, gt_labels) + tensor([[-0.3430, -0.3525, -0.3045], + [-0.3077, -0.2931, -0.3992], + [-0.3664, -0.3455, -0.2881], + [-0.3343, -0.2701, -0.3956]]) + """ + + def __init__(self, weight=1.): + self.weight = weight + + def __call__(self, cls_pred, gt_labels): + """ + Args: + cls_pred (Tensor): Predicted classification logits, shape + [num_query, num_class]. + gt_labels (Tensor): Label of `gt_bboxes`, shape (num_gt,). + + Returns: + torch.Tensor: cls_cost value with weight + """ + # Following the official DETR repo, contrary to the loss that + # NLL is used, we approximate it in 1 - cls_score[gt_label]. + # The 1 is a constant that doesn't change the matching, + # so it can be ommitted. + cls_score = cls_pred.softmax(-1) + cls_cost = -cls_score[:, gt_labels] + return cls_cost * self.weight + + +@MATCH_COST.register_module() +class IoUCost(object): + """IoUCost. + + Args: + iou_mode (str, optional): iou mode such as 'iou' | 'giou' + weight (int | float, optional): loss weight + + Examples: + >>> from mmdet.core.bbox.match_costs.match_cost import IoUCost + >>> import torch + >>> self = IoUCost() + >>> bboxes = torch.FloatTensor([[1,1, 2, 2], [2, 2, 3, 4]]) + >>> gt_bboxes = torch.FloatTensor([[0, 0, 2, 4], [1, 2, 3, 4]]) + >>> self(bboxes, gt_bboxes) + tensor([[-0.1250, 0.1667], + [ 0.1667, -0.5000]]) + """ + + def __init__(self, iou_mode='giou', weight=1.): + self.weight = weight + self.iou_mode = iou_mode + + def __call__(self, bboxes, gt_bboxes): + """ + Args: + bboxes (Tensor): Predicted boxes with unnormalized coordinates + (x1, y1, x2, y2). Shape [num_query, 4]. + gt_bboxes (Tensor): Ground truth boxes with unnormalized + coordinates (x1, y1, x2, y2). Shape [num_gt, 4]. + + Returns: + torch.Tensor: iou_cost value with weight + """ + # overlaps: [num_bboxes, num_gt] + overlaps = bbox_overlaps( + bboxes, gt_bboxes, mode=self.iou_mode, is_aligned=False) + # The 1 is a constant that doesn't change the matching, so ommitted. + iou_cost = -overlaps + return iou_cost * self.weight diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/__init__.py new file mode 100644 index 00000000..0b06303f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/__init__.py @@ -0,0 +1,15 @@ +from .base_sampler import BaseSampler +from .combined_sampler import CombinedSampler +from .instance_balanced_pos_sampler import InstanceBalancedPosSampler +from .iou_balanced_neg_sampler import IoUBalancedNegSampler +from .ohem_sampler import OHEMSampler +from .pseudo_sampler import PseudoSampler +from .random_sampler import RandomSampler +from .sampling_result import SamplingResult +from .score_hlr_sampler import ScoreHLRSampler + +__all__ = [ + 'BaseSampler', 'PseudoSampler', 'RandomSampler', + 'InstanceBalancedPosSampler', 'IoUBalancedNegSampler', 'CombinedSampler', + 'OHEMSampler', 'SamplingResult', 'ScoreHLRSampler' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/base_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/base_sampler.py new file mode 100644 index 00000000..9ea35def --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/base_sampler.py @@ -0,0 +1,101 @@ +from abc import ABCMeta, abstractmethod + +import torch + +from .sampling_result import SamplingResult + + +class BaseSampler(metaclass=ABCMeta): + """Base class of samplers.""" + + def __init__(self, + num, + pos_fraction, + neg_pos_ub=-1, + add_gt_as_proposals=True, + **kwargs): + self.num = num + self.pos_fraction = pos_fraction + self.neg_pos_ub = neg_pos_ub + self.add_gt_as_proposals = add_gt_as_proposals + self.pos_sampler = self + self.neg_sampler = self + + @abstractmethod + def _sample_pos(self, assign_result, num_expected, **kwargs): + """Sample positive samples.""" + pass + + @abstractmethod + def _sample_neg(self, assign_result, num_expected, **kwargs): + """Sample negative samples.""" + pass + + def sample(self, + assign_result, + bboxes, + gt_bboxes, + gt_labels=None, + **kwargs): + """Sample positive and negative bboxes. + + This is a simple implementation of bbox sampling given candidates, + assigning results and ground truth bboxes. + + Args: + assign_result (:obj:`AssignResult`): Bbox assigning results. + bboxes (Tensor): Boxes to be sampled from. + gt_bboxes (Tensor): Ground truth bboxes. + gt_labels (Tensor, optional): Class labels of ground truth bboxes. + + Returns: + :obj:`SamplingResult`: Sampling result. + + Example: + >>> from mmdet.core.bbox import RandomSampler + >>> from mmdet.core.bbox import AssignResult + >>> from mmdet.core.bbox.demodata import ensure_rng, random_boxes + >>> rng = ensure_rng(None) + >>> assign_result = AssignResult.random(rng=rng) + >>> bboxes = random_boxes(assign_result.num_preds, rng=rng) + >>> gt_bboxes = random_boxes(assign_result.num_gts, rng=rng) + >>> gt_labels = None + >>> self = RandomSampler(num=32, pos_fraction=0.5, neg_pos_ub=-1, + >>> add_gt_as_proposals=False) + >>> self = self.sample(assign_result, bboxes, gt_bboxes, gt_labels) + """ + if len(bboxes.shape) < 2: + bboxes = bboxes[None, :] + + bboxes = bboxes[:, :4] + + gt_flags = bboxes.new_zeros((bboxes.shape[0], ), dtype=torch.uint8) + if self.add_gt_as_proposals and len(gt_bboxes) > 0: + if gt_labels is None: + raise ValueError( + 'gt_labels must be given when add_gt_as_proposals is True') + bboxes = torch.cat([gt_bboxes, bboxes], dim=0) + assign_result.add_gt_(gt_labels) + gt_ones = bboxes.new_ones(gt_bboxes.shape[0], dtype=torch.uint8) + gt_flags = torch.cat([gt_ones, gt_flags]) + + num_expected_pos = int(self.num * self.pos_fraction) + pos_inds = self.pos_sampler._sample_pos( + assign_result, num_expected_pos, bboxes=bboxes, **kwargs) + # We found that sampled indices have duplicated items occasionally. + # (may be a bug of PyTorch) + pos_inds = pos_inds.unique() + num_sampled_pos = pos_inds.numel() + num_expected_neg = self.num - num_sampled_pos + if self.neg_pos_ub >= 0: + _pos = max(1, num_sampled_pos) + neg_upper_bound = int(self.neg_pos_ub * _pos) + if num_expected_neg > neg_upper_bound: + num_expected_neg = neg_upper_bound + neg_inds = self.neg_sampler._sample_neg( + assign_result, num_expected_neg, bboxes=bboxes, **kwargs) + neg_inds = neg_inds.unique() + + sampling_result = SamplingResult(pos_inds, neg_inds, bboxes, gt_bboxes, + assign_result, gt_flags) + return sampling_result diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/combined_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/combined_sampler.py new file mode 100644 index 00000000..564729f0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/combined_sampler.py @@ -0,0 +1,20 @@ +from ..builder import BBOX_SAMPLERS, build_sampler +from .base_sampler import BaseSampler + + +@BBOX_SAMPLERS.register_module() +class CombinedSampler(BaseSampler): + """A sampler that combines positive sampler and negative sampler.""" + + def __init__(self, pos_sampler, neg_sampler, **kwargs): + super(CombinedSampler, self).__init__(**kwargs) + self.pos_sampler = build_sampler(pos_sampler, **kwargs) + self.neg_sampler = build_sampler(neg_sampler, **kwargs) + + def _sample_pos(self, **kwargs): + """Sample positive samples.""" + raise NotImplementedError + + def _sample_neg(self, **kwargs): + """Sample negative samples.""" + raise NotImplementedError diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/instance_balanced_pos_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/instance_balanced_pos_sampler.py new file mode 100644 index 00000000..c7352984 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/instance_balanced_pos_sampler.py @@ -0,0 +1,55 @@ +import numpy as np +import torch + +from ..builder import BBOX_SAMPLERS +from .random_sampler import RandomSampler + + +@BBOX_SAMPLERS.register_module() +class InstanceBalancedPosSampler(RandomSampler): + """Instance balanced sampler that samples equal number of positive samples + for each instance.""" + + def _sample_pos(self, assign_result, num_expected, **kwargs): + """Sample positive boxes. + + Args: + assign_result (:obj:`AssignResult`): The assigned results of boxes. + num_expected (int): The number of expected positive samples + + Returns: + Tensor or ndarray: sampled indices. + """ + pos_inds = torch.nonzero(assign_result.gt_inds > 0, as_tuple=False) + if pos_inds.numel() != 0: + pos_inds = pos_inds.squeeze(1) + if pos_inds.numel() <= num_expected: + return pos_inds + else: + unique_gt_inds = assign_result.gt_inds[pos_inds].unique() + num_gts = len(unique_gt_inds) + num_per_gt = int(round(num_expected / float(num_gts)) + 1) + sampled_inds = [] + for i in unique_gt_inds: + inds = torch.nonzero( + assign_result.gt_inds == i.item(), as_tuple=False) + if inds.numel() != 0: + inds = inds.squeeze(1) + else: + continue + if len(inds) > num_per_gt: + inds = self.random_choice(inds, num_per_gt) + sampled_inds.append(inds) + sampled_inds = torch.cat(sampled_inds) + if len(sampled_inds) < num_expected: + num_extra = num_expected - len(sampled_inds) + extra_inds = np.array( + list(set(pos_inds.cpu()) - set(sampled_inds.cpu()))) + if len(extra_inds) > num_extra: + extra_inds = self.random_choice(extra_inds, num_extra) + extra_inds = torch.from_numpy(extra_inds).to( + assign_result.gt_inds.device).long() + sampled_inds = torch.cat([sampled_inds, extra_inds]) + elif len(sampled_inds) > num_expected: + sampled_inds = self.random_choice(sampled_inds, num_expected) + return sampled_inds diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/iou_balanced_neg_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/iou_balanced_neg_sampler.py new file mode 100644 index 00000000..f275e430 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/iou_balanced_neg_sampler.py @@ -0,0 +1,157 @@ +import numpy as np +import torch + +from ..builder import BBOX_SAMPLERS +from .random_sampler import RandomSampler + + +@BBOX_SAMPLERS.register_module() +class IoUBalancedNegSampler(RandomSampler): + """IoU Balanced Sampling. + + arXiv: https://arxiv.org/pdf/1904.02701.pdf (CVPR 2019) + + Sampling proposals according to their IoU. `floor_fraction` of needed RoIs + are sampled from proposals whose IoU are lower than `floor_thr` randomly. + The others are sampled from proposals whose IoU are higher than + `floor_thr`. These proposals are sampled from some bins evenly, which are + split by `num_bins` via IoU evenly. + + Args: + num (int): number of proposals. + pos_fraction (float): fraction of positive proposals. + floor_thr (float): threshold (minimum) IoU for IoU balanced sampling, + set to -1 if all using IoU balanced sampling. + floor_fraction (float): sampling fraction of proposals under floor_thr. + num_bins (int): number of bins in IoU balanced sampling. + """ + + def __init__(self, + num, + pos_fraction, + floor_thr=-1, + floor_fraction=0, + num_bins=3, + **kwargs): + super(IoUBalancedNegSampler, self).__init__(num, pos_fraction, + **kwargs) + assert floor_thr >= 0 or floor_thr == -1 + assert 0 <= floor_fraction <= 1 + assert num_bins >= 1 + + self.floor_thr = floor_thr + self.floor_fraction = floor_fraction + self.num_bins = num_bins + + def sample_via_interval(self, max_overlaps, full_set, num_expected): + """Sample according to the iou interval. + + Args: + max_overlaps (torch.Tensor): IoU between bounding boxes and ground + truth boxes. + full_set (set(int)): A full set of indices of boxes。 + num_expected (int): Number of expected samples。 + + Returns: + np.ndarray: Indices of samples + """ + max_iou = max_overlaps.max() + iou_interval = (max_iou - self.floor_thr) / self.num_bins + per_num_expected = int(num_expected / self.num_bins) + + sampled_inds = [] + for i in range(self.num_bins): + start_iou = self.floor_thr + i * iou_interval + end_iou = self.floor_thr + (i + 1) * iou_interval + tmp_set = set( + np.where( + np.logical_and(max_overlaps >= start_iou, + max_overlaps < end_iou))[0]) + tmp_inds = list(tmp_set & full_set) + if len(tmp_inds) > per_num_expected: + tmp_sampled_set = self.random_choice(tmp_inds, + per_num_expected) + else: + tmp_sampled_set = np.array(tmp_inds, dtype=np.int) + sampled_inds.append(tmp_sampled_set) + + sampled_inds = np.concatenate(sampled_inds) + if len(sampled_inds) < num_expected: + num_extra = num_expected - len(sampled_inds) + extra_inds = np.array(list(full_set - set(sampled_inds))) + if len(extra_inds) > num_extra: + extra_inds = self.random_choice(extra_inds, num_extra) + sampled_inds = np.concatenate([sampled_inds, extra_inds]) + + return sampled_inds + + def _sample_neg(self, assign_result, num_expected, **kwargs): + """Sample negative boxes. + + Args: + assign_result (:obj:`AssignResult`): The assigned results of boxes. + num_expected (int): The number of expected negative samples + + Returns: + Tensor or ndarray: sampled indices. + """ + neg_inds = torch.nonzero(assign_result.gt_inds == 0, as_tuple=False) + if neg_inds.numel() != 0: + neg_inds = neg_inds.squeeze(1) + if len(neg_inds) <= num_expected: + return neg_inds + else: + max_overlaps = assign_result.max_overlaps.cpu().numpy() + # balance sampling for negative samples + neg_set = set(neg_inds.cpu().numpy()) + + if self.floor_thr > 0: + floor_set = set( + np.where( + np.logical_and(max_overlaps >= 0, + max_overlaps < self.floor_thr))[0]) + iou_sampling_set = set( + np.where(max_overlaps >= self.floor_thr)[0]) + elif self.floor_thr == 0: + floor_set = set(np.where(max_overlaps == 0)[0]) + iou_sampling_set = set( + np.where(max_overlaps > self.floor_thr)[0]) + else: + floor_set = set() + iou_sampling_set = set( + np.where(max_overlaps > self.floor_thr)[0]) + # for sampling interval calculation + self.floor_thr = 0 + + floor_neg_inds = list(floor_set & neg_set) + iou_sampling_neg_inds = list(iou_sampling_set & neg_set) + num_expected_iou_sampling = int(num_expected * + (1 - self.floor_fraction)) + if len(iou_sampling_neg_inds) > num_expected_iou_sampling: + if self.num_bins >= 2: + iou_sampled_inds = self.sample_via_interval( + max_overlaps, set(iou_sampling_neg_inds), + num_expected_iou_sampling) + else: + iou_sampled_inds = self.random_choice( + iou_sampling_neg_inds, num_expected_iou_sampling) + else: + iou_sampled_inds = np.array( + iou_sampling_neg_inds, dtype=np.int) + num_expected_floor = num_expected - len(iou_sampled_inds) + if len(floor_neg_inds) > num_expected_floor: + sampled_floor_inds = self.random_choice( + floor_neg_inds, num_expected_floor) + else: + sampled_floor_inds = np.array(floor_neg_inds, dtype=np.int) + sampled_inds = np.concatenate( + (sampled_floor_inds, iou_sampled_inds)) + if len(sampled_inds) < num_expected: + num_extra = num_expected - len(sampled_inds) + extra_inds = np.array(list(neg_set - set(sampled_inds))) + if len(extra_inds) > num_extra: + extra_inds = self.random_choice(extra_inds, num_extra) + sampled_inds = np.concatenate((sampled_inds, extra_inds)) + sampled_inds = torch.from_numpy(sampled_inds).long().to( + assign_result.gt_inds.device) + return sampled_inds diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/ohem_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/ohem_sampler.py new file mode 100644 index 00000000..8b99f60e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/ohem_sampler.py @@ -0,0 +1,107 @@ +import torch + +from ..builder import BBOX_SAMPLERS +from ..transforms import bbox2roi +from .base_sampler import BaseSampler + + +@BBOX_SAMPLERS.register_module() +class OHEMSampler(BaseSampler): + r"""Online Hard Example Mining Sampler described in `Training Region-based + Object Detectors with Online Hard Example Mining + `_. + """ + + def __init__(self, + num, + pos_fraction, + context, + neg_pos_ub=-1, + add_gt_as_proposals=True, + **kwargs): + super(OHEMSampler, self).__init__(num, pos_fraction, neg_pos_ub, + add_gt_as_proposals) + self.context = context + if not hasattr(self.context, 'num_stages'): + self.bbox_head = self.context.bbox_head + else: + self.bbox_head = self.context.bbox_head[self.context.current_stage] + + def hard_mining(self, inds, num_expected, bboxes, labels, feats): + with torch.no_grad(): + rois = bbox2roi([bboxes]) + if not hasattr(self.context, 'num_stages'): + bbox_results = self.context._bbox_forward(feats, rois) + else: + bbox_results = self.context._bbox_forward( + self.context.current_stage, feats, rois) + cls_score = bbox_results['cls_score'] + loss = self.bbox_head.loss( + cls_score=cls_score, + bbox_pred=None, + rois=rois, + labels=labels, + label_weights=cls_score.new_ones(cls_score.size(0)), + bbox_targets=None, + bbox_weights=None, + reduction_override='none')['loss_cls'] + _, topk_loss_inds = loss.topk(num_expected) + return inds[topk_loss_inds] + + def _sample_pos(self, + assign_result, + num_expected, + bboxes=None, + feats=None, + **kwargs): + """Sample positive boxes. + + Args: + assign_result (:obj:`AssignResult`): Assigned results + num_expected (int): Number of expected positive samples + bboxes (torch.Tensor, optional): Boxes. Defaults to None. + feats (list[torch.Tensor], optional): Multi-level features. + Defaults to None. + + Returns: + torch.Tensor: Indices of positive samples + """ + # Sample some hard positive samples + pos_inds = torch.nonzero(assign_result.gt_inds > 0, as_tuple=False) + if pos_inds.numel() != 0: + pos_inds = pos_inds.squeeze(1) + if pos_inds.numel() <= num_expected: + return pos_inds + else: + return self.hard_mining(pos_inds, num_expected, bboxes[pos_inds], + assign_result.labels[pos_inds], feats) + + def _sample_neg(self, + assign_result, + num_expected, + bboxes=None, + feats=None, + **kwargs): + """Sample negative boxes. + + Args: + assign_result (:obj:`AssignResult`): Assigned results + num_expected (int): Number of expected negative samples + bboxes (torch.Tensor, optional): Boxes. Defaults to None. + feats (list[torch.Tensor], optional): Multi-level features. + Defaults to None. + + Returns: + torch.Tensor: Indices of negative samples + """ + # Sample some hard negative samples + neg_inds = torch.nonzero(assign_result.gt_inds == 0, as_tuple=False) + if neg_inds.numel() != 0: + neg_inds = neg_inds.squeeze(1) + if len(neg_inds) <= num_expected: + return neg_inds + else: + neg_labels = assign_result.labels.new_empty( + neg_inds.size(0)).fill_(self.bbox_head.num_classes) + return self.hard_mining(neg_inds, num_expected, bboxes[neg_inds], + neg_labels, feats) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/pseudo_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/pseudo_sampler.py new file mode 100644 index 00000000..2bd81abc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/pseudo_sampler.py @@ -0,0 +1,41 @@ +import torch + +from ..builder import BBOX_SAMPLERS +from .base_sampler import BaseSampler +from .sampling_result import SamplingResult + + +@BBOX_SAMPLERS.register_module() +class PseudoSampler(BaseSampler): + """A pseudo sampler that does not do sampling actually.""" + + def __init__(self, **kwargs): + pass + + def _sample_pos(self, **kwargs): + """Sample positive samples.""" + raise NotImplementedError + + def _sample_neg(self, **kwargs): + """Sample negative samples.""" + raise NotImplementedError + + def sample(self, assign_result, bboxes, gt_bboxes, **kwargs): + """Directly returns the positive and negative indices of samples. + + Args: + assign_result (:obj:`AssignResult`): Assigned results + bboxes (torch.Tensor): Bounding boxes + gt_bboxes (torch.Tensor): Ground truth boxes + + Returns: + :obj:`SamplingResult`: sampler results + """ + pos_inds = torch.nonzero( + assign_result.gt_inds > 0, as_tuple=False).squeeze(-1).unique() + neg_inds = torch.nonzero( + assign_result.gt_inds == 0, as_tuple=False).squeeze(-1).unique() + gt_flags = bboxes.new_zeros(bboxes.shape[0], dtype=torch.uint8) + sampling_result = SamplingResult(pos_inds, neg_inds, bboxes, gt_bboxes, + assign_result, gt_flags) + return sampling_result diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/random_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/random_sampler.py new file mode 100644 index 00000000..f34b006e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/random_sampler.py @@ -0,0 +1,78 @@ +import torch + +from ..builder import BBOX_SAMPLERS +from .base_sampler import BaseSampler + + +@BBOX_SAMPLERS.register_module() +class RandomSampler(BaseSampler): + """Random sampler. + + Args: + num (int): Number of samples + pos_fraction (float): Fraction of positive samples + neg_pos_up (int, optional): Upper bound number of negative and + positive samples. Defaults to -1. + add_gt_as_proposals (bool, optional): Whether to add ground truth + boxes as proposals. Defaults to True. + """ + + def __init__(self, + num, + pos_fraction, + neg_pos_ub=-1, + add_gt_as_proposals=True, + **kwargs): + from mmdet.core.bbox import demodata + super(RandomSampler, self).__init__(num, pos_fraction, neg_pos_ub, + add_gt_as_proposals) + self.rng = demodata.ensure_rng(kwargs.get('rng', None)) + + def random_choice(self, gallery, num): + """Random select some elements from the gallery. + + If `gallery` is a Tensor, the returned indices will be a Tensor; + If `gallery` is a ndarray or list, the returned indices will be a + ndarray. + + Args: + gallery (Tensor | ndarray | list): indices pool. + num (int): expected sample num. + + Returns: + Tensor or ndarray: sampled indices. + """ + assert len(gallery) >= num + + is_tensor = isinstance(gallery, torch.Tensor) + if not is_tensor: + if torch.cuda.is_available(): + device = torch.cuda.current_device() + else: + device = 'cpu' + gallery = torch.tensor(gallery, dtype=torch.long, device=device) + perm = torch.randperm(gallery.numel(), device=gallery.device)[:num] + rand_inds = gallery[perm] + if not is_tensor: + rand_inds = rand_inds.cpu().numpy() + return rand_inds + + def _sample_pos(self, assign_result, num_expected, **kwargs): + """Randomly sample some positive samples.""" + pos_inds = torch.nonzero(assign_result.gt_inds > 0, as_tuple=False) + if pos_inds.numel() != 0: + pos_inds = pos_inds.squeeze(1) + if pos_inds.numel() <= num_expected: + return pos_inds + else: + return self.random_choice(pos_inds, num_expected) + + def _sample_neg(self, assign_result, num_expected, **kwargs): + """Randomly sample some negative samples.""" + neg_inds = torch.nonzero(assign_result.gt_inds == 0, as_tuple=False) + if neg_inds.numel() != 0: + neg_inds = neg_inds.squeeze(1) + if len(neg_inds) <= num_expected: + return neg_inds + else: + return self.random_choice(neg_inds, num_expected) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/sampling_result.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/sampling_result.py new file mode 100644 index 00000000..419a8e39 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/sampling_result.py @@ -0,0 +1,152 @@ +import torch + +from mmdet.utils import util_mixins + + +class SamplingResult(util_mixins.NiceRepr): + """Bbox sampling result. + + Example: + >>> # xdoctest: +IGNORE_WANT + >>> from mmdet.core.bbox.samplers.sampling_result import * # NOQA + >>> self = SamplingResult.random(rng=10) + >>> print(f'self = {self}') + self = + """ + + def __init__(self, pos_inds, neg_inds, bboxes, gt_bboxes, assign_result, + gt_flags): + self.pos_inds = pos_inds + self.neg_inds = neg_inds + self.pos_bboxes = bboxes[pos_inds] + self.neg_bboxes = bboxes[neg_inds] + self.pos_is_gt = gt_flags[pos_inds] + + self.num_gts = gt_bboxes.shape[0] + self.pos_assigned_gt_inds = assign_result.gt_inds[pos_inds] - 1 + + if gt_bboxes.numel() == 0: + # hack for index error case + assert self.pos_assigned_gt_inds.numel() == 0 + self.pos_gt_bboxes = torch.empty_like(gt_bboxes).view(-1, 4) + else: + if len(gt_bboxes.shape) < 2: + gt_bboxes = gt_bboxes.view(-1, 4) + + self.pos_gt_bboxes = gt_bboxes[self.pos_assigned_gt_inds, :] + + if assign_result.labels is not None: + self.pos_gt_labels = assign_result.labels[pos_inds] + else: + self.pos_gt_labels = None + + @property + def bboxes(self): + """torch.Tensor: concatenated positive and negative boxes""" + return torch.cat([self.pos_bboxes, self.neg_bboxes]) + + def to(self, device): + """Change the device of the data inplace. + + Example: + >>> self = SamplingResult.random() + >>> print(f'self = {self.to(None)}') + >>> # xdoctest: +REQUIRES(--gpu) + >>> print(f'self = {self.to(0)}') + """ + _dict = self.__dict__ + for key, value in _dict.items(): + if isinstance(value, torch.Tensor): + _dict[key] = value.to(device) + return self + + def __nice__(self): + data = self.info.copy() + data['pos_bboxes'] = data.pop('pos_bboxes').shape + data['neg_bboxes'] = data.pop('neg_bboxes').shape + parts = [f"'{k}': {v!r}" for k, v in sorted(data.items())] + body = ' ' + ',\n '.join(parts) + return '{\n' + body + '\n}' + + @property + def info(self): + """Returns a dictionary of info about the object.""" + return { + 'pos_inds': self.pos_inds, + 'neg_inds': self.neg_inds, + 'pos_bboxes': self.pos_bboxes, + 'neg_bboxes': self.neg_bboxes, + 'pos_is_gt': self.pos_is_gt, + 'num_gts': self.num_gts, + 'pos_assigned_gt_inds': self.pos_assigned_gt_inds, + } + + @classmethod + def random(cls, rng=None, **kwargs): + """ + Args: + rng (None | int | numpy.random.RandomState): seed or state. + kwargs (keyword arguments): + - num_preds: number of predicted boxes + - num_gts: number of true boxes + - p_ignore (float): probability of a predicted box assinged to \ + an ignored truth. + - p_assigned (float): probability of a predicted box not being \ + assigned. + - p_use_label (float | bool): with labels or not. + + Returns: + :obj:`SamplingResult`: Randomly generated sampling result. + + Example: + >>> from mmdet.core.bbox.samplers.sampling_result import * # NOQA + >>> self = SamplingResult.random() + >>> print(self.__dict__) + """ + from mmdet.core.bbox.samplers.random_sampler import RandomSampler + from mmdet.core.bbox.assigners.assign_result import AssignResult + from mmdet.core.bbox import demodata + rng = demodata.ensure_rng(rng) + + # make probabalistic? + num = 32 + pos_fraction = 0.5 + neg_pos_ub = -1 + + assign_result = AssignResult.random(rng=rng, **kwargs) + + # Note we could just compute an assignment + bboxes = demodata.random_boxes(assign_result.num_preds, rng=rng) + gt_bboxes = demodata.random_boxes(assign_result.num_gts, rng=rng) + + if rng.rand() > 0.2: + # sometimes algorithms squeeze their data, be robust to that + gt_bboxes = gt_bboxes.squeeze() + bboxes = bboxes.squeeze() + + if assign_result.labels is None: + gt_labels = None + else: + gt_labels = None # todo + + if gt_labels is None: + add_gt_as_proposals = False + else: + add_gt_as_proposals = True # make probabalistic? + + sampler = RandomSampler( + num, + pos_fraction, + neg_pos_ub=neg_pos_ub, + add_gt_as_proposals=add_gt_as_proposals, + rng=rng) + self = sampler.sample(assign_result, bboxes, gt_bboxes, gt_labels) + return self diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/score_hlr_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/score_hlr_sampler.py new file mode 100644 index 00000000..11d46b97 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/samplers/score_hlr_sampler.py @@ -0,0 +1,264 @@ +import torch +from mmcv.ops import nms_match + +from ..builder import BBOX_SAMPLERS +from ..transforms import bbox2roi +from .base_sampler import BaseSampler +from .sampling_result import SamplingResult + + +@BBOX_SAMPLERS.register_module() +class ScoreHLRSampler(BaseSampler): + r"""Importance-based Sample Reweighting (ISR_N), described in `Prime Sample + Attention in Object Detection `_. + + Score hierarchical local rank (HLR) differentiates with RandomSampler in + negative part. It firstly computes Score-HLR in a two-step way, + then linearly maps score hlr to the loss weights. + + Args: + num (int): Total number of sampled RoIs. + pos_fraction (float): Fraction of positive samples. + context (:class:`BaseRoIHead`): RoI head that the sampler belongs to. + neg_pos_ub (int): Upper bound of the ratio of num negative to num + positive, -1 means no upper bound. + add_gt_as_proposals (bool): Whether to add ground truth as proposals. + k (float): Power of the non-linear mapping. + bias (float): Shift of the non-linear mapping. + score_thr (float): Minimum score that a negative sample is to be + considered as valid bbox. + """ + + def __init__(self, + num, + pos_fraction, + context, + neg_pos_ub=-1, + add_gt_as_proposals=True, + k=0.5, + bias=0, + score_thr=0.05, + iou_thr=0.5, + **kwargs): + super().__init__(num, pos_fraction, neg_pos_ub, add_gt_as_proposals) + self.k = k + self.bias = bias + self.score_thr = score_thr + self.iou_thr = iou_thr + self.context = context + # context of cascade detectors is a list, so distinguish them here. + if not hasattr(context, 'num_stages'): + self.bbox_roi_extractor = context.bbox_roi_extractor + self.bbox_head = context.bbox_head + self.with_shared_head = context.with_shared_head + if self.with_shared_head: + self.shared_head = context.shared_head + else: + self.bbox_roi_extractor = context.bbox_roi_extractor[ + context.current_stage] + self.bbox_head = context.bbox_head[context.current_stage] + + @staticmethod + def random_choice(gallery, num): + """Randomly select some elements from the gallery. + + If `gallery` is a Tensor, the returned indices will be a Tensor; + If `gallery` is a ndarray or list, the returned indices will be a + ndarray. + + Args: + gallery (Tensor | ndarray | list): indices pool. + num (int): expected sample num. + + Returns: + Tensor or ndarray: sampled indices. + """ + assert len(gallery) >= num + + is_tensor = isinstance(gallery, torch.Tensor) + if not is_tensor: + if torch.cuda.is_available(): + device = torch.cuda.current_device() + else: + device = 'cpu' + gallery = torch.tensor(gallery, dtype=torch.long, device=device) + perm = torch.randperm(gallery.numel(), device=gallery.device)[:num] + rand_inds = gallery[perm] + if not is_tensor: + rand_inds = rand_inds.cpu().numpy() + return rand_inds + + def _sample_pos(self, assign_result, num_expected, **kwargs): + """Randomly sample some positive samples.""" + pos_inds = torch.nonzero(assign_result.gt_inds > 0).flatten() + if pos_inds.numel() <= num_expected: + return pos_inds + else: + return self.random_choice(pos_inds, num_expected) + + def _sample_neg(self, + assign_result, + num_expected, + bboxes, + feats=None, + img_meta=None, + **kwargs): + """Sample negative samples. + + Score-HLR sampler is done in the following steps: + 1. Take the maximum positive score prediction of each negative samples + as s_i. + 2. Filter out negative samples whose s_i <= score_thr, the left samples + are called valid samples. + 3. Use NMS-Match to divide valid samples into different groups, + samples in the same group will greatly overlap with each other + 4. Rank the matched samples in two-steps to get Score-HLR. + (1) In the same group, rank samples with their scores. + (2) In the same score rank across different groups, + rank samples with their scores again. + 5. Linearly map Score-HLR to the final label weights. + + Args: + assign_result (:obj:`AssignResult`): result of assigner. + num_expected (int): Expected number of samples. + bboxes (Tensor): bbox to be sampled. + feats (Tensor): Features come from FPN. + img_meta (dict): Meta information dictionary. + """ + neg_inds = torch.nonzero(assign_result.gt_inds == 0).flatten() + num_neg = neg_inds.size(0) + if num_neg == 0: + return neg_inds, None + with torch.no_grad(): + neg_bboxes = bboxes[neg_inds] + neg_rois = bbox2roi([neg_bboxes]) + bbox_result = self.context._bbox_forward(feats, neg_rois) + cls_score, bbox_pred = bbox_result['cls_score'], bbox_result[ + 'bbox_pred'] + + ori_loss = self.bbox_head.loss( + cls_score=cls_score, + bbox_pred=None, + rois=None, + labels=neg_inds.new_full((num_neg, ), + self.bbox_head.num_classes), + label_weights=cls_score.new_ones(num_neg), + bbox_targets=None, + bbox_weights=None, + reduction_override='none')['loss_cls'] + + # filter out samples with the max score lower than score_thr + max_score, argmax_score = cls_score.softmax(-1)[:, :-1].max(-1) + valid_inds = (max_score > self.score_thr).nonzero().view(-1) + invalid_inds = (max_score <= self.score_thr).nonzero().view(-1) + num_valid = valid_inds.size(0) + num_invalid = invalid_inds.size(0) + + num_expected = min(num_neg, num_expected) + num_hlr = min(num_valid, num_expected) + num_rand = num_expected - num_hlr + if num_valid > 0: + valid_rois = neg_rois[valid_inds] + valid_max_score = max_score[valid_inds] + valid_argmax_score = argmax_score[valid_inds] + valid_bbox_pred = bbox_pred[valid_inds] + + # valid_bbox_pred shape: [num_valid, #num_classes, 4] + valid_bbox_pred = valid_bbox_pred.view( + valid_bbox_pred.size(0), -1, 4) + selected_bbox_pred = valid_bbox_pred[range(num_valid), + valid_argmax_score] + pred_bboxes = self.bbox_head.bbox_coder.decode( + valid_rois[:, 1:], selected_bbox_pred) + pred_bboxes_with_score = torch.cat( + [pred_bboxes, valid_max_score[:, None]], -1) + group = nms_match(pred_bboxes_with_score, self.iou_thr) + + # imp: importance + imp = cls_score.new_zeros(num_valid) + for g in group: + g_score = valid_max_score[g] + # g_score has already sorted + rank = g_score.new_tensor(range(g_score.size(0))) + imp[g] = num_valid - rank + g_score + _, imp_rank_inds = imp.sort(descending=True) + _, imp_rank = imp_rank_inds.sort() + hlr_inds = imp_rank_inds[:num_expected] + + if num_rand > 0: + rand_inds = torch.randperm(num_invalid)[:num_rand] + select_inds = torch.cat( + [valid_inds[hlr_inds], invalid_inds[rand_inds]]) + else: + select_inds = valid_inds[hlr_inds] + + neg_label_weights = cls_score.new_ones(num_expected) + + up_bound = max(num_expected, num_valid) + imp_weights = (up_bound - + imp_rank[hlr_inds].float()) / up_bound + neg_label_weights[:num_hlr] = imp_weights + neg_label_weights[num_hlr:] = imp_weights.min() + neg_label_weights = (self.bias + + (1 - self.bias) * neg_label_weights).pow( + self.k) + ori_selected_loss = ori_loss[select_inds] + new_loss = ori_selected_loss * neg_label_weights + norm_ratio = ori_selected_loss.sum() / new_loss.sum() + neg_label_weights *= norm_ratio + else: + neg_label_weights = cls_score.new_ones(num_expected) + select_inds = torch.randperm(num_neg)[:num_expected] + + return neg_inds[select_inds], neg_label_weights + + def sample(self, + assign_result, + bboxes, + gt_bboxes, + gt_labels=None, + img_meta=None, + **kwargs): + """Sample positive and negative bboxes. + + This is a simple implementation of bbox sampling given candidates, + assigning results and ground truth bboxes. + + Args: + assign_result (:obj:`AssignResult`): Bbox assigning results. + bboxes (Tensor): Boxes to be sampled from. + gt_bboxes (Tensor): Ground truth bboxes. + gt_labels (Tensor, optional): Class labels of ground truth bboxes. + + Returns: + tuple[:obj:`SamplingResult`, Tensor]: Sampling result and negetive + label weights. + """ + bboxes = bboxes[:, :4] + + gt_flags = bboxes.new_zeros((bboxes.shape[0], ), dtype=torch.uint8) + if self.add_gt_as_proposals: + bboxes = torch.cat([gt_bboxes, bboxes], dim=0) + assign_result.add_gt_(gt_labels) + gt_ones = bboxes.new_ones(gt_bboxes.shape[0], dtype=torch.uint8) + gt_flags = torch.cat([gt_ones, gt_flags]) + + num_expected_pos = int(self.num * self.pos_fraction) + pos_inds = self.pos_sampler._sample_pos( + assign_result, num_expected_pos, bboxes=bboxes, **kwargs) + num_sampled_pos = pos_inds.numel() + num_expected_neg = self.num - num_sampled_pos + if self.neg_pos_ub >= 0: + _pos = max(1, num_sampled_pos) + neg_upper_bound = int(self.neg_pos_ub * _pos) + if num_expected_neg > neg_upper_bound: + num_expected_neg = neg_upper_bound + neg_inds, neg_label_weights = self.neg_sampler._sample_neg( + assign_result, + num_expected_neg, + bboxes, + img_meta=img_meta, + **kwargs) + + return SamplingResult(pos_inds, neg_inds, bboxes, gt_bboxes, + assign_result, gt_flags), neg_label_weights diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/transforms.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/transforms.py new file mode 100644 index 00000000..102db0d1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/bbox/transforms.py @@ -0,0 +1,224 @@ +import numpy as np +import torch + + +def bbox_flip(bboxes, img_shape, direction='horizontal'): + """Flip bboxes horizontally or vertically. + + Args: + bboxes (Tensor): Shape (..., 4*k) + img_shape (tuple): Image shape. + direction (str): Flip direction, options are "horizontal", "vertical", + "diagonal". Default: "horizontal" + + Returns: + Tensor: Flipped bboxes. + """ + assert bboxes.shape[-1] % 4 == 0 + assert direction in ['horizontal', 'vertical', 'diagonal'] + flipped = bboxes.clone() + if direction == 'horizontal': + flipped[..., 0::4] = img_shape[1] - bboxes[..., 2::4] + flipped[..., 2::4] = img_shape[1] - bboxes[..., 0::4] + elif direction == 'vertical': + flipped[..., 1::4] = img_shape[0] - bboxes[..., 3::4] + flipped[..., 3::4] = img_shape[0] - bboxes[..., 1::4] + else: + flipped[..., 0::4] = img_shape[1] - bboxes[..., 2::4] + flipped[..., 1::4] = img_shape[0] - bboxes[..., 3::4] + flipped[..., 2::4] = img_shape[1] - bboxes[..., 0::4] + flipped[..., 3::4] = img_shape[0] - bboxes[..., 1::4] + return flipped + + +def bbox_mapping(bboxes, + img_shape, + scale_factor, + flip, + flip_direction='horizontal'): + """Map bboxes from the original image scale to testing scale.""" + new_bboxes = bboxes * bboxes.new_tensor(scale_factor) + if flip: + new_bboxes = bbox_flip(new_bboxes, img_shape, flip_direction) + return new_bboxes + + +def bbox_mapping_back(bboxes, + img_shape, + scale_factor, + flip, + flip_direction='horizontal'): + """Map bboxes from testing scale to original image scale.""" + new_bboxes = bbox_flip(bboxes, img_shape, + flip_direction) if flip else bboxes + new_bboxes = new_bboxes.view(-1, 4) / new_bboxes.new_tensor(scale_factor) + return new_bboxes.view(bboxes.shape) + + +def bbox2roi(bbox_list): + """Convert a list of bboxes to roi format. + + Args: + bbox_list (list[Tensor]): a list of bboxes corresponding to a batch + of images. + + Returns: + Tensor: shape (n, 5), [batch_ind, x1, y1, x2, y2] + """ + rois_list = [] + for img_id, bboxes in enumerate(bbox_list): + if bboxes.size(0) > 0: + img_inds = bboxes.new_full((bboxes.size(0), 1), img_id) + rois = torch.cat([img_inds, bboxes[:, :4]], dim=-1) + else: + rois = bboxes.new_zeros((0, 5)) + rois_list.append(rois) + rois = torch.cat(rois_list, 0) + return rois + + +def roi2bbox(rois): + """Convert rois to bounding box format. + + Args: + rois (torch.Tensor): RoIs with the shape (n, 5) where the first + column indicates batch id of each RoI. + + Returns: + list[torch.Tensor]: Converted boxes of corresponding rois. + """ + bbox_list = [] + img_ids = torch.unique(rois[:, 0].cpu(), sorted=True) + for img_id in img_ids: + inds = (rois[:, 0] == img_id.item()) + bbox = rois[inds, 1:] + bbox_list.append(bbox) + return bbox_list + + +def bbox2result(bboxes, labels, num_classes): + """Convert detection results to a list of numpy arrays. + + Args: + bboxes (torch.Tensor | np.ndarray): shape (n, 5) + labels (torch.Tensor | np.ndarray): shape (n, ) + num_classes (int): class number, including background class + + Returns: + list(ndarray): bbox results of each class + """ + if bboxes.shape[0] == 0: + return [np.zeros((0, 5), dtype=np.float32) for i in range(num_classes)] + else: + if isinstance(bboxes, torch.Tensor): + bboxes = bboxes.detach().cpu().numpy() + labels = labels.detach().cpu().numpy() + return [bboxes[labels == i, :] for i in range(num_classes)] + + +def distance2bbox(points, distance, max_shape=None): + """Decode distance prediction to bounding box. + + Args: + points (Tensor): Shape (n, 2), [x, y]. + distance (Tensor): Distance from the given point to 4 + boundaries (left, top, right, bottom). + max_shape (tuple): Shape of the image. + + Returns: + Tensor: Decoded bboxes. + """ + x1 = points[:, 0] - distance[:, 0] + y1 = points[:, 1] - distance[:, 1] + x2 = points[:, 0] + distance[:, 2] + y2 = points[:, 1] + distance[:, 3] + if max_shape is not None: + x1 = x1.clamp(min=0, max=max_shape[1]) + y1 = y1.clamp(min=0, max=max_shape[0]) + x2 = x2.clamp(min=0, max=max_shape[1]) + y2 = y2.clamp(min=0, max=max_shape[0]) + return torch.stack([x1, y1, x2, y2], -1) + + +def bbox2distance(points, bbox, max_dis=None, eps=0.1): + """Decode bounding box based on distances. + + Args: + points (Tensor): Shape (n, 2), [x, y]. + bbox (Tensor): Shape (n, 4), "xyxy" format + max_dis (float): Upper bound of the distance. + eps (float): a small value to ensure target < max_dis, instead <= + + Returns: + Tensor: Decoded distances. + """ + left = points[:, 0] - bbox[:, 0] + top = points[:, 1] - bbox[:, 1] + right = bbox[:, 2] - points[:, 0] + bottom = bbox[:, 3] - points[:, 1] + if max_dis is not None: + left = left.clamp(min=0, max=max_dis - eps) + top = top.clamp(min=0, max=max_dis - eps) + right = right.clamp(min=0, max=max_dis - eps) + bottom = bottom.clamp(min=0, max=max_dis - eps) + return torch.stack([left, top, right, bottom], -1) + + +def bbox_rescale(bboxes, scale_factor=1.0): + """Rescale bounding box w.r.t. scale_factor. + + Args: + bboxes (Tensor): Shape (n, 4) for bboxes or (n, 5) for rois + scale_factor (float): rescale factor + + Returns: + Tensor: Rescaled bboxes. + """ + if bboxes.size(1) == 5: + bboxes_ = bboxes[:, 1:] + inds_ = bboxes[:, 0] + else: + bboxes_ = bboxes + cx = (bboxes_[:, 0] + bboxes_[:, 2]) * 0.5 + cy = (bboxes_[:, 1] + bboxes_[:, 3]) * 0.5 + w = bboxes_[:, 2] - bboxes_[:, 0] + h = bboxes_[:, 3] - bboxes_[:, 1] + w = w * scale_factor + h = h * scale_factor + x1 = cx - 0.5 * w + x2 = cx + 0.5 * w + y1 = cy - 0.5 * h + y2 = cy + 0.5 * h + if bboxes.size(1) == 5: + rescaled_bboxes = torch.stack([inds_, x1, y1, x2, y2], dim=-1) + else: + rescaled_bboxes = torch.stack([x1, y1, x2, y2], dim=-1) + return rescaled_bboxes + + +def bbox_cxcywh_to_xyxy(bbox): + """Convert bbox coordinates from (cx, cy, w, h) to (x1, y1, x2, y2). + + Args: + bbox (Tensor): Shape (n, 4) for bboxes. + + Returns: + Tensor: Converted bboxes. + """ + cx, cy, w, h = bbox.split((1, 1, 1, 1), dim=-1) + bbox_new = [(cx - 0.5 * w), (cy - 0.5 * h), (cx + 0.5 * w), (cy + 0.5 * h)] + return torch.cat(bbox_new, dim=-1) + + +def bbox_xyxy_to_cxcywh(bbox): + """Convert bbox coordinates from (x1, y1, x2, y2) to (cx, cy, w, h). + + Args: + bbox (Tensor): Shape (n, 4) for bboxes. + + Returns: + Tensor: Converted bboxes. + """ + x1, y1, x2, y2 = bbox.split((1, 1, 1, 1), dim=-1) + bbox_new = [(x1 + x2) / 2, (y1 + y2) / 2, (x2 - x1), (y2 - y1)] + return torch.cat(bbox_new, dim=-1) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/__init__.py new file mode 100644 index 00000000..d11ef15b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/__init__.py @@ -0,0 +1,15 @@ +from .class_names import (cityscapes_classes, coco_classes, dataset_aliases, + get_classes, imagenet_det_classes, + imagenet_vid_classes, voc_classes) +from .eval_hooks import DistEvalHook, EvalHook +from .mean_ap import average_precision, eval_map, print_map_summary +from .recall import (eval_recalls, plot_iou_recall, plot_num_recall, + print_recall_summary) + +__all__ = [ + 'voc_classes', 'imagenet_det_classes', 'imagenet_vid_classes', + 'coco_classes', 'cityscapes_classes', 'dataset_aliases', 'get_classes', + 'DistEvalHook', 'EvalHook', 'average_precision', 'eval_map', + 'print_map_summary', 'eval_recalls', 'print_recall_summary', + 'plot_num_recall', 'plot_iou_recall' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/bbox_overlaps.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/bbox_overlaps.py new file mode 100644 index 00000000..93559ea0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/bbox_overlaps.py @@ -0,0 +1,48 @@ +import numpy as np + + +def bbox_overlaps(bboxes1, bboxes2, mode='iou', eps=1e-6): + """Calculate the ious between each bbox of bboxes1 and bboxes2. + + Args: + bboxes1(ndarray): shape (n, 4) + bboxes2(ndarray): shape (k, 4) + mode(str): iou (intersection over union) or iof (intersection + over foreground) + + Returns: + ious(ndarray): shape (n, k) + """ + + assert mode in ['iou', 'iof'] + + bboxes1 = bboxes1.astype(np.float32) + bboxes2 = bboxes2.astype(np.float32) + rows = bboxes1.shape[0] + cols = bboxes2.shape[0] + ious = np.zeros((rows, cols), dtype=np.float32) + if rows * cols == 0: + return ious + exchange = False + if bboxes1.shape[0] > bboxes2.shape[0]: + bboxes1, bboxes2 = bboxes2, bboxes1 + ious = np.zeros((cols, rows), dtype=np.float32) + exchange = True + area1 = (bboxes1[:, 2] - bboxes1[:, 0]) * (bboxes1[:, 3] - bboxes1[:, 1]) + area2 = (bboxes2[:, 2] - bboxes2[:, 0]) * (bboxes2[:, 3] - bboxes2[:, 1]) + for i in range(bboxes1.shape[0]): + x_start = np.maximum(bboxes1[i, 0], bboxes2[:, 0]) + y_start = np.maximum(bboxes1[i, 1], bboxes2[:, 1]) + x_end = np.minimum(bboxes1[i, 2], bboxes2[:, 2]) + y_end = np.minimum(bboxes1[i, 3], bboxes2[:, 3]) + overlap = np.maximum(x_end - x_start, 0) * np.maximum( + y_end - y_start, 0) + if mode == 'iou': + union = area1[i] + area2 - overlap + else: + union = area1[i] if not exchange else area2 + union = np.maximum(union, eps) + ious[i, :] = overlap / union + if exchange: + ious = ious.T + return ious diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/class_names.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/class_names.py new file mode 100644 index 00000000..4b8845f3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/class_names.py @@ -0,0 +1,116 @@ +import mmcv + + +def wider_face_classes(): + return ['face'] + + +def voc_classes(): + return [ + 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', + 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', + 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor' + ] + + +def imagenet_det_classes(): + return [ + 'accordion', 'airplane', 'ant', 'antelope', 'apple', 'armadillo', + 'artichoke', 'axe', 'baby_bed', 'backpack', 'bagel', 'balance_beam', + 'banana', 'band_aid', 'banjo', 'baseball', 'basketball', 'bathing_cap', + 'beaker', 'bear', 'bee', 'bell_pepper', 'bench', 'bicycle', 'binder', + 'bird', 'bookshelf', 'bow_tie', 'bow', 'bowl', 'brassiere', 'burrito', + 'bus', 'butterfly', 'camel', 'can_opener', 'car', 'cart', 'cattle', + 'cello', 'centipede', 'chain_saw', 'chair', 'chime', 'cocktail_shaker', + 'coffee_maker', 'computer_keyboard', 'computer_mouse', 'corkscrew', + 'cream', 'croquet_ball', 'crutch', 'cucumber', 'cup_or_mug', 'diaper', + 'digital_clock', 'dishwasher', 'dog', 'domestic_cat', 'dragonfly', + 'drum', 'dumbbell', 'electric_fan', 'elephant', 'face_powder', 'fig', + 'filing_cabinet', 'flower_pot', 'flute', 'fox', 'french_horn', 'frog', + 'frying_pan', 'giant_panda', 'goldfish', 'golf_ball', 'golfcart', + 'guacamole', 'guitar', 'hair_dryer', 'hair_spray', 'hamburger', + 'hammer', 'hamster', 'harmonica', 'harp', 'hat_with_a_wide_brim', + 'head_cabbage', 'helmet', 'hippopotamus', 'horizontal_bar', 'horse', + 'hotdog', 'iPod', 'isopod', 'jellyfish', 'koala_bear', 'ladle', + 'ladybug', 'lamp', 'laptop', 'lemon', 'lion', 'lipstick', 'lizard', + 'lobster', 'maillot', 'maraca', 'microphone', 'microwave', 'milk_can', + 'miniskirt', 'monkey', 'motorcycle', 'mushroom', 'nail', 'neck_brace', + 'oboe', 'orange', 'otter', 'pencil_box', 'pencil_sharpener', 'perfume', + 'person', 'piano', 'pineapple', 'ping-pong_ball', 'pitcher', 'pizza', + 'plastic_bag', 'plate_rack', 'pomegranate', 'popsicle', 'porcupine', + 'power_drill', 'pretzel', 'printer', 'puck', 'punching_bag', 'purse', + 'rabbit', 'racket', 'ray', 'red_panda', 'refrigerator', + 'remote_control', 'rubber_eraser', 'rugby_ball', 'ruler', + 'salt_or_pepper_shaker', 'saxophone', 'scorpion', 'screwdriver', + 'seal', 'sheep', 'ski', 'skunk', 'snail', 'snake', 'snowmobile', + 'snowplow', 'soap_dispenser', 'soccer_ball', 'sofa', 'spatula', + 'squirrel', 'starfish', 'stethoscope', 'stove', 'strainer', + 'strawberry', 'stretcher', 'sunglasses', 'swimming_trunks', 'swine', + 'syringe', 'table', 'tape_player', 'tennis_ball', 'tick', 'tie', + 'tiger', 'toaster', 'traffic_light', 'train', 'trombone', 'trumpet', + 'turtle', 'tv_or_monitor', 'unicycle', 'vacuum', 'violin', + 'volleyball', 'waffle_iron', 'washer', 'water_bottle', 'watercraft', + 'whale', 'wine_bottle', 'zebra' + ] + + +def imagenet_vid_classes(): + return [ + 'airplane', 'antelope', 'bear', 'bicycle', 'bird', 'bus', 'car', + 'cattle', 'dog', 'domestic_cat', 'elephant', 'fox', 'giant_panda', + 'hamster', 'horse', 'lion', 'lizard', 'monkey', 'motorcycle', 'rabbit', + 'red_panda', 'sheep', 'snake', 'squirrel', 'tiger', 'train', 'turtle', + 'watercraft', 'whale', 'zebra' + ] + + +def coco_classes(): + return [ + 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', + 'truck', 'boat', 'traffic_light', 'fire_hydrant', 'stop_sign', + 'parking_meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', + 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', + 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', + 'sports_ball', 'kite', 'baseball_bat', 'baseball_glove', 'skateboard', + 'surfboard', 'tennis_racket', 'bottle', 'wine_glass', 'cup', 'fork', + 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', + 'broccoli', 'carrot', 'hot_dog', 'pizza', 'donut', 'cake', 'chair', + 'couch', 'potted_plant', 'bed', 'dining_table', 'toilet', 'tv', + 'laptop', 'mouse', 'remote', 'keyboard', 'cell_phone', 'microwave', + 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', + 'scissors', 'teddy_bear', 'hair_drier', 'toothbrush' + ] + + +def cityscapes_classes(): + return [ + 'person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', + 'bicycle' + ] + + +dataset_aliases = { + 'voc': ['voc', 'pascal_voc', 'voc07', 'voc12'], + 'imagenet_det': ['det', 'imagenet_det', 'ilsvrc_det'], + 'imagenet_vid': ['vid', 'imagenet_vid', 'ilsvrc_vid'], + 'coco': ['coco', 'mscoco', 'ms_coco'], + 'wider_face': ['WIDERFaceDataset', 'wider_face', 'WDIERFace'], + 'cityscapes': ['cityscapes'] +} + + +def get_classes(dataset): + """Get class names of a dataset.""" + alias2name = {} + for name, aliases in dataset_aliases.items(): + for alias in aliases: + alias2name[alias] = name + + if mmcv.is_str(dataset): + if dataset in alias2name: + labels = eval(alias2name[dataset] + '_classes()') + else: + raise ValueError(f'Unrecognized dataset: {dataset}') + else: + raise TypeError(f'dataset must a str, but got {type(dataset)}') + return labels diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/eval_hooks.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/eval_hooks.py new file mode 100644 index 00000000..900f12a5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/eval_hooks.py @@ -0,0 +1,255 @@ +import os.path as osp +import warnings +from math import inf + +import mmcv +from mmcv.runner import Hook +from torch.utils.data import DataLoader + +from mmdet.utils import get_root_logger + + +class EvalHook(Hook): + """Evaluation hook. + + Notes: + If new arguments are added for EvalHook, tools/test.py, + tools/analysis_tools/eval_metric.py may be effected. + + Attributes: + dataloader (DataLoader): A PyTorch dataloader. + start (int, optional): Evaluation starting epoch. It enables evaluation + before the training starts if ``start`` <= the resuming epoch. + If None, whether to evaluate is merely decided by ``interval``. + Default: None. + interval (int): Evaluation interval (by epochs). Default: 1. + save_best (str, optional): If a metric is specified, it would measure + the best checkpoint during evaluation. The information about best + checkpoint would be save in best.json. + Options are the evaluation metrics to the test dataset. e.g., + ``bbox_mAP``, ``segm_mAP`` for bbox detection and instance + segmentation. ``AR@100`` for proposal recall. If ``save_best`` is + ``auto``, the first key will be used. The interval of + ``CheckpointHook`` should device EvalHook. Default: None. + rule (str, optional): Comparison rule for best score. If set to None, + it will infer a reasonable rule. Keys such as 'mAP' or 'AR' will + be inferred by 'greater' rule. Keys contain 'loss' will be inferred + by 'less' rule. Options are 'greater', 'less'. Default: None. + **eval_kwargs: Evaluation arguments fed into the evaluate function of + the dataset. + """ + + rule_map = {'greater': lambda x, y: x > y, 'less': lambda x, y: x < y} + init_value_map = {'greater': -inf, 'less': inf} + greater_keys = ['mAP', 'AR'] + less_keys = ['loss'] + + def __init__(self, + dataloader, + start=None, + interval=1, + save_best=None, + rule=None, + **eval_kwargs): + if not isinstance(dataloader, DataLoader): + raise TypeError('dataloader must be a pytorch DataLoader, but got' + f' {type(dataloader)}') + if not interval > 0: + raise ValueError(f'interval must be positive, but got {interval}') + if start is not None and start < 0: + warnings.warn( + f'The evaluation start epoch {start} is smaller than 0, ' + f'use 0 instead', UserWarning) + start = 0 + self.dataloader = dataloader + self.interval = interval + self.start = start + assert isinstance(save_best, str) or save_best is None + self.save_best = save_best + self.eval_kwargs = eval_kwargs + self.initial_epoch_flag = True + + self.logger = get_root_logger() + + if self.save_best is not None: + self._init_rule(rule, self.save_best) + + def _init_rule(self, rule, key_indicator): + """Initialize rule, key_indicator, comparison_func, and best score. + + Args: + rule (str | None): Comparison rule for best score. + key_indicator (str | None): Key indicator to determine the + comparison rule. + """ + if rule not in self.rule_map and rule is not None: + raise KeyError(f'rule must be greater, less or None, ' + f'but got {rule}.') + + if rule is None: + if key_indicator != 'auto': + if any(key in key_indicator for key in self.greater_keys): + rule = 'greater' + elif any(key in key_indicator for key in self.less_keys): + rule = 'less' + else: + raise ValueError(f'Cannot infer the rule for key ' + f'{key_indicator}, thus a specific rule ' + f'must be specified.') + self.rule = rule + self.key_indicator = key_indicator + if self.rule is not None: + self.compare_func = self.rule_map[self.rule] + + def before_run(self, runner): + if self.save_best is not None: + if runner.meta is None: + warnings.warn('runner.meta is None. Creating a empty one.') + runner.meta = dict() + runner.meta.setdefault('hook_msgs', dict()) + + def before_train_epoch(self, runner): + """Evaluate the model only at the start of training.""" + if not self.initial_epoch_flag: + return + if self.start is not None and runner.epoch >= self.start: + self.after_train_epoch(runner) + self.initial_epoch_flag = False + + def evaluation_flag(self, runner): + """Judge whether to perform_evaluation after this epoch. + + Returns: + bool: The flag indicating whether to perform evaluation. + """ + if self.start is None: + if not self.every_n_epochs(runner, self.interval): + # No evaluation during the interval epochs. + return False + elif (runner.epoch + 1) < self.start: + # No evaluation if start is larger than the current epoch. + return False + else: + # Evaluation only at epochs 3, 5, 7... if start==3 and interval==2 + if (runner.epoch + 1 - self.start) % self.interval: + return False + return True + + def after_train_epoch(self, runner): + if not self.evaluation_flag(runner): + return + from mmdet.apis import single_gpu_test + results = single_gpu_test(runner.model, self.dataloader, show=False) + key_score = self.evaluate(runner, results) + if self.save_best: + best_score = runner.meta['hook_msgs'].get( + 'best_score', self.init_value_map[self.rule]) + if self.compare_func(key_score, best_score): + best_score = key_score + runner.meta['hook_msgs']['best_score'] = best_score + last_ckpt = runner.meta['hook_msgs']['last_ckpt'] + runner.meta['hook_msgs']['best_ckpt'] = last_ckpt + mmcv.symlink( + last_ckpt, + osp.join(runner.work_dir, + f'best_{self.key_indicator}.pth')) + self.logger.info( + f'Now best checkpoint is epoch_{runner.epoch + 1}.pth.' + f'Best {self.key_indicator} is {best_score:0.4f}') + + def evaluate(self, runner, results): + eval_res = self.dataloader.dataset.evaluate( + results, logger=runner.logger, **self.eval_kwargs) + for name, val in eval_res.items(): + runner.log_buffer.output[name] = val + runner.log_buffer.ready = True + if self.save_best is not None: + if self.key_indicator == 'auto': + # infer from eval_results + self._init_rule(self.rule, list(eval_res.keys())[0]) + return eval_res[self.key_indicator] + else: + return None + + +class DistEvalHook(EvalHook): + """Distributed evaluation hook. + + Notes: + If new arguments are added, tools/test.py may be effected. + + Attributes: + dataloader (DataLoader): A PyTorch dataloader. + start (int, optional): Evaluation starting epoch. It enables evaluation + before the training starts if ``start`` <= the resuming epoch. + If None, whether to evaluate is merely decided by ``interval``. + Default: None. + interval (int): Evaluation interval (by epochs). Default: 1. + tmpdir (str | None): Temporary directory to save the results of all + processes. Default: None. + gpu_collect (bool): Whether to use gpu or cpu to collect results. + Default: False. + save_best (str, optional): If a metric is specified, it would measure + the best checkpoint during evaluation. The information about best + checkpoint would be save in best.json. + Options are the evaluation metrics to the test dataset. e.g., + ``bbox_mAP``, ``segm_mAP`` for bbox detection and instance + segmentation. ``AR@100`` for proposal recall. If ``save_best`` is + ``auto``, the first key will be used. The interval of + ``CheckpointHook`` should device EvalHook. Default: None. + rule (str | None): Comparison rule for best score. If set to None, + it will infer a reasonable rule. Default: 'None'. + **eval_kwargs: Evaluation arguments fed into the evaluate function of + the dataset. + """ + + def __init__(self, + dataloader, + start=None, + interval=1, + tmpdir=None, + gpu_collect=False, + save_best=None, + rule=None, + **eval_kwargs): + super().__init__( + dataloader, + start=start, + interval=interval, + save_best=save_best, + rule=rule, + **eval_kwargs) + self.tmpdir = tmpdir + self.gpu_collect = gpu_collect + + def after_train_epoch(self, runner): + if not self.evaluation_flag(runner): + return + + from mmdet.apis import multi_gpu_test + tmpdir = self.tmpdir + if tmpdir is None: + tmpdir = osp.join(runner.work_dir, '.eval_hook') + results = multi_gpu_test( + runner.model, + self.dataloader, + tmpdir=tmpdir, + gpu_collect=self.gpu_collect) + if runner.rank == 0: + print('\n') + key_score = self.evaluate(runner, results) + if self.save_best: + best_score = runner.meta['hook_msgs'].get( + 'best_score', self.init_value_map[self.rule]) + if self.compare_func(key_score, best_score): + best_score = key_score + runner.meta['hook_msgs']['best_score'] = best_score + last_ckpt = runner.meta['hook_msgs']['last_ckpt'] + runner.meta['hook_msgs']['best_ckpt'] = last_ckpt + mmcv.symlink( + last_ckpt, + osp.join(runner.work_dir, + f'best_{self.key_indicator}.pth')) + self.logger.info( + f'Now best checkpoint is {last_ckpt}.' + f'Best {self.key_indicator} is {best_score:0.4f}') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/mean_ap.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/mean_ap.py new file mode 100644 index 00000000..cd881148 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/mean_ap.py @@ -0,0 +1,469 @@ +from multiprocessing import Pool + +import mmcv +import numpy as np +from mmcv.utils import print_log +from terminaltables import AsciiTable + +from .bbox_overlaps import bbox_overlaps +from .class_names import get_classes + + +def average_precision(recalls, precisions, mode='area'): + """Calculate average precision (for single or multiple scales). + + Args: + recalls (ndarray): shape (num_scales, num_dets) or (num_dets, ) + precisions (ndarray): shape (num_scales, num_dets) or (num_dets, ) + mode (str): 'area' or '11points', 'area' means calculating the area + under precision-recall curve, '11points' means calculating + the average precision of recalls at [0, 0.1, ..., 1] + + Returns: + float or ndarray: calculated average precision + """ + no_scale = False + if recalls.ndim == 1: + no_scale = True + recalls = recalls[np.newaxis, :] + precisions = precisions[np.newaxis, :] + assert recalls.shape == precisions.shape and recalls.ndim == 2 + num_scales = recalls.shape[0] + ap = np.zeros(num_scales, dtype=np.float32) + if mode == 'area': + zeros = np.zeros((num_scales, 1), dtype=recalls.dtype) + ones = np.ones((num_scales, 1), dtype=recalls.dtype) + mrec = np.hstack((zeros, recalls, ones)) + mpre = np.hstack((zeros, precisions, zeros)) + for i in range(mpre.shape[1] - 1, 0, -1): + mpre[:, i - 1] = np.maximum(mpre[:, i - 1], mpre[:, i]) + for i in range(num_scales): + ind = np.where(mrec[i, 1:] != mrec[i, :-1])[0] + ap[i] = np.sum( + (mrec[i, ind + 1] - mrec[i, ind]) * mpre[i, ind + 1]) + elif mode == '11points': + for i in range(num_scales): + for thr in np.arange(0, 1 + 1e-3, 0.1): + precs = precisions[i, recalls[i, :] >= thr] + prec = precs.max() if precs.size > 0 else 0 + ap[i] += prec + ap /= 11 + else: + raise ValueError( + 'Unrecognized mode, only "area" and "11points" are supported') + if no_scale: + ap = ap[0] + return ap + + +def tpfp_imagenet(det_bboxes, + gt_bboxes, + gt_bboxes_ignore=None, + default_iou_thr=0.5, + area_ranges=None): + """Check if detected bboxes are true positive or false positive. + + Args: + det_bbox (ndarray): Detected bboxes of this image, of shape (m, 5). + gt_bboxes (ndarray): GT bboxes of this image, of shape (n, 4). + gt_bboxes_ignore (ndarray): Ignored gt bboxes of this image, + of shape (k, 4). Default: None + default_iou_thr (float): IoU threshold to be considered as matched for + medium and large bboxes (small ones have special rules). + Default: 0.5. + area_ranges (list[tuple] | None): Range of bbox areas to be evaluated, + in the format [(min1, max1), (min2, max2), ...]. Default: None. + + Returns: + tuple[np.ndarray]: (tp, fp) whose elements are 0 and 1. The shape of + each array is (num_scales, m). + """ + # an indicator of ignored gts + gt_ignore_inds = np.concatenate( + (np.zeros(gt_bboxes.shape[0], dtype=np.bool), + np.ones(gt_bboxes_ignore.shape[0], dtype=np.bool))) + # stack gt_bboxes and gt_bboxes_ignore for convenience + gt_bboxes = np.vstack((gt_bboxes, gt_bboxes_ignore)) + + num_dets = det_bboxes.shape[0] + num_gts = gt_bboxes.shape[0] + if area_ranges is None: + area_ranges = [(None, None)] + num_scales = len(area_ranges) + # tp and fp are of shape (num_scales, num_gts), each row is tp or fp + # of a certain scale. + tp = np.zeros((num_scales, num_dets), dtype=np.float32) + fp = np.zeros((num_scales, num_dets), dtype=np.float32) + if gt_bboxes.shape[0] == 0: + if area_ranges == [(None, None)]: + fp[...] = 1 + else: + det_areas = (det_bboxes[:, 2] - det_bboxes[:, 0]) * ( + det_bboxes[:, 3] - det_bboxes[:, 1]) + for i, (min_area, max_area) in enumerate(area_ranges): + fp[i, (det_areas >= min_area) & (det_areas < max_area)] = 1 + return tp, fp + ious = bbox_overlaps(det_bboxes, gt_bboxes - 1) + gt_w = gt_bboxes[:, 2] - gt_bboxes[:, 0] + gt_h = gt_bboxes[:, 3] - gt_bboxes[:, 1] + iou_thrs = np.minimum((gt_w * gt_h) / ((gt_w + 10.0) * (gt_h + 10.0)), + default_iou_thr) + # sort all detections by scores in descending order + sort_inds = np.argsort(-det_bboxes[:, -1]) + for k, (min_area, max_area) in enumerate(area_ranges): + gt_covered = np.zeros(num_gts, dtype=bool) + # if no area range is specified, gt_area_ignore is all False + if min_area is None: + gt_area_ignore = np.zeros_like(gt_ignore_inds, dtype=bool) + else: + gt_areas = gt_w * gt_h + gt_area_ignore = (gt_areas < min_area) | (gt_areas >= max_area) + for i in sort_inds: + max_iou = -1 + matched_gt = -1 + # find best overlapped available gt + for j in range(num_gts): + # different from PASCAL VOC: allow finding other gts if the + # best overlaped ones are already matched by other det bboxes + if gt_covered[j]: + continue + elif ious[i, j] >= iou_thrs[j] and ious[i, j] > max_iou: + max_iou = ious[i, j] + matched_gt = j + # there are 4 cases for a det bbox: + # 1. it matches a gt, tp = 1, fp = 0 + # 2. it matches an ignored gt, tp = 0, fp = 0 + # 3. it matches no gt and within area range, tp = 0, fp = 1 + # 4. it matches no gt but is beyond area range, tp = 0, fp = 0 + if matched_gt >= 0: + gt_covered[matched_gt] = 1 + if not (gt_ignore_inds[matched_gt] + or gt_area_ignore[matched_gt]): + tp[k, i] = 1 + elif min_area is None: + fp[k, i] = 1 + else: + bbox = det_bboxes[i, :4] + area = (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) + if area >= min_area and area < max_area: + fp[k, i] = 1 + return tp, fp + + +def tpfp_default(det_bboxes, + gt_bboxes, + gt_bboxes_ignore=None, + iou_thr=0.5, + area_ranges=None): + """Check if detected bboxes are true positive or false positive. + + Args: + det_bbox (ndarray): Detected bboxes of this image, of shape (m, 5). + gt_bboxes (ndarray): GT bboxes of this image, of shape (n, 4). + gt_bboxes_ignore (ndarray): Ignored gt bboxes of this image, + of shape (k, 4). Default: None + iou_thr (float): IoU threshold to be considered as matched. + Default: 0.5. + area_ranges (list[tuple] | None): Range of bbox areas to be evaluated, + in the format [(min1, max1), (min2, max2), ...]. Default: None. + + Returns: + tuple[np.ndarray]: (tp, fp) whose elements are 0 and 1. The shape of + each array is (num_scales, m). + """ + # an indicator of ignored gts + gt_ignore_inds = np.concatenate( + (np.zeros(gt_bboxes.shape[0], dtype=np.bool), + np.ones(gt_bboxes_ignore.shape[0], dtype=np.bool))) + # stack gt_bboxes and gt_bboxes_ignore for convenience + gt_bboxes = np.vstack((gt_bboxes, gt_bboxes_ignore)) + + num_dets = det_bboxes.shape[0] + num_gts = gt_bboxes.shape[0] + if area_ranges is None: + area_ranges = [(None, None)] + num_scales = len(area_ranges) + # tp and fp are of shape (num_scales, num_gts), each row is tp or fp of + # a certain scale + tp = np.zeros((num_scales, num_dets), dtype=np.float32) + fp = np.zeros((num_scales, num_dets), dtype=np.float32) + + # if there is no gt bboxes in this image, then all det bboxes + # within area range are false positives + if gt_bboxes.shape[0] == 0: + if area_ranges == [(None, None)]: + fp[...] = 1 + else: + det_areas = (det_bboxes[:, 2] - det_bboxes[:, 0]) * ( + det_bboxes[:, 3] - det_bboxes[:, 1]) + for i, (min_area, max_area) in enumerate(area_ranges): + fp[i, (det_areas >= min_area) & (det_areas < max_area)] = 1 + return tp, fp + + ious = bbox_overlaps(det_bboxes, gt_bboxes) + # for each det, the max iou with all gts + ious_max = ious.max(axis=1) + # for each det, which gt overlaps most with it + ious_argmax = ious.argmax(axis=1) + # sort all dets in descending order by scores + sort_inds = np.argsort(-det_bboxes[:, -1]) + for k, (min_area, max_area) in enumerate(area_ranges): + gt_covered = np.zeros(num_gts, dtype=bool) + # if no area range is specified, gt_area_ignore is all False + if min_area is None: + gt_area_ignore = np.zeros_like(gt_ignore_inds, dtype=bool) + else: + gt_areas = (gt_bboxes[:, 2] - gt_bboxes[:, 0]) * ( + gt_bboxes[:, 3] - gt_bboxes[:, 1]) + gt_area_ignore = (gt_areas < min_area) | (gt_areas >= max_area) + for i in sort_inds: + if ious_max[i] >= iou_thr: + matched_gt = ious_argmax[i] + if not (gt_ignore_inds[matched_gt] + or gt_area_ignore[matched_gt]): + if not gt_covered[matched_gt]: + gt_covered[matched_gt] = True + tp[k, i] = 1 + else: + fp[k, i] = 1 + # otherwise ignore this detected bbox, tp = 0, fp = 0 + elif min_area is None: + fp[k, i] = 1 + else: + bbox = det_bboxes[i, :4] + area = (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) + if area >= min_area and area < max_area: + fp[k, i] = 1 + return tp, fp + + +def get_cls_results(det_results, annotations, class_id): + """Get det results and gt information of a certain class. + + Args: + det_results (list[list]): Same as `eval_map()`. + annotations (list[dict]): Same as `eval_map()`. + class_id (int): ID of a specific class. + + Returns: + tuple[list[np.ndarray]]: detected bboxes, gt bboxes, ignored gt bboxes + """ + cls_dets = [img_res[class_id] for img_res in det_results] + cls_gts = [] + cls_gts_ignore = [] + for ann in annotations: + gt_inds = ann['labels'] == class_id + cls_gts.append(ann['bboxes'][gt_inds, :]) + + if ann.get('labels_ignore', None) is not None: + ignore_inds = ann['labels_ignore'] == class_id + cls_gts_ignore.append(ann['bboxes_ignore'][ignore_inds, :]) + else: + cls_gts_ignore.append(np.empty((0, 4), dtype=np.float32)) + + return cls_dets, cls_gts, cls_gts_ignore + + +def eval_map(det_results, + annotations, + scale_ranges=None, + iou_thr=0.5, + dataset=None, + logger=None, + tpfp_fn=None, + nproc=4): + """Evaluate mAP of a dataset. + + Args: + det_results (list[list]): [[cls1_det, cls2_det, ...], ...]. + The outer list indicates images, and the inner list indicates + per-class detected bboxes. + annotations (list[dict]): Ground truth annotations where each item of + the list indicates an image. Keys of annotations are: + + - `bboxes`: numpy array of shape (n, 4) + - `labels`: numpy array of shape (n, ) + - `bboxes_ignore` (optional): numpy array of shape (k, 4) + - `labels_ignore` (optional): numpy array of shape (k, ) + scale_ranges (list[tuple] | None): Range of scales to be evaluated, + in the format [(min1, max1), (min2, max2), ...]. A range of + (32, 64) means the area range between (32**2, 64**2). + Default: None. + iou_thr (float): IoU threshold to be considered as matched. + Default: 0.5. + dataset (list[str] | str | None): Dataset name or dataset classes, + there are minor differences in metrics for different datsets, e.g. + "voc07", "imagenet_det", etc. Default: None. + logger (logging.Logger | str | None): The way to print the mAP + summary. See `mmcv.utils.print_log()` for details. Default: None. + tpfp_fn (callable | None): The function used to determine true/ + false positives. If None, :func:`tpfp_default` is used as default + unless dataset is 'det' or 'vid' (:func:`tpfp_imagenet` in this + case). If it is given as a function, then this function is used + to evaluate tp & fp. Default None. + nproc (int): Processes used for computing TP and FP. + Default: 4. + + Returns: + tuple: (mAP, [dict, dict, ...]) + """ + assert len(det_results) == len(annotations) + + num_imgs = len(det_results) + num_scales = len(scale_ranges) if scale_ranges is not None else 1 + num_classes = len(det_results[0]) # positive class num + area_ranges = ([(rg[0]**2, rg[1]**2) for rg in scale_ranges] + if scale_ranges is not None else None) + + pool = Pool(nproc) + eval_results = [] + for i in range(num_classes): + # get gt and det bboxes of this class + cls_dets, cls_gts, cls_gts_ignore = get_cls_results( + det_results, annotations, i) + # choose proper function according to datasets to compute tp and fp + if tpfp_fn is None: + if dataset in ['det', 'vid']: + tpfp_fn = tpfp_imagenet + else: + tpfp_fn = tpfp_default + if not callable(tpfp_fn): + raise ValueError( + f'tpfp_fn has to be a function or None, but got {tpfp_fn}') + + # compute tp and fp for each image with multiple processes + tpfp = pool.starmap( + tpfp_fn, + zip(cls_dets, cls_gts, cls_gts_ignore, + [iou_thr for _ in range(num_imgs)], + [area_ranges for _ in range(num_imgs)])) + tp, fp = tuple(zip(*tpfp)) + # calculate gt number of each scale + # ignored gts or gts beyond the specific scale are not counted + num_gts = np.zeros(num_scales, dtype=int) + for j, bbox in enumerate(cls_gts): + if area_ranges is None: + num_gts[0] += bbox.shape[0] + else: + gt_areas = (bbox[:, 2] - bbox[:, 0]) * ( + bbox[:, 3] - bbox[:, 1]) + for k, (min_area, max_area) in enumerate(area_ranges): + num_gts[k] += np.sum((gt_areas >= min_area) + & (gt_areas < max_area)) + # sort all det bboxes by score, also sort tp and fp + cls_dets = np.vstack(cls_dets) + num_dets = cls_dets.shape[0] + sort_inds = np.argsort(-cls_dets[:, -1]) + tp = np.hstack(tp)[:, sort_inds] + fp = np.hstack(fp)[:, sort_inds] + # calculate recall and precision with tp and fp + tp = np.cumsum(tp, axis=1) + fp = np.cumsum(fp, axis=1) + eps = np.finfo(np.float32).eps + recalls = tp / np.maximum(num_gts[:, np.newaxis], eps) + precisions = tp / np.maximum((tp + fp), eps) + # calculate AP + if scale_ranges is None: + recalls = recalls[0, :] + precisions = precisions[0, :] + num_gts = num_gts.item() + mode = 'area' if dataset != 'voc07' else '11points' + ap = average_precision(recalls, precisions, mode) + eval_results.append({ + 'num_gts': num_gts, + 'num_dets': num_dets, + 'recall': recalls, + 'precision': precisions, + 'ap': ap + }) + pool.close() + if scale_ranges is not None: + # shape (num_classes, num_scales) + all_ap = np.vstack([cls_result['ap'] for cls_result in eval_results]) + all_num_gts = np.vstack( + [cls_result['num_gts'] for cls_result in eval_results]) + mean_ap = [] + for i in range(num_scales): + if np.any(all_num_gts[:, i] > 0): + mean_ap.append(all_ap[all_num_gts[:, i] > 0, i].mean()) + else: + mean_ap.append(0.0) + else: + aps = [] + for cls_result in eval_results: + if cls_result['num_gts'] > 0: + aps.append(cls_result['ap']) + mean_ap = np.array(aps).mean().item() if aps else 0.0 + + print_map_summary( + mean_ap, eval_results, dataset, area_ranges, logger=logger) + + return mean_ap, eval_results + + +def print_map_summary(mean_ap, + results, + dataset=None, + scale_ranges=None, + logger=None): + """Print mAP and results of each class. + + A table will be printed to show the gts/dets/recall/AP of each class and + the mAP. + + Args: + mean_ap (float): Calculated from `eval_map()`. + results (list[dict]): Calculated from `eval_map()`. + dataset (list[str] | str | None): Dataset name or dataset classes. + scale_ranges (list[tuple] | None): Range of scales to be evaluated. + logger (logging.Logger | str | None): The way to print the mAP + summary. See `mmcv.utils.print_log()` for details. Default: None. + """ + + if logger == 'silent': + return + + if isinstance(results[0]['ap'], np.ndarray): + num_scales = len(results[0]['ap']) + else: + num_scales = 1 + + if scale_ranges is not None: + assert len(scale_ranges) == num_scales + + num_classes = len(results) + + recalls = np.zeros((num_scales, num_classes), dtype=np.float32) + aps = np.zeros((num_scales, num_classes), dtype=np.float32) + num_gts = np.zeros((num_scales, num_classes), dtype=int) + for i, cls_result in enumerate(results): + if cls_result['recall'].size > 0: + recalls[:, i] = np.array(cls_result['recall'], ndmin=2)[:, -1] + aps[:, i] = cls_result['ap'] + num_gts[:, i] = cls_result['num_gts'] + + if dataset is None: + label_names = [str(i) for i in range(num_classes)] + elif mmcv.is_str(dataset): + label_names = get_classes(dataset) + else: + label_names = dataset + + if not isinstance(mean_ap, list): + mean_ap = [mean_ap] + + header = ['class', 'gts', 'dets', 'recall', 'ap'] + for i in range(num_scales): + if scale_ranges is not None: + print_log(f'Scale range {scale_ranges[i]}', logger=logger) + table_data = [header] + for j in range(num_classes): + row_data = [ + label_names[j], num_gts[i, j], results[j]['num_dets'], + f'{recalls[i, j]:.3f}', f'{aps[i, j]:.3f}' + ] + table_data.append(row_data) + table_data.append(['mAP', '', '', '', f'{mean_ap[i]:.3f}']) + table = AsciiTable(table_data) + table.inner_footing_row_border = True + print_log('\n' + table.table, logger=logger) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/recall.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/recall.py new file mode 100644 index 00000000..23ec744f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/evaluation/recall.py @@ -0,0 +1,189 @@ +from collections.abc import Sequence + +import numpy as np +from mmcv.utils import print_log +from terminaltables import AsciiTable + +from .bbox_overlaps import bbox_overlaps + + +def _recalls(all_ious, proposal_nums, thrs): + + img_num = all_ious.shape[0] + total_gt_num = sum([ious.shape[0] for ious in all_ious]) + + _ious = np.zeros((proposal_nums.size, total_gt_num), dtype=np.float32) + for k, proposal_num in enumerate(proposal_nums): + tmp_ious = np.zeros(0) + for i in range(img_num): + ious = all_ious[i][:, :proposal_num].copy() + gt_ious = np.zeros((ious.shape[0])) + if ious.size == 0: + tmp_ious = np.hstack((tmp_ious, gt_ious)) + continue + for j in range(ious.shape[0]): + gt_max_overlaps = ious.argmax(axis=1) + max_ious = ious[np.arange(0, ious.shape[0]), gt_max_overlaps] + gt_idx = max_ious.argmax() + gt_ious[j] = max_ious[gt_idx] + box_idx = gt_max_overlaps[gt_idx] + ious[gt_idx, :] = -1 + ious[:, box_idx] = -1 + tmp_ious = np.hstack((tmp_ious, gt_ious)) + _ious[k, :] = tmp_ious + + _ious = np.fliplr(np.sort(_ious, axis=1)) + recalls = np.zeros((proposal_nums.size, thrs.size)) + for i, thr in enumerate(thrs): + recalls[:, i] = (_ious >= thr).sum(axis=1) / float(total_gt_num) + + return recalls + + +def set_recall_param(proposal_nums, iou_thrs): + """Check proposal_nums and iou_thrs and set correct format.""" + if isinstance(proposal_nums, Sequence): + _proposal_nums = np.array(proposal_nums) + elif isinstance(proposal_nums, int): + _proposal_nums = np.array([proposal_nums]) + else: + _proposal_nums = proposal_nums + + if iou_thrs is None: + _iou_thrs = np.array([0.5]) + elif isinstance(iou_thrs, Sequence): + _iou_thrs = np.array(iou_thrs) + elif isinstance(iou_thrs, float): + _iou_thrs = np.array([iou_thrs]) + else: + _iou_thrs = iou_thrs + + return _proposal_nums, _iou_thrs + + +def eval_recalls(gts, + proposals, + proposal_nums=None, + iou_thrs=0.5, + logger=None): + """Calculate recalls. + + Args: + gts (list[ndarray]): a list of arrays of shape (n, 4) + proposals (list[ndarray]): a list of arrays of shape (k, 4) or (k, 5) + proposal_nums (int | Sequence[int]): Top N proposals to be evaluated. + iou_thrs (float | Sequence[float]): IoU thresholds. Default: 0.5. + logger (logging.Logger | str | None): The way to print the recall + summary. See `mmcv.utils.print_log()` for details. Default: None. + + Returns: + ndarray: recalls of different ious and proposal nums + """ + + img_num = len(gts) + assert img_num == len(proposals) + + proposal_nums, iou_thrs = set_recall_param(proposal_nums, iou_thrs) + + all_ious = [] + for i in range(img_num): + if proposals[i].ndim == 2 and proposals[i].shape[1] == 5: + scores = proposals[i][:, 4] + sort_idx = np.argsort(scores)[::-1] + img_proposal = proposals[i][sort_idx, :] + else: + img_proposal = proposals[i] + prop_num = min(img_proposal.shape[0], proposal_nums[-1]) + if gts[i] is None or gts[i].shape[0] == 0: + ious = np.zeros((0, img_proposal.shape[0]), dtype=np.float32) + else: + ious = bbox_overlaps(gts[i], img_proposal[:prop_num, :4]) + all_ious.append(ious) + all_ious = np.array(all_ious) + recalls = _recalls(all_ious, proposal_nums, iou_thrs) + + print_recall_summary(recalls, proposal_nums, iou_thrs, logger=logger) + return recalls + + +def print_recall_summary(recalls, + proposal_nums, + iou_thrs, + row_idxs=None, + col_idxs=None, + logger=None): + """Print recalls in a table. + + Args: + recalls (ndarray): calculated from `bbox_recalls` + proposal_nums (ndarray or list): top N proposals + iou_thrs (ndarray or list): iou thresholds + row_idxs (ndarray): which rows(proposal nums) to print + col_idxs (ndarray): which cols(iou thresholds) to print + logger (logging.Logger | str | None): The way to print the recall + summary. See `mmcv.utils.print_log()` for details. Default: None. + """ + proposal_nums = np.array(proposal_nums, dtype=np.int32) + iou_thrs = np.array(iou_thrs) + if row_idxs is None: + row_idxs = np.arange(proposal_nums.size) + if col_idxs is None: + col_idxs = np.arange(iou_thrs.size) + row_header = [''] + iou_thrs[col_idxs].tolist() + table_data = [row_header] + for i, num in enumerate(proposal_nums[row_idxs]): + row = [f'{val:.3f}' for val in recalls[row_idxs[i], col_idxs].tolist()] + row.insert(0, num) + table_data.append(row) + table = AsciiTable(table_data) + print_log('\n' + table.table, logger=logger) + + +def plot_num_recall(recalls, proposal_nums): + """Plot Proposal_num-Recalls curve. + + Args: + recalls(ndarray or list): shape (k,) + proposal_nums(ndarray or list): same shape as `recalls` + """ + if isinstance(proposal_nums, np.ndarray): + _proposal_nums = proposal_nums.tolist() + else: + _proposal_nums = proposal_nums + if isinstance(recalls, np.ndarray): + _recalls = recalls.tolist() + else: + _recalls = recalls + + import matplotlib.pyplot as plt + f = plt.figure() + plt.plot([0] + _proposal_nums, [0] + _recalls) + plt.xlabel('Proposal num') + plt.ylabel('Recall') + plt.axis([0, proposal_nums.max(), 0, 1]) + f.show() + + +def plot_iou_recall(recalls, iou_thrs): + """Plot IoU-Recalls curve. + + Args: + recalls(ndarray or list): shape (k,) + iou_thrs(ndarray or list): same shape as `recalls` + """ + if isinstance(iou_thrs, np.ndarray): + _iou_thrs = iou_thrs.tolist() + else: + _iou_thrs = iou_thrs + if isinstance(recalls, np.ndarray): + _recalls = recalls.tolist() + else: + _recalls = recalls + + import matplotlib.pyplot as plt + f = plt.figure() + plt.plot(_iou_thrs + [1.0], _recalls + [0.]) + plt.xlabel('IoU') + plt.ylabel('Recall') + plt.axis([iou_thrs.min(), 1, 0, 1]) + f.show() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/__init__.py new file mode 100644 index 00000000..76589b1f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/__init__.py @@ -0,0 +1,8 @@ +from .pytorch2onnx import (build_model_from_cfg, + generate_inputs_and_wrap_model, + preprocess_example_input) + +__all__ = [ + 'build_model_from_cfg', 'generate_inputs_and_wrap_model', + 'preprocess_example_input' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/pytorch2onnx.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/pytorch2onnx.py new file mode 100644 index 00000000..81759632 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/export/pytorch2onnx.py @@ -0,0 +1,144 @@ +from functools import partial + +import mmcv +import numpy as np +import torch +from mmcv.runner import load_checkpoint + + +def generate_inputs_and_wrap_model(config_path, checkpoint_path, input_config): + """Prepare sample input and wrap model for ONNX export. + + The ONNX export API only accept args, and all inputs should be + torch.Tensor or corresponding types (such as tuple of tensor). + So we should call this function before exporting. This function will: + + 1. generate corresponding inputs which are used to execute the model. + 2. Wrap the model's forward function. + + For example, the MMDet models' forward function has a parameter + ``return_loss:bool``. As we want to set it as False while export API + supports neither bool type or kwargs. So we have to replace the forward + like: ``model.forward = partial(model.forward, return_loss=False)`` + + Args: + config_path (str): the OpenMMLab config for the model we want to + export to ONNX + checkpoint_path (str): Path to the corresponding checkpoint + input_config (dict): the exactly data in this dict depends on the + framework. For MMSeg, we can just declare the input shape, + and generate the dummy data accordingly. However, for MMDet, + we may pass the real img path, or the NMS will return None + as there is no legal bbox. + + Returns: + tuple: (model, tensor_data) wrapped model which can be called by \ + model(*tensor_data) and a list of inputs which are used to execute \ + the model while exporting. + """ + + model = build_model_from_cfg(config_path, checkpoint_path) + one_img, one_meta = preprocess_example_input(input_config) + tensor_data = [one_img] + model.forward = partial( + model.forward, img_metas=[[one_meta]], return_loss=False) + + # pytorch has some bug in pytorch1.3, we have to fix it + # by replacing these existing op + opset_version = 11 + # put the import within the function thus it will not cause import error + # when not using this function + try: + from mmcv.onnx.symbolic import register_extra_symbolics + except ModuleNotFoundError: + raise NotImplementedError('please update mmcv to version>=v1.0.4') + register_extra_symbolics(opset_version) + + return model, tensor_data + + +def build_model_from_cfg(config_path, checkpoint_path): + """Build a model from config and load the given checkpoint. + + Args: + config_path (str): the OpenMMLab config for the model we want to + export to ONNX + checkpoint_path (str): Path to the corresponding checkpoint + + Returns: + torch.nn.Module: the built model + """ + from mmdet.models import build_detector + + cfg = mmcv.Config.fromfile(config_path) + # import modules from string list. + if cfg.get('custom_imports', None): + from mmcv.utils import import_modules_from_strings + import_modules_from_strings(**cfg['custom_imports']) + cfg.model.pretrained = None + cfg.data.test.test_mode = True + + # build the model + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg')) + load_checkpoint(model, checkpoint_path, map_location='cpu') + model.cpu().eval() + return model + + +def preprocess_example_input(input_config): + """Prepare an example input image for ``generate_inputs_and_wrap_model``. + + Args: + input_config (dict): customized config describing the example input. + + Returns: + tuple: (one_img, one_meta), tensor of the example input image and \ + meta information for the example input image. + + Examples: + >>> from mmdet.core.export import preprocess_example_input + >>> input_config = { + >>> 'input_shape': (1,3,224,224), + >>> 'input_path': 'demo/demo.jpg', + >>> 'normalize_cfg': { + >>> 'mean': (123.675, 116.28, 103.53), + >>> 'std': (58.395, 57.12, 57.375) + >>> } + >>> } + >>> one_img, one_meta = preprocess_example_input(input_config) + >>> print(one_img.shape) + torch.Size([1, 3, 224, 224]) + >>> print(one_meta) + {'img_shape': (224, 224, 3), + 'ori_shape': (224, 224, 3), + 'pad_shape': (224, 224, 3), + 'filename': '.png', + 'scale_factor': 1.0, + 'flip': False} + """ + input_path = input_config['input_path'] + input_shape = input_config['input_shape'] + one_img = mmcv.imread(input_path) + one_img = mmcv.imresize(one_img, input_shape[2:][::-1]) + show_img = one_img.copy() + if 'normalize_cfg' in input_config.keys(): + normalize_cfg = input_config['normalize_cfg'] + mean = np.array(normalize_cfg['mean'], dtype=np.float32) + std = np.array(normalize_cfg['std'], dtype=np.float32) + one_img = mmcv.imnormalize(one_img, mean, std) + one_img = one_img.transpose(2, 0, 1) + one_img = torch.from_numpy(one_img).unsqueeze(0).float().requires_grad_( + True) + (_, C, H, W) = input_shape + one_meta = { + 'img_shape': (H, W, C), + 'ori_shape': (H, W, C), + 'pad_shape': (H, W, C), + 'filename': '.png', + 'scale_factor': 1.0, + 'flip': False, + 'show_img': show_img, + } + + return one_img, one_meta diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/__init__.py new file mode 100644 index 00000000..0a68c28b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/__init__.py @@ -0,0 +1,8 @@ +from .deprecated_fp16_utils import \ + DeprecatedFp16OptimizerHook as Fp16OptimizerHook +from .deprecated_fp16_utils import deprecated_auto_fp16 as auto_fp16 +from .deprecated_fp16_utils import deprecated_force_fp32 as force_fp32 +from .deprecated_fp16_utils import \ + deprecated_wrap_fp16_model as wrap_fp16_model + +__all__ = ['auto_fp16', 'force_fp32', 'Fp16OptimizerHook', 'wrap_fp16_model'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/deprecated_fp16_utils.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/deprecated_fp16_utils.py new file mode 100644 index 00000000..1b15b047 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/fp16/deprecated_fp16_utils.py @@ -0,0 +1,47 @@ +import warnings + +from mmcv.runner import (Fp16OptimizerHook, auto_fp16, force_fp32, + wrap_fp16_model) + + +class DeprecatedFp16OptimizerHook(Fp16OptimizerHook): + """A wrapper class for the FP16 optimizer hook. This class wraps + :class:`Fp16OptimizerHook` in `mmcv.runner` and shows a warning that the + :class:`Fp16OptimizerHook` from `mmdet.core` will be deprecated. + + Refer to :class:`Fp16OptimizerHook` in `mmcv.runner` for more details. + + Args: + loss_scale (float): Scale factor multiplied with loss. + """ + + def __init__(*args, **kwargs): + super().__init__(*args, **kwargs) + warnings.warn( + 'Importing Fp16OptimizerHook from "mmdet.core" will be ' + 'deprecated in the future. Please import them from "mmcv.runner" ' + 'instead') + + +def deprecated_auto_fp16(*args, **kwargs): + warnings.warn( + 'Importing auto_fp16 from "mmdet.core" will be ' + 'deprecated in the future. Please import them from "mmcv.runner" ' + 'instead') + return auto_fp16(*args, **kwargs) + + +def deprecated_force_fp32(*args, **kwargs): + warnings.warn( + 'Importing force_fp32 from "mmdet.core" will be ' + 'deprecated in the future. Please import them from "mmcv.runner" ' + 'instead') + return force_fp32(*args, **kwargs) + + +def deprecated_wrap_fp16_model(*args, **kwargs): + warnings.warn( + 'Importing wrap_fp16_model from "mmdet.core" will be ' + 'deprecated in the future. Please import them from "mmcv.runner" ' + 'instead') + wrap_fp16_model(*args, **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/__init__.py new file mode 100644 index 00000000..ab1e88bc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/__init__.py @@ -0,0 +1,8 @@ +from .mask_target import mask_target +from .structures import BaseInstanceMasks, BitmapMasks, PolygonMasks +from .utils import encode_mask_results, split_combined_polys + +__all__ = [ + 'split_combined_polys', 'mask_target', 'BaseInstanceMasks', 'BitmapMasks', + 'PolygonMasks', 'encode_mask_results' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/mask_target.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/mask_target.py new file mode 100644 index 00000000..18e42350 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/mask_target.py @@ -0,0 +1,62 @@ +import numpy as np +import torch +from torch.nn.modules.utils import _pair + + +def mask_target(pos_proposals_list, pos_assigned_gt_inds_list, gt_masks_list, + cfg): + """Compute mask target for positive proposals in multiple images. + + Args: + pos_proposals_list (list[Tensor]): Positive proposals in multiple + images. + pos_assigned_gt_inds_list (list[Tensor]): Assigned GT indices for each + positive proposals. + gt_masks_list (list[:obj:`BaseInstanceMasks`]): Ground truth masks of + each image. + cfg (dict): Config dict that specifies the mask size. + + Returns: + list[Tensor]: Mask target of each image. + """ + cfg_list = [cfg for _ in range(len(pos_proposals_list))] + mask_targets = map(mask_target_single, pos_proposals_list, + pos_assigned_gt_inds_list, gt_masks_list, cfg_list) + mask_targets = list(mask_targets) + if len(mask_targets) > 0: + mask_targets = torch.cat(mask_targets) + return mask_targets + + +def mask_target_single(pos_proposals, pos_assigned_gt_inds, gt_masks, cfg): + """Compute mask target for each positive proposal in the image. + + Args: + pos_proposals (Tensor): Positive proposals. + pos_assigned_gt_inds (Tensor): Assigned GT inds of positive proposals. + gt_masks (:obj:`BaseInstanceMasks`): GT masks in the format of Bitmap + or Polygon. + cfg (dict): Config dict that indicate the mask size. + + Returns: + Tensor: Mask target of each positive proposals in the image. + """ + device = pos_proposals.device + mask_size = _pair(cfg.mask_size) + num_pos = pos_proposals.size(0) + if num_pos > 0: + proposals_np = pos_proposals.cpu().numpy() + maxh, maxw = gt_masks.height, gt_masks.width + proposals_np[:, [0, 2]] = np.clip(proposals_np[:, [0, 2]], 0, maxw) + proposals_np[:, [1, 3]] = np.clip(proposals_np[:, [1, 3]], 0, maxh) + pos_assigned_gt_inds = pos_assigned_gt_inds.cpu().numpy() + + mask_targets = gt_masks.crop_and_resize( + proposals_np, mask_size, device=device, + inds=pos_assigned_gt_inds).to_ndarray() + + mask_targets = torch.from_numpy(mask_targets).float().to(device) + else: + mask_targets = pos_proposals.new_zeros((0, ) + mask_size) + + return mask_targets diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/structures.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/structures.py new file mode 100644 index 00000000..a45e87b1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/structures.py @@ -0,0 +1,828 @@ +from abc import ABCMeta, abstractmethod + +import cv2 +import mmcv +import numpy as np +import pycocotools.mask as maskUtils +import torch +from mmcv.ops.roi_align import roi_align + + +class BaseInstanceMasks(metaclass=ABCMeta): + """Base class for instance masks.""" + + @abstractmethod + def rescale(self, scale, interpolation='nearest'): + """Rescale masks as large as possible while keeping the aspect ratio. + For details can refer to `mmcv.imrescale`. + + Args: + scale (tuple[int]): The maximum size (h, w) of rescaled mask. + interpolation (str): Same as :func:`mmcv.imrescale`. + + Returns: + BaseInstanceMasks: The rescaled masks. + """ + pass + + @abstractmethod + def resize(self, out_shape, interpolation='nearest'): + """Resize masks to the given out_shape. + + Args: + out_shape: Target (h, w) of resized mask. + interpolation (str): See :func:`mmcv.imresize`. + + Returns: + BaseInstanceMasks: The resized masks. + """ + pass + + @abstractmethod + def flip(self, flip_direction='horizontal'): + """Flip masks alone the given direction. + + Args: + flip_direction (str): Either 'horizontal' or 'vertical'. + + Returns: + BaseInstanceMasks: The flipped masks. + """ + pass + + @abstractmethod + def pad(self, out_shape, pad_val): + """Pad masks to the given size of (h, w). + + Args: + out_shape (tuple[int]): Target (h, w) of padded mask. + pad_val (int): The padded value. + + Returns: + BaseInstanceMasks: The padded masks. + """ + pass + + @abstractmethod + def crop(self, bbox): + """Crop each mask by the given bbox. + + Args: + bbox (ndarray): Bbox in format [x1, y1, x2, y2], shape (4, ). + + Return: + BaseInstanceMasks: The cropped masks. + """ + pass + + @abstractmethod + def crop_and_resize(self, + bboxes, + out_shape, + inds, + device, + interpolation='bilinear'): + """Crop and resize masks by the given bboxes. + + This function is mainly used in mask targets computation. + It firstly align mask to bboxes by assigned_inds, then crop mask by the + assigned bbox and resize to the size of (mask_h, mask_w) + + Args: + bboxes (Tensor): Bboxes in format [x1, y1, x2, y2], shape (N, 4) + out_shape (tuple[int]): Target (h, w) of resized mask + inds (ndarray): Indexes to assign masks to each bbox + device (str): Device of bboxes + interpolation (str): See `mmcv.imresize` + + Return: + BaseInstanceMasks: the cropped and resized masks. + """ + pass + + @abstractmethod + def expand(self, expanded_h, expanded_w, top, left): + """see :class:`Expand`.""" + pass + + @property + @abstractmethod + def areas(self): + """ndarray: areas of each instance.""" + pass + + @abstractmethod + def to_ndarray(self): + """Convert masks to the format of ndarray. + + Return: + ndarray: Converted masks in the format of ndarray. + """ + pass + + @abstractmethod + def to_tensor(self, dtype, device): + """Convert masks to the format of Tensor. + + Args: + dtype (str): Dtype of converted mask. + device (torch.device): Device of converted masks. + + Returns: + Tensor: Converted masks in the format of Tensor. + """ + pass + + @abstractmethod + def translate(self, + out_shape, + offset, + direction='horizontal', + fill_val=0, + interpolation='bilinear'): + """Translate the masks. + + Args: + out_shape (tuple[int]): Shape for output mask, format (h, w). + offset (int | float): The offset for translate. + direction (str): The translate direction, either "horizontal" + or "vertical". + fill_val (int | float): Border value. Default 0. + interpolation (str): Same as :func:`mmcv.imtranslate`. + + Returns: + Translated masks. + """ + pass + + def shear(self, + out_shape, + magnitude, + direction='horizontal', + border_value=0, + interpolation='bilinear'): + """Shear the masks. + + Args: + out_shape (tuple[int]): Shape for output mask, format (h, w). + magnitude (int | float): The magnitude used for shear. + direction (str): The shear direction, either "horizontal" + or "vertical". + border_value (int | tuple[int]): Value used in case of a + constant border. Default 0. + interpolation (str): Same as in :func:`mmcv.imshear`. + + Returns: + ndarray: Sheared masks. + """ + pass + + @abstractmethod + def rotate(self, out_shape, angle, center=None, scale=1.0, fill_val=0): + """Rotate the masks. + + Args: + out_shape (tuple[int]): Shape for output mask, format (h, w). + angle (int | float): Rotation angle in degrees. Positive values + mean counter-clockwise rotation. + center (tuple[float], optional): Center point (w, h) of the + rotation in source image. If not specified, the center of + the image will be used. + scale (int | float): Isotropic scale factor. + fill_val (int | float): Border value. Default 0 for masks. + + Returns: + Rotated masks. + """ + pass + + +class BitmapMasks(BaseInstanceMasks): + """This class represents masks in the form of bitmaps. + + Args: + masks (ndarray): ndarray of masks in shape (N, H, W), where N is + the number of objects. + height (int): height of masks + width (int): width of masks + """ + + def __init__(self, masks, height, width): + self.height = height + self.width = width + if len(masks) == 0: + self.masks = np.empty((0, self.height, self.width), dtype=np.uint8) + else: + assert isinstance(masks, (list, np.ndarray)) + if isinstance(masks, list): + assert isinstance(masks[0], np.ndarray) + assert masks[0].ndim == 2 # (H, W) + else: + assert masks.ndim == 3 # (N, H, W) + + self.masks = np.stack(masks).reshape(-1, height, width) + assert self.masks.shape[1] == self.height + assert self.masks.shape[2] == self.width + + def __getitem__(self, index): + """Index the BitmapMask. + + Args: + index (int | ndarray): Indices in the format of integer or ndarray. + + Returns: + :obj:`BitmapMasks`: Indexed bitmap masks. + """ + masks = self.masks[index].reshape(-1, self.height, self.width) + return BitmapMasks(masks, self.height, self.width) + + def __iter__(self): + return iter(self.masks) + + def __repr__(self): + s = self.__class__.__name__ + '(' + s += f'num_masks={len(self.masks)}, ' + s += f'height={self.height}, ' + s += f'width={self.width})' + return s + + def __len__(self): + """Number of masks.""" + return len(self.masks) + + def rescale(self, scale, interpolation='nearest'): + """See :func:`BaseInstanceMasks.rescale`.""" + if len(self.masks) == 0: + new_w, new_h = mmcv.rescale_size((self.width, self.height), scale) + rescaled_masks = np.empty((0, new_h, new_w), dtype=np.uint8) + else: + rescaled_masks = np.stack([ + mmcv.imrescale(mask, scale, interpolation=interpolation) + for mask in self.masks + ]) + height, width = rescaled_masks.shape[1:] + return BitmapMasks(rescaled_masks, height, width) + + def resize(self, out_shape, interpolation='nearest'): + """See :func:`BaseInstanceMasks.resize`.""" + if len(self.masks) == 0: + resized_masks = np.empty((0, *out_shape), dtype=np.uint8) + else: + resized_masks = np.stack([ + mmcv.imresize( + mask, out_shape[::-1], interpolation=interpolation) + for mask in self.masks + ]) + return BitmapMasks(resized_masks, *out_shape) + + def flip(self, flip_direction='horizontal'): + """See :func:`BaseInstanceMasks.flip`.""" + assert flip_direction in ('horizontal', 'vertical', 'diagonal') + + if len(self.masks) == 0: + flipped_masks = self.masks + else: + flipped_masks = np.stack([ + mmcv.imflip(mask, direction=flip_direction) + for mask in self.masks + ]) + return BitmapMasks(flipped_masks, self.height, self.width) + + def pad(self, out_shape, pad_val=0): + """See :func:`BaseInstanceMasks.pad`.""" + if len(self.masks) == 0: + padded_masks = np.empty((0, *out_shape), dtype=np.uint8) + else: + padded_masks = np.stack([ + mmcv.impad(mask, shape=out_shape, pad_val=pad_val) + for mask in self.masks + ]) + return BitmapMasks(padded_masks, *out_shape) + + def crop(self, bbox): + """See :func:`BaseInstanceMasks.crop`.""" + assert isinstance(bbox, np.ndarray) + assert bbox.ndim == 1 + + # clip the boundary + bbox = bbox.copy() + bbox[0::2] = np.clip(bbox[0::2], 0, self.width) + bbox[1::2] = np.clip(bbox[1::2], 0, self.height) + x1, y1, x2, y2 = bbox + w = np.maximum(x2 - x1, 1) + h = np.maximum(y2 - y1, 1) + + if len(self.masks) == 0: + cropped_masks = np.empty((0, h, w), dtype=np.uint8) + else: + cropped_masks = self.masks[:, y1:y1 + h, x1:x1 + w] + return BitmapMasks(cropped_masks, h, w) + + def crop_and_resize(self, + bboxes, + out_shape, + inds, + device='cpu', + interpolation='bilinear'): + """See :func:`BaseInstanceMasks.crop_and_resize`.""" + if len(self.masks) == 0: + empty_masks = np.empty((0, *out_shape), dtype=np.uint8) + return BitmapMasks(empty_masks, *out_shape) + + # convert bboxes to tensor + if isinstance(bboxes, np.ndarray): + bboxes = torch.from_numpy(bboxes).to(device=device) + if isinstance(inds, np.ndarray): + inds = torch.from_numpy(inds).to(device=device) + + num_bbox = bboxes.shape[0] + fake_inds = torch.arange( + num_bbox, device=device).to(dtype=bboxes.dtype)[:, None] + rois = torch.cat([fake_inds, bboxes], dim=1) # Nx5 + rois = rois.to(device=device) + if num_bbox > 0: + gt_masks_th = torch.from_numpy(self.masks).to(device).index_select( + 0, inds).to(dtype=rois.dtype) + targets = roi_align(gt_masks_th[:, None, :, :], rois, out_shape, + 1.0, 0, 'avg', True).squeeze(1) + resized_masks = (targets >= 0.5).cpu().numpy() + else: + resized_masks = [] + return BitmapMasks(resized_masks, *out_shape) + + def expand(self, expanded_h, expanded_w, top, left): + """See :func:`BaseInstanceMasks.expand`.""" + if len(self.masks) == 0: + expanded_mask = np.empty((0, expanded_h, expanded_w), + dtype=np.uint8) + else: + expanded_mask = np.zeros((len(self), expanded_h, expanded_w), + dtype=np.uint8) + expanded_mask[:, top:top + self.height, + left:left + self.width] = self.masks + return BitmapMasks(expanded_mask, expanded_h, expanded_w) + + def translate(self, + out_shape, + offset, + direction='horizontal', + fill_val=0, + interpolation='bilinear'): + """Translate the BitmapMasks. + + Args: + out_shape (tuple[int]): Shape for output mask, format (h, w). + offset (int | float): The offset for translate. + direction (str): The translate direction, either "horizontal" + or "vertical". + fill_val (int | float): Border value. Default 0 for masks. + interpolation (str): Same as :func:`mmcv.imtranslate`. + + Returns: + BitmapMasks: Translated BitmapMasks. + """ + if len(self.masks) == 0: + translated_masks = np.empty((0, *out_shape), dtype=np.uint8) + else: + translated_masks = mmcv.imtranslate( + self.masks.transpose((1, 2, 0)), + offset, + direction, + border_value=fill_val, + interpolation=interpolation) + if translated_masks.ndim == 2: + translated_masks = translated_masks[:, :, None] + translated_masks = translated_masks.transpose( + (2, 0, 1)).astype(self.masks.dtype) + return BitmapMasks(translated_masks, *out_shape) + + def shear(self, + out_shape, + magnitude, + direction='horizontal', + border_value=0, + interpolation='bilinear'): + """Shear the BitmapMasks. + + Args: + out_shape (tuple[int]): Shape for output mask, format (h, w). + magnitude (int | float): The magnitude used for shear. + direction (str): The shear direction, either "horizontal" + or "vertical". + border_value (int | tuple[int]): Value used in case of a + constant border. + interpolation (str): Same as in :func:`mmcv.imshear`. + + Returns: + BitmapMasks: The sheared masks. + """ + if len(self.masks) == 0: + sheared_masks = np.empty((0, *out_shape), dtype=np.uint8) + else: + sheared_masks = mmcv.imshear( + self.masks.transpose((1, 2, 0)), + magnitude, + direction, + border_value=border_value, + interpolation=interpolation) + if sheared_masks.ndim == 2: + sheared_masks = sheared_masks[:, :, None] + sheared_masks = sheared_masks.transpose( + (2, 0, 1)).astype(self.masks.dtype) + return BitmapMasks(sheared_masks, *out_shape) + + def rotate(self, out_shape, angle, center=None, scale=1.0, fill_val=0): + """Rotate the BitmapMasks. + + Args: + out_shape (tuple[int]): Shape for output mask, format (h, w). + angle (int | float): Rotation angle in degrees. Positive values + mean counter-clockwise rotation. + center (tuple[float], optional): Center point (w, h) of the + rotation in source image. If not specified, the center of + the image will be used. + scale (int | float): Isotropic scale factor. + fill_val (int | float): Border value. Default 0 for masks. + + Returns: + BitmapMasks: Rotated BitmapMasks. + """ + if len(self.masks) == 0: + rotated_masks = np.empty((0, *out_shape), dtype=self.masks.dtype) + else: + rotated_masks = mmcv.imrotate( + self.masks.transpose((1, 2, 0)), + angle, + center=center, + scale=scale, + border_value=fill_val) + if rotated_masks.ndim == 2: + # case when only one mask, (h, w) + rotated_masks = rotated_masks[:, :, None] # (h, w, 1) + rotated_masks = rotated_masks.transpose( + (2, 0, 1)).astype(self.masks.dtype) + return BitmapMasks(rotated_masks, *out_shape) + + @property + def areas(self): + """See :py:attr:`BaseInstanceMasks.areas`.""" + return self.masks.sum((1, 2)) + + def to_ndarray(self): + """See :func:`BaseInstanceMasks.to_ndarray`.""" + return self.masks + + def to_tensor(self, dtype, device): + """See :func:`BaseInstanceMasks.to_tensor`.""" + return torch.tensor(self.masks, dtype=dtype, device=device) + + +class PolygonMasks(BaseInstanceMasks): + """This class represents masks in the form of polygons. + + Polygons is a list of three levels. The first level of the list + corresponds to objects, the second level to the polys that compose the + object, the third level to the poly coordinates + + Args: + masks (list[list[ndarray]]): The first level of the list + corresponds to objects, the second level to the polys that + compose the object, the third level to the poly coordinates + height (int): height of masks + width (int): width of masks + """ + + def __init__(self, masks, height, width): + assert isinstance(masks, list) + if len(masks) > 0: + assert isinstance(masks[0], list) + assert isinstance(masks[0][0], np.ndarray) + + self.height = height + self.width = width + self.masks = masks + + def __getitem__(self, index): + """Index the polygon masks. + + Args: + index (ndarray | List): The indices. + + Returns: + :obj:`PolygonMasks`: The indexed polygon masks. + """ + if isinstance(index, np.ndarray): + index = index.tolist() + if isinstance(index, list): + masks = [self.masks[i] for i in index] + else: + try: + masks = self.masks[index] + except Exception: + raise ValueError( + f'Unsupported input of type {type(index)} for indexing!') + if len(masks) and isinstance(masks[0], np.ndarray): + masks = [masks] # ensure a list of three levels + return PolygonMasks(masks, self.height, self.width) + + def __iter__(self): + return iter(self.masks) + + def __repr__(self): + s = self.__class__.__name__ + '(' + s += f'num_masks={len(self.masks)}, ' + s += f'height={self.height}, ' + s += f'width={self.width})' + return s + + def __len__(self): + """Number of masks.""" + return len(self.masks) + + def rescale(self, scale, interpolation=None): + """see :func:`BaseInstanceMasks.rescale`""" + new_w, new_h = mmcv.rescale_size((self.width, self.height), scale) + if len(self.masks) == 0: + rescaled_masks = PolygonMasks([], new_h, new_w) + else: + rescaled_masks = self.resize((new_h, new_w)) + return rescaled_masks + + def resize(self, out_shape, interpolation=None): + """see :func:`BaseInstanceMasks.resize`""" + if len(self.masks) == 0: + resized_masks = PolygonMasks([], *out_shape) + else: + h_scale = out_shape[0] / self.height + w_scale = out_shape[1] / self.width + resized_masks = [] + for poly_per_obj in self.masks: + resized_poly = [] + for p in poly_per_obj: + p = p.copy() + p[0::2] *= w_scale + p[1::2] *= h_scale + resized_poly.append(p) + resized_masks.append(resized_poly) + resized_masks = PolygonMasks(resized_masks, *out_shape) + return resized_masks + + def flip(self, flip_direction='horizontal'): + """see :func:`BaseInstanceMasks.flip`""" + assert flip_direction in ('horizontal', 'vertical', 'diagonal') + if len(self.masks) == 0: + flipped_masks = PolygonMasks([], self.height, self.width) + else: + flipped_masks = [] + for poly_per_obj in self.masks: + flipped_poly_per_obj = [] + for p in poly_per_obj: + p = p.copy() + if flip_direction == 'horizontal': + p[0::2] = self.width - p[0::2] + elif flip_direction == 'vertical': + p[1::2] = self.height - p[1::2] + else: + p[0::2] = self.width - p[0::2] + p[1::2] = self.height - p[1::2] + flipped_poly_per_obj.append(p) + flipped_masks.append(flipped_poly_per_obj) + flipped_masks = PolygonMasks(flipped_masks, self.height, + self.width) + return flipped_masks + + def crop(self, bbox): + """see :func:`BaseInstanceMasks.crop`""" + assert isinstance(bbox, np.ndarray) + assert bbox.ndim == 1 + + # clip the boundary + bbox = bbox.copy() + bbox[0::2] = np.clip(bbox[0::2], 0, self.width) + bbox[1::2] = np.clip(bbox[1::2], 0, self.height) + x1, y1, x2, y2 = bbox + w = np.maximum(x2 - x1, 1) + h = np.maximum(y2 - y1, 1) + + if len(self.masks) == 0: + cropped_masks = PolygonMasks([], h, w) + else: + cropped_masks = [] + for poly_per_obj in self.masks: + cropped_poly_per_obj = [] + for p in poly_per_obj: + # pycocotools will clip the boundary + p = p.copy() + p[0::2] -= bbox[0] + p[1::2] -= bbox[1] + cropped_poly_per_obj.append(p) + cropped_masks.append(cropped_poly_per_obj) + cropped_masks = PolygonMasks(cropped_masks, h, w) + return cropped_masks + + def pad(self, out_shape, pad_val=0): + """padding has no effect on polygons`""" + return PolygonMasks(self.masks, *out_shape) + + def expand(self, *args, **kwargs): + """TODO: Add expand for polygon""" + raise NotImplementedError + + def crop_and_resize(self, + bboxes, + out_shape, + inds, + device='cpu', + interpolation='bilinear'): + """see :func:`BaseInstanceMasks.crop_and_resize`""" + out_h, out_w = out_shape + if len(self.masks) == 0: + return PolygonMasks([], out_h, out_w) + + resized_masks = [] + for i in range(len(bboxes)): + mask = self.masks[inds[i]] + bbox = bboxes[i, :] + x1, y1, x2, y2 = bbox + w = np.maximum(x2 - x1, 1) + h = np.maximum(y2 - y1, 1) + h_scale = out_h / max(h, 0.1) # avoid too large scale + w_scale = out_w / max(w, 0.1) + + resized_mask = [] + for p in mask: + p = p.copy() + # crop + # pycocotools will clip the boundary + p[0::2] -= bbox[0] + p[1::2] -= bbox[1] + + # resize + p[0::2] *= w_scale + p[1::2] *= h_scale + resized_mask.append(p) + resized_masks.append(resized_mask) + return PolygonMasks(resized_masks, *out_shape) + + def translate(self, + out_shape, + offset, + direction='horizontal', + fill_val=None, + interpolation=None): + """Translate the PolygonMasks.""" + assert fill_val is None or fill_val == 0, 'Here fill_val is not '\ + f'used, and defaultly should be None or 0. got {fill_val}.' + if len(self.masks) == 0: + translated_masks = PolygonMasks([], *out_shape) + else: + translated_masks = [] + for poly_per_obj in self.masks: + translated_poly_per_obj = [] + for p in poly_per_obj: + p = p.copy() + if direction == 'horizontal': + p[0::2] = np.clip(p[0::2] + offset, 0, out_shape[1]) + elif direction == 'vertical': + p[1::2] = np.clip(p[1::2] + offset, 0, out_shape[0]) + translated_poly_per_obj.append(p) + translated_masks.append(translated_poly_per_obj) + translated_masks = PolygonMasks(translated_masks, *out_shape) + return translated_masks + + def shear(self, + out_shape, + magnitude, + direction='horizontal', + border_value=0, + interpolation='bilinear'): + """See :func:`BaseInstanceMasks.shear`.""" + if len(self.masks) == 0: + sheared_masks = PolygonMasks([], *out_shape) + else: + sheared_masks = [] + if direction == 'horizontal': + shear_matrix = np.stack([[1, magnitude], + [0, 1]]).astype(np.float32) + elif direction == 'vertical': + shear_matrix = np.stack([[1, 0], [magnitude, + 1]]).astype(np.float32) + for poly_per_obj in self.masks: + sheared_poly = [] + for p in poly_per_obj: + p = np.stack([p[0::2], p[1::2]], axis=0) # [2, n] + new_coords = np.matmul(shear_matrix, p) # [2, n] + new_coords[0, :] = np.clip(new_coords[0, :], 0, + out_shape[1]) + new_coords[1, :] = np.clip(new_coords[1, :], 0, + out_shape[0]) + sheared_poly.append( + new_coords.transpose((1, 0)).reshape(-1)) + sheared_masks.append(sheared_poly) + sheared_masks = PolygonMasks(sheared_masks, *out_shape) + return sheared_masks + + def rotate(self, out_shape, angle, center=None, scale=1.0, fill_val=0): + """See :func:`BaseInstanceMasks.rotate`.""" + if len(self.masks) == 0: + rotated_masks = PolygonMasks([], *out_shape) + else: + rotated_masks = [] + rotate_matrix = cv2.getRotationMatrix2D(center, -angle, scale) + for poly_per_obj in self.masks: + rotated_poly = [] + for p in poly_per_obj: + p = p.copy() + coords = np.stack([p[0::2], p[1::2]], axis=1) # [n, 2] + # pad 1 to convert from format [x, y] to homogeneous + # coordinates format [x, y, 1] + coords = np.concatenate( + (coords, np.ones((coords.shape[0], 1), coords.dtype)), + axis=1) # [n, 3] + rotated_coords = np.matmul( + rotate_matrix[None, :, :], + coords[:, :, None])[..., 0] # [n, 2, 1] -> [n, 2] + rotated_coords[:, 0] = np.clip(rotated_coords[:, 0], 0, + out_shape[1]) + rotated_coords[:, 1] = np.clip(rotated_coords[:, 1], 0, + out_shape[0]) + rotated_poly.append(rotated_coords.reshape(-1)) + rotated_masks.append(rotated_poly) + rotated_masks = PolygonMasks(rotated_masks, *out_shape) + return rotated_masks + + def to_bitmap(self): + """convert polygon masks to bitmap masks.""" + bitmap_masks = self.to_ndarray() + return BitmapMasks(bitmap_masks, self.height, self.width) + + @property + def areas(self): + """Compute areas of masks. + + This func is modified from `detectron2 + `_. + The function only works with Polygons using the shoelace formula. + + Return: + ndarray: areas of each instance + """ # noqa: W501 + area = [] + for polygons_per_obj in self.masks: + area_per_obj = 0 + for p in polygons_per_obj: + area_per_obj += self._polygon_area(p[0::2], p[1::2]) + area.append(area_per_obj) + return np.asarray(area) + + def _polygon_area(self, x, y): + """Compute the area of a component of a polygon. + + Using the shoelace formula: + https://stackoverflow.com/questions/24467972/calculate-area-of-polygon-given-x-y-coordinates + + Args: + x (ndarray): x coordinates of the component + y (ndarray): y coordinates of the component + + Return: + float: the are of the component + """ # noqa: 501 + return 0.5 * np.abs( + np.dot(x, np.roll(y, 1)) - np.dot(y, np.roll(x, 1))) + + def to_ndarray(self): + """Convert masks to the format of ndarray.""" + if len(self.masks) == 0: + return np.empty((0, self.height, self.width), dtype=np.uint8) + bitmap_masks = [] + for poly_per_obj in self.masks: + bitmap_masks.append( + polygon_to_bitmap(poly_per_obj, self.height, self.width)) + return np.stack(bitmap_masks) + + def to_tensor(self, dtype, device): + """See :func:`BaseInstanceMasks.to_tensor`.""" + if len(self.masks) == 0: + return torch.empty((0, self.height, self.width), + dtype=dtype, + device=device) + ndarray_masks = self.to_ndarray() + return torch.tensor(ndarray_masks, dtype=dtype, device=device) + + +def polygon_to_bitmap(polygons, height, width): + """Convert masks from the form of polygons to bitmaps. + + Args: + polygons (list[ndarray]): masks in polygon representation + height (int): mask height + width (int): mask width + + Return: + ndarray: the converted masks in bitmap representation + """ + rles = maskUtils.frPyObjects(polygons, height, width) + rle = maskUtils.merge(rles) + bitmap_mask = maskUtils.decode(rle).astype(np.bool) + return bitmap_mask diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/utils.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/utils.py new file mode 100644 index 00000000..c8820829 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/mask/utils.py @@ -0,0 +1,63 @@ +import mmcv +import numpy as np +import pycocotools.mask as mask_util + + +def split_combined_polys(polys, poly_lens, polys_per_mask): + """Split the combined 1-D polys into masks. + + A mask is represented as a list of polys, and a poly is represented as + a 1-D array. In dataset, all masks are concatenated into a single 1-D + tensor. Here we need to split the tensor into original representations. + + Args: + polys (list): a list (length = image num) of 1-D tensors + poly_lens (list): a list (length = image num) of poly length + polys_per_mask (list): a list (length = image num) of poly number + of each mask + + Returns: + list: a list (length = image num) of list (length = mask num) of \ + list (length = poly num) of numpy array. + """ + mask_polys_list = [] + for img_id in range(len(polys)): + polys_single = polys[img_id] + polys_lens_single = poly_lens[img_id].tolist() + polys_per_mask_single = polys_per_mask[img_id].tolist() + + split_polys = mmcv.slice_list(polys_single, polys_lens_single) + mask_polys = mmcv.slice_list(split_polys, polys_per_mask_single) + mask_polys_list.append(mask_polys) + return mask_polys_list + + +# TODO: move this function to more proper place +def encode_mask_results(mask_results): + """Encode bitmap mask to RLE code. + + Args: + mask_results (list | tuple[list]): bitmap mask results. + In mask scoring rcnn, mask_results is a tuple of (segm_results, + segm_cls_score). + + Returns: + list | tuple: RLE encoded mask. + """ + if isinstance(mask_results, tuple): # mask scoring + cls_segms, cls_mask_scores = mask_results + else: + cls_segms = mask_results + num_classes = len(cls_segms) + encoded_mask_results = [[] for _ in range(num_classes)] + for i in range(len(cls_segms)): + for cls_segm in cls_segms[i]: + encoded_mask_results[i].append( + mask_util.encode( + np.array( + cls_segm[:, :, np.newaxis], order='F', + dtype='uint8'))[0]) # encoded with RLE + if isinstance(mask_results, tuple): + return encoded_mask_results, cls_mask_scores + else: + return encoded_mask_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/__init__.py new file mode 100644 index 00000000..880b3f06 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/__init__.py @@ -0,0 +1,8 @@ +from .bbox_nms import fast_nms, multiclass_nms +from .merge_augs import (merge_aug_bboxes, merge_aug_masks, + merge_aug_proposals, merge_aug_scores) + +__all__ = [ + 'multiclass_nms', 'merge_aug_proposals', 'merge_aug_bboxes', + 'merge_aug_scores', 'merge_aug_masks', 'fast_nms' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/bbox_nms.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/bbox_nms.py new file mode 100644 index 00000000..c43aea93 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/bbox_nms.py @@ -0,0 +1,157 @@ +import torch +from mmcv.ops.nms import batched_nms + +from mmdet.core.bbox.iou_calculators import bbox_overlaps + + +def multiclass_nms(multi_bboxes, + multi_scores, + score_thr, + nms_cfg, + max_num=-1, + score_factors=None, + return_inds=False): + """NMS for multi-class bboxes. + + Args: + multi_bboxes (Tensor): shape (n, #class*4) or (n, 4) + multi_scores (Tensor): shape (n, #class), where the last column + contains scores of the background class, but this will be ignored. + score_thr (float): bbox threshold, bboxes with scores lower than it + will not be considered. + nms_thr (float): NMS IoU threshold + max_num (int, optional): if there are more than max_num bboxes after + NMS, only top max_num will be kept. Default to -1. + score_factors (Tensor, optional): The factors multiplied to scores + before applying NMS. Default to None. + return_inds (bool, optional): Whether return the indices of kept + bboxes. Default to False. + + Returns: + tuple: (bboxes, labels, indices (optional)), tensors of shape (k, 5), + (k), and (k). Labels are 0-based. + """ + num_classes = multi_scores.size(1) - 1 + # exclude background category + if multi_bboxes.shape[1] > 4: + bboxes = multi_bboxes.view(multi_scores.size(0), -1, 4) + else: + bboxes = multi_bboxes[:, None].expand( + multi_scores.size(0), num_classes, 4) + + scores = multi_scores[:, :-1] + + labels = torch.arange(num_classes, dtype=torch.long) + labels = labels.view(1, -1).expand_as(scores) + + bboxes = bboxes.reshape(-1, 4) + scores = scores.reshape(-1) + labels = labels.reshape(-1) + + # remove low scoring boxes + valid_mask = scores > score_thr + # multiply score_factor after threshold to preserve more bboxes, improve + # mAP by 1% for YOLOv3 + if score_factors is not None: + # expand the shape to match original shape of score + score_factors = score_factors.view(-1, 1).expand( + multi_scores.size(0), num_classes) + score_factors = score_factors.reshape(-1) + scores = scores * score_factors + inds = valid_mask.nonzero(as_tuple=False).squeeze(1) + bboxes, scores, labels = bboxes[inds], scores[inds], labels[inds] + if inds.numel() == 0: + if torch.onnx.is_in_onnx_export(): + raise RuntimeError('[ONNX Error] Can not record NMS ' + 'as it has not been executed this time') + if return_inds: + return bboxes, labels, inds + else: + return bboxes, labels + + # TODO: add size check before feed into batched_nms + dets, keep = batched_nms(bboxes, scores, labels, nms_cfg) + + if max_num > 0: + dets = dets[:max_num] + keep = keep[:max_num] + + if return_inds: + return dets, labels[keep], keep + else: + return dets, labels[keep] + + +def fast_nms(multi_bboxes, + multi_scores, + multi_coeffs, + score_thr, + iou_thr, + top_k, + max_num=-1): + """Fast NMS in `YOLACT `_. + + Fast NMS allows already-removed detections to suppress other detections so + that every instance can be decided to be kept or discarded in parallel, + which is not possible in traditional NMS. This relaxation allows us to + implement Fast NMS entirely in standard GPU-accelerated matrix operations. + + Args: + multi_bboxes (Tensor): shape (n, #class*4) or (n, 4) + multi_scores (Tensor): shape (n, #class+1), where the last column + contains scores of the background class, but this will be ignored. + multi_coeffs (Tensor): shape (n, #class*coeffs_dim). + score_thr (float): bbox threshold, bboxes with scores lower than it + will not be considered. + iou_thr (float): IoU threshold to be considered as conflicted. + top_k (int): if there are more than top_k bboxes before NMS, + only top top_k will be kept. + max_num (int): if there are more than max_num bboxes after NMS, + only top max_num will be kept. If -1, keep all the bboxes. + Default: -1. + + Returns: + tuple: (bboxes, labels, coefficients), tensors of shape (k, 5), (k, 1), + and (k, coeffs_dim). Labels are 0-based. + """ + + scores = multi_scores[:, :-1].t() # [#class, n] + scores, idx = scores.sort(1, descending=True) + + idx = idx[:, :top_k].contiguous() + scores = scores[:, :top_k] # [#class, topk] + num_classes, num_dets = idx.size() + boxes = multi_bboxes[idx.view(-1), :].view(num_classes, num_dets, 4) + coeffs = multi_coeffs[idx.view(-1), :].view(num_classes, num_dets, -1) + + iou = bbox_overlaps(boxes, boxes) # [#class, topk, topk] + iou.triu_(diagonal=1) + iou_max, _ = iou.max(dim=1) + + # Now just filter out the ones higher than the threshold + keep = iou_max <= iou_thr + + # Second thresholding introduces 0.2 mAP gain at negligible time cost + keep *= scores > score_thr + + # Assign each kept detection to its corresponding class + classes = torch.arange( + num_classes, device=boxes.device)[:, None].expand_as(keep) + classes = classes[keep] + + boxes = boxes[keep] + coeffs = coeffs[keep] + scores = scores[keep] + + # Only keep the top max_num highest scores across all classes + scores, idx = scores.sort(0, descending=True) + if max_num > 0: + idx = idx[:max_num] + scores = scores[:max_num] + + classes = classes[idx] + boxes = boxes[idx] + coeffs = coeffs[idx] + + cls_dets = torch.cat([boxes, scores[:, None]], dim=1) + return cls_dets, classes, coeffs diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/merge_augs.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/merge_augs.py new file mode 100644 index 00000000..167093eb --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/post_processing/merge_augs.py @@ -0,0 +1,117 @@ +import numpy as np +import torch +from mmcv.ops import nms + +from ..bbox import bbox_mapping_back + + +def merge_aug_proposals(aug_proposals, img_metas, rpn_test_cfg): + """Merge augmented proposals (multiscale, flip, etc.) + + Args: + aug_proposals (list[Tensor]): proposals from different testing + schemes, shape (n, 5). Note that they are not rescaled to the + original image size. + + img_metas (list[dict]): list of image info dict where each dict has: + 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + + rpn_test_cfg (dict): rpn test config. + + Returns: + Tensor: shape (n, 4), proposals corresponding to original image scale. + """ + recovered_proposals = [] + for proposals, img_info in zip(aug_proposals, img_metas): + img_shape = img_info['img_shape'] + scale_factor = img_info['scale_factor'] + flip = img_info['flip'] + flip_direction = img_info['flip_direction'] + _proposals = proposals.clone() + _proposals[:, :4] = bbox_mapping_back(_proposals[:, :4], img_shape, + scale_factor, flip, + flip_direction) + recovered_proposals.append(_proposals) + aug_proposals = torch.cat(recovered_proposals, dim=0) + merged_proposals, _ = nms(aug_proposals[:, :4].contiguous(), + aug_proposals[:, -1].contiguous(), + rpn_test_cfg.nms_thr) + scores = merged_proposals[:, 4] + _, order = scores.sort(0, descending=True) + num = min(rpn_test_cfg.max_num, merged_proposals.shape[0]) + order = order[:num] + merged_proposals = merged_proposals[order, :] + return merged_proposals + + +def merge_aug_bboxes(aug_bboxes, aug_scores, img_metas, rcnn_test_cfg): + """Merge augmented detection bboxes and scores. + + Args: + aug_bboxes (list[Tensor]): shape (n, 4*#class) + aug_scores (list[Tensor] or None): shape (n, #class) + img_shapes (list[Tensor]): shape (3, ). + rcnn_test_cfg (dict): rcnn test config. + + Returns: + tuple: (bboxes, scores) + """ + recovered_bboxes = [] + for bboxes, img_info in zip(aug_bboxes, img_metas): + img_shape = img_info[0]['img_shape'] + scale_factor = img_info[0]['scale_factor'] + flip = img_info[0]['flip'] + flip_direction = img_info[0]['flip_direction'] + bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip, + flip_direction) + recovered_bboxes.append(bboxes) + bboxes = torch.stack(recovered_bboxes).mean(dim=0) + if aug_scores is None: + return bboxes + else: + scores = torch.stack(aug_scores).mean(dim=0) + return bboxes, scores + + +def merge_aug_scores(aug_scores): + """Merge augmented bbox scores.""" + if isinstance(aug_scores[0], torch.Tensor): + return torch.mean(torch.stack(aug_scores), dim=0) + else: + return np.mean(aug_scores, axis=0) + + +def merge_aug_masks(aug_masks, img_metas, rcnn_test_cfg, weights=None): + """Merge augmented mask prediction. + + Args: + aug_masks (list[ndarray]): shape (n, #class, h, w) + img_shapes (list[ndarray]): shape (3, ). + rcnn_test_cfg (dict): rcnn test config. + + Returns: + tuple: (bboxes, scores) + """ + recovered_masks = [] + for mask, img_info in zip(aug_masks, img_metas): + flip = img_info[0]['flip'] + flip_direction = img_info[0]['flip_direction'] + if flip: + if flip_direction == 'horizontal': + mask = mask[:, :, :, ::-1] + elif flip_direction == 'vertical': + mask = mask[:, :, ::-1, :] + else: + raise ValueError( + f"Invalid flipping direction '{flip_direction}'") + recovered_masks.append(mask) + + if weights is None: + merged_masks = np.mean(recovered_masks, axis=0) + else: + merged_masks = np.average( + np.array(recovered_masks), axis=0, weights=np.array(weights)) + return merged_masks diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/__init__.py new file mode 100644 index 00000000..5c51dac6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/__init__.py @@ -0,0 +1,7 @@ +from .dist_utils import DistOptimizerHook, allreduce_grads, reduce_mean +from .misc import mask2ndarray, multi_apply, unmap + +__all__ = [ + 'allreduce_grads', 'DistOptimizerHook', 'reduce_mean', 'multi_apply', + 'unmap', 'mask2ndarray' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/dist_utils.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/dist_utils.py new file mode 100644 index 00000000..5fe77753 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/dist_utils.py @@ -0,0 +1,69 @@ +import warnings +from collections import OrderedDict + +import torch.distributed as dist +from mmcv.runner import OptimizerHook +from torch._utils import (_flatten_dense_tensors, _take_tensors, + _unflatten_dense_tensors) + + +def _allreduce_coalesced(tensors, world_size, bucket_size_mb=-1): + if bucket_size_mb > 0: + bucket_size_bytes = bucket_size_mb * 1024 * 1024 + buckets = _take_tensors(tensors, bucket_size_bytes) + else: + buckets = OrderedDict() + for tensor in tensors: + tp = tensor.type() + if tp not in buckets: + buckets[tp] = [] + buckets[tp].append(tensor) + buckets = buckets.values() + + for bucket in buckets: + flat_tensors = _flatten_dense_tensors(bucket) + dist.all_reduce(flat_tensors) + flat_tensors.div_(world_size) + for tensor, synced in zip( + bucket, _unflatten_dense_tensors(flat_tensors, bucket)): + tensor.copy_(synced) + + +def allreduce_grads(params, coalesce=True, bucket_size_mb=-1): + """Allreduce gradients. + + Args: + params (list[torch.Parameters]): List of parameters of a model + coalesce (bool, optional): Whether allreduce parameters as a whole. + Defaults to True. + bucket_size_mb (int, optional): Size of bucket, the unit is MB. + Defaults to -1. + """ + grads = [ + param.grad.data for param in params + if param.requires_grad and param.grad is not None + ] + world_size = dist.get_world_size() + if coalesce: + _allreduce_coalesced(grads, world_size, bucket_size_mb) + else: + for tensor in grads: + dist.all_reduce(tensor.div_(world_size)) + + +class DistOptimizerHook(OptimizerHook): + """Deprecated optimizer hook for distributed training.""" + + def __init__(self, *args, **kwargs): + warnings.warn('"DistOptimizerHook" is deprecated, please switch to' + '"mmcv.runner.OptimizerHook".') + super().__init__(*args, **kwargs) + + +def reduce_mean(tensor): + """"Obtain the mean of tensor on different GPUs.""" + if not (dist.is_available() and dist.is_initialized()): + return tensor + tensor = tensor.clone() + dist.all_reduce(tensor.div_(dist.get_world_size()), op=dist.ReduceOp.SUM) + return tensor diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/misc.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/misc.py new file mode 100644 index 00000000..3e22c7b9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/utils/misc.py @@ -0,0 +1,61 @@ +from functools import partial + +import numpy as np +import torch +from six.moves import map, zip + +from ..mask.structures import BitmapMasks, PolygonMasks + + +def multi_apply(func, *args, **kwargs): + """Apply function to a list of arguments. + + Note: + This function applies the ``func`` to multiple inputs and + map the multiple outputs of the ``func`` into different + list. Each list contains the same type of outputs corresponding + to different inputs. + + Args: + func (Function): A function that will be applied to a list of + arguments + + Returns: + tuple(list): A tuple containing multiple list, each list contains \ + a kind of returned results by the function + """ + pfunc = partial(func, **kwargs) if kwargs else func + map_results = map(pfunc, *args) + return tuple(map(list, zip(*map_results))) + + +def unmap(data, count, inds, fill=0): + """Unmap a subset of item (data) back to the original set of items (of size + count)""" + if data.dim() == 1: + ret = data.new_full((count, ), fill) + ret[inds.type(torch.bool)] = data + else: + new_size = (count, ) + data.size()[1:] + ret = data.new_full(new_size, fill) + ret[inds.type(torch.bool), :] = data + return ret + + +def mask2ndarray(mask): + """Convert Mask to ndarray.. + + Args: + mask (:obj:`BitmapMasks` or :obj:`PolygonMasks` or + torch.Tensor or np.ndarray): The mask to be converted. + + Returns: + np.ndarray: Ndarray mask of shape (n, h, w) that has been converted + """ + if isinstance(mask, (BitmapMasks, PolygonMasks)): + mask = mask.to_ndarray() + elif isinstance(mask, torch.Tensor): + mask = mask.detach().cpu().numpy() + elif not isinstance(mask, np.ndarray): + raise TypeError(f'Unsupported {type(mask)} data type') + return mask diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/__init__.py new file mode 100644 index 00000000..4ff995c0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/__init__.py @@ -0,0 +1,4 @@ +from .image import (color_val_matplotlib, imshow_det_bboxes, + imshow_gt_det_bboxes) + +__all__ = ['imshow_det_bboxes', 'imshow_gt_det_bboxes', 'color_val_matplotlib'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/image.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/image.py new file mode 100644 index 00000000..b9748b63 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/core/visualization/image.py @@ -0,0 +1,296 @@ +import os.path as osp +import warnings + +import matplotlib.pyplot as plt +import mmcv +import numpy as np +import pycocotools.mask as mask_util +from matplotlib.collections import PatchCollection +from matplotlib.patches import Polygon + +from ..utils import mask2ndarray + + +def color_val_matplotlib(color): + """Convert various input in BGR order to normalized RGB matplotlib color + tuples, + + Args: + color (:obj:`Color`/str/tuple/int/ndarray): Color inputs + + Returns: + tuple[float]: A tuple of 3 normalized floats indicating RGB channels. + """ + color = mmcv.color_val(color) + color = [color / 255 for color in color[::-1]] + return tuple(color) + + +def imshow_det_bboxes(img, + bboxes, + labels, + segms=None, + class_names=None, + score_thr=0, + bbox_color='green', + text_color='green', + mask_color=None, + thickness=2, + font_scale=0.5, + font_size=13, + win_name='', + fig_size=(15, 10), + show=True, + wait_time=0, + out_file=None): + """Draw bboxes and class labels (with scores) on an image. + + Args: + img (str or ndarray): The image to be displayed. + bboxes (ndarray): Bounding boxes (with scores), shaped (n, 4) or + (n, 5). + labels (ndarray): Labels of bboxes. + segms (ndarray or None): Masks, shaped (n,h,w) or None + class_names (list[str]): Names of each classes. + score_thr (float): Minimum score of bboxes to be shown. Default: 0 + bbox_color (str or tuple(int) or :obj:`Color`):Color of bbox lines. + The tuple of color should be in BGR order. Default: 'green' + text_color (str or tuple(int) or :obj:`Color`):Color of texts. + The tuple of color should be in BGR order. Default: 'green' + mask_color (str or tuple(int) or :obj:`Color`, optional): + Color of masks. The tuple of color should be in BGR order. + Default: None + thickness (int): Thickness of lines. Default: 2 + font_scale (float): Font scales of texts. Default: 0.5 + font_size (int): Font size of texts. Default: 13 + show (bool): Whether to show the image. Default: True + win_name (str): The window name. Default: '' + fig_size (tuple): Figure size of the pyplot figure. Default: (15, 10) + wait_time (float): Value of waitKey param. Default: 0. + out_file (str, optional): The filename to write the image. + Default: None + + Returns: + ndarray: The image with bboxes drawn on it. + """ + warnings.warn('"font_scale" will be deprecated in v2.9.0,' + 'Please use "font_size"') + assert bboxes.ndim == 2, \ + f' bboxes ndim should be 2, but its ndim is {bboxes.ndim}.' + assert labels.ndim == 1, \ + f' labels ndim should be 1, but its ndim is {labels.ndim}.' + assert bboxes.shape[0] == labels.shape[0], \ + 'bboxes.shape[0] and labels.shape[0] should have the same length.' + assert bboxes.shape[1] == 4 or bboxes.shape[1] == 5, \ + f' bboxes.shape[1] should be 4 or 5, but its {bboxes.shape[1]}.' + img = mmcv.imread(img).copy() + + if score_thr > 0: + assert bboxes.shape[1] == 5 + scores = bboxes[:, -1] + inds = scores > score_thr + bboxes = bboxes[inds, :] + labels = labels[inds] + if segms is not None: + segms = segms[inds, ...] + + mask_colors = [] + if labels.shape[0] > 0: + if mask_color is None: + # random color + np.random.seed(42) + mask_colors = [ + np.random.randint(0, 256, (1, 3), dtype=np.uint8) + for _ in range(max(labels) + 1) + ] + else: + # specify color + mask_colors = [ + np.array(mmcv.color_val(mask_color)[::-1], dtype=np.uint8) + ] * ( + max(labels) + 1) + + bbox_color = color_val_matplotlib(bbox_color) + text_color = color_val_matplotlib(text_color) + + img = mmcv.bgr2rgb(img) + img = np.ascontiguousarray(img) + + plt.figure(win_name, figsize=fig_size) + plt.title(win_name) + plt.axis('off') + ax = plt.gca() + + polygons = [] + color = [] + for i, (bbox, label) in enumerate(zip(bboxes, labels)): + bbox_int = bbox.astype(np.int32) + poly = [[bbox_int[0], bbox_int[1]], [bbox_int[0], bbox_int[3]], + [bbox_int[2], bbox_int[3]], [bbox_int[2], bbox_int[1]]] + np_poly = np.array(poly).reshape((4, 2)) + polygons.append(Polygon(np_poly)) + color.append(bbox_color) + label_text = class_names[ + label] if class_names is not None else f'class {label}' + if len(bbox) > 4: + label_text += f'|{bbox[-1]:.02f}' + ax.text( + bbox_int[0], + bbox_int[1], + f'{label_text}', + bbox={ + 'facecolor': 'black', + 'alpha': 0.8, + 'pad': 0.7, + 'edgecolor': 'none' + }, + color=text_color, + fontsize=font_size, + verticalalignment='top', + horizontalalignment='left') + if segms is not None: + color_mask = mask_colors[labels[i]] + mask = segms[i].astype(bool) + img[mask] = img[mask] * 0.5 + color_mask * 0.5 + + plt.imshow(img) + + p = PatchCollection( + polygons, facecolor='none', edgecolors=color, linewidths=thickness) + ax.add_collection(p) + + if out_file is not None: + dir_name = osp.abspath(osp.dirname(out_file)) + mmcv.mkdir_or_exist(dir_name) + plt.savefig(out_file) + if not show: + plt.close() + if show: + if wait_time == 0: + plt.show() + else: + plt.show(block=False) + plt.pause(wait_time) + plt.close() + return mmcv.rgb2bgr(img) + + +def imshow_gt_det_bboxes(img, + annotation, + result, + class_names=None, + score_thr=0, + gt_bbox_color=(255, 102, 61), + gt_text_color=(255, 102, 61), + gt_mask_color=(255, 102, 61), + det_bbox_color=(72, 101, 241), + det_text_color=(72, 101, 241), + det_mask_color=(72, 101, 241), + thickness=2, + font_size=13, + win_name='', + fig_size=(15, 10), + show=True, + wait_time=0, + out_file=None): + """General visualization GT and result function. + + Args: + img (str or ndarray): The image to be displayed.) + annotation (dict): Ground truth annotations where contain keys of + 'gt_bboxes' and 'gt_labels' or 'gt_masks' + result (tuple[list] or list): The detection result, can be either + (bbox, segm) or just bbox. + class_names (list[str]): Names of each classes. + score_thr (float): Minimum score of bboxes to be shown. Default: 0 + gt_bbox_color (str or tuple(int) or :obj:`Color`):Color of bbox lines. + The tuple of color should be in BGR order. Default: (255, 102, 61) + gt_text_color (str or tuple(int) or :obj:`Color`):Color of texts. + The tuple of color should be in BGR order. Default: (255, 102, 61) + gt_mask_color (str or tuple(int) or :obj:`Color`, optional): + Color of masks. The tuple of color should be in BGR order. + Default: (255, 102, 61) + det_bbox_color (str or tuple(int) or :obj:`Color`):Color of bbox lines. + The tuple of color should be in BGR order. Default: (72, 101, 241) + det_text_color (str or tuple(int) or :obj:`Color`):Color of texts. + The tuple of color should be in BGR order. Default: (72, 101, 241) + det_mask_color (str or tuple(int) or :obj:`Color`, optional): + Color of masks. The tuple of color should be in BGR order. + Default: (72, 101, 241) + thickness (int): Thickness of lines. Default: 2 + font_size (int): Font size of texts. Default: 13 + win_name (str): The window name. Default: '' + fig_size (tuple): Figure size of the pyplot figure. Default: (15, 10) + show (bool): Whether to show the image. Default: True + wait_time (float): Value of waitKey param. Default: 0. + out_file (str, optional): The filename to write the image. + Default: None + + Returns: + ndarray: The image with bboxes or masks drawn on it. + """ + assert 'gt_bboxes' in annotation + assert 'gt_labels' in annotation + assert isinstance( + result, + (tuple, list)), f'Expected tuple or list, but get {type(result)}' + + gt_masks = annotation.get('gt_masks', None) + if gt_masks is not None: + gt_masks = mask2ndarray(gt_masks) + + img = mmcv.imread(img) + + img = imshow_det_bboxes( + img, + annotation['gt_bboxes'], + annotation['gt_labels'], + gt_masks, + class_names=class_names, + bbox_color=gt_bbox_color, + text_color=gt_text_color, + mask_color=gt_mask_color, + thickness=thickness, + font_size=font_size, + win_name=win_name, + fig_size=fig_size, + show=False) + + if isinstance(result, tuple): + bbox_result, segm_result = result + if isinstance(segm_result, tuple): + segm_result = segm_result[0] # ms rcnn + else: + bbox_result, segm_result = result, None + + bboxes = np.vstack(bbox_result) + labels = [ + np.full(bbox.shape[0], i, dtype=np.int32) + for i, bbox in enumerate(bbox_result) + ] + labels = np.concatenate(labels) + + segms = None + if segm_result is not None and len(labels) > 0: # non empty + segms = mmcv.concat_list(segm_result) + segms = mask_util.decode(segms) + segms = segms.transpose(2, 0, 1) + + img = imshow_det_bboxes( + img, + bboxes, + labels, + segms=segms, + class_names=class_names, + score_thr=score_thr, + bbox_color=det_bbox_color, + text_color=det_text_color, + mask_color=det_mask_color, + thickness=thickness, + font_size=font_size, + win_name=win_name, + fig_size=fig_size, + show=show, + wait_time=wait_time, + out_file=out_file) + return img diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/__init__.py new file mode 100644 index 00000000..609ea66d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/__init__.py @@ -0,0 +1,22 @@ +from .builder import DATASETS, PIPELINES, build_dataloader, build_dataset +from .cityscapes import CityscapesDataset +from .coco import CocoDataset +from .custom import CustomDataset +from .dataset_wrappers import (ClassBalancedDataset, ConcatDataset, + RepeatDataset) +from .deepfashion import DeepFashionDataset +from .lvis import LVISDataset, LVISV1Dataset, LVISV05Dataset +from .samplers import DistributedGroupSampler, DistributedSampler, GroupSampler +from .utils import get_loading_pipeline, replace_ImageToTensor +from .voc import VOCDataset +from .wider_face import WIDERFaceDataset +from .xml_style import XMLDataset + +__all__ = [ + 'CustomDataset', 'XMLDataset', 'CocoDataset', 'DeepFashionDataset', + 'VOCDataset', 'CityscapesDataset', 'LVISDataset', 'LVISV05Dataset', + 'LVISV1Dataset', 'GroupSampler', 'DistributedGroupSampler', + 'DistributedSampler', 'build_dataloader', 'ConcatDataset', 'RepeatDataset', + 'ClassBalancedDataset', 'WIDERFaceDataset', 'DATASETS', 'PIPELINES', + 'build_dataset', 'replace_ImageToTensor', 'get_loading_pipeline' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/builder.py new file mode 100644 index 00000000..16d9ae34 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/builder.py @@ -0,0 +1,143 @@ +import copy +import platform +import random +from functools import partial + +import numpy as np +from mmcv.parallel import collate +from mmcv.runner import get_dist_info +from mmcv.utils import Registry, build_from_cfg +from torch.utils.data import DataLoader + +from .samplers import DistributedGroupSampler, DistributedSampler, GroupSampler + +if platform.system() != 'Windows': + # https://github.com/pytorch/pytorch/issues/973 + import resource + rlimit = resource.getrlimit(resource.RLIMIT_NOFILE) + hard_limit = rlimit[1] + soft_limit = min(4096, hard_limit) + resource.setrlimit(resource.RLIMIT_NOFILE, (soft_limit, hard_limit)) + +DATASETS = Registry('dataset') +PIPELINES = Registry('pipeline') + + +def _concat_dataset(cfg, default_args=None): + from .dataset_wrappers import ConcatDataset + ann_files = cfg['ann_file'] + img_prefixes = cfg.get('img_prefix', None) + seg_prefixes = cfg.get('seg_prefix', None) + proposal_files = cfg.get('proposal_file', None) + separate_eval = cfg.get('separate_eval', True) + + datasets = [] + num_dset = len(ann_files) + for i in range(num_dset): + data_cfg = copy.deepcopy(cfg) + # pop 'separate_eval' since it is not a valid key for common datasets. + if 'separate_eval' in data_cfg: + data_cfg.pop('separate_eval') + data_cfg['ann_file'] = ann_files[i] + if isinstance(img_prefixes, (list, tuple)): + data_cfg['img_prefix'] = img_prefixes[i] + if isinstance(seg_prefixes, (list, tuple)): + data_cfg['seg_prefix'] = seg_prefixes[i] + if isinstance(proposal_files, (list, tuple)): + data_cfg['proposal_file'] = proposal_files[i] + datasets.append(build_dataset(data_cfg, default_args)) + + return ConcatDataset(datasets, separate_eval) + + +def build_dataset(cfg, default_args=None): + from .dataset_wrappers import (ConcatDataset, RepeatDataset, + ClassBalancedDataset) + if isinstance(cfg, (list, tuple)): + dataset = ConcatDataset([build_dataset(c, default_args) for c in cfg]) + elif cfg['type'] == 'ConcatDataset': + dataset = ConcatDataset( + [build_dataset(c, default_args) for c in cfg['datasets']], + cfg.get('separate_eval', True)) + elif cfg['type'] == 'RepeatDataset': + dataset = RepeatDataset( + build_dataset(cfg['dataset'], default_args), cfg['times']) + elif cfg['type'] == 'ClassBalancedDataset': + dataset = ClassBalancedDataset( + build_dataset(cfg['dataset'], default_args), cfg['oversample_thr']) + elif isinstance(cfg.get('ann_file'), (list, tuple)): + dataset = _concat_dataset(cfg, default_args) + else: + dataset = build_from_cfg(cfg, DATASETS, default_args) + + return dataset + + +def build_dataloader(dataset, + samples_per_gpu, + workers_per_gpu, + num_gpus=1, + dist=True, + shuffle=True, + seed=None, + **kwargs): + """Build PyTorch DataLoader. + + In distributed training, each GPU/process has a dataloader. + In non-distributed training, there is only one dataloader for all GPUs. + + Args: + dataset (Dataset): A PyTorch dataset. + samples_per_gpu (int): Number of training samples on each GPU, i.e., + batch size of each GPU. + workers_per_gpu (int): How many subprocesses to use for data loading + for each GPU. + num_gpus (int): Number of GPUs. Only used in non-distributed training. + dist (bool): Distributed training/test or not. Default: True. + shuffle (bool): Whether to shuffle the data at every epoch. + Default: True. + kwargs: any keyword argument to be used to initialize DataLoader + + Returns: + DataLoader: A PyTorch dataloader. + """ + rank, world_size = get_dist_info() + if dist: + # DistributedGroupSampler will definitely shuffle the data to satisfy + # that images on each GPU are in the same group + if shuffle: + sampler = DistributedGroupSampler(dataset, samples_per_gpu, + world_size, rank) + else: + sampler = DistributedSampler( + dataset, world_size, rank, shuffle=False) + batch_size = samples_per_gpu + num_workers = workers_per_gpu + else: + sampler = GroupSampler(dataset, samples_per_gpu) if shuffle else None + batch_size = num_gpus * samples_per_gpu + num_workers = num_gpus * workers_per_gpu + + init_fn = partial( + worker_init_fn, num_workers=num_workers, rank=rank, + seed=seed) if seed is not None else None + + data_loader = DataLoader( + dataset, + batch_size=batch_size, + sampler=sampler, + num_workers=num_workers, + collate_fn=partial(collate, samples_per_gpu=samples_per_gpu), + pin_memory=False, + worker_init_fn=init_fn, + **kwargs) + + return data_loader + + +def worker_init_fn(worker_id, num_workers, rank, seed): + # The seed of each worker equals to + # num_worker * rank + worker_id + user_seed + worker_seed = num_workers * rank + worker_id + seed + np.random.seed(worker_seed) + random.seed(worker_seed) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/cityscapes.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/cityscapes.py new file mode 100644 index 00000000..71eead87 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/cityscapes.py @@ -0,0 +1,334 @@ +# Modified from https://github.com/facebookresearch/detectron2/blob/master/detectron2/data/datasets/cityscapes.py # noqa +# and https://github.com/mcordts/cityscapesScripts/blob/master/cityscapesscripts/evaluation/evalInstanceLevelSemanticLabeling.py # noqa + +import glob +import os +import os.path as osp +import tempfile +from collections import OrderedDict + +import mmcv +import numpy as np +import pycocotools.mask as maskUtils +from mmcv.utils import print_log + +from .builder import DATASETS +from .coco import CocoDataset + + +@DATASETS.register_module() +class CityscapesDataset(CocoDataset): + + CLASSES = ('person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', + 'bicycle') + + def _filter_imgs(self, min_size=32): + """Filter images too small or without ground truths.""" + valid_inds = [] + # obtain images that contain annotation + ids_with_ann = set(_['image_id'] for _ in self.coco.anns.values()) + # obtain images that contain annotations of the required categories + ids_in_cat = set() + for i, class_id in enumerate(self.cat_ids): + ids_in_cat |= set(self.coco.cat_img_map[class_id]) + # merge the image id sets of the two conditions and use the merged set + # to filter out images if self.filter_empty_gt=True + ids_in_cat &= ids_with_ann + + valid_img_ids = [] + for i, img_info in enumerate(self.data_infos): + img_id = img_info['id'] + ann_ids = self.coco.getAnnIds(imgIds=[img_id]) + ann_info = self.coco.loadAnns(ann_ids) + all_iscrowd = all([_['iscrowd'] for _ in ann_info]) + if self.filter_empty_gt and (self.img_ids[i] not in ids_in_cat + or all_iscrowd): + continue + if min(img_info['width'], img_info['height']) >= min_size: + valid_inds.append(i) + valid_img_ids.append(img_id) + self.img_ids = valid_img_ids + return valid_inds + + def _parse_ann_info(self, img_info, ann_info): + """Parse bbox and mask annotation. + + Args: + img_info (dict): Image info of an image. + ann_info (list[dict]): Annotation info of an image. + + Returns: + dict: A dict containing the following keys: bboxes, \ + bboxes_ignore, labels, masks, seg_map. \ + "masks" are already decoded into binary masks. + """ + gt_bboxes = [] + gt_labels = [] + gt_bboxes_ignore = [] + gt_masks_ann = [] + + for i, ann in enumerate(ann_info): + if ann.get('ignore', False): + continue + x1, y1, w, h = ann['bbox'] + if ann['area'] <= 0 or w < 1 or h < 1: + continue + if ann['category_id'] not in self.cat_ids: + continue + bbox = [x1, y1, x1 + w, y1 + h] + if ann.get('iscrowd', False): + gt_bboxes_ignore.append(bbox) + else: + gt_bboxes.append(bbox) + gt_labels.append(self.cat2label[ann['category_id']]) + gt_masks_ann.append(ann['segmentation']) + + if gt_bboxes: + gt_bboxes = np.array(gt_bboxes, dtype=np.float32) + gt_labels = np.array(gt_labels, dtype=np.int64) + else: + gt_bboxes = np.zeros((0, 4), dtype=np.float32) + gt_labels = np.array([], dtype=np.int64) + + if gt_bboxes_ignore: + gt_bboxes_ignore = np.array(gt_bboxes_ignore, dtype=np.float32) + else: + gt_bboxes_ignore = np.zeros((0, 4), dtype=np.float32) + + ann = dict( + bboxes=gt_bboxes, + labels=gt_labels, + bboxes_ignore=gt_bboxes_ignore, + masks=gt_masks_ann, + seg_map=img_info['segm_file']) + + return ann + + def results2txt(self, results, outfile_prefix): + """Dump the detection results to a txt file. + + Args: + results (list[list | tuple]): Testing results of the + dataset. + outfile_prefix (str): The filename prefix of the json files. + If the prefix is "somepath/xxx", + the txt files will be named "somepath/xxx.txt". + + Returns: + list[str]: Result txt files which contains corresponding \ + instance segmentation images. + """ + try: + import cityscapesscripts.helpers.labels as CSLabels + except ImportError: + raise ImportError('Please run "pip install citscapesscripts" to ' + 'install cityscapesscripts first.') + result_files = [] + os.makedirs(outfile_prefix, exist_ok=True) + prog_bar = mmcv.ProgressBar(len(self)) + for idx in range(len(self)): + result = results[idx] + filename = self.data_infos[idx]['filename'] + basename = osp.splitext(osp.basename(filename))[0] + pred_txt = osp.join(outfile_prefix, basename + '_pred.txt') + + bbox_result, segm_result = result + bboxes = np.vstack(bbox_result) + # segm results + if isinstance(segm_result, tuple): + # Some detectors use different scores for bbox and mask, + # like Mask Scoring R-CNN. Score of segm will be used instead + # of bbox score. + segms = mmcv.concat_list(segm_result[0]) + mask_score = segm_result[1] + else: + # use bbox score for mask score + segms = mmcv.concat_list(segm_result) + mask_score = [bbox[-1] for bbox in bboxes] + labels = [ + np.full(bbox.shape[0], i, dtype=np.int32) + for i, bbox in enumerate(bbox_result) + ] + labels = np.concatenate(labels) + + assert len(bboxes) == len(segms) == len(labels) + num_instances = len(bboxes) + prog_bar.update() + with open(pred_txt, 'w') as fout: + for i in range(num_instances): + pred_class = labels[i] + classes = self.CLASSES[pred_class] + class_id = CSLabels.name2label[classes].id + score = mask_score[i] + mask = maskUtils.decode(segms[i]).astype(np.uint8) + png_filename = osp.join(outfile_prefix, + basename + f'_{i}_{classes}.png') + mmcv.imwrite(mask, png_filename) + fout.write(f'{osp.basename(png_filename)} {class_id} ' + f'{score}\n') + result_files.append(pred_txt) + + return result_files + + def format_results(self, results, txtfile_prefix=None): + """Format the results to txt (standard format for Cityscapes + evaluation). + + Args: + results (list): Testing results of the dataset. + txtfile_prefix (str | None): The prefix of txt files. It includes + the file path and the prefix of filename, e.g., "a/b/prefix". + If not specified, a temp file will be created. Default: None. + + Returns: + tuple: (result_files, tmp_dir), result_files is a dict containing \ + the json filepaths, tmp_dir is the temporal directory created \ + for saving txt/png files when txtfile_prefix is not specified. + """ + assert isinstance(results, list), 'results must be a list' + assert len(results) == len(self), ( + 'The length of results is not equal to the dataset len: {} != {}'. + format(len(results), len(self))) + + assert isinstance(results, list), 'results must be a list' + assert len(results) == len(self), ( + 'The length of results is not equal to the dataset len: {} != {}'. + format(len(results), len(self))) + + if txtfile_prefix is None: + tmp_dir = tempfile.TemporaryDirectory() + txtfile_prefix = osp.join(tmp_dir.name, 'results') + else: + tmp_dir = None + result_files = self.results2txt(results, txtfile_prefix) + + return result_files, tmp_dir + + def evaluate(self, + results, + metric='bbox', + logger=None, + outfile_prefix=None, + classwise=False, + proposal_nums=(100, 300, 1000), + iou_thrs=np.arange(0.5, 0.96, 0.05)): + """Evaluation in Cityscapes/COCO protocol. + + Args: + results (list[list | tuple]): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. Options are + 'bbox', 'segm', 'proposal', 'proposal_fast'. + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + outfile_prefix (str | None): The prefix of output file. It includes + the file path and the prefix of filename, e.g., "a/b/prefix". + If results are evaluated with COCO protocol, it would be the + prefix of output json file. For example, the metric is 'bbox' + and 'segm', then json files would be "a/b/prefix.bbox.json" and + "a/b/prefix.segm.json". + If results are evaluated with cityscapes protocol, it would be + the prefix of output txt/png files. The output files would be + png images under folder "a/b/prefix/xxx/" and the file name of + images would be written into a txt file + "a/b/prefix/xxx_pred.txt", where "xxx" is the video name of + cityscapes. If not specified, a temp file will be created. + Default: None. + classwise (bool): Whether to evaluating the AP for each class. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thrs (Sequence[float]): IoU threshold used for evaluating + recalls. If set to a list, the average recall of all IoUs will + also be computed. Default: 0.5. + + Returns: + dict[str, float]: COCO style evaluation metric or cityscapes mAP \ + and AP@50. + """ + eval_results = dict() + + metrics = metric.copy() if isinstance(metric, list) else [metric] + + if 'cityscapes' in metrics: + eval_results.update( + self._evaluate_cityscapes(results, outfile_prefix, logger)) + metrics.remove('cityscapes') + + # left metrics are all coco metric + if len(metrics) > 0: + # create CocoDataset with CityscapesDataset annotation + self_coco = CocoDataset(self.ann_file, self.pipeline.transforms, + None, self.data_root, self.img_prefix, + self.seg_prefix, self.proposal_file, + self.test_mode, self.filter_empty_gt) + # TODO: remove this in the future + # reload annotations of correct class + self_coco.CLASSES = self.CLASSES + self_coco.data_infos = self_coco.load_annotations(self.ann_file) + eval_results.update( + self_coco.evaluate(results, metrics, logger, outfile_prefix, + classwise, proposal_nums, iou_thrs)) + + return eval_results + + def _evaluate_cityscapes(self, results, txtfile_prefix, logger): + """Evaluation in Cityscapes protocol. + + Args: + results (list): Testing results of the dataset. + txtfile_prefix (str | None): The prefix of output txt file + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + + Returns: + dict[str: float]: Cityscapes evaluation results, contains 'mAP' \ + and 'AP@50'. + """ + + try: + import cityscapesscripts.evaluation.evalInstanceLevelSemanticLabeling as CSEval # noqa + except ImportError: + raise ImportError('Please run "pip install citscapesscripts" to ' + 'install cityscapesscripts first.') + msg = 'Evaluating in Cityscapes style' + if logger is None: + msg = '\n' + msg + print_log(msg, logger=logger) + + result_files, tmp_dir = self.format_results(results, txtfile_prefix) + + if tmp_dir is None: + result_dir = osp.join(txtfile_prefix, 'results') + else: + result_dir = osp.join(tmp_dir.name, 'results') + + eval_results = OrderedDict() + print_log(f'Evaluating results under {result_dir} ...', logger=logger) + + # set global states in cityscapes evaluation API + CSEval.args.cityscapesPath = os.path.join(self.img_prefix, '../..') + CSEval.args.predictionPath = os.path.abspath(result_dir) + CSEval.args.predictionWalk = None + CSEval.args.JSONOutput = False + CSEval.args.colorized = False + CSEval.args.gtInstancesFile = os.path.join(result_dir, + 'gtInstances.json') + CSEval.args.groundTruthSearch = os.path.join( + self.img_prefix.replace('leftImg8bit', 'gtFine'), + '*/*_gtFine_instanceIds.png') + + groundTruthImgList = glob.glob(CSEval.args.groundTruthSearch) + assert len(groundTruthImgList), 'Cannot find ground truth images' \ + f' in {CSEval.args.groundTruthSearch}.' + predictionImgList = [] + for gt in groundTruthImgList: + predictionImgList.append(CSEval.getPrediction(gt, CSEval.args)) + CSEval_results = CSEval.evaluateImgLists(predictionImgList, + groundTruthImgList, + CSEval.args)['averages'] + + eval_results['mAP'] = CSEval_results['allAp'] + eval_results['AP@50'] = CSEval_results['allAp50%'] + if tmp_dir is not None: + tmp_dir.cleanup() + return eval_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/coco.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/coco.py new file mode 100644 index 00000000..9eea6a4f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/coco.py @@ -0,0 +1,544 @@ +import itertools +import logging +import os.path as osp +import tempfile +from collections import OrderedDict + +import mmcv +import numpy as np +from mmcv.utils import print_log +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval +from terminaltables import AsciiTable + +from mmdet.core import eval_recalls +from .builder import DATASETS +from .custom import CustomDataset + +try: + import pycocotools + if not hasattr(pycocotools, '__sphinx_mock__'): # for doc generation + assert pycocotools.__version__ >= '12.0.2' +except AssertionError: + raise AssertionError('Incompatible version of pycocotools is installed. ' + 'Run pip uninstall pycocotools first. Then run pip ' + 'install mmpycocotools to install open-mmlab forked ' + 'pycocotools.') + + +@DATASETS.register_module() +class CocoDataset(CustomDataset): + + CLASSES = ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', + 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', + 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', + 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', + 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', + 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', + 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', + 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', + 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', + 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', + 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', + 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', + 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', + 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush') + + def load_annotations(self, ann_file): + """Load annotation from COCO style annotation file. + + Args: + ann_file (str): Path of annotation file. + + Returns: + list[dict]: Annotation info from COCO api. + """ + + self.coco = COCO(ann_file) + self.cat_ids = self.coco.get_cat_ids(cat_names=self.CLASSES) + self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} + self.img_ids = self.coco.get_img_ids() + data_infos = [] + for i in self.img_ids: + info = self.coco.load_imgs([i])[0] + info['filename'] = info['file_name'] + data_infos.append(info) + return data_infos + + def get_ann_info(self, idx): + """Get COCO annotation by index. + + Args: + idx (int): Index of data. + + Returns: + dict: Annotation info of specified index. + """ + + img_id = self.data_infos[idx]['id'] + ann_ids = self.coco.get_ann_ids(img_ids=[img_id]) + ann_info = self.coco.load_anns(ann_ids) + return self._parse_ann_info(self.data_infos[idx], ann_info) + + def get_cat_ids(self, idx): + """Get COCO category ids by index. + + Args: + idx (int): Index of data. + + Returns: + list[int]: All categories in the image of specified index. + """ + + img_id = self.data_infos[idx]['id'] + ann_ids = self.coco.get_ann_ids(img_ids=[img_id]) + ann_info = self.coco.load_anns(ann_ids) + return [ann['category_id'] for ann in ann_info] + + def _filter_imgs(self, min_size=32): + """Filter images too small or without ground truths.""" + valid_inds = [] + # obtain images that contain annotation + ids_with_ann = set(_['image_id'] for _ in self.coco.anns.values()) + # obtain images that contain annotations of the required categories + ids_in_cat = set() + for i, class_id in enumerate(self.cat_ids): + ids_in_cat |= set(self.coco.cat_img_map[class_id]) + # merge the image id sets of the two conditions and use the merged set + # to filter out images if self.filter_empty_gt=True + ids_in_cat &= ids_with_ann + + valid_img_ids = [] + for i, img_info in enumerate(self.data_infos): + img_id = self.img_ids[i] + if self.filter_empty_gt and img_id not in ids_in_cat: + continue + if min(img_info['width'], img_info['height']) >= min_size: + valid_inds.append(i) + valid_img_ids.append(img_id) + self.img_ids = valid_img_ids + return valid_inds + + def _parse_ann_info(self, img_info, ann_info): + """Parse bbox and mask annotation. + + Args: + ann_info (list[dict]): Annotation info of an image. + with_mask (bool): Whether to parse mask annotations. + + Returns: + dict: A dict containing the following keys: bboxes, bboxes_ignore,\ + labels, masks, seg_map. "masks" are raw annotations and not \ + decoded into binary masks. + """ + gt_bboxes = [] + gt_labels = [] + gt_bboxes_ignore = [] + gt_masks_ann = [] + for i, ann in enumerate(ann_info): + if ann.get('ignore', False): + continue + x1, y1, w, h = ann['bbox'] + inter_w = max(0, min(x1 + w, img_info['width']) - max(x1, 0)) + inter_h = max(0, min(y1 + h, img_info['height']) - max(y1, 0)) + if inter_w * inter_h == 0: + continue + if ann['area'] <= 0 or w < 1 or h < 1: + continue + if ann['category_id'] not in self.cat_ids: + continue + bbox = [x1, y1, x1 + w, y1 + h] + if ann.get('iscrowd', False): + gt_bboxes_ignore.append(bbox) + else: + gt_bboxes.append(bbox) + gt_labels.append(self.cat2label[ann['category_id']]) + gt_masks_ann.append(ann.get('segmentation', None)) + + if gt_bboxes: + gt_bboxes = np.array(gt_bboxes, dtype=np.float32) + gt_labels = np.array(gt_labels, dtype=np.int64) + else: + gt_bboxes = np.zeros((0, 4), dtype=np.float32) + gt_labels = np.array([], dtype=np.int64) + + if gt_bboxes_ignore: + gt_bboxes_ignore = np.array(gt_bboxes_ignore, dtype=np.float32) + else: + gt_bboxes_ignore = np.zeros((0, 4), dtype=np.float32) + + seg_map = img_info['filename'].replace('jpg', 'png') + + ann = dict( + bboxes=gt_bboxes, + labels=gt_labels, + bboxes_ignore=gt_bboxes_ignore, + masks=gt_masks_ann, + seg_map=seg_map) + + return ann + + def xyxy2xywh(self, bbox): + """Convert ``xyxy`` style bounding boxes to ``xywh`` style for COCO + evaluation. + + Args: + bbox (numpy.ndarray): The bounding boxes, shape (4, ), in + ``xyxy`` order. + + Returns: + list[float]: The converted bounding boxes, in ``xywh`` order. + """ + + _bbox = bbox.tolist() + return [ + _bbox[0], + _bbox[1], + _bbox[2] - _bbox[0], + _bbox[3] - _bbox[1], + ] + + def _proposal2json(self, results): + """Convert proposal results to COCO json style.""" + json_results = [] + for idx in range(len(self)): + img_id = self.img_ids[idx] + bboxes = results[idx] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(bboxes[i][4]) + data['category_id'] = 1 + json_results.append(data) + return json_results + + def _det2json(self, results): + """Convert detection results to COCO json style.""" + json_results = [] + for idx in range(len(self)): + img_id = self.img_ids[idx] + result = results[idx] + for label in range(len(result)): + bboxes = result[label] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(bboxes[i][4]) + data['category_id'] = self.cat_ids[label] + json_results.append(data) + return json_results + + def _segm2json(self, results): + """Convert instance segmentation results to COCO json style.""" + bbox_json_results = [] + segm_json_results = [] + for idx in range(len(self)): + img_id = self.img_ids[idx] + det, seg = results[idx] + for label in range(len(det)): + # bbox results + bboxes = det[label] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(bboxes[i][4]) + data['category_id'] = self.cat_ids[label] + bbox_json_results.append(data) + + # segm results + # some detectors use different scores for bbox and mask + if isinstance(seg, tuple): + segms = seg[0][label] + mask_score = seg[1][label] + else: + segms = seg[label] + mask_score = [bbox[4] for bbox in bboxes] + for i in range(bboxes.shape[0]): + data = dict() + data['image_id'] = img_id + data['bbox'] = self.xyxy2xywh(bboxes[i]) + data['score'] = float(mask_score[i]) + data['category_id'] = self.cat_ids[label] + if isinstance(segms[i]['counts'], bytes): + segms[i]['counts'] = segms[i]['counts'].decode() + data['segmentation'] = segms[i] + segm_json_results.append(data) + return bbox_json_results, segm_json_results + + def results2json(self, results, outfile_prefix): + """Dump the detection results to a COCO style json file. + + There are 3 types of results: proposals, bbox predictions, mask + predictions, and they have different data types. This method will + automatically recognize the type, and dump them to json files. + + Args: + results (list[list | tuple | ndarray]): Testing results of the + dataset. + outfile_prefix (str): The filename prefix of the json files. If the + prefix is "somepath/xxx", the json files will be named + "somepath/xxx.bbox.json", "somepath/xxx.segm.json", + "somepath/xxx.proposal.json". + + Returns: + dict[str: str]: Possible keys are "bbox", "segm", "proposal", and \ + values are corresponding filenames. + """ + result_files = dict() + if isinstance(results[0], list): + json_results = self._det2json(results) + result_files['bbox'] = f'{outfile_prefix}.bbox.json' + result_files['proposal'] = f'{outfile_prefix}.bbox.json' + mmcv.dump(json_results, result_files['bbox']) + elif isinstance(results[0], tuple): + json_results = self._segm2json(results) + result_files['bbox'] = f'{outfile_prefix}.bbox.json' + result_files['proposal'] = f'{outfile_prefix}.bbox.json' + result_files['segm'] = f'{outfile_prefix}.segm.json' + mmcv.dump(json_results[0], result_files['bbox']) + mmcv.dump(json_results[1], result_files['segm']) + elif isinstance(results[0], np.ndarray): + json_results = self._proposal2json(results) + result_files['proposal'] = f'{outfile_prefix}.proposal.json' + mmcv.dump(json_results, result_files['proposal']) + else: + raise TypeError('invalid type of results') + return result_files + + def fast_eval_recall(self, results, proposal_nums, iou_thrs, logger=None): + gt_bboxes = [] + for i in range(len(self.img_ids)): + ann_ids = self.coco.get_ann_ids(img_ids=self.img_ids[i]) + ann_info = self.coco.load_anns(ann_ids) + if len(ann_info) == 0: + gt_bboxes.append(np.zeros((0, 4))) + continue + bboxes = [] + for ann in ann_info: + if ann.get('ignore', False) or ann['iscrowd']: + continue + x1, y1, w, h = ann['bbox'] + bboxes.append([x1, y1, x1 + w, y1 + h]) + bboxes = np.array(bboxes, dtype=np.float32) + if bboxes.shape[0] == 0: + bboxes = np.zeros((0, 4)) + gt_bboxes.append(bboxes) + + recalls = eval_recalls( + gt_bboxes, results, proposal_nums, iou_thrs, logger=logger) + ar = recalls.mean(axis=1) + return ar + + def format_results(self, results, jsonfile_prefix=None, **kwargs): + """Format the results to json (standard format for COCO evaluation). + + Args: + results (list[tuple | numpy.ndarray]): Testing results of the + dataset. + jsonfile_prefix (str | None): The prefix of json files. It includes + the file path and the prefix of filename, e.g., "a/b/prefix". + If not specified, a temp file will be created. Default: None. + + Returns: + tuple: (result_files, tmp_dir), result_files is a dict containing \ + the json filepaths, tmp_dir is the temporal directory created \ + for saving json files when jsonfile_prefix is not specified. + """ + assert isinstance(results, list), 'results must be a list' + assert len(results) == len(self), ( + 'The length of results is not equal to the dataset len: {} != {}'. + format(len(results), len(self))) + + if jsonfile_prefix is None: + tmp_dir = tempfile.TemporaryDirectory() + jsonfile_prefix = osp.join(tmp_dir.name, 'results') + else: + tmp_dir = None + result_files = self.results2json(results, jsonfile_prefix) + return result_files, tmp_dir + + def evaluate(self, + results, + metric='bbox', + logger=None, + jsonfile_prefix=None, + classwise=False, + proposal_nums=(100, 300, 1000), + iou_thrs=None, + metric_items=None): + """Evaluation in COCO protocol. + + Args: + results (list[list | tuple]): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. Options are + 'bbox', 'segm', 'proposal', 'proposal_fast'. + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + jsonfile_prefix (str | None): The prefix of json files. It includes + the file path and the prefix of filename, e.g., "a/b/prefix". + If not specified, a temp file will be created. Default: None. + classwise (bool): Whether to evaluating the AP for each class. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thrs (Sequence[float], optional): IoU threshold used for + evaluating recalls/mAPs. If set to a list, the average of all + IoUs will also be computed. If not specified, [0.50, 0.55, + 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95] will be used. + Default: None. + metric_items (list[str] | str, optional): Metric items that will + be returned. If not specified, ``['AR@100', 'AR@300', + 'AR@1000', 'AR_s@1000', 'AR_m@1000', 'AR_l@1000' ]`` will be + used when ``metric=='proposal'``, ``['mAP', 'mAP_50', 'mAP_75', + 'mAP_s', 'mAP_m', 'mAP_l']`` will be used when + ``metric=='bbox' or metric=='segm'``. + + Returns: + dict[str, float]: COCO style evaluation metric. + """ + + metrics = metric if isinstance(metric, list) else [metric] + allowed_metrics = ['bbox', 'segm', 'proposal', 'proposal_fast'] + for metric in metrics: + if metric not in allowed_metrics: + raise KeyError(f'metric {metric} is not supported') + if iou_thrs is None: + iou_thrs = np.linspace( + .5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True) + if metric_items is not None: + if not isinstance(metric_items, list): + metric_items = [metric_items] + + result_files, tmp_dir = self.format_results(results, jsonfile_prefix) + + eval_results = OrderedDict() + cocoGt = self.coco + for metric in metrics: + msg = f'Evaluating {metric}...' + if logger is None: + msg = '\n' + msg + print_log(msg, logger=logger) + + if metric == 'proposal_fast': + ar = self.fast_eval_recall( + results, proposal_nums, iou_thrs, logger='silent') + log_msg = [] + for i, num in enumerate(proposal_nums): + eval_results[f'AR@{num}'] = ar[i] + log_msg.append(f'\nAR@{num}\t{ar[i]:.4f}') + log_msg = ''.join(log_msg) + print_log(log_msg, logger=logger) + continue + + if metric not in result_files: + raise KeyError(f'{metric} is not in results') + try: + cocoDt = cocoGt.loadRes(result_files[metric]) + except IndexError: + print_log( + 'The testing results of the whole dataset is empty.', + logger=logger, + level=logging.ERROR) + break + + iou_type = 'bbox' if metric == 'proposal' else metric + cocoEval = COCOeval(cocoGt, cocoDt, iou_type) + cocoEval.params.catIds = self.cat_ids + cocoEval.params.imgIds = self.img_ids + cocoEval.params.maxDets = list(proposal_nums) + cocoEval.params.iouThrs = iou_thrs + # mapping of cocoEval.stats + coco_metric_names = { + 'mAP': 0, + 'mAP_50': 1, + 'mAP_75': 2, + 'mAP_s': 3, + 'mAP_m': 4, + 'mAP_l': 5, + 'AR@100': 6, + 'AR@300': 7, + 'AR@1000': 8, + 'AR_s@1000': 9, + 'AR_m@1000': 10, + 'AR_l@1000': 11 + } + if metric_items is not None: + for metric_item in metric_items: + if metric_item not in coco_metric_names: + raise KeyError( + f'metric item {metric_item} is not supported') + + if metric == 'proposal': + cocoEval.params.useCats = 0 + cocoEval.evaluate() + cocoEval.accumulate() + cocoEval.summarize() + if metric_items is None: + metric_items = [ + 'AR@100', 'AR@300', 'AR@1000', 'AR_s@1000', + 'AR_m@1000', 'AR_l@1000' + ] + + for item in metric_items: + val = float( + f'{cocoEval.stats[coco_metric_names[item]]:.3f}') + eval_results[item] = val + else: + cocoEval.evaluate() + cocoEval.accumulate() + cocoEval.summarize() + if classwise: # Compute per-category AP + # Compute per-category AP + # from https://github.com/facebookresearch/detectron2/ + precisions = cocoEval.eval['precision'] + # precision: (iou, recall, cls, area range, max dets) + assert len(self.cat_ids) == precisions.shape[2] + + results_per_category = [] + for idx, catId in enumerate(self.cat_ids): + # area range index 0: all area ranges + # max dets index -1: typically 100 per image + nm = self.coco.loadCats(catId)[0] + precision = precisions[:, :, idx, 0, -1] + precision = precision[precision > -1] + if precision.size: + ap = np.mean(precision) + else: + ap = float('nan') + results_per_category.append( + (f'{nm["name"]}', f'{float(ap):0.3f}')) + + num_columns = min(6, len(results_per_category) * 2) + results_flatten = list( + itertools.chain(*results_per_category)) + headers = ['category', 'AP'] * (num_columns // 2) + results_2d = itertools.zip_longest(*[ + results_flatten[i::num_columns] + for i in range(num_columns) + ]) + table_data = [headers] + table_data += [result for result in results_2d] + table = AsciiTable(table_data) + print_log('\n' + table.table, logger=logger) + + if metric_items is None: + metric_items = [ + 'mAP', 'mAP_50', 'mAP_75', 'mAP_s', 'mAP_m', 'mAP_l' + ] + + for metric_item in metric_items: + key = f'{metric}_{metric_item}' + val = float( + f'{cocoEval.stats[coco_metric_names[metric_item]]:.3f}' + ) + eval_results[key] = val + ap = cocoEval.stats[:6] + eval_results[f'{metric}_mAP_copypaste'] = ( + f'{ap[0]:.3f} {ap[1]:.3f} {ap[2]:.3f} {ap[3]:.3f} ' + f'{ap[4]:.3f} {ap[5]:.3f}') + if tmp_dir is not None: + tmp_dir.cleanup() + return eval_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/custom.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/custom.py new file mode 100644 index 00000000..7ec46405 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/custom.py @@ -0,0 +1,324 @@ +import os.path as osp +import warnings +from collections import OrderedDict + +import mmcv +import numpy as np +from mmcv.utils import print_log +from torch.utils.data import Dataset + +from mmdet.core import eval_map, eval_recalls +from .builder import DATASETS +from .pipelines import Compose + + +@DATASETS.register_module() +class CustomDataset(Dataset): + """Custom dataset for detection. + + The annotation format is shown as follows. The `ann` field is optional for + testing. + + .. code-block:: none + + [ + { + 'filename': 'a.jpg', + 'width': 1280, + 'height': 720, + 'ann': { + 'bboxes': (n, 4) in (x1, y1, x2, y2) order. + 'labels': (n, ), + 'bboxes_ignore': (k, 4), (optional field) + 'labels_ignore': (k, 4) (optional field) + } + }, + ... + ] + + Args: + ann_file (str): Annotation file path. + pipeline (list[dict]): Processing pipeline. + classes (str | Sequence[str], optional): Specify classes to load. + If is None, ``cls.CLASSES`` will be used. Default: None. + data_root (str, optional): Data root for ``ann_file``, + ``img_prefix``, ``seg_prefix``, ``proposal_file`` if specified. + test_mode (bool, optional): If set True, annotation will not be loaded. + filter_empty_gt (bool, optional): If set true, images without bounding + boxes of the dataset's classes will be filtered out. This option + only works when `test_mode=False`, i.e., we never filter images + during tests. + """ + + CLASSES = None + + def __init__(self, + ann_file, + pipeline, + classes=None, + data_root=None, + img_prefix='', + seg_prefix=None, + proposal_file=None, + test_mode=False, + filter_empty_gt=True): + self.ann_file = ann_file + self.data_root = data_root + self.img_prefix = img_prefix + self.seg_prefix = seg_prefix + self.proposal_file = proposal_file + self.test_mode = test_mode + self.filter_empty_gt = filter_empty_gt + self.CLASSES = self.get_classes(classes) + + # join paths if data_root is specified + if self.data_root is not None: + if not osp.isabs(self.ann_file): + self.ann_file = osp.join(self.data_root, self.ann_file) + if not (self.img_prefix is None or osp.isabs(self.img_prefix)): + self.img_prefix = osp.join(self.data_root, self.img_prefix) + if not (self.seg_prefix is None or osp.isabs(self.seg_prefix)): + self.seg_prefix = osp.join(self.data_root, self.seg_prefix) + if not (self.proposal_file is None + or osp.isabs(self.proposal_file)): + self.proposal_file = osp.join(self.data_root, + self.proposal_file) + # load annotations (and proposals) + self.data_infos = self.load_annotations(self.ann_file) + + if self.proposal_file is not None: + self.proposals = self.load_proposals(self.proposal_file) + else: + self.proposals = None + + # filter images too small and containing no annotations + if not test_mode: + valid_inds = self._filter_imgs() + self.data_infos = [self.data_infos[i] for i in valid_inds] + if self.proposals is not None: + self.proposals = [self.proposals[i] for i in valid_inds] + # set group flag for the sampler + self._set_group_flag() + + # processing pipeline + self.pipeline = Compose(pipeline) + + def __len__(self): + """Total number of samples of data.""" + return len(self.data_infos) + + def load_annotations(self, ann_file): + """Load annotation from annotation file.""" + return mmcv.load(ann_file) + + def load_proposals(self, proposal_file): + """Load proposal from proposal file.""" + return mmcv.load(proposal_file) + + def get_ann_info(self, idx): + """Get annotation by index. + + Args: + idx (int): Index of data. + + Returns: + dict: Annotation info of specified index. + """ + + return self.data_infos[idx]['ann'] + + def get_cat_ids(self, idx): + """Get category ids by index. + + Args: + idx (int): Index of data. + + Returns: + list[int]: All categories in the image of specified index. + """ + + return self.data_infos[idx]['ann']['labels'].astype(np.int).tolist() + + def pre_pipeline(self, results): + """Prepare results dict for pipeline.""" + results['img_prefix'] = self.img_prefix + results['seg_prefix'] = self.seg_prefix + results['proposal_file'] = self.proposal_file + results['bbox_fields'] = [] + results['mask_fields'] = [] + results['seg_fields'] = [] + + def _filter_imgs(self, min_size=32): + """Filter images too small.""" + if self.filter_empty_gt: + warnings.warn( + 'CustomDataset does not support filtering empty gt images.') + valid_inds = [] + for i, img_info in enumerate(self.data_infos): + if min(img_info['width'], img_info['height']) >= min_size: + valid_inds.append(i) + return valid_inds + + def _set_group_flag(self): + """Set flag according to image aspect ratio. + + Images with aspect ratio greater than 1 will be set as group 1, + otherwise group 0. + """ + self.flag = np.zeros(len(self), dtype=np.uint8) + for i in range(len(self)): + img_info = self.data_infos[i] + if img_info['width'] / img_info['height'] > 1: + self.flag[i] = 1 + + def _rand_another(self, idx): + """Get another random index from the same group as the given index.""" + pool = np.where(self.flag == self.flag[idx])[0] + return np.random.choice(pool) + + def __getitem__(self, idx): + """Get training/test data after pipeline. + + Args: + idx (int): Index of data. + + Returns: + dict: Training/test data (with annotation if `test_mode` is set \ + True). + """ + + if self.test_mode: + return self.prepare_test_img(idx) + while True: + data = self.prepare_train_img(idx) + if data is None: + idx = self._rand_another(idx) + continue + return data + + def prepare_train_img(self, idx): + """Get training data and annotations after pipeline. + + Args: + idx (int): Index of data. + + Returns: + dict: Training data and annotation after pipeline with new keys \ + introduced by pipeline. + """ + + img_info = self.data_infos[idx] + ann_info = self.get_ann_info(idx) + results = dict(img_info=img_info, ann_info=ann_info) + if self.proposals is not None: + results['proposals'] = self.proposals[idx] + self.pre_pipeline(results) + return self.pipeline(results) + + def prepare_test_img(self, idx): + """Get testing data after pipeline. + + Args: + idx (int): Index of data. + + Returns: + dict: Testing data after pipeline with new keys intorduced by \ + piepline. + """ + + img_info = self.data_infos[idx] + results = dict(img_info=img_info) + if self.proposals is not None: + results['proposals'] = self.proposals[idx] + self.pre_pipeline(results) + return self.pipeline(results) + + @classmethod + def get_classes(cls, classes=None): + """Get class names of current dataset. + + Args: + classes (Sequence[str] | str | None): If classes is None, use + default CLASSES defined by builtin dataset. If classes is a + string, take it as a file name. The file contains the name of + classes where each line contains one class name. If classes is + a tuple or list, override the CLASSES defined by the dataset. + + Returns: + tuple[str] or list[str]: Names of categories of the dataset. + """ + if classes is None: + return cls.CLASSES + + if isinstance(classes, str): + # take it as a file path + class_names = mmcv.list_from_file(classes) + elif isinstance(classes, (tuple, list)): + class_names = classes + else: + raise ValueError(f'Unsupported type {type(classes)} of classes.') + + return class_names + + def format_results(self, results, **kwargs): + """Place holder to format result to dataset specific output.""" + pass + + def evaluate(self, + results, + metric='mAP', + logger=None, + proposal_nums=(100, 300, 1000), + iou_thr=0.5, + scale_ranges=None): + """Evaluate the dataset. + + Args: + results (list): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. + logger (logging.Logger | None | str): Logger used for printing + related information during evaluation. Default: None. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thr (float | list[float]): IoU threshold. Default: 0.5. + scale_ranges (list[tuple] | None): Scale ranges for evaluating mAP. + Default: None. + """ + + if not isinstance(metric, str): + assert len(metric) == 1 + metric = metric[0] + allowed_metrics = ['mAP', 'recall'] + if metric not in allowed_metrics: + raise KeyError(f'metric {metric} is not supported') + annotations = [self.get_ann_info(i) for i in range(len(self))] + eval_results = OrderedDict() + iou_thrs = [iou_thr] if isinstance(iou_thr, float) else iou_thr + if metric == 'mAP': + assert isinstance(iou_thrs, list) + mean_aps = [] + for iou_thr in iou_thrs: + print_log(f'\n{"-" * 15}iou_thr: {iou_thr}{"-" * 15}') + mean_ap, _ = eval_map( + results, + annotations, + scale_ranges=scale_ranges, + iou_thr=iou_thr, + dataset=self.CLASSES, + logger=logger) + mean_aps.append(mean_ap) + eval_results[f'AP{int(iou_thr * 100):02d}'] = round(mean_ap, 3) + eval_results['mAP'] = sum(mean_aps) / len(mean_aps) + elif metric == 'recall': + gt_bboxes = [ann['bboxes'] for ann in annotations] + recalls = eval_recalls( + gt_bboxes, results, proposal_nums, iou_thr, logger=logger) + for i, num in enumerate(proposal_nums): + for j, iou in enumerate(iou_thr): + eval_results[f'recall@{num}@{iou}'] = recalls[i, j] + if recalls.shape[1] > 1: + ar = recalls.mean(axis=1) + for i, num in enumerate(proposal_nums): + eval_results[f'AR@{num}'] = ar[i] + return eval_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/dataset_wrappers.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/dataset_wrappers.py new file mode 100644 index 00000000..55ad5cb6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/dataset_wrappers.py @@ -0,0 +1,282 @@ +import bisect +import math +from collections import defaultdict + +import numpy as np +from mmcv.utils import print_log +from torch.utils.data.dataset import ConcatDataset as _ConcatDataset + +from .builder import DATASETS +from .coco import CocoDataset + + +@DATASETS.register_module() +class ConcatDataset(_ConcatDataset): + """A wrapper of concatenated dataset. + + Same as :obj:`torch.utils.data.dataset.ConcatDataset`, but + concat the group flag for image aspect ratio. + + Args: + datasets (list[:obj:`Dataset`]): A list of datasets. + separate_eval (bool): Whether to evaluate the results + separately if it is used as validation dataset. + Defaults to True. + """ + + def __init__(self, datasets, separate_eval=True): + super(ConcatDataset, self).__init__(datasets) + self.CLASSES = datasets[0].CLASSES + self.separate_eval = separate_eval + if not separate_eval: + if any([isinstance(ds, CocoDataset) for ds in datasets]): + raise NotImplementedError( + 'Evaluating concatenated CocoDataset as a whole is not' + ' supported! Please set "separate_eval=True"') + elif len(set([type(ds) for ds in datasets])) != 1: + raise NotImplementedError( + 'All the datasets should have same types') + + if hasattr(datasets[0], 'flag'): + flags = [] + for i in range(0, len(datasets)): + flags.append(datasets[i].flag) + self.flag = np.concatenate(flags) + + def get_cat_ids(self, idx): + """Get category ids of concatenated dataset by index. + + Args: + idx (int): Index of data. + + Returns: + list[int]: All categories in the image of specified index. + """ + + if idx < 0: + if -idx > len(self): + raise ValueError( + 'absolute value of index should not exceed dataset length') + idx = len(self) + idx + dataset_idx = bisect.bisect_right(self.cumulative_sizes, idx) + if dataset_idx == 0: + sample_idx = idx + else: + sample_idx = idx - self.cumulative_sizes[dataset_idx - 1] + return self.datasets[dataset_idx].get_cat_ids(sample_idx) + + def evaluate(self, results, logger=None, **kwargs): + """Evaluate the results. + + Args: + results (list[list | tuple]): Testing results of the dataset. + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + + Returns: + dict[str: float]: AP results of the total dataset or each separate + dataset if `self.separate_eval=True`. + """ + assert len(results) == self.cumulative_sizes[-1], \ + ('Dataset and results have different sizes: ' + f'{self.cumulative_sizes[-1]} v.s. {len(results)}') + + # Check whether all the datasets support evaluation + for dataset in self.datasets: + assert hasattr(dataset, 'evaluate'), \ + f'{type(dataset)} does not implement evaluate function' + + if self.separate_eval: + dataset_idx = -1 + total_eval_results = dict() + for size, dataset in zip(self.cumulative_sizes, self.datasets): + start_idx = 0 if dataset_idx == -1 else \ + self.cumulative_sizes[dataset_idx] + end_idx = self.cumulative_sizes[dataset_idx + 1] + + results_per_dataset = results[start_idx:end_idx] + print_log( + f'\nEvaluateing {dataset.ann_file} with ' + f'{len(results_per_dataset)} images now', + logger=logger) + + eval_results_per_dataset = dataset.evaluate( + results_per_dataset, logger=logger, **kwargs) + dataset_idx += 1 + for k, v in eval_results_per_dataset.items(): + total_eval_results.update({f'{dataset_idx}_{k}': v}) + + return total_eval_results + elif any([isinstance(ds, CocoDataset) for ds in self.datasets]): + raise NotImplementedError( + 'Evaluating concatenated CocoDataset as a whole is not' + ' supported! Please set "separate_eval=True"') + elif len(set([type(ds) for ds in self.datasets])) != 1: + raise NotImplementedError( + 'All the datasets should have same types') + else: + original_data_infos = self.datasets[0].data_infos + self.datasets[0].data_infos = sum( + [dataset.data_infos for dataset in self.datasets], []) + eval_results = self.datasets[0].evaluate( + results, logger=logger, **kwargs) + self.datasets[0].data_infos = original_data_infos + return eval_results + + +@DATASETS.register_module() +class RepeatDataset(object): + """A wrapper of repeated dataset. + + The length of repeated dataset will be `times` larger than the original + dataset. This is useful when the data loading time is long but the dataset + is small. Using RepeatDataset can reduce the data loading time between + epochs. + + Args: + dataset (:obj:`Dataset`): The dataset to be repeated. + times (int): Repeat times. + """ + + def __init__(self, dataset, times): + self.dataset = dataset + self.times = times + self.CLASSES = dataset.CLASSES + if hasattr(self.dataset, 'flag'): + self.flag = np.tile(self.dataset.flag, times) + + self._ori_len = len(self.dataset) + + def __getitem__(self, idx): + return self.dataset[idx % self._ori_len] + + def get_cat_ids(self, idx): + """Get category ids of repeat dataset by index. + + Args: + idx (int): Index of data. + + Returns: + list[int]: All categories in the image of specified index. + """ + + return self.dataset.get_cat_ids(idx % self._ori_len) + + def __len__(self): + """Length after repetition.""" + return self.times * self._ori_len + + +# Modified from https://github.com/facebookresearch/detectron2/blob/41d475b75a230221e21d9cac5d69655e3415e3a4/detectron2/data/samplers/distributed_sampler.py#L57 # noqa +@DATASETS.register_module() +class ClassBalancedDataset(object): + """A wrapper of repeated dataset with repeat factor. + + Suitable for training on class imbalanced datasets like LVIS. Following + the sampling strategy in the `paper `_, + in each epoch, an image may appear multiple times based on its + "repeat factor". + The repeat factor for an image is a function of the frequency the rarest + category labeled in that image. The "frequency of category c" in [0, 1] + is defined by the fraction of images in the training set (without repeats) + in which category c appears. + The dataset needs to instantiate :func:`self.get_cat_ids` to support + ClassBalancedDataset. + + The repeat factor is computed as followed. + + 1. For each category c, compute the fraction # of images + that contain it: :math:`f(c)` + 2. For each category c, compute the category-level repeat factor: + :math:`r(c) = max(1, sqrt(t/f(c)))` + 3. For each image I, compute the image-level repeat factor: + :math:`r(I) = max_{c in I} r(c)` + + Args: + dataset (:obj:`CustomDataset`): The dataset to be repeated. + oversample_thr (float): frequency threshold below which data is + repeated. For categories with ``f_c >= oversample_thr``, there is + no oversampling. For categories with ``f_c < oversample_thr``, the + degree of oversampling following the square-root inverse frequency + heuristic above. + filter_empty_gt (bool, optional): If set true, images without bounding + boxes will not be oversampled. Otherwise, they will be categorized + as the pure background class and involved into the oversampling. + Default: True. + """ + + def __init__(self, dataset, oversample_thr, filter_empty_gt=True): + self.dataset = dataset + self.oversample_thr = oversample_thr + self.filter_empty_gt = filter_empty_gt + self.CLASSES = dataset.CLASSES + + repeat_factors = self._get_repeat_factors(dataset, oversample_thr) + repeat_indices = [] + for dataset_idx, repeat_factor in enumerate(repeat_factors): + repeat_indices.extend([dataset_idx] * math.ceil(repeat_factor)) + self.repeat_indices = repeat_indices + + flags = [] + if hasattr(self.dataset, 'flag'): + for flag, repeat_factor in zip(self.dataset.flag, repeat_factors): + flags.extend([flag] * int(math.ceil(repeat_factor))) + assert len(flags) == len(repeat_indices) + self.flag = np.asarray(flags, dtype=np.uint8) + + def _get_repeat_factors(self, dataset, repeat_thr): + """Get repeat factor for each images in the dataset. + + Args: + dataset (:obj:`CustomDataset`): The dataset + repeat_thr (float): The threshold of frequency. If an image + contains the categories whose frequency below the threshold, + it would be repeated. + + Returns: + list[float]: The repeat factors for each images in the dataset. + """ + + # 1. For each category c, compute the fraction # of images + # that contain it: f(c) + category_freq = defaultdict(int) + num_images = len(dataset) + for idx in range(num_images): + cat_ids = set(self.dataset.get_cat_ids(idx)) + if len(cat_ids) == 0 and not self.filter_empty_gt: + cat_ids = set([len(self.CLASSES)]) + for cat_id in cat_ids: + category_freq[cat_id] += 1 + for k, v in category_freq.items(): + category_freq[k] = v / num_images + + # 2. For each category c, compute the category-level repeat factor: + # r(c) = max(1, sqrt(t/f(c))) + category_repeat = { + cat_id: max(1.0, math.sqrt(repeat_thr / cat_freq)) + for cat_id, cat_freq in category_freq.items() + } + + # 3. For each image I, compute the image-level repeat factor: + # r(I) = max_{c in I} r(c) + repeat_factors = [] + for idx in range(num_images): + cat_ids = set(self.dataset.get_cat_ids(idx)) + if len(cat_ids) == 0 and not self.filter_empty_gt: + cat_ids = set([len(self.CLASSES)]) + repeat_factor = 1 + if len(cat_ids) > 0: + repeat_factor = max( + {category_repeat[cat_id] + for cat_id in cat_ids}) + repeat_factors.append(repeat_factor) + + return repeat_factors + + def __getitem__(self, idx): + ori_index = self.repeat_indices[idx] + return self.dataset[ori_index] + + def __len__(self): + """Length after repetition.""" + return len(self.repeat_indices) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/deepfashion.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/deepfashion.py new file mode 100644 index 00000000..11253760 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/deepfashion.py @@ -0,0 +1,10 @@ +from .builder import DATASETS +from .coco import CocoDataset + + +@DATASETS.register_module() +class DeepFashionDataset(CocoDataset): + + CLASSES = ('top', 'skirt', 'leggings', 'dress', 'outer', 'pants', 'bag', + 'neckwear', 'headwear', 'eyeglass', 'belt', 'footwear', 'hair', + 'skin', 'face') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/lvis.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/lvis.py new file mode 100644 index 00000000..122c64e7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/lvis.py @@ -0,0 +1,742 @@ +import itertools +import logging +import os.path as osp +import tempfile +from collections import OrderedDict + +import numpy as np +from mmcv.utils import print_log +from terminaltables import AsciiTable + +from .builder import DATASETS +from .coco import CocoDataset + + +@DATASETS.register_module() +class LVISV05Dataset(CocoDataset): + + CLASSES = ( + 'acorn', 'aerosol_can', 'air_conditioner', 'airplane', 'alarm_clock', + 'alcohol', 'alligator', 'almond', 'ambulance', 'amplifier', 'anklet', + 'antenna', 'apple', 'apple_juice', 'applesauce', 'apricot', 'apron', + 'aquarium', 'armband', 'armchair', 'armoire', 'armor', 'artichoke', + 'trash_can', 'ashtray', 'asparagus', 'atomizer', 'avocado', 'award', + 'awning', 'ax', 'baby_buggy', 'basketball_backboard', 'backpack', + 'handbag', 'suitcase', 'bagel', 'bagpipe', 'baguet', 'bait', 'ball', + 'ballet_skirt', 'balloon', 'bamboo', 'banana', 'Band_Aid', 'bandage', + 'bandanna', 'banjo', 'banner', 'barbell', 'barge', 'barrel', + 'barrette', 'barrow', 'baseball_base', 'baseball', 'baseball_bat', + 'baseball_cap', 'baseball_glove', 'basket', 'basketball_hoop', + 'basketball', 'bass_horn', 'bat_(animal)', 'bath_mat', 'bath_towel', + 'bathrobe', 'bathtub', 'batter_(food)', 'battery', 'beachball', 'bead', + 'beaker', 'bean_curd', 'beanbag', 'beanie', 'bear', 'bed', + 'bedspread', 'cow', 'beef_(food)', 'beeper', 'beer_bottle', 'beer_can', + 'beetle', 'bell', 'bell_pepper', 'belt', 'belt_buckle', 'bench', + 'beret', 'bib', 'Bible', 'bicycle', 'visor', 'binder', 'binoculars', + 'bird', 'birdfeeder', 'birdbath', 'birdcage', 'birdhouse', + 'birthday_cake', 'birthday_card', 'biscuit_(bread)', 'pirate_flag', + 'black_sheep', 'blackboard', 'blanket', 'blazer', 'blender', 'blimp', + 'blinker', 'blueberry', 'boar', 'gameboard', 'boat', 'bobbin', + 'bobby_pin', 'boiled_egg', 'bolo_tie', 'deadbolt', 'bolt', 'bonnet', + 'book', 'book_bag', 'bookcase', 'booklet', 'bookmark', + 'boom_microphone', 'boot', 'bottle', 'bottle_opener', 'bouquet', + 'bow_(weapon)', 'bow_(decorative_ribbons)', 'bow-tie', 'bowl', + 'pipe_bowl', 'bowler_hat', 'bowling_ball', 'bowling_pin', + 'boxing_glove', 'suspenders', 'bracelet', 'brass_plaque', 'brassiere', + 'bread-bin', 'breechcloth', 'bridal_gown', 'briefcase', + 'bristle_brush', 'broccoli', 'broach', 'broom', 'brownie', + 'brussels_sprouts', 'bubble_gum', 'bucket', 'horse_buggy', 'bull', + 'bulldog', 'bulldozer', 'bullet_train', 'bulletin_board', + 'bulletproof_vest', 'bullhorn', 'corned_beef', 'bun', 'bunk_bed', + 'buoy', 'burrito', 'bus_(vehicle)', 'business_card', 'butcher_knife', + 'butter', 'butterfly', 'button', 'cab_(taxi)', 'cabana', 'cabin_car', + 'cabinet', 'locker', 'cake', 'calculator', 'calendar', 'calf', + 'camcorder', 'camel', 'camera', 'camera_lens', 'camper_(vehicle)', + 'can', 'can_opener', 'candelabrum', 'candle', 'candle_holder', + 'candy_bar', 'candy_cane', 'walking_cane', 'canister', 'cannon', + 'canoe', 'cantaloup', 'canteen', 'cap_(headwear)', 'bottle_cap', + 'cape', 'cappuccino', 'car_(automobile)', 'railcar_(part_of_a_train)', + 'elevator_car', 'car_battery', 'identity_card', 'card', 'cardigan', + 'cargo_ship', 'carnation', 'horse_carriage', 'carrot', 'tote_bag', + 'cart', 'carton', 'cash_register', 'casserole', 'cassette', 'cast', + 'cat', 'cauliflower', 'caviar', 'cayenne_(spice)', 'CD_player', + 'celery', 'cellular_telephone', 'chain_mail', 'chair', 'chaise_longue', + 'champagne', 'chandelier', 'chap', 'checkbook', 'checkerboard', + 'cherry', 'chessboard', 'chest_of_drawers_(furniture)', + 'chicken_(animal)', 'chicken_wire', 'chickpea', 'Chihuahua', + 'chili_(vegetable)', 'chime', 'chinaware', 'crisp_(potato_chip)', + 'poker_chip', 'chocolate_bar', 'chocolate_cake', 'chocolate_milk', + 'chocolate_mousse', 'choker', 'chopping_board', 'chopstick', + 'Christmas_tree', 'slide', 'cider', 'cigar_box', 'cigarette', + 'cigarette_case', 'cistern', 'clarinet', 'clasp', 'cleansing_agent', + 'clementine', 'clip', 'clipboard', 'clock', 'clock_tower', + 'clothes_hamper', 'clothespin', 'clutch_bag', 'coaster', 'coat', + 'coat_hanger', 'coatrack', 'cock', 'coconut', 'coffee_filter', + 'coffee_maker', 'coffee_table', 'coffeepot', 'coil', 'coin', + 'colander', 'coleslaw', 'coloring_material', 'combination_lock', + 'pacifier', 'comic_book', 'computer_keyboard', 'concrete_mixer', + 'cone', 'control', 'convertible_(automobile)', 'sofa_bed', 'cookie', + 'cookie_jar', 'cooking_utensil', 'cooler_(for_food)', + 'cork_(bottle_plug)', 'corkboard', 'corkscrew', 'edible_corn', + 'cornbread', 'cornet', 'cornice', 'cornmeal', 'corset', + 'romaine_lettuce', 'costume', 'cougar', 'coverall', 'cowbell', + 'cowboy_hat', 'crab_(animal)', 'cracker', 'crape', 'crate', 'crayon', + 'cream_pitcher', 'credit_card', 'crescent_roll', 'crib', 'crock_pot', + 'crossbar', 'crouton', 'crow', 'crown', 'crucifix', 'cruise_ship', + 'police_cruiser', 'crumb', 'crutch', 'cub_(animal)', 'cube', + 'cucumber', 'cufflink', 'cup', 'trophy_cup', 'cupcake', 'hair_curler', + 'curling_iron', 'curtain', 'cushion', 'custard', 'cutting_tool', + 'cylinder', 'cymbal', 'dachshund', 'dagger', 'dartboard', + 'date_(fruit)', 'deck_chair', 'deer', 'dental_floss', 'desk', + 'detergent', 'diaper', 'diary', 'die', 'dinghy', 'dining_table', 'tux', + 'dish', 'dish_antenna', 'dishrag', 'dishtowel', 'dishwasher', + 'dishwasher_detergent', 'diskette', 'dispenser', 'Dixie_cup', 'dog', + 'dog_collar', 'doll', 'dollar', 'dolphin', 'domestic_ass', 'eye_mask', + 'doorbell', 'doorknob', 'doormat', 'doughnut', 'dove', 'dragonfly', + 'drawer', 'underdrawers', 'dress', 'dress_hat', 'dress_suit', + 'dresser', 'drill', 'drinking_fountain', 'drone', 'dropper', + 'drum_(musical_instrument)', 'drumstick', 'duck', 'duckling', + 'duct_tape', 'duffel_bag', 'dumbbell', 'dumpster', 'dustpan', + 'Dutch_oven', 'eagle', 'earphone', 'earplug', 'earring', 'easel', + 'eclair', 'eel', 'egg', 'egg_roll', 'egg_yolk', 'eggbeater', + 'eggplant', 'electric_chair', 'refrigerator', 'elephant', 'elk', + 'envelope', 'eraser', 'escargot', 'eyepatch', 'falcon', 'fan', + 'faucet', 'fedora', 'ferret', 'Ferris_wheel', 'ferry', 'fig_(fruit)', + 'fighter_jet', 'figurine', 'file_cabinet', 'file_(tool)', 'fire_alarm', + 'fire_engine', 'fire_extinguisher', 'fire_hose', 'fireplace', + 'fireplug', 'fish', 'fish_(food)', 'fishbowl', 'fishing_boat', + 'fishing_rod', 'flag', 'flagpole', 'flamingo', 'flannel', 'flash', + 'flashlight', 'fleece', 'flip-flop_(sandal)', 'flipper_(footwear)', + 'flower_arrangement', 'flute_glass', 'foal', 'folding_chair', + 'food_processor', 'football_(American)', 'football_helmet', + 'footstool', 'fork', 'forklift', 'freight_car', 'French_toast', + 'freshener', 'frisbee', 'frog', 'fruit_juice', 'fruit_salad', + 'frying_pan', 'fudge', 'funnel', 'futon', 'gag', 'garbage', + 'garbage_truck', 'garden_hose', 'gargle', 'gargoyle', 'garlic', + 'gasmask', 'gazelle', 'gelatin', 'gemstone', 'giant_panda', + 'gift_wrap', 'ginger', 'giraffe', 'cincture', + 'glass_(drink_container)', 'globe', 'glove', 'goat', 'goggles', + 'goldfish', 'golf_club', 'golfcart', 'gondola_(boat)', 'goose', + 'gorilla', 'gourd', 'surgical_gown', 'grape', 'grasshopper', 'grater', + 'gravestone', 'gravy_boat', 'green_bean', 'green_onion', 'griddle', + 'grillroom', 'grinder_(tool)', 'grits', 'grizzly', 'grocery_bag', + 'guacamole', 'guitar', 'gull', 'gun', 'hair_spray', 'hairbrush', + 'hairnet', 'hairpin', 'ham', 'hamburger', 'hammer', 'hammock', + 'hamper', 'hamster', 'hair_dryer', 'hand_glass', 'hand_towel', + 'handcart', 'handcuff', 'handkerchief', 'handle', 'handsaw', + 'hardback_book', 'harmonium', 'hat', 'hatbox', 'hatch', 'veil', + 'headband', 'headboard', 'headlight', 'headscarf', 'headset', + 'headstall_(for_horses)', 'hearing_aid', 'heart', 'heater', + 'helicopter', 'helmet', 'heron', 'highchair', 'hinge', 'hippopotamus', + 'hockey_stick', 'hog', 'home_plate_(baseball)', 'honey', 'fume_hood', + 'hook', 'horse', 'hose', 'hot-air_balloon', 'hotplate', 'hot_sauce', + 'hourglass', 'houseboat', 'hummingbird', 'hummus', 'polar_bear', + 'icecream', 'popsicle', 'ice_maker', 'ice_pack', 'ice_skate', + 'ice_tea', 'igniter', 'incense', 'inhaler', 'iPod', + 'iron_(for_clothing)', 'ironing_board', 'jacket', 'jam', 'jean', + 'jeep', 'jelly_bean', 'jersey', 'jet_plane', 'jewelry', 'joystick', + 'jumpsuit', 'kayak', 'keg', 'kennel', 'kettle', 'key', 'keycard', + 'kilt', 'kimono', 'kitchen_sink', 'kitchen_table', 'kite', 'kitten', + 'kiwi_fruit', 'knee_pad', 'knife', 'knight_(chess_piece)', + 'knitting_needle', 'knob', 'knocker_(on_a_door)', 'koala', 'lab_coat', + 'ladder', 'ladle', 'ladybug', 'lamb_(animal)', 'lamb-chop', 'lamp', + 'lamppost', 'lampshade', 'lantern', 'lanyard', 'laptop_computer', + 'lasagna', 'latch', 'lawn_mower', 'leather', 'legging_(clothing)', + 'Lego', 'lemon', 'lemonade', 'lettuce', 'license_plate', 'life_buoy', + 'life_jacket', 'lightbulb', 'lightning_rod', 'lime', 'limousine', + 'linen_paper', 'lion', 'lip_balm', 'lipstick', 'liquor', 'lizard', + 'Loafer_(type_of_shoe)', 'log', 'lollipop', 'lotion', + 'speaker_(stero_equipment)', 'loveseat', 'machine_gun', 'magazine', + 'magnet', 'mail_slot', 'mailbox_(at_home)', 'mallet', 'mammoth', + 'mandarin_orange', 'manger', 'manhole', 'map', 'marker', 'martini', + 'mascot', 'mashed_potato', 'masher', 'mask', 'mast', + 'mat_(gym_equipment)', 'matchbox', 'mattress', 'measuring_cup', + 'measuring_stick', 'meatball', 'medicine', 'melon', 'microphone', + 'microscope', 'microwave_oven', 'milestone', 'milk', 'minivan', + 'mint_candy', 'mirror', 'mitten', 'mixer_(kitchen_tool)', 'money', + 'monitor_(computer_equipment) computer_monitor', 'monkey', 'motor', + 'motor_scooter', 'motor_vehicle', 'motorboat', 'motorcycle', + 'mound_(baseball)', 'mouse_(animal_rodent)', + 'mouse_(computer_equipment)', 'mousepad', 'muffin', 'mug', 'mushroom', + 'music_stool', 'musical_instrument', 'nailfile', 'nameplate', 'napkin', + 'neckerchief', 'necklace', 'necktie', 'needle', 'nest', 'newsstand', + 'nightshirt', 'nosebag_(for_animals)', 'noseband_(for_animals)', + 'notebook', 'notepad', 'nut', 'nutcracker', 'oar', 'octopus_(food)', + 'octopus_(animal)', 'oil_lamp', 'olive_oil', 'omelet', 'onion', + 'orange_(fruit)', 'orange_juice', 'oregano', 'ostrich', 'ottoman', + 'overalls_(clothing)', 'owl', 'packet', 'inkpad', 'pad', 'paddle', + 'padlock', 'paintbox', 'paintbrush', 'painting', 'pajamas', 'palette', + 'pan_(for_cooking)', 'pan_(metal_container)', 'pancake', 'pantyhose', + 'papaya', 'paperclip', 'paper_plate', 'paper_towel', 'paperback_book', + 'paperweight', 'parachute', 'parakeet', 'parasail_(sports)', + 'parchment', 'parka', 'parking_meter', 'parrot', + 'passenger_car_(part_of_a_train)', 'passenger_ship', 'passport', + 'pastry', 'patty_(food)', 'pea_(food)', 'peach', 'peanut_butter', + 'pear', 'peeler_(tool_for_fruit_and_vegetables)', 'pegboard', + 'pelican', 'pen', 'pencil', 'pencil_box', 'pencil_sharpener', + 'pendulum', 'penguin', 'pennant', 'penny_(coin)', 'pepper', + 'pepper_mill', 'perfume', 'persimmon', 'baby', 'pet', 'petfood', + 'pew_(church_bench)', 'phonebook', 'phonograph_record', 'piano', + 'pickle', 'pickup_truck', 'pie', 'pigeon', 'piggy_bank', 'pillow', + 'pin_(non_jewelry)', 'pineapple', 'pinecone', 'ping-pong_ball', + 'pinwheel', 'tobacco_pipe', 'pipe', 'pistol', 'pita_(bread)', + 'pitcher_(vessel_for_liquid)', 'pitchfork', 'pizza', 'place_mat', + 'plate', 'platter', 'playing_card', 'playpen', 'pliers', + 'plow_(farm_equipment)', 'pocket_watch', 'pocketknife', + 'poker_(fire_stirring_tool)', 'pole', 'police_van', 'polo_shirt', + 'poncho', 'pony', 'pool_table', 'pop_(soda)', 'portrait', + 'postbox_(public)', 'postcard', 'poster', 'pot', 'flowerpot', 'potato', + 'potholder', 'pottery', 'pouch', 'power_shovel', 'prawn', 'printer', + 'projectile_(weapon)', 'projector', 'propeller', 'prune', 'pudding', + 'puffer_(fish)', 'puffin', 'pug-dog', 'pumpkin', 'puncher', 'puppet', + 'puppy', 'quesadilla', 'quiche', 'quilt', 'rabbit', 'race_car', + 'racket', 'radar', 'radiator', 'radio_receiver', 'radish', 'raft', + 'rag_doll', 'raincoat', 'ram_(animal)', 'raspberry', 'rat', + 'razorblade', 'reamer_(juicer)', 'rearview_mirror', 'receipt', + 'recliner', 'record_player', 'red_cabbage', 'reflector', + 'remote_control', 'rhinoceros', 'rib_(food)', 'rifle', 'ring', + 'river_boat', 'road_map', 'robe', 'rocking_chair', 'roller_skate', + 'Rollerblade', 'rolling_pin', 'root_beer', + 'router_(computer_equipment)', 'rubber_band', 'runner_(carpet)', + 'plastic_bag', 'saddle_(on_an_animal)', 'saddle_blanket', 'saddlebag', + 'safety_pin', 'sail', 'salad', 'salad_plate', 'salami', + 'salmon_(fish)', 'salmon_(food)', 'salsa', 'saltshaker', + 'sandal_(type_of_shoe)', 'sandwich', 'satchel', 'saucepan', 'saucer', + 'sausage', 'sawhorse', 'saxophone', 'scale_(measuring_instrument)', + 'scarecrow', 'scarf', 'school_bus', 'scissors', 'scoreboard', + 'scrambled_eggs', 'scraper', 'scratcher', 'screwdriver', + 'scrubbing_brush', 'sculpture', 'seabird', 'seahorse', 'seaplane', + 'seashell', 'seedling', 'serving_dish', 'sewing_machine', 'shaker', + 'shampoo', 'shark', 'sharpener', 'Sharpie', 'shaver_(electric)', + 'shaving_cream', 'shawl', 'shears', 'sheep', 'shepherd_dog', + 'sherbert', 'shield', 'shirt', 'shoe', 'shopping_bag', 'shopping_cart', + 'short_pants', 'shot_glass', 'shoulder_bag', 'shovel', 'shower_head', + 'shower_curtain', 'shredder_(for_paper)', 'sieve', 'signboard', 'silo', + 'sink', 'skateboard', 'skewer', 'ski', 'ski_boot', 'ski_parka', + 'ski_pole', 'skirt', 'sled', 'sleeping_bag', 'sling_(bandage)', + 'slipper_(footwear)', 'smoothie', 'snake', 'snowboard', 'snowman', + 'snowmobile', 'soap', 'soccer_ball', 'sock', 'soda_fountain', + 'carbonated_water', 'sofa', 'softball', 'solar_array', 'sombrero', + 'soup', 'soup_bowl', 'soupspoon', 'sour_cream', 'soya_milk', + 'space_shuttle', 'sparkler_(fireworks)', 'spatula', 'spear', + 'spectacles', 'spice_rack', 'spider', 'sponge', 'spoon', 'sportswear', + 'spotlight', 'squirrel', 'stapler_(stapling_machine)', 'starfish', + 'statue_(sculpture)', 'steak_(food)', 'steak_knife', + 'steamer_(kitchen_appliance)', 'steering_wheel', 'stencil', + 'stepladder', 'step_stool', 'stereo_(sound_system)', 'stew', 'stirrer', + 'stirrup', 'stockings_(leg_wear)', 'stool', 'stop_sign', 'brake_light', + 'stove', 'strainer', 'strap', 'straw_(for_drinking)', 'strawberry', + 'street_sign', 'streetlight', 'string_cheese', 'stylus', 'subwoofer', + 'sugar_bowl', 'sugarcane_(plant)', 'suit_(clothing)', 'sunflower', + 'sunglasses', 'sunhat', 'sunscreen', 'surfboard', 'sushi', 'mop', + 'sweat_pants', 'sweatband', 'sweater', 'sweatshirt', 'sweet_potato', + 'swimsuit', 'sword', 'syringe', 'Tabasco_sauce', 'table-tennis_table', + 'table', 'table_lamp', 'tablecloth', 'tachometer', 'taco', 'tag', + 'taillight', 'tambourine', 'army_tank', 'tank_(storage_vessel)', + 'tank_top_(clothing)', 'tape_(sticky_cloth_or_paper)', 'tape_measure', + 'tapestry', 'tarp', 'tartan', 'tassel', 'tea_bag', 'teacup', + 'teakettle', 'teapot', 'teddy_bear', 'telephone', 'telephone_booth', + 'telephone_pole', 'telephoto_lens', 'television_camera', + 'television_set', 'tennis_ball', 'tennis_racket', 'tequila', + 'thermometer', 'thermos_bottle', 'thermostat', 'thimble', 'thread', + 'thumbtack', 'tiara', 'tiger', 'tights_(clothing)', 'timer', 'tinfoil', + 'tinsel', 'tissue_paper', 'toast_(food)', 'toaster', 'toaster_oven', + 'toilet', 'toilet_tissue', 'tomato', 'tongs', 'toolbox', 'toothbrush', + 'toothpaste', 'toothpick', 'cover', 'tortilla', 'tow_truck', 'towel', + 'towel_rack', 'toy', 'tractor_(farm_equipment)', 'traffic_light', + 'dirt_bike', 'trailer_truck', 'train_(railroad_vehicle)', 'trampoline', + 'tray', 'tree_house', 'trench_coat', 'triangle_(musical_instrument)', + 'tricycle', 'tripod', 'trousers', 'truck', 'truffle_(chocolate)', + 'trunk', 'vat', 'turban', 'turkey_(bird)', 'turkey_(food)', 'turnip', + 'turtle', 'turtleneck_(clothing)', 'typewriter', 'umbrella', + 'underwear', 'unicycle', 'urinal', 'urn', 'vacuum_cleaner', 'valve', + 'vase', 'vending_machine', 'vent', 'videotape', 'vinegar', 'violin', + 'vodka', 'volleyball', 'vulture', 'waffle', 'waffle_iron', 'wagon', + 'wagon_wheel', 'walking_stick', 'wall_clock', 'wall_socket', 'wallet', + 'walrus', 'wardrobe', 'wasabi', 'automatic_washer', 'watch', + 'water_bottle', 'water_cooler', 'water_faucet', 'water_filter', + 'water_heater', 'water_jug', 'water_gun', 'water_scooter', 'water_ski', + 'water_tower', 'watering_can', 'watermelon', 'weathervane', 'webcam', + 'wedding_cake', 'wedding_ring', 'wet_suit', 'wheel', 'wheelchair', + 'whipped_cream', 'whiskey', 'whistle', 'wick', 'wig', 'wind_chime', + 'windmill', 'window_box_(for_plants)', 'windshield_wiper', 'windsock', + 'wine_bottle', 'wine_bucket', 'wineglass', 'wing_chair', + 'blinder_(for_horses)', 'wok', 'wolf', 'wooden_spoon', 'wreath', + 'wrench', 'wristband', 'wristlet', 'yacht', 'yak', 'yogurt', + 'yoke_(animal_equipment)', 'zebra', 'zucchini') + + def load_annotations(self, ann_file): + """Load annotation from lvis style annotation file. + + Args: + ann_file (str): Path of annotation file. + + Returns: + list[dict]: Annotation info from LVIS api. + """ + + try: + import lvis + assert lvis.__version__ >= '10.5.3' + from lvis import LVIS + except AssertionError: + raise AssertionError('Incompatible version of lvis is installed. ' + 'Run pip uninstall lvis first. Then run pip ' + 'install mmlvis to install open-mmlab forked ' + 'lvis. ') + except ImportError: + raise ImportError('Package lvis is not installed. Please run pip ' + 'install mmlvis to install open-mmlab forked ' + 'lvis.') + self.coco = LVIS(ann_file) + self.cat_ids = self.coco.get_cat_ids() + self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} + self.img_ids = self.coco.get_img_ids() + data_infos = [] + for i in self.img_ids: + info = self.coco.load_imgs([i])[0] + if info['file_name'].startswith('COCO'): + # Convert form the COCO 2014 file naming convention of + # COCO_[train/val/test]2014_000000000000.jpg to the 2017 + # naming convention of 000000000000.jpg + # (LVIS v1 will fix this naming issue) + info['filename'] = info['file_name'][-16:] + else: + info['filename'] = info['file_name'] + data_infos.append(info) + return data_infos + + def evaluate(self, + results, + metric='bbox', + logger=None, + jsonfile_prefix=None, + classwise=False, + proposal_nums=(100, 300, 1000), + iou_thrs=np.arange(0.5, 0.96, 0.05)): + """Evaluation in LVIS protocol. + + Args: + results (list[list | tuple]): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. Options are + 'bbox', 'segm', 'proposal', 'proposal_fast'. + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + jsonfile_prefix (str | None): + classwise (bool): Whether to evaluating the AP for each class. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thrs (Sequence[float]): IoU threshold used for evaluating + recalls. If set to a list, the average recall of all IoUs will + also be computed. Default: 0.5. + + Returns: + dict[str, float]: LVIS style metrics. + """ + + try: + import lvis + assert lvis.__version__ >= '10.5.3' + from lvis import LVISResults, LVISEval + except AssertionError: + raise AssertionError('Incompatible version of lvis is installed. ' + 'Run pip uninstall lvis first. Then run pip ' + 'install mmlvis to install open-mmlab forked ' + 'lvis. ') + except ImportError: + raise ImportError('Package lvis is not installed. Please run pip ' + 'install mmlvis to install open-mmlab forked ' + 'lvis.') + assert isinstance(results, list), 'results must be a list' + assert len(results) == len(self), ( + 'The length of results is not equal to the dataset len: {} != {}'. + format(len(results), len(self))) + + metrics = metric if isinstance(metric, list) else [metric] + allowed_metrics = ['bbox', 'segm', 'proposal', 'proposal_fast'] + for metric in metrics: + if metric not in allowed_metrics: + raise KeyError('metric {} is not supported'.format(metric)) + + if jsonfile_prefix is None: + tmp_dir = tempfile.TemporaryDirectory() + jsonfile_prefix = osp.join(tmp_dir.name, 'results') + else: + tmp_dir = None + result_files = self.results2json(results, jsonfile_prefix) + + eval_results = OrderedDict() + # get original api + lvis_gt = self.coco + for metric in metrics: + msg = 'Evaluating {}...'.format(metric) + if logger is None: + msg = '\n' + msg + print_log(msg, logger=logger) + + if metric == 'proposal_fast': + ar = self.fast_eval_recall( + results, proposal_nums, iou_thrs, logger='silent') + log_msg = [] + for i, num in enumerate(proposal_nums): + eval_results['AR@{}'.format(num)] = ar[i] + log_msg.append('\nAR@{}\t{:.4f}'.format(num, ar[i])) + log_msg = ''.join(log_msg) + print_log(log_msg, logger=logger) + continue + + if metric not in result_files: + raise KeyError('{} is not in results'.format(metric)) + try: + lvis_dt = LVISResults(lvis_gt, result_files[metric]) + except IndexError: + print_log( + 'The testing results of the whole dataset is empty.', + logger=logger, + level=logging.ERROR) + break + + iou_type = 'bbox' if metric == 'proposal' else metric + lvis_eval = LVISEval(lvis_gt, lvis_dt, iou_type) + lvis_eval.params.imgIds = self.img_ids + if metric == 'proposal': + lvis_eval.params.useCats = 0 + lvis_eval.params.maxDets = list(proposal_nums) + lvis_eval.evaluate() + lvis_eval.accumulate() + lvis_eval.summarize() + for k, v in lvis_eval.get_results().items(): + if k.startswith('AR'): + val = float('{:.3f}'.format(float(v))) + eval_results[k] = val + else: + lvis_eval.evaluate() + lvis_eval.accumulate() + lvis_eval.summarize() + lvis_results = lvis_eval.get_results() + if classwise: # Compute per-category AP + # Compute per-category AP + # from https://github.com/facebookresearch/detectron2/ + precisions = lvis_eval.eval['precision'] + # precision: (iou, recall, cls, area range, max dets) + assert len(self.cat_ids) == precisions.shape[2] + + results_per_category = [] + for idx, catId in enumerate(self.cat_ids): + # area range index 0: all area ranges + # max dets index -1: typically 100 per image + nm = self.coco.load_cats(catId)[0] + precision = precisions[:, :, idx, 0, -1] + precision = precision[precision > -1] + if precision.size: + ap = np.mean(precision) + else: + ap = float('nan') + results_per_category.append( + (f'{nm["name"]}', f'{float(ap):0.3f}')) + + num_columns = min(6, len(results_per_category) * 2) + results_flatten = list( + itertools.chain(*results_per_category)) + headers = ['category', 'AP'] * (num_columns // 2) + results_2d = itertools.zip_longest(*[ + results_flatten[i::num_columns] + for i in range(num_columns) + ]) + table_data = [headers] + table_data += [result for result in results_2d] + table = AsciiTable(table_data) + print_log('\n' + table.table, logger=logger) + + for k, v in lvis_results.items(): + if k.startswith('AP'): + key = '{}_{}'.format(metric, k) + val = float('{:.3f}'.format(float(v))) + eval_results[key] = val + ap_summary = ' '.join([ + '{}:{:.3f}'.format(k, float(v)) + for k, v in lvis_results.items() if k.startswith('AP') + ]) + eval_results['{}_mAP_copypaste'.format(metric)] = ap_summary + lvis_eval.print_results() + if tmp_dir is not None: + tmp_dir.cleanup() + return eval_results + + +LVISDataset = LVISV05Dataset +DATASETS.register_module(name='LVISDataset', module=LVISDataset) + + +@DATASETS.register_module() +class LVISV1Dataset(LVISDataset): + + CLASSES = ( + 'aerosol_can', 'air_conditioner', 'airplane', 'alarm_clock', 'alcohol', + 'alligator', 'almond', 'ambulance', 'amplifier', 'anklet', 'antenna', + 'apple', 'applesauce', 'apricot', 'apron', 'aquarium', + 'arctic_(type_of_shoe)', 'armband', 'armchair', 'armoire', 'armor', + 'artichoke', 'trash_can', 'ashtray', 'asparagus', 'atomizer', + 'avocado', 'award', 'awning', 'ax', 'baboon', 'baby_buggy', + 'basketball_backboard', 'backpack', 'handbag', 'suitcase', 'bagel', + 'bagpipe', 'baguet', 'bait', 'ball', 'ballet_skirt', 'balloon', + 'bamboo', 'banana', 'Band_Aid', 'bandage', 'bandanna', 'banjo', + 'banner', 'barbell', 'barge', 'barrel', 'barrette', 'barrow', + 'baseball_base', 'baseball', 'baseball_bat', 'baseball_cap', + 'baseball_glove', 'basket', 'basketball', 'bass_horn', 'bat_(animal)', + 'bath_mat', 'bath_towel', 'bathrobe', 'bathtub', 'batter_(food)', + 'battery', 'beachball', 'bead', 'bean_curd', 'beanbag', 'beanie', + 'bear', 'bed', 'bedpan', 'bedspread', 'cow', 'beef_(food)', 'beeper', + 'beer_bottle', 'beer_can', 'beetle', 'bell', 'bell_pepper', 'belt', + 'belt_buckle', 'bench', 'beret', 'bib', 'Bible', 'bicycle', 'visor', + 'billboard', 'binder', 'binoculars', 'bird', 'birdfeeder', 'birdbath', + 'birdcage', 'birdhouse', 'birthday_cake', 'birthday_card', + 'pirate_flag', 'black_sheep', 'blackberry', 'blackboard', 'blanket', + 'blazer', 'blender', 'blimp', 'blinker', 'blouse', 'blueberry', + 'gameboard', 'boat', 'bob', 'bobbin', 'bobby_pin', 'boiled_egg', + 'bolo_tie', 'deadbolt', 'bolt', 'bonnet', 'book', 'bookcase', + 'booklet', 'bookmark', 'boom_microphone', 'boot', 'bottle', + 'bottle_opener', 'bouquet', 'bow_(weapon)', 'bow_(decorative_ribbons)', + 'bow-tie', 'bowl', 'pipe_bowl', 'bowler_hat', 'bowling_ball', 'box', + 'boxing_glove', 'suspenders', 'bracelet', 'brass_plaque', 'brassiere', + 'bread-bin', 'bread', 'breechcloth', 'bridal_gown', 'briefcase', + 'broccoli', 'broach', 'broom', 'brownie', 'brussels_sprouts', + 'bubble_gum', 'bucket', 'horse_buggy', 'bull', 'bulldog', 'bulldozer', + 'bullet_train', 'bulletin_board', 'bulletproof_vest', 'bullhorn', + 'bun', 'bunk_bed', 'buoy', 'burrito', 'bus_(vehicle)', 'business_card', + 'butter', 'butterfly', 'button', 'cab_(taxi)', 'cabana', 'cabin_car', + 'cabinet', 'locker', 'cake', 'calculator', 'calendar', 'calf', + 'camcorder', 'camel', 'camera', 'camera_lens', 'camper_(vehicle)', + 'can', 'can_opener', 'candle', 'candle_holder', 'candy_bar', + 'candy_cane', 'walking_cane', 'canister', 'canoe', 'cantaloup', + 'canteen', 'cap_(headwear)', 'bottle_cap', 'cape', 'cappuccino', + 'car_(automobile)', 'railcar_(part_of_a_train)', 'elevator_car', + 'car_battery', 'identity_card', 'card', 'cardigan', 'cargo_ship', + 'carnation', 'horse_carriage', 'carrot', 'tote_bag', 'cart', 'carton', + 'cash_register', 'casserole', 'cassette', 'cast', 'cat', 'cauliflower', + 'cayenne_(spice)', 'CD_player', 'celery', 'cellular_telephone', + 'chain_mail', 'chair', 'chaise_longue', 'chalice', 'chandelier', + 'chap', 'checkbook', 'checkerboard', 'cherry', 'chessboard', + 'chicken_(animal)', 'chickpea', 'chili_(vegetable)', 'chime', + 'chinaware', 'crisp_(potato_chip)', 'poker_chip', 'chocolate_bar', + 'chocolate_cake', 'chocolate_milk', 'chocolate_mousse', 'choker', + 'chopping_board', 'chopstick', 'Christmas_tree', 'slide', 'cider', + 'cigar_box', 'cigarette', 'cigarette_case', 'cistern', 'clarinet', + 'clasp', 'cleansing_agent', 'cleat_(for_securing_rope)', 'clementine', + 'clip', 'clipboard', 'clippers_(for_plants)', 'cloak', 'clock', + 'clock_tower', 'clothes_hamper', 'clothespin', 'clutch_bag', 'coaster', + 'coat', 'coat_hanger', 'coatrack', 'cock', 'cockroach', + 'cocoa_(beverage)', 'coconut', 'coffee_maker', 'coffee_table', + 'coffeepot', 'coil', 'coin', 'colander', 'coleslaw', + 'coloring_material', 'combination_lock', 'pacifier', 'comic_book', + 'compass', 'computer_keyboard', 'condiment', 'cone', 'control', + 'convertible_(automobile)', 'sofa_bed', 'cooker', 'cookie', + 'cooking_utensil', 'cooler_(for_food)', 'cork_(bottle_plug)', + 'corkboard', 'corkscrew', 'edible_corn', 'cornbread', 'cornet', + 'cornice', 'cornmeal', 'corset', 'costume', 'cougar', 'coverall', + 'cowbell', 'cowboy_hat', 'crab_(animal)', 'crabmeat', 'cracker', + 'crape', 'crate', 'crayon', 'cream_pitcher', 'crescent_roll', 'crib', + 'crock_pot', 'crossbar', 'crouton', 'crow', 'crowbar', 'crown', + 'crucifix', 'cruise_ship', 'police_cruiser', 'crumb', 'crutch', + 'cub_(animal)', 'cube', 'cucumber', 'cufflink', 'cup', 'trophy_cup', + 'cupboard', 'cupcake', 'hair_curler', 'curling_iron', 'curtain', + 'cushion', 'cylinder', 'cymbal', 'dagger', 'dalmatian', 'dartboard', + 'date_(fruit)', 'deck_chair', 'deer', 'dental_floss', 'desk', + 'detergent', 'diaper', 'diary', 'die', 'dinghy', 'dining_table', 'tux', + 'dish', 'dish_antenna', 'dishrag', 'dishtowel', 'dishwasher', + 'dishwasher_detergent', 'dispenser', 'diving_board', 'Dixie_cup', + 'dog', 'dog_collar', 'doll', 'dollar', 'dollhouse', 'dolphin', + 'domestic_ass', 'doorknob', 'doormat', 'doughnut', 'dove', 'dragonfly', + 'drawer', 'underdrawers', 'dress', 'dress_hat', 'dress_suit', + 'dresser', 'drill', 'drone', 'dropper', 'drum_(musical_instrument)', + 'drumstick', 'duck', 'duckling', 'duct_tape', 'duffel_bag', 'dumbbell', + 'dumpster', 'dustpan', 'eagle', 'earphone', 'earplug', 'earring', + 'easel', 'eclair', 'eel', 'egg', 'egg_roll', 'egg_yolk', 'eggbeater', + 'eggplant', 'electric_chair', 'refrigerator', 'elephant', 'elk', + 'envelope', 'eraser', 'escargot', 'eyepatch', 'falcon', 'fan', + 'faucet', 'fedora', 'ferret', 'Ferris_wheel', 'ferry', 'fig_(fruit)', + 'fighter_jet', 'figurine', 'file_cabinet', 'file_(tool)', 'fire_alarm', + 'fire_engine', 'fire_extinguisher', 'fire_hose', 'fireplace', + 'fireplug', 'first-aid_kit', 'fish', 'fish_(food)', 'fishbowl', + 'fishing_rod', 'flag', 'flagpole', 'flamingo', 'flannel', 'flap', + 'flash', 'flashlight', 'fleece', 'flip-flop_(sandal)', + 'flipper_(footwear)', 'flower_arrangement', 'flute_glass', 'foal', + 'folding_chair', 'food_processor', 'football_(American)', + 'football_helmet', 'footstool', 'fork', 'forklift', 'freight_car', + 'French_toast', 'freshener', 'frisbee', 'frog', 'fruit_juice', + 'frying_pan', 'fudge', 'funnel', 'futon', 'gag', 'garbage', + 'garbage_truck', 'garden_hose', 'gargle', 'gargoyle', 'garlic', + 'gasmask', 'gazelle', 'gelatin', 'gemstone', 'generator', + 'giant_panda', 'gift_wrap', 'ginger', 'giraffe', 'cincture', + 'glass_(drink_container)', 'globe', 'glove', 'goat', 'goggles', + 'goldfish', 'golf_club', 'golfcart', 'gondola_(boat)', 'goose', + 'gorilla', 'gourd', 'grape', 'grater', 'gravestone', 'gravy_boat', + 'green_bean', 'green_onion', 'griddle', 'grill', 'grits', 'grizzly', + 'grocery_bag', 'guitar', 'gull', 'gun', 'hairbrush', 'hairnet', + 'hairpin', 'halter_top', 'ham', 'hamburger', 'hammer', 'hammock', + 'hamper', 'hamster', 'hair_dryer', 'hand_glass', 'hand_towel', + 'handcart', 'handcuff', 'handkerchief', 'handle', 'handsaw', + 'hardback_book', 'harmonium', 'hat', 'hatbox', 'veil', 'headband', + 'headboard', 'headlight', 'headscarf', 'headset', + 'headstall_(for_horses)', 'heart', 'heater', 'helicopter', 'helmet', + 'heron', 'highchair', 'hinge', 'hippopotamus', 'hockey_stick', 'hog', + 'home_plate_(baseball)', 'honey', 'fume_hood', 'hook', 'hookah', + 'hornet', 'horse', 'hose', 'hot-air_balloon', 'hotplate', 'hot_sauce', + 'hourglass', 'houseboat', 'hummingbird', 'hummus', 'polar_bear', + 'icecream', 'popsicle', 'ice_maker', 'ice_pack', 'ice_skate', + 'igniter', 'inhaler', 'iPod', 'iron_(for_clothing)', 'ironing_board', + 'jacket', 'jam', 'jar', 'jean', 'jeep', 'jelly_bean', 'jersey', + 'jet_plane', 'jewel', 'jewelry', 'joystick', 'jumpsuit', 'kayak', + 'keg', 'kennel', 'kettle', 'key', 'keycard', 'kilt', 'kimono', + 'kitchen_sink', 'kitchen_table', 'kite', 'kitten', 'kiwi_fruit', + 'knee_pad', 'knife', 'knitting_needle', 'knob', 'knocker_(on_a_door)', + 'koala', 'lab_coat', 'ladder', 'ladle', 'ladybug', 'lamb_(animal)', + 'lamb-chop', 'lamp', 'lamppost', 'lampshade', 'lantern', 'lanyard', + 'laptop_computer', 'lasagna', 'latch', 'lawn_mower', 'leather', + 'legging_(clothing)', 'Lego', 'legume', 'lemon', 'lemonade', 'lettuce', + 'license_plate', 'life_buoy', 'life_jacket', 'lightbulb', + 'lightning_rod', 'lime', 'limousine', 'lion', 'lip_balm', 'liquor', + 'lizard', 'log', 'lollipop', 'speaker_(stero_equipment)', 'loveseat', + 'machine_gun', 'magazine', 'magnet', 'mail_slot', 'mailbox_(at_home)', + 'mallard', 'mallet', 'mammoth', 'manatee', 'mandarin_orange', 'manger', + 'manhole', 'map', 'marker', 'martini', 'mascot', 'mashed_potato', + 'masher', 'mask', 'mast', 'mat_(gym_equipment)', 'matchbox', + 'mattress', 'measuring_cup', 'measuring_stick', 'meatball', 'medicine', + 'melon', 'microphone', 'microscope', 'microwave_oven', 'milestone', + 'milk', 'milk_can', 'milkshake', 'minivan', 'mint_candy', 'mirror', + 'mitten', 'mixer_(kitchen_tool)', 'money', + 'monitor_(computer_equipment) computer_monitor', 'monkey', 'motor', + 'motor_scooter', 'motor_vehicle', 'motorcycle', 'mound_(baseball)', + 'mouse_(computer_equipment)', 'mousepad', 'muffin', 'mug', 'mushroom', + 'music_stool', 'musical_instrument', 'nailfile', 'napkin', + 'neckerchief', 'necklace', 'necktie', 'needle', 'nest', 'newspaper', + 'newsstand', 'nightshirt', 'nosebag_(for_animals)', + 'noseband_(for_animals)', 'notebook', 'notepad', 'nut', 'nutcracker', + 'oar', 'octopus_(food)', 'octopus_(animal)', 'oil_lamp', 'olive_oil', + 'omelet', 'onion', 'orange_(fruit)', 'orange_juice', 'ostrich', + 'ottoman', 'oven', 'overalls_(clothing)', 'owl', 'packet', 'inkpad', + 'pad', 'paddle', 'padlock', 'paintbrush', 'painting', 'pajamas', + 'palette', 'pan_(for_cooking)', 'pan_(metal_container)', 'pancake', + 'pantyhose', 'papaya', 'paper_plate', 'paper_towel', 'paperback_book', + 'paperweight', 'parachute', 'parakeet', 'parasail_(sports)', 'parasol', + 'parchment', 'parka', 'parking_meter', 'parrot', + 'passenger_car_(part_of_a_train)', 'passenger_ship', 'passport', + 'pastry', 'patty_(food)', 'pea_(food)', 'peach', 'peanut_butter', + 'pear', 'peeler_(tool_for_fruit_and_vegetables)', 'wooden_leg', + 'pegboard', 'pelican', 'pen', 'pencil', 'pencil_box', + 'pencil_sharpener', 'pendulum', 'penguin', 'pennant', 'penny_(coin)', + 'pepper', 'pepper_mill', 'perfume', 'persimmon', 'person', 'pet', + 'pew_(church_bench)', 'phonebook', 'phonograph_record', 'piano', + 'pickle', 'pickup_truck', 'pie', 'pigeon', 'piggy_bank', 'pillow', + 'pin_(non_jewelry)', 'pineapple', 'pinecone', 'ping-pong_ball', + 'pinwheel', 'tobacco_pipe', 'pipe', 'pistol', 'pita_(bread)', + 'pitcher_(vessel_for_liquid)', 'pitchfork', 'pizza', 'place_mat', + 'plate', 'platter', 'playpen', 'pliers', 'plow_(farm_equipment)', + 'plume', 'pocket_watch', 'pocketknife', 'poker_(fire_stirring_tool)', + 'pole', 'polo_shirt', 'poncho', 'pony', 'pool_table', 'pop_(soda)', + 'postbox_(public)', 'postcard', 'poster', 'pot', 'flowerpot', 'potato', + 'potholder', 'pottery', 'pouch', 'power_shovel', 'prawn', 'pretzel', + 'printer', 'projectile_(weapon)', 'projector', 'propeller', 'prune', + 'pudding', 'puffer_(fish)', 'puffin', 'pug-dog', 'pumpkin', 'puncher', + 'puppet', 'puppy', 'quesadilla', 'quiche', 'quilt', 'rabbit', + 'race_car', 'racket', 'radar', 'radiator', 'radio_receiver', 'radish', + 'raft', 'rag_doll', 'raincoat', 'ram_(animal)', 'raspberry', 'rat', + 'razorblade', 'reamer_(juicer)', 'rearview_mirror', 'receipt', + 'recliner', 'record_player', 'reflector', 'remote_control', + 'rhinoceros', 'rib_(food)', 'rifle', 'ring', 'river_boat', 'road_map', + 'robe', 'rocking_chair', 'rodent', 'roller_skate', 'Rollerblade', + 'rolling_pin', 'root_beer', 'router_(computer_equipment)', + 'rubber_band', 'runner_(carpet)', 'plastic_bag', + 'saddle_(on_an_animal)', 'saddle_blanket', 'saddlebag', 'safety_pin', + 'sail', 'salad', 'salad_plate', 'salami', 'salmon_(fish)', + 'salmon_(food)', 'salsa', 'saltshaker', 'sandal_(type_of_shoe)', + 'sandwich', 'satchel', 'saucepan', 'saucer', 'sausage', 'sawhorse', + 'saxophone', 'scale_(measuring_instrument)', 'scarecrow', 'scarf', + 'school_bus', 'scissors', 'scoreboard', 'scraper', 'screwdriver', + 'scrubbing_brush', 'sculpture', 'seabird', 'seahorse', 'seaplane', + 'seashell', 'sewing_machine', 'shaker', 'shampoo', 'shark', + 'sharpener', 'Sharpie', 'shaver_(electric)', 'shaving_cream', 'shawl', + 'shears', 'sheep', 'shepherd_dog', 'sherbert', 'shield', 'shirt', + 'shoe', 'shopping_bag', 'shopping_cart', 'short_pants', 'shot_glass', + 'shoulder_bag', 'shovel', 'shower_head', 'shower_cap', + 'shower_curtain', 'shredder_(for_paper)', 'signboard', 'silo', 'sink', + 'skateboard', 'skewer', 'ski', 'ski_boot', 'ski_parka', 'ski_pole', + 'skirt', 'skullcap', 'sled', 'sleeping_bag', 'sling_(bandage)', + 'slipper_(footwear)', 'smoothie', 'snake', 'snowboard', 'snowman', + 'snowmobile', 'soap', 'soccer_ball', 'sock', 'sofa', 'softball', + 'solar_array', 'sombrero', 'soup', 'soup_bowl', 'soupspoon', + 'sour_cream', 'soya_milk', 'space_shuttle', 'sparkler_(fireworks)', + 'spatula', 'spear', 'spectacles', 'spice_rack', 'spider', 'crawfish', + 'sponge', 'spoon', 'sportswear', 'spotlight', 'squid_(food)', + 'squirrel', 'stagecoach', 'stapler_(stapling_machine)', 'starfish', + 'statue_(sculpture)', 'steak_(food)', 'steak_knife', 'steering_wheel', + 'stepladder', 'step_stool', 'stereo_(sound_system)', 'stew', 'stirrer', + 'stirrup', 'stool', 'stop_sign', 'brake_light', 'stove', 'strainer', + 'strap', 'straw_(for_drinking)', 'strawberry', 'street_sign', + 'streetlight', 'string_cheese', 'stylus', 'subwoofer', 'sugar_bowl', + 'sugarcane_(plant)', 'suit_(clothing)', 'sunflower', 'sunglasses', + 'sunhat', 'surfboard', 'sushi', 'mop', 'sweat_pants', 'sweatband', + 'sweater', 'sweatshirt', 'sweet_potato', 'swimsuit', 'sword', + 'syringe', 'Tabasco_sauce', 'table-tennis_table', 'table', + 'table_lamp', 'tablecloth', 'tachometer', 'taco', 'tag', 'taillight', + 'tambourine', 'army_tank', 'tank_(storage_vessel)', + 'tank_top_(clothing)', 'tape_(sticky_cloth_or_paper)', 'tape_measure', + 'tapestry', 'tarp', 'tartan', 'tassel', 'tea_bag', 'teacup', + 'teakettle', 'teapot', 'teddy_bear', 'telephone', 'telephone_booth', + 'telephone_pole', 'telephoto_lens', 'television_camera', + 'television_set', 'tennis_ball', 'tennis_racket', 'tequila', + 'thermometer', 'thermos_bottle', 'thermostat', 'thimble', 'thread', + 'thumbtack', 'tiara', 'tiger', 'tights_(clothing)', 'timer', 'tinfoil', + 'tinsel', 'tissue_paper', 'toast_(food)', 'toaster', 'toaster_oven', + 'toilet', 'toilet_tissue', 'tomato', 'tongs', 'toolbox', 'toothbrush', + 'toothpaste', 'toothpick', 'cover', 'tortilla', 'tow_truck', 'towel', + 'towel_rack', 'toy', 'tractor_(farm_equipment)', 'traffic_light', + 'dirt_bike', 'trailer_truck', 'train_(railroad_vehicle)', 'trampoline', + 'tray', 'trench_coat', 'triangle_(musical_instrument)', 'tricycle', + 'tripod', 'trousers', 'truck', 'truffle_(chocolate)', 'trunk', 'vat', + 'turban', 'turkey_(food)', 'turnip', 'turtle', 'turtleneck_(clothing)', + 'typewriter', 'umbrella', 'underwear', 'unicycle', 'urinal', 'urn', + 'vacuum_cleaner', 'vase', 'vending_machine', 'vent', 'vest', + 'videotape', 'vinegar', 'violin', 'vodka', 'volleyball', 'vulture', + 'waffle', 'waffle_iron', 'wagon', 'wagon_wheel', 'walking_stick', + 'wall_clock', 'wall_socket', 'wallet', 'walrus', 'wardrobe', + 'washbasin', 'automatic_washer', 'watch', 'water_bottle', + 'water_cooler', 'water_faucet', 'water_heater', 'water_jug', + 'water_gun', 'water_scooter', 'water_ski', 'water_tower', + 'watering_can', 'watermelon', 'weathervane', 'webcam', 'wedding_cake', + 'wedding_ring', 'wet_suit', 'wheel', 'wheelchair', 'whipped_cream', + 'whistle', 'wig', 'wind_chime', 'windmill', 'window_box_(for_plants)', + 'windshield_wiper', 'windsock', 'wine_bottle', 'wine_bucket', + 'wineglass', 'blinder_(for_horses)', 'wok', 'wolf', 'wooden_spoon', + 'wreath', 'wrench', 'wristband', 'wristlet', 'yacht', 'yogurt', + 'yoke_(animal_equipment)', 'zebra', 'zucchini') + + def load_annotations(self, ann_file): + try: + import lvis + assert lvis.__version__ >= '10.5.3' + from lvis import LVIS + except AssertionError: + raise AssertionError('Incompatible version of lvis is installed. ' + 'Run pip uninstall lvis first. Then run pip ' + 'install mmlvis to install open-mmlab forked ' + 'lvis. ') + except ImportError: + raise ImportError('Package lvis is not installed. Please run pip ' + 'install mmlvis to install open-mmlab forked ' + 'lvis.') + self.coco = LVIS(ann_file) + self.cat_ids = self.coco.get_cat_ids() + self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} + self.img_ids = self.coco.get_img_ids() + data_infos = [] + for i in self.img_ids: + info = self.coco.load_imgs([i])[0] + # coco_url is used in LVISv1 instead of file_name + # e.g. http://images.cocodataset.org/train2017/000000391895.jpg + # train/val split in specified in url + info['filename'] = info['coco_url'].replace( + 'http://images.cocodataset.org/', '') + data_infos.append(info) + return data_infos diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/__init__.py new file mode 100644 index 00000000..c6f424de --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/__init__.py @@ -0,0 +1,25 @@ +from .auto_augment import (AutoAugment, BrightnessTransform, ColorTransform, + ContrastTransform, EqualizeTransform, Rotate, Shear, + Translate) +from .compose import Compose +from .formating import (Collect, DefaultFormatBundle, ImageToTensor, + ToDataContainer, ToTensor, Transpose, to_tensor) +from .instaboost import InstaBoost +from .loading import (LoadAnnotations, LoadImageFromFile, LoadImageFromWebcam, + LoadMultiChannelImageFromFiles, LoadProposals) +from .test_time_aug import MultiScaleFlipAug +from .transforms import (Albu, CutOut, Expand, MinIoURandomCrop, Normalize, + Pad, PhotoMetricDistortion, RandomCenterCropPad, + RandomCrop, RandomFlip, Resize, SegRescale) + +__all__ = [ + 'Compose', 'to_tensor', 'ToTensor', 'ImageToTensor', 'ToDataContainer', + 'Transpose', 'Collect', 'DefaultFormatBundle', 'LoadAnnotations', + 'LoadImageFromFile', 'LoadImageFromWebcam', + 'LoadMultiChannelImageFromFiles', 'LoadProposals', 'MultiScaleFlipAug', + 'Resize', 'RandomFlip', 'Pad', 'RandomCrop', 'Normalize', 'SegRescale', + 'MinIoURandomCrop', 'Expand', 'PhotoMetricDistortion', 'Albu', + 'InstaBoost', 'RandomCenterCropPad', 'AutoAugment', 'CutOut', 'Shear', + 'Rotate', 'ColorTransform', 'EqualizeTransform', 'BrightnessTransform', + 'ContrastTransform', 'Translate' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/auto_augment.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/auto_augment.py new file mode 100644 index 00000000..0d225331 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/auto_augment.py @@ -0,0 +1,890 @@ +import copy + +import cv2 +import mmcv +import numpy as np + +from ..builder import PIPELINES +from .compose import Compose + +_MAX_LEVEL = 10 + + +def level_to_value(level, max_value): + """Map from level to values based on max_value.""" + return (level / _MAX_LEVEL) * max_value + + +def enhance_level_to_value(level, a=1.8, b=0.1): + """Map from level to values.""" + return (level / _MAX_LEVEL) * a + b + + +def random_negative(value, random_negative_prob): + """Randomly negate value based on random_negative_prob.""" + return -value if np.random.rand() < random_negative_prob else value + + +def bbox2fields(): + """The key correspondence from bboxes to labels, masks and + segmentations.""" + bbox2label = { + 'gt_bboxes': 'gt_labels', + 'gt_bboxes_ignore': 'gt_labels_ignore' + } + bbox2mask = { + 'gt_bboxes': 'gt_masks', + 'gt_bboxes_ignore': 'gt_masks_ignore' + } + bbox2seg = { + 'gt_bboxes': 'gt_semantic_seg', + } + return bbox2label, bbox2mask, bbox2seg + + +@PIPELINES.register_module() +class AutoAugment(object): + """Auto augmentation. + + This data augmentation is proposed in `Learning Data Augmentation + Strategies for Object Detection `_. + + TODO: Implement 'Shear', 'Sharpness' and 'Rotate' transforms + + Args: + policies (list[list[dict]]): The policies of auto augmentation. Each + policy in ``policies`` is a specific augmentation policy, and is + composed by several augmentations (dict). When AutoAugment is + called, a random policy in ``policies`` will be selected to + augment images. + + Examples: + >>> replace = (104, 116, 124) + >>> policies = [ + >>> [ + >>> dict(type='Sharpness', prob=0.0, level=8), + >>> dict( + >>> type='Shear', + >>> prob=0.4, + >>> level=0, + >>> replace=replace, + >>> axis='x') + >>> ], + >>> [ + >>> dict( + >>> type='Rotate', + >>> prob=0.6, + >>> level=10, + >>> replace=replace), + >>> dict(type='Color', prob=1.0, level=6) + >>> ] + >>> ] + >>> augmentation = AutoAugment(policies) + >>> img = np.ones(100, 100, 3) + >>> gt_bboxes = np.ones(10, 4) + >>> results = dict(img=img, gt_bboxes=gt_bboxes) + >>> results = augmentation(results) + """ + + def __init__(self, policies): + assert isinstance(policies, list) and len(policies) > 0, \ + 'Policies must be a non-empty list.' + for policy in policies: + assert isinstance(policy, list) and len(policy) > 0, \ + 'Each policy in policies must be a non-empty list.' + for augment in policy: + assert isinstance(augment, dict) and 'type' in augment, \ + 'Each specific augmentation must be a dict with key' \ + ' "type".' + + self.policies = copy.deepcopy(policies) + self.transforms = [Compose(policy) for policy in self.policies] + + def __call__(self, results): + transform = np.random.choice(self.transforms) + return transform(results) + + def __repr__(self): + return f'{self.__class__.__name__}(policies={self.policies})' + + +@PIPELINES.register_module() +class Shear(object): + """Apply Shear Transformation to image (and its corresponding bbox, mask, + segmentation). + + Args: + level (int | float): The level should be in range [0,_MAX_LEVEL]. + img_fill_val (int | float | tuple): The filled values for image border. + If float, the same fill value will be used for all the three + channels of image. If tuple, the should be 3 elements. + seg_ignore_label (int): The fill value used for segmentation map. + Note this value must equals ``ignore_label`` in ``semantic_head`` + of the corresponding config. Default 255. + prob (float): The probability for performing Shear and should be in + range [0, 1]. + direction (str): The direction for shear, either "horizontal" + or "vertical". + max_shear_magnitude (float): The maximum magnitude for Shear + transformation. + random_negative_prob (float): The probability that turns the + offset negative. Should be in range [0,1] + interpolation (str): Same as in :func:`mmcv.imshear`. + """ + + def __init__(self, + level, + img_fill_val=128, + seg_ignore_label=255, + prob=0.5, + direction='horizontal', + max_shear_magnitude=0.3, + random_negative_prob=0.5, + interpolation='bilinear'): + assert isinstance(level, (int, float)), 'The level must be type ' \ + f'int or float, got {type(level)}.' + assert 0 <= level <= _MAX_LEVEL, 'The level should be in range ' \ + f'[0,{_MAX_LEVEL}], got {level}.' + if isinstance(img_fill_val, (float, int)): + img_fill_val = tuple([float(img_fill_val)] * 3) + elif isinstance(img_fill_val, tuple): + assert len(img_fill_val) == 3, 'img_fill_val as tuple must ' \ + f'have 3 elements. got {len(img_fill_val)}.' + img_fill_val = tuple([float(val) for val in img_fill_val]) + else: + raise ValueError( + 'img_fill_val must be float or tuple with 3 elements.') + assert np.all([0 <= val <= 255 for val in img_fill_val]), 'all ' \ + 'elements of img_fill_val should between range [0,255].' \ + f'got {img_fill_val}.' + assert 0 <= prob <= 1.0, 'The probability of shear should be in ' \ + f'range [0,1]. got {prob}.' + assert direction in ('horizontal', 'vertical'), 'direction must ' \ + f'in be either "horizontal" or "vertical". got {direction}.' + assert isinstance(max_shear_magnitude, float), 'max_shear_magnitude ' \ + f'should be type float. got {type(max_shear_magnitude)}.' + assert 0. <= max_shear_magnitude <= 1., 'Defaultly ' \ + 'max_shear_magnitude should be in range [0,1]. ' \ + f'got {max_shear_magnitude}.' + self.level = level + self.magnitude = level_to_value(level, max_shear_magnitude) + self.img_fill_val = img_fill_val + self.seg_ignore_label = seg_ignore_label + self.prob = prob + self.direction = direction + self.max_shear_magnitude = max_shear_magnitude + self.random_negative_prob = random_negative_prob + self.interpolation = interpolation + + def _shear_img(self, + results, + magnitude, + direction='horizontal', + interpolation='bilinear'): + """Shear the image. + + Args: + results (dict): Result dict from loading pipeline. + magnitude (int | float): The magnitude used for shear. + direction (str): The direction for shear, either "horizontal" + or "vertical". + interpolation (str): Same as in :func:`mmcv.imshear`. + """ + for key in results.get('img_fields', ['img']): + img = results[key] + img_sheared = mmcv.imshear( + img, + magnitude, + direction, + border_value=self.img_fill_val, + interpolation=interpolation) + results[key] = img_sheared.astype(img.dtype) + + def _shear_bboxes(self, results, magnitude): + """Shear the bboxes.""" + h, w, c = results['img_shape'] + if self.direction == 'horizontal': + shear_matrix = np.stack([[1, magnitude], + [0, 1]]).astype(np.float32) # [2, 2] + else: + shear_matrix = np.stack([[1, 0], [magnitude, + 1]]).astype(np.float32) + for key in results.get('bbox_fields', []): + min_x, min_y, max_x, max_y = np.split( + results[key], results[key].shape[-1], axis=-1) + coordinates = np.stack([[min_x, min_y], [max_x, min_y], + [min_x, max_y], + [max_x, max_y]]) # [4, 2, nb_box, 1] + coordinates = coordinates[..., 0].transpose( + (2, 1, 0)).astype(np.float32) # [nb_box, 2, 4] + new_coords = np.matmul(shear_matrix[None, :, :], + coordinates) # [nb_box, 2, 4] + min_x = np.min(new_coords[:, 0, :], axis=-1) + min_y = np.min(new_coords[:, 1, :], axis=-1) + max_x = np.max(new_coords[:, 0, :], axis=-1) + max_y = np.max(new_coords[:, 1, :], axis=-1) + min_x = np.clip(min_x, a_min=0, a_max=w) + min_y = np.clip(min_y, a_min=0, a_max=h) + max_x = np.clip(max_x, a_min=min_x, a_max=w) + max_y = np.clip(max_y, a_min=min_y, a_max=h) + results[key] = np.stack([min_x, min_y, max_x, max_y], + axis=-1).astype(results[key].dtype) + + def _shear_masks(self, + results, + magnitude, + direction='horizontal', + fill_val=0, + interpolation='bilinear'): + """Shear the masks.""" + h, w, c = results['img_shape'] + for key in results.get('mask_fields', []): + masks = results[key] + results[key] = masks.shear((h, w), + magnitude, + direction, + border_value=fill_val, + interpolation=interpolation) + + def _shear_seg(self, + results, + magnitude, + direction='horizontal', + fill_val=255, + interpolation='bilinear'): + """Shear the segmentation maps.""" + for key in results.get('seg_fields', []): + seg = results[key] + results[key] = mmcv.imshear( + seg, + magnitude, + direction, + border_value=fill_val, + interpolation=interpolation).astype(seg.dtype) + + def _filter_invalid(self, results, min_bbox_size=0): + """Filter bboxes and corresponding masks too small after shear + augmentation.""" + bbox2label, bbox2mask, _ = bbox2fields() + for key in results.get('bbox_fields', []): + bbox_w = results[key][:, 2] - results[key][:, 0] + bbox_h = results[key][:, 3] - results[key][:, 1] + valid_inds = (bbox_w > min_bbox_size) & (bbox_h > min_bbox_size) + valid_inds = np.nonzero(valid_inds)[0] + results[key] = results[key][valid_inds] + # label fields. e.g. gt_labels and gt_labels_ignore + label_key = bbox2label.get(key) + if label_key in results: + results[label_key] = results[label_key][valid_inds] + # mask fields, e.g. gt_masks and gt_masks_ignore + mask_key = bbox2mask.get(key) + if mask_key in results: + results[mask_key] = results[mask_key][valid_inds] + + def __call__(self, results): + """Call function to shear images, bounding boxes, masks and semantic + segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Sheared results. + """ + if np.random.rand() > self.prob: + return results + magnitude = random_negative(self.magnitude, self.random_negative_prob) + self._shear_img(results, magnitude, self.direction, self.interpolation) + self._shear_bboxes(results, magnitude) + # fill_val set to 0 for background of mask. + self._shear_masks( + results, + magnitude, + self.direction, + fill_val=0, + interpolation=self.interpolation) + self._shear_seg( + results, + magnitude, + self.direction, + fill_val=self.seg_ignore_label, + interpolation=self.interpolation) + self._filter_invalid(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(level={self.level}, ' + repr_str += f'img_fill_val={self.img_fill_val}, ' + repr_str += f'seg_ignore_label={self.seg_ignore_label}, ' + repr_str += f'prob={self.prob}, ' + repr_str += f'direction={self.direction}, ' + repr_str += f'max_shear_magnitude={self.max_shear_magnitude}, ' + repr_str += f'random_negative_prob={self.random_negative_prob}, ' + repr_str += f'interpolation={self.interpolation})' + return repr_str + + +@PIPELINES.register_module() +class Rotate(object): + """Apply Rotate Transformation to image (and its corresponding bbox, mask, + segmentation). + + Args: + level (int | float): The level should be in range (0,_MAX_LEVEL]. + scale (int | float): Isotropic scale factor. Same in + ``mmcv.imrotate``. + center (int | float | tuple[float]): Center point (w, h) of the + rotation in the source image. If None, the center of the + image will be used. Same in ``mmcv.imrotate``. + img_fill_val (int | float | tuple): The fill value for image border. + If float, the same value will be used for all the three + channels of image. If tuple, the should be 3 elements (e.g. + equals the number of channels for image). + seg_ignore_label (int): The fill value used for segmentation map. + Note this value must equals ``ignore_label`` in ``semantic_head`` + of the corresponding config. Default 255. + prob (float): The probability for perform transformation and + should be in range 0 to 1. + max_rotate_angle (int | float): The maximum angles for rotate + transformation. + random_negative_prob (float): The probability that turns the + offset negative. + """ + + def __init__(self, + level, + scale=1, + center=None, + img_fill_val=128, + seg_ignore_label=255, + prob=0.5, + max_rotate_angle=30, + random_negative_prob=0.5): + assert isinstance(level, (int, float)), \ + f'The level must be type int or float. got {type(level)}.' + assert 0 <= level <= _MAX_LEVEL, \ + f'The level should be in range (0,{_MAX_LEVEL}]. got {level}.' + assert isinstance(scale, (int, float)), \ + f'The scale must be type int or float. got type {type(scale)}.' + if isinstance(center, (int, float)): + center = (center, center) + elif isinstance(center, tuple): + assert len(center) == 2, 'center with type tuple must have '\ + f'2 elements. got {len(center)} elements.' + else: + assert center is None, 'center must be None or type int, '\ + f'float or tuple, got type {type(center)}.' + if isinstance(img_fill_val, (float, int)): + img_fill_val = tuple([float(img_fill_val)] * 3) + elif isinstance(img_fill_val, tuple): + assert len(img_fill_val) == 3, 'img_fill_val as tuple must '\ + f'have 3 elements. got {len(img_fill_val)}.' + img_fill_val = tuple([float(val) for val in img_fill_val]) + else: + raise ValueError( + 'img_fill_val must be float or tuple with 3 elements.') + assert np.all([0 <= val <= 255 for val in img_fill_val]), \ + 'all elements of img_fill_val should between range [0,255]. '\ + f'got {img_fill_val}.' + assert 0 <= prob <= 1.0, 'The probability should be in range [0,1]. '\ + 'got {prob}.' + assert isinstance(max_rotate_angle, (int, float)), 'max_rotate_angle '\ + f'should be type int or float. got type {type(max_rotate_angle)}.' + self.level = level + self.scale = scale + # Rotation angle in degrees. Positive values mean + # clockwise rotation. + self.angle = level_to_value(level, max_rotate_angle) + self.center = center + self.img_fill_val = img_fill_val + self.seg_ignore_label = seg_ignore_label + self.prob = prob + self.max_rotate_angle = max_rotate_angle + self.random_negative_prob = random_negative_prob + + def _rotate_img(self, results, angle, center=None, scale=1.0): + """Rotate the image. + + Args: + results (dict): Result dict from loading pipeline. + angle (float): Rotation angle in degrees, positive values + mean clockwise rotation. Same in ``mmcv.imrotate``. + center (tuple[float], optional): Center point (w, h) of the + rotation. Same in ``mmcv.imrotate``. + scale (int | float): Isotropic scale factor. Same in + ``mmcv.imrotate``. + """ + for key in results.get('img_fields', ['img']): + img = results[key].copy() + img_rotated = mmcv.imrotate( + img, angle, center, scale, border_value=self.img_fill_val) + results[key] = img_rotated.astype(img.dtype) + + def _rotate_bboxes(self, results, rotate_matrix): + """Rotate the bboxes.""" + h, w, c = results['img_shape'] + for key in results.get('bbox_fields', []): + min_x, min_y, max_x, max_y = np.split( + results[key], results[key].shape[-1], axis=-1) + coordinates = np.stack([[min_x, min_y], [max_x, min_y], + [min_x, max_y], + [max_x, max_y]]) # [4, 2, nb_bbox, 1] + # pad 1 to convert from format [x, y] to homogeneous + # coordinates format [x, y, 1] + coordinates = np.concatenate( + (coordinates, + np.ones((4, 1, coordinates.shape[2], 1), coordinates.dtype)), + axis=1) # [4, 3, nb_bbox, 1] + coordinates = coordinates.transpose( + (2, 0, 1, 3)) # [nb_bbox, 4, 3, 1] + rotated_coords = np.matmul(rotate_matrix, + coordinates) # [nb_bbox, 4, 2, 1] + rotated_coords = rotated_coords[..., 0] # [nb_bbox, 4, 2] + min_x, min_y = np.min( + rotated_coords[:, :, 0], axis=1), np.min( + rotated_coords[:, :, 1], axis=1) + max_x, max_y = np.max( + rotated_coords[:, :, 0], axis=1), np.max( + rotated_coords[:, :, 1], axis=1) + min_x, min_y = np.clip( + min_x, a_min=0, a_max=w), np.clip( + min_y, a_min=0, a_max=h) + max_x, max_y = np.clip( + max_x, a_min=min_x, a_max=w), np.clip( + max_y, a_min=min_y, a_max=h) + results[key] = np.stack([min_x, min_y, max_x, max_y], + axis=-1).astype(results[key].dtype) + + def _rotate_masks(self, + results, + angle, + center=None, + scale=1.0, + fill_val=0): + """Rotate the masks.""" + h, w, c = results['img_shape'] + for key in results.get('mask_fields', []): + masks = results[key] + results[key] = masks.rotate((h, w), angle, center, scale, fill_val) + + def _rotate_seg(self, + results, + angle, + center=None, + scale=1.0, + fill_val=255): + """Rotate the segmentation map.""" + for key in results.get('seg_fields', []): + seg = results[key].copy() + results[key] = mmcv.imrotate( + seg, angle, center, scale, + border_value=fill_val).astype(seg.dtype) + + def _filter_invalid(self, results, min_bbox_size=0): + """Filter bboxes and corresponding masks too small after rotate + augmentation.""" + bbox2label, bbox2mask, _ = bbox2fields() + for key in results.get('bbox_fields', []): + bbox_w = results[key][:, 2] - results[key][:, 0] + bbox_h = results[key][:, 3] - results[key][:, 1] + valid_inds = (bbox_w > min_bbox_size) & (bbox_h > min_bbox_size) + valid_inds = np.nonzero(valid_inds)[0] + results[key] = results[key][valid_inds] + # label fields. e.g. gt_labels and gt_labels_ignore + label_key = bbox2label.get(key) + if label_key in results: + results[label_key] = results[label_key][valid_inds] + # mask fields, e.g. gt_masks and gt_masks_ignore + mask_key = bbox2mask.get(key) + if mask_key in results: + results[mask_key] = results[mask_key][valid_inds] + + def __call__(self, results): + """Call function to rotate images, bounding boxes, masks and semantic + segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Rotated results. + """ + if np.random.rand() > self.prob: + return results + h, w = results['img'].shape[:2] + center = self.center + if center is None: + center = ((w - 1) * 0.5, (h - 1) * 0.5) + angle = random_negative(self.angle, self.random_negative_prob) + self._rotate_img(results, angle, center, self.scale) + rotate_matrix = cv2.getRotationMatrix2D(center, -angle, self.scale) + self._rotate_bboxes(results, rotate_matrix) + self._rotate_masks(results, angle, center, self.scale, fill_val=0) + self._rotate_seg( + results, angle, center, self.scale, fill_val=self.seg_ignore_label) + self._filter_invalid(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(level={self.level}, ' + repr_str += f'scale={self.scale}, ' + repr_str += f'center={self.center}, ' + repr_str += f'img_fill_val={self.img_fill_val}, ' + repr_str += f'seg_ignore_label={self.seg_ignore_label}, ' + repr_str += f'prob={self.prob}, ' + repr_str += f'max_rotate_angle={self.max_rotate_angle}, ' + repr_str += f'random_negative_prob={self.random_negative_prob})' + return repr_str + + +@PIPELINES.register_module() +class Translate(object): + """Translate the images, bboxes, masks and segmentation maps horizontally + or vertically. + + Args: + level (int | float): The level for Translate and should be in + range [0,_MAX_LEVEL]. + prob (float): The probability for performing translation and + should be in range [0, 1]. + img_fill_val (int | float | tuple): The filled value for image + border. If float, the same fill value will be used for all + the three channels of image. If tuple, the should be 3 + elements (e.g. equals the number of channels for image). + seg_ignore_label (int): The fill value used for segmentation map. + Note this value must equals ``ignore_label`` in ``semantic_head`` + of the corresponding config. Default 255. + direction (str): The translate direction, either "horizontal" + or "vertical". + max_translate_offset (int | float): The maximum pixel's offset for + Translate. + random_negative_prob (float): The probability that turns the + offset negative. + min_size (int | float): The minimum pixel for filtering + invalid bboxes after the translation. + """ + + def __init__(self, + level, + prob=0.5, + img_fill_val=128, + seg_ignore_label=255, + direction='horizontal', + max_translate_offset=250., + random_negative_prob=0.5, + min_size=0): + assert isinstance(level, (int, float)), \ + 'The level must be type int or float.' + assert 0 <= level <= _MAX_LEVEL, \ + 'The level used for calculating Translate\'s offset should be ' \ + 'in range [0,_MAX_LEVEL]' + assert 0 <= prob <= 1.0, \ + 'The probability of translation should be in range [0, 1].' + if isinstance(img_fill_val, (float, int)): + img_fill_val = tuple([float(img_fill_val)] * 3) + elif isinstance(img_fill_val, tuple): + assert len(img_fill_val) == 3, \ + 'img_fill_val as tuple must have 3 elements.' + img_fill_val = tuple([float(val) for val in img_fill_val]) + else: + raise ValueError('img_fill_val must be type float or tuple.') + assert np.all([0 <= val <= 255 for val in img_fill_val]), \ + 'all elements of img_fill_val should between range [0,255].' + assert direction in ('horizontal', 'vertical'), \ + 'direction should be "horizontal" or "vertical".' + assert isinstance(max_translate_offset, (int, float)), \ + 'The max_translate_offset must be type int or float.' + # the offset used for translation + self.offset = int(level_to_value(level, max_translate_offset)) + self.level = level + self.prob = prob + self.img_fill_val = img_fill_val + self.seg_ignore_label = seg_ignore_label + self.direction = direction + self.max_translate_offset = max_translate_offset + self.random_negative_prob = random_negative_prob + self.min_size = min_size + + def _translate_img(self, results, offset, direction='horizontal'): + """Translate the image. + + Args: + results (dict): Result dict from loading pipeline. + offset (int | float): The offset for translate. + direction (str): The translate direction, either "horizontal" + or "vertical". + """ + for key in results.get('img_fields', ['img']): + img = results[key].copy() + results[key] = mmcv.imtranslate( + img, offset, direction, self.img_fill_val).astype(img.dtype) + + def _translate_bboxes(self, results, offset): + """Shift bboxes horizontally or vertically, according to offset.""" + h, w, c = results['img_shape'] + for key in results.get('bbox_fields', []): + min_x, min_y, max_x, max_y = np.split( + results[key], results[key].shape[-1], axis=-1) + if self.direction == 'horizontal': + min_x = np.maximum(0, min_x + offset) + max_x = np.minimum(w, max_x + offset) + elif self.direction == 'vertical': + min_y = np.maximum(0, min_y + offset) + max_y = np.minimum(h, max_y + offset) + + # the boxs translated outside of image will be filtered along with + # the corresponding masks, by invoking ``_filter_invalid``. + results[key] = np.concatenate([min_x, min_y, max_x, max_y], + axis=-1) + + def _translate_masks(self, + results, + offset, + direction='horizontal', + fill_val=0): + """Translate masks horizontally or vertically.""" + h, w, c = results['img_shape'] + for key in results.get('mask_fields', []): + masks = results[key] + results[key] = masks.translate((h, w), offset, direction, fill_val) + + def _translate_seg(self, + results, + offset, + direction='horizontal', + fill_val=255): + """Translate segmentation maps horizontally or vertically.""" + for key in results.get('seg_fields', []): + seg = results[key].copy() + results[key] = mmcv.imtranslate(seg, offset, direction, + fill_val).astype(seg.dtype) + + def _filter_invalid(self, results, min_size=0): + """Filter bboxes and masks too small or translated out of image.""" + bbox2label, bbox2mask, _ = bbox2fields() + for key in results.get('bbox_fields', []): + bbox_w = results[key][:, 2] - results[key][:, 0] + bbox_h = results[key][:, 3] - results[key][:, 1] + valid_inds = (bbox_w > min_size) & (bbox_h > min_size) + valid_inds = np.nonzero(valid_inds)[0] + results[key] = results[key][valid_inds] + # label fields. e.g. gt_labels and gt_labels_ignore + label_key = bbox2label.get(key) + if label_key in results: + results[label_key] = results[label_key][valid_inds] + # mask fields, e.g. gt_masks and gt_masks_ignore + mask_key = bbox2mask.get(key) + if mask_key in results: + results[mask_key] = results[mask_key][valid_inds] + return results + + def __call__(self, results): + """Call function to translate images, bounding boxes, masks and + semantic segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Translated results. + """ + if np.random.rand() > self.prob: + return results + offset = random_negative(self.offset, self.random_negative_prob) + self._translate_img(results, offset, self.direction) + self._translate_bboxes(results, offset) + # fill_val defaultly 0 for BitmapMasks and None for PolygonMasks. + self._translate_masks(results, offset, self.direction) + # fill_val set to ``seg_ignore_label`` for the ignored value + # of segmentation map. + self._translate_seg( + results, offset, self.direction, fill_val=self.seg_ignore_label) + self._filter_invalid(results, min_size=self.min_size) + return results + + +@PIPELINES.register_module() +class ColorTransform(object): + """Apply Color transformation to image. The bboxes, masks, and + segmentations are not modified. + + Args: + level (int | float): Should be in range [0,_MAX_LEVEL]. + prob (float): The probability for performing Color transformation. + """ + + def __init__(self, level, prob=0.5): + assert isinstance(level, (int, float)), \ + 'The level must be type int or float.' + assert 0 <= level <= _MAX_LEVEL, \ + 'The level should be in range [0,_MAX_LEVEL].' + assert 0 <= prob <= 1.0, \ + 'The probability should be in range [0,1].' + self.level = level + self.prob = prob + self.factor = enhance_level_to_value(level) + + def _adjust_color_img(self, results, factor=1.0): + """Apply Color transformation to image.""" + for key in results.get('img_fields', ['img']): + # NOTE defaultly the image should be BGR format + img = results[key] + results[key] = mmcv.adjust_color(img, factor).astype(img.dtype) + + def __call__(self, results): + """Call function for Color transformation. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Colored results. + """ + if np.random.rand() > self.prob: + return results + self._adjust_color_img(results, self.factor) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(level={self.level}, ' + repr_str += f'prob={self.prob})' + return repr_str + + +@PIPELINES.register_module() +class EqualizeTransform(object): + """Apply Equalize transformation to image. The bboxes, masks and + segmentations are not modified. + + Args: + prob (float): The probability for performing Equalize transformation. + """ + + def __init__(self, prob=0.5): + assert 0 <= prob <= 1.0, \ + 'The probability should be in range [0,1].' + self.prob = prob + + def _imequalize(self, results): + """Equalizes the histogram of one image.""" + for key in results.get('img_fields', ['img']): + img = results[key] + results[key] = mmcv.imequalize(img).astype(img.dtype) + + def __call__(self, results): + """Call function for Equalize transformation. + + Args: + results (dict): Results dict from loading pipeline. + + Returns: + dict: Results after the transformation. + """ + if np.random.rand() > self.prob: + return results + self._imequalize(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(prob={self.prob})' + + +@PIPELINES.register_module() +class BrightnessTransform(object): + """Apply Brightness transformation to image. The bboxes, masks and + segmentations are not modified. + + Args: + level (int | float): Should be in range [0,_MAX_LEVEL]. + prob (float): The probability for performing Brightness transformation. + """ + + def __init__(self, level, prob=0.5): + assert isinstance(level, (int, float)), \ + 'The level must be type int or float.' + assert 0 <= level <= _MAX_LEVEL, \ + 'The level should be in range [0,_MAX_LEVEL].' + assert 0 <= prob <= 1.0, \ + 'The probability should be in range [0,1].' + self.level = level + self.prob = prob + self.factor = enhance_level_to_value(level) + + def _adjust_brightness_img(self, results, factor=1.0): + """Adjust the brightness of image.""" + for key in results.get('img_fields', ['img']): + img = results[key] + results[key] = mmcv.adjust_brightness(img, + factor).astype(img.dtype) + + def __call__(self, results): + """Call function for Brightness transformation. + + Args: + results (dict): Results dict from loading pipeline. + + Returns: + dict: Results after the transformation. + """ + if np.random.rand() > self.prob: + return results + self._adjust_brightness_img(results, self.factor) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(level={self.level}, ' + repr_str += f'prob={self.prob})' + return repr_str + + +@PIPELINES.register_module() +class ContrastTransform(object): + """Apply Contrast transformation to image. The bboxes, masks and + segmentations are not modified. + + Args: + level (int | float): Should be in range [0,_MAX_LEVEL]. + prob (float): The probability for performing Contrast transformation. + """ + + def __init__(self, level, prob=0.5): + assert isinstance(level, (int, float)), \ + 'The level must be type int or float.' + assert 0 <= level <= _MAX_LEVEL, \ + 'The level should be in range [0,_MAX_LEVEL].' + assert 0 <= prob <= 1.0, \ + 'The probability should be in range [0,1].' + self.level = level + self.prob = prob + self.factor = enhance_level_to_value(level) + + def _adjust_contrast_img(self, results, factor=1.0): + """Adjust the image contrast.""" + for key in results.get('img_fields', ['img']): + img = results[key] + results[key] = mmcv.adjust_contrast(img, factor).astype(img.dtype) + + def __call__(self, results): + """Call function for Contrast transformation. + + Args: + results (dict): Results dict from loading pipeline. + + Returns: + dict: Results after the transformation. + """ + if np.random.rand() > self.prob: + return results + self._adjust_contrast_img(results, self.factor) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(level={self.level}, ' + repr_str += f'prob={self.prob})' + return repr_str diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/compose.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/compose.py new file mode 100644 index 00000000..ca48f1c9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/compose.py @@ -0,0 +1,51 @@ +import collections + +from mmcv.utils import build_from_cfg + +from ..builder import PIPELINES + + +@PIPELINES.register_module() +class Compose(object): + """Compose multiple transforms sequentially. + + Args: + transforms (Sequence[dict | callable]): Sequence of transform object or + config dict to be composed. + """ + + def __init__(self, transforms): + assert isinstance(transforms, collections.abc.Sequence) + self.transforms = [] + for transform in transforms: + if isinstance(transform, dict): + transform = build_from_cfg(transform, PIPELINES) + self.transforms.append(transform) + elif callable(transform): + self.transforms.append(transform) + else: + raise TypeError('transform must be callable or a dict') + + def __call__(self, data): + """Call function to apply transforms sequentially. + + Args: + data (dict): A result dict contains the data to transform. + + Returns: + dict: Transformed data. + """ + + for t in self.transforms: + data = t(data) + if data is None: + return None + return data + + def __repr__(self): + format_string = self.__class__.__name__ + '(' + for t in self.transforms: + format_string += '\n' + format_string += f' {t}' + format_string += '\n)' + return format_string diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/formating.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/formating.py new file mode 100644 index 00000000..5781341b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/formating.py @@ -0,0 +1,364 @@ +from collections.abc import Sequence + +import mmcv +import numpy as np +import torch +from mmcv.parallel import DataContainer as DC + +from ..builder import PIPELINES + + +def to_tensor(data): + """Convert objects of various python types to :obj:`torch.Tensor`. + + Supported types are: :class:`numpy.ndarray`, :class:`torch.Tensor`, + :class:`Sequence`, :class:`int` and :class:`float`. + + Args: + data (torch.Tensor | numpy.ndarray | Sequence | int | float): Data to + be converted. + """ + + if isinstance(data, torch.Tensor): + return data + elif isinstance(data, np.ndarray): + return torch.from_numpy(data) + elif isinstance(data, Sequence) and not mmcv.is_str(data): + return torch.tensor(data) + elif isinstance(data, int): + return torch.LongTensor([data]) + elif isinstance(data, float): + return torch.FloatTensor([data]) + else: + raise TypeError(f'type {type(data)} cannot be converted to tensor.') + + +@PIPELINES.register_module() +class ToTensor(object): + """Convert some results to :obj:`torch.Tensor` by given keys. + + Args: + keys (Sequence[str]): Keys that need to be converted to Tensor. + """ + + def __init__(self, keys): + self.keys = keys + + def __call__(self, results): + """Call function to convert data in results to :obj:`torch.Tensor`. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + dict: The result dict contains the data converted + to :obj:`torch.Tensor`. + """ + for key in self.keys: + results[key] = to_tensor(results[key]) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(keys={self.keys})' + + +@PIPELINES.register_module() +class ImageToTensor(object): + """Convert image to :obj:`torch.Tensor` by given keys. + + The dimension order of input image is (H, W, C). The pipeline will convert + it to (C, H, W). If only 2 dimension (H, W) is given, the output would be + (1, H, W). + + Args: + keys (Sequence[str]): Key of images to be converted to Tensor. + """ + + def __init__(self, keys): + self.keys = keys + + def __call__(self, results): + """Call function to convert image in results to :obj:`torch.Tensor` and + transpose the channel order. + + Args: + results (dict): Result dict contains the image data to convert. + + Returns: + dict: The result dict contains the image converted + to :obj:`torch.Tensor` and transposed to (C, H, W) order. + """ + for key in self.keys: + img = results[key] + if len(img.shape) < 3: + img = np.expand_dims(img, -1) + results[key] = to_tensor(img.transpose(2, 0, 1)) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(keys={self.keys})' + + +@PIPELINES.register_module() +class Transpose(object): + """Transpose some results by given keys. + + Args: + keys (Sequence[str]): Keys of results to be transposed. + order (Sequence[int]): Order of transpose. + """ + + def __init__(self, keys, order): + self.keys = keys + self.order = order + + def __call__(self, results): + """Call function to transpose the channel order of data in results. + + Args: + results (dict): Result dict contains the data to transpose. + + Returns: + dict: The result dict contains the data transposed to \ + ``self.order``. + """ + for key in self.keys: + results[key] = results[key].transpose(self.order) + return results + + def __repr__(self): + return self.__class__.__name__ + \ + f'(keys={self.keys}, order={self.order})' + + +@PIPELINES.register_module() +class ToDataContainer(object): + """Convert results to :obj:`mmcv.DataContainer` by given fields. + + Args: + fields (Sequence[dict]): Each field is a dict like + ``dict(key='xxx', **kwargs)``. The ``key`` in result will + be converted to :obj:`mmcv.DataContainer` with ``**kwargs``. + Default: ``(dict(key='img', stack=True), dict(key='gt_bboxes'), + dict(key='gt_labels'))``. + """ + + def __init__(self, + fields=(dict(key='img', stack=True), dict(key='gt_bboxes'), + dict(key='gt_labels'))): + self.fields = fields + + def __call__(self, results): + """Call function to convert data in results to + :obj:`mmcv.DataContainer`. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + dict: The result dict contains the data converted to \ + :obj:`mmcv.DataContainer`. + """ + + for field in self.fields: + field = field.copy() + key = field.pop('key') + results[key] = DC(results[key], **field) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(fields={self.fields})' + + +@PIPELINES.register_module() +class DefaultFormatBundle(object): + """Default formatting bundle. + + It simplifies the pipeline of formatting common fields, including "img", + "proposals", "gt_bboxes", "gt_labels", "gt_masks" and "gt_semantic_seg". + These fields are formatted as follows. + + - img: (1)transpose, (2)to tensor, (3)to DataContainer (stack=True) + - proposals: (1)to tensor, (2)to DataContainer + - gt_bboxes: (1)to tensor, (2)to DataContainer + - gt_bboxes_ignore: (1)to tensor, (2)to DataContainer + - gt_labels: (1)to tensor, (2)to DataContainer + - gt_masks: (1)to tensor, (2)to DataContainer (cpu_only=True) + - gt_semantic_seg: (1)unsqueeze dim-0 (2)to tensor, \ + (3)to DataContainer (stack=True) + """ + + def __call__(self, results): + """Call function to transform and format common fields in results. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + dict: The result dict contains the data that is formatted with \ + default bundle. + """ + + if 'img' in results: + img = results['img'] + # add default meta keys + results = self._add_default_meta_keys(results) + if len(img.shape) < 3: + img = np.expand_dims(img, -1) + img = np.ascontiguousarray(img.transpose(2, 0, 1)) + results['img'] = DC(to_tensor(img), stack=True) + for key in ['proposals', 'gt_bboxes', 'gt_bboxes_ignore', 'gt_labels']: + if key not in results: + continue + results[key] = DC(to_tensor(results[key])) + if 'gt_masks' in results: + results['gt_masks'] = DC(results['gt_masks'], cpu_only=True) + if 'gt_semantic_seg' in results: + results['gt_semantic_seg'] = DC( + to_tensor(results['gt_semantic_seg'][None, ...]), stack=True) + return results + + def _add_default_meta_keys(self, results): + """Add default meta keys. + + We set default meta keys including `pad_shape`, `scale_factor` and + `img_norm_cfg` to avoid the case where no `Resize`, `Normalize` and + `Pad` are implemented during the whole pipeline. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + results (dict): Updated result dict contains the data to convert. + """ + img = results['img'] + results.setdefault('pad_shape', img.shape) + results.setdefault('scale_factor', 1.0) + num_channels = 1 if len(img.shape) < 3 else img.shape[2] + results.setdefault( + 'img_norm_cfg', + dict( + mean=np.zeros(num_channels, dtype=np.float32), + std=np.ones(num_channels, dtype=np.float32), + to_rgb=False)) + return results + + def __repr__(self): + return self.__class__.__name__ + + +@PIPELINES.register_module() +class Collect(object): + """Collect data from the loader relevant to the specific task. + + This is usually the last stage of the data loader pipeline. Typically keys + is set to some subset of "img", "proposals", "gt_bboxes", + "gt_bboxes_ignore", "gt_labels", and/or "gt_masks". + + The "img_meta" item is always populated. The contents of the "img_meta" + dictionary depends on "meta_keys". By default this includes: + + - "img_shape": shape of the image input to the network as a tuple \ + (h, w, c). Note that images may be zero padded on the \ + bottom/right if the batch tensor is larger than this shape. + + - "scale_factor": a float indicating the preprocessing scale + + - "flip": a boolean indicating if image flip transform was used + + - "filename": path to the image file + + - "ori_shape": original shape of the image as a tuple (h, w, c) + + - "pad_shape": image shape after padding + + - "img_norm_cfg": a dict of normalization information: + + - mean - per channel mean subtraction + - std - per channel std divisor + - to_rgb - bool indicating if bgr was converted to rgb + + Args: + keys (Sequence[str]): Keys of results to be collected in ``data``. + meta_keys (Sequence[str], optional): Meta keys to be converted to + ``mmcv.DataContainer`` and collected in ``data[img_metas]``. + Default: ``('filename', 'ori_filename', 'ori_shape', 'img_shape', + 'pad_shape', 'scale_factor', 'flip', 'flip_direction', + 'img_norm_cfg')`` + """ + + def __init__(self, + keys, + meta_keys=('filename', 'ori_filename', 'ori_shape', + 'img_shape', 'pad_shape', 'scale_factor', 'flip', + 'flip_direction', 'img_norm_cfg')): + self.keys = keys + self.meta_keys = meta_keys + + def __call__(self, results): + """Call function to collect keys in results. The keys in ``meta_keys`` + will be converted to :obj:mmcv.DataContainer. + + Args: + results (dict): Result dict contains the data to collect. + + Returns: + dict: The result dict contains the following keys + + - keys in``self.keys`` + - ``img_metas`` + """ + + data = {} + img_meta = {} + for key in self.meta_keys: + img_meta[key] = results[key] + data['img_metas'] = DC(img_meta, cpu_only=True) + for key in self.keys: + data[key] = results[key] + return data + + def __repr__(self): + return self.__class__.__name__ + \ + f'(keys={self.keys}, meta_keys={self.meta_keys})' + + +@PIPELINES.register_module() +class WrapFieldsToLists(object): + """Wrap fields of the data dictionary into lists for evaluation. + + This class can be used as a last step of a test or validation + pipeline for single image evaluation or inference. + + Example: + >>> test_pipeline = [ + >>> dict(type='LoadImageFromFile'), + >>> dict(type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + >>> dict(type='Pad', size_divisor=32), + >>> dict(type='ImageToTensor', keys=['img']), + >>> dict(type='Collect', keys=['img']), + >>> dict(type='WrapFieldsToLists') + >>> ] + """ + + def __call__(self, results): + """Call function to wrap fields into lists. + + Args: + results (dict): Result dict contains the data to wrap. + + Returns: + dict: The result dict where value of ``self.keys`` are wrapped \ + into list. + """ + + # Wrap dict fields into lists + for key, val in results.items(): + results[key] = [val] + return results + + def __repr__(self): + return f'{self.__class__.__name__}()' diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/instaboost.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/instaboost.py new file mode 100644 index 00000000..38b6819f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/instaboost.py @@ -0,0 +1,98 @@ +import numpy as np + +from ..builder import PIPELINES + + +@PIPELINES.register_module() +class InstaBoost(object): + r"""Data augmentation method in `InstaBoost: Boosting Instance + Segmentation Via Probability Map Guided Copy-Pasting + `_. + + Refer to https://github.com/GothicAi/Instaboost for implementation details. + """ + + def __init__(self, + action_candidate=('normal', 'horizontal', 'skip'), + action_prob=(1, 0, 0), + scale=(0.8, 1.2), + dx=15, + dy=15, + theta=(-1, 1), + color_prob=0.5, + hflag=False, + aug_ratio=0.5): + try: + import instaboostfast as instaboost + except ImportError: + raise ImportError( + 'Please run "pip install instaboostfast" ' + 'to install instaboostfast first for instaboost augmentation.') + self.cfg = instaboost.InstaBoostConfig(action_candidate, action_prob, + scale, dx, dy, theta, + color_prob, hflag) + self.aug_ratio = aug_ratio + + def _load_anns(self, results): + labels = results['ann_info']['labels'] + masks = results['ann_info']['masks'] + bboxes = results['ann_info']['bboxes'] + n = len(labels) + + anns = [] + for i in range(n): + label = labels[i] + bbox = bboxes[i] + mask = masks[i] + x1, y1, x2, y2 = bbox + # assert (x2 - x1) >= 1 and (y2 - y1) >= 1 + bbox = [x1, y1, x2 - x1, y2 - y1] + anns.append({ + 'category_id': label, + 'segmentation': mask, + 'bbox': bbox + }) + + return anns + + def _parse_anns(self, results, anns, img): + gt_bboxes = [] + gt_labels = [] + gt_masks_ann = [] + for ann in anns: + x1, y1, w, h = ann['bbox'] + # TODO: more essential bug need to be fixed in instaboost + if w <= 0 or h <= 0: + continue + bbox = [x1, y1, x1 + w, y1 + h] + gt_bboxes.append(bbox) + gt_labels.append(ann['category_id']) + gt_masks_ann.append(ann['segmentation']) + gt_bboxes = np.array(gt_bboxes, dtype=np.float32) + gt_labels = np.array(gt_labels, dtype=np.int64) + results['ann_info']['labels'] = gt_labels + results['ann_info']['bboxes'] = gt_bboxes + results['ann_info']['masks'] = gt_masks_ann + results['img'] = img + return results + + def __call__(self, results): + img = results['img'] + orig_type = img.dtype + anns = self._load_anns(results) + if np.random.choice([0, 1], p=[1 - self.aug_ratio, self.aug_ratio]): + try: + import instaboostfast as instaboost + except ImportError: + raise ImportError('Please run "pip install instaboostfast" ' + 'to install instaboostfast first.') + anns, img = instaboost.get_new_data( + anns, img.astype(np.uint8), self.cfg, background=None) + + results = self._parse_anns(results, anns, img.astype(orig_type)) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(cfg={self.cfg}, aug_ratio={self.aug_ratio})' + return repr_str diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/loading.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/loading.py new file mode 100644 index 00000000..69225941 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/loading.py @@ -0,0 +1,458 @@ +import os.path as osp + +import mmcv +import numpy as np +import pycocotools.mask as maskUtils + +from mmdet.core import BitmapMasks, PolygonMasks +from ..builder import PIPELINES + + +@PIPELINES.register_module() +class LoadImageFromFile(object): + """Load an image from file. + + Required keys are "img_prefix" and "img_info" (a dict that must contain the + key "filename"). Added or updated keys are "filename", "img", "img_shape", + "ori_shape" (same as `img_shape`), "pad_shape" (same as `img_shape`), + "scale_factor" (1.0) and "img_norm_cfg" (means=0 and stds=1). + + Args: + to_float32 (bool): Whether to convert the loaded image to a float32 + numpy array. If set to False, the loaded image is an uint8 array. + Defaults to False. + color_type (str): The flag argument for :func:`mmcv.imfrombytes`. + Defaults to 'color'. + file_client_args (dict): Arguments to instantiate a FileClient. + See :class:`mmcv.fileio.FileClient` for details. + Defaults to ``dict(backend='disk')``. + """ + + def __init__(self, + to_float32=False, + color_type='color', + file_client_args=dict(backend='disk')): + self.to_float32 = to_float32 + self.color_type = color_type + self.file_client_args = file_client_args.copy() + self.file_client = None + + def __call__(self, results): + """Call functions to load image and get image meta information. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded image and meta information. + """ + + if self.file_client is None: + self.file_client = mmcv.FileClient(**self.file_client_args) + + if results['img_prefix'] is not None: + filename = osp.join(results['img_prefix'], + results['img_info']['filename']) + else: + filename = results['img_info']['filename'] + + img_bytes = self.file_client.get(filename) + img = mmcv.imfrombytes(img_bytes, flag=self.color_type) + if self.to_float32: + img = img.astype(np.float32) + + results['filename'] = filename + results['ori_filename'] = results['img_info']['filename'] + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + results['img_fields'] = ['img'] + return results + + def __repr__(self): + repr_str = (f'{self.__class__.__name__}(' + f'to_float32={self.to_float32}, ' + f"color_type='{self.color_type}', " + f'file_client_args={self.file_client_args})') + return repr_str + + +@PIPELINES.register_module() +class LoadImageFromWebcam(LoadImageFromFile): + """Load an image from webcam. + + Similar with :obj:`LoadImageFromFile`, but the image read from webcam is in + ``results['img']``. + """ + + def __call__(self, results): + """Call functions to add image meta information. + + Args: + results (dict): Result dict with Webcam read image in + ``results['img']``. + + Returns: + dict: The dict contains loaded image and meta information. + """ + + img = results['img'] + if self.to_float32: + img = img.astype(np.float32) + + results['filename'] = None + results['ori_filename'] = None + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + results['img_fields'] = ['img'] + return results + + +@PIPELINES.register_module() +class LoadMultiChannelImageFromFiles(object): + """Load multi-channel images from a list of separate channel files. + + Required keys are "img_prefix" and "img_info" (a dict that must contain the + key "filename", which is expected to be a list of filenames). + Added or updated keys are "filename", "img", "img_shape", + "ori_shape" (same as `img_shape`), "pad_shape" (same as `img_shape`), + "scale_factor" (1.0) and "img_norm_cfg" (means=0 and stds=1). + + Args: + to_float32 (bool): Whether to convert the loaded image to a float32 + numpy array. If set to False, the loaded image is an uint8 array. + Defaults to False. + color_type (str): The flag argument for :func:`mmcv.imfrombytes`. + Defaults to 'color'. + file_client_args (dict): Arguments to instantiate a FileClient. + See :class:`mmcv.fileio.FileClient` for details. + Defaults to ``dict(backend='disk')``. + """ + + def __init__(self, + to_float32=False, + color_type='unchanged', + file_client_args=dict(backend='disk')): + self.to_float32 = to_float32 + self.color_type = color_type + self.file_client_args = file_client_args.copy() + self.file_client = None + + def __call__(self, results): + """Call functions to load multiple images and get images meta + information. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded images and meta information. + """ + + if self.file_client is None: + self.file_client = mmcv.FileClient(**self.file_client_args) + + if results['img_prefix'] is not None: + filename = [ + osp.join(results['img_prefix'], fname) + for fname in results['img_info']['filename'] + ] + else: + filename = results['img_info']['filename'] + + img = [] + for name in filename: + img_bytes = self.file_client.get(name) + img.append(mmcv.imfrombytes(img_bytes, flag=self.color_type)) + img = np.stack(img, axis=-1) + if self.to_float32: + img = img.astype(np.float32) + + results['filename'] = filename + results['ori_filename'] = results['img_info']['filename'] + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + num_channels = 1 if len(img.shape) < 3 else img.shape[2] + results['img_norm_cfg'] = dict( + mean=np.zeros(num_channels, dtype=np.float32), + std=np.ones(num_channels, dtype=np.float32), + to_rgb=False) + return results + + def __repr__(self): + repr_str = (f'{self.__class__.__name__}(' + f'to_float32={self.to_float32}, ' + f"color_type='{self.color_type}', " + f'file_client_args={self.file_client_args})') + return repr_str + + +@PIPELINES.register_module() +class LoadAnnotations(object): + """Load mutiple types of annotations. + + Args: + with_bbox (bool): Whether to parse and load the bbox annotation. + Default: True. + with_label (bool): Whether to parse and load the label annotation. + Default: True. + with_mask (bool): Whether to parse and load the mask annotation. + Default: False. + with_seg (bool): Whether to parse and load the semantic segmentation + annotation. Default: False. + poly2mask (bool): Whether to convert the instance masks from polygons + to bitmaps. Default: True. + file_client_args (dict): Arguments to instantiate a FileClient. + See :class:`mmcv.fileio.FileClient` for details. + Defaults to ``dict(backend='disk')``. + """ + + def __init__(self, + with_bbox=True, + with_label=True, + with_mask=False, + with_seg=False, + poly2mask=True, + file_client_args=dict(backend='disk')): + self.with_bbox = with_bbox + self.with_label = with_label + self.with_mask = with_mask + self.with_seg = with_seg + self.poly2mask = poly2mask + self.file_client_args = file_client_args.copy() + self.file_client = None + + def _load_bboxes(self, results): + """Private function to load bounding box annotations. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded bounding box annotations. + """ + + ann_info = results['ann_info'] + results['gt_bboxes'] = ann_info['bboxes'].copy() + + gt_bboxes_ignore = ann_info.get('bboxes_ignore', None) + if gt_bboxes_ignore is not None: + results['gt_bboxes_ignore'] = gt_bboxes_ignore.copy() + results['bbox_fields'].append('gt_bboxes_ignore') + results['bbox_fields'].append('gt_bboxes') + return results + + def _load_labels(self, results): + """Private function to load label annotations. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded label annotations. + """ + + results['gt_labels'] = results['ann_info']['labels'].copy() + return results + + def _poly2mask(self, mask_ann, img_h, img_w): + """Private function to convert masks represented with polygon to + bitmaps. + + Args: + mask_ann (list | dict): Polygon mask annotation input. + img_h (int): The height of output mask. + img_w (int): The width of output mask. + + Returns: + numpy.ndarray: The decode bitmap mask of shape (img_h, img_w). + """ + + if isinstance(mask_ann, list): + # polygon -- a single object might consist of multiple parts + # we merge all parts into one mask rle code + rles = maskUtils.frPyObjects(mask_ann, img_h, img_w) + rle = maskUtils.merge(rles) + elif isinstance(mask_ann['counts'], list): + # uncompressed RLE + rle = maskUtils.frPyObjects(mask_ann, img_h, img_w) + else: + # rle + rle = mask_ann + mask = maskUtils.decode(rle) + return mask + + def process_polygons(self, polygons): + """Convert polygons to list of ndarray and filter invalid polygons. + + Args: + polygons (list[list]): Polygons of one instance. + + Returns: + list[numpy.ndarray]: Processed polygons. + """ + + polygons = [np.array(p) for p in polygons] + valid_polygons = [] + for polygon in polygons: + if len(polygon) % 2 == 0 and len(polygon) >= 6: + valid_polygons.append(polygon) + return valid_polygons + + def _load_masks(self, results): + """Private function to load mask annotations. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded mask annotations. + If ``self.poly2mask`` is set ``True``, `gt_mask` will contain + :obj:`PolygonMasks`. Otherwise, :obj:`BitmapMasks` is used. + """ + + h, w = results['img_info']['height'], results['img_info']['width'] + gt_masks = results['ann_info']['masks'] + if self.poly2mask: + gt_masks = BitmapMasks( + [self._poly2mask(mask, h, w) for mask in gt_masks], h, w) + else: + gt_masks = PolygonMasks( + [self.process_polygons(polygons) for polygons in gt_masks], h, + w) + results['gt_masks'] = gt_masks + results['mask_fields'].append('gt_masks') + return results + + def _load_semantic_seg(self, results): + """Private function to load semantic segmentation annotations. + + Args: + results (dict): Result dict from :obj:`dataset`. + + Returns: + dict: The dict contains loaded semantic segmentation annotations. + """ + + if self.file_client is None: + self.file_client = mmcv.FileClient(**self.file_client_args) + + filename = osp.join(results['seg_prefix'], + results['ann_info']['seg_map']) + img_bytes = self.file_client.get(filename) + results['gt_semantic_seg'] = mmcv.imfrombytes( + img_bytes, flag='unchanged').squeeze() + results['seg_fields'].append('gt_semantic_seg') + return results + + def __call__(self, results): + """Call function to load multiple types annotations. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded bounding box, label, mask and + semantic segmentation annotations. + """ + + if self.with_bbox: + results = self._load_bboxes(results) + if results is None: + return None + if self.with_label: + results = self._load_labels(results) + if self.with_mask: + results = self._load_masks(results) + if self.with_seg: + results = self._load_semantic_seg(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(with_bbox={self.with_bbox}, ' + repr_str += f'with_label={self.with_label}, ' + repr_str += f'with_mask={self.with_mask}, ' + repr_str += f'with_seg={self.with_seg}, ' + repr_str += f'poly2mask={self.poly2mask}, ' + repr_str += f'poly2mask={self.file_client_args})' + return repr_str + + +@PIPELINES.register_module() +class LoadProposals(object): + """Load proposal pipeline. + + Required key is "proposals". Updated keys are "proposals", "bbox_fields". + + Args: + num_max_proposals (int, optional): Maximum number of proposals to load. + If not specified, all proposals will be loaded. + """ + + def __init__(self, num_max_proposals=None): + self.num_max_proposals = num_max_proposals + + def __call__(self, results): + """Call function to load proposals from file. + + Args: + results (dict): Result dict from :obj:`mmdet.CustomDataset`. + + Returns: + dict: The dict contains loaded proposal annotations. + """ + + proposals = results['proposals'] + if proposals.shape[1] not in (4, 5): + raise AssertionError( + 'proposals should have shapes (n, 4) or (n, 5), ' + f'but found {proposals.shape}') + proposals = proposals[:, :4] + + if self.num_max_proposals is not None: + proposals = proposals[:self.num_max_proposals] + + if len(proposals) == 0: + proposals = np.array([[0, 0, 0, 0]], dtype=np.float32) + results['proposals'] = proposals + results['bbox_fields'].append('proposals') + return results + + def __repr__(self): + return self.__class__.__name__ + \ + f'(num_max_proposals={self.num_max_proposals})' + + +@PIPELINES.register_module() +class FilterAnnotations(object): + """Filter invalid annotations. + + Args: + min_gt_bbox_wh (tuple[int]): Minimum width and height of ground truth + boxes. + """ + + def __init__(self, min_gt_bbox_wh): + # TODO: add more filter options + self.min_gt_bbox_wh = min_gt_bbox_wh + + def __call__(self, results): + assert 'gt_bboxes' in results + gt_bboxes = results['gt_bboxes'] + w = gt_bboxes[:, 2] - gt_bboxes[:, 0] + h = gt_bboxes[:, 3] - gt_bboxes[:, 1] + keep = (w > self.min_gt_bbox_wh[0]) & (h > self.min_gt_bbox_wh[1]) + if not keep.any(): + return None + else: + keys = ('gt_bboxes', 'gt_labels', 'gt_masks', 'gt_semantic_seg') + for key in keys: + if key in results: + results[key] = results[key][keep] + return results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/test_time_aug.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/test_time_aug.py new file mode 100644 index 00000000..b6226e04 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/test_time_aug.py @@ -0,0 +1,119 @@ +import warnings + +import mmcv + +from ..builder import PIPELINES +from .compose import Compose + + +@PIPELINES.register_module() +class MultiScaleFlipAug(object): + """Test-time augmentation with multiple scales and flipping. + + An example configuration is as followed: + + .. code-block:: + + img_scale=[(1333, 400), (1333, 800)], + flip=True, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ] + + After MultiScaleFLipAug with above configuration, the results are wrapped + into lists of the same length as followed: + + .. code-block:: + + dict( + img=[...], + img_shape=[...], + scale=[(1333, 400), (1333, 400), (1333, 800), (1333, 800)] + flip=[False, True, False, True] + ... + ) + + Args: + transforms (list[dict]): Transforms to apply in each augmentation. + img_scale (tuple | list[tuple] | None): Images scales for resizing. + scale_factor (float | list[float] | None): Scale factors for resizing. + flip (bool): Whether apply flip augmentation. Default: False. + flip_direction (str | list[str]): Flip augmentation directions, + options are "horizontal" and "vertical". If flip_direction is list, + multiple flip augmentations will be applied. + It has no effect when flip == False. Default: "horizontal". + """ + + def __init__(self, + transforms, + img_scale=None, + scale_factor=None, + flip=False, + flip_direction='horizontal'): + self.transforms = Compose(transforms) + assert (img_scale is None) ^ (scale_factor is None), ( + 'Must have but only one variable can be setted') + if img_scale is not None: + self.img_scale = img_scale if isinstance(img_scale, + list) else [img_scale] + self.scale_key = 'scale' + assert mmcv.is_list_of(self.img_scale, tuple) + else: + self.img_scale = scale_factor if isinstance( + scale_factor, list) else [scale_factor] + self.scale_key = 'scale_factor' + + self.flip = flip + self.flip_direction = flip_direction if isinstance( + flip_direction, list) else [flip_direction] + assert mmcv.is_list_of(self.flip_direction, str) + if not self.flip and self.flip_direction != ['horizontal']: + warnings.warn( + 'flip_direction has no effect when flip is set to False') + if (self.flip + and not any([t['type'] == 'RandomFlip' for t in transforms])): + warnings.warn( + 'flip has no effect when RandomFlip is not in transforms') + + def __call__(self, results): + """Call function to apply test time augment transforms on results. + + Args: + results (dict): Result dict contains the data to transform. + + Returns: + dict[str: list]: The augmented data, where each value is wrapped + into a list. + """ + + aug_data = [] + flip_args = [(False, None)] + if self.flip: + flip_args += [(True, direction) + for direction in self.flip_direction] + for scale in self.img_scale: + for flip, direction in flip_args: + _results = results.copy() + _results[self.scale_key] = scale + _results['flip'] = flip + _results['flip_direction'] = direction + data = self.transforms(_results) + aug_data.append(data) + # list of dict to dict of list + aug_data_dict = {key: [] for key in aug_data[0]} + for data in aug_data: + for key, val in data.items(): + aug_data_dict[key].append(val) + return aug_data_dict + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(transforms={self.transforms}, ' + repr_str += f'img_scale={self.img_scale}, flip={self.flip}, ' + repr_str += f'flip_direction={self.flip_direction})' + return repr_str diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/transforms.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/transforms.py new file mode 100644 index 00000000..fa6d80b4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/pipelines/transforms.py @@ -0,0 +1,1804 @@ +import inspect + +import mmcv +import numpy as np +from numpy import random + +from mmdet.core import PolygonMasks +from mmdet.core.evaluation.bbox_overlaps import bbox_overlaps +from ..builder import PIPELINES + +try: + from imagecorruptions import corrupt +except ImportError: + corrupt = None + +try: + import albumentations + from albumentations import Compose +except ImportError: + albumentations = None + Compose = None + + +@PIPELINES.register_module() +class Resize(object): + """Resize images & bbox & mask. + + This transform resizes the input image to some scale. Bboxes and masks are + then resized with the same scale factor. If the input dict contains the key + "scale", then the scale in the input dict is used, otherwise the specified + scale in the init method is used. If the input dict contains the key + "scale_factor" (if MultiScaleFlipAug does not give img_scale but + scale_factor), the actual scale will be computed by image shape and + scale_factor. + + `img_scale` can either be a tuple (single-scale) or a list of tuple + (multi-scale). There are 3 multiscale modes: + + - ``ratio_range is not None``: randomly sample a ratio from the ratio \ + range and multiply it with the image scale. + - ``ratio_range is None`` and ``multiscale_mode == "range"``: randomly \ + sample a scale from the multiscale range. + - ``ratio_range is None`` and ``multiscale_mode == "value"``: randomly \ + sample a scale from multiple scales. + + Args: + img_scale (tuple or list[tuple]): Images scales for resizing. + multiscale_mode (str): Either "range" or "value". + ratio_range (tuple[float]): (min_ratio, max_ratio) + keep_ratio (bool): Whether to keep the aspect ratio when resizing the + image. + bbox_clip_border (bool, optional): Whether clip the objects outside + the border of the image. Defaults to True. + backend (str): Image resize backend, choices are 'cv2' and 'pillow'. + These two backends generates slightly different results. Defaults + to 'cv2'. + override (bool, optional): Whether to override `scale` and + `scale_factor` so as to call resize twice. Default False. If True, + after the first resizing, the existed `scale` and `scale_factor` + will be ignored so the second resizing can be allowed. + This option is a work-around for multiple times of resize in DETR. + Defaults to False. + """ + + def __init__(self, + img_scale=None, + multiscale_mode='range', + ratio_range=None, + keep_ratio=True, + bbox_clip_border=True, + backend='cv2', + override=False): + if img_scale is None: + self.img_scale = None + else: + if isinstance(img_scale, list): + self.img_scale = img_scale + else: + self.img_scale = [img_scale] + assert mmcv.is_list_of(self.img_scale, tuple) + + if ratio_range is not None: + # mode 1: given a scale and a range of image ratio + assert len(self.img_scale) == 1 + else: + # mode 2: given multiple scales or a range of scales + assert multiscale_mode in ['value', 'range'] + + self.backend = backend + self.multiscale_mode = multiscale_mode + self.ratio_range = ratio_range + self.keep_ratio = keep_ratio + # TODO: refactor the override option in Resize + self.override = override + self.bbox_clip_border = bbox_clip_border + + @staticmethod + def random_select(img_scales): + """Randomly select an img_scale from given candidates. + + Args: + img_scales (list[tuple]): Images scales for selection. + + Returns: + (tuple, int): Returns a tuple ``(img_scale, scale_dix)``, \ + where ``img_scale`` is the selected image scale and \ + ``scale_idx`` is the selected index in the given candidates. + """ + + assert mmcv.is_list_of(img_scales, tuple) + scale_idx = np.random.randint(len(img_scales)) + img_scale = img_scales[scale_idx] + return img_scale, scale_idx + + @staticmethod + def random_sample(img_scales): + """Randomly sample an img_scale when ``multiscale_mode=='range'``. + + Args: + img_scales (list[tuple]): Images scale range for sampling. + There must be two tuples in img_scales, which specify the lower + and uper bound of image scales. + + Returns: + (tuple, None): Returns a tuple ``(img_scale, None)``, where \ + ``img_scale`` is sampled scale and None is just a placeholder \ + to be consistent with :func:`random_select`. + """ + + assert mmcv.is_list_of(img_scales, tuple) and len(img_scales) == 2 + img_scale_long = [max(s) for s in img_scales] + img_scale_short = [min(s) for s in img_scales] + long_edge = np.random.randint( + min(img_scale_long), + max(img_scale_long) + 1) + short_edge = np.random.randint( + min(img_scale_short), + max(img_scale_short) + 1) + img_scale = (long_edge, short_edge) + return img_scale, None + + @staticmethod + def random_sample_ratio(img_scale, ratio_range): + """Randomly sample an img_scale when ``ratio_range`` is specified. + + A ratio will be randomly sampled from the range specified by + ``ratio_range``. Then it would be multiplied with ``img_scale`` to + generate sampled scale. + + Args: + img_scale (tuple): Images scale base to multiply with ratio. + ratio_range (tuple[float]): The minimum and maximum ratio to scale + the ``img_scale``. + + Returns: + (tuple, None): Returns a tuple ``(scale, None)``, where \ + ``scale`` is sampled ratio multiplied with ``img_scale`` and \ + None is just a placeholder to be consistent with \ + :func:`random_select`. + """ + + assert isinstance(img_scale, tuple) and len(img_scale) == 2 + min_ratio, max_ratio = ratio_range + assert min_ratio <= max_ratio + ratio = np.random.random_sample() * (max_ratio - min_ratio) + min_ratio + scale = int(img_scale[0] * ratio), int(img_scale[1] * ratio) + return scale, None + + def _random_scale(self, results): + """Randomly sample an img_scale according to ``ratio_range`` and + ``multiscale_mode``. + + If ``ratio_range`` is specified, a ratio will be sampled and be + multiplied with ``img_scale``. + If multiple scales are specified by ``img_scale``, a scale will be + sampled according to ``multiscale_mode``. + Otherwise, single scale will be used. + + Args: + results (dict): Result dict from :obj:`dataset`. + + Returns: + dict: Two new keys 'scale` and 'scale_idx` are added into \ + ``results``, which would be used by subsequent pipelines. + """ + + if self.ratio_range is not None: + scale, scale_idx = self.random_sample_ratio( + self.img_scale[0], self.ratio_range) + elif len(self.img_scale) == 1: + scale, scale_idx = self.img_scale[0], 0 + elif self.multiscale_mode == 'range': + scale, scale_idx = self.random_sample(self.img_scale) + elif self.multiscale_mode == 'value': + scale, scale_idx = self.random_select(self.img_scale) + else: + raise NotImplementedError + + results['scale'] = scale + results['scale_idx'] = scale_idx + + def _resize_img(self, results): + """Resize images with ``results['scale']``.""" + for key in results.get('img_fields', ['img']): + if self.keep_ratio: + img, scale_factor = mmcv.imrescale( + results[key], + results['scale'], + return_scale=True, + backend=self.backend) + # the w_scale and h_scale has minor difference + # a real fix should be done in the mmcv.imrescale in the future + new_h, new_w = img.shape[:2] + h, w = results[key].shape[:2] + w_scale = new_w / w + h_scale = new_h / h + else: + img, w_scale, h_scale = mmcv.imresize( + results[key], + results['scale'], + return_scale=True, + backend=self.backend) + results[key] = img + + scale_factor = np.array([w_scale, h_scale, w_scale, h_scale], + dtype=np.float32) + results['img_shape'] = img.shape + # in case that there is no padding + results['pad_shape'] = img.shape + results['scale_factor'] = scale_factor + results['keep_ratio'] = self.keep_ratio + + def _resize_bboxes(self, results): + """Resize bounding boxes with ``results['scale_factor']``.""" + for key in results.get('bbox_fields', []): + bboxes = results[key] * results['scale_factor'] + if self.bbox_clip_border: + img_shape = results['img_shape'] + bboxes[:, 0::2] = np.clip(bboxes[:, 0::2], 0, img_shape[1]) + bboxes[:, 1::2] = np.clip(bboxes[:, 1::2], 0, img_shape[0]) + results[key] = bboxes + + def _resize_masks(self, results): + """Resize masks with ``results['scale']``""" + for key in results.get('mask_fields', []): + if results[key] is None: + continue + if self.keep_ratio: + results[key] = results[key].rescale(results['scale']) + else: + results[key] = results[key].resize(results['img_shape'][:2]) + + def _resize_seg(self, results): + """Resize semantic segmentation map with ``results['scale']``.""" + for key in results.get('seg_fields', []): + if self.keep_ratio: + gt_seg = mmcv.imrescale( + results[key], + results['scale'], + interpolation='nearest', + backend=self.backend) + else: + gt_seg = mmcv.imresize( + results[key], + results['scale'], + interpolation='nearest', + backend=self.backend) + results['gt_semantic_seg'] = gt_seg + + def __call__(self, results): + """Call function to resize images, bounding boxes, masks, semantic + segmentation map. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Resized results, 'img_shape', 'pad_shape', 'scale_factor', \ + 'keep_ratio' keys are added into result dict. + """ + + if 'scale' not in results: + if 'scale_factor' in results: + img_shape = results['img'].shape[:2] + scale_factor = results['scale_factor'] + assert isinstance(scale_factor, float) + results['scale'] = tuple( + [int(x * scale_factor) for x in img_shape][::-1]) + else: + self._random_scale(results) + else: + if not self.override: + assert 'scale_factor' not in results, ( + 'scale and scale_factor cannot be both set.') + else: + results.pop('scale') + if 'scale_factor' in results: + results.pop('scale_factor') + self._random_scale(results) + + self._resize_img(results) + self._resize_bboxes(results) + self._resize_masks(results) + self._resize_seg(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(img_scale={self.img_scale}, ' + repr_str += f'multiscale_mode={self.multiscale_mode}, ' + repr_str += f'ratio_range={self.ratio_range}, ' + repr_str += f'keep_ratio={self.keep_ratio}, ' + repr_str += f'bbox_clip_border={self.bbox_clip_border})' + return repr_str + + +@PIPELINES.register_module() +class RandomFlip(object): + """Flip the image & bbox & mask. + + If the input dict contains the key "flip", then the flag will be used, + otherwise it will be randomly decided by a ratio specified in the init + method. + + When random flip is enabled, ``flip_ratio``/``direction`` can either be a + float/string or tuple of float/string. There are 3 flip modes: + + - ``flip_ratio`` is float, ``direction`` is string: the image will be + ``direction``ly flipped with probability of ``flip_ratio`` . + E.g., ``flip_ratio=0.5``, ``direction='horizontal'``, + then image will be horizontally flipped with probability of 0.5. + - ``flip_ratio`` is float, ``direction`` is list of string: the image wil + be ``direction[i]``ly flipped with probability of + ``flip_ratio/len(direction)``. + E.g., ``flip_ratio=0.5``, ``direction=['horizontal', 'vertical']``, + then image will be horizontally flipped with probability of 0.25, + vertically with probability of 0.25. + - ``flip_ratio`` is list of float, ``direction`` is list of string: + given ``len(flip_ratio) == len(direction)``, the image wil + be ``direction[i]``ly flipped with probability of ``flip_ratio[i]``. + E.g., ``flip_ratio=[0.3, 0.5]``, ``direction=['horizontal', + 'vertical']``, then image will be horizontally flipped with probability + of 0.3, vertically with probability of 0.5 + + Args: + flip_ratio (float | list[float], optional): The flipping probability. + Default: None. + direction(str | list[str], optional): The flipping direction. Options + are 'horizontal', 'vertical', 'diagonal'. Default: 'horizontal'. + If input is a list, the length must equal ``flip_ratio``. Each + element in ``flip_ratio`` indicates the flip probability of + corresponding direction. + """ + + def __init__(self, flip_ratio=None, direction='horizontal'): + if isinstance(flip_ratio, list): + assert mmcv.is_list_of(flip_ratio, float) + assert 0 <= sum(flip_ratio) <= 1 + elif isinstance(flip_ratio, float): + assert 0 <= flip_ratio <= 1 + elif flip_ratio is None: + pass + else: + raise ValueError('flip_ratios must be None, float, ' + 'or list of float') + self.flip_ratio = flip_ratio + + valid_directions = ['horizontal', 'vertical', 'diagonal'] + if isinstance(direction, str): + assert direction in valid_directions + elif isinstance(direction, list): + assert mmcv.is_list_of(direction, str) + assert set(direction).issubset(set(valid_directions)) + else: + raise ValueError('direction must be either str or list of str') + self.direction = direction + + if isinstance(flip_ratio, list): + assert len(self.flip_ratio) == len(self.direction) + + def bbox_flip(self, bboxes, img_shape, direction): + """Flip bboxes horizontally. + + Args: + bboxes (numpy.ndarray): Bounding boxes, shape (..., 4*k) + img_shape (tuple[int]): Image shape (height, width) + direction (str): Flip direction. Options are 'horizontal', + 'vertical'. + + Returns: + numpy.ndarray: Flipped bounding boxes. + """ + + assert bboxes.shape[-1] % 4 == 0 + flipped = bboxes.copy() + if direction == 'horizontal': + w = img_shape[1] + flipped[..., 0::4] = w - bboxes[..., 2::4] + flipped[..., 2::4] = w - bboxes[..., 0::4] + elif direction == 'vertical': + h = img_shape[0] + flipped[..., 1::4] = h - bboxes[..., 3::4] + flipped[..., 3::4] = h - bboxes[..., 1::4] + elif direction == 'diagonal': + w = img_shape[1] + h = img_shape[0] + flipped[..., 0::4] = w - bboxes[..., 2::4] + flipped[..., 1::4] = h - bboxes[..., 3::4] + flipped[..., 2::4] = w - bboxes[..., 0::4] + flipped[..., 3::4] = h - bboxes[..., 1::4] + else: + raise ValueError(f"Invalid flipping direction '{direction}'") + return flipped + + def __call__(self, results): + """Call function to flip bounding boxes, masks, semantic segmentation + maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Flipped results, 'flip', 'flip_direction' keys are added \ + into result dict. + """ + + if 'flip' not in results: + if isinstance(self.direction, list): + # None means non-flip + direction_list = self.direction + [None] + else: + # None means non-flip + direction_list = [self.direction, None] + + if isinstance(self.flip_ratio, list): + non_flip_ratio = 1 - sum(self.flip_ratio) + flip_ratio_list = self.flip_ratio + [non_flip_ratio] + else: + non_flip_ratio = 1 - self.flip_ratio + # exclude non-flip + single_ratio = self.flip_ratio / (len(direction_list) - 1) + flip_ratio_list = [single_ratio] * (len(direction_list) - + 1) + [non_flip_ratio] + + cur_dir = np.random.choice(direction_list, p=flip_ratio_list) + + results['flip'] = cur_dir is not None + if 'flip_direction' not in results: + results['flip_direction'] = cur_dir + if results['flip']: + # flip image + for key in results.get('img_fields', ['img']): + results[key] = mmcv.imflip( + results[key], direction=results['flip_direction']) + # flip bboxes + for key in results.get('bbox_fields', []): + results[key] = self.bbox_flip(results[key], + results['img_shape'], + results['flip_direction']) + # flip masks + for key in results.get('mask_fields', []): + results[key] = results[key].flip(results['flip_direction']) + + # flip segs + for key in results.get('seg_fields', []): + results[key] = mmcv.imflip( + results[key], direction=results['flip_direction']) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(flip_ratio={self.flip_ratio})' + + +@PIPELINES.register_module() +class Pad(object): + """Pad the image & mask. + + There are two padding modes: (1) pad to a fixed size and (2) pad to the + minimum size that is divisible by some number. + Added keys are "pad_shape", "pad_fixed_size", "pad_size_divisor", + + Args: + size (tuple, optional): Fixed padding size. + size_divisor (int, optional): The divisor of padded size. + pad_val (float, optional): Padding value, 0 by default. + """ + + def __init__(self, size=None, size_divisor=None, pad_val=0): + self.size = size + self.size_divisor = size_divisor + self.pad_val = pad_val + # only one of size and size_divisor should be valid + assert size is not None or size_divisor is not None + assert size is None or size_divisor is None + + def _pad_img(self, results): + """Pad images according to ``self.size``.""" + for key in results.get('img_fields', ['img']): + if self.size is not None: + padded_img = mmcv.impad( + results[key], shape=self.size, pad_val=self.pad_val) + elif self.size_divisor is not None: + padded_img = mmcv.impad_to_multiple( + results[key], self.size_divisor, pad_val=self.pad_val) + results[key] = padded_img + results['pad_shape'] = padded_img.shape + results['pad_fixed_size'] = self.size + results['pad_size_divisor'] = self.size_divisor + + def _pad_masks(self, results): + """Pad masks according to ``results['pad_shape']``.""" + pad_shape = results['pad_shape'][:2] + for key in results.get('mask_fields', []): + results[key] = results[key].pad(pad_shape, pad_val=self.pad_val) + + def _pad_seg(self, results): + """Pad semantic segmentation map according to + ``results['pad_shape']``.""" + for key in results.get('seg_fields', []): + results[key] = mmcv.impad( + results[key], shape=results['pad_shape'][:2]) + + def __call__(self, results): + """Call function to pad images, masks, semantic segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Updated result dict. + """ + self._pad_img(results) + self._pad_masks(results) + self._pad_seg(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(size={self.size}, ' + repr_str += f'size_divisor={self.size_divisor}, ' + repr_str += f'pad_val={self.pad_val})' + return repr_str + + +@PIPELINES.register_module() +class Normalize(object): + """Normalize the image. + + Added key is "img_norm_cfg". + + Args: + mean (sequence): Mean values of 3 channels. + std (sequence): Std values of 3 channels. + to_rgb (bool): Whether to convert the image from BGR to RGB, + default is true. + """ + + def __init__(self, mean, std, to_rgb=True): + self.mean = np.array(mean, dtype=np.float32) + self.std = np.array(std, dtype=np.float32) + self.to_rgb = to_rgb + + def __call__(self, results): + """Call function to normalize images. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Normalized results, 'img_norm_cfg' key is added into + result dict. + """ + for key in results.get('img_fields', ['img']): + results[key] = mmcv.imnormalize(results[key], self.mean, self.std, + self.to_rgb) + results['img_norm_cfg'] = dict( + mean=self.mean, std=self.std, to_rgb=self.to_rgb) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(mean={self.mean}, std={self.std}, to_rgb={self.to_rgb})' + return repr_str + + +@PIPELINES.register_module() +class RandomCrop(object): + """Random crop the image & bboxes & masks. + + The absolute `crop_size` is sampled based on `crop_type` and `image_size`, + then the cropped results are generated. + + Args: + crop_size (tuple): The relative ratio or absolute pixels of + height and width. + crop_type (str, optional): one of "relative_range", "relative", + "absolute", "absolute_range". "relative" randomly crops + (h * crop_size[0], w * crop_size[1]) part from an input of size + (h, w). "relative_range" uniformly samples relative crop size from + range [crop_size[0], 1] and [crop_size[1], 1] for height and width + respectively. "absolute" crops from an input with absolute size + (crop_size[0], crop_size[1]). "absolute_range" uniformly samples + crop_h in range [crop_size[0], min(h, crop_size[1])] and crop_w + in range [crop_size[0], min(w, crop_size[1])]. Default "absolute". + allow_negative_crop (bool, optional): Whether to allow a crop that does + not contain any bbox area. Default False. + bbox_clip_border (bool, optional): Whether clip the objects outside + the border of the image. Defaults to True. + + Note: + - If the image is smaller than the absolute crop size, return the + original image. + - The keys for bboxes, labels and masks must be aligned. That is, + `gt_bboxes` corresponds to `gt_labels` and `gt_masks`, and + `gt_bboxes_ignore` corresponds to `gt_labels_ignore` and + `gt_masks_ignore`. + - If the crop does not contain any gt-bbox region and + `allow_negative_crop` is set to False, skip this image. + """ + + def __init__(self, + crop_size, + crop_type='absolute', + allow_negative_crop=False, + bbox_clip_border=True): + if crop_type not in [ + 'relative_range', 'relative', 'absolute', 'absolute_range' + ]: + raise ValueError(f'Invalid crop_type {crop_type}.') + if crop_type in ['absolute', 'absolute_range']: + assert crop_size[0] > 0 and crop_size[1] > 0 + assert isinstance(crop_size[0], int) and isinstance( + crop_size[1], int) + else: + assert 0 < crop_size[0] <= 1 and 0 < crop_size[1] <= 1 + self.crop_size = crop_size + self.crop_type = crop_type + self.allow_negative_crop = allow_negative_crop + self.bbox_clip_border = bbox_clip_border + # The key correspondence from bboxes to labels and masks. + self.bbox2label = { + 'gt_bboxes': 'gt_labels', + 'gt_bboxes_ignore': 'gt_labels_ignore' + } + self.bbox2mask = { + 'gt_bboxes': 'gt_masks', + 'gt_bboxes_ignore': 'gt_masks_ignore' + } + + def _crop_data(self, results, crop_size, allow_negative_crop): + """Function to randomly crop images, bounding boxes, masks, semantic + segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + crop_size (tuple): Expected absolute size after cropping, (h, w). + allow_negative_crop (bool): Whether to allow a crop that does not + contain any bbox area. Default to False. + + Returns: + dict: Randomly cropped results, 'img_shape' key in result dict is + updated according to crop size. + """ + assert crop_size[0] > 0 and crop_size[1] > 0 + for key in results.get('img_fields', ['img']): + img = results[key] + margin_h = max(img.shape[0] - crop_size[0], 0) + margin_w = max(img.shape[1] - crop_size[1], 0) + offset_h = np.random.randint(0, margin_h + 1) + offset_w = np.random.randint(0, margin_w + 1) + crop_y1, crop_y2 = offset_h, offset_h + crop_size[0] + crop_x1, crop_x2 = offset_w, offset_w + crop_size[1] + + # crop the image + img = img[crop_y1:crop_y2, crop_x1:crop_x2, ...] + img_shape = img.shape + results[key] = img + results['img_shape'] = img_shape + + # crop bboxes accordingly and clip to the image boundary + for key in results.get('bbox_fields', []): + # e.g. gt_bboxes and gt_bboxes_ignore + bbox_offset = np.array([offset_w, offset_h, offset_w, offset_h], + dtype=np.float32) + bboxes = results[key] - bbox_offset + if self.bbox_clip_border: + bboxes[:, 0::2] = np.clip(bboxes[:, 0::2], 0, img_shape[1]) + bboxes[:, 1::2] = np.clip(bboxes[:, 1::2], 0, img_shape[0]) + valid_inds = (bboxes[:, 2] > bboxes[:, 0]) & ( + bboxes[:, 3] > bboxes[:, 1]) + # If the crop does not contain any gt-bbox area and + # allow_negative_crop is False, skip this image. + if (key == 'gt_bboxes' and not valid_inds.any() + and not allow_negative_crop): + return None + results[key] = bboxes[valid_inds, :] + # label fields. e.g. gt_labels and gt_labels_ignore + label_key = self.bbox2label.get(key) + if label_key in results: + results[label_key] = results[label_key][valid_inds] + + # mask fields, e.g. gt_masks and gt_masks_ignore + mask_key = self.bbox2mask.get(key) + if mask_key in results: + results[mask_key] = results[mask_key][ + valid_inds.nonzero()[0]].crop( + np.asarray([crop_x1, crop_y1, crop_x2, crop_y2])) + + # crop semantic seg + for key in results.get('seg_fields', []): + results[key] = results[key][crop_y1:crop_y2, crop_x1:crop_x2] + + return results + + def _get_crop_size(self, image_size): + """Randomly generates the absolute crop size based on `crop_type` and + `image_size`. + + Args: + image_size (tuple): (h, w). + + Returns: + crop_size (tuple): (crop_h, crop_w) in absolute pixels. + """ + h, w = image_size + if self.crop_type == 'absolute': + return (min(self.crop_size[0], h), min(self.crop_size[1], w)) + elif self.crop_type == 'absolute_range': + assert self.crop_size[0] <= self.crop_size[1] + crop_h = np.random.randint( + min(h, self.crop_size[0]), + min(h, self.crop_size[1]) + 1) + crop_w = np.random.randint( + min(w, self.crop_size[0]), + min(w, self.crop_size[1]) + 1) + return crop_h, crop_w + elif self.crop_type == 'relative': + crop_h, crop_w = self.crop_size + return int(h * crop_h + 0.5), int(w * crop_w + 0.5) + elif self.crop_type == 'relative_range': + crop_size = np.asarray(self.crop_size, dtype=np.float32) + crop_h, crop_w = crop_size + np.random.rand(2) * (1 - crop_size) + return int(h * crop_h + 0.5), int(w * crop_w + 0.5) + + def __call__(self, results): + """Call function to randomly crop images, bounding boxes, masks, + semantic segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Randomly cropped results, 'img_shape' key in result dict is + updated according to crop size. + """ + image_size = results['img'].shape[:2] + crop_size = self._get_crop_size(image_size) + results = self._crop_data(results, crop_size, self.allow_negative_crop) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(crop_size={self.crop_size}, ' + repr_str += f'crop_type={self.crop_type}, ' + repr_str += f'allow_negative_crop={self.allow_negative_crop}, ' + repr_str += f'bbox_clip_border={self.bbox_clip_border})' + return repr_str + + +@PIPELINES.register_module() +class SegRescale(object): + """Rescale semantic segmentation maps. + + Args: + scale_factor (float): The scale factor of the final output. + backend (str): Image rescale backend, choices are 'cv2' and 'pillow'. + These two backends generates slightly different results. Defaults + to 'cv2'. + """ + + def __init__(self, scale_factor=1, backend='cv2'): + self.scale_factor = scale_factor + self.backend = backend + + def __call__(self, results): + """Call function to scale the semantic segmentation map. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with semantic segmentation map scaled. + """ + + for key in results.get('seg_fields', []): + if self.scale_factor != 1: + results[key] = mmcv.imrescale( + results[key], + self.scale_factor, + interpolation='nearest', + backend=self.backend) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(scale_factor={self.scale_factor})' + + +@PIPELINES.register_module() +class PhotoMetricDistortion(object): + """Apply photometric distortion to image sequentially, every transformation + is applied with a probability of 0.5. The position of random contrast is in + second or second to last. + + 1. random brightness + 2. random contrast (mode 0) + 3. convert color from BGR to HSV + 4. random saturation + 5. random hue + 6. convert color from HSV to BGR + 7. random contrast (mode 1) + 8. randomly swap channels + + Args: + brightness_delta (int): delta of brightness. + contrast_range (tuple): range of contrast. + saturation_range (tuple): range of saturation. + hue_delta (int): delta of hue. + """ + + def __init__(self, + brightness_delta=32, + contrast_range=(0.5, 1.5), + saturation_range=(0.5, 1.5), + hue_delta=18): + self.brightness_delta = brightness_delta + self.contrast_lower, self.contrast_upper = contrast_range + self.saturation_lower, self.saturation_upper = saturation_range + self.hue_delta = hue_delta + + def __call__(self, results): + """Call function to perform photometric distortion on images. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with images distorted. + """ + + if 'img_fields' in results: + assert results['img_fields'] == ['img'], \ + 'Only single img_fields is allowed' + img = results['img'] + assert img.dtype == np.float32, \ + 'PhotoMetricDistortion needs the input image of dtype np.float32,'\ + ' please set "to_float32=True" in "LoadImageFromFile" pipeline' + # random brightness + if random.randint(2): + delta = random.uniform(-self.brightness_delta, + self.brightness_delta) + img += delta + + # mode == 0 --> do random contrast first + # mode == 1 --> do random contrast last + mode = random.randint(2) + if mode == 1: + if random.randint(2): + alpha = random.uniform(self.contrast_lower, + self.contrast_upper) + img *= alpha + + # convert color from BGR to HSV + img = mmcv.bgr2hsv(img) + + # random saturation + if random.randint(2): + img[..., 1] *= random.uniform(self.saturation_lower, + self.saturation_upper) + + # random hue + if random.randint(2): + img[..., 0] += random.uniform(-self.hue_delta, self.hue_delta) + img[..., 0][img[..., 0] > 360] -= 360 + img[..., 0][img[..., 0] < 0] += 360 + + # convert color from HSV to BGR + img = mmcv.hsv2bgr(img) + + # random contrast + if mode == 0: + if random.randint(2): + alpha = random.uniform(self.contrast_lower, + self.contrast_upper) + img *= alpha + + # randomly swap channels + if random.randint(2): + img = img[..., random.permutation(3)] + + results['img'] = img + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(\nbrightness_delta={self.brightness_delta},\n' + repr_str += 'contrast_range=' + repr_str += f'{(self.contrast_lower, self.contrast_upper)},\n' + repr_str += 'saturation_range=' + repr_str += f'{(self.saturation_lower, self.saturation_upper)},\n' + repr_str += f'hue_delta={self.hue_delta})' + return repr_str + + +@PIPELINES.register_module() +class Expand(object): + """Random expand the image & bboxes. + + Randomly place the original image on a canvas of 'ratio' x original image + size filled with mean values. The ratio is in the range of ratio_range. + + Args: + mean (tuple): mean value of dataset. + to_rgb (bool): if need to convert the order of mean to align with RGB. + ratio_range (tuple): range of expand ratio. + prob (float): probability of applying this transformation + """ + + def __init__(self, + mean=(0, 0, 0), + to_rgb=True, + ratio_range=(1, 4), + seg_ignore_label=None, + prob=0.5): + self.to_rgb = to_rgb + self.ratio_range = ratio_range + if to_rgb: + self.mean = mean[::-1] + else: + self.mean = mean + self.min_ratio, self.max_ratio = ratio_range + self.seg_ignore_label = seg_ignore_label + self.prob = prob + + def __call__(self, results): + """Call function to expand images, bounding boxes. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with images, bounding boxes expanded + """ + + if random.uniform(0, 1) > self.prob: + return results + + if 'img_fields' in results: + assert results['img_fields'] == ['img'], \ + 'Only single img_fields is allowed' + img = results['img'] + + h, w, c = img.shape + ratio = random.uniform(self.min_ratio, self.max_ratio) + # speedup expand when meets large image + if np.all(self.mean == self.mean[0]): + expand_img = np.empty((int(h * ratio), int(w * ratio), c), + img.dtype) + expand_img.fill(self.mean[0]) + else: + expand_img = np.full((int(h * ratio), int(w * ratio), c), + self.mean, + dtype=img.dtype) + left = int(random.uniform(0, w * ratio - w)) + top = int(random.uniform(0, h * ratio - h)) + expand_img[top:top + h, left:left + w] = img + + results['img'] = expand_img + # expand bboxes + for key in results.get('bbox_fields', []): + results[key] = results[key] + np.tile( + (left, top), 2).astype(results[key].dtype) + + # expand masks + for key in results.get('mask_fields', []): + results[key] = results[key].expand( + int(h * ratio), int(w * ratio), top, left) + + # expand segs + for key in results.get('seg_fields', []): + gt_seg = results[key] + expand_gt_seg = np.full((int(h * ratio), int(w * ratio)), + self.seg_ignore_label, + dtype=gt_seg.dtype) + expand_gt_seg[top:top + h, left:left + w] = gt_seg + results[key] = expand_gt_seg + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(mean={self.mean}, to_rgb={self.to_rgb}, ' + repr_str += f'ratio_range={self.ratio_range}, ' + repr_str += f'seg_ignore_label={self.seg_ignore_label})' + return repr_str + + +@PIPELINES.register_module() +class MinIoURandomCrop(object): + """Random crop the image & bboxes, the cropped patches have minimum IoU + requirement with original image & bboxes, the IoU threshold is randomly + selected from min_ious. + + Args: + min_ious (tuple): minimum IoU threshold for all intersections with + bounding boxes + min_crop_size (float): minimum crop's size (i.e. h,w := a*h, a*w, + where a >= min_crop_size). + bbox_clip_border (bool, optional): Whether clip the objects outside + the border of the image. Defaults to True. + + Note: + The keys for bboxes, labels and masks should be paired. That is, \ + `gt_bboxes` corresponds to `gt_labels` and `gt_masks`, and \ + `gt_bboxes_ignore` to `gt_labels_ignore` and `gt_masks_ignore`. + """ + + def __init__(self, + min_ious=(0.1, 0.3, 0.5, 0.7, 0.9), + min_crop_size=0.3, + bbox_clip_border=True): + # 1: return ori img + self.min_ious = min_ious + self.sample_mode = (1, *min_ious, 0) + self.min_crop_size = min_crop_size + self.bbox_clip_border = bbox_clip_border + self.bbox2label = { + 'gt_bboxes': 'gt_labels', + 'gt_bboxes_ignore': 'gt_labels_ignore' + } + self.bbox2mask = { + 'gt_bboxes': 'gt_masks', + 'gt_bboxes_ignore': 'gt_masks_ignore' + } + + def __call__(self, results): + """Call function to crop images and bounding boxes with minimum IoU + constraint. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with images and bounding boxes cropped, \ + 'img_shape' key is updated. + """ + + if 'img_fields' in results: + assert results['img_fields'] == ['img'], \ + 'Only single img_fields is allowed' + img = results['img'] + assert 'bbox_fields' in results + boxes = [results[key] for key in results['bbox_fields']] + boxes = np.concatenate(boxes, 0) + h, w, c = img.shape + while True: + mode = random.choice(self.sample_mode) + self.mode = mode + if mode == 1: + return results + + min_iou = mode + for i in range(50): + new_w = random.uniform(self.min_crop_size * w, w) + new_h = random.uniform(self.min_crop_size * h, h) + + # h / w in [0.5, 2] + if new_h / new_w < 0.5 or new_h / new_w > 2: + continue + + left = random.uniform(w - new_w) + top = random.uniform(h - new_h) + + patch = np.array( + (int(left), int(top), int(left + new_w), int(top + new_h))) + # Line or point crop is not allowed + if patch[2] == patch[0] or patch[3] == patch[1]: + continue + overlaps = bbox_overlaps( + patch.reshape(-1, 4), boxes.reshape(-1, 4)).reshape(-1) + if len(overlaps) > 0 and overlaps.min() < min_iou: + continue + + # center of boxes should inside the crop img + # only adjust boxes and instance masks when the gt is not empty + if len(overlaps) > 0: + # adjust boxes + def is_center_of_bboxes_in_patch(boxes, patch): + center = (boxes[:, :2] + boxes[:, 2:]) / 2 + mask = ((center[:, 0] > patch[0]) * + (center[:, 1] > patch[1]) * + (center[:, 0] < patch[2]) * + (center[:, 1] < patch[3])) + return mask + + mask = is_center_of_bboxes_in_patch(boxes, patch) + if not mask.any(): + continue + for key in results.get('bbox_fields', []): + boxes = results[key].copy() + mask = is_center_of_bboxes_in_patch(boxes, patch) + boxes = boxes[mask] + if self.bbox_clip_border: + boxes[:, 2:] = boxes[:, 2:].clip(max=patch[2:]) + boxes[:, :2] = boxes[:, :2].clip(min=patch[:2]) + boxes -= np.tile(patch[:2], 2) + + results[key] = boxes + # labels + label_key = self.bbox2label.get(key) + if label_key in results: + results[label_key] = results[label_key][mask] + + # mask fields + mask_key = self.bbox2mask.get(key) + if mask_key in results: + results[mask_key] = results[mask_key][ + mask.nonzero()[0]].crop(patch) + # adjust the img no matter whether the gt is empty before crop + img = img[patch[1]:patch[3], patch[0]:patch[2]] + results['img'] = img + results['img_shape'] = img.shape + + # seg fields + for key in results.get('seg_fields', []): + results[key] = results[key][patch[1]:patch[3], + patch[0]:patch[2]] + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(min_ious={self.min_ious}, ' + repr_str += f'min_crop_size={self.min_crop_size}, ' + repr_str += f'bbox_clip_border={self.bbox_clip_border})' + return repr_str + + +@PIPELINES.register_module() +class Corrupt(object): + """Corruption augmentation. + + Corruption transforms implemented based on + `imagecorruptions `_. + + Args: + corruption (str): Corruption name. + severity (int, optional): The severity of corruption. Default: 1. + """ + + def __init__(self, corruption, severity=1): + self.corruption = corruption + self.severity = severity + + def __call__(self, results): + """Call function to corrupt image. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with images corrupted. + """ + + if corrupt is None: + raise RuntimeError('imagecorruptions is not installed') + if 'img_fields' in results: + assert results['img_fields'] == ['img'], \ + 'Only single img_fields is allowed' + results['img'] = corrupt( + results['img'].astype(np.uint8), + corruption_name=self.corruption, + severity=self.severity) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(corruption={self.corruption}, ' + repr_str += f'severity={self.severity})' + return repr_str + + +@PIPELINES.register_module() +class Albu(object): + """Albumentation augmentation. + + Adds custom transformations from Albumentations library. + Please, visit `https://albumentations.readthedocs.io` + to get more information. + + An example of ``transforms`` is as followed: + + .. code-block:: + + [ + dict( + type='ShiftScaleRotate', + shift_limit=0.0625, + scale_limit=0.0, + rotate_limit=0, + interpolation=1, + p=0.5), + dict( + type='RandomBrightnessContrast', + brightness_limit=[0.1, 0.3], + contrast_limit=[0.1, 0.3], + p=0.2), + dict(type='ChannelShuffle', p=0.1), + dict( + type='OneOf', + transforms=[ + dict(type='Blur', blur_limit=3, p=1.0), + dict(type='MedianBlur', blur_limit=3, p=1.0) + ], + p=0.1), + ] + + Args: + transforms (list[dict]): A list of albu transformations + bbox_params (dict): Bbox_params for albumentation `Compose` + keymap (dict): Contains {'input key':'albumentation-style key'} + skip_img_without_anno (bool): Whether to skip the image if no ann left + after aug + """ + + def __init__(self, + transforms, + bbox_params=None, + keymap=None, + update_pad_shape=False, + skip_img_without_anno=False): + if Compose is None: + raise RuntimeError('albumentations is not installed') + + self.transforms = transforms + self.filter_lost_elements = False + self.update_pad_shape = update_pad_shape + self.skip_img_without_anno = skip_img_without_anno + + # A simple workaround to remove masks without boxes + if (isinstance(bbox_params, dict) and 'label_fields' in bbox_params + and 'filter_lost_elements' in bbox_params): + self.filter_lost_elements = True + self.origin_label_fields = bbox_params['label_fields'] + bbox_params['label_fields'] = ['idx_mapper'] + del bbox_params['filter_lost_elements'] + + self.bbox_params = ( + self.albu_builder(bbox_params) if bbox_params else None) + self.aug = Compose([self.albu_builder(t) for t in self.transforms], + bbox_params=self.bbox_params) + + if not keymap: + self.keymap_to_albu = { + 'img': 'image', + 'gt_masks': 'masks', + 'gt_bboxes': 'bboxes' + } + else: + self.keymap_to_albu = keymap + self.keymap_back = {v: k for k, v in self.keymap_to_albu.items()} + + def albu_builder(self, cfg): + """Import a module from albumentations. + + It inherits some of :func:`build_from_cfg` logic. + + Args: + cfg (dict): Config dict. It should at least contain the key "type". + + Returns: + obj: The constructed object. + """ + + assert isinstance(cfg, dict) and 'type' in cfg + args = cfg.copy() + + obj_type = args.pop('type') + if mmcv.is_str(obj_type): + if albumentations is None: + raise RuntimeError('albumentations is not installed') + obj_cls = getattr(albumentations, obj_type) + elif inspect.isclass(obj_type): + obj_cls = obj_type + else: + raise TypeError( + f'type must be a str or valid type, but got {type(obj_type)}') + + if 'transforms' in args: + args['transforms'] = [ + self.albu_builder(transform) + for transform in args['transforms'] + ] + + return obj_cls(**args) + + @staticmethod + def mapper(d, keymap): + """Dictionary mapper. Renames keys according to keymap provided. + + Args: + d (dict): old dict + keymap (dict): {'old_key':'new_key'} + Returns: + dict: new dict. + """ + + updated_dict = {} + for k, v in zip(d.keys(), d.values()): + new_k = keymap.get(k, k) + updated_dict[new_k] = d[k] + return updated_dict + + def __call__(self, results): + # dict to albumentations format + results = self.mapper(results, self.keymap_to_albu) + # TODO: add bbox_fields + if 'bboxes' in results: + # to list of boxes + if isinstance(results['bboxes'], np.ndarray): + results['bboxes'] = [x for x in results['bboxes']] + # add pseudo-field for filtration + if self.filter_lost_elements: + results['idx_mapper'] = np.arange(len(results['bboxes'])) + + # TODO: Support mask structure in albu + if 'masks' in results: + if isinstance(results['masks'], PolygonMasks): + raise NotImplementedError( + 'Albu only supports BitMap masks now') + ori_masks = results['masks'] + if albumentations.__version__ < '0.5': + results['masks'] = results['masks'].masks + else: + results['masks'] = [mask for mask in results['masks'].masks] + + results = self.aug(**results) + + if 'bboxes' in results: + if isinstance(results['bboxes'], list): + results['bboxes'] = np.array( + results['bboxes'], dtype=np.float32) + results['bboxes'] = results['bboxes'].reshape(-1, 4) + + # filter label_fields + if self.filter_lost_elements: + + for label in self.origin_label_fields: + results[label] = np.array( + [results[label][i] for i in results['idx_mapper']]) + if 'masks' in results: + results['masks'] = np.array( + [results['masks'][i] for i in results['idx_mapper']]) + results['masks'] = ori_masks.__class__( + results['masks'], results['image'].shape[0], + results['image'].shape[1]) + + if (not len(results['idx_mapper']) + and self.skip_img_without_anno): + return None + + if 'gt_labels' in results: + if isinstance(results['gt_labels'], list): + results['gt_labels'] = np.array(results['gt_labels']) + results['gt_labels'] = results['gt_labels'].astype(np.int64) + + # back to the original format + results = self.mapper(results, self.keymap_back) + + # update final shape + if self.update_pad_shape: + results['pad_shape'] = results['img'].shape + + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + f'(transforms={self.transforms})' + return repr_str + + +@PIPELINES.register_module() +class RandomCenterCropPad(object): + """Random center crop and random around padding for CornerNet. + + This operation generates randomly cropped image from the original image and + pads it simultaneously. Different from :class:`RandomCrop`, the output + shape may not equal to ``crop_size`` strictly. We choose a random value + from ``ratios`` and the output shape could be larger or smaller than + ``crop_size``. The padding operation is also different from :class:`Pad`, + here we use around padding instead of right-bottom padding. + + The relation between output image (padding image) and original image: + + .. code:: text + + output image + + +----------------------------+ + | padded area | + +------|----------------------------|----------+ + | | cropped area | | + | | +---------------+ | | + | | | . center | | | original image + | | | range | | | + | | +---------------+ | | + +------|----------------------------|----------+ + | padded area | + +----------------------------+ + + There are 5 main areas in the figure: + + - output image: output image of this operation, also called padding + image in following instruction. + - original image: input image of this operation. + - padded area: non-intersect area of output image and original image. + - cropped area: the overlap of output image and original image. + - center range: a smaller area where random center chosen from. + center range is computed by ``border`` and original image's shape + to avoid our random center is too close to original image's border. + + Also this operation act differently in train and test mode, the summary + pipeline is listed below. + + Train pipeline: + + 1. Choose a ``random_ratio`` from ``ratios``, the shape of padding image + will be ``random_ratio * crop_size``. + 2. Choose a ``random_center`` in center range. + 3. Generate padding image with center matches the ``random_center``. + 4. Initialize the padding image with pixel value equals to ``mean``. + 5. Copy the cropped area to padding image. + 6. Refine annotations. + + Test pipeline: + + 1. Compute output shape according to ``test_pad_mode``. + 2. Generate padding image with center matches the original image + center. + 3. Initialize the padding image with pixel value equals to ``mean``. + 4. Copy the ``cropped area`` to padding image. + + Args: + crop_size (tuple | None): expected size after crop, final size will + computed according to ratio. Requires (h, w) in train mode, and + None in test mode. + ratios (tuple): random select a ratio from tuple and crop image to + (crop_size[0] * ratio) * (crop_size[1] * ratio). + Only available in train mode. + border (int): max distance from center select area to image border. + Only available in train mode. + mean (sequence): Mean values of 3 channels. + std (sequence): Std values of 3 channels. + to_rgb (bool): Whether to convert the image from BGR to RGB. + test_mode (bool): whether involve random variables in transform. + In train mode, crop_size is fixed, center coords and ratio is + random selected from predefined lists. In test mode, crop_size + is image's original shape, center coords and ratio is fixed. + test_pad_mode (tuple): padding method and padding shape value, only + available in test mode. Default is using 'logical_or' with + 127 as padding shape value. + + - 'logical_or': final_shape = input_shape | padding_shape_value + - 'size_divisor': final_shape = int( + ceil(input_shape / padding_shape_value) * padding_shape_value) + bbox_clip_border (bool, optional): Whether clip the objects outside + the border of the image. Defaults to True. + """ + + def __init__(self, + crop_size=None, + ratios=(0.9, 1.0, 1.1), + border=128, + mean=None, + std=None, + to_rgb=None, + test_mode=False, + test_pad_mode=('logical_or', 127), + bbox_clip_border=True): + if test_mode: + assert crop_size is None, 'crop_size must be None in test mode' + assert ratios is None, 'ratios must be None in test mode' + assert border is None, 'border must be None in test mode' + assert isinstance(test_pad_mode, (list, tuple)) + assert test_pad_mode[0] in ['logical_or', 'size_divisor'] + else: + assert isinstance(crop_size, (list, tuple)) + assert crop_size[0] > 0 and crop_size[1] > 0, ( + 'crop_size must > 0 in train mode') + assert isinstance(ratios, (list, tuple)) + assert test_pad_mode is None, ( + 'test_pad_mode must be None in train mode') + + self.crop_size = crop_size + self.ratios = ratios + self.border = border + # We do not set default value to mean, std and to_rgb because these + # hyper-parameters are easy to forget but could affect the performance. + # Please use the same setting as Normalize for performance assurance. + assert mean is not None and std is not None and to_rgb is not None + self.to_rgb = to_rgb + self.input_mean = mean + self.input_std = std + if to_rgb: + self.mean = mean[::-1] + self.std = std[::-1] + else: + self.mean = mean + self.std = std + self.test_mode = test_mode + self.test_pad_mode = test_pad_mode + self.bbox_clip_border = bbox_clip_border + + def _get_border(self, border, size): + """Get final border for the target size. + + This function generates a ``final_border`` according to image's shape. + The area between ``final_border`` and ``size - final_border`` is the + ``center range``. We randomly choose center from the ``center range`` + to avoid our random center is too close to original image's border. + Also ``center range`` should be larger than 0. + + Args: + border (int): The initial border, default is 128. + size (int): The width or height of original image. + Returns: + int: The final border. + """ + k = 2 * border / size + i = pow(2, np.ceil(np.log2(np.ceil(k))) + (k == int(k))) + return border // i + + def _filter_boxes(self, patch, boxes): + """Check whether the center of each box is in the patch. + + Args: + patch (list[int]): The cropped area, [left, top, right, bottom]. + boxes (numpy array, (N x 4)): Ground truth boxes. + + Returns: + mask (numpy array, (N,)): Each box is inside or outside the patch. + """ + center = (boxes[:, :2] + boxes[:, 2:]) / 2 + mask = (center[:, 0] > patch[0]) * (center[:, 1] > patch[1]) * ( + center[:, 0] < patch[2]) * ( + center[:, 1] < patch[3]) + return mask + + def _crop_image_and_paste(self, image, center, size): + """Crop image with a given center and size, then paste the cropped + image to a blank image with two centers align. + + This function is equivalent to generating a blank image with ``size`` + as its shape. Then cover it on the original image with two centers ( + the center of blank image and the random center of original image) + aligned. The overlap area is paste from the original image and the + outside area is filled with ``mean pixel``. + + Args: + image (np array, H x W x C): Original image. + center (list[int]): Target crop center coord. + size (list[int]): Target crop size. [target_h, target_w] + + Returns: + cropped_img (np array, target_h x target_w x C): Cropped image. + border (np array, 4): The distance of four border of + ``cropped_img`` to the original image area, [top, bottom, + left, right] + patch (list[int]): The cropped area, [left, top, right, bottom]. + """ + center_y, center_x = center + target_h, target_w = size + img_h, img_w, img_c = image.shape + + x0 = max(0, center_x - target_w // 2) + x1 = min(center_x + target_w // 2, img_w) + y0 = max(0, center_y - target_h // 2) + y1 = min(center_y + target_h // 2, img_h) + patch = np.array((int(x0), int(y0), int(x1), int(y1))) + + left, right = center_x - x0, x1 - center_x + top, bottom = center_y - y0, y1 - center_y + + cropped_center_y, cropped_center_x = target_h // 2, target_w // 2 + cropped_img = np.zeros((target_h, target_w, img_c), dtype=image.dtype) + for i in range(img_c): + cropped_img[:, :, i] += self.mean[i] + y_slice = slice(cropped_center_y - top, cropped_center_y + bottom) + x_slice = slice(cropped_center_x - left, cropped_center_x + right) + cropped_img[y_slice, x_slice, :] = image[y0:y1, x0:x1, :] + + border = np.array([ + cropped_center_y - top, cropped_center_y + bottom, + cropped_center_x - left, cropped_center_x + right + ], + dtype=np.float32) + + return cropped_img, border, patch + + def _train_aug(self, results): + """Random crop and around padding the original image. + + Args: + results (dict): Image infomations in the augment pipeline. + + Returns: + results (dict): The updated dict. + """ + img = results['img'] + h, w, c = img.shape + boxes = results['gt_bboxes'] + while True: + scale = random.choice(self.ratios) + new_h = int(self.crop_size[0] * scale) + new_w = int(self.crop_size[1] * scale) + h_border = self._get_border(self.border, h) + w_border = self._get_border(self.border, w) + + for i in range(50): + center_x = random.randint(low=w_border, high=w - w_border) + center_y = random.randint(low=h_border, high=h - h_border) + + cropped_img, border, patch = self._crop_image_and_paste( + img, [center_y, center_x], [new_h, new_w]) + + mask = self._filter_boxes(patch, boxes) + # if image do not have valid bbox, any crop patch is valid. + if not mask.any() and len(boxes) > 0: + continue + + results['img'] = cropped_img + results['img_shape'] = cropped_img.shape + results['pad_shape'] = cropped_img.shape + + x0, y0, x1, y1 = patch + + left_w, top_h = center_x - x0, center_y - y0 + cropped_center_x, cropped_center_y = new_w // 2, new_h // 2 + + # crop bboxes accordingly and clip to the image boundary + for key in results.get('bbox_fields', []): + mask = self._filter_boxes(patch, results[key]) + bboxes = results[key][mask] + bboxes[:, 0:4:2] += cropped_center_x - left_w - x0 + bboxes[:, 1:4:2] += cropped_center_y - top_h - y0 + if self.bbox_clip_border: + bboxes[:, 0:4:2] = np.clip(bboxes[:, 0:4:2], 0, new_w) + bboxes[:, 1:4:2] = np.clip(bboxes[:, 1:4:2], 0, new_h) + keep = (bboxes[:, 2] > bboxes[:, 0]) & ( + bboxes[:, 3] > bboxes[:, 1]) + bboxes = bboxes[keep] + results[key] = bboxes + if key in ['gt_bboxes']: + if 'gt_labels' in results: + labels = results['gt_labels'][mask] + labels = labels[keep] + results['gt_labels'] = labels + if 'gt_masks' in results: + raise NotImplementedError( + 'RandomCenterCropPad only supports bbox.') + + # crop semantic seg + for key in results.get('seg_fields', []): + raise NotImplementedError( + 'RandomCenterCropPad only supports bbox.') + return results + + def _test_aug(self, results): + """Around padding the original image without cropping. + + The padding mode and value are from ``test_pad_mode``. + + Args: + results (dict): Image infomations in the augment pipeline. + + Returns: + results (dict): The updated dict. + """ + img = results['img'] + h, w, c = img.shape + results['img_shape'] = img.shape + if self.test_pad_mode[0] in ['logical_or']: + target_h = h | self.test_pad_mode[1] + target_w = w | self.test_pad_mode[1] + elif self.test_pad_mode[0] in ['size_divisor']: + divisor = self.test_pad_mode[1] + target_h = int(np.ceil(h / divisor)) * divisor + target_w = int(np.ceil(w / divisor)) * divisor + else: + raise NotImplementedError( + 'RandomCenterCropPad only support two testing pad mode:' + 'logical-or and size_divisor.') + + cropped_img, border, _ = self._crop_image_and_paste( + img, [h // 2, w // 2], [target_h, target_w]) + results['img'] = cropped_img + results['pad_shape'] = cropped_img.shape + results['border'] = border + return results + + def __call__(self, results): + img = results['img'] + assert img.dtype == np.float32, ( + 'RandomCenterCropPad needs the input image of dtype np.float32,' + ' please set "to_float32=True" in "LoadImageFromFile" pipeline') + h, w, c = img.shape + assert c == len(self.mean) + if self.test_mode: + return self._test_aug(results) + else: + return self._train_aug(results) + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(crop_size={self.crop_size}, ' + repr_str += f'ratios={self.ratios}, ' + repr_str += f'border={self.border}, ' + repr_str += f'mean={self.input_mean}, ' + repr_str += f'std={self.input_std}, ' + repr_str += f'to_rgb={self.to_rgb}, ' + repr_str += f'test_mode={self.test_mode}, ' + repr_str += f'test_pad_mode={self.test_pad_mode}, ' + repr_str += f'bbox_clip_border={self.bbox_clip_border})' + return repr_str + + +@PIPELINES.register_module() +class CutOut(object): + """CutOut operation. + + Randomly drop some regions of image used in + `Cutout `_. + + Args: + n_holes (int | tuple[int, int]): Number of regions to be dropped. + If it is given as a list, number of holes will be randomly + selected from the closed interval [`n_holes[0]`, `n_holes[1]`]. + cutout_shape (tuple[int, int] | list[tuple[int, int]]): The candidate + shape of dropped regions. It can be `tuple[int, int]` to use a + fixed cutout shape, or `list[tuple[int, int]]` to randomly choose + shape from the list. + cutout_ratio (tuple[float, float] | list[tuple[float, float]]): The + candidate ratio of dropped regions. It can be `tuple[float, float]` + to use a fixed ratio or `list[tuple[float, float]]` to randomly + choose ratio from the list. Please note that `cutout_shape` + and `cutout_ratio` cannot be both given at the same time. + fill_in (tuple[float, float, float] | tuple[int, int, int]): The value + of pixel to fill in the dropped regions. Default: (0, 0, 0). + """ + + def __init__(self, + n_holes, + cutout_shape=None, + cutout_ratio=None, + fill_in=(0, 0, 0)): + + assert (cutout_shape is None) ^ (cutout_ratio is None), \ + 'Either cutout_shape or cutout_ratio should be specified.' + assert (isinstance(cutout_shape, (list, tuple)) + or isinstance(cutout_ratio, (list, tuple))) + if isinstance(n_holes, tuple): + assert len(n_holes) == 2 and 0 <= n_holes[0] < n_holes[1] + else: + n_holes = (n_holes, n_holes) + self.n_holes = n_holes + self.fill_in = fill_in + self.with_ratio = cutout_ratio is not None + self.candidates = cutout_ratio if self.with_ratio else cutout_shape + if not isinstance(self.candidates, list): + self.candidates = [self.candidates] + + def __call__(self, results): + """Call function to drop some regions of image.""" + h, w, c = results['img'].shape + n_holes = np.random.randint(self.n_holes[0], self.n_holes[1] + 1) + for _ in range(n_holes): + x1 = np.random.randint(0, w) + y1 = np.random.randint(0, h) + index = np.random.randint(0, len(self.candidates)) + if not self.with_ratio: + cutout_w, cutout_h = self.candidates[index] + else: + cutout_w = int(self.candidates[index][0] * w) + cutout_h = int(self.candidates[index][1] * h) + + x2 = np.clip(x1 + cutout_w, 0, w) + y2 = np.clip(y1 + cutout_h, 0, h) + results['img'][y1:y2, x1:x2, :] = self.fill_in + + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(n_holes={self.n_holes}, ' + repr_str += (f'cutout_ratio={self.candidates}, ' if self.with_ratio + else f'cutout_shape={self.candidates}, ') + repr_str += f'fill_in={self.fill_in})' + return repr_str diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/__init__.py new file mode 100644 index 00000000..2596aeb2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/__init__.py @@ -0,0 +1,4 @@ +from .distributed_sampler import DistributedSampler +from .group_sampler import DistributedGroupSampler, GroupSampler + +__all__ = ['DistributedSampler', 'DistributedGroupSampler', 'GroupSampler'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/distributed_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/distributed_sampler.py new file mode 100644 index 00000000..a9a1fc0b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/distributed_sampler.py @@ -0,0 +1,32 @@ +import math + +import torch +from torch.utils.data import DistributedSampler as _DistributedSampler + + +class DistributedSampler(_DistributedSampler): + + def __init__(self, dataset, num_replicas=None, rank=None, shuffle=True): + super().__init__(dataset, num_replicas=num_replicas, rank=rank) + self.shuffle = shuffle + + def __iter__(self): + # deterministically shuffle based on epoch + if self.shuffle: + g = torch.Generator() + g.manual_seed(self.epoch) + indices = torch.randperm(len(self.dataset), generator=g).tolist() + else: + indices = torch.arange(len(self.dataset)).tolist() + + # add extra samples to make it evenly divisible + # in case that indices is shorter than half of total_size + indices = (indices * + math.ceil(self.total_size / len(indices)))[:self.total_size] + assert len(indices) == self.total_size + + # subsample + indices = indices[self.rank:self.total_size:self.num_replicas] + assert len(indices) == self.num_samples + + return iter(indices) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/group_sampler.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/group_sampler.py new file mode 100644 index 00000000..a691b949 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/samplers/group_sampler.py @@ -0,0 +1,143 @@ +from __future__ import division +import math + +import numpy as np +import torch +from mmcv.runner import get_dist_info +from torch.utils.data import Sampler + + +class GroupSampler(Sampler): + + def __init__(self, dataset, samples_per_gpu=1): + assert hasattr(dataset, 'flag') + self.dataset = dataset + self.samples_per_gpu = samples_per_gpu + self.flag = dataset.flag.astype(np.int64) + self.group_sizes = np.bincount(self.flag) + self.num_samples = 0 + for i, size in enumerate(self.group_sizes): + self.num_samples += int(np.ceil( + size / self.samples_per_gpu)) * self.samples_per_gpu + + def __iter__(self): + indices = [] + for i, size in enumerate(self.group_sizes): + if size == 0: + continue + indice = np.where(self.flag == i)[0] + assert len(indice) == size + np.random.shuffle(indice) + num_extra = int(np.ceil(size / self.samples_per_gpu) + ) * self.samples_per_gpu - len(indice) + indice = np.concatenate( + [indice, np.random.choice(indice, num_extra)]) + indices.append(indice) + indices = np.concatenate(indices) + indices = [ + indices[i * self.samples_per_gpu:(i + 1) * self.samples_per_gpu] + for i in np.random.permutation( + range(len(indices) // self.samples_per_gpu)) + ] + indices = np.concatenate(indices) + indices = indices.astype(np.int64).tolist() + assert len(indices) == self.num_samples + return iter(indices) + + def __len__(self): + return self.num_samples + + +class DistributedGroupSampler(Sampler): + """Sampler that restricts data loading to a subset of the dataset. + + It is especially useful in conjunction with + :class:`torch.nn.parallel.DistributedDataParallel`. In such case, each + process can pass a DistributedSampler instance as a DataLoader sampler, + and load a subset of the original dataset that is exclusive to it. + + .. note:: + Dataset is assumed to be of constant size. + + Arguments: + dataset: Dataset used for sampling. + num_replicas (optional): Number of processes participating in + distributed training. + rank (optional): Rank of the current process within num_replicas. + """ + + def __init__(self, + dataset, + samples_per_gpu=1, + num_replicas=None, + rank=None): + _rank, _num_replicas = get_dist_info() + if num_replicas is None: + num_replicas = _num_replicas + if rank is None: + rank = _rank + self.dataset = dataset + self.samples_per_gpu = samples_per_gpu + self.num_replicas = num_replicas + self.rank = rank + self.epoch = 0 + + assert hasattr(self.dataset, 'flag') + self.flag = self.dataset.flag + self.group_sizes = np.bincount(self.flag) + + self.num_samples = 0 + for i, j in enumerate(self.group_sizes): + self.num_samples += int( + math.ceil(self.group_sizes[i] * 1.0 / self.samples_per_gpu / + self.num_replicas)) * self.samples_per_gpu + self.total_size = self.num_samples * self.num_replicas + + def __iter__(self): + # deterministically shuffle based on epoch + g = torch.Generator() + g.manual_seed(self.epoch) + + indices = [] + for i, size in enumerate(self.group_sizes): + if size > 0: + indice = np.where(self.flag == i)[0] + assert len(indice) == size + # add .numpy() to avoid bug when selecting indice in parrots. + # TODO: check whether torch.randperm() can be replaced by + # numpy.random.permutation(). + indice = indice[list( + torch.randperm(int(size), generator=g).numpy())].tolist() + extra = int( + math.ceil( + size * 1.0 / self.samples_per_gpu / self.num_replicas) + ) * self.samples_per_gpu * self.num_replicas - len(indice) + # pad indice + tmp = indice.copy() + for _ in range(extra // size): + indice.extend(tmp) + indice.extend(tmp[:extra % size]) + indices.extend(indice) + + assert len(indices) == self.total_size + + indices = [ + indices[j] for i in list( + torch.randperm( + len(indices) // self.samples_per_gpu, generator=g)) + for j in range(i * self.samples_per_gpu, (i + 1) * + self.samples_per_gpu) + ] + + # subsample + offset = self.num_samples * self.rank + indices = indices[offset:offset + self.num_samples] + assert len(indices) == self.num_samples + + return iter(indices) + + def __len__(self): + return self.num_samples + + def set_epoch(self, epoch): + self.epoch = epoch diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/utils.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/utils.py new file mode 100644 index 00000000..9430ee99 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/utils.py @@ -0,0 +1,100 @@ +import copy +import warnings + + +def replace_ImageToTensor(pipelines): + """Replace the ImageToTensor transform in a data pipeline to + DefaultFormatBundle, which is normally useful in batch inference. + + Args: + pipelines (list[dict]): Data pipeline configs. + + Returns: + list: The new pipeline list with all ImageToTensor replaced by + DefaultFormatBundle. + + Examples: + >>> pipelines = [ + ... dict(type='LoadImageFromFile'), + ... dict( + ... type='MultiScaleFlipAug', + ... img_scale=(1333, 800), + ... flip=False, + ... transforms=[ + ... dict(type='Resize', keep_ratio=True), + ... dict(type='RandomFlip'), + ... dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]), + ... dict(type='Pad', size_divisor=32), + ... dict(type='ImageToTensor', keys=['img']), + ... dict(type='Collect', keys=['img']), + ... ]) + ... ] + >>> expected_pipelines = [ + ... dict(type='LoadImageFromFile'), + ... dict( + ... type='MultiScaleFlipAug', + ... img_scale=(1333, 800), + ... flip=False, + ... transforms=[ + ... dict(type='Resize', keep_ratio=True), + ... dict(type='RandomFlip'), + ... dict(type='Normalize', mean=[0, 0, 0], std=[1, 1, 1]), + ... dict(type='Pad', size_divisor=32), + ... dict(type='DefaultFormatBundle'), + ... dict(type='Collect', keys=['img']), + ... ]) + ... ] + >>> assert expected_pipelines == replace_ImageToTensor(pipelines) + """ + pipelines = copy.deepcopy(pipelines) + for i, pipeline in enumerate(pipelines): + if pipeline['type'] == 'MultiScaleFlipAug': + assert 'transforms' in pipeline + pipeline['transforms'] = replace_ImageToTensor( + pipeline['transforms']) + elif pipeline['type'] == 'ImageToTensor': + warnings.warn( + '"ImageToTensor" pipeline is replaced by ' + '"DefaultFormatBundle" for batch inference. It is ' + 'recommended to manually replace it in the test ' + 'data pipeline in your config file.', UserWarning) + pipelines[i] = {'type': 'DefaultFormatBundle'} + return pipelines + + +def get_loading_pipeline(pipeline): + """Only keep loading image and annotations related configuration. + + Args: + pipeline (list[dict]): Data pipeline configs. + + Returns: + list[dict]: The new pipeline list with only keep + loading image and annotations related configuration. + + Examples: + >>> pipelines = [ + ... dict(type='LoadImageFromFile'), + ... dict(type='LoadAnnotations', with_bbox=True), + ... dict(type='Resize', img_scale=(1333, 800), keep_ratio=True), + ... dict(type='RandomFlip', flip_ratio=0.5), + ... dict(type='Normalize', **img_norm_cfg), + ... dict(type='Pad', size_divisor=32), + ... dict(type='DefaultFormatBundle'), + ... dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']) + ... ] + >>> expected_pipelines = [ + ... dict(type='LoadImageFromFile'), + ... dict(type='LoadAnnotations', with_bbox=True) + ... ] + >>> assert expected_pipelines ==\ + ... get_loading_pipeline(pipelines) + """ + loading_pipeline_cfg = [] + for cfg in pipeline: + if cfg['type'].startswith('Load'): + loading_pipeline_cfg.append(cfg) + assert len(loading_pipeline_cfg) == 2, \ + 'The data pipeline in your config file must include ' \ + 'loading image and annotations related pipeline.' + return loading_pipeline_cfg diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/voc.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/voc.py new file mode 100644 index 00000000..abd4cb89 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/voc.py @@ -0,0 +1,93 @@ +from collections import OrderedDict + +from mmcv.utils import print_log + +from mmdet.core import eval_map, eval_recalls +from .builder import DATASETS +from .xml_style import XMLDataset + + +@DATASETS.register_module() +class VOCDataset(XMLDataset): + + CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', + 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', + 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', + 'tvmonitor') + + def __init__(self, **kwargs): + super(VOCDataset, self).__init__(**kwargs) + if 'VOC2007' in self.img_prefix: + self.year = 2007 + elif 'VOC2012' in self.img_prefix: + self.year = 2012 + else: + raise ValueError('Cannot infer dataset year from img_prefix') + + def evaluate(self, + results, + metric='mAP', + logger=None, + proposal_nums=(100, 300, 1000), + iou_thr=0.5, + scale_ranges=None): + """Evaluate in VOC protocol. + + Args: + results (list[list | tuple]): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. Options are + 'mAP', 'recall'. + logger (logging.Logger | str, optional): Logger used for printing + related information during evaluation. Default: None. + proposal_nums (Sequence[int]): Proposal number used for evaluating + recalls, such as recall@100, recall@1000. + Default: (100, 300, 1000). + iou_thr (float | list[float]): IoU threshold. Default: 0.5. + scale_ranges (list[tuple], optional): Scale ranges for evaluating + mAP. If not specified, all bounding boxes would be included in + evaluation. Default: None. + + Returns: + dict[str, float]: AP/recall metrics. + """ + + if not isinstance(metric, str): + assert len(metric) == 1 + metric = metric[0] + allowed_metrics = ['mAP', 'recall'] + if metric not in allowed_metrics: + raise KeyError(f'metric {metric} is not supported') + annotations = [self.get_ann_info(i) for i in range(len(self))] + eval_results = OrderedDict() + iou_thrs = [iou_thr] if isinstance(iou_thr, float) else iou_thr + if metric == 'mAP': + assert isinstance(iou_thrs, list) + if self.year == 2007: + ds_name = 'voc07' + else: + ds_name = self.CLASSES + mean_aps = [] + for iou_thr in iou_thrs: + print_log(f'\n{"-" * 15}iou_thr: {iou_thr}{"-" * 15}') + mean_ap, _ = eval_map( + results, + annotations, + scale_ranges=None, + iou_thr=iou_thr, + dataset=ds_name, + logger=logger) + mean_aps.append(mean_ap) + eval_results[f'AP{int(iou_thr * 100):02d}'] = round(mean_ap, 3) + eval_results['mAP'] = sum(mean_aps) / len(mean_aps) + elif metric == 'recall': + gt_bboxes = [ann['bboxes'] for ann in annotations] + recalls = eval_recalls( + gt_bboxes, results, proposal_nums, iou_thr, logger=logger) + for i, num in enumerate(proposal_nums): + for j, iou in enumerate(iou_thr): + eval_results[f'recall@{num}@{iou}'] = recalls[i, j] + if recalls.shape[1] > 1: + ar = recalls.mean(axis=1) + for i, num in enumerate(proposal_nums): + eval_results[f'AR@{num}'] = ar[i] + return eval_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/wider_face.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/wider_face.py new file mode 100644 index 00000000..3a13907d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/wider_face.py @@ -0,0 +1,51 @@ +import os.path as osp +import xml.etree.ElementTree as ET + +import mmcv + +from .builder import DATASETS +from .xml_style import XMLDataset + + +@DATASETS.register_module() +class WIDERFaceDataset(XMLDataset): + """Reader for the WIDER Face dataset in PASCAL VOC format. + + Conversion scripts can be found in + https://github.com/sovrasov/wider-face-pascal-voc-annotations + """ + CLASSES = ('face', ) + + def __init__(self, **kwargs): + super(WIDERFaceDataset, self).__init__(**kwargs) + + def load_annotations(self, ann_file): + """Load annotation from WIDERFace XML style annotation file. + + Args: + ann_file (str): Path of XML file. + + Returns: + list[dict]: Annotation info from XML file. + """ + + data_infos = [] + img_ids = mmcv.list_from_file(ann_file) + for img_id in img_ids: + filename = f'{img_id}.jpg' + xml_path = osp.join(self.img_prefix, 'Annotations', + f'{img_id}.xml') + tree = ET.parse(xml_path) + root = tree.getroot() + size = root.find('size') + width = int(size.find('width').text) + height = int(size.find('height').text) + folder = root.find('folder').text + data_infos.append( + dict( + id=img_id, + filename=osp.join(folder, filename), + width=width, + height=height)) + + return data_infos diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/xml_style.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/xml_style.py new file mode 100644 index 00000000..b912de38 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/datasets/xml_style.py @@ -0,0 +1,169 @@ +import os.path as osp +import xml.etree.ElementTree as ET + +import mmcv +import numpy as np +from PIL import Image + +from .builder import DATASETS +from .custom import CustomDataset + + +@DATASETS.register_module() +class XMLDataset(CustomDataset): + """XML dataset for detection. + + Args: + min_size (int | float, optional): The minimum size of bounding + boxes in the images. If the size of a bounding box is less than + ``min_size``, it would be add to ignored field. + """ + + def __init__(self, min_size=None, **kwargs): + super(XMLDataset, self).__init__(**kwargs) + self.cat2label = {cat: i for i, cat in enumerate(self.CLASSES)} + self.min_size = min_size + + def load_annotations(self, ann_file): + """Load annotation from XML style ann_file. + + Args: + ann_file (str): Path of XML file. + + Returns: + list[dict]: Annotation info from XML file. + """ + + data_infos = [] + img_ids = mmcv.list_from_file(ann_file) + for img_id in img_ids: + filename = f'JPEGImages/{img_id}.jpg' + xml_path = osp.join(self.img_prefix, 'Annotations', + f'{img_id}.xml') + tree = ET.parse(xml_path) + root = tree.getroot() + size = root.find('size') + width = 0 + height = 0 + if size is not None: + width = int(size.find('width').text) + height = int(size.find('height').text) + else: + img_path = osp.join(self.img_prefix, 'JPEGImages', + '{}.jpg'.format(img_id)) + img = Image.open(img_path) + width, height = img.size + data_infos.append( + dict(id=img_id, filename=filename, width=width, height=height)) + + return data_infos + + def _filter_imgs(self, min_size=32): + """Filter images too small or without annotation.""" + valid_inds = [] + for i, img_info in enumerate(self.data_infos): + if min(img_info['width'], img_info['height']) < min_size: + continue + if self.filter_empty_gt: + img_id = img_info['id'] + xml_path = osp.join(self.img_prefix, 'Annotations', + f'{img_id}.xml') + tree = ET.parse(xml_path) + root = tree.getroot() + for obj in root.findall('object'): + name = obj.find('name').text + if name in self.CLASSES: + valid_inds.append(i) + break + else: + valid_inds.append(i) + return valid_inds + + def get_ann_info(self, idx): + """Get annotation from XML file by index. + + Args: + idx (int): Index of data. + + Returns: + dict: Annotation info of specified index. + """ + + img_id = self.data_infos[idx]['id'] + xml_path = osp.join(self.img_prefix, 'Annotations', f'{img_id}.xml') + tree = ET.parse(xml_path) + root = tree.getroot() + bboxes = [] + labels = [] + bboxes_ignore = [] + labels_ignore = [] + for obj in root.findall('object'): + name = obj.find('name').text + if name not in self.CLASSES: + continue + label = self.cat2label[name] + difficult = int(obj.find('difficult').text) + bnd_box = obj.find('bndbox') + # TODO: check whether it is necessary to use int + # Coordinates may be float type + bbox = [ + int(float(bnd_box.find('xmin').text)), + int(float(bnd_box.find('ymin').text)), + int(float(bnd_box.find('xmax').text)), + int(float(bnd_box.find('ymax').text)) + ] + ignore = False + if self.min_size: + assert not self.test_mode + w = bbox[2] - bbox[0] + h = bbox[3] - bbox[1] + if w < self.min_size or h < self.min_size: + ignore = True + if difficult or ignore: + bboxes_ignore.append(bbox) + labels_ignore.append(label) + else: + bboxes.append(bbox) + labels.append(label) + if not bboxes: + bboxes = np.zeros((0, 4)) + labels = np.zeros((0, )) + else: + bboxes = np.array(bboxes, ndmin=2) - 1 + labels = np.array(labels) + if not bboxes_ignore: + bboxes_ignore = np.zeros((0, 4)) + labels_ignore = np.zeros((0, )) + else: + bboxes_ignore = np.array(bboxes_ignore, ndmin=2) - 1 + labels_ignore = np.array(labels_ignore) + ann = dict( + bboxes=bboxes.astype(np.float32), + labels=labels.astype(np.int64), + bboxes_ignore=bboxes_ignore.astype(np.float32), + labels_ignore=labels_ignore.astype(np.int64)) + return ann + + def get_cat_ids(self, idx): + """Get category ids in XML file by index. + + Args: + idx (int): Index of data. + + Returns: + list[int]: All categories in the image of specified index. + """ + + cat_ids = [] + img_id = self.data_infos[idx]['id'] + xml_path = osp.join(self.img_prefix, 'Annotations', f'{img_id}.xml') + tree = ET.parse(xml_path) + root = tree.getroot() + for obj in root.findall('object'): + name = obj.find('name').text + if name not in self.CLASSES: + continue + label = self.cat2label[name] + cat_ids.append(label) + + return cat_ids diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/__init__.py new file mode 100644 index 00000000..44ac9985 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/__init__.py @@ -0,0 +1,16 @@ +from .backbones import * # noqa: F401,F403 +from .builder import (BACKBONES, DETECTORS, HEADS, LOSSES, NECKS, + ROI_EXTRACTORS, SHARED_HEADS, build_backbone, + build_detector, build_head, build_loss, build_neck, + build_roi_extractor, build_shared_head) +from .dense_heads import * # noqa: F401,F403 +from .detectors import * # noqa: F401,F403 +from .losses import * # noqa: F401,F403 +from .necks import * # noqa: F401,F403 +from .roi_heads import * # noqa: F401,F403 + +__all__ = [ + 'BACKBONES', 'NECKS', 'ROI_EXTRACTORS', 'SHARED_HEADS', 'HEADS', 'LOSSES', + 'DETECTORS', 'build_backbone', 'build_neck', 'build_roi_extractor', + 'build_shared_head', 'build_head', 'build_loss', 'build_detector' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/Conformer.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/Conformer.py new file mode 100644 index 00000000..0e56403c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/Conformer.py @@ -0,0 +1,574 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from functools import partial + +import math +import warnings + +from mmdet.utils import get_root_logger +from mmcv.runner import load_checkpoint +from ..builder import BACKBONES + +_DEFAULT_SCALE_CLAMP = math.log(100000.0 / 16) + +import pdb + +def _no_grad_trunc_normal_(tensor, mean, std, a, b): + # Cut & paste from PyTorch official master until it's in a few official releases - RW + # Method based on https://people.sc.fsu.edu/~jburkardt/presentations/truncated_normal.pdf + def norm_cdf(x): + # Computes standard normal cumulative distribution function + return (1. + math.erf(x / math.sqrt(2.))) / 2. + + if (mean < a - 2 * std) or (mean > b + 2 * std): + warnings.warn("mean is more than 2 std from [a, b] in nn.init.trunc_normal_. " + "The distribution of values may be incorrect.", + stacklevel=2) + + with torch.no_grad(): + # Values are generated by using a truncated uniform distribution and + # then using the inverse CDF for the normal distribution. + # Get upper and lower cdf values + l = norm_cdf((a - mean) / std) + u = norm_cdf((b - mean) / std) + + # Uniformly fill tensor with values from [l, u], then translate to + # [2l-1, 2u-1]. + tensor.uniform_(2 * l - 1, 2 * u - 1) + + # Use inverse cdf transform for normal distribution to get truncated + # standard normal + tensor.erfinv_() + + # Transform to proper mean, std + tensor.mul_(std * math.sqrt(2.)) + tensor.add_(mean) + + # Clamp to ensure it's in the proper range + tensor.clamp_(min=a, max=b) + return tensor + +def trunc_normal_(tensor, mean=0., std=1., a=-2., b=2.): + # type: (Tensor, float, float, float, float) -> Tensor + r"""Fills the input Tensor with values drawn from a truncated + normal distribution. The values are effectively drawn from the + normal distribution :math:`\mathcal{N}(\text{mean}, \text{std}^2)` + with values outside :math:`[a, b]` redrawn until they are within + the bounds. The method used for generating the random values works + best when :math:`a \leq \text{mean} \leq b`. + Args: + tensor: an n-dimensional `torch.Tensor` + mean: the mean of the normal distribution + std: the standard deviation of the normal distribution + a: the minimum cutoff value + b: the maximum cutoff value + Examples: + >>> w = torch.empty(3, 5) + >>> nn.init.trunc_normal_(w) + """ + return _no_grad_trunc_normal_(tensor, mean, std, a, b) + +class DropPath(nn.Module): + """Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). + """ + def __init__(self, drop_prob=None): + super(DropPath, self).__init__() + self.drop_prob = drop_prob + + def forward(self, x): + return self.drop_path(x, self.drop_prob, self.training) + + def drop_path(self, x, drop_prob: float = 0., training: bool = False): + """Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). + + This is the same as the DropConnect impl I created for EfficientNet, etc networks, however, + the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper... + See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for + changing the layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use + 'survival rate' as the argument. + + """ + if drop_prob == 0. or not training: + return x + keep_prob = 1 - drop_prob + shape = (x.shape[0],) + (1,) * (x.ndim - 1) # work with diff dim tensors, not just 2D ConvNets + random_tensor = keep_prob + torch.rand(shape, dtype=x.dtype, device=x.device) + random_tensor.floor_() # binarize + output = x.div(keep_prob) * random_tensor + return output + +class Mlp(nn.Module): + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim // num_heads + # NOTE scale factor was wrong in my original version, can set manually to be compat with prev weights + self.scale = qk_scale or head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class Block(nn.Module): + + def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0., + drop_path=0., act_layer=nn.GELU, norm_layer=partial(nn.LayerNorm, eps=1e-6)): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention( + dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + def forward(self, x): + x = x + self.drop_path(self.attn(self.norm1(x))) + x = x + self.drop_path(self.mlp(self.norm2(x))) + return x + + +class ConvBlock(nn.Module): + + def __init__(self, inplanes, outplanes, stride=1, res_conv=False, act_layer=nn.ReLU, groups=1, + norm_layer=partial(nn.BatchNorm2d, eps=1e-6), drop_block=None, drop_path=None): + super(ConvBlock, self).__init__() + + expansion = 4 + med_planes = outplanes // expansion + + self.conv1 = nn.Conv2d(inplanes, med_planes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn1 = norm_layer(med_planes) + self.act1 = act_layer(inplace=True) + + self.conv2 = nn.Conv2d(med_planes, med_planes, kernel_size=3, stride=stride, groups=groups, padding=1, bias=False) + self.bn2 = norm_layer(med_planes) + self.act2 = act_layer(inplace=True) + + self.conv3 = nn.Conv2d(med_planes, outplanes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn3 = norm_layer(outplanes) + self.act3 = act_layer(inplace=True) + + if res_conv: + self.residual_conv = nn.Conv2d(inplanes, outplanes, kernel_size=1, stride=stride, padding=0, bias=False) + self.residual_bn = norm_layer(outplanes) + + self.res_conv = res_conv + self.drop_block = drop_block + self.drop_path = drop_path + + def zero_init_last_bn(self): + nn.init.zeros_(self.bn3.weight) + + def forward(self, x, x_t=None, return_x_2=True): + residual = x + + x = self.conv1(x) + x = self.bn1(x) + if self.drop_block is not None: + x = self.drop_block(x) + x = self.act1(x) + + x = self.conv2(x) if x_t is None else self.conv2(x + x_t) + x = self.bn2(x) + if self.drop_block is not None: + x = self.drop_block(x) + x2 = self.act2(x) + + x = self.conv3(x2) + x = self.bn3(x) + if self.drop_block is not None: + x = self.drop_block(x) + + if self.drop_path is not None: + x = self.drop_path(x) + + if self.res_conv: + residual = self.residual_conv(residual) + residual = self.residual_bn(residual) + + x += residual + x = self.act3(x) + + if return_x_2: + return x, x2 + else: + return x + + +class FCUDown(nn.Module): + """ CNN feature maps -> Transformer patch embeddings + """ + + def __init__(self, inplanes, outplanes, dw_stride, act_layer=nn.GELU, + norm_layer=partial(nn.LayerNorm, eps=1e-6)): + super(FCUDown, self).__init__() + self.dw_stride = dw_stride + + self.conv_project = nn.Conv2d(inplanes, outplanes, kernel_size=1, stride=1, padding=0) + self.sample_pooling = nn.AvgPool2d(kernel_size=dw_stride, stride=dw_stride) + + self.ln = norm_layer(outplanes) + self.act = act_layer() + + def forward(self, x, x_t): + x = self.conv_project(x) # [N, C, H, W] + + x = self.sample_pooling(x).flatten(2).transpose(1, 2) + x = self.ln(x) + x = self.act(x) + + x = torch.cat([x_t[:, 0][:, None, :], x], dim=1) + + return x + + +class FCUUp(nn.Module): + """ Transformer patch embeddings -> CNN feature maps + """ + + def __init__(self, inplanes, outplanes, up_stride, act_layer=nn.ReLU, + norm_layer=partial(nn.BatchNorm2d, eps=1e-6),): + super(FCUUp, self).__init__() + + self.up_stride = up_stride + self.conv_project = nn.Conv2d(inplanes, outplanes, kernel_size=1, stride=1, padding=0) + self.bn = norm_layer(outplanes) + self.act = act_layer() + + def forward(self, x, H, W): + B, _, C = x.shape + # [N, 197, 384] -> [N, 196, 384] -> [N, 384, 196] -> [N, 384, 14, 14] + x_r = x[:, 1:].transpose(1, 2).reshape(B, C, H, W) + x_r = self.act(self.bn(self.conv_project(x_r))) + + return F.interpolate(x_r, size=(H * self.up_stride, W * self.up_stride)) + + +class Med_ConvBlock(nn.Module): + """ special case for Convblock with down sampling, + """ + def __init__(self, inplanes, act_layer=nn.ReLU, groups=1, norm_layer=partial(nn.BatchNorm2d, eps=1e-6), + drop_block=None, drop_path=None): + + super(Med_ConvBlock, self).__init__() + + expansion = 4 + med_planes = inplanes // expansion + + self.conv1 = nn.Conv2d(inplanes, med_planes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn1 = norm_layer(med_planes) + self.act1 = act_layer(inplace=True) + + self.conv2 = nn.Conv2d(med_planes, med_planes, kernel_size=3, stride=1, groups=groups, padding=1, bias=False) + self.bn2 = norm_layer(med_planes) + self.act2 = act_layer(inplace=True) + + self.conv3 = nn.Conv2d(med_planes, inplanes, kernel_size=1, stride=1, padding=0, bias=False) + self.bn3 = norm_layer(inplanes) + self.act3 = act_layer(inplace=True) + + self.drop_block = drop_block + self.drop_path = drop_path + + def zero_init_last_bn(self): + nn.init.zeros_(self.bn3.weight) + + def forward(self, x): + residual = x + + x = self.conv1(x) + x = self.bn1(x) + if self.drop_block is not None: + x = self.drop_block(x) + x = self.act1(x) + + x = self.conv2(x) + x = self.bn2(x) + if self.drop_block is not None: + x = self.drop_block(x) + x = self.act2(x) + + x = self.conv3(x) + x = self.bn3(x) + if self.drop_block is not None: + x = self.drop_block(x) + + if self.drop_path is not None: + x = self.drop_path(x) + + x += residual + x = self.act3(x) + + return x + + +class ConvTransBlock(nn.Module): + """ + Basic module for Conformer, keep feature maps for CNN block and patch embeddings for transformer encoder block + """ + + def __init__(self, inplanes, outplanes, res_conv, stride, dw_stride, embed_dim, num_heads=12, mlp_ratio=4., + qkv_bias=False, qk_scale=None, drop_rate=0., attn_drop_rate=0., drop_path_rate=0., + last_fusion=False, num_med_block=0, groups=1): + + super(ConvTransBlock, self).__init__() + expansion = 4 + self.cnn_block = ConvBlock(inplanes=inplanes, outplanes=outplanes, res_conv=res_conv, stride=stride, groups=groups) + + if last_fusion: + self.fusion_block = ConvBlock(inplanes=outplanes, outplanes=outplanes, stride=2, res_conv=True, groups=groups) + else: + self.fusion_block = ConvBlock(inplanes=outplanes, outplanes=outplanes, groups=groups) + + if num_med_block > 0: + self.med_block = [] + for i in range(num_med_block): + self.med_block.append(Med_ConvBlock(inplanes=outplanes, groups=groups)) + self.med_block = nn.ModuleList(self.med_block) + + self.squeeze_block = FCUDown(inplanes=outplanes // expansion, outplanes=embed_dim, dw_stride=dw_stride) + + self.expand_block = FCUUp(inplanes=embed_dim, outplanes=outplanes // expansion, up_stride=dw_stride) + + self.trans_block = Block( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=drop_path_rate) + + self.dw_stride = dw_stride + self.embed_dim = embed_dim + self.num_med_block = num_med_block + self.last_fusion = last_fusion + + def forward(self, x, x_t): + x, x2 = self.cnn_block(x) + + _, _, H, W = x2.shape + + x_st = self.squeeze_block(x2, x_t) + + x_t = self.trans_block(x_st + x_t) + + if self.num_med_block > 0: + for m in self.med_block: + x = m(x) + + x_t_r = self.expand_block(x_t, H // self.dw_stride, W // self.dw_stride) + x = self.fusion_block(x, x_t_r, return_x_2=False) + + return x, x_t + +@BACKBONES.register_module() +class Conformer(nn.Module): + """ Vision Transformer with support for patch or hybrid CNN input stage + """ + + def __init__(self, patch_size=16, in_chans=3, num_classes=1000, base_channel=64, channel_ratio=4, num_med_block=0, + embed_dim=768, depth=12, num_heads=12, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop_rate=0., + attn_drop_rate=0., drop_path_rate=0., norm_eval=True, frozen_stages=1, return_cls_token=False): + + # Transformer + super().__init__() + self.num_classes = num_classes + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + self.return_cls_token = return_cls_token + + self.norm_eval = norm_eval + self.frozen_stages = frozen_stages + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) + + self.trans_dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + + # Classifiers + if self.return_cls_token: + self.trans_norm = nn.LayerNorm(embed_dim) + self.trans_cls_head = nn.Linear(embed_dim, num_classes) if num_classes > 0 else nn.Identity() + # self.pooling = nn.AdaptiveAvgPool2d(1) + # self.conv_cls_head = nn.Linear(1024, num_classes) + + # Stem stage: get the feature maps by conv block (copied form resnet.py) + self.conv1 = nn.Conv2d(in_chans, 64, kernel_size=7, stride=2, padding=3, bias=False) # 1 / 2 [112, 112] + self.bn1 = nn.BatchNorm2d(64) + self.act1 = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) # 1 / 4 [56, 56] + + # 1 stage + stage_1_channel = int(base_channel * channel_ratio) + trans_dw_stride = patch_size // 4 + self.conv_1 = ConvBlock(inplanes=64, outplanes=stage_1_channel, res_conv=True, stride=1) + self.trans_patch_conv = nn.Conv2d(64, embed_dim, kernel_size=trans_dw_stride, stride=trans_dw_stride, padding=0) + self.trans_1 = Block(dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, + qk_scale=qk_scale, drop=drop_rate, attn_drop=attn_drop_rate, drop_path=self.trans_dpr[0], + ) + + # 2~4 stage + init_stage = 2 + fin_stage = depth // 3 + 1 + for i in range(init_stage, fin_stage): + self.add_module('conv_trans_' + str(i), + ConvTransBlock( + stage_1_channel, stage_1_channel, False, 1, dw_stride=trans_dw_stride, + embed_dim=embed_dim, + num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop_rate=drop_rate, attn_drop_rate=attn_drop_rate, + drop_path_rate=self.trans_dpr[i - 1], + num_med_block=num_med_block + ) + ) + + stage_2_channel = int(base_channel * channel_ratio * 2) + # 5~8 stage + init_stage = fin_stage # 5 + fin_stage = fin_stage + depth // 3 # 9 + for i in range(init_stage, fin_stage): + s = 2 if i == init_stage else 1 + in_channel = stage_1_channel if i == init_stage else stage_2_channel + res_conv = True if i == init_stage else False + self.add_module('conv_trans_' + str(i), + ConvTransBlock( + in_channel, stage_2_channel, res_conv, s, dw_stride=trans_dw_stride // 2, + embed_dim=embed_dim, + num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop_rate=drop_rate, attn_drop_rate=attn_drop_rate, + drop_path_rate=self.trans_dpr[i - 1], + num_med_block=num_med_block + ) + ) + + stage_3_channel = int(base_channel * channel_ratio * 2 * 2) + # 9~12 stage + init_stage = fin_stage # 9 + fin_stage = fin_stage + depth // 3 # 13 + for i in range(init_stage, fin_stage): + s = 2 if i == init_stage else 1 + in_channel = stage_2_channel if i == init_stage else stage_3_channel + res_conv = True if i == init_stage else False + last_fusion = True if i == depth else False + self.add_module('conv_trans_' + str(i), + ConvTransBlock( + in_channel, stage_3_channel, res_conv, s, dw_stride=trans_dw_stride // 4, + embed_dim=embed_dim, + num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop_rate=drop_rate, attn_drop_rate=attn_drop_rate, + drop_path_rate=self.trans_dpr[i - 1], + num_med_block=num_med_block, last_fusion=last_fusion + ) + ) + self.fin_stage = fin_stage + + trunc_normal_(self.cls_token, std=.02) + + def _init_weights(self, m): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if isinstance(m, nn.Linear) and m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.LayerNorm): + nn.init.constant_(m.bias, 0) + nn.init.constant_(m.weight, 1.0) + elif isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, nn.BatchNorm2d): + nn.init.constant_(m.weight, 1.) + nn.init.constant_(m.bias, 0.) + + def init_weights(self, pretrained=None): + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger, map_location='cpu') + elif pretrained is None: + self.apply(self._init_weights) + else: + raise TypeError('pretrained must be a str or None') + + @torch.jit.ignore + def no_weight_decay(self): + return {'cls_token',} + + def forward(self, x): + output = [] + B = x.shape[0] + cls_tokens = self.cls_token.expand(B, -1, -1) + + # stem + x_base = self.maxpool(self.act1(self.bn1(self.conv1(x)))) + + # 1 stage [N, 64, 56, 56] -> [N, 128, 56, 56] + x = self.conv_1(x_base, return_x_2=False) + x_t = self.trans_patch_conv(x_base).flatten(2).transpose(1, 2) + x_t = torch.cat([cls_tokens, x_t], dim=1) + x_t = self.trans_1(x_t) + + # 2 ~ final + for i in range(2, self.fin_stage): + x, x_t = eval('self.conv_trans_' + str(i))(x, x_t) + if i in [4, 8, 11, 12]: + output.append(x) + + if self.return_cls_token: + return tuple(output), self.trans_cls_head(self.trans_norm(x_t[:, [0,]])) + else: + return tuple(output) + + def _freeze_stages(self): + if self.frozen_stages >= 0: + self.bn1.eval() + for m in [self.conv1, self.bn1]: + for param in m.parameters(): + param.requires_grad = False + + # for i in range(1, self.frozen_stages + 1): + # m = getattr(self, f'layer{i}') + # m.eval() + # for param in m.parameters(): + # param.requires_grad = False + + def freeze_bn(self, m): + if isinstance(m, nn.BatchNorm2d): + m.eval() + + def train(self, mode=True): + """Convert the model into training mode while keep normalization layer + freezed.""" + super(Conformer, self).train(mode) + self._freeze_stages() + if mode and self.norm_eval: + self.apply(self.freeze_bn) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/__init__.py new file mode 100644 index 00000000..33bfa012 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/__init__.py @@ -0,0 +1,18 @@ +from .darknet import Darknet +from .detectors_resnet import DetectoRS_ResNet +from .detectors_resnext import DetectoRS_ResNeXt +from .hourglass import HourglassNet +from .hrnet import HRNet +from .regnet import RegNet +from .res2net import Res2Net +from .resnest import ResNeSt +from .resnet import ResNet, ResNetV1d +from .resnext import ResNeXt +from .ssd_vgg import SSDVGG +from .trident_resnet import TridentResNet +from .Conformer import Conformer +__all__ = [ + 'RegNet', 'ResNet', 'ResNetV1d', 'ResNeXt', 'SSDVGG', 'HRNet', 'Res2Net', + 'HourglassNet', 'DetectoRS_ResNet', 'DetectoRS_ResNeXt', 'Darknet', + 'ResNeSt', 'TridentResNet', 'Conformer' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/darknet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/darknet.py new file mode 100644 index 00000000..517fe262 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/darknet.py @@ -0,0 +1,199 @@ +# Copyright (c) 2019 Western Digital Corporation or its affiliates. + +import logging + +import torch.nn as nn +from mmcv.cnn import ConvModule, constant_init, kaiming_init +from mmcv.runner import load_checkpoint +from torch.nn.modules.batchnorm import _BatchNorm + +from ..builder import BACKBONES + + +class ResBlock(nn.Module): + """The basic residual block used in Darknet. Each ResBlock consists of two + ConvModules and the input is added to the final output. Each ConvModule is + composed of Conv, BN, and LeakyReLU. In YoloV3 paper, the first convLayer + has half of the number of the filters as much as the second convLayer. The + first convLayer has filter size of 1x1 and the second one has the filter + size of 3x3. + + Args: + in_channels (int): The input channels. Must be even. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Dictionary to construct and config norm layer. + Default: dict(type='BN', requires_grad=True) + act_cfg (dict): Config dict for activation layer. + Default: dict(type='LeakyReLU', negative_slope=0.1). + """ + + def __init__(self, + in_channels, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + act_cfg=dict(type='LeakyReLU', negative_slope=0.1)): + super(ResBlock, self).__init__() + assert in_channels % 2 == 0 # ensure the in_channels is even + half_in_channels = in_channels // 2 + + # shortcut + cfg = dict(conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg) + + self.conv1 = ConvModule(in_channels, half_in_channels, 1, **cfg) + self.conv2 = ConvModule( + half_in_channels, in_channels, 3, padding=1, **cfg) + + def forward(self, x): + residual = x + out = self.conv1(x) + out = self.conv2(out) + out = out + residual + + return out + + +@BACKBONES.register_module() +class Darknet(nn.Module): + """Darknet backbone. + + Args: + depth (int): Depth of Darknet. Currently only support 53. + out_indices (Sequence[int]): Output from which stages. + frozen_stages (int): Stages to be frozen (stop grad and set eval mode). + -1 means not freezing any parameters. Default: -1. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Dictionary to construct and config norm layer. + Default: dict(type='BN', requires_grad=True) + act_cfg (dict): Config dict for activation layer. + Default: dict(type='LeakyReLU', negative_slope=0.1). + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + + Example: + >>> from mmdet.models import Darknet + >>> import torch + >>> self = Darknet(depth=53) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 416, 416) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + ... + (1, 256, 52, 52) + (1, 512, 26, 26) + (1, 1024, 13, 13) + """ + + # Dict(depth: (layers, channels)) + arch_settings = { + 53: ((1, 2, 8, 8, 4), ((32, 64), (64, 128), (128, 256), (256, 512), + (512, 1024))) + } + + def __init__(self, + depth=53, + out_indices=(3, 4, 5), + frozen_stages=-1, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + act_cfg=dict(type='LeakyReLU', negative_slope=0.1), + norm_eval=True): + super(Darknet, self).__init__() + if depth not in self.arch_settings: + raise KeyError(f'invalid depth {depth} for darknet') + self.depth = depth + self.out_indices = out_indices + self.frozen_stages = frozen_stages + self.layers, self.channels = self.arch_settings[depth] + + cfg = dict(conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg) + + self.conv1 = ConvModule(3, 32, 3, padding=1, **cfg) + + self.cr_blocks = ['conv1'] + for i, n_layers in enumerate(self.layers): + layer_name = f'conv_res_block{i + 1}' + in_c, out_c = self.channels[i] + self.add_module( + layer_name, + self.make_conv_res_block(in_c, out_c, n_layers, **cfg)) + self.cr_blocks.append(layer_name) + + self.norm_eval = norm_eval + + def forward(self, x): + outs = [] + for i, layer_name in enumerate(self.cr_blocks): + cr_block = getattr(self, layer_name) + x = cr_block(x) + if i in self.out_indices: + outs.append(x) + + return tuple(outs) + + def init_weights(self, pretrained=None): + if isinstance(pretrained, str): + logger = logging.getLogger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, (_BatchNorm, nn.GroupNorm)): + constant_init(m, 1) + + else: + raise TypeError('pretrained must be a str or None') + + def _freeze_stages(self): + if self.frozen_stages >= 0: + for i in range(self.frozen_stages): + m = getattr(self, self.cr_blocks[i]) + m.eval() + for param in m.parameters(): + param.requires_grad = False + + def train(self, mode=True): + super(Darknet, self).train(mode) + self._freeze_stages() + if mode and self.norm_eval: + for m in self.modules(): + if isinstance(m, _BatchNorm): + m.eval() + + @staticmethod + def make_conv_res_block(in_channels, + out_channels, + res_repeat, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + act_cfg=dict(type='LeakyReLU', + negative_slope=0.1)): + """In Darknet backbone, ConvLayer is usually followed by ResBlock. This + function will make that. The Conv layers always have 3x3 filters with + stride=2. The number of the filters in Conv layer is the same as the + out channels of the ResBlock. + + Args: + in_channels (int): The number of input channels. + out_channels (int): The number of output channels. + res_repeat (int): The number of ResBlocks. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Dictionary to construct and config norm layer. + Default: dict(type='BN', requires_grad=True) + act_cfg (dict): Config dict for activation layer. + Default: dict(type='LeakyReLU', negative_slope=0.1). + """ + + cfg = dict(conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg) + + model = nn.Sequential() + model.add_module( + 'conv', + ConvModule( + in_channels, out_channels, 3, stride=2, padding=1, **cfg)) + for idx in range(res_repeat): + model.add_module('res{}'.format(idx), + ResBlock(out_channels, **cfg)) + return model diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnet.py new file mode 100644 index 00000000..324e737d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnet.py @@ -0,0 +1,305 @@ +import torch.nn as nn +import torch.utils.checkpoint as cp +from mmcv.cnn import build_conv_layer, build_norm_layer, constant_init + +from ..builder import BACKBONES +from .resnet import Bottleneck as _Bottleneck +from .resnet import ResNet + + +class Bottleneck(_Bottleneck): + r"""Bottleneck for the ResNet backbone in `DetectoRS + `_. + + This bottleneck allows the users to specify whether to use + SAC (Switchable Atrous Convolution) and RFP (Recursive Feature Pyramid). + + Args: + inplanes (int): The number of input channels. + planes (int): The number of output channels before expansion. + rfp_inplanes (int, optional): The number of channels from RFP. + Default: None. If specified, an additional conv layer will be + added for ``rfp_feat``. Otherwise, the structure is the same as + base class. + sac (dict, optional): Dictionary to construct SAC. Default: None. + """ + expansion = 4 + + def __init__(self, + inplanes, + planes, + rfp_inplanes=None, + sac=None, + **kwargs): + super(Bottleneck, self).__init__(inplanes, planes, **kwargs) + + assert sac is None or isinstance(sac, dict) + self.sac = sac + self.with_sac = sac is not None + if self.with_sac: + self.conv2 = build_conv_layer( + self.sac, + planes, + planes, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + bias=False) + + self.rfp_inplanes = rfp_inplanes + if self.rfp_inplanes: + self.rfp_conv = build_conv_layer( + None, + self.rfp_inplanes, + planes * self.expansion, + 1, + stride=1, + bias=True) + self.init_weights() + + def init_weights(self): + """Initialize the weights.""" + if self.rfp_inplanes: + constant_init(self.rfp_conv, 0) + + def rfp_forward(self, x, rfp_feat): + """The forward function that also takes the RFP features as input.""" + + def _inner_forward(x): + identity = x + + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv1_plugin_names) + + out = self.conv2(out) + out = self.norm2(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv2_plugin_names) + + out = self.conv3(out) + out = self.norm3(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv3_plugin_names) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + if self.rfp_inplanes: + rfp_feat = self.rfp_conv(rfp_feat) + out = out + rfp_feat + + out = self.relu(out) + + return out + + +class ResLayer(nn.Sequential): + """ResLayer to build ResNet style backbone for RPF in detectoRS. + + The difference between this module and base class is that we pass + ``rfp_inplanes`` to the first block. + + Args: + block (nn.Module): block used to build ResLayer. + inplanes (int): inplanes of block. + planes (int): planes of block. + num_blocks (int): number of blocks. + stride (int): stride of the first block. Default: 1 + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottleneck. Default: False + conv_cfg (dict): dictionary to construct and config conv layer. + Default: None + norm_cfg (dict): dictionary to construct and config norm layer. + Default: dict(type='BN') + downsample_first (bool): Downsample at the first block or last block. + False for Hourglass, True for ResNet. Default: True + rfp_inplanes (int, optional): The number of channels from RFP. + Default: None. If specified, an additional conv layer will be + added for ``rfp_feat``. Otherwise, the structure is the same as + base class. + """ + + def __init__(self, + block, + inplanes, + planes, + num_blocks, + stride=1, + avg_down=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + downsample_first=True, + rfp_inplanes=None, + **kwargs): + self.block = block + assert downsample_first, f'downsampel_first={downsample_first} is ' \ + 'not supported in DetectoRS' + + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = [] + conv_stride = stride + if avg_down and stride != 1: + conv_stride = 1 + downsample.append( + nn.AvgPool2d( + kernel_size=stride, + stride=stride, + ceil_mode=True, + count_include_pad=False)) + downsample.extend([ + build_conv_layer( + conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=conv_stride, + bias=False), + build_norm_layer(norm_cfg, planes * block.expansion)[1] + ]) + downsample = nn.Sequential(*downsample) + + layers = [] + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=stride, + downsample=downsample, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + rfp_inplanes=rfp_inplanes, + **kwargs)) + inplanes = planes * block.expansion + for _ in range(1, num_blocks): + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + + super(ResLayer, self).__init__(*layers) + + +@BACKBONES.register_module() +class DetectoRS_ResNet(ResNet): + """ResNet backbone for DetectoRS. + + Args: + sac (dict, optional): Dictionary to construct SAC (Switchable Atrous + Convolution). Default: None. + stage_with_sac (list): Which stage to use sac. Default: (False, False, + False, False). + rfp_inplanes (int, optional): The number of channels from RFP. + Default: None. If specified, an additional conv layer will be + added for ``rfp_feat``. Otherwise, the structure is the same as + base class. + output_img (bool): If ``True``, the input image will be inserted into + the starting position of output. Default: False. + pretrained (str, optional): The pretrained model to load. + """ + + arch_settings = { + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)) + } + + def __init__(self, + sac=None, + stage_with_sac=(False, False, False, False), + rfp_inplanes=None, + output_img=False, + pretrained=None, + **kwargs): + self.sac = sac + self.stage_with_sac = stage_with_sac + self.rfp_inplanes = rfp_inplanes + self.output_img = output_img + self.pretrained = pretrained + super(DetectoRS_ResNet, self).__init__(**kwargs) + + self.inplanes = self.stem_channels + self.res_layers = [] + for i, num_blocks in enumerate(self.stage_blocks): + stride = self.strides[i] + dilation = self.dilations[i] + dcn = self.dcn if self.stage_with_dcn[i] else None + sac = self.sac if self.stage_with_sac[i] else None + if self.plugins is not None: + stage_plugins = self.make_stage_plugins(self.plugins, i) + else: + stage_plugins = None + planes = self.base_channels * 2**i + res_layer = self.make_res_layer( + block=self.block, + inplanes=self.inplanes, + planes=planes, + num_blocks=num_blocks, + stride=stride, + dilation=dilation, + style=self.style, + avg_down=self.avg_down, + with_cp=self.with_cp, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + dcn=dcn, + sac=sac, + rfp_inplanes=rfp_inplanes if i > 0 else None, + plugins=stage_plugins) + self.inplanes = planes * self.block.expansion + layer_name = f'layer{i + 1}' + self.add_module(layer_name, res_layer) + self.res_layers.append(layer_name) + + self._freeze_stages() + + def make_res_layer(self, **kwargs): + """Pack all blocks in a stage into a ``ResLayer`` for DetectoRS.""" + return ResLayer(**kwargs) + + def forward(self, x): + """Forward function.""" + outs = list(super(DetectoRS_ResNet, self).forward(x)) + if self.output_img: + outs.insert(0, x) + return tuple(outs) + + def rfp_forward(self, x, rfp_feats): + """Forward function for RFP.""" + if self.deep_stem: + x = self.stem(x) + else: + x = self.conv1(x) + x = self.norm1(x) + x = self.relu(x) + x = self.maxpool(x) + outs = [] + for i, layer_name in enumerate(self.res_layers): + res_layer = getattr(self, layer_name) + rfp_feat = rfp_feats[i] if i > 0 else None + for layer in res_layer: + x = layer.rfp_forward(x, rfp_feat) + if i in self.out_indices: + outs.append(x) + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnext.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnext.py new file mode 100644 index 00000000..57d032fe --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/detectors_resnext.py @@ -0,0 +1,122 @@ +import math + +from mmcv.cnn import build_conv_layer, build_norm_layer + +from ..builder import BACKBONES +from .detectors_resnet import Bottleneck as _Bottleneck +from .detectors_resnet import DetectoRS_ResNet + + +class Bottleneck(_Bottleneck): + expansion = 4 + + def __init__(self, + inplanes, + planes, + groups=1, + base_width=4, + base_channels=64, + **kwargs): + """Bottleneck block for ResNeXt. + + If style is "pytorch", the stride-two layer is the 3x3 conv layer, if + it is "caffe", the stride-two layer is the first 1x1 conv layer. + """ + super(Bottleneck, self).__init__(inplanes, planes, **kwargs) + + if groups == 1: + width = self.planes + else: + width = math.floor(self.planes * + (base_width / base_channels)) * groups + + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, width, postfix=1) + self.norm2_name, norm2 = build_norm_layer( + self.norm_cfg, width, postfix=2) + self.norm3_name, norm3 = build_norm_layer( + self.norm_cfg, self.planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + self.conv_cfg, + self.inplanes, + width, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + fallback_on_stride = False + self.with_modulated_dcn = False + if self.with_dcn: + fallback_on_stride = self.dcn.pop('fallback_on_stride', False) + if self.with_sac: + self.conv2 = build_conv_layer( + self.sac, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + elif not self.with_dcn or fallback_on_stride: + self.conv2 = build_conv_layer( + self.conv_cfg, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + else: + assert self.conv_cfg is None, 'conv_cfg must be None for DCN' + self.conv2 = build_conv_layer( + self.dcn, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.conv3 = build_conv_layer( + self.conv_cfg, + width, + self.planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + +@BACKBONES.register_module() +class DetectoRS_ResNeXt(DetectoRS_ResNet): + """ResNeXt backbone for DetectoRS. + + Args: + groups (int): The number of groups in ResNeXt. + base_width (int): The base width of ResNeXt. + """ + + arch_settings = { + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)) + } + + def __init__(self, groups=1, base_width=4, **kwargs): + self.groups = groups + self.base_width = base_width + super(DetectoRS_ResNeXt, self).__init__(**kwargs) + + def make_res_layer(self, **kwargs): + return super().make_res_layer( + groups=self.groups, + base_width=self.base_width, + base_channels=self.base_channels, + **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hourglass.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hourglass.py new file mode 100644 index 00000000..3422acee --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hourglass.py @@ -0,0 +1,198 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule + +from ..builder import BACKBONES +from ..utils import ResLayer +from .resnet import BasicBlock + + +class HourglassModule(nn.Module): + """Hourglass Module for HourglassNet backbone. + + Generate module recursively and use BasicBlock as the base unit. + + Args: + depth (int): Depth of current HourglassModule. + stage_channels (list[int]): Feature channels of sub-modules in current + and follow-up HourglassModule. + stage_blocks (list[int]): Number of sub-modules stacked in current and + follow-up HourglassModule. + norm_cfg (dict): Dictionary to construct and config norm layer. + """ + + def __init__(self, + depth, + stage_channels, + stage_blocks, + norm_cfg=dict(type='BN', requires_grad=True)): + super(HourglassModule, self).__init__() + + self.depth = depth + + cur_block = stage_blocks[0] + next_block = stage_blocks[1] + + cur_channel = stage_channels[0] + next_channel = stage_channels[1] + + self.up1 = ResLayer( + BasicBlock, cur_channel, cur_channel, cur_block, norm_cfg=norm_cfg) + + self.low1 = ResLayer( + BasicBlock, + cur_channel, + next_channel, + cur_block, + stride=2, + norm_cfg=norm_cfg) + + if self.depth > 1: + self.low2 = HourglassModule(depth - 1, stage_channels[1:], + stage_blocks[1:]) + else: + self.low2 = ResLayer( + BasicBlock, + next_channel, + next_channel, + next_block, + norm_cfg=norm_cfg) + + self.low3 = ResLayer( + BasicBlock, + next_channel, + cur_channel, + cur_block, + norm_cfg=norm_cfg, + downsample_first=False) + + self.up2 = nn.Upsample(scale_factor=2) + + def forward(self, x): + """Forward function.""" + up1 = self.up1(x) + low1 = self.low1(x) + low2 = self.low2(low1) + low3 = self.low3(low2) + up2 = self.up2(low3) + return up1 + up2 + + +@BACKBONES.register_module() +class HourglassNet(nn.Module): + """HourglassNet backbone. + + Stacked Hourglass Networks for Human Pose Estimation. + More details can be found in the `paper + `_ . + + Args: + downsample_times (int): Downsample times in a HourglassModule. + num_stacks (int): Number of HourglassModule modules stacked, + 1 for Hourglass-52, 2 for Hourglass-104. + stage_channels (list[int]): Feature channel of each sub-module in a + HourglassModule. + stage_blocks (list[int]): Number of sub-modules stacked in a + HourglassModule. + feat_channel (int): Feature channel of conv after a HourglassModule. + norm_cfg (dict): Dictionary to construct and config norm layer. + + Example: + >>> from mmdet.models import HourglassNet + >>> import torch + >>> self = HourglassNet() + >>> self.eval() + >>> inputs = torch.rand(1, 3, 511, 511) + >>> level_outputs = self.forward(inputs) + >>> for level_output in level_outputs: + ... print(tuple(level_output.shape)) + (1, 256, 128, 128) + (1, 256, 128, 128) + """ + + def __init__(self, + downsample_times=5, + num_stacks=2, + stage_channels=(256, 256, 384, 384, 384, 512), + stage_blocks=(2, 2, 2, 2, 2, 4), + feat_channel=256, + norm_cfg=dict(type='BN', requires_grad=True)): + super(HourglassNet, self).__init__() + + self.num_stacks = num_stacks + assert self.num_stacks >= 1 + assert len(stage_channels) == len(stage_blocks) + assert len(stage_channels) > downsample_times + + cur_channel = stage_channels[0] + + self.stem = nn.Sequential( + ConvModule(3, 128, 7, padding=3, stride=2, norm_cfg=norm_cfg), + ResLayer(BasicBlock, 128, 256, 1, stride=2, norm_cfg=norm_cfg)) + + self.hourglass_modules = nn.ModuleList([ + HourglassModule(downsample_times, stage_channels, stage_blocks) + for _ in range(num_stacks) + ]) + + self.inters = ResLayer( + BasicBlock, + cur_channel, + cur_channel, + num_stacks - 1, + norm_cfg=norm_cfg) + + self.conv1x1s = nn.ModuleList([ + ConvModule( + cur_channel, cur_channel, 1, norm_cfg=norm_cfg, act_cfg=None) + for _ in range(num_stacks - 1) + ]) + + self.out_convs = nn.ModuleList([ + ConvModule( + cur_channel, feat_channel, 3, padding=1, norm_cfg=norm_cfg) + for _ in range(num_stacks) + ]) + + self.remap_convs = nn.ModuleList([ + ConvModule( + feat_channel, cur_channel, 1, norm_cfg=norm_cfg, act_cfg=None) + for _ in range(num_stacks - 1) + ]) + + self.relu = nn.ReLU(inplace=True) + + def init_weights(self, pretrained=None): + """Init module weights. + + We do nothing in this function because all modules we used + (ConvModule, BasicBlock and etc.) have default initialization, and + currently we don't provide pretrained model of HourglassNet. + + Detector's __init__() will call backbone's init_weights() with + pretrained as input, so we keep this function. + """ + # Training Centripetal Model needs to reset parameters for Conv2d + for m in self.modules(): + if isinstance(m, nn.Conv2d): + m.reset_parameters() + + def forward(self, x): + """Forward function.""" + inter_feat = self.stem(x) + out_feats = [] + + for ind in range(self.num_stacks): + single_hourglass = self.hourglass_modules[ind] + out_conv = self.out_convs[ind] + + hourglass_feat = single_hourglass(inter_feat) + out_feat = out_conv(hourglass_feat) + out_feats.append(out_feat) + + if ind < self.num_stacks - 1: + inter_feat = self.conv1x1s[ind]( + inter_feat) + self.remap_convs[ind]( + out_feat) + inter_feat = self.inters[ind](self.relu(inter_feat)) + + return out_feats diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hrnet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hrnet.py new file mode 100644 index 00000000..1ecc79f1 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/hrnet.py @@ -0,0 +1,537 @@ +import torch.nn as nn +from mmcv.cnn import (build_conv_layer, build_norm_layer, constant_init, + kaiming_init) +from mmcv.runner import load_checkpoint +from torch.nn.modules.batchnorm import _BatchNorm + +from mmdet.utils import get_root_logger +from ..builder import BACKBONES +from .resnet import BasicBlock, Bottleneck + + +class HRModule(nn.Module): + """High-Resolution Module for HRNet. + + In this module, every branch has 4 BasicBlocks/Bottlenecks. Fusion/Exchange + is in this module. + """ + + def __init__(self, + num_branches, + blocks, + num_blocks, + in_channels, + num_channels, + multiscale_output=True, + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN')): + super(HRModule, self).__init__() + self._check_branches(num_branches, num_blocks, in_channels, + num_channels) + + self.in_channels = in_channels + self.num_branches = num_branches + + self.multiscale_output = multiscale_output + self.norm_cfg = norm_cfg + self.conv_cfg = conv_cfg + self.with_cp = with_cp + self.branches = self._make_branches(num_branches, blocks, num_blocks, + num_channels) + self.fuse_layers = self._make_fuse_layers() + self.relu = nn.ReLU(inplace=False) + + def _check_branches(self, num_branches, num_blocks, in_channels, + num_channels): + if num_branches != len(num_blocks): + error_msg = f'NUM_BRANCHES({num_branches}) ' \ + f'!= NUM_BLOCKS({len(num_blocks)})' + raise ValueError(error_msg) + + if num_branches != len(num_channels): + error_msg = f'NUM_BRANCHES({num_branches}) ' \ + f'!= NUM_CHANNELS({len(num_channels)})' + raise ValueError(error_msg) + + if num_branches != len(in_channels): + error_msg = f'NUM_BRANCHES({num_branches}) ' \ + f'!= NUM_INCHANNELS({len(in_channels)})' + raise ValueError(error_msg) + + def _make_one_branch(self, + branch_index, + block, + num_blocks, + num_channels, + stride=1): + downsample = None + if stride != 1 or \ + self.in_channels[branch_index] != \ + num_channels[branch_index] * block.expansion: + downsample = nn.Sequential( + build_conv_layer( + self.conv_cfg, + self.in_channels[branch_index], + num_channels[branch_index] * block.expansion, + kernel_size=1, + stride=stride, + bias=False), + build_norm_layer(self.norm_cfg, num_channels[branch_index] * + block.expansion)[1]) + + layers = [] + layers.append( + block( + self.in_channels[branch_index], + num_channels[branch_index], + stride, + downsample=downsample, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + self.in_channels[branch_index] = \ + num_channels[branch_index] * block.expansion + for i in range(1, num_blocks[branch_index]): + layers.append( + block( + self.in_channels[branch_index], + num_channels[branch_index], + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + + return nn.Sequential(*layers) + + def _make_branches(self, num_branches, block, num_blocks, num_channels): + branches = [] + + for i in range(num_branches): + branches.append( + self._make_one_branch(i, block, num_blocks, num_channels)) + + return nn.ModuleList(branches) + + def _make_fuse_layers(self): + if self.num_branches == 1: + return None + + num_branches = self.num_branches + in_channels = self.in_channels + fuse_layers = [] + num_out_branches = num_branches if self.multiscale_output else 1 + for i in range(num_out_branches): + fuse_layer = [] + for j in range(num_branches): + if j > i: + fuse_layer.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels[j], + in_channels[i], + kernel_size=1, + stride=1, + padding=0, + bias=False), + build_norm_layer(self.norm_cfg, in_channels[i])[1], + nn.Upsample( + scale_factor=2**(j - i), mode='nearest'))) + elif j == i: + fuse_layer.append(None) + else: + conv_downsamples = [] + for k in range(i - j): + if k == i - j - 1: + conv_downsamples.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels[j], + in_channels[i], + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, + in_channels[i])[1])) + else: + conv_downsamples.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels[j], + in_channels[j], + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, + in_channels[j])[1], + nn.ReLU(inplace=False))) + fuse_layer.append(nn.Sequential(*conv_downsamples)) + fuse_layers.append(nn.ModuleList(fuse_layer)) + + return nn.ModuleList(fuse_layers) + + def forward(self, x): + """Forward function.""" + if self.num_branches == 1: + return [self.branches[0](x[0])] + + for i in range(self.num_branches): + x[i] = self.branches[i](x[i]) + + x_fuse = [] + for i in range(len(self.fuse_layers)): + y = 0 + for j in range(self.num_branches): + if i == j: + y += x[j] + else: + y += self.fuse_layers[i][j](x[j]) + x_fuse.append(self.relu(y)) + return x_fuse + + +@BACKBONES.register_module() +class HRNet(nn.Module): + """HRNet backbone. + + High-Resolution Representations for Labeling Pixels and Regions + arXiv: https://arxiv.org/abs/1904.04514 + + Args: + extra (dict): detailed configuration for each stage of HRNet. + in_channels (int): Number of input image channels. Default: 3. + conv_cfg (dict): dictionary to construct and config conv layer. + norm_cfg (dict): dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmdet.models import HRNet + >>> import torch + >>> extra = dict( + >>> stage1=dict( + >>> num_modules=1, + >>> num_branches=1, + >>> block='BOTTLENECK', + >>> num_blocks=(4, ), + >>> num_channels=(64, )), + >>> stage2=dict( + >>> num_modules=1, + >>> num_branches=2, + >>> block='BASIC', + >>> num_blocks=(4, 4), + >>> num_channels=(32, 64)), + >>> stage3=dict( + >>> num_modules=4, + >>> num_branches=3, + >>> block='BASIC', + >>> num_blocks=(4, 4, 4), + >>> num_channels=(32, 64, 128)), + >>> stage4=dict( + >>> num_modules=3, + >>> num_branches=4, + >>> block='BASIC', + >>> num_blocks=(4, 4, 4, 4), + >>> num_channels=(32, 64, 128, 256))) + >>> self = HRNet(extra, in_channels=1) + >>> self.eval() + >>> inputs = torch.rand(1, 1, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 32, 8, 8) + (1, 64, 4, 4) + (1, 128, 2, 2) + (1, 256, 1, 1) + """ + + blocks_dict = {'BASIC': BasicBlock, 'BOTTLENECK': Bottleneck} + + def __init__(self, + extra, + in_channels=3, + conv_cfg=None, + norm_cfg=dict(type='BN'), + norm_eval=True, + with_cp=False, + zero_init_residual=False): + super(HRNet, self).__init__() + self.extra = extra + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.norm_eval = norm_eval + self.with_cp = with_cp + self.zero_init_residual = zero_init_residual + + # stem net + self.norm1_name, norm1 = build_norm_layer(self.norm_cfg, 64, postfix=1) + self.norm2_name, norm2 = build_norm_layer(self.norm_cfg, 64, postfix=2) + + self.conv1 = build_conv_layer( + self.conv_cfg, + in_channels, + 64, + kernel_size=3, + stride=2, + padding=1, + bias=False) + + self.add_module(self.norm1_name, norm1) + self.conv2 = build_conv_layer( + self.conv_cfg, + 64, + 64, + kernel_size=3, + stride=2, + padding=1, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.relu = nn.ReLU(inplace=True) + + # stage 1 + self.stage1_cfg = self.extra['stage1'] + num_channels = self.stage1_cfg['num_channels'][0] + block_type = self.stage1_cfg['block'] + num_blocks = self.stage1_cfg['num_blocks'][0] + + block = self.blocks_dict[block_type] + stage1_out_channels = num_channels * block.expansion + self.layer1 = self._make_layer(block, 64, num_channels, num_blocks) + + # stage 2 + self.stage2_cfg = self.extra['stage2'] + num_channels = self.stage2_cfg['num_channels'] + block_type = self.stage2_cfg['block'] + + block = self.blocks_dict[block_type] + num_channels = [channel * block.expansion for channel in num_channels] + self.transition1 = self._make_transition_layer([stage1_out_channels], + num_channels) + self.stage2, pre_stage_channels = self._make_stage( + self.stage2_cfg, num_channels) + + # stage 3 + self.stage3_cfg = self.extra['stage3'] + num_channels = self.stage3_cfg['num_channels'] + block_type = self.stage3_cfg['block'] + + block = self.blocks_dict[block_type] + num_channels = [channel * block.expansion for channel in num_channels] + self.transition2 = self._make_transition_layer(pre_stage_channels, + num_channels) + self.stage3, pre_stage_channels = self._make_stage( + self.stage3_cfg, num_channels) + + # stage 4 + self.stage4_cfg = self.extra['stage4'] + num_channels = self.stage4_cfg['num_channels'] + block_type = self.stage4_cfg['block'] + + block = self.blocks_dict[block_type] + num_channels = [channel * block.expansion for channel in num_channels] + self.transition3 = self._make_transition_layer(pre_stage_channels, + num_channels) + self.stage4, pre_stage_channels = self._make_stage( + self.stage4_cfg, num_channels) + + @property + def norm1(self): + """nn.Module: the normalization layer named "norm1" """ + return getattr(self, self.norm1_name) + + @property + def norm2(self): + """nn.Module: the normalization layer named "norm2" """ + return getattr(self, self.norm2_name) + + def _make_transition_layer(self, num_channels_pre_layer, + num_channels_cur_layer): + num_branches_cur = len(num_channels_cur_layer) + num_branches_pre = len(num_channels_pre_layer) + + transition_layers = [] + for i in range(num_branches_cur): + if i < num_branches_pre: + if num_channels_cur_layer[i] != num_channels_pre_layer[i]: + transition_layers.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + num_channels_pre_layer[i], + num_channels_cur_layer[i], + kernel_size=3, + stride=1, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, + num_channels_cur_layer[i])[1], + nn.ReLU(inplace=True))) + else: + transition_layers.append(None) + else: + conv_downsamples = [] + for j in range(i + 1 - num_branches_pre): + in_channels = num_channels_pre_layer[-1] + out_channels = num_channels_cur_layer[i] \ + if j == i - num_branches_pre else in_channels + conv_downsamples.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels, + out_channels, + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, out_channels)[1], + nn.ReLU(inplace=True))) + transition_layers.append(nn.Sequential(*conv_downsamples)) + + return nn.ModuleList(transition_layers) + + def _make_layer(self, block, inplanes, planes, blocks, stride=1): + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = nn.Sequential( + build_conv_layer( + self.conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=stride, + bias=False), + build_norm_layer(self.norm_cfg, planes * block.expansion)[1]) + + layers = [] + layers.append( + block( + inplanes, + planes, + stride, + downsample=downsample, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append( + block( + inplanes, + planes, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + + return nn.Sequential(*layers) + + def _make_stage(self, layer_config, in_channels, multiscale_output=True): + num_modules = layer_config['num_modules'] + num_branches = layer_config['num_branches'] + num_blocks = layer_config['num_blocks'] + num_channels = layer_config['num_channels'] + block = self.blocks_dict[layer_config['block']] + + hr_modules = [] + for i in range(num_modules): + # multi_scale_output is only used for the last module + if not multiscale_output and i == num_modules - 1: + reset_multiscale_output = False + else: + reset_multiscale_output = True + + hr_modules.append( + HRModule( + num_branches, + block, + num_blocks, + in_channels, + num_channels, + reset_multiscale_output, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + + return nn.Sequential(*hr_modules), in_channels + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, (_BatchNorm, nn.GroupNorm)): + constant_init(m, 1) + + if self.zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + constant_init(m.norm3, 0) + elif isinstance(m, BasicBlock): + constant_init(m.norm2, 0) + else: + raise TypeError('pretrained must be a str or None') + + def forward(self, x): + """Forward function.""" + x = self.conv1(x) + x = self.norm1(x) + x = self.relu(x) + x = self.conv2(x) + x = self.norm2(x) + x = self.relu(x) + x = self.layer1(x) + + x_list = [] + for i in range(self.stage2_cfg['num_branches']): + if self.transition1[i] is not None: + x_list.append(self.transition1[i](x)) + else: + x_list.append(x) + y_list = self.stage2(x_list) + + x_list = [] + for i in range(self.stage3_cfg['num_branches']): + if self.transition2[i] is not None: + x_list.append(self.transition2[i](y_list[-1])) + else: + x_list.append(y_list[i]) + y_list = self.stage3(x_list) + + x_list = [] + for i in range(self.stage4_cfg['num_branches']): + if self.transition3[i] is not None: + x_list.append(self.transition3[i](y_list[-1])) + else: + x_list.append(y_list[i]) + y_list = self.stage4(x_list) + + return y_list + + def train(self, mode=True): + """Convert the model into training mode whill keeping the normalization + layer freezed.""" + super(HRNet, self).train(mode) + if mode and self.norm_eval: + for m in self.modules(): + # trick: eval have effect on BatchNorm only + if isinstance(m, _BatchNorm): + m.eval() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/regnet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/regnet.py new file mode 100644 index 00000000..b786a3f8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/regnet.py @@ -0,0 +1,325 @@ +import numpy as np +import torch.nn as nn +from mmcv.cnn import build_conv_layer, build_norm_layer + +from ..builder import BACKBONES +from .resnet import ResNet +from .resnext import Bottleneck + + +@BACKBONES.register_module() +class RegNet(ResNet): + """RegNet backbone. + + More details can be found in `paper `_ . + + Args: + arch (dict): The parameter of RegNets. + + - w0 (int): initial width + - wa (float): slope of width + - wm (float): quantization parameter to quantize the width + - depth (int): depth of the backbone + - group_w (int): width of group + - bot_mul (float): bottleneck ratio, i.e. expansion of bottlneck. + strides (Sequence[int]): Strides of the first block of each stage. + base_channels (int): Base channels after stem layer. + in_channels (int): Number of input image channels. Default: 3. + dilations (Sequence[int]): Dilation of each stage. + out_indices (Sequence[int]): Output from which stages. + style (str): `pytorch` or `caffe`. If set to "pytorch", the stride-two + layer is the 3x3 conv layer, otherwise the stride-two layer is + the first 1x1 conv layer. + frozen_stages (int): Stages to be frozen (all param fixed). -1 means + not freezing any parameters. + norm_cfg (dict): dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmdet.models import RegNet + >>> import torch + >>> self = RegNet( + arch=dict( + w0=88, + wa=26.31, + wm=2.25, + group_w=48, + depth=25, + bot_mul=1.0)) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 96, 8, 8) + (1, 192, 4, 4) + (1, 432, 2, 2) + (1, 1008, 1, 1) + """ + arch_settings = { + 'regnetx_400mf': + dict(w0=24, wa=24.48, wm=2.54, group_w=16, depth=22, bot_mul=1.0), + 'regnetx_800mf': + dict(w0=56, wa=35.73, wm=2.28, group_w=16, depth=16, bot_mul=1.0), + 'regnetx_1.6gf': + dict(w0=80, wa=34.01, wm=2.25, group_w=24, depth=18, bot_mul=1.0), + 'regnetx_3.2gf': + dict(w0=88, wa=26.31, wm=2.25, group_w=48, depth=25, bot_mul=1.0), + 'regnetx_4.0gf': + dict(w0=96, wa=38.65, wm=2.43, group_w=40, depth=23, bot_mul=1.0), + 'regnetx_6.4gf': + dict(w0=184, wa=60.83, wm=2.07, group_w=56, depth=17, bot_mul=1.0), + 'regnetx_8.0gf': + dict(w0=80, wa=49.56, wm=2.88, group_w=120, depth=23, bot_mul=1.0), + 'regnetx_12gf': + dict(w0=168, wa=73.36, wm=2.37, group_w=112, depth=19, bot_mul=1.0), + } + + def __init__(self, + arch, + in_channels=3, + stem_channels=32, + base_channels=32, + strides=(2, 2, 2, 2), + dilations=(1, 1, 1, 1), + out_indices=(0, 1, 2, 3), + style='pytorch', + deep_stem=False, + avg_down=False, + frozen_stages=-1, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + dcn=None, + stage_with_dcn=(False, False, False, False), + plugins=None, + with_cp=False, + zero_init_residual=True): + super(ResNet, self).__init__() + + # Generate RegNet parameters first + if isinstance(arch, str): + assert arch in self.arch_settings, \ + f'"arch": "{arch}" is not one of the' \ + ' arch_settings' + arch = self.arch_settings[arch] + elif not isinstance(arch, dict): + raise ValueError('Expect "arch" to be either a string ' + f'or a dict, got {type(arch)}') + + widths, num_stages = self.generate_regnet( + arch['w0'], + arch['wa'], + arch['wm'], + arch['depth'], + ) + # Convert to per stage format + stage_widths, stage_blocks = self.get_stages_from_blocks(widths) + # Generate group widths and bot muls + group_widths = [arch['group_w'] for _ in range(num_stages)] + self.bottleneck_ratio = [arch['bot_mul'] for _ in range(num_stages)] + # Adjust the compatibility of stage_widths and group_widths + stage_widths, group_widths = self.adjust_width_group( + stage_widths, self.bottleneck_ratio, group_widths) + + # Group params by stage + self.stage_widths = stage_widths + self.group_widths = group_widths + self.depth = sum(stage_blocks) + self.stem_channels = stem_channels + self.base_channels = base_channels + self.num_stages = num_stages + assert num_stages >= 1 and num_stages <= 4 + self.strides = strides + self.dilations = dilations + assert len(strides) == len(dilations) == num_stages + self.out_indices = out_indices + assert max(out_indices) < num_stages + self.style = style + self.deep_stem = deep_stem + self.avg_down = avg_down + self.frozen_stages = frozen_stages + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.with_cp = with_cp + self.norm_eval = norm_eval + self.dcn = dcn + self.stage_with_dcn = stage_with_dcn + if dcn is not None: + assert len(stage_with_dcn) == num_stages + self.plugins = plugins + self.zero_init_residual = zero_init_residual + self.block = Bottleneck + expansion_bak = self.block.expansion + self.block.expansion = 1 + self.stage_blocks = stage_blocks[:num_stages] + + self._make_stem_layer(in_channels, stem_channels) + + self.inplanes = stem_channels + self.res_layers = [] + for i, num_blocks in enumerate(self.stage_blocks): + stride = self.strides[i] + dilation = self.dilations[i] + group_width = self.group_widths[i] + width = int(round(self.stage_widths[i] * self.bottleneck_ratio[i])) + stage_groups = width // group_width + + dcn = self.dcn if self.stage_with_dcn[i] else None + if self.plugins is not None: + stage_plugins = self.make_stage_plugins(self.plugins, i) + else: + stage_plugins = None + + res_layer = self.make_res_layer( + block=self.block, + inplanes=self.inplanes, + planes=self.stage_widths[i], + num_blocks=num_blocks, + stride=stride, + dilation=dilation, + style=self.style, + avg_down=self.avg_down, + with_cp=self.with_cp, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + dcn=dcn, + plugins=stage_plugins, + groups=stage_groups, + base_width=group_width, + base_channels=self.stage_widths[i]) + self.inplanes = self.stage_widths[i] + layer_name = f'layer{i + 1}' + self.add_module(layer_name, res_layer) + self.res_layers.append(layer_name) + + self._freeze_stages() + + self.feat_dim = stage_widths[-1] + self.block.expansion = expansion_bak + + def _make_stem_layer(self, in_channels, base_channels): + self.conv1 = build_conv_layer( + self.conv_cfg, + in_channels, + base_channels, + kernel_size=3, + stride=2, + padding=1, + bias=False) + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, base_channels, postfix=1) + self.add_module(self.norm1_name, norm1) + self.relu = nn.ReLU(inplace=True) + + def generate_regnet(self, + initial_width, + width_slope, + width_parameter, + depth, + divisor=8): + """Generates per block width from RegNet parameters. + + Args: + initial_width ([int]): Initial width of the backbone + width_slope ([float]): Slope of the quantized linear function + width_parameter ([int]): Parameter used to quantize the width. + depth ([int]): Depth of the backbone. + divisor (int, optional): The divisor of channels. Defaults to 8. + + Returns: + list, int: return a list of widths of each stage and the number \ + of stages + """ + assert width_slope >= 0 + assert initial_width > 0 + assert width_parameter > 1 + assert initial_width % divisor == 0 + widths_cont = np.arange(depth) * width_slope + initial_width + ks = np.round( + np.log(widths_cont / initial_width) / np.log(width_parameter)) + widths = initial_width * np.power(width_parameter, ks) + widths = np.round(np.divide(widths, divisor)) * divisor + num_stages = len(np.unique(widths)) + widths, widths_cont = widths.astype(int).tolist(), widths_cont.tolist() + return widths, num_stages + + @staticmethod + def quantize_float(number, divisor): + """Converts a float to closest non-zero int divisible by divior. + + Args: + number (int): Original number to be quantized. + divisor (int): Divisor used to quantize the number. + + Returns: + int: quantized number that is divisible by devisor. + """ + return int(round(number / divisor) * divisor) + + def adjust_width_group(self, widths, bottleneck_ratio, groups): + """Adjusts the compatibility of widths and groups. + + Args: + widths (list[int]): Width of each stage. + bottleneck_ratio (float): Bottleneck ratio. + groups (int): number of groups in each stage + + Returns: + tuple(list): The adjusted widths and groups of each stage. + """ + bottleneck_width = [ + int(w * b) for w, b in zip(widths, bottleneck_ratio) + ] + groups = [min(g, w_bot) for g, w_bot in zip(groups, bottleneck_width)] + bottleneck_width = [ + self.quantize_float(w_bot, g) + for w_bot, g in zip(bottleneck_width, groups) + ] + widths = [ + int(w_bot / b) + for w_bot, b in zip(bottleneck_width, bottleneck_ratio) + ] + return widths, groups + + def get_stages_from_blocks(self, widths): + """Gets widths/stage_blocks of network at each stage. + + Args: + widths (list[int]): Width in each stage. + + Returns: + tuple(list): width and depth of each stage + """ + width_diff = [ + width != width_prev + for width, width_prev in zip(widths + [0], [0] + widths) + ] + stage_widths = [ + width for width, diff in zip(widths, width_diff[:-1]) if diff + ] + stage_blocks = np.diff([ + depth for depth, diff in zip(range(len(width_diff)), width_diff) + if diff + ]).tolist() + return stage_widths, stage_blocks + + def forward(self, x): + """Forward function.""" + x = self.conv1(x) + x = self.norm1(x) + x = self.relu(x) + + outs = [] + for i, layer_name in enumerate(self.res_layers): + res_layer = getattr(self, layer_name) + x = res_layer(x) + if i in self.out_indices: + outs.append(x) + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/res2net.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/res2net.py new file mode 100644 index 00000000..7901b7f2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/res2net.py @@ -0,0 +1,351 @@ +import math + +import torch +import torch.nn as nn +import torch.utils.checkpoint as cp +from mmcv.cnn import (build_conv_layer, build_norm_layer, constant_init, + kaiming_init) +from mmcv.runner import load_checkpoint +from torch.nn.modules.batchnorm import _BatchNorm + +from mmdet.utils import get_root_logger +from ..builder import BACKBONES +from .resnet import Bottleneck as _Bottleneck +from .resnet import ResNet + + +class Bottle2neck(_Bottleneck): + expansion = 4 + + def __init__(self, + inplanes, + planes, + scales=4, + base_width=26, + base_channels=64, + stage_type='normal', + **kwargs): + """Bottle2neck block for Res2Net. + + If style is "pytorch", the stride-two layer is the 3x3 conv layer, if + it is "caffe", the stride-two layer is the first 1x1 conv layer. + """ + super(Bottle2neck, self).__init__(inplanes, planes, **kwargs) + assert scales > 1, 'Res2Net degenerates to ResNet when scales = 1.' + width = int(math.floor(self.planes * (base_width / base_channels))) + + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, width * scales, postfix=1) + self.norm3_name, norm3 = build_norm_layer( + self.norm_cfg, self.planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + self.conv_cfg, + self.inplanes, + width * scales, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + + if stage_type == 'stage' and self.conv2_stride != 1: + self.pool = nn.AvgPool2d( + kernel_size=3, stride=self.conv2_stride, padding=1) + convs = [] + bns = [] + + fallback_on_stride = False + if self.with_dcn: + fallback_on_stride = self.dcn.pop('fallback_on_stride', False) + if not self.with_dcn or fallback_on_stride: + for i in range(scales - 1): + convs.append( + build_conv_layer( + self.conv_cfg, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + bias=False)) + bns.append( + build_norm_layer(self.norm_cfg, width, postfix=i + 1)[1]) + self.convs = nn.ModuleList(convs) + self.bns = nn.ModuleList(bns) + else: + assert self.conv_cfg is None, 'conv_cfg must be None for DCN' + for i in range(scales - 1): + convs.append( + build_conv_layer( + self.dcn, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + bias=False)) + bns.append( + build_norm_layer(self.norm_cfg, width, postfix=i + 1)[1]) + self.convs = nn.ModuleList(convs) + self.bns = nn.ModuleList(bns) + + self.conv3 = build_conv_layer( + self.conv_cfg, + width * scales, + self.planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + self.stage_type = stage_type + self.scales = scales + self.width = width + delattr(self, 'conv2') + delattr(self, self.norm2_name) + + def forward(self, x): + """Forward function.""" + + def _inner_forward(x): + identity = x + + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv1_plugin_names) + + spx = torch.split(out, self.width, 1) + sp = self.convs[0](spx[0].contiguous()) + sp = self.relu(self.bns[0](sp)) + out = sp + for i in range(1, self.scales - 1): + if self.stage_type == 'stage': + sp = spx[i] + else: + sp = sp + spx[i] + sp = self.convs[i](sp.contiguous()) + sp = self.relu(self.bns[i](sp)) + out = torch.cat((out, sp), 1) + + if self.stage_type == 'normal' or self.conv2_stride == 1: + out = torch.cat((out, spx[self.scales - 1]), 1) + elif self.stage_type == 'stage': + out = torch.cat((out, self.pool(spx[self.scales - 1])), 1) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv2_plugin_names) + + out = self.conv3(out) + out = self.norm3(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv3_plugin_names) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = self.relu(out) + + return out + + +class Res2Layer(nn.Sequential): + """Res2Layer to build Res2Net style backbone. + + Args: + block (nn.Module): block used to build ResLayer. + inplanes (int): inplanes of block. + planes (int): planes of block. + num_blocks (int): number of blocks. + stride (int): stride of the first block. Default: 1 + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottle2neck. Default: False + conv_cfg (dict): dictionary to construct and config conv layer. + Default: None + norm_cfg (dict): dictionary to construct and config norm layer. + Default: dict(type='BN') + scales (int): Scales used in Res2Net. Default: 4 + base_width (int): Basic width of each scale. Default: 26 + """ + + def __init__(self, + block, + inplanes, + planes, + num_blocks, + stride=1, + avg_down=True, + conv_cfg=None, + norm_cfg=dict(type='BN'), + scales=4, + base_width=26, + **kwargs): + self.block = block + + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.AvgPool2d( + kernel_size=stride, + stride=stride, + ceil_mode=True, + count_include_pad=False), + build_conv_layer( + conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=1, + bias=False), + build_norm_layer(norm_cfg, planes * block.expansion)[1], + ) + + layers = [] + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=stride, + downsample=downsample, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + scales=scales, + base_width=base_width, + stage_type='stage', + **kwargs)) + inplanes = planes * block.expansion + for i in range(1, num_blocks): + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + scales=scales, + base_width=base_width, + **kwargs)) + super(Res2Layer, self).__init__(*layers) + + +@BACKBONES.register_module() +class Res2Net(ResNet): + """Res2Net backbone. + + Args: + scales (int): Scales used in Res2Net. Default: 4 + base_width (int): Basic width of each scale. Default: 26 + depth (int): Depth of res2net, from {50, 101, 152}. + in_channels (int): Number of input image channels. Default: 3. + num_stages (int): Res2net stages. Default: 4. + strides (Sequence[int]): Strides of the first block of each stage. + dilations (Sequence[int]): Dilation of each stage. + out_indices (Sequence[int]): Output from which stages. + style (str): `pytorch` or `caffe`. If set to "pytorch", the stride-two + layer is the 3x3 conv layer, otherwise the stride-two layer is + the first 1x1 conv layer. + deep_stem (bool): Replace 7x7 conv in input stem with 3 3x3 conv + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottle2neck. + frozen_stages (int): Stages to be frozen (stop grad and set eval mode). + -1 means not freezing any parameters. + norm_cfg (dict): Dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + plugins (list[dict]): List of plugins for stages, each dict contains: + + - cfg (dict, required): Cfg dict to build plugin. + - position (str, required): Position inside block to insert + plugin, options are 'after_conv1', 'after_conv2', 'after_conv3'. + - stages (tuple[bool], optional): Stages to apply plugin, length + should be same as 'num_stages'. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): Whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmdet.models import Res2Net + >>> import torch + >>> self = Res2Net(depth=50, scales=4, base_width=26) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 256, 8, 8) + (1, 512, 4, 4) + (1, 1024, 2, 2) + (1, 2048, 1, 1) + """ + + arch_settings = { + 50: (Bottle2neck, (3, 4, 6, 3)), + 101: (Bottle2neck, (3, 4, 23, 3)), + 152: (Bottle2neck, (3, 8, 36, 3)) + } + + def __init__(self, + scales=4, + base_width=26, + style='pytorch', + deep_stem=True, + avg_down=True, + **kwargs): + self.scales = scales + self.base_width = base_width + super(Res2Net, self).__init__( + style='pytorch', deep_stem=True, avg_down=True, **kwargs) + + def make_res_layer(self, **kwargs): + return Res2Layer( + scales=self.scales, + base_width=self.base_width, + base_channels=self.base_channels, + **kwargs) + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, (_BatchNorm, nn.GroupNorm)): + constant_init(m, 1) + + if self.dcn is not None: + for m in self.modules(): + if isinstance(m, Bottle2neck): + # dcn in Res2Net bottle2neck is in ModuleList + for n in m.convs: + if hasattr(n, 'conv_offset'): + constant_init(n.conv_offset, 0) + + if self.zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottle2neck): + constant_init(m.norm3, 0) + else: + raise TypeError('pretrained must be a str or None') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnest.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnest.py new file mode 100644 index 00000000..48e1d8bf --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnest.py @@ -0,0 +1,317 @@ +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint as cp +from mmcv.cnn import build_conv_layer, build_norm_layer + +from ..builder import BACKBONES +from ..utils import ResLayer +from .resnet import Bottleneck as _Bottleneck +from .resnet import ResNetV1d + + +class RSoftmax(nn.Module): + """Radix Softmax module in ``SplitAttentionConv2d``. + + Args: + radix (int): Radix of input. + groups (int): Groups of input. + """ + + def __init__(self, radix, groups): + super().__init__() + self.radix = radix + self.groups = groups + + def forward(self, x): + batch = x.size(0) + if self.radix > 1: + x = x.view(batch, self.groups, self.radix, -1).transpose(1, 2) + x = F.softmax(x, dim=1) + x = x.reshape(batch, -1) + else: + x = torch.sigmoid(x) + return x + + +class SplitAttentionConv2d(nn.Module): + """Split-Attention Conv2d in ResNeSt. + + Args: + in_channels (int): Number of channels in the input feature map. + channels (int): Number of intermediate channels. + kernel_size (int | tuple[int]): Size of the convolution kernel. + stride (int | tuple[int]): Stride of the convolution. + padding (int | tuple[int]): Zero-padding added to both sides of + dilation (int | tuple[int]): Spacing between kernel elements. + groups (int): Number of blocked connections from input channels to + output channels. + groups (int): Same as nn.Conv2d. + radix (int): Radix of SpltAtConv2d. Default: 2 + reduction_factor (int): Reduction factor of inter_channels. Default: 4. + conv_cfg (dict): Config dict for convolution layer. Default: None, + which means using conv2d. + norm_cfg (dict): Config dict for normalization layer. Default: None. + dcn (dict): Config dict for DCN. Default: None. + """ + + def __init__(self, + in_channels, + channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + radix=2, + reduction_factor=4, + conv_cfg=None, + norm_cfg=dict(type='BN'), + dcn=None): + super(SplitAttentionConv2d, self).__init__() + inter_channels = max(in_channels * radix // reduction_factor, 32) + self.radix = radix + self.groups = groups + self.channels = channels + self.with_dcn = dcn is not None + self.dcn = dcn + fallback_on_stride = False + if self.with_dcn: + fallback_on_stride = self.dcn.pop('fallback_on_stride', False) + if self.with_dcn and not fallback_on_stride: + assert conv_cfg is None, 'conv_cfg must be None for DCN' + conv_cfg = dcn + self.conv = build_conv_layer( + conv_cfg, + in_channels, + channels * radix, + kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups * radix, + bias=False) + # To be consistent with original implementation, starting from 0 + self.norm0_name, norm0 = build_norm_layer( + norm_cfg, channels * radix, postfix=0) + self.add_module(self.norm0_name, norm0) + self.relu = nn.ReLU(inplace=True) + self.fc1 = build_conv_layer( + None, channels, inter_channels, 1, groups=self.groups) + self.norm1_name, norm1 = build_norm_layer( + norm_cfg, inter_channels, postfix=1) + self.add_module(self.norm1_name, norm1) + self.fc2 = build_conv_layer( + None, inter_channels, channels * radix, 1, groups=self.groups) + self.rsoftmax = RSoftmax(radix, groups) + + @property + def norm0(self): + """nn.Module: the normalization layer named "norm0" """ + return getattr(self, self.norm0_name) + + @property + def norm1(self): + """nn.Module: the normalization layer named "norm1" """ + return getattr(self, self.norm1_name) + + def forward(self, x): + x = self.conv(x) + x = self.norm0(x) + x = self.relu(x) + + batch, rchannel = x.shape[:2] + batch = x.size(0) + if self.radix > 1: + splits = x.view(batch, self.radix, -1, *x.shape[2:]) + gap = splits.sum(dim=1) + else: + gap = x + gap = F.adaptive_avg_pool2d(gap, 1) + gap = self.fc1(gap) + + gap = self.norm1(gap) + gap = self.relu(gap) + + atten = self.fc2(gap) + atten = self.rsoftmax(atten).view(batch, -1, 1, 1) + + if self.radix > 1: + attens = atten.view(batch, self.radix, -1, *atten.shape[2:]) + out = torch.sum(attens * splits, dim=1) + else: + out = atten * x + return out.contiguous() + + +class Bottleneck(_Bottleneck): + """Bottleneck block for ResNeSt. + + Args: + inplane (int): Input planes of this block. + planes (int): Middle planes of this block. + groups (int): Groups of conv2. + base_width (int): Base of width in terms of base channels. Default: 4. + base_channels (int): Base of channels for calculating width. + Default: 64. + radix (int): Radix of SpltAtConv2d. Default: 2 + reduction_factor (int): Reduction factor of inter_channels in + SplitAttentionConv2d. Default: 4. + avg_down_stride (bool): Whether to use average pool for stride in + Bottleneck. Default: True. + kwargs (dict): Key word arguments for base class. + """ + expansion = 4 + + def __init__(self, + inplanes, + planes, + groups=1, + base_width=4, + base_channels=64, + radix=2, + reduction_factor=4, + avg_down_stride=True, + **kwargs): + """Bottleneck block for ResNeSt.""" + super(Bottleneck, self).__init__(inplanes, planes, **kwargs) + + if groups == 1: + width = self.planes + else: + width = math.floor(self.planes * + (base_width / base_channels)) * groups + + self.avg_down_stride = avg_down_stride and self.conv2_stride > 1 + + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, width, postfix=1) + self.norm3_name, norm3 = build_norm_layer( + self.norm_cfg, self.planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + self.conv_cfg, + self.inplanes, + width, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + self.with_modulated_dcn = False + self.conv2 = SplitAttentionConv2d( + width, + width, + kernel_size=3, + stride=1 if self.avg_down_stride else self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + radix=radix, + reduction_factor=reduction_factor, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + dcn=self.dcn) + delattr(self, self.norm2_name) + + if self.avg_down_stride: + self.avd_layer = nn.AvgPool2d(3, self.conv2_stride, padding=1) + + self.conv3 = build_conv_layer( + self.conv_cfg, + width, + self.planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + def forward(self, x): + + def _inner_forward(x): + identity = x + + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv1_plugin_names) + + out = self.conv2(out) + + if self.avg_down_stride: + out = self.avd_layer(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv2_plugin_names) + + out = self.conv3(out) + out = self.norm3(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv3_plugin_names) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = self.relu(out) + + return out + + +@BACKBONES.register_module() +class ResNeSt(ResNetV1d): + """ResNeSt backbone. + + Args: + groups (int): Number of groups of Bottleneck. Default: 1 + base_width (int): Base width of Bottleneck. Default: 4 + radix (int): Radix of SplitAttentionConv2d. Default: 2 + reduction_factor (int): Reduction factor of inter_channels in + SplitAttentionConv2d. Default: 4. + avg_down_stride (bool): Whether to use average pool for stride in + Bottleneck. Default: True. + kwargs (dict): Keyword arguments for ResNet. + """ + + arch_settings = { + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)), + 200: (Bottleneck, (3, 24, 36, 3)) + } + + def __init__(self, + groups=1, + base_width=4, + radix=2, + reduction_factor=4, + avg_down_stride=True, + **kwargs): + self.groups = groups + self.base_width = base_width + self.radix = radix + self.reduction_factor = reduction_factor + self.avg_down_stride = avg_down_stride + super(ResNeSt, self).__init__(**kwargs) + + def make_res_layer(self, **kwargs): + """Pack all blocks in a stage into a ``ResLayer``.""" + return ResLayer( + groups=self.groups, + base_width=self.base_width, + base_channels=self.base_channels, + radix=self.radix, + reduction_factor=self.reduction_factor, + avg_down_stride=self.avg_down_stride, + **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnet.py new file mode 100644 index 00000000..3826815a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnet.py @@ -0,0 +1,663 @@ +import torch.nn as nn +import torch.utils.checkpoint as cp +from mmcv.cnn import (build_conv_layer, build_norm_layer, build_plugin_layer, + constant_init, kaiming_init) +from mmcv.runner import load_checkpoint +from torch.nn.modules.batchnorm import _BatchNorm + +from mmdet.utils import get_root_logger +from ..builder import BACKBONES +from ..utils import ResLayer + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + style='pytorch', + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + dcn=None, + plugins=None): + super(BasicBlock, self).__init__() + assert dcn is None, 'Not implemented yet.' + assert plugins is None, 'Not implemented yet.' + + self.norm1_name, norm1 = build_norm_layer(norm_cfg, planes, postfix=1) + self.norm2_name, norm2 = build_norm_layer(norm_cfg, planes, postfix=2) + + self.conv1 = build_conv_layer( + conv_cfg, + inplanes, + planes, + 3, + stride=stride, + padding=dilation, + dilation=dilation, + bias=False) + self.add_module(self.norm1_name, norm1) + self.conv2 = build_conv_layer( + conv_cfg, planes, planes, 3, padding=1, bias=False) + self.add_module(self.norm2_name, norm2) + + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + self.dilation = dilation + self.with_cp = with_cp + + @property + def norm1(self): + """nn.Module: normalization layer after the first convolution layer""" + return getattr(self, self.norm1_name) + + @property + def norm2(self): + """nn.Module: normalization layer after the second convolution layer""" + return getattr(self, self.norm2_name) + + def forward(self, x): + """Forward function.""" + + def _inner_forward(x): + identity = x + + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.norm2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + style='pytorch', + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + dcn=None, + plugins=None): + """Bottleneck block for ResNet. + + If style is "pytorch", the stride-two layer is the 3x3 conv layer, if + it is "caffe", the stride-two layer is the first 1x1 conv layer. + """ + super(Bottleneck, self).__init__() + assert style in ['pytorch', 'caffe'] + assert dcn is None or isinstance(dcn, dict) + assert plugins is None or isinstance(plugins, list) + if plugins is not None: + allowed_position = ['after_conv1', 'after_conv2', 'after_conv3'] + assert all(p['position'] in allowed_position for p in plugins) + + self.inplanes = inplanes + self.planes = planes + self.stride = stride + self.dilation = dilation + self.style = style + self.with_cp = with_cp + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.dcn = dcn + self.with_dcn = dcn is not None + self.plugins = plugins + self.with_plugins = plugins is not None + + if self.with_plugins: + # collect plugins for conv1/conv2/conv3 + self.after_conv1_plugins = [ + plugin['cfg'] for plugin in plugins + if plugin['position'] == 'after_conv1' + ] + self.after_conv2_plugins = [ + plugin['cfg'] for plugin in plugins + if plugin['position'] == 'after_conv2' + ] + self.after_conv3_plugins = [ + plugin['cfg'] for plugin in plugins + if plugin['position'] == 'after_conv3' + ] + + if self.style == 'pytorch': + self.conv1_stride = 1 + self.conv2_stride = stride + else: + self.conv1_stride = stride + self.conv2_stride = 1 + + self.norm1_name, norm1 = build_norm_layer(norm_cfg, planes, postfix=1) + self.norm2_name, norm2 = build_norm_layer(norm_cfg, planes, postfix=2) + self.norm3_name, norm3 = build_norm_layer( + norm_cfg, planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + conv_cfg, + inplanes, + planes, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + fallback_on_stride = False + if self.with_dcn: + fallback_on_stride = dcn.pop('fallback_on_stride', False) + if not self.with_dcn or fallback_on_stride: + self.conv2 = build_conv_layer( + conv_cfg, + planes, + planes, + kernel_size=3, + stride=self.conv2_stride, + padding=dilation, + dilation=dilation, + bias=False) + else: + assert self.conv_cfg is None, 'conv_cfg must be None for DCN' + self.conv2 = build_conv_layer( + dcn, + planes, + planes, + kernel_size=3, + stride=self.conv2_stride, + padding=dilation, + dilation=dilation, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.conv3 = build_conv_layer( + conv_cfg, + planes, + planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + + if self.with_plugins: + self.after_conv1_plugin_names = self.make_block_plugins( + planes, self.after_conv1_plugins) + self.after_conv2_plugin_names = self.make_block_plugins( + planes, self.after_conv2_plugins) + self.after_conv3_plugin_names = self.make_block_plugins( + planes * self.expansion, self.after_conv3_plugins) + + def make_block_plugins(self, in_channels, plugins): + """make plugins for block. + + Args: + in_channels (int): Input channels of plugin. + plugins (list[dict]): List of plugins cfg to build. + + Returns: + list[str]: List of the names of plugin. + """ + assert isinstance(plugins, list) + plugin_names = [] + for plugin in plugins: + plugin = plugin.copy() + name, layer = build_plugin_layer( + plugin, + in_channels=in_channels, + postfix=plugin.pop('postfix', '')) + assert not hasattr(self, name), f'duplicate plugin {name}' + self.add_module(name, layer) + plugin_names.append(name) + return plugin_names + + def forward_plugin(self, x, plugin_names): + out = x + for name in plugin_names: + out = getattr(self, name)(x) + return out + + @property + def norm1(self): + """nn.Module: normalization layer after the first convolution layer""" + return getattr(self, self.norm1_name) + + @property + def norm2(self): + """nn.Module: normalization layer after the second convolution layer""" + return getattr(self, self.norm2_name) + + @property + def norm3(self): + """nn.Module: normalization layer after the third convolution layer""" + return getattr(self, self.norm3_name) + + def forward(self, x): + """Forward function.""" + + def _inner_forward(x): + identity = x + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv1_plugin_names) + + out = self.conv2(out) + out = self.norm2(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv2_plugin_names) + + out = self.conv3(out) + out = self.norm3(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv3_plugin_names) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = self.relu(out) + + return out + + +@BACKBONES.register_module() +class ResNet(nn.Module): + """ResNet backbone. + + Args: + depth (int): Depth of resnet, from {18, 34, 50, 101, 152}. + stem_channels (int | None): Number of stem channels. If not specified, + it will be the same as `base_channels`. Default: None. + base_channels (int): Number of base channels of res layer. Default: 64. + in_channels (int): Number of input image channels. Default: 3. + num_stages (int): Resnet stages. Default: 4. + strides (Sequence[int]): Strides of the first block of each stage. + dilations (Sequence[int]): Dilation of each stage. + out_indices (Sequence[int]): Output from which stages. + style (str): `pytorch` or `caffe`. If set to "pytorch", the stride-two + layer is the 3x3 conv layer, otherwise the stride-two layer is + the first 1x1 conv layer. + deep_stem (bool): Replace 7x7 conv in input stem with 3 3x3 conv + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottleneck. + frozen_stages (int): Stages to be frozen (stop grad and set eval mode). + -1 means not freezing any parameters. + norm_cfg (dict): Dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + plugins (list[dict]): List of plugins for stages, each dict contains: + + - cfg (dict, required): Cfg dict to build plugin. + - position (str, required): Position inside block to insert + plugin, options are 'after_conv1', 'after_conv2', 'after_conv3'. + - stages (tuple[bool], optional): Stages to apply plugin, length + should be same as 'num_stages'. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): Whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmdet.models import ResNet + >>> import torch + >>> self = ResNet(depth=18) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 64, 8, 8) + (1, 128, 4, 4) + (1, 256, 2, 2) + (1, 512, 1, 1) + """ + + arch_settings = { + 18: (BasicBlock, (2, 2, 2, 2)), + 34: (BasicBlock, (3, 4, 6, 3)), + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)) + } + + def __init__(self, + depth, + in_channels=3, + stem_channels=None, + base_channels=64, + num_stages=4, + strides=(1, 2, 2, 2), + dilations=(1, 1, 1, 1), + out_indices=(0, 1, 2, 3), + style='pytorch', + deep_stem=False, + avg_down=False, + frozen_stages=-1, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + dcn=None, + stage_with_dcn=(False, False, False, False), + plugins=None, + with_cp=False, + zero_init_residual=True): + super(ResNet, self).__init__() + if depth not in self.arch_settings: + raise KeyError(f'invalid depth {depth} for resnet') + self.depth = depth + if stem_channels is None: + stem_channels = base_channels + self.stem_channels = stem_channels + self.base_channels = base_channels + self.num_stages = num_stages + assert num_stages >= 1 and num_stages <= 4 + self.strides = strides + self.dilations = dilations + assert len(strides) == len(dilations) == num_stages + self.out_indices = out_indices + assert max(out_indices) < num_stages + self.style = style + self.deep_stem = deep_stem + self.avg_down = avg_down + self.frozen_stages = frozen_stages + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.with_cp = with_cp + self.norm_eval = norm_eval + self.dcn = dcn + self.stage_with_dcn = stage_with_dcn + if dcn is not None: + assert len(stage_with_dcn) == num_stages + self.plugins = plugins + self.zero_init_residual = zero_init_residual + self.block, stage_blocks = self.arch_settings[depth] + self.stage_blocks = stage_blocks[:num_stages] + self.inplanes = stem_channels + + self._make_stem_layer(in_channels, stem_channels) + + self.res_layers = [] + for i, num_blocks in enumerate(self.stage_blocks): + stride = strides[i] + dilation = dilations[i] + dcn = self.dcn if self.stage_with_dcn[i] else None + if plugins is not None: + stage_plugins = self.make_stage_plugins(plugins, i) + else: + stage_plugins = None + planes = base_channels * 2**i + res_layer = self.make_res_layer( + block=self.block, + inplanes=self.inplanes, + planes=planes, + num_blocks=num_blocks, + stride=stride, + dilation=dilation, + style=self.style, + avg_down=self.avg_down, + with_cp=with_cp, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + dcn=dcn, + plugins=stage_plugins) + self.inplanes = planes * self.block.expansion + layer_name = f'layer{i + 1}' + self.add_module(layer_name, res_layer) + self.res_layers.append(layer_name) + + self._freeze_stages() + + self.feat_dim = self.block.expansion * base_channels * 2**( + len(self.stage_blocks) - 1) + + def make_stage_plugins(self, plugins, stage_idx): + """Make plugins for ResNet ``stage_idx`` th stage. + + Currently we support to insert ``context_block``, + ``empirical_attention_block``, ``nonlocal_block`` into the backbone + like ResNet/ResNeXt. They could be inserted after conv1/conv2/conv3 of + Bottleneck. + + An example of plugins format could be: + + Examples: + >>> plugins=[ + ... dict(cfg=dict(type='xxx', arg1='xxx'), + ... stages=(False, True, True, True), + ... position='after_conv2'), + ... dict(cfg=dict(type='yyy'), + ... stages=(True, True, True, True), + ... position='after_conv3'), + ... dict(cfg=dict(type='zzz', postfix='1'), + ... stages=(True, True, True, True), + ... position='after_conv3'), + ... dict(cfg=dict(type='zzz', postfix='2'), + ... stages=(True, True, True, True), + ... position='after_conv3') + ... ] + >>> self = ResNet(depth=18) + >>> stage_plugins = self.make_stage_plugins(plugins, 0) + >>> assert len(stage_plugins) == 3 + + Suppose ``stage_idx=0``, the structure of blocks in the stage would be: + + .. code-block:: none + + conv1-> conv2->conv3->yyy->zzz1->zzz2 + + Suppose 'stage_idx=1', the structure of blocks in the stage would be: + + .. code-block:: none + + conv1-> conv2->xxx->conv3->yyy->zzz1->zzz2 + + If stages is missing, the plugin would be applied to all stages. + + Args: + plugins (list[dict]): List of plugins cfg to build. The postfix is + required if multiple same type plugins are inserted. + stage_idx (int): Index of stage to build + + Returns: + list[dict]: Plugins for current stage + """ + stage_plugins = [] + for plugin in plugins: + plugin = plugin.copy() + stages = plugin.pop('stages', None) + assert stages is None or len(stages) == self.num_stages + # whether to insert plugin into current stage + if stages is None or stages[stage_idx]: + stage_plugins.append(plugin) + + return stage_plugins + + def make_res_layer(self, **kwargs): + """Pack all blocks in a stage into a ``ResLayer``.""" + return ResLayer(**kwargs) + + @property + def norm1(self): + """nn.Module: the normalization layer named "norm1" """ + return getattr(self, self.norm1_name) + + def _make_stem_layer(self, in_channels, stem_channels): + if self.deep_stem: + self.stem = nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels, + stem_channels // 2, + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, stem_channels // 2)[1], + nn.ReLU(inplace=True), + build_conv_layer( + self.conv_cfg, + stem_channels // 2, + stem_channels // 2, + kernel_size=3, + stride=1, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, stem_channels // 2)[1], + nn.ReLU(inplace=True), + build_conv_layer( + self.conv_cfg, + stem_channels // 2, + stem_channels, + kernel_size=3, + stride=1, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, stem_channels)[1], + nn.ReLU(inplace=True)) + else: + self.conv1 = build_conv_layer( + self.conv_cfg, + in_channels, + stem_channels, + kernel_size=7, + stride=2, + padding=3, + bias=False) + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, stem_channels, postfix=1) + self.add_module(self.norm1_name, norm1) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + + def _freeze_stages(self): + if self.frozen_stages >= 0: + if self.deep_stem: + self.stem.eval() + for param in self.stem.parameters(): + param.requires_grad = False + else: + self.norm1.eval() + for m in [self.conv1, self.norm1]: + for param in m.parameters(): + param.requires_grad = False + + for i in range(1, self.frozen_stages + 1): + m = getattr(self, f'layer{i}') + m.eval() + for param in m.parameters(): + param.requires_grad = False + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, (_BatchNorm, nn.GroupNorm)): + constant_init(m, 1) + + if self.dcn is not None: + for m in self.modules(): + if isinstance(m, Bottleneck) and hasattr( + m.conv2, 'conv_offset'): + constant_init(m.conv2.conv_offset, 0) + + if self.zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + constant_init(m.norm3, 0) + elif isinstance(m, BasicBlock): + constant_init(m.norm2, 0) + else: + raise TypeError('pretrained must be a str or None') + + def forward(self, x): + """Forward function.""" + if self.deep_stem: + x = self.stem(x) + else: + x = self.conv1(x) + x = self.norm1(x) + x = self.relu(x) + x = self.maxpool(x) + outs = [] + for i, layer_name in enumerate(self.res_layers): + res_layer = getattr(self, layer_name) + x = res_layer(x) + if i in self.out_indices: + outs.append(x) + return tuple(outs) + + def train(self, mode=True): + """Convert the model into training mode while keep normalization layer + freezed.""" + super(ResNet, self).train(mode) + self._freeze_stages() + if mode and self.norm_eval: + for m in self.modules(): + # trick: eval have effect on BatchNorm only + if isinstance(m, _BatchNorm): + m.eval() + + +@BACKBONES.register_module() +class ResNetV1d(ResNet): + r"""ResNetV1d variant described in `Bag of Tricks + `_. + + Compared with default ResNet(ResNetV1b), ResNetV1d replaces the 7x7 conv in + the input stem with three 3x3 convs. And in the downsampling block, a 2x2 + avg_pool with stride 2 is added before conv, whose stride is changed to 1. + """ + + def __init__(self, **kwargs): + super(ResNetV1d, self).__init__( + deep_stem=True, avg_down=True, **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnext.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnext.py new file mode 100644 index 00000000..6dbcbd51 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/resnext.py @@ -0,0 +1,153 @@ +import math + +from mmcv.cnn import build_conv_layer, build_norm_layer + +from ..builder import BACKBONES +from ..utils import ResLayer +from .resnet import Bottleneck as _Bottleneck +from .resnet import ResNet + + +class Bottleneck(_Bottleneck): + expansion = 4 + + def __init__(self, + inplanes, + planes, + groups=1, + base_width=4, + base_channels=64, + **kwargs): + """Bottleneck block for ResNeXt. + + If style is "pytorch", the stride-two layer is the 3x3 conv layer, if + it is "caffe", the stride-two layer is the first 1x1 conv layer. + """ + super(Bottleneck, self).__init__(inplanes, planes, **kwargs) + + if groups == 1: + width = self.planes + else: + width = math.floor(self.planes * + (base_width / base_channels)) * groups + + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, width, postfix=1) + self.norm2_name, norm2 = build_norm_layer( + self.norm_cfg, width, postfix=2) + self.norm3_name, norm3 = build_norm_layer( + self.norm_cfg, self.planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + self.conv_cfg, + self.inplanes, + width, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + fallback_on_stride = False + self.with_modulated_dcn = False + if self.with_dcn: + fallback_on_stride = self.dcn.pop('fallback_on_stride', False) + if not self.with_dcn or fallback_on_stride: + self.conv2 = build_conv_layer( + self.conv_cfg, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + else: + assert self.conv_cfg is None, 'conv_cfg must be None for DCN' + self.conv2 = build_conv_layer( + self.dcn, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.conv3 = build_conv_layer( + self.conv_cfg, + width, + self.planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + if self.with_plugins: + self._del_block_plugins(self.after_conv1_plugin_names + + self.after_conv2_plugin_names + + self.after_conv3_plugin_names) + self.after_conv1_plugin_names = self.make_block_plugins( + width, self.after_conv1_plugins) + self.after_conv2_plugin_names = self.make_block_plugins( + width, self.after_conv2_plugins) + self.after_conv3_plugin_names = self.make_block_plugins( + self.planes * self.expansion, self.after_conv3_plugins) + + def _del_block_plugins(self, plugin_names): + """delete plugins for block if exist. + + Args: + plugin_names (list[str]): List of plugins name to delete. + """ + assert isinstance(plugin_names, list) + for plugin_name in plugin_names: + del self._modules[plugin_name] + + +@BACKBONES.register_module() +class ResNeXt(ResNet): + """ResNeXt backbone. + + Args: + depth (int): Depth of resnet, from {18, 34, 50, 101, 152}. + in_channels (int): Number of input image channels. Default: 3. + num_stages (int): Resnet stages. Default: 4. + groups (int): Group of resnext. + base_width (int): Base width of resnext. + strides (Sequence[int]): Strides of the first block of each stage. + dilations (Sequence[int]): Dilation of each stage. + out_indices (Sequence[int]): Output from which stages. + style (str): `pytorch` or `caffe`. If set to "pytorch", the stride-two + layer is the 3x3 conv layer, otherwise the stride-two layer is + the first 1x1 conv layer. + frozen_stages (int): Stages to be frozen (all param fixed). -1 means + not freezing any parameters. + norm_cfg (dict): dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): whether to use zero init for last norm layer + in resblocks to let them behave as identity. + """ + + arch_settings = { + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)) + } + + def __init__(self, groups=1, base_width=4, **kwargs): + self.groups = groups + self.base_width = base_width + super(ResNeXt, self).__init__(**kwargs) + + def make_res_layer(self, **kwargs): + """Pack all blocks in a stage into a ``ResLayer``""" + return ResLayer( + groups=self.groups, + base_width=self.base_width, + base_channels=self.base_channels, + **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/ssd_vgg.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/ssd_vgg.py new file mode 100644 index 00000000..cbc4fbb2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/ssd_vgg.py @@ -0,0 +1,169 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import VGG, constant_init, kaiming_init, normal_init, xavier_init +from mmcv.runner import load_checkpoint + +from mmdet.utils import get_root_logger +from ..builder import BACKBONES + + +@BACKBONES.register_module() +class SSDVGG(VGG): + """VGG Backbone network for single-shot-detection. + + Args: + input_size (int): width and height of input, from {300, 512}. + depth (int): Depth of vgg, from {11, 13, 16, 19}. + out_indices (Sequence[int]): Output from which stages. + + Example: + >>> self = SSDVGG(input_size=300, depth=11) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 300, 300) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 1024, 19, 19) + (1, 512, 10, 10) + (1, 256, 5, 5) + (1, 256, 3, 3) + (1, 256, 1, 1) + """ + extra_setting = { + 300: (256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256), + 512: (256, 'S', 512, 128, 'S', 256, 128, 'S', 256, 128, 'S', 256, 128), + } + + def __init__(self, + input_size, + depth, + with_last_pool=False, + ceil_mode=True, + out_indices=(3, 4), + out_feature_indices=(22, 34), + l2_norm_scale=20.): + # TODO: in_channels for mmcv.VGG + super(SSDVGG, self).__init__( + depth, + with_last_pool=with_last_pool, + ceil_mode=ceil_mode, + out_indices=out_indices) + assert input_size in (300, 512) + self.input_size = input_size + + self.features.add_module( + str(len(self.features)), + nn.MaxPool2d(kernel_size=3, stride=1, padding=1)) + self.features.add_module( + str(len(self.features)), + nn.Conv2d(512, 1024, kernel_size=3, padding=6, dilation=6)) + self.features.add_module( + str(len(self.features)), nn.ReLU(inplace=True)) + self.features.add_module( + str(len(self.features)), nn.Conv2d(1024, 1024, kernel_size=1)) + self.features.add_module( + str(len(self.features)), nn.ReLU(inplace=True)) + self.out_feature_indices = out_feature_indices + + self.inplanes = 1024 + self.extra = self._make_extra_layers(self.extra_setting[input_size]) + self.l2_norm = L2Norm( + self.features[out_feature_indices[0] - 1].out_channels, + l2_norm_scale) + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.features.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, nn.BatchNorm2d): + constant_init(m, 1) + elif isinstance(m, nn.Linear): + normal_init(m, std=0.01) + else: + raise TypeError('pretrained must be a str or None') + + for m in self.extra.modules(): + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform') + + constant_init(self.l2_norm, self.l2_norm.scale) + + def forward(self, x): + """Forward function.""" + outs = [] + for i, layer in enumerate(self.features): + x = layer(x) + if i in self.out_feature_indices: + outs.append(x) + for i, layer in enumerate(self.extra): + x = F.relu(layer(x), inplace=True) + if i % 2 == 1: + outs.append(x) + outs[0] = self.l2_norm(outs[0]) + if len(outs) == 1: + return outs[0] + else: + return tuple(outs) + + def _make_extra_layers(self, outplanes): + layers = [] + kernel_sizes = (1, 3) + num_layers = 0 + outplane = None + for i in range(len(outplanes)): + if self.inplanes == 'S': + self.inplanes = outplane + continue + k = kernel_sizes[num_layers % 2] + if outplanes[i] == 'S': + outplane = outplanes[i + 1] + conv = nn.Conv2d( + self.inplanes, outplane, k, stride=2, padding=1) + else: + outplane = outplanes[i] + conv = nn.Conv2d( + self.inplanes, outplane, k, stride=1, padding=0) + layers.append(conv) + self.inplanes = outplanes[i] + num_layers += 1 + if self.input_size == 512: + layers.append(nn.Conv2d(self.inplanes, 256, 4, padding=1)) + + return nn.Sequential(*layers) + + +class L2Norm(nn.Module): + + def __init__(self, n_dims, scale=20., eps=1e-10): + """L2 normalization layer. + + Args: + n_dims (int): Number of dimensions to be normalized + scale (float, optional): Defaults to 20.. + eps (float, optional): Used to avoid division by zero. + Defaults to 1e-10. + """ + super(L2Norm, self).__init__() + self.n_dims = n_dims + self.weight = nn.Parameter(torch.Tensor(self.n_dims)) + self.eps = eps + self.scale = scale + + def forward(self, x): + """Forward function.""" + # normalization layer convert to FP32 in FP16 training + x_float = x.float() + norm = x_float.pow(2).sum(1, keepdim=True).sqrt() + self.eps + return (self.weight[None, :, None, None].float().expand_as(x_float) * + x_float / norm).type_as(x) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/trident_resnet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/trident_resnet.py new file mode 100644 index 00000000..e6100132 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/backbones/trident_resnet.py @@ -0,0 +1,292 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint as cp +from mmcv.cnn import build_conv_layer, build_norm_layer, kaiming_init +from torch.nn.modules.utils import _pair + +from mmdet.models.backbones.resnet import Bottleneck, ResNet +from mmdet.models.builder import BACKBONES + + +class TridentConv(nn.Module): + """Trident Convolution Module. + + Args: + in_channels (int): Number of channels in input. + out_channels (int): Number of channels in output. + kernel_size (int): Size of convolution kernel. + stride (int, optional): Convolution stride. Default: 1. + trident_dilations (tuple[int, int, int], optional): Dilations of + different trident branch. Default: (1, 2, 3). + test_branch_idx (int, optional): In inference, all 3 branches will + be used if `test_branch_idx==-1`, otherwise only branch with + index `test_branch_idx` will be used. Default: 1. + bias (bool, optional): Whether to use bias in convolution or not. + Default: False. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size, + stride=1, + trident_dilations=(1, 2, 3), + test_branch_idx=1, + bias=False): + super(TridentConv, self).__init__() + self.num_branch = len(trident_dilations) + self.with_bias = bias + self.test_branch_idx = test_branch_idx + self.stride = _pair(stride) + self.kernel_size = _pair(kernel_size) + self.paddings = _pair(trident_dilations) + self.dilations = trident_dilations + self.in_channels = in_channels + self.out_channels = out_channels + self.bias = bias + + self.weight = nn.Parameter( + torch.Tensor(out_channels, in_channels, *self.kernel_size)) + if bias: + self.bias = nn.Parameter(torch.Tensor(out_channels)) + else: + self.bias = None + self.init_weights() + + def init_weights(self): + kaiming_init(self, distribution='uniform', mode='fan_in') + + def extra_repr(self): + tmpstr = f'in_channels={self.in_channels}' + tmpstr += f', out_channels={self.out_channels}' + tmpstr += f', kernel_size={self.kernel_size}' + tmpstr += f', num_branch={self.num_branch}' + tmpstr += f', test_branch_idx={self.test_branch_idx}' + tmpstr += f', stride={self.stride}' + tmpstr += f', paddings={self.paddings}' + tmpstr += f', dilations={self.dilations}' + tmpstr += f', bias={self.bias}' + return tmpstr + + def forward(self, inputs): + if self.training or self.test_branch_idx == -1: + outputs = [ + F.conv2d(input, self.weight, self.bias, self.stride, padding, + dilation) for input, dilation, padding in zip( + inputs, self.dilations, self.paddings) + ] + else: + assert len(inputs) == 1 + outputs = [ + F.conv2d(inputs[0], self.weight, self.bias, self.stride, + self.paddings[self.test_branch_idx], + self.dilations[self.test_branch_idx]) + ] + + return outputs + + +# Since TridentNet is defined over ResNet50 and ResNet101, here we +# only support TridentBottleneckBlock. +class TridentBottleneck(Bottleneck): + """BottleBlock for TridentResNet. + + Args: + trident_dilations (tuple[int, int, int]): Dilations of different + trident branch. + test_branch_idx (int): In inference, all 3 branches will be used + if `test_branch_idx==-1`, otherwise only branch with index + `test_branch_idx` will be used. + concat_output (bool): Whether to concat the output list to a Tensor. + `True` only in the last Block. + """ + + def __init__(self, trident_dilations, test_branch_idx, concat_output, + **kwargs): + + super(TridentBottleneck, self).__init__(**kwargs) + self.trident_dilations = trident_dilations + self.num_branch = len(trident_dilations) + self.concat_output = concat_output + self.test_branch_idx = test_branch_idx + self.conv2 = TridentConv( + self.planes, + self.planes, + kernel_size=3, + stride=self.conv2_stride, + bias=False, + trident_dilations=self.trident_dilations, + test_branch_idx=test_branch_idx) + + def forward(self, x): + + def _inner_forward(x): + num_branch = ( + self.num_branch + if self.training or self.test_branch_idx == -1 else 1) + identity = x + if not isinstance(x, list): + x = (x, ) * num_branch + identity = x + if self.downsample is not None: + identity = [self.downsample(b) for b in x] + + out = [self.conv1(b) for b in x] + out = [self.norm1(b) for b in out] + out = [self.relu(b) for b in out] + + if self.with_plugins: + for k in range(len(out)): + out[k] = self.forward_plugin(out[k], + self.after_conv1_plugin_names) + + out = self.conv2(out) + out = [self.norm2(b) for b in out] + out = [self.relu(b) for b in out] + if self.with_plugins: + for k in range(len(out)): + out[k] = self.forward_plugin(out[k], + self.after_conv2_plugin_names) + + out = [self.conv3(b) for b in out] + out = [self.norm3(b) for b in out] + + if self.with_plugins: + for k in range(len(out)): + out[k] = self.forward_plugin(out[k], + self.after_conv3_plugin_names) + + out = [ + out_b + identity_b for out_b, identity_b in zip(out, identity) + ] + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = [self.relu(b) for b in out] + if self.concat_output: + out = torch.cat(out, dim=0) + return out + + +def make_trident_res_layer(block, + inplanes, + planes, + num_blocks, + stride=1, + trident_dilations=(1, 2, 3), + style='pytorch', + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + dcn=None, + plugins=None, + test_branch_idx=-1): + """Build Trident Res Layers.""" + + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = [] + conv_stride = stride + downsample.extend([ + build_conv_layer( + conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=conv_stride, + bias=False), + build_norm_layer(norm_cfg, planes * block.expansion)[1] + ]) + downsample = nn.Sequential(*downsample) + + layers = [] + for i in range(num_blocks): + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=stride if i == 0 else 1, + trident_dilations=trident_dilations, + downsample=downsample if i == 0 else None, + style=style, + with_cp=with_cp, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + dcn=dcn, + plugins=plugins, + test_branch_idx=test_branch_idx, + concat_output=True if i == num_blocks - 1 else False)) + inplanes = planes * block.expansion + return nn.Sequential(*layers) + + +@BACKBONES.register_module() +class TridentResNet(ResNet): + """The stem layer, stage 1 and stage 2 in Trident ResNet are identical to + ResNet, while in stage 3, Trident BottleBlock is utilized to replace the + normal BottleBlock to yield trident output. Different branch shares the + convolution weight but uses different dilations to achieve multi-scale + output. + + / stage3(b0) \ + x - stem - stage1 - stage2 - stage3(b1) - output + \ stage3(b2) / + + Args: + depth (int): Depth of resnet, from {50, 101, 152}. + num_branch (int): Number of branches in TridentNet. + test_branch_idx (int): In inference, all 3 branches will be used + if `test_branch_idx==-1`, otherwise only branch with index + `test_branch_idx` will be used. + trident_dilations (tuple[int]): Dilations of different trident branch. + len(trident_dilations) should be equal to num_branch. + """ # noqa + + def __init__(self, depth, num_branch, test_branch_idx, trident_dilations, + **kwargs): + + assert num_branch == len(trident_dilations) + assert depth in (50, 101, 152) + super(TridentResNet, self).__init__(depth, **kwargs) + assert self.num_stages == 3 + self.test_branch_idx = test_branch_idx + self.num_branch = num_branch + + last_stage_idx = self.num_stages - 1 + stride = self.strides[last_stage_idx] + dilation = trident_dilations + dcn = self.dcn if self.stage_with_dcn[last_stage_idx] else None + if self.plugins is not None: + stage_plugins = self.make_stage_plugins(self.plugins, + last_stage_idx) + else: + stage_plugins = None + planes = self.base_channels * 2**last_stage_idx + res_layer = make_trident_res_layer( + TridentBottleneck, + inplanes=(self.block.expansion * self.base_channels * + 2**(last_stage_idx - 1)), + planes=planes, + num_blocks=self.stage_blocks[last_stage_idx], + stride=stride, + trident_dilations=dilation, + style=self.style, + with_cp=self.with_cp, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + dcn=dcn, + plugins=stage_plugins, + test_branch_idx=self.test_branch_idx) + + layer_name = f'layer{last_stage_idx + 1}' + + self.__setattr__(layer_name, res_layer) + self.res_layers.pop(last_stage_idx) + self.res_layers.insert(last_stage_idx, layer_name) + + self._freeze_stages() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/builder.py new file mode 100644 index 00000000..81c927e5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/builder.py @@ -0,0 +1,77 @@ +import warnings + +from mmcv.utils import Registry, build_from_cfg +from torch import nn + +BACKBONES = Registry('backbone') +NECKS = Registry('neck') +ROI_EXTRACTORS = Registry('roi_extractor') +SHARED_HEADS = Registry('shared_head') +HEADS = Registry('head') +LOSSES = Registry('loss') +DETECTORS = Registry('detector') + + +def build(cfg, registry, default_args=None): + """Build a module. + + Args: + cfg (dict, list[dict]): The config of modules, is is either a dict + or a list of configs. + registry (:obj:`Registry`): A registry the module belongs to. + default_args (dict, optional): Default arguments to build the module. + Defaults to None. + + Returns: + nn.Module: A built nn module. + """ + if isinstance(cfg, list): + modules = [ + build_from_cfg(cfg_, registry, default_args) for cfg_ in cfg + ] + return nn.Sequential(*modules) + else: + return build_from_cfg(cfg, registry, default_args) + + +def build_backbone(cfg): + """Build backbone.""" + return build(cfg, BACKBONES) + + +def build_neck(cfg): + """Build neck.""" + return build(cfg, NECKS) + + +def build_roi_extractor(cfg): + """Build roi extractor.""" + return build(cfg, ROI_EXTRACTORS) + + +def build_shared_head(cfg): + """Build shared head.""" + return build(cfg, SHARED_HEADS) + + +def build_head(cfg): + """Build head.""" + return build(cfg, HEADS) + + +def build_loss(cfg): + """Build loss.""" + return build(cfg, LOSSES) + + +def build_detector(cfg, train_cfg=None, test_cfg=None): + """Build detector.""" + if train_cfg is not None or test_cfg is not None: + warnings.warn( + 'train_cfg and test_cfg is deprecated, ' + 'please specify them in model', UserWarning) + assert cfg.get('train_cfg') is None or train_cfg is None, \ + 'train_cfg specified in both outer field and model field ' + assert cfg.get('test_cfg') is None or test_cfg is None, \ + 'test_cfg specified in both outer field and model field ' + return build(cfg, DETECTORS, dict(train_cfg=train_cfg, test_cfg=test_cfg)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/__init__.py new file mode 100644 index 00000000..4172cc09 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/__init__.py @@ -0,0 +1,40 @@ +from .anchor_free_head import AnchorFreeHead +from .anchor_head import AnchorHead +from .atss_head import ATSSHead +from .cascade_rpn_head import CascadeRPNHead, StageCascadeRPNHead +from .centripetal_head import CentripetalHead +from .corner_head import CornerHead +from .embedding_rpn_head import EmbeddingRPNHead +from .fcos_head import FCOSHead +from .fovea_head import FoveaHead +from .free_anchor_retina_head import FreeAnchorRetinaHead +from .fsaf_head import FSAFHead +from .ga_retina_head import GARetinaHead +from .ga_rpn_head import GARPNHead +from .gfl_head import GFLHead +from .guided_anchor_head import FeatureAdaption, GuidedAnchorHead +from .nasfcos_head import NASFCOSHead +from .paa_head import PAAHead +from .pisa_retinanet_head import PISARetinaHead +from .pisa_ssd_head import PISASSDHead +from .reppoints_head import RepPointsHead +from .retina_head import RetinaHead +from .retina_sepbn_head import RetinaSepBNHead +from .rpn_head import RPNHead +from .sabl_retina_head import SABLRetinaHead +from .ssd_head import SSDHead +from .transformer_head import TransformerHead +from .vfnet_head import VFNetHead +from .yolact_head import YOLACTHead, YOLACTProtonet, YOLACTSegmHead +from .yolo_head import YOLOV3Head + +__all__ = [ + 'AnchorFreeHead', 'AnchorHead', 'GuidedAnchorHead', 'FeatureAdaption', + 'RPNHead', 'GARPNHead', 'RetinaHead', 'RetinaSepBNHead', 'GARetinaHead', + 'SSDHead', 'FCOSHead', 'RepPointsHead', 'FoveaHead', + 'FreeAnchorRetinaHead', 'ATSSHead', 'FSAFHead', 'NASFCOSHead', + 'PISARetinaHead', 'PISASSDHead', 'GFLHead', 'CornerHead', 'YOLACTHead', + 'YOLACTSegmHead', 'YOLACTProtonet', 'YOLOV3Head', 'PAAHead', + 'SABLRetinaHead', 'CentripetalHead', 'VFNetHead', 'TransformerHead', + 'StageCascadeRPNHead', 'CascadeRPNHead', 'EmbeddingRPNHead' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_free_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_free_head.py new file mode 100644 index 00000000..917acde6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_free_head.py @@ -0,0 +1,340 @@ +from abc import abstractmethod + +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, bias_init_with_prob, normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import multi_apply +from ..builder import HEADS, build_loss +from .base_dense_head import BaseDenseHead +from .dense_test_mixins import BBoxTestMixin + + +@HEADS.register_module() +class AnchorFreeHead(BaseDenseHead, BBoxTestMixin): + """Anchor-free head (FCOS, Fovea, RepPoints, etc.). + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + feat_channels (int): Number of hidden channels. Used in child classes. + stacked_convs (int): Number of stacking convs of the head. + strides (tuple): Downsample factor of each feature map. + dcn_on_last_conv (bool): If true, use dcn in the last layer of + towers. Default: False. + conv_bias (bool | str): If specified as `auto`, it will be decided by + the norm_cfg. Bias of conv will be set as True if `norm_cfg` is + None, otherwise False. Default: "auto". + loss_cls (dict): Config of classification loss. + loss_bbox (dict): Config of localization loss. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Config dict for normalization layer. Default: None. + train_cfg (dict): Training config of anchor head. + test_cfg (dict): Testing config of anchor head. + """ # noqa: W605 + + _version = 1 + + def __init__(self, + num_classes, + in_channels, + feat_channels=256, + stacked_convs=4, + strides=(4, 8, 16, 32, 64), + dcn_on_last_conv=False, + conv_bias='auto', + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='IoULoss', loss_weight=1.0), + conv_cfg=None, + norm_cfg=None, + train_cfg=None, + test_cfg=None): + super(AnchorFreeHead, self).__init__() + self.num_classes = num_classes + self.cls_out_channels = num_classes + self.in_channels = in_channels + self.feat_channels = feat_channels + self.stacked_convs = stacked_convs + self.strides = strides + self.dcn_on_last_conv = dcn_on_last_conv + assert conv_bias == 'auto' or isinstance(conv_bias, bool) + self.conv_bias = conv_bias + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) + self.train_cfg = train_cfg + self.test_cfg = test_cfg + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.fp16_enabled = False + + self._init_layers() + + def _init_layers(self): + """Initialize layers of the head.""" + self._init_cls_convs() + self._init_reg_convs() + self._init_predictor() + + def _init_cls_convs(self): + """Initialize classification conv layers of the head.""" + self.cls_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + if self.dcn_on_last_conv and i == self.stacked_convs - 1: + conv_cfg = dict(type='DCNv2') + else: + conv_cfg = self.conv_cfg + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=conv_cfg, + norm_cfg=self.norm_cfg, + bias=self.conv_bias)) + + def _init_reg_convs(self): + """Initialize bbox regression conv layers of the head.""" + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + if self.dcn_on_last_conv and i == self.stacked_convs - 1: + conv_cfg = dict(type='DCNv2') + else: + conv_cfg = self.conv_cfg + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=conv_cfg, + norm_cfg=self.norm_cfg, + bias=self.conv_bias)) + + def _init_predictor(self): + """Initialize predictor layers of the head.""" + self.conv_cls = nn.Conv2d( + self.feat_channels, self.cls_out_channels, 3, padding=1) + self.conv_reg = nn.Conv2d(self.feat_channels, 4, 3, padding=1) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs: + if isinstance(m.conv, nn.Conv2d): + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + if isinstance(m.conv, nn.Conv2d): + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.conv_cls, std=0.01, bias=bias_cls) + normal_init(self.conv_reg, std=0.01) + + def _load_from_state_dict(self, state_dict, prefix, local_metadata, strict, + missing_keys, unexpected_keys, error_msgs): + """Hack some keys of the model state dict so that can load checkpoints + of previous version.""" + version = local_metadata.get('version', None) + if version is None: + # the key is different in early versions + # for example, 'fcos_cls' become 'conv_cls' now + bbox_head_keys = [ + k for k in state_dict.keys() if k.startswith(prefix) + ] + ori_predictor_keys = [] + new_predictor_keys = [] + # e.g. 'fcos_cls' or 'fcos_reg' + for key in bbox_head_keys: + ori_predictor_keys.append(key) + key = key.split('.') + conv_name = None + if key[1].endswith('cls'): + conv_name = 'conv_cls' + elif key[1].endswith('reg'): + conv_name = 'conv_reg' + elif key[1].endswith('centerness'): + conv_name = 'conv_centerness' + else: + assert NotImplementedError + if conv_name is not None: + key[1] = conv_name + new_predictor_keys.append('.'.join(key)) + else: + ori_predictor_keys.pop(-1) + for i in range(len(new_predictor_keys)): + state_dict[new_predictor_keys[i]] = state_dict.pop( + ori_predictor_keys[i]) + super()._load_from_state_dict(state_dict, prefix, local_metadata, + strict, missing_keys, unexpected_keys, + error_msgs) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: Usually contain classification scores and bbox predictions. + cls_scores (list[Tensor]): Box scores for each scale level, + each is a 4D-tensor, the channel number is + num_points * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level, each is a 4D-tensor, the channel number is + num_points * 4. + """ + return multi_apply(self.forward_single, feats)[:2] + + def forward_single(self, x): + """Forward features of a single scale levle. + + Args: + x (Tensor): FPN feature maps of the specified stride. + + Returns: + tuple: Scores for each class, bbox predictions, features + after classification and regression conv layers, some + models needs these features like FCOS. + """ + cls_feat = x + reg_feat = x + + for cls_layer in self.cls_convs: + cls_feat = cls_layer(cls_feat) + cls_score = self.conv_cls(cls_feat) + + for reg_layer in self.reg_convs: + reg_feat = reg_layer(reg_feat) + bbox_pred = self.conv_reg(reg_feat) + return cls_score, bbox_pred, cls_feat, reg_feat + + @abstractmethod + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute loss of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level, + each is a 4D-tensor, the channel number is + num_points * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level, each is a 4D-tensor, the channel number is + num_points * 4. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + """ + + raise NotImplementedError + + @abstractmethod + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def get_bboxes(self, + cls_scores, + bbox_preds, + img_metas, + cfg=None, + rescale=None): + """Transform network output for a batch into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_points * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_points * 4, H, W) + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used + rescale (bool): If True, return boxes in original image space + """ + + raise NotImplementedError + + @abstractmethod + def get_targets(self, points, gt_bboxes_list, gt_labels_list): + """Compute regression, classification and centerss targets for points + in multiple images. + + Args: + points (list[Tensor]): Points of each fpn level, each has shape + (num_points, 2). + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image, + each has shape (num_gt, 4). + gt_labels_list (list[Tensor]): Ground truth labels of each box, + each has shape (num_gt,). + """ + raise NotImplementedError + + def _get_points_single(self, + featmap_size, + stride, + dtype, + device, + flatten=False): + """Get points of a single scale level.""" + h, w = featmap_size + x_range = torch.arange(w, dtype=dtype, device=device) + y_range = torch.arange(h, dtype=dtype, device=device) + y, x = torch.meshgrid(y_range, x_range) + if flatten: + y = y.flatten() + x = x.flatten() + return y, x + + def get_points(self, featmap_sizes, dtype, device, flatten=False): + """Get points according to feature map sizes. + + Args: + featmap_sizes (list[tuple]): Multi-level feature map sizes. + dtype (torch.dtype): Type of points. + device (torch.device): Device of points. + + Returns: + tuple: points of each image. + """ + mlvl_points = [] + for i in range(len(featmap_sizes)): + mlvl_points.append( + self._get_points_single(featmap_sizes[i], self.strides[i], + dtype, device, flatten)) + return mlvl_points + + def aug_test(self, feats, img_metas, rescale=False): + """Test function with test time augmentation. + + Args: + feats (list[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains features for all images in the batch. + img_metas (list[list[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. each dict has image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[ndarray]: bbox results of each class + """ + return self.aug_test_bboxes(feats, img_metas, rescale=rescale) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_head.py new file mode 100644 index 00000000..d59f242a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/anchor_head.py @@ -0,0 +1,688 @@ +import torch +import torch.nn as nn +from mmcv.cnn import normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import (anchor_inside_flags, build_anchor_generator, + build_assigner, build_bbox_coder, build_sampler, + images_to_levels, multi_apply, multiclass_nms, unmap) +from ..builder import HEADS, build_loss +from .base_dense_head import BaseDenseHead +from .dense_test_mixins import BBoxTestMixin + + +@HEADS.register_module() +class AnchorHead(BaseDenseHead, BBoxTestMixin): + """Anchor-based head (RPN, RetinaNet, SSD, etc.). + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + feat_channels (int): Number of hidden channels. Used in child classes. + anchor_generator (dict): Config dict for anchor generator + bbox_coder (dict): Config of bounding box coder. + reg_decoded_bbox (bool): If true, the regression loss would be + applied directly on decoded bounding boxes, converting both + the predicted boxes and regression targets to absolute + coordinates format. Default False. It should be `True` when + using `IoULoss`, `GIoULoss`, or `DIoULoss` in the bbox head. + loss_cls (dict): Config of classification loss. + loss_bbox (dict): Config of localization loss. + train_cfg (dict): Training config of anchor head. + test_cfg (dict): Testing config of anchor head. + """ # noqa: W605 + + def __init__(self, + num_classes, + in_channels, + feat_channels=256, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8, 16, 32], + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + clip_border=True, + target_means=(.0, .0, .0, .0), + target_stds=(1.0, 1.0, 1.0, 1.0)), + reg_decoded_bbox=False, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0), + train_cfg=None, + test_cfg=None): + super(AnchorHead, self).__init__() + self.in_channels = in_channels + self.num_classes = num_classes + self.feat_channels = feat_channels + self.use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + # TODO better way to determine whether sample or not + self.sampling = loss_cls['type'] not in [ + 'FocalLoss', 'GHMC', 'QualityFocalLoss' + ] + if self.use_sigmoid_cls: + self.cls_out_channels = num_classes + else: + self.cls_out_channels = num_classes + 1 + + if self.cls_out_channels <= 0: + raise ValueError(f'num_classes={num_classes} is too small') + self.reg_decoded_bbox = reg_decoded_bbox + + self.bbox_coder = build_bbox_coder(bbox_coder) + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) + self.train_cfg = train_cfg + self.test_cfg = test_cfg + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # use PseudoSampler when sampling is False + if self.sampling and hasattr(self.train_cfg, 'sampler'): + sampler_cfg = self.train_cfg.sampler + else: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + self.fp16_enabled = False + + self.anchor_generator = build_anchor_generator(anchor_generator) + # usually the numbers of anchors for each level are the same + # except SSD detectors + self.num_anchors = self.anchor_generator.num_base_anchors[0] + self._init_layers() + + def _init_layers(self): + """Initialize layers of the head.""" + self.conv_cls = nn.Conv2d(self.in_channels, + self.num_anchors * self.cls_out_channels, 1) + self.conv_reg = nn.Conv2d(self.in_channels, self.num_anchors * 4, 1) + + def init_weights(self): + """Initialize weights of the head.""" + normal_init(self.conv_cls, std=0.01) + normal_init(self.conv_reg, std=0.01) + + def forward_single(self, x): + """Forward feature of a single scale level. + + Args: + x (Tensor): Features of a single scale level. + + Returns: + tuple: + cls_score (Tensor): Cls scores for a single scale level \ + the channels number is num_anchors * num_classes. + bbox_pred (Tensor): Box energies / deltas for a single scale \ + level, the channels number is num_anchors * 4. + """ + cls_score = self.conv_cls(x) + bbox_pred = self.conv_reg(x) + return cls_score, bbox_pred + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: A tuple of classification scores and bbox prediction. + + - cls_scores (list[Tensor]): Classification scores for all \ + scale levels, each is a 4D-tensor, the channels number \ + is num_anchors * num_classes. + - bbox_preds (list[Tensor]): Box energies / deltas for all \ + scale levels, each is a 4D-tensor, the channels number \ + is num_anchors * 4. + """ + return multi_apply(self.forward_single, feats) + + def get_anchors(self, featmap_sizes, img_metas, device='cuda'): + """Get anchors according to feature map sizes. + + Args: + featmap_sizes (list[tuple]): Multi-level feature map sizes. + img_metas (list[dict]): Image meta info. + device (torch.device | str): Device for returned tensors + + Returns: + tuple: + anchor_list (list[Tensor]): Anchors of each image. + valid_flag_list (list[Tensor]): Valid flags of each image. + """ + num_imgs = len(img_metas) + + # since feature map sizes of all images are the same, we only compute + # anchors for one time + multi_level_anchors = self.anchor_generator.grid_anchors( + featmap_sizes, device) + anchor_list = [multi_level_anchors for _ in range(num_imgs)] + + # for each image, we compute valid flags of multi level anchors + valid_flag_list = [] + for img_id, img_meta in enumerate(img_metas): + multi_level_flags = self.anchor_generator.valid_flags( + featmap_sizes, img_meta['pad_shape'], device) + valid_flag_list.append(multi_level_flags) + + return anchor_list, valid_flag_list + + def _get_targets_single(self, + flat_anchors, + valid_flags, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=1, + unmap_outputs=True): + """Compute regression and classification targets for anchors in a + single image. + + Args: + flat_anchors (Tensor): Multi-level anchors of the image, which are + concatenated into a single tensor of shape (num_anchors ,4) + valid_flags (Tensor): Multi level valid flags of the image, + which are concatenated into a single tensor of + shape (num_anchors,). + gt_bboxes (Tensor): Ground truth bboxes of the image, + shape (num_gts, 4). + img_meta (dict): Meta info of the image. + gt_bboxes_ignore (Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + img_meta (dict): Meta info of the image. + gt_labels (Tensor): Ground truth labels of each box, + shape (num_gts,). + label_channels (int): Channel of label. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: + labels_list (list[Tensor]): Labels of each level + label_weights_list (list[Tensor]): Label weights of each level + bbox_targets_list (list[Tensor]): BBox targets of each level + bbox_weights_list (list[Tensor]): BBox weights of each level + num_total_pos (int): Number of positive samples in all images + num_total_neg (int): Number of negative samples in all images + """ + inside_flags = anchor_inside_flags(flat_anchors, valid_flags, + img_meta['img_shape'][:2], + self.train_cfg.allowed_border) + if not inside_flags.any(): + return (None, ) * 7 + # assign gt and sample anchors + anchors = flat_anchors[inside_flags, :] + + assign_result = self.assigner.assign( + anchors, gt_bboxes, gt_bboxes_ignore, + None if self.sampling else gt_labels) + sampling_result = self.sampler.sample(assign_result, anchors, + gt_bboxes) + + num_valid_anchors = anchors.shape[0] + bbox_targets = torch.zeros_like(anchors) + bbox_weights = torch.zeros_like(anchors) + labels = anchors.new_full((num_valid_anchors, ), + self.num_classes, + dtype=torch.long) + label_weights = anchors.new_zeros(num_valid_anchors, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + if not self.reg_decoded_bbox: + pos_bbox_targets = self.bbox_coder.encode( + sampling_result.pos_bboxes, sampling_result.pos_gt_bboxes) + else: + pos_bbox_targets = sampling_result.pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1.0 + if gt_labels is None: + # Only rpn gives gt_labels as None + # Foreground is the first class since v2.5.0 + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg.pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg.pos_weight + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + # map up to original set of anchors + if unmap_outputs: + num_total_anchors = flat_anchors.size(0) + labels = unmap( + labels, num_total_anchors, inside_flags, + fill=self.num_classes) # fill bg label + label_weights = unmap(label_weights, num_total_anchors, + inside_flags) + bbox_targets = unmap(bbox_targets, num_total_anchors, inside_flags) + bbox_weights = unmap(bbox_weights, num_total_anchors, inside_flags) + + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + neg_inds, sampling_result) + + def get_targets(self, + anchor_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=1, + unmap_outputs=True, + return_sampling_results=False): + """Compute regression and classification targets for anchors in + multiple images. + + Args: + anchor_list (list[list[Tensor]]): Multi level anchors of each + image. The outer list indicates images, and the inner list + corresponds to feature levels of the image. Each element of + the inner list is a tensor of shape (num_anchors, 4). + valid_flag_list (list[list[Tensor]]): Multi level valid flags of + each image. The outer list indicates images, and the inner list + corresponds to feature levels of the image. Each element of + the inner list is a tensor of shape (num_anchors, ) + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image. + img_metas (list[dict]): Meta info of each image. + gt_bboxes_ignore_list (list[Tensor]): Ground truth bboxes to be + ignored. + gt_labels_list (list[Tensor]): Ground truth labels of each box. + label_channels (int): Channel of label. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: Usually returns a tuple containing learning targets. + + - labels_list (list[Tensor]): Labels of each level. + - label_weights_list (list[Tensor]): Label weights of each \ + level. + - bbox_targets_list (list[Tensor]): BBox targets of each level. + - bbox_weights_list (list[Tensor]): BBox weights of each level. + - num_total_pos (int): Number of positive samples in all \ + images. + - num_total_neg (int): Number of negative samples in all \ + images. + additional_returns: This function enables user-defined returns from + `self._get_targets_single`. These returns are currently refined + to properties at each feature map (i.e. having HxW dimension). + The results will be concatenated after the end + """ + num_imgs = len(img_metas) + assert len(anchor_list) == len(valid_flag_list) == num_imgs + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + # concat all level anchors to a single tensor + concat_anchor_list = [] + concat_valid_flag_list = [] + for i in range(num_imgs): + assert len(anchor_list[i]) == len(valid_flag_list[i]) + concat_anchor_list.append(torch.cat(anchor_list[i])) + concat_valid_flag_list.append(torch.cat(valid_flag_list[i])) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + results = multi_apply( + self._get_targets_single, + concat_anchor_list, + concat_valid_flag_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + img_metas, + label_channels=label_channels, + unmap_outputs=unmap_outputs) + (all_labels, all_label_weights, all_bbox_targets, all_bbox_weights, + pos_inds_list, neg_inds_list, sampling_results_list) = results[:7] + rest_results = list(results[7:]) # user-added return values + # no valid anchors + if any([labels is None for labels in all_labels]): + return None + # sampled anchors of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + # split targets to a list w.r.t. multiple levels + labels_list = images_to_levels(all_labels, num_level_anchors) + label_weights_list = images_to_levels(all_label_weights, + num_level_anchors) + bbox_targets_list = images_to_levels(all_bbox_targets, + num_level_anchors) + bbox_weights_list = images_to_levels(all_bbox_weights, + num_level_anchors) + res = (labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, num_total_pos, num_total_neg) + if return_sampling_results: + res = res + (sampling_results_list, ) + for i, r in enumerate(rest_results): # user-added return values + rest_results[i] = images_to_levels(r, num_level_anchors) + + return res + tuple(rest_results) + + def loss_single(self, cls_score, bbox_pred, anchors, labels, label_weights, + bbox_targets, bbox_weights, num_total_samples): + """Compute loss of a single scale level. + + Args: + cls_score (Tensor): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W). + bbox_pred (Tensor): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W). + anchors (Tensor): Box reference for each scale level with shape + (N, num_total_anchors, 4). + labels (Tensor): Labels of each anchors with shape + (N, num_total_anchors). + label_weights (Tensor): Label weights of each anchor with shape + (N, num_total_anchors) + bbox_targets (Tensor): BBox regression targets of each anchor wight + shape (N, num_total_anchors, 4). + bbox_weights (Tensor): BBox regression loss weights of each anchor + with shape (N, num_total_anchors, 4). + num_total_samples (int): If sampling, num total samples equal to + the number of total anchors; Otherwise, it is the number of + positive anchors. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + # classification loss + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + cls_score = cls_score.permute(0, 2, 3, + 1).reshape(-1, self.cls_out_channels) + loss_cls = self.loss_cls( + cls_score, labels, label_weights, avg_factor=num_total_samples) + # regression loss + bbox_targets = bbox_targets.reshape(-1, 4) + bbox_weights = bbox_weights.reshape(-1, 4) + bbox_pred = bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) + if self.reg_decoded_bbox: + # When the regression loss (e.g. `IouLoss`, `GIouLoss`) + # is applied directly on the decoded bounding boxes, it + # decodes the already encoded coordinates to absolute format. + anchors = anchors.reshape(-1, 4) + bbox_pred = self.bbox_coder.decode(anchors, bbox_pred) + loss_bbox = self.loss_bbox( + bbox_pred, + bbox_targets, + bbox_weights, + avg_factor=num_total_samples) + return loss_cls, loss_bbox + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. Default: None + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + num_total_samples = ( + num_total_pos + num_total_neg if self.sampling else num_total_pos) + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + # concat all level anchors and flags to a single tensor + concat_anchor_list = [] + for i in range(len(anchor_list)): + concat_anchor_list.append(torch.cat(anchor_list[i])) + all_anchor_list = images_to_levels(concat_anchor_list, + num_level_anchors) + + losses_cls, losses_bbox = multi_apply( + self.loss_single, + cls_scores, + bbox_preds, + all_anchor_list, + labels_list, + label_weights_list, + bbox_targets_list, + bbox_weights_list, + num_total_samples=num_total_samples) + return dict(loss_cls=losses_cls, loss_bbox=losses_bbox) + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def get_bboxes(self, + cls_scores, + bbox_preds, + img_metas, + cfg=None, + rescale=False, + with_nms=True): + """Transform network output for a batch into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + list[tuple[Tensor, Tensor]]: Each item in result_list is 2-tuple. + The first item is an (n, 5) tensor, where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. The second item is a + (n,) tensor where each item is the predicted class labelof the + corresponding box. + + Example: + >>> import mmcv + >>> self = AnchorHead( + >>> num_classes=9, + >>> in_channels=1, + >>> anchor_generator=dict( + >>> type='AnchorGenerator', + >>> scales=[8], + >>> ratios=[0.5, 1.0, 2.0], + >>> strides=[4,])) + >>> img_metas = [{'img_shape': (32, 32, 3), 'scale_factor': 1}] + >>> cfg = mmcv.Config(dict( + >>> score_thr=0.00, + >>> nms=dict(type='nms', iou_thr=1.0), + >>> max_per_img=10)) + >>> feat = torch.rand(1, 1, 3, 3) + >>> cls_score, bbox_pred = self.forward_single(feat) + >>> # note the input lists are over different levels, not images + >>> cls_scores, bbox_preds = [cls_score], [bbox_pred] + >>> result_list = self.get_bboxes(cls_scores, bbox_preds, + >>> img_metas, cfg) + >>> det_bboxes, det_labels = result_list[0] + >>> assert len(result_list) == 1 + >>> assert det_bboxes.shape[1] == 5 + >>> assert len(det_bboxes) == len(det_labels) == cfg.max_per_img + """ + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + + device = cls_scores[0].device + featmap_sizes = [cls_scores[i].shape[-2:] for i in range(num_levels)] + mlvl_anchors = self.anchor_generator.grid_anchors( + featmap_sizes, device=device) + + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + if with_nms: + # some heads don't support with_nms argument + proposals = self._get_bboxes_single(cls_score_list, + bbox_pred_list, + mlvl_anchors, img_shape, + scale_factor, cfg, rescale) + else: + proposals = self._get_bboxes_single(cls_score_list, + bbox_pred_list, + mlvl_anchors, img_shape, + scale_factor, cfg, rescale, + with_nms) + result_list.append(proposals) + return result_list + + def _get_bboxes_single(self, + cls_score_list, + bbox_pred_list, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into bbox predictions. + + Args: + cls_score_list (list[Tensor]): Box scores for a single scale level + Has shape (num_anchors * num_classes, H, W). + bbox_pred_list (list[Tensor]): Box energies / deltas for a single + scale level with shape (num_anchors * 4, H, W). + mlvl_anchors (list[Tensor]): Box reference for a single scale level + with shape (num_total_anchors, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + Tensor: Labeled boxes in shape (n, 5), where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_score_list) == len(bbox_pred_list) == len(mlvl_anchors) + mlvl_bboxes = [] + mlvl_scores = [] + for cls_score, bbox_pred, anchors in zip(cls_score_list, + bbox_pred_list, mlvl_anchors): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) + if self.use_sigmoid_cls: + scores = cls_score.sigmoid() + else: + scores = cls_score.softmax(-1) + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + # Get maximum scores for foreground classes. + if self.use_sigmoid_cls: + max_scores, _ = scores.max(dim=1) + else: + # remind that we set FG labels to [0, num_class-1] + # since mmdet v2.0 + # BG cat_id: num_class + max_scores, _ = scores[:, :-1].max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + bboxes = self.bbox_coder.decode( + anchors, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + if self.use_sigmoid_cls: + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + + if with_nms: + det_bboxes, det_labels = multiclass_nms(mlvl_bboxes, mlvl_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + return det_bboxes, det_labels + else: + return mlvl_bboxes, mlvl_scores + + def aug_test(self, feats, img_metas, rescale=False): + """Test function with test time augmentation. + + Args: + feats (list[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains features for all images in the batch. + img_metas (list[list[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. each dict has image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[ndarray]: bbox results of each class + """ + return self.aug_test_bboxes(feats, img_metas, rescale=rescale) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/atss_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/atss_head.py new file mode 100644 index 00000000..e96ea7ff --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/atss_head.py @@ -0,0 +1,651 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, Scale, bias_init_with_prob, normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import (anchor_inside_flags, build_assigner, build_sampler, + images_to_levels, multi_apply, multiclass_nms, + reduce_mean, unmap) +from ..builder import HEADS, build_loss +from .anchor_head import AnchorHead + +EPS = 1e-12 + + +@HEADS.register_module() +class ATSSHead(AnchorHead): + """Bridging the Gap Between Anchor-based and Anchor-free Detection via + Adaptive Training Sample Selection. + + ATSS head structure is similar with FCOS, however ATSS use anchor boxes + and assign label by Adaptive Training Sample Selection instead max-iou. + + https://arxiv.org/abs/1912.02424 + """ + + def __init__(self, + num_classes, + in_channels, + stacked_convs=4, + conv_cfg=None, + norm_cfg=dict(type='GN', num_groups=32, requires_grad=True), + loss_centerness=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + **kwargs): + self.stacked_convs = stacked_convs + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + super(ATSSHead, self).__init__(num_classes, in_channels, **kwargs) + + self.sampling = False + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # SSD sampling=False so use PseudoSampler + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + self.loss_centerness = build_loss(loss_centerness) + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.atss_cls = nn.Conv2d( + self.feat_channels, + self.num_anchors * self.cls_out_channels, + 3, + padding=1) + self.atss_reg = nn.Conv2d( + self.feat_channels, self.num_anchors * 4, 3, padding=1) + self.atss_centerness = nn.Conv2d( + self.feat_channels, self.num_anchors * 1, 3, padding=1) + self.scales = nn.ModuleList( + [Scale(1.0) for _ in self.anchor_generator.strides]) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs: + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.atss_cls, std=0.01, bias=bias_cls) + normal_init(self.atss_reg, std=0.01) + normal_init(self.atss_centerness, std=0.01) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: Usually a tuple of classification scores and bbox prediction + cls_scores (list[Tensor]): Classification scores for all scale + levels, each is a 4D-tensor, the channels number is + num_anchors * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for all scale + levels, each is a 4D-tensor, the channels number is + num_anchors * 4. + """ + return multi_apply(self.forward_single, feats, self.scales) + + def forward_single(self, x, scale): + """Forward feature of a single scale level. + + Args: + x (Tensor): Features of a single scale level. + scale (:obj: `mmcv.cnn.Scale`): Learnable scale module to resize + the bbox prediction. + + Returns: + tuple: + cls_score (Tensor): Cls scores for a single scale level + the channels number is num_anchors * num_classes. + bbox_pred (Tensor): Box energies / deltas for a single scale + level, the channels number is num_anchors * 4. + centerness (Tensor): Centerness for a single scale level, the + channel number is (N, num_anchors * 1, H, W). + """ + cls_feat = x + reg_feat = x + for cls_conv in self.cls_convs: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs: + reg_feat = reg_conv(reg_feat) + cls_score = self.atss_cls(cls_feat) + # we just follow atss, not apply exp in bbox_pred + bbox_pred = scale(self.atss_reg(reg_feat)).float() + centerness = self.atss_centerness(reg_feat) + return cls_score, bbox_pred, centerness + + def loss_single(self, anchors, cls_score, bbox_pred, centerness, labels, + label_weights, bbox_targets, num_total_samples): + """Compute loss of a single scale level. + + Args: + cls_score (Tensor): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W). + bbox_pred (Tensor): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W). + anchors (Tensor): Box reference for each scale level with shape + (N, num_total_anchors, 4). + labels (Tensor): Labels of each anchors with shape + (N, num_total_anchors). + label_weights (Tensor): Label weights of each anchor with shape + (N, num_total_anchors) + bbox_targets (Tensor): BBox regression targets of each anchor wight + shape (N, num_total_anchors, 4). + num_total_samples (int): Number os positive samples that is + reduced over all GPUs. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + + anchors = anchors.reshape(-1, 4) + cls_score = cls_score.permute(0, 2, 3, 1).reshape( + -1, self.cls_out_channels).contiguous() + bbox_pred = bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) + centerness = centerness.permute(0, 2, 3, 1).reshape(-1) + bbox_targets = bbox_targets.reshape(-1, 4) + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + + # classification loss + loss_cls = self.loss_cls( + cls_score, labels, label_weights, avg_factor=num_total_samples) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + bg_class_ind = self.num_classes + pos_inds = ((labels >= 0) + & (labels < bg_class_ind)).nonzero().squeeze(1) + + if len(pos_inds) > 0: + pos_bbox_targets = bbox_targets[pos_inds] + pos_bbox_pred = bbox_pred[pos_inds] + pos_anchors = anchors[pos_inds] + pos_centerness = centerness[pos_inds] + + centerness_targets = self.centerness_target( + pos_anchors, pos_bbox_targets) + pos_decode_bbox_pred = self.bbox_coder.decode( + pos_anchors, pos_bbox_pred) + pos_decode_bbox_targets = self.bbox_coder.decode( + pos_anchors, pos_bbox_targets) + + # regression loss + loss_bbox = self.loss_bbox( + pos_decode_bbox_pred, + pos_decode_bbox_targets, + weight=centerness_targets, + avg_factor=1.0) + + # centerness loss + loss_centerness = self.loss_centerness( + pos_centerness, + centerness_targets, + avg_factor=num_total_samples) + + else: + loss_bbox = bbox_pred.sum() * 0 + loss_centerness = centerness.sum() * 0 + centerness_targets = bbox_targets.new_tensor(0.) + + return loss_cls, loss_bbox, loss_centerness, centerness_targets.sum() + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'centernesses')) + def loss(self, + cls_scores, + bbox_preds, + centernesses, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + centernesses (list[Tensor]): Centerness for each scale + level with shape (N, num_anchors * 1, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor] | None): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels) + if cls_reg_targets is None: + return None + + (anchor_list, labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, num_total_pos, num_total_neg) = cls_reg_targets + + num_total_samples = reduce_mean( + torch.tensor(num_total_pos, dtype=torch.float, + device=device)).item() + num_total_samples = max(num_total_samples, 1.0) + + losses_cls, losses_bbox, loss_centerness,\ + bbox_avg_factor = multi_apply( + self.loss_single, + anchor_list, + cls_scores, + bbox_preds, + centernesses, + labels_list, + label_weights_list, + bbox_targets_list, + num_total_samples=num_total_samples) + + bbox_avg_factor = sum(bbox_avg_factor) + bbox_avg_factor = reduce_mean(bbox_avg_factor).item() + if bbox_avg_factor < EPS: + bbox_avg_factor = 1 + losses_bbox = list(map(lambda x: x / bbox_avg_factor, losses_bbox)) + return dict( + loss_cls=losses_cls, + loss_bbox=losses_bbox, + loss_centerness=loss_centerness) + + def centerness_target(self, anchors, bbox_targets): + # only calculate pos centerness targets, otherwise there may be nan + gts = self.bbox_coder.decode(anchors, bbox_targets) + anchors_cx = (anchors[:, 2] + anchors[:, 0]) / 2 + anchors_cy = (anchors[:, 3] + anchors[:, 1]) / 2 + l_ = anchors_cx - gts[:, 0] + t_ = anchors_cy - gts[:, 1] + r_ = gts[:, 2] - anchors_cx + b_ = gts[:, 3] - anchors_cy + + left_right = torch.stack([l_, r_], dim=1) + top_bottom = torch.stack([t_, b_], dim=1) + centerness = torch.sqrt( + (left_right.min(dim=-1)[0] / left_right.max(dim=-1)[0]) * + (top_bottom.min(dim=-1)[0] / top_bottom.max(dim=-1)[0])) + assert not torch.isnan(centerness).any() + return centerness + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'centernesses')) + def get_bboxes(self, + cls_scores, + bbox_preds, + centernesses, + img_metas, + cfg=None, + rescale=False, + with_nms=True): + """Transform network output for a batch into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + with shape (N, num_anchors * num_classes, H, W). + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W). + centernesses (list[Tensor]): Centerness for each scale level with + shape (N, num_anchors * 1, H, W). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. Default: None. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + list[tuple[Tensor, Tensor]]: Each item in result_list is 2-tuple. + The first item is an (n, 5) tensor, where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. The second item is a + (n,) tensor where each item is the predicted class label of the + corresponding box. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + device = cls_scores[0].device + featmap_sizes = [cls_scores[i].shape[-2:] for i in range(num_levels)] + mlvl_anchors = self.anchor_generator.grid_anchors( + featmap_sizes, device=device) + + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + centerness_pred_list = [ + centernesses[i][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self._get_bboxes_single(cls_score_list, bbox_pred_list, + centerness_pred_list, + mlvl_anchors, img_shape, + scale_factor, cfg, rescale, + with_nms) + result_list.append(proposals) + return result_list + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + centernesses, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into labeled boxes. + + Args: + cls_scores (list[Tensor]): Box scores for a single scale level + with shape (num_anchors * num_classes, H, W). + bbox_preds (list[Tensor]): Box energies / deltas for a single + scale level with shape (num_anchors * 4, H, W). + centernesses (list[Tensor]): Centerness for a single scale level + with shape (num_anchors * 1, H, W). + mlvl_anchors (list[Tensor]): Box reference for a single scale level + with shape (num_total_anchors, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arrange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + tuple(Tensor): + det_bboxes (Tensor): BBox predictions in shape (n, 5), where + the first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score + between 0 and 1. + det_labels (Tensor): A (n,) tensor where each item is the + predicted class label of the corresponding box. + """ + assert len(cls_scores) == len(bbox_preds) == len(mlvl_anchors) + mlvl_bboxes = [] + mlvl_scores = [] + mlvl_centerness = [] + for cls_score, bbox_pred, centerness, anchors in zip( + cls_scores, bbox_preds, centernesses, mlvl_anchors): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + + scores = cls_score.permute(1, 2, 0).reshape( + -1, self.cls_out_channels).sigmoid() + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + centerness = centerness.permute(1, 2, 0).reshape(-1).sigmoid() + + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + max_scores, _ = (scores * centerness[:, None]).max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + centerness = centerness[topk_inds] + + bboxes = self.bbox_coder.decode( + anchors, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_centerness.append(centerness) + + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + mlvl_centerness = torch.cat(mlvl_centerness) + + if with_nms: + det_bboxes, det_labels = multiclass_nms( + mlvl_bboxes, + mlvl_scores, + cfg.score_thr, + cfg.nms, + cfg.max_per_img, + score_factors=mlvl_centerness) + return det_bboxes, det_labels + else: + return mlvl_bboxes, mlvl_scores, mlvl_centerness + + def get_targets(self, + anchor_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=1, + unmap_outputs=True): + """Get targets for ATSS head. + + This method is almost the same as `AnchorHead.get_targets()`. Besides + returning the targets as the parent method does, it also returns the + anchors as the first element of the returned tuple. + """ + num_imgs = len(img_metas) + assert len(anchor_list) == len(valid_flag_list) == num_imgs + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + num_level_anchors_list = [num_level_anchors] * num_imgs + + # concat all level anchors and flags to a single tensor + for i in range(num_imgs): + assert len(anchor_list[i]) == len(valid_flag_list[i]) + anchor_list[i] = torch.cat(anchor_list[i]) + valid_flag_list[i] = torch.cat(valid_flag_list[i]) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + (all_anchors, all_labels, all_label_weights, all_bbox_targets, + all_bbox_weights, pos_inds_list, neg_inds_list) = multi_apply( + self._get_target_single, + anchor_list, + valid_flag_list, + num_level_anchors_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + img_metas, + label_channels=label_channels, + unmap_outputs=unmap_outputs) + # no valid anchors + if any([labels is None for labels in all_labels]): + return None + # sampled anchors of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + # split targets to a list w.r.t. multiple levels + anchors_list = images_to_levels(all_anchors, num_level_anchors) + labels_list = images_to_levels(all_labels, num_level_anchors) + label_weights_list = images_to_levels(all_label_weights, + num_level_anchors) + bbox_targets_list = images_to_levels(all_bbox_targets, + num_level_anchors) + bbox_weights_list = images_to_levels(all_bbox_weights, + num_level_anchors) + return (anchors_list, labels_list, label_weights_list, + bbox_targets_list, bbox_weights_list, num_total_pos, + num_total_neg) + + def _get_target_single(self, + flat_anchors, + valid_flags, + num_level_anchors, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=1, + unmap_outputs=True): + """Compute regression, classification targets for anchors in a single + image. + + Args: + flat_anchors (Tensor): Multi-level anchors of the image, which are + concatenated into a single tensor of shape (num_anchors ,4) + valid_flags (Tensor): Multi level valid flags of the image, + which are concatenated into a single tensor of + shape (num_anchors,). + num_level_anchors Tensor): Number of anchors of each scale level. + gt_bboxes (Tensor): Ground truth bboxes of the image, + shape (num_gts, 4). + gt_bboxes_ignore (Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + gt_labels (Tensor): Ground truth labels of each box, + shape (num_gts,). + img_meta (dict): Meta info of the image. + label_channels (int): Channel of label. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: N is the number of total anchors in the image. + labels (Tensor): Labels of all anchors in the image with shape + (N,). + label_weights (Tensor): Label weights of all anchor in the + image with shape (N,). + bbox_targets (Tensor): BBox targets of all anchors in the + image with shape (N, 4). + bbox_weights (Tensor): BBox weights of all anchors in the + image with shape (N, 4) + pos_inds (Tensor): Indices of postive anchor with shape + (num_pos,). + neg_inds (Tensor): Indices of negative anchor with shape + (num_neg,). + """ + inside_flags = anchor_inside_flags(flat_anchors, valid_flags, + img_meta['img_shape'][:2], + self.train_cfg.allowed_border) + if not inside_flags.any(): + return (None, ) * 7 + # assign gt and sample anchors + anchors = flat_anchors[inside_flags, :] + + num_level_anchors_inside = self.get_num_level_anchors_inside( + num_level_anchors, inside_flags) + assign_result = self.assigner.assign(anchors, num_level_anchors_inside, + gt_bboxes, gt_bboxes_ignore, + gt_labels) + + sampling_result = self.sampler.sample(assign_result, anchors, + gt_bboxes) + + num_valid_anchors = anchors.shape[0] + bbox_targets = torch.zeros_like(anchors) + bbox_weights = torch.zeros_like(anchors) + labels = anchors.new_full((num_valid_anchors, ), + self.num_classes, + dtype=torch.long) + label_weights = anchors.new_zeros(num_valid_anchors, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + if hasattr(self, 'bbox_coder'): + pos_bbox_targets = self.bbox_coder.encode( + sampling_result.pos_bboxes, sampling_result.pos_gt_bboxes) + else: + # used in VFNetHead + pos_bbox_targets = sampling_result.pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1.0 + if gt_labels is None: + # Only rpn gives gt_labels as None + # Foreground is the first class since v2.5.0 + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg.pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg.pos_weight + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + # map up to original set of anchors + if unmap_outputs: + num_total_anchors = flat_anchors.size(0) + anchors = unmap(anchors, num_total_anchors, inside_flags) + labels = unmap( + labels, num_total_anchors, inside_flags, fill=self.num_classes) + label_weights = unmap(label_weights, num_total_anchors, + inside_flags) + bbox_targets = unmap(bbox_targets, num_total_anchors, inside_flags) + bbox_weights = unmap(bbox_weights, num_total_anchors, inside_flags) + + return (anchors, labels, label_weights, bbox_targets, bbox_weights, + pos_inds, neg_inds) + + def get_num_level_anchors_inside(self, num_level_anchors, inside_flags): + split_inside_flags = torch.split(inside_flags, num_level_anchors) + num_level_anchors_inside = [ + int(flags.sum()) for flags in split_inside_flags + ] + return num_level_anchors_inside diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/base_dense_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/base_dense_head.py new file mode 100644 index 00000000..de11e4a2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/base_dense_head.py @@ -0,0 +1,59 @@ +from abc import ABCMeta, abstractmethod + +import torch.nn as nn + + +class BaseDenseHead(nn.Module, metaclass=ABCMeta): + """Base class for DenseHeads.""" + + def __init__(self): + super(BaseDenseHead, self).__init__() + + @abstractmethod + def loss(self, **kwargs): + """Compute losses of the head.""" + pass + + @abstractmethod + def get_bboxes(self, **kwargs): + """Transform network output for a batch into bbox predictions.""" + pass + + def forward_train(self, + x, + img_metas, + gt_bboxes, + gt_labels=None, + gt_bboxes_ignore=None, + proposal_cfg=None, + **kwargs): + """ + Args: + x (list[Tensor]): Features from FPN. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes (Tensor): Ground truth bboxes of the image, + shape (num_gts, 4). + gt_labels (Tensor): Ground truth labels of each box, + shape (num_gts,). + gt_bboxes_ignore (Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + proposal_cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used + + Returns: + tuple: + losses: (dict[str, Tensor]): A dictionary of loss components. + proposal_list (list[Tensor]): Proposals of each image. + """ + outs = self(x) + if gt_labels is None: + loss_inputs = outs + (gt_bboxes, img_metas) + else: + loss_inputs = outs + (gt_bboxes, gt_labels, img_metas) + losses = self.loss(*loss_inputs, gt_bboxes_ignore=gt_bboxes_ignore) + if proposal_cfg is None: + return losses + else: + proposal_list = self.get_bboxes(*outs, img_metas, cfg=proposal_cfg) + return losses, proposal_list diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/cascade_rpn_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/cascade_rpn_head.py new file mode 100644 index 00000000..c01d048c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/cascade_rpn_head.py @@ -0,0 +1,654 @@ +from __future__ import division + +import torch +import torch.nn as nn +from mmcv.cnn import normal_init +from mmcv.ops import DeformConv2d + +from mmdet.core import (RegionAssigner, build_assigner, build_sampler, + images_to_levels, multi_apply) +from ..builder import HEADS, build_head +from .base_dense_head import BaseDenseHead +from .rpn_head import RPNHead + + +class AdaptiveConv(nn.Module): + """AdaptiveConv used to adapt the sampling location with the anchors. + + Args: + in_channels (int): Number of channels in the input image + out_channels (int): Number of channels produced by the convolution + kernel_size (int or tuple): Size of the conv kernel. Default: 3 + stride (int or tuple, optional): Stride of the convolution. Default: 1 + padding (int or tuple, optional): Zero-padding added to both sides of + the input. Default: 1 + dilation (int or tuple, optional): Spacing between kernel elements. + Default: 3 + groups (int, optional): Number of blocked connections from input + channels to output channels. Default: 1 + bias (bool, optional): If set True, adds a learnable bias to the + output. Default: False. + type (str, optional): Type of adaptive conv, can be either 'offset' + (arbitrary anchors) or 'dilation' (uniform anchor). + Default: 'dilation'. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + dilation=3, + groups=1, + bias=False, + type='dilation'): + super(AdaptiveConv, self).__init__() + assert type in ['offset', 'dilation'] + self.adapt_type = type + + assert kernel_size == 3, 'Adaptive conv only supports kernels 3' + if self.adapt_type == 'offset': + assert stride == 1 and padding == 1 and groups == 1, \ + 'Addptive conv offset mode only supports padding: {1}, ' \ + f'stride: {1}, groups: {1}' + self.conv = DeformConv2d( + in_channels, + out_channels, + kernel_size, + padding=padding, + stride=stride, + groups=groups, + bias=bias) + else: + self.conv = nn.Conv2d( + in_channels, + out_channels, + kernel_size, + padding=dilation, + dilation=dilation) + + def init_weights(self): + """Init weights.""" + normal_init(self.conv, std=0.01) + + def forward(self, x, offset): + """Forward function.""" + if self.adapt_type == 'offset': + N, _, H, W = x.shape + assert offset is not None + assert H * W == offset.shape[1] + # reshape [N, NA, 18] to (N, 18, H, W) + offset = offset.permute(0, 2, 1).reshape(N, -1, H, W) + offset = offset.contiguous() + x = self.conv(x, offset) + else: + assert offset is None + x = self.conv(x) + return x + + +@HEADS.register_module() +class StageCascadeRPNHead(RPNHead): + """Stage of CascadeRPNHead. + + Args: + in_channels (int): Number of channels in the input feature map. + anchor_generator (dict): anchor generator config. + adapt_cfg (dict): adaptation config. + bridged_feature (bool, optional): wheater update rpn feature. + Default: False. + with_cls (bool, optional): wheather use classification branch. + Default: True. + sampling (bool, optional): wheather use sampling. Default: True. + """ + + def __init__(self, + in_channels, + anchor_generator=dict( + type='AnchorGenerator', + scales=[8], + ratios=[1.0], + strides=[4, 8, 16, 32, 64]), + adapt_cfg=dict(type='dilation', dilation=3), + bridged_feature=False, + with_cls=True, + sampling=True, + **kwargs): + self.with_cls = with_cls + self.anchor_strides = anchor_generator['strides'] + self.anchor_scales = anchor_generator['scales'] + self.bridged_feature = bridged_feature + self.adapt_cfg = adapt_cfg + super(StageCascadeRPNHead, self).__init__( + in_channels, anchor_generator=anchor_generator, **kwargs) + + # override sampling and sampler + self.sampling = sampling + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # use PseudoSampler when sampling is False + if self.sampling and hasattr(self.train_cfg, 'sampler'): + sampler_cfg = self.train_cfg.sampler + else: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + + def _init_layers(self): + """Init layers of a CascadeRPN stage.""" + self.rpn_conv = AdaptiveConv(self.in_channels, self.feat_channels, + **self.adapt_cfg) + if self.with_cls: + self.rpn_cls = nn.Conv2d(self.feat_channels, + self.num_anchors * self.cls_out_channels, + 1) + self.rpn_reg = nn.Conv2d(self.feat_channels, self.num_anchors * 4, 1) + self.relu = nn.ReLU(inplace=True) + + def init_weights(self): + """Init weights of a CascadeRPN stage.""" + self.rpn_conv.init_weights() + normal_init(self.rpn_reg, std=0.01) + if self.with_cls: + normal_init(self.rpn_cls, std=0.01) + + def forward_single(self, x, offset): + """Forward function of single scale.""" + bridged_x = x + x = self.relu(self.rpn_conv(x, offset)) + if self.bridged_feature: + bridged_x = x # update feature + cls_score = self.rpn_cls(x) if self.with_cls else None + bbox_pred = self.rpn_reg(x) + return bridged_x, cls_score, bbox_pred + + def forward(self, feats, offset_list=None): + """Forward function.""" + if offset_list is None: + offset_list = [None for _ in range(len(feats))] + return multi_apply(self.forward_single, feats, offset_list) + + def _region_targets_single(self, + anchors, + valid_flags, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + featmap_sizes, + label_channels=1): + """Get anchor targets based on region for single level.""" + assign_result = self.assigner.assign( + anchors, + valid_flags, + gt_bboxes, + img_meta, + featmap_sizes, + self.anchor_scales[0], + self.anchor_strides, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_labels=None, + allowed_border=self.train_cfg.allowed_border) + flat_anchors = torch.cat(anchors) + sampling_result = self.sampler.sample(assign_result, flat_anchors, + gt_bboxes) + + num_anchors = flat_anchors.shape[0] + bbox_targets = torch.zeros_like(flat_anchors) + bbox_weights = torch.zeros_like(flat_anchors) + labels = flat_anchors.new_zeros(num_anchors, dtype=torch.long) + label_weights = flat_anchors.new_zeros(num_anchors, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + if not self.reg_decoded_bbox: + pos_bbox_targets = self.bbox_coder.encode( + sampling_result.pos_bboxes, sampling_result.pos_gt_bboxes) + else: + pos_bbox_targets = sampling_result.pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1.0 + if gt_labels is None: + labels[pos_inds] = 1 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg.pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg.pos_weight + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + neg_inds) + + def region_targets(self, + anchor_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + featmap_sizes, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=1, + unmap_outputs=True): + """See :func:`StageCascadeRPNHead.get_targets`.""" + num_imgs = len(img_metas) + assert len(anchor_list) == len(valid_flag_list) == num_imgs + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + (all_labels, all_label_weights, all_bbox_targets, all_bbox_weights, + pos_inds_list, neg_inds_list) = multi_apply( + self._region_targets_single, + anchor_list, + valid_flag_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + img_metas, + featmap_sizes=featmap_sizes, + label_channels=label_channels) + # no valid anchors + if any([labels is None for labels in all_labels]): + return None + # sampled anchors of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + # split targets to a list w.r.t. multiple levels + labels_list = images_to_levels(all_labels, num_level_anchors) + label_weights_list = images_to_levels(all_label_weights, + num_level_anchors) + bbox_targets_list = images_to_levels(all_bbox_targets, + num_level_anchors) + bbox_weights_list = images_to_levels(all_bbox_weights, + num_level_anchors) + return (labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, num_total_pos, num_total_neg) + + def get_targets(self, + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + featmap_sizes, + gt_bboxes_ignore=None, + label_channels=1): + """Compute regression and classification targets for anchors. + + Args: + anchor_list (list[list]): Multi level anchors of each image. + valid_flag_list (list[list]): Multi level valid flags of each + image. + gt_bboxes (list[Tensor]): Ground truth bboxes of each image. + img_metas (list[dict]): Meta info of each image. + featmap_sizes (list[Tensor]): Feature mapsize each level + gt_bboxes_ignore (list[Tensor]): Ignore bboxes of each images + label_channels (int): Channel of label. + + Returns: + cls_reg_targets (tuple) + """ + if isinstance(self.assigner, RegionAssigner): + cls_reg_targets = self.region_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + featmap_sizes, + gt_bboxes_ignore_list=gt_bboxes_ignore, + label_channels=label_channels) + else: + cls_reg_targets = super(StageCascadeRPNHead, self).get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + label_channels=label_channels) + return cls_reg_targets + + def anchor_offset(self, anchor_list, anchor_strides, featmap_sizes): + """ Get offest for deformable conv based on anchor shape + NOTE: currently support deformable kernel_size=3 and dilation=1 + + Args: + anchor_list (list[list[tensor])): [NI, NLVL, NA, 4] list of + multi-level anchors + anchor_strides (list[int]): anchor stride of each level + + Returns: + offset_list (list[tensor]): [NLVL, NA, 2, 18]: offset of DeformConv + kernel. + """ + + def _shape_offset(anchors, stride, ks=3, dilation=1): + # currently support kernel_size=3 and dilation=1 + assert ks == 3 and dilation == 1 + pad = (ks - 1) // 2 + idx = torch.arange(-pad, pad + 1, dtype=dtype, device=device) + yy, xx = torch.meshgrid(idx, idx) # return order matters + xx = xx.reshape(-1) + yy = yy.reshape(-1) + w = (anchors[:, 2] - anchors[:, 0]) / stride + h = (anchors[:, 3] - anchors[:, 1]) / stride + w = w / (ks - 1) - dilation + h = h / (ks - 1) - dilation + offset_x = w[:, None] * xx # (NA, ks**2) + offset_y = h[:, None] * yy # (NA, ks**2) + return offset_x, offset_y + + def _ctr_offset(anchors, stride, featmap_size): + feat_h, feat_w = featmap_size + assert len(anchors) == feat_h * feat_w + + x = (anchors[:, 0] + anchors[:, 2]) * 0.5 + y = (anchors[:, 1] + anchors[:, 3]) * 0.5 + # compute centers on feature map + x = x / stride + y = y / stride + # compute predefine centers + xx = torch.arange(0, feat_w, device=anchors.device) + yy = torch.arange(0, feat_h, device=anchors.device) + yy, xx = torch.meshgrid(yy, xx) + xx = xx.reshape(-1).type_as(x) + yy = yy.reshape(-1).type_as(y) + + offset_x = x - xx # (NA, ) + offset_y = y - yy # (NA, ) + return offset_x, offset_y + + num_imgs = len(anchor_list) + num_lvls = len(anchor_list[0]) + dtype = anchor_list[0][0].dtype + device = anchor_list[0][0].device + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + + offset_list = [] + for i in range(num_imgs): + mlvl_offset = [] + for lvl in range(num_lvls): + c_offset_x, c_offset_y = _ctr_offset(anchor_list[i][lvl], + anchor_strides[lvl], + featmap_sizes[lvl]) + s_offset_x, s_offset_y = _shape_offset(anchor_list[i][lvl], + anchor_strides[lvl]) + + # offset = ctr_offset + shape_offset + offset_x = s_offset_x + c_offset_x[:, None] + offset_y = s_offset_y + c_offset_y[:, None] + + # offset order (y0, x0, y1, x2, .., y8, x8, y9, x9) + offset = torch.stack([offset_y, offset_x], dim=-1) + offset = offset.reshape(offset.size(0), -1) # [NA, 2*ks**2] + mlvl_offset.append(offset) + offset_list.append(torch.cat(mlvl_offset)) # [totalNA, 2*ks**2] + offset_list = images_to_levels(offset_list, num_level_anchors) + return offset_list + + def loss_single(self, cls_score, bbox_pred, anchors, labels, label_weights, + bbox_targets, bbox_weights, num_total_samples): + """Loss function on single scale.""" + # classification loss + if self.with_cls: + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + cls_score = cls_score.permute(0, 2, 3, + 1).reshape(-1, self.cls_out_channels) + loss_cls = self.loss_cls( + cls_score, labels, label_weights, avg_factor=num_total_samples) + # regression loss + bbox_targets = bbox_targets.reshape(-1, 4) + bbox_weights = bbox_weights.reshape(-1, 4) + bbox_pred = bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) + if self.reg_decoded_bbox: + # When the regression loss (e.g. `IouLoss`, `GIouLoss`) + # is applied directly on the decoded bounding boxes, it + # decodes the already encoded coordinates to absolute format. + anchors = anchors.reshape(-1, 4) + bbox_pred = self.bbox_coder.decode(anchors, bbox_pred) + loss_reg = self.loss_bbox( + bbox_pred, + bbox_targets, + bbox_weights, + avg_factor=num_total_samples) + if self.with_cls: + return loss_cls, loss_reg + return None, loss_reg + + def loss(self, + anchor_list, + valid_flag_list, + cls_scores, + bbox_preds, + gt_bboxes, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + anchor_list (list[list]): Multi level anchors of each image. + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. Default: None + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in bbox_preds] + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + featmap_sizes, + gt_bboxes_ignore=gt_bboxes_ignore, + label_channels=label_channels) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + if self.sampling: + num_total_samples = num_total_pos + num_total_neg + else: + # 200 is hard-coded average factor, + # which follows guilded anchoring. + num_total_samples = sum([label.numel() + for label in labels_list]) / 200.0 + + # change per image, per level anchor_list to per_level, per_image + mlvl_anchor_list = list(zip(*anchor_list)) + # concat mlvl_anchor_list + mlvl_anchor_list = [ + torch.cat(anchors, dim=0) for anchors in mlvl_anchor_list + ] + + losses = multi_apply( + self.loss_single, + cls_scores, + bbox_preds, + mlvl_anchor_list, + labels_list, + label_weights_list, + bbox_targets_list, + bbox_weights_list, + num_total_samples=num_total_samples) + if self.with_cls: + return dict(loss_rpn_cls=losses[0], loss_rpn_reg=losses[1]) + return dict(loss_rpn_reg=losses[1]) + + def get_bboxes(self, + anchor_list, + cls_scores, + bbox_preds, + img_metas, + cfg, + rescale=False): + """Get proposal predict.""" + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self._get_bboxes_single(cls_score_list, bbox_pred_list, + anchor_list[img_id], img_shape, + scale_factor, cfg, rescale) + result_list.append(proposals) + return result_list + + def refine_bboxes(self, anchor_list, bbox_preds, img_metas): + """Refine bboxes through stages.""" + num_levels = len(bbox_preds) + new_anchor_list = [] + for img_id in range(len(img_metas)): + mlvl_anchors = [] + for i in range(num_levels): + bbox_pred = bbox_preds[i][img_id].detach() + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + img_shape = img_metas[img_id]['img_shape'] + bboxes = self.bbox_coder.decode(anchor_list[img_id][i], + bbox_pred, img_shape) + mlvl_anchors.append(bboxes) + new_anchor_list.append(mlvl_anchors) + return new_anchor_list + + +@HEADS.register_module() +class CascadeRPNHead(BaseDenseHead): + """The CascadeRPNHead will predict more accurate region proposals, which is + required for two-stage detectors (such as Fast/Faster R-CNN). CascadeRPN + consists of a sequence of RPNStage to progressively improve the accuracy of + the detected proposals. + + More details can be found in ``https://arxiv.org/abs/1909.06720``. + + Args: + num_stages (int): number of CascadeRPN stages. + stages (list[dict]): list of configs to build the stages. + train_cfg (list[dict]): list of configs at training time each stage. + test_cfg (dict): config at testing time. + """ + + def __init__(self, num_stages, stages, train_cfg, test_cfg): + super(CascadeRPNHead, self).__init__() + assert num_stages == len(stages) + self.num_stages = num_stages + self.stages = nn.ModuleList() + for i in range(len(stages)): + train_cfg_i = train_cfg[i] if train_cfg is not None else None + stages[i].update(train_cfg=train_cfg_i) + stages[i].update(test_cfg=test_cfg) + self.stages.append(build_head(stages[i])) + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + def init_weights(self): + """Init weight of CascadeRPN.""" + for i in range(self.num_stages): + self.stages[i].init_weights() + + def loss(self): + """loss() is implemented in StageCascadeRPNHead.""" + pass + + def get_bboxes(self): + """get_bboxes() is implemented in StageCascadeRPNHead.""" + pass + + def forward_train(self, + x, + img_metas, + gt_bboxes, + gt_labels=None, + gt_bboxes_ignore=None, + proposal_cfg=None): + """Forward train function.""" + assert gt_labels is None, 'RPN does not require gt_labels' + + featmap_sizes = [featmap.size()[-2:] for featmap in x] + device = x[0].device + anchor_list, valid_flag_list = self.stages[0].get_anchors( + featmap_sizes, img_metas, device=device) + + losses = dict() + + for i in range(self.num_stages): + stage = self.stages[i] + + if stage.adapt_cfg['type'] == 'offset': + offset_list = stage.anchor_offset(anchor_list, + stage.anchor_strides, + featmap_sizes) + else: + offset_list = None + x, cls_score, bbox_pred = stage(x, offset_list) + rpn_loss_inputs = (anchor_list, valid_flag_list, cls_score, + bbox_pred, gt_bboxes, img_metas) + stage_loss = stage.loss(*rpn_loss_inputs) + for name, value in stage_loss.items(): + losses['s{}.{}'.format(i, name)] = value + + # refine boxes + if i < self.num_stages - 1: + anchor_list = stage.refine_bboxes(anchor_list, bbox_pred, + img_metas) + if proposal_cfg is None: + return losses + else: + proposal_list = self.stages[-1].get_bboxes(anchor_list, cls_score, + bbox_pred, img_metas, + self.test_cfg) + return losses, proposal_list + + def simple_test_rpn(self, x, img_metas): + """Simple forward test function.""" + featmap_sizes = [featmap.size()[-2:] for featmap in x] + device = x[0].device + anchor_list, _ = self.stages[0].get_anchors( + featmap_sizes, img_metas, device=device) + + for i in range(self.num_stages): + stage = self.stages[i] + if stage.adapt_cfg['type'] == 'offset': + offset_list = stage.anchor_offset(anchor_list, + stage.anchor_strides, + featmap_sizes) + else: + offset_list = None + x, cls_score, bbox_pred = stage(x, offset_list) + if i < self.num_stages - 1: + anchor_list = stage.refine_bboxes(anchor_list, bbox_pred, + img_metas) + + proposal_list = self.stages[-1].get_bboxes(anchor_list, cls_score, + bbox_pred, img_metas, + self.test_cfg) + return proposal_list + + def aug_test_rpn(self, x, img_metas): + """Augmented forward test function.""" + raise NotImplementedError diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/centripetal_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/centripetal_head.py new file mode 100644 index 00000000..6728218b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/centripetal_head.py @@ -0,0 +1,421 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, normal_init +from mmcv.ops import DeformConv2d + +from mmdet.core import multi_apply +from ..builder import HEADS, build_loss +from .corner_head import CornerHead + + +@HEADS.register_module() +class CentripetalHead(CornerHead): + """Head of CentripetalNet: Pursuing High-quality Keypoint Pairs for Object + Detection. + + CentripetalHead inherits from :class:`CornerHead`. It removes the + embedding branch and adds guiding shift and centripetal shift branches. + More details can be found in the `paper + `_ . + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + num_feat_levels (int): Levels of feature from the previous module. 2 + for HourglassNet-104 and 1 for HourglassNet-52. HourglassNet-104 + outputs the final feature and intermediate supervision feature and + HourglassNet-52 only outputs the final feature. Default: 2. + corner_emb_channels (int): Channel of embedding vector. Default: 1. + train_cfg (dict | None): Training config. Useless in CornerHead, + but we keep this variable for SingleStageDetector. Default: None. + test_cfg (dict | None): Testing config of CornerHead. Default: None. + loss_heatmap (dict | None): Config of corner heatmap loss. Default: + GaussianFocalLoss. + loss_embedding (dict | None): Config of corner embedding loss. Default: + AssociativeEmbeddingLoss. + loss_offset (dict | None): Config of corner offset loss. Default: + SmoothL1Loss. + loss_guiding_shift (dict): Config of guiding shift loss. Default: + SmoothL1Loss. + loss_centripetal_shift (dict): Config of centripetal shift loss. + Default: SmoothL1Loss. + """ + + def __init__(self, + *args, + centripetal_shift_channels=2, + guiding_shift_channels=2, + feat_adaption_conv_kernel=3, + loss_guiding_shift=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=0.05), + loss_centripetal_shift=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1), + **kwargs): + assert centripetal_shift_channels == 2, ( + 'CentripetalHead only support centripetal_shift_channels == 2') + self.centripetal_shift_channels = centripetal_shift_channels + assert guiding_shift_channels == 2, ( + 'CentripetalHead only support guiding_shift_channels == 2') + self.guiding_shift_channels = guiding_shift_channels + self.feat_adaption_conv_kernel = feat_adaption_conv_kernel + super(CentripetalHead, self).__init__(*args, **kwargs) + self.loss_guiding_shift = build_loss(loss_guiding_shift) + self.loss_centripetal_shift = build_loss(loss_centripetal_shift) + + def _init_centripetal_layers(self): + """Initialize centripetal layers. + + Including feature adaption deform convs (feat_adaption), deform offset + prediction convs (dcn_off), guiding shift (guiding_shift) and + centripetal shift ( centripetal_shift). Each branch has two parts: + prefix `tl_` for top-left and `br_` for bottom-right. + """ + self.tl_feat_adaption = nn.ModuleList() + self.br_feat_adaption = nn.ModuleList() + self.tl_dcn_offset = nn.ModuleList() + self.br_dcn_offset = nn.ModuleList() + self.tl_guiding_shift = nn.ModuleList() + self.br_guiding_shift = nn.ModuleList() + self.tl_centripetal_shift = nn.ModuleList() + self.br_centripetal_shift = nn.ModuleList() + + for _ in range(self.num_feat_levels): + self.tl_feat_adaption.append( + DeformConv2d(self.in_channels, self.in_channels, + self.feat_adaption_conv_kernel, 1, 1)) + self.br_feat_adaption.append( + DeformConv2d(self.in_channels, self.in_channels, + self.feat_adaption_conv_kernel, 1, 1)) + + self.tl_guiding_shift.append( + self._make_layers( + out_channels=self.guiding_shift_channels, + in_channels=self.in_channels)) + self.br_guiding_shift.append( + self._make_layers( + out_channels=self.guiding_shift_channels, + in_channels=self.in_channels)) + + self.tl_dcn_offset.append( + ConvModule( + self.guiding_shift_channels, + self.feat_adaption_conv_kernel**2 * + self.guiding_shift_channels, + 1, + bias=False, + act_cfg=None)) + self.br_dcn_offset.append( + ConvModule( + self.guiding_shift_channels, + self.feat_adaption_conv_kernel**2 * + self.guiding_shift_channels, + 1, + bias=False, + act_cfg=None)) + + self.tl_centripetal_shift.append( + self._make_layers( + out_channels=self.centripetal_shift_channels, + in_channels=self.in_channels)) + self.br_centripetal_shift.append( + self._make_layers( + out_channels=self.centripetal_shift_channels, + in_channels=self.in_channels)) + + def _init_layers(self): + """Initialize layers for CentripetalHead. + + Including two parts: CornerHead layers and CentripetalHead layers + """ + super()._init_layers() # using _init_layers in CornerHead + self._init_centripetal_layers() + + def init_weights(self): + """Initialize weights of the head.""" + super().init_weights() + for i in range(self.num_feat_levels): + normal_init(self.tl_feat_adaption[i], std=0.01) + normal_init(self.br_feat_adaption[i], std=0.01) + normal_init(self.tl_dcn_offset[i].conv, std=0.1) + normal_init(self.br_dcn_offset[i].conv, std=0.1) + _ = [x.conv.reset_parameters() for x in self.tl_guiding_shift[i]] + _ = [x.conv.reset_parameters() for x in self.br_guiding_shift[i]] + _ = [ + x.conv.reset_parameters() for x in self.tl_centripetal_shift[i] + ] + _ = [ + x.conv.reset_parameters() for x in self.br_centripetal_shift[i] + ] + + def forward_single(self, x, lvl_ind): + """Forward feature of a single level. + + Args: + x (Tensor): Feature of a single level. + lvl_ind (int): Level index of current feature. + + Returns: + tuple[Tensor]: A tuple of CentripetalHead's output for current + feature level. Containing the following Tensors: + + - tl_heat (Tensor): Predicted top-left corner heatmap. + - br_heat (Tensor): Predicted bottom-right corner heatmap. + - tl_off (Tensor): Predicted top-left offset heatmap. + - br_off (Tensor): Predicted bottom-right offset heatmap. + - tl_guiding_shift (Tensor): Predicted top-left guiding shift + heatmap. + - br_guiding_shift (Tensor): Predicted bottom-right guiding + shift heatmap. + - tl_centripetal_shift (Tensor): Predicted top-left centripetal + shift heatmap. + - br_centripetal_shift (Tensor): Predicted bottom-right + centripetal shift heatmap. + """ + tl_heat, br_heat, _, _, tl_off, br_off, tl_pool, br_pool = super( + ).forward_single( + x, lvl_ind, return_pool=True) + + tl_guiding_shift = self.tl_guiding_shift[lvl_ind](tl_pool) + br_guiding_shift = self.br_guiding_shift[lvl_ind](br_pool) + + tl_dcn_offset = self.tl_dcn_offset[lvl_ind](tl_guiding_shift.detach()) + br_dcn_offset = self.br_dcn_offset[lvl_ind](br_guiding_shift.detach()) + + tl_feat_adaption = self.tl_feat_adaption[lvl_ind](tl_pool, + tl_dcn_offset) + br_feat_adaption = self.br_feat_adaption[lvl_ind](br_pool, + br_dcn_offset) + + tl_centripetal_shift = self.tl_centripetal_shift[lvl_ind]( + tl_feat_adaption) + br_centripetal_shift = self.br_centripetal_shift[lvl_ind]( + br_feat_adaption) + + result_list = [ + tl_heat, br_heat, tl_off, br_off, tl_guiding_shift, + br_guiding_shift, tl_centripetal_shift, br_centripetal_shift + ] + return result_list + + def loss(self, + tl_heats, + br_heats, + tl_offs, + br_offs, + tl_guiding_shifts, + br_guiding_shifts, + tl_centripetal_shifts, + br_centripetal_shifts, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + tl_heats (list[Tensor]): Top-left corner heatmaps for each level + with shape (N, num_classes, H, W). + br_heats (list[Tensor]): Bottom-right corner heatmaps for each + level with shape (N, num_classes, H, W). + tl_offs (list[Tensor]): Top-left corner offsets for each level + with shape (N, corner_offset_channels, H, W). + br_offs (list[Tensor]): Bottom-right corner offsets for each level + with shape (N, corner_offset_channels, H, W). + tl_guiding_shifts (list[Tensor]): Top-left guiding shifts for each + level with shape (N, guiding_shift_channels, H, W). + br_guiding_shifts (list[Tensor]): Bottom-right guiding shifts for + each level with shape (N, guiding_shift_channels, H, W). + tl_centripetal_shifts (list[Tensor]): Top-left centripetal shifts + for each level with shape (N, centripetal_shift_channels, H, + W). + br_centripetal_shifts (list[Tensor]): Bottom-right centripetal + shifts for each level with shape (N, + centripetal_shift_channels, H, W). + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [left, top, right, bottom] format. + gt_labels (list[Tensor]): Class indices corresponding to each box. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor] | None): Specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. Containing the + following losses: + + - det_loss (list[Tensor]): Corner keypoint losses of all + feature levels. + - off_loss (list[Tensor]): Corner offset losses of all feature + levels. + - guiding_loss (list[Tensor]): Guiding shift losses of all + feature levels. + - centripetal_loss (list[Tensor]): Centripetal shift losses of + all feature levels. + """ + targets = self.get_targets( + gt_bboxes, + gt_labels, + tl_heats[-1].shape, + img_metas[0]['pad_shape'], + with_corner_emb=self.with_corner_emb, + with_guiding_shift=True, + with_centripetal_shift=True) + mlvl_targets = [targets for _ in range(self.num_feat_levels)] + [det_losses, off_losses, guiding_losses, centripetal_losses + ] = multi_apply(self.loss_single, tl_heats, br_heats, tl_offs, + br_offs, tl_guiding_shifts, br_guiding_shifts, + tl_centripetal_shifts, br_centripetal_shifts, + mlvl_targets) + loss_dict = dict( + det_loss=det_losses, + off_loss=off_losses, + guiding_loss=guiding_losses, + centripetal_loss=centripetal_losses) + return loss_dict + + def loss_single(self, tl_hmp, br_hmp, tl_off, br_off, tl_guiding_shift, + br_guiding_shift, tl_centripetal_shift, + br_centripetal_shift, targets): + """Compute losses for single level. + + Args: + tl_hmp (Tensor): Top-left corner heatmap for current level with + shape (N, num_classes, H, W). + br_hmp (Tensor): Bottom-right corner heatmap for current level with + shape (N, num_classes, H, W). + tl_off (Tensor): Top-left corner offset for current level with + shape (N, corner_offset_channels, H, W). + br_off (Tensor): Bottom-right corner offset for current level with + shape (N, corner_offset_channels, H, W). + tl_guiding_shift (Tensor): Top-left guiding shift for current level + with shape (N, guiding_shift_channels, H, W). + br_guiding_shift (Tensor): Bottom-right guiding shift for current + level with shape (N, guiding_shift_channels, H, W). + tl_centripetal_shift (Tensor): Top-left centripetal shift for + current level with shape (N, centripetal_shift_channels, H, W). + br_centripetal_shift (Tensor): Bottom-right centripetal shift for + current level with shape (N, centripetal_shift_channels, H, W). + targets (dict): Corner target generated by `get_targets`. + + Returns: + tuple[torch.Tensor]: Losses of the head's differnet branches + containing the following losses: + + - det_loss (Tensor): Corner keypoint loss. + - off_loss (Tensor): Corner offset loss. + - guiding_loss (Tensor): Guiding shift loss. + - centripetal_loss (Tensor): Centripetal shift loss. + """ + targets['corner_embedding'] = None + + det_loss, _, _, off_loss = super().loss_single(tl_hmp, br_hmp, None, + None, tl_off, br_off, + targets) + + gt_tl_guiding_shift = targets['topleft_guiding_shift'] + gt_br_guiding_shift = targets['bottomright_guiding_shift'] + gt_tl_centripetal_shift = targets['topleft_centripetal_shift'] + gt_br_centripetal_shift = targets['bottomright_centripetal_shift'] + + gt_tl_heatmap = targets['topleft_heatmap'] + gt_br_heatmap = targets['bottomright_heatmap'] + # We only compute the offset loss at the real corner position. + # The value of real corner would be 1 in heatmap ground truth. + # The mask is computed in class agnostic mode and its shape is + # batch * 1 * width * height. + tl_mask = gt_tl_heatmap.eq(1).sum(1).gt(0).unsqueeze(1).type_as( + gt_tl_heatmap) + br_mask = gt_br_heatmap.eq(1).sum(1).gt(0).unsqueeze(1).type_as( + gt_br_heatmap) + + # Guiding shift loss + tl_guiding_loss = self.loss_guiding_shift( + tl_guiding_shift, + gt_tl_guiding_shift, + tl_mask, + avg_factor=tl_mask.sum()) + br_guiding_loss = self.loss_guiding_shift( + br_guiding_shift, + gt_br_guiding_shift, + br_mask, + avg_factor=br_mask.sum()) + guiding_loss = (tl_guiding_loss + br_guiding_loss) / 2.0 + # Centripetal shift loss + tl_centripetal_loss = self.loss_centripetal_shift( + tl_centripetal_shift, + gt_tl_centripetal_shift, + tl_mask, + avg_factor=tl_mask.sum()) + br_centripetal_loss = self.loss_centripetal_shift( + br_centripetal_shift, + gt_br_centripetal_shift, + br_mask, + avg_factor=br_mask.sum()) + centripetal_loss = (tl_centripetal_loss + br_centripetal_loss) / 2.0 + + return det_loss, off_loss, guiding_loss, centripetal_loss + + def get_bboxes(self, + tl_heats, + br_heats, + tl_offs, + br_offs, + tl_guiding_shifts, + br_guiding_shifts, + tl_centripetal_shifts, + br_centripetal_shifts, + img_metas, + rescale=False, + with_nms=True): + """Transform network output for a batch into bbox predictions. + + Args: + tl_heats (list[Tensor]): Top-left corner heatmaps for each level + with shape (N, num_classes, H, W). + br_heats (list[Tensor]): Bottom-right corner heatmaps for each + level with shape (N, num_classes, H, W). + tl_offs (list[Tensor]): Top-left corner offsets for each level + with shape (N, corner_offset_channels, H, W). + br_offs (list[Tensor]): Bottom-right corner offsets for each level + with shape (N, corner_offset_channels, H, W). + tl_guiding_shifts (list[Tensor]): Top-left guiding shifts for each + level with shape (N, guiding_shift_channels, H, W). Useless in + this function, we keep this arg because it's the raw output + from CentripetalHead. + br_guiding_shifts (list[Tensor]): Bottom-right guiding shifts for + each level with shape (N, guiding_shift_channels, H, W). + Useless in this function, we keep this arg because it's the + raw output from CentripetalHead. + tl_centripetal_shifts (list[Tensor]): Top-left centripetal shifts + for each level with shape (N, centripetal_shift_channels, H, + W). + br_centripetal_shifts (list[Tensor]): Bottom-right centripetal + shifts for each level with shape (N, + centripetal_shift_channels, H, W). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + """ + assert tl_heats[-1].shape[0] == br_heats[-1].shape[0] == len(img_metas) + result_list = [] + for img_id in range(len(img_metas)): + result_list.append( + self._get_bboxes_single( + tl_heats[-1][img_id:img_id + 1, :], + br_heats[-1][img_id:img_id + 1, :], + tl_offs[-1][img_id:img_id + 1, :], + br_offs[-1][img_id:img_id + 1, :], + img_metas[img_id], + tl_emb=None, + br_emb=None, + tl_centripetal_shift=tl_centripetal_shifts[-1][ + img_id:img_id + 1, :], + br_centripetal_shift=br_centripetal_shifts[-1][ + img_id:img_id + 1, :], + rescale=rescale, + with_nms=with_nms)) + + return result_list diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/corner_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/corner_head.py new file mode 100644 index 00000000..ed6ab0ef --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/corner_head.py @@ -0,0 +1,1066 @@ +from math import ceil, log + +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, bias_init_with_prob +from mmcv.ops import CornerPool, batched_nms + +from mmdet.core import multi_apply +from ..builder import HEADS, build_loss +from ..utils import gaussian_radius, gen_gaussian_target +from .base_dense_head import BaseDenseHead + + +class BiCornerPool(nn.Module): + """Bidirectional Corner Pooling Module (TopLeft, BottomRight, etc.) + + Args: + in_channels (int): Input channels of module. + out_channels (int): Output channels of module. + feat_channels (int): Feature channels of module. + directions (list[str]): Directions of two CornerPools. + norm_cfg (dict): Dictionary to construct and config norm layer. + """ + + def __init__(self, + in_channels, + directions, + feat_channels=128, + out_channels=128, + norm_cfg=dict(type='BN', requires_grad=True)): + super(BiCornerPool, self).__init__() + self.direction1_conv = ConvModule( + in_channels, feat_channels, 3, padding=1, norm_cfg=norm_cfg) + self.direction2_conv = ConvModule( + in_channels, feat_channels, 3, padding=1, norm_cfg=norm_cfg) + + self.aftpool_conv = ConvModule( + feat_channels, + out_channels, + 3, + padding=1, + norm_cfg=norm_cfg, + act_cfg=None) + + self.conv1 = ConvModule( + in_channels, out_channels, 1, norm_cfg=norm_cfg, act_cfg=None) + self.conv2 = ConvModule( + in_channels, out_channels, 3, padding=1, norm_cfg=norm_cfg) + + self.direction1_pool = CornerPool(directions[0]) + self.direction2_pool = CornerPool(directions[1]) + self.relu = nn.ReLU(inplace=True) + + def forward(self, x): + """Forward features from the upstream network. + + Args: + x (tensor): Input feature of BiCornerPool. + + Returns: + conv2 (tensor): Output feature of BiCornerPool. + """ + direction1_conv = self.direction1_conv(x) + direction2_conv = self.direction2_conv(x) + direction1_feat = self.direction1_pool(direction1_conv) + direction2_feat = self.direction2_pool(direction2_conv) + aftpool_conv = self.aftpool_conv(direction1_feat + direction2_feat) + conv1 = self.conv1(x) + relu = self.relu(aftpool_conv + conv1) + conv2 = self.conv2(relu) + return conv2 + + +@HEADS.register_module() +class CornerHead(BaseDenseHead): + """Head of CornerNet: Detecting Objects as Paired Keypoints. + + Code is modified from the `official github repo + `_ . + + More details can be found in the `paper + `_ . + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + num_feat_levels (int): Levels of feature from the previous module. 2 + for HourglassNet-104 and 1 for HourglassNet-52. Because + HourglassNet-104 outputs the final feature and intermediate + supervision feature and HourglassNet-52 only outputs the final + feature. Default: 2. + corner_emb_channels (int): Channel of embedding vector. Default: 1. + train_cfg (dict | None): Training config. Useless in CornerHead, + but we keep this variable for SingleStageDetector. Default: None. + test_cfg (dict | None): Testing config of CornerHead. Default: None. + loss_heatmap (dict | None): Config of corner heatmap loss. Default: + GaussianFocalLoss. + loss_embedding (dict | None): Config of corner embedding loss. Default: + AssociativeEmbeddingLoss. + loss_offset (dict | None): Config of corner offset loss. Default: + SmoothL1Loss. + """ + + def __init__(self, + num_classes, + in_channels, + num_feat_levels=2, + corner_emb_channels=1, + train_cfg=None, + test_cfg=None, + loss_heatmap=dict( + type='GaussianFocalLoss', + alpha=2.0, + gamma=4.0, + loss_weight=1), + loss_embedding=dict( + type='AssociativeEmbeddingLoss', + pull_weight=0.25, + push_weight=0.25), + loss_offset=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1)): + super(CornerHead, self).__init__() + self.num_classes = num_classes + self.in_channels = in_channels + self.corner_emb_channels = corner_emb_channels + self.with_corner_emb = self.corner_emb_channels > 0 + self.corner_offset_channels = 2 + self.num_feat_levels = num_feat_levels + self.loss_heatmap = build_loss( + loss_heatmap) if loss_heatmap is not None else None + self.loss_embedding = build_loss( + loss_embedding) if loss_embedding is not None else None + self.loss_offset = build_loss( + loss_offset) if loss_offset is not None else None + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + self._init_layers() + + def _make_layers(self, out_channels, in_channels=256, feat_channels=256): + """Initialize conv sequential for CornerHead.""" + return nn.Sequential( + ConvModule(in_channels, feat_channels, 3, padding=1), + ConvModule( + feat_channels, out_channels, 1, norm_cfg=None, act_cfg=None)) + + def _init_corner_kpt_layers(self): + """Initialize corner keypoint layers. + + Including corner heatmap branch and corner offset branch. Each branch + has two parts: prefix `tl_` for top-left and `br_` for bottom-right. + """ + self.tl_pool, self.br_pool = nn.ModuleList(), nn.ModuleList() + self.tl_heat, self.br_heat = nn.ModuleList(), nn.ModuleList() + self.tl_off, self.br_off = nn.ModuleList(), nn.ModuleList() + + for _ in range(self.num_feat_levels): + self.tl_pool.append( + BiCornerPool( + self.in_channels, ['top', 'left'], + out_channels=self.in_channels)) + self.br_pool.append( + BiCornerPool( + self.in_channels, ['bottom', 'right'], + out_channels=self.in_channels)) + + self.tl_heat.append( + self._make_layers( + out_channels=self.num_classes, + in_channels=self.in_channels)) + self.br_heat.append( + self._make_layers( + out_channels=self.num_classes, + in_channels=self.in_channels)) + + self.tl_off.append( + self._make_layers( + out_channels=self.corner_offset_channels, + in_channels=self.in_channels)) + self.br_off.append( + self._make_layers( + out_channels=self.corner_offset_channels, + in_channels=self.in_channels)) + + def _init_corner_emb_layers(self): + """Initialize corner embedding layers. + + Only include corner embedding branch with two parts: prefix `tl_` for + top-left and `br_` for bottom-right. + """ + self.tl_emb, self.br_emb = nn.ModuleList(), nn.ModuleList() + + for _ in range(self.num_feat_levels): + self.tl_emb.append( + self._make_layers( + out_channels=self.corner_emb_channels, + in_channels=self.in_channels)) + self.br_emb.append( + self._make_layers( + out_channels=self.corner_emb_channels, + in_channels=self.in_channels)) + + def _init_layers(self): + """Initialize layers for CornerHead. + + Including two parts: corner keypoint layers and corner embedding layers + """ + self._init_corner_kpt_layers() + if self.with_corner_emb: + self._init_corner_emb_layers() + + def init_weights(self): + """Initialize weights of the head.""" + bias_init = bias_init_with_prob(0.1) + for i in range(self.num_feat_levels): + # The initialization of parameters are different between nn.Conv2d + # and ConvModule. Our experiments show that using the original + # initialization of nn.Conv2d increases the final mAP by about 0.2% + self.tl_heat[i][-1].conv.reset_parameters() + self.tl_heat[i][-1].conv.bias.data.fill_(bias_init) + self.br_heat[i][-1].conv.reset_parameters() + self.br_heat[i][-1].conv.bias.data.fill_(bias_init) + self.tl_off[i][-1].conv.reset_parameters() + self.br_off[i][-1].conv.reset_parameters() + if self.with_corner_emb: + self.tl_emb[i][-1].conv.reset_parameters() + self.br_emb[i][-1].conv.reset_parameters() + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: Usually a tuple of corner heatmaps, offset heatmaps and + embedding heatmaps. + - tl_heats (list[Tensor]): Top-left corner heatmaps for all + levels, each is a 4D-tensor, the channels number is + num_classes. + - br_heats (list[Tensor]): Bottom-right corner heatmaps for all + levels, each is a 4D-tensor, the channels number is + num_classes. + - tl_embs (list[Tensor] | list[None]): Top-left embedding + heatmaps for all levels, each is a 4D-tensor or None. + If not None, the channels number is corner_emb_channels. + - br_embs (list[Tensor] | list[None]): Bottom-right embedding + heatmaps for all levels, each is a 4D-tensor or None. + If not None, the channels number is corner_emb_channels. + - tl_offs (list[Tensor]): Top-left offset heatmaps for all + levels, each is a 4D-tensor. The channels number is + corner_offset_channels. + - br_offs (list[Tensor]): Bottom-right offset heatmaps for all + levels, each is a 4D-tensor. The channels number is + corner_offset_channels. + """ + lvl_ind = list(range(self.num_feat_levels)) + return multi_apply(self.forward_single, feats, lvl_ind) + + def forward_single(self, x, lvl_ind, return_pool=False): + """Forward feature of a single level. + + Args: + x (Tensor): Feature of a single level. + lvl_ind (int): Level index of current feature. + return_pool (bool): Return corner pool feature or not. + + Returns: + tuple[Tensor]: A tuple of CornerHead's output for current feature + level. Containing the following Tensors: + + - tl_heat (Tensor): Predicted top-left corner heatmap. + - br_heat (Tensor): Predicted bottom-right corner heatmap. + - tl_emb (Tensor | None): Predicted top-left embedding heatmap. + None for `self.with_corner_emb == False`. + - br_emb (Tensor | None): Predicted bottom-right embedding + heatmap. None for `self.with_corner_emb == False`. + - tl_off (Tensor): Predicted top-left offset heatmap. + - br_off (Tensor): Predicted bottom-right offset heatmap. + - tl_pool (Tensor): Top-left corner pool feature. Not must + have. + - br_pool (Tensor): Bottom-right corner pool feature. Not must + have. + """ + tl_pool = self.tl_pool[lvl_ind](x) + tl_heat = self.tl_heat[lvl_ind](tl_pool) + br_pool = self.br_pool[lvl_ind](x) + br_heat = self.br_heat[lvl_ind](br_pool) + + tl_emb, br_emb = None, None + if self.with_corner_emb: + tl_emb = self.tl_emb[lvl_ind](tl_pool) + br_emb = self.br_emb[lvl_ind](br_pool) + + tl_off = self.tl_off[lvl_ind](tl_pool) + br_off = self.br_off[lvl_ind](br_pool) + + result_list = [tl_heat, br_heat, tl_emb, br_emb, tl_off, br_off] + if return_pool: + result_list.append(tl_pool) + result_list.append(br_pool) + + return result_list + + def get_targets(self, + gt_bboxes, + gt_labels, + feat_shape, + img_shape, + with_corner_emb=False, + with_guiding_shift=False, + with_centripetal_shift=False): + """Generate corner targets. + + Including corner heatmap, corner offset. + + Optional: corner embedding, corner guiding shift, centripetal shift. + + For CornerNet, we generate corner heatmap, corner offset and corner + embedding from this function. + + For CentripetalNet, we generate corner heatmap, corner offset, guiding + shift and centripetal shift from this function. + + Args: + gt_bboxes (list[Tensor]): Ground truth bboxes of each image, each + has shape (num_gt, 4). + gt_labels (list[Tensor]): Ground truth labels of each box, each has + shape (num_gt,). + feat_shape (list[int]): Shape of output feature, + [batch, channel, height, width]. + img_shape (list[int]): Shape of input image, + [height, width, channel]. + with_corner_emb (bool): Generate corner embedding target or not. + Default: False. + with_guiding_shift (bool): Generate guiding shift target or not. + Default: False. + with_centripetal_shift (bool): Generate centripetal shift target or + not. Default: False. + + Returns: + dict: Ground truth of corner heatmap, corner offset, corner + embedding, guiding shift and centripetal shift. Containing the + following keys: + + - topleft_heatmap (Tensor): Ground truth top-left corner + heatmap. + - bottomright_heatmap (Tensor): Ground truth bottom-right + corner heatmap. + - topleft_offset (Tensor): Ground truth top-left corner offset. + - bottomright_offset (Tensor): Ground truth bottom-right corner + offset. + - corner_embedding (list[list[list[int]]]): Ground truth corner + embedding. Not must have. + - topleft_guiding_shift (Tensor): Ground truth top-left corner + guiding shift. Not must have. + - bottomright_guiding_shift (Tensor): Ground truth bottom-right + corner guiding shift. Not must have. + - topleft_centripetal_shift (Tensor): Ground truth top-left + corner centripetal shift. Not must have. + - bottomright_centripetal_shift (Tensor): Ground truth + bottom-right corner centripetal shift. Not must have. + """ + batch_size, _, height, width = feat_shape + img_h, img_w = img_shape[:2] + + width_ratio = float(width / img_w) + height_ratio = float(height / img_h) + + gt_tl_heatmap = gt_bboxes[-1].new_zeros( + [batch_size, self.num_classes, height, width]) + gt_br_heatmap = gt_bboxes[-1].new_zeros( + [batch_size, self.num_classes, height, width]) + gt_tl_offset = gt_bboxes[-1].new_zeros([batch_size, 2, height, width]) + gt_br_offset = gt_bboxes[-1].new_zeros([batch_size, 2, height, width]) + + if with_corner_emb: + match = [] + + # Guiding shift is a kind of offset, from center to corner + if with_guiding_shift: + gt_tl_guiding_shift = gt_bboxes[-1].new_zeros( + [batch_size, 2, height, width]) + gt_br_guiding_shift = gt_bboxes[-1].new_zeros( + [batch_size, 2, height, width]) + # Centripetal shift is also a kind of offset, from center to corner + # and normalized by log. + if with_centripetal_shift: + gt_tl_centripetal_shift = gt_bboxes[-1].new_zeros( + [batch_size, 2, height, width]) + gt_br_centripetal_shift = gt_bboxes[-1].new_zeros( + [batch_size, 2, height, width]) + + for batch_id in range(batch_size): + # Ground truth of corner embedding per image is a list of coord set + corner_match = [] + for box_id in range(len(gt_labels[batch_id])): + left, top, right, bottom = gt_bboxes[batch_id][box_id] + center_x = (left + right) / 2.0 + center_y = (top + bottom) / 2.0 + label = gt_labels[batch_id][box_id] + + # Use coords in the feature level to generate ground truth + scale_left = left * width_ratio + scale_right = right * width_ratio + scale_top = top * height_ratio + scale_bottom = bottom * height_ratio + scale_center_x = center_x * width_ratio + scale_center_y = center_y * height_ratio + + # Int coords on feature map/ground truth tensor + left_idx = int(min(scale_left, width - 1)) + right_idx = int(min(scale_right, width - 1)) + top_idx = int(min(scale_top, height - 1)) + bottom_idx = int(min(scale_bottom, height - 1)) + + # Generate gaussian heatmap + scale_box_width = ceil(scale_right - scale_left) + scale_box_height = ceil(scale_bottom - scale_top) + radius = gaussian_radius((scale_box_height, scale_box_width), + min_overlap=0.3) + radius = max(0, int(radius)) + gt_tl_heatmap[batch_id, label] = gen_gaussian_target( + gt_tl_heatmap[batch_id, label], [left_idx, top_idx], + radius) + gt_br_heatmap[batch_id, label] = gen_gaussian_target( + gt_br_heatmap[batch_id, label], [right_idx, bottom_idx], + radius) + + # Generate corner offset + left_offset = scale_left - left_idx + top_offset = scale_top - top_idx + right_offset = scale_right - right_idx + bottom_offset = scale_bottom - bottom_idx + gt_tl_offset[batch_id, 0, top_idx, left_idx] = left_offset + gt_tl_offset[batch_id, 1, top_idx, left_idx] = top_offset + gt_br_offset[batch_id, 0, bottom_idx, right_idx] = right_offset + gt_br_offset[batch_id, 1, bottom_idx, + right_idx] = bottom_offset + + # Generate corner embedding + if with_corner_emb: + corner_match.append([[top_idx, left_idx], + [bottom_idx, right_idx]]) + # Generate guiding shift + if with_guiding_shift: + gt_tl_guiding_shift[batch_id, 0, top_idx, + left_idx] = scale_center_x - left_idx + gt_tl_guiding_shift[batch_id, 1, top_idx, + left_idx] = scale_center_y - top_idx + gt_br_guiding_shift[batch_id, 0, bottom_idx, + right_idx] = right_idx - scale_center_x + gt_br_guiding_shift[ + batch_id, 1, bottom_idx, + right_idx] = bottom_idx - scale_center_y + # Generate centripetal shift + if with_centripetal_shift: + gt_tl_centripetal_shift[batch_id, 0, top_idx, + left_idx] = log(scale_center_x - + scale_left) + gt_tl_centripetal_shift[batch_id, 1, top_idx, + left_idx] = log(scale_center_y - + scale_top) + gt_br_centripetal_shift[batch_id, 0, bottom_idx, + right_idx] = log(scale_right - + scale_center_x) + gt_br_centripetal_shift[batch_id, 1, bottom_idx, + right_idx] = log(scale_bottom - + scale_center_y) + + if with_corner_emb: + match.append(corner_match) + + target_result = dict( + topleft_heatmap=gt_tl_heatmap, + topleft_offset=gt_tl_offset, + bottomright_heatmap=gt_br_heatmap, + bottomright_offset=gt_br_offset) + + if with_corner_emb: + target_result.update(corner_embedding=match) + if with_guiding_shift: + target_result.update( + topleft_guiding_shift=gt_tl_guiding_shift, + bottomright_guiding_shift=gt_br_guiding_shift) + if with_centripetal_shift: + target_result.update( + topleft_centripetal_shift=gt_tl_centripetal_shift, + bottomright_centripetal_shift=gt_br_centripetal_shift) + + return target_result + + def loss(self, + tl_heats, + br_heats, + tl_embs, + br_embs, + tl_offs, + br_offs, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + tl_heats (list[Tensor]): Top-left corner heatmaps for each level + with shape (N, num_classes, H, W). + br_heats (list[Tensor]): Bottom-right corner heatmaps for each + level with shape (N, num_classes, H, W). + tl_embs (list[Tensor]): Top-left corner embeddings for each level + with shape (N, corner_emb_channels, H, W). + br_embs (list[Tensor]): Bottom-right corner embeddings for each + level with shape (N, corner_emb_channels, H, W). + tl_offs (list[Tensor]): Top-left corner offsets for each level + with shape (N, corner_offset_channels, H, W). + br_offs (list[Tensor]): Bottom-right corner offsets for each level + with shape (N, corner_offset_channels, H, W). + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [left, top, right, bottom] format. + gt_labels (list[Tensor]): Class indices corresponding to each box. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor] | None): Specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. Containing the + following losses: + + - det_loss (list[Tensor]): Corner keypoint losses of all + feature levels. + - pull_loss (list[Tensor]): Part one of AssociativeEmbedding + losses of all feature levels. + - push_loss (list[Tensor]): Part two of AssociativeEmbedding + losses of all feature levels. + - off_loss (list[Tensor]): Corner offset losses of all feature + levels. + """ + targets = self.get_targets( + gt_bboxes, + gt_labels, + tl_heats[-1].shape, + img_metas[0]['pad_shape'], + with_corner_emb=self.with_corner_emb) + mlvl_targets = [targets for _ in range(self.num_feat_levels)] + det_losses, pull_losses, push_losses, off_losses = multi_apply( + self.loss_single, tl_heats, br_heats, tl_embs, br_embs, tl_offs, + br_offs, mlvl_targets) + loss_dict = dict(det_loss=det_losses, off_loss=off_losses) + if self.with_corner_emb: + loss_dict.update(pull_loss=pull_losses, push_loss=push_losses) + return loss_dict + + def loss_single(self, tl_hmp, br_hmp, tl_emb, br_emb, tl_off, br_off, + targets): + """Compute losses for single level. + + Args: + tl_hmp (Tensor): Top-left corner heatmap for current level with + shape (N, num_classes, H, W). + br_hmp (Tensor): Bottom-right corner heatmap for current level with + shape (N, num_classes, H, W). + tl_emb (Tensor): Top-left corner embedding for current level with + shape (N, corner_emb_channels, H, W). + br_emb (Tensor): Bottom-right corner embedding for current level + with shape (N, corner_emb_channels, H, W). + tl_off (Tensor): Top-left corner offset for current level with + shape (N, corner_offset_channels, H, W). + br_off (Tensor): Bottom-right corner offset for current level with + shape (N, corner_offset_channels, H, W). + targets (dict): Corner target generated by `get_targets`. + + Returns: + tuple[torch.Tensor]: Losses of the head's differnet branches + containing the following losses: + + - det_loss (Tensor): Corner keypoint loss. + - pull_loss (Tensor): Part one of AssociativeEmbedding loss. + - push_loss (Tensor): Part two of AssociativeEmbedding loss. + - off_loss (Tensor): Corner offset loss. + """ + gt_tl_hmp = targets['topleft_heatmap'] + gt_br_hmp = targets['bottomright_heatmap'] + gt_tl_off = targets['topleft_offset'] + gt_br_off = targets['bottomright_offset'] + gt_embedding = targets['corner_embedding'] + + # Detection loss + tl_det_loss = self.loss_heatmap( + tl_hmp.sigmoid(), + gt_tl_hmp, + avg_factor=max(1, + gt_tl_hmp.eq(1).sum())) + br_det_loss = self.loss_heatmap( + br_hmp.sigmoid(), + gt_br_hmp, + avg_factor=max(1, + gt_br_hmp.eq(1).sum())) + det_loss = (tl_det_loss + br_det_loss) / 2.0 + + # AssociativeEmbedding loss + if self.with_corner_emb and self.loss_embedding is not None: + pull_loss, push_loss = self.loss_embedding(tl_emb, br_emb, + gt_embedding) + else: + pull_loss, push_loss = None, None + + # Offset loss + # We only compute the offset loss at the real corner position. + # The value of real corner would be 1 in heatmap ground truth. + # The mask is computed in class agnostic mode and its shape is + # batch * 1 * width * height. + tl_off_mask = gt_tl_hmp.eq(1).sum(1).gt(0).unsqueeze(1).type_as( + gt_tl_hmp) + br_off_mask = gt_br_hmp.eq(1).sum(1).gt(0).unsqueeze(1).type_as( + gt_br_hmp) + tl_off_loss = self.loss_offset( + tl_off, + gt_tl_off, + tl_off_mask, + avg_factor=max(1, tl_off_mask.sum())) + br_off_loss = self.loss_offset( + br_off, + gt_br_off, + br_off_mask, + avg_factor=max(1, br_off_mask.sum())) + + off_loss = (tl_off_loss + br_off_loss) / 2.0 + + return det_loss, pull_loss, push_loss, off_loss + + def get_bboxes(self, + tl_heats, + br_heats, + tl_embs, + br_embs, + tl_offs, + br_offs, + img_metas, + rescale=False, + with_nms=True): + """Transform network output for a batch into bbox predictions. + + Args: + tl_heats (list[Tensor]): Top-left corner heatmaps for each level + with shape (N, num_classes, H, W). + br_heats (list[Tensor]): Bottom-right corner heatmaps for each + level with shape (N, num_classes, H, W). + tl_embs (list[Tensor]): Top-left corner embeddings for each level + with shape (N, corner_emb_channels, H, W). + br_embs (list[Tensor]): Bottom-right corner embeddings for each + level with shape (N, corner_emb_channels, H, W). + tl_offs (list[Tensor]): Top-left corner offsets for each level + with shape (N, corner_offset_channels, H, W). + br_offs (list[Tensor]): Bottom-right corner offsets for each level + with shape (N, corner_offset_channels, H, W). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + """ + assert tl_heats[-1].shape[0] == br_heats[-1].shape[0] == len(img_metas) + result_list = [] + for img_id in range(len(img_metas)): + result_list.append( + self._get_bboxes_single( + tl_heats[-1][img_id:img_id + 1, :], + br_heats[-1][img_id:img_id + 1, :], + tl_offs[-1][img_id:img_id + 1, :], + br_offs[-1][img_id:img_id + 1, :], + img_metas[img_id], + tl_emb=tl_embs[-1][img_id:img_id + 1, :], + br_emb=br_embs[-1][img_id:img_id + 1, :], + rescale=rescale, + with_nms=with_nms)) + + return result_list + + def _get_bboxes_single(self, + tl_heat, + br_heat, + tl_off, + br_off, + img_meta, + tl_emb=None, + br_emb=None, + tl_centripetal_shift=None, + br_centripetal_shift=None, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into bbox predictions. + + Args: + tl_heat (Tensor): Top-left corner heatmap for current level with + shape (N, num_classes, H, W). + br_heat (Tensor): Bottom-right corner heatmap for current level + with shape (N, num_classes, H, W). + tl_off (Tensor): Top-left corner offset for current level with + shape (N, corner_offset_channels, H, W). + br_off (Tensor): Bottom-right corner offset for current level with + shape (N, corner_offset_channels, H, W). + img_meta (dict): Meta information of current image, e.g., + image size, scaling factor, etc. + tl_emb (Tensor): Top-left corner embedding for current level with + shape (N, corner_emb_channels, H, W). + br_emb (Tensor): Bottom-right corner embedding for current level + with shape (N, corner_emb_channels, H, W). + tl_centripetal_shift: Top-left corner's centripetal shift for + current level with shape (N, 2, H, W). + br_centripetal_shift: Bottom-right corner's centripetal shift for + current level with shape (N, 2, H, W). + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + """ + if isinstance(img_meta, (list, tuple)): + img_meta = img_meta[0] + + batch_bboxes, batch_scores, batch_clses = self.decode_heatmap( + tl_heat=tl_heat.sigmoid(), + br_heat=br_heat.sigmoid(), + tl_off=tl_off, + br_off=br_off, + tl_emb=tl_emb, + br_emb=br_emb, + tl_centripetal_shift=tl_centripetal_shift, + br_centripetal_shift=br_centripetal_shift, + img_meta=img_meta, + k=self.test_cfg.corner_topk, + kernel=self.test_cfg.local_maximum_kernel, + distance_threshold=self.test_cfg.distance_threshold) + + if rescale: + batch_bboxes /= batch_bboxes.new_tensor(img_meta['scale_factor']) + + bboxes = batch_bboxes.view([-1, 4]) + scores = batch_scores.view([-1, 1]) + clses = batch_clses.view([-1, 1]) + + idx = scores.argsort(dim=0, descending=True) + bboxes = bboxes[idx].view([-1, 4]) + scores = scores[idx].view(-1) + clses = clses[idx].view(-1) + + detections = torch.cat([bboxes, scores.unsqueeze(-1)], -1) + keepinds = (detections[:, -1] > -0.1) + detections = detections[keepinds] + labels = clses[keepinds] + + if with_nms: + detections, labels = self._bboxes_nms(detections, labels, + self.test_cfg) + + return detections, labels + + def _bboxes_nms(self, bboxes, labels, cfg): + if labels.numel() == 0: + return bboxes, labels + out_bboxes, keep = batched_nms(bboxes[:, :4], bboxes[:, -1], labels, + cfg.nms_cfg) + out_labels = labels[keep] + + if len(out_bboxes) > 0: + idx = torch.argsort(out_bboxes[:, -1], descending=True) + idx = idx[:cfg.max_per_img] + out_bboxes = out_bboxes[idx] + out_labels = out_labels[idx] + + return out_bboxes, out_labels + + def _gather_feat(self, feat, ind, mask=None): + """Gather feature according to index. + + Args: + feat (Tensor): Target feature map. + ind (Tensor): Target coord index. + mask (Tensor | None): Mask of featuremap. Default: None. + + Returns: + feat (Tensor): Gathered feature. + """ + dim = feat.size(2) + ind = ind.unsqueeze(2).repeat(1, 1, dim) + feat = feat.gather(1, ind) + if mask is not None: + mask = mask.unsqueeze(2).expand_as(feat) + feat = feat[mask] + feat = feat.view(-1, dim) + return feat + + def _local_maximum(self, heat, kernel=3): + """Extract local maximum pixel with given kernal. + + Args: + heat (Tensor): Target heatmap. + kernel (int): Kernel size of max pooling. Default: 3. + + Returns: + heat (Tensor): A heatmap where local maximum pixels maintain its + own value and other positions are 0. + """ + pad = (kernel - 1) // 2 + hmax = F.max_pool2d(heat, kernel, stride=1, padding=pad) + keep = (hmax == heat).float() + return heat * keep + + def _transpose_and_gather_feat(self, feat, ind): + """Transpose and gather feature according to index. + + Args: + feat (Tensor): Target feature map. + ind (Tensor): Target coord index. + + Returns: + feat (Tensor): Transposed and gathered feature. + """ + feat = feat.permute(0, 2, 3, 1).contiguous() + feat = feat.view(feat.size(0), -1, feat.size(3)) + feat = self._gather_feat(feat, ind) + return feat + + def _topk(self, scores, k=20): + """Get top k positions from heatmap. + + Args: + scores (Tensor): Target heatmap with shape + [batch, num_classes, height, width]. + k (int): Target number. Default: 20. + + Returns: + tuple[torch.Tensor]: Scores, indexes, categories and coords of + topk keypoint. Containing following Tensors: + + - topk_scores (Tensor): Max scores of each topk keypoint. + - topk_inds (Tensor): Indexes of each topk keypoint. + - topk_clses (Tensor): Categories of each topk keypoint. + - topk_ys (Tensor): Y-coord of each topk keypoint. + - topk_xs (Tensor): X-coord of each topk keypoint. + """ + batch, _, height, width = scores.size() + topk_scores, topk_inds = torch.topk(scores.view(batch, -1), k) + topk_clses = topk_inds // (height * width) + topk_inds = topk_inds % (height * width) + topk_ys = topk_inds // width + topk_xs = (topk_inds % width).int().float() + return topk_scores, topk_inds, topk_clses, topk_ys, topk_xs + + def decode_heatmap(self, + tl_heat, + br_heat, + tl_off, + br_off, + tl_emb=None, + br_emb=None, + tl_centripetal_shift=None, + br_centripetal_shift=None, + img_meta=None, + k=100, + kernel=3, + distance_threshold=0.5, + num_dets=1000): + """Transform outputs for a single batch item into raw bbox predictions. + + Args: + tl_heat (Tensor): Top-left corner heatmap for current level with + shape (N, num_classes, H, W). + br_heat (Tensor): Bottom-right corner heatmap for current level + with shape (N, num_classes, H, W). + tl_off (Tensor): Top-left corner offset for current level with + shape (N, corner_offset_channels, H, W). + br_off (Tensor): Bottom-right corner offset for current level with + shape (N, corner_offset_channels, H, W). + tl_emb (Tensor | None): Top-left corner embedding for current + level with shape (N, corner_emb_channels, H, W). + br_emb (Tensor | None): Bottom-right corner embedding for current + level with shape (N, corner_emb_channels, H, W). + tl_centripetal_shift (Tensor | None): Top-left centripetal shift + for current level with shape (N, 2, H, W). + br_centripetal_shift (Tensor | None): Bottom-right centripetal + shift for current level with shape (N, 2, H, W). + img_meta (dict): Meta information of current image, e.g., + image size, scaling factor, etc. + k (int): Get top k corner keypoints from heatmap. + kernel (int): Max pooling kernel for extract local maximum pixels. + distance_threshold (float): Distance threshold. Top-left and + bottom-right corner keypoints with feature distance less than + the threshold will be regarded as keypoints from same object. + num_dets (int): Num of raw boxes before doing nms. + + Returns: + tuple[torch.Tensor]: Decoded output of CornerHead, containing the + following Tensors: + + - bboxes (Tensor): Coords of each box. + - scores (Tensor): Scores of each box. + - clses (Tensor): Categories of each box. + """ + with_embedding = tl_emb is not None and br_emb is not None + with_centripetal_shift = ( + tl_centripetal_shift is not None + and br_centripetal_shift is not None) + assert with_embedding + with_centripetal_shift == 1 + batch, _, height, width = tl_heat.size() + inp_h, inp_w, _ = img_meta['pad_shape'] + + # perform nms on heatmaps + tl_heat = self._local_maximum(tl_heat, kernel=kernel) + br_heat = self._local_maximum(br_heat, kernel=kernel) + + tl_scores, tl_inds, tl_clses, tl_ys, tl_xs = self._topk(tl_heat, k=k) + br_scores, br_inds, br_clses, br_ys, br_xs = self._topk(br_heat, k=k) + + # We use repeat instead of expand here because expand is a + # shallow-copy function. Thus it could cause unexpected testing result + # sometimes. Using expand will decrease about 10% mAP during testing + # compared to repeat. + tl_ys = tl_ys.view(batch, k, 1).repeat(1, 1, k) + tl_xs = tl_xs.view(batch, k, 1).repeat(1, 1, k) + br_ys = br_ys.view(batch, 1, k).repeat(1, k, 1) + br_xs = br_xs.view(batch, 1, k).repeat(1, k, 1) + + tl_off = self._transpose_and_gather_feat(tl_off, tl_inds) + tl_off = tl_off.view(batch, k, 1, 2) + br_off = self._transpose_and_gather_feat(br_off, br_inds) + br_off = br_off.view(batch, 1, k, 2) + + tl_xs = tl_xs + tl_off[..., 0] + tl_ys = tl_ys + tl_off[..., 1] + br_xs = br_xs + br_off[..., 0] + br_ys = br_ys + br_off[..., 1] + + if with_centripetal_shift: + tl_centripetal_shift = self._transpose_and_gather_feat( + tl_centripetal_shift, tl_inds).view(batch, k, 1, 2).exp() + br_centripetal_shift = self._transpose_and_gather_feat( + br_centripetal_shift, br_inds).view(batch, 1, k, 2).exp() + + tl_ctxs = tl_xs + tl_centripetal_shift[..., 0] + tl_ctys = tl_ys + tl_centripetal_shift[..., 1] + br_ctxs = br_xs - br_centripetal_shift[..., 0] + br_ctys = br_ys - br_centripetal_shift[..., 1] + + # all possible boxes based on top k corners (ignoring class) + tl_xs *= (inp_w / width) + tl_ys *= (inp_h / height) + br_xs *= (inp_w / width) + br_ys *= (inp_h / height) + + if with_centripetal_shift: + tl_ctxs *= (inp_w / width) + tl_ctys *= (inp_h / height) + br_ctxs *= (inp_w / width) + br_ctys *= (inp_h / height) + + x_off = img_meta['border'][2] + y_off = img_meta['border'][0] + + tl_xs -= x_off + tl_ys -= y_off + br_xs -= x_off + br_ys -= y_off + + tl_xs *= tl_xs.gt(0.0).type_as(tl_xs) + tl_ys *= tl_ys.gt(0.0).type_as(tl_ys) + br_xs *= br_xs.gt(0.0).type_as(br_xs) + br_ys *= br_ys.gt(0.0).type_as(br_ys) + + bboxes = torch.stack((tl_xs, tl_ys, br_xs, br_ys), dim=3) + area_bboxes = ((br_xs - tl_xs) * (br_ys - tl_ys)).abs() + + if with_centripetal_shift: + tl_ctxs -= x_off + tl_ctys -= y_off + br_ctxs -= x_off + br_ctys -= y_off + + tl_ctxs *= tl_ctxs.gt(0.0).type_as(tl_ctxs) + tl_ctys *= tl_ctys.gt(0.0).type_as(tl_ctys) + br_ctxs *= br_ctxs.gt(0.0).type_as(br_ctxs) + br_ctys *= br_ctys.gt(0.0).type_as(br_ctys) + + ct_bboxes = torch.stack((tl_ctxs, tl_ctys, br_ctxs, br_ctys), + dim=3) + area_ct_bboxes = ((br_ctxs - tl_ctxs) * (br_ctys - tl_ctys)).abs() + + rcentral = torch.zeros_like(ct_bboxes) + # magic nums from paper section 4.1 + mu = torch.ones_like(area_bboxes) / 2.4 + mu[area_bboxes > 3500] = 1 / 2.1 # large bbox have smaller mu + + bboxes_center_x = (bboxes[..., 0] + bboxes[..., 2]) / 2 + bboxes_center_y = (bboxes[..., 1] + bboxes[..., 3]) / 2 + rcentral[..., 0] = bboxes_center_x - mu * (bboxes[..., 2] - + bboxes[..., 0]) / 2 + rcentral[..., 1] = bboxes_center_y - mu * (bboxes[..., 3] - + bboxes[..., 1]) / 2 + rcentral[..., 2] = bboxes_center_x + mu * (bboxes[..., 2] - + bboxes[..., 0]) / 2 + rcentral[..., 3] = bboxes_center_y + mu * (bboxes[..., 3] - + bboxes[..., 1]) / 2 + area_rcentral = ((rcentral[..., 2] - rcentral[..., 0]) * + (rcentral[..., 3] - rcentral[..., 1])).abs() + dists = area_ct_bboxes / area_rcentral + + tl_ctx_inds = (ct_bboxes[..., 0] <= rcentral[..., 0]) | ( + ct_bboxes[..., 0] >= rcentral[..., 2]) + tl_cty_inds = (ct_bboxes[..., 1] <= rcentral[..., 1]) | ( + ct_bboxes[..., 1] >= rcentral[..., 3]) + br_ctx_inds = (ct_bboxes[..., 2] <= rcentral[..., 0]) | ( + ct_bboxes[..., 2] >= rcentral[..., 2]) + br_cty_inds = (ct_bboxes[..., 3] <= rcentral[..., 1]) | ( + ct_bboxes[..., 3] >= rcentral[..., 3]) + + if with_embedding: + tl_emb = self._transpose_and_gather_feat(tl_emb, tl_inds) + tl_emb = tl_emb.view(batch, k, 1) + br_emb = self._transpose_and_gather_feat(br_emb, br_inds) + br_emb = br_emb.view(batch, 1, k) + dists = torch.abs(tl_emb - br_emb) + + tl_scores = tl_scores.view(batch, k, 1).repeat(1, 1, k) + br_scores = br_scores.view(batch, 1, k).repeat(1, k, 1) + + scores = (tl_scores + br_scores) / 2 # scores for all possible boxes + + # tl and br should have same class + tl_clses = tl_clses.view(batch, k, 1).repeat(1, 1, k) + br_clses = br_clses.view(batch, 1, k).repeat(1, k, 1) + cls_inds = (tl_clses != br_clses) + + # reject boxes based on distances + dist_inds = dists > distance_threshold + + # reject boxes based on widths and heights + width_inds = (br_xs <= tl_xs) + height_inds = (br_ys <= tl_ys) + + scores[cls_inds] = -1 + scores[width_inds] = -1 + scores[height_inds] = -1 + scores[dist_inds] = -1 + if with_centripetal_shift: + scores[tl_ctx_inds] = -1 + scores[tl_cty_inds] = -1 + scores[br_ctx_inds] = -1 + scores[br_cty_inds] = -1 + + scores = scores.view(batch, -1) + scores, inds = torch.topk(scores, num_dets) + scores = scores.unsqueeze(2) + + bboxes = bboxes.view(batch, -1, 4) + bboxes = self._gather_feat(bboxes, inds) + + clses = tl_clses.contiguous().view(batch, -1, 1) + clses = self._gather_feat(clses, inds).float() + + return bboxes, scores, clses diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/dense_test_mixins.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/dense_test_mixins.py new file mode 100644 index 00000000..a07c9d42 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/dense_test_mixins.py @@ -0,0 +1,97 @@ +from inspect import signature + +import torch + +from mmdet.core import bbox2result, bbox_mapping_back, multiclass_nms + + +class BBoxTestMixin(object): + """Mixin class for test time augmentation of bboxes.""" + + def merge_aug_bboxes(self, aug_bboxes, aug_scores, img_metas): + """Merge augmented detection bboxes and scores. + + Args: + aug_bboxes (list[Tensor]): shape (n, 4*#class) + aug_scores (list[Tensor] or None): shape (n, #class) + img_shapes (list[Tensor]): shape (3, ). + + Returns: + tuple: (bboxes, scores) + """ + recovered_bboxes = [] + for bboxes, img_info in zip(aug_bboxes, img_metas): + img_shape = img_info[0]['img_shape'] + scale_factor = img_info[0]['scale_factor'] + flip = img_info[0]['flip'] + flip_direction = img_info[0]['flip_direction'] + bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip, + flip_direction) + recovered_bboxes.append(bboxes) + bboxes = torch.cat(recovered_bboxes, dim=0) + if aug_scores is None: + return bboxes + else: + scores = torch.cat(aug_scores, dim=0) + return bboxes, scores + + def aug_test_bboxes(self, feats, img_metas, rescale=False): + """Test det bboxes with test time augmentation. + + Args: + feats (list[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains features for all images in the batch. + img_metas (list[list[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. each dict has image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[ndarray]: bbox results of each class + """ + # check with_nms argument + gb_sig = signature(self.get_bboxes) + gb_args = [p.name for p in gb_sig.parameters.values()] + gbs_sig = signature(self._get_bboxes_single) + gbs_args = [p.name for p in gbs_sig.parameters.values()] + assert ('with_nms' in gb_args) and ('with_nms' in gbs_args), \ + f'{self.__class__.__name__}' \ + ' does not support test-time augmentation' + + aug_bboxes = [] + aug_scores = [] + aug_factors = [] # score_factors for NMS + for x, img_meta in zip(feats, img_metas): + # only one image in the batch + outs = self.forward(x) + bbox_inputs = outs + (img_meta, self.test_cfg, False, False) + bbox_outputs = self.get_bboxes(*bbox_inputs)[0] + aug_bboxes.append(bbox_outputs[0]) + aug_scores.append(bbox_outputs[1]) + # bbox_outputs of some detectors (e.g., ATSS, FCOS, YOLOv3) + # contains additional element to adjust scores before NMS + if len(bbox_outputs) >= 3: + aug_factors.append(bbox_outputs[2]) + + # after merging, bboxes will be rescaled to the original image size + merged_bboxes, merged_scores = self.merge_aug_bboxes( + aug_bboxes, aug_scores, img_metas) + merged_factors = torch.cat(aug_factors, dim=0) if aug_factors else None + det_bboxes, det_labels = multiclass_nms( + merged_bboxes, + merged_scores, + self.test_cfg.score_thr, + self.test_cfg.nms, + self.test_cfg.max_per_img, + score_factors=merged_factors) + + if rescale: + _det_bboxes = det_bboxes + else: + _det_bboxes = det_bboxes.clone() + _det_bboxes[:, :4] *= det_bboxes.new_tensor( + img_metas[0][0]['scale_factor']) + bbox_results = bbox2result(_det_bboxes, det_labels, self.num_classes) + return bbox_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/embedding_rpn_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/embedding_rpn_head.py new file mode 100644 index 00000000..b9101ee5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/embedding_rpn_head.py @@ -0,0 +1,120 @@ +import mmcv +import torch +import torch.nn as nn +from mmcv import tensor2imgs + +from mmdet.models.builder import HEADS +from ...core import bbox_cxcywh_to_xyxy + + +@HEADS.register_module() +class EmbeddingRPNHead(nn.Module): + """RPNHead in the `Sparse R-CNN `_ . + + Unlike traditional RPNHead, this module does not need FPN input, but just + decode `init_proposal_bboxes` and expand the first dimension of + `init_proposal_bboxes` and `init_proposal_features` to the batch_size. + + Args: + num_proposals (int): Number of init_proposals. Default 100. + proposal_feature_channel (int): Channel number of + init_proposal_feature. Defaults to 256. + """ + + def __init__(self, + num_proposals=100, + proposal_feature_channel=256, + **kwargs): + super(EmbeddingRPNHead, self).__init__() + self.num_proposals = num_proposals + self.proposal_feature_channel = proposal_feature_channel + self._init_layers() + + def _init_layers(self): + """Initialize a sparse set of proposal boxes and proposal features.""" + self.init_proposal_bboxes = nn.Embedding(self.num_proposals, 4) + self.init_proposal_features = nn.Embedding( + self.num_proposals, self.proposal_feature_channel) + + def init_weights(self): + """Initialize the init_proposal_bboxes as normalized. + + [c_x, c_y, w, h], and we initialize it to the size of the entire + image. + """ + nn.init.constant_(self.init_proposal_bboxes.weight[:, :2], 0.5) + nn.init.constant_(self.init_proposal_bboxes.weight[:, 2:], 1) + + def _decode_init_proposals(self, imgs, img_metas): + """Decode init_proposal_bboxes according to the size of images and + expand dimension of init_proposal_features to batch_size. + + Args: + imgs (list[Tensor]): List of FPN features. + img_metas (list[dict]): List of meta-information of + images. Need the img_shape to decode the init_proposals. + + Returns: + Tuple(Tensor): + + - proposals (Tensor): Decoded proposal bboxes, + has shape (batch_size, num_proposals, 4). + - init_proposal_features (Tensor): Expanded proposal + features, has shape + (batch_size, num_proposals, proposal_feature_channel). + - imgs_whwh (Tensor): Tensor with shape + (batch_size, 4), the dimension means + [img_width, img_height, img_width, img_height]. + """ + proposals = self.init_proposal_bboxes.weight.clone() + proposals = bbox_cxcywh_to_xyxy(proposals) + num_imgs = len(imgs[0]) + imgs_whwh = [] + for meta in img_metas: + h, w, _ = meta['img_shape'] + imgs_whwh.append(imgs[0].new_tensor([[w, h, w, h]])) + imgs_whwh = torch.cat(imgs_whwh, dim=0) + imgs_whwh = imgs_whwh[:, None, :] + + # imgs_whwh has shape (batch_size, 1, 4) + # The shape of proposals change from (num_proposals, 4) + # to (batch_size ,num_proposals, 4) + proposals = proposals * imgs_whwh + + init_proposal_features = self.init_proposal_features.weight.clone() + init_proposal_features = init_proposal_features[None].expand( + num_imgs, *init_proposal_features.size()) + return proposals, init_proposal_features, imgs_whwh + + def forward_dummy(self, img, img_metas): + """Dummy forward function. + + Used in flops calculation. + """ + return self._decode_init_proposals(img, img_metas) + + def forward_train(self, img, img_metas): + """Forward function in training stage.""" + return self._decode_init_proposals(img, img_metas) + + def simple_test_rpn(self, img, img_metas): + """Forward function in testing stage.""" + return self._decode_init_proposals(img, img_metas) + + def show_result(self, data): + """Show the init proposals in EmbeddingRPN. + + Args: + data (dict): Dict contains image and + corresponding meta information. + """ + img_tensor = data['img'][0] + img_metas = data['img_metas'][0].data[0] + imgs = tensor2imgs(img_tensor, **img_metas[0]['img_norm_cfg']) + proposals, _ = self._decode_init_proposals(data['img'], + data['img_metas']) + assert len(imgs) == len(img_metas) + for img, img_meta in zip(imgs, img_metas): + h, w, _ = img_meta['img_shape'] + img_show = img[:h, :w, :] + mmcv.imshow_bboxes(img_show, proposals) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fcos_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fcos_head.py new file mode 100644 index 00000000..5bffab55 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fcos_head.py @@ -0,0 +1,577 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import Scale, normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import distance2bbox, multi_apply, multiclass_nms, reduce_mean +from ..builder import HEADS, build_loss +from .anchor_free_head import AnchorFreeHead + +INF = 1e8 + + +@HEADS.register_module() +class FCOSHead(AnchorFreeHead): + """Anchor-free head used in `FCOS `_. + + The FCOS head does not use anchor boxes. Instead bounding boxes are + predicted at each pixel and a centerness measure is used to supress + low-quality predictions. + Here norm_on_bbox, centerness_on_reg, dcn_on_last_conv are training + tricks used in official repo, which will bring remarkable mAP gains + of up to 4.9. Please see https://github.com/tianzhi0549/FCOS for + more detail. + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + strides (list[int] | list[tuple[int, int]]): Strides of points + in multiple feature levels. Default: (4, 8, 16, 32, 64). + regress_ranges (tuple[tuple[int, int]]): Regress range of multiple + level points. + center_sampling (bool): If true, use center sampling. Default: False. + center_sample_radius (float): Radius of center sampling. Default: 1.5. + norm_on_bbox (bool): If true, normalize the regression targets + with FPN strides. Default: False. + centerness_on_reg (bool): If true, position centerness on the + regress branch. Please refer to https://github.com/tianzhi0549/FCOS/issues/89#issuecomment-516877042. + Default: False. + conv_bias (bool | str): If specified as `auto`, it will be decided by the + norm_cfg. Bias of conv will be set as True if `norm_cfg` is None, otherwise + False. Default: "auto". + loss_cls (dict): Config of classification loss. + loss_bbox (dict): Config of localization loss. + loss_centerness (dict): Config of centerness loss. + norm_cfg (dict): dictionary to construct and config norm layer. + Default: norm_cfg=dict(type='GN', num_groups=32, requires_grad=True). + + Example: + >>> self = FCOSHead(11, 7) + >>> feats = [torch.rand(1, 7, s, s) for s in [4, 8, 16, 32, 64]] + >>> cls_score, bbox_pred, centerness = self.forward(feats) + >>> assert len(cls_score) == len(self.scales) + """ # noqa: E501 + + def __init__(self, + num_classes, + in_channels, + regress_ranges=((-1, 64), (64, 128), (128, 256), (256, 512), + (512, INF)), + center_sampling=False, + center_sample_radius=1.5, + norm_on_bbox=False, + centerness_on_reg=False, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox=dict(type='IoULoss', loss_weight=1.0), + loss_centerness=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + norm_cfg=dict(type='GN', num_groups=32, requires_grad=True), + **kwargs): + self.regress_ranges = regress_ranges + self.center_sampling = center_sampling + self.center_sample_radius = center_sample_radius + self.norm_on_bbox = norm_on_bbox + self.centerness_on_reg = centerness_on_reg + super().__init__( + num_classes, + in_channels, + loss_cls=loss_cls, + loss_bbox=loss_bbox, + norm_cfg=norm_cfg, + **kwargs) + self.loss_centerness = build_loss(loss_centerness) + + def _init_layers(self): + """Initialize layers of the head.""" + super()._init_layers() + self.conv_centerness = nn.Conv2d(self.feat_channels, 1, 3, padding=1) + self.scales = nn.ModuleList([Scale(1.0) for _ in self.strides]) + + def init_weights(self): + """Initialize weights of the head.""" + super().init_weights() + normal_init(self.conv_centerness, std=0.01) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: + cls_scores (list[Tensor]): Box scores for each scale level, \ + each is a 4D-tensor, the channel number is \ + num_points * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for each \ + scale level, each is a 4D-tensor, the channel number is \ + num_points * 4. + centernesses (list[Tensor]): Centerss for each scale level, \ + each is a 4D-tensor, the channel number is num_points * 1. + """ + return multi_apply(self.forward_single, feats, self.scales, + self.strides) + + def forward_single(self, x, scale, stride): + """Forward features of a single scale levle. + + Args: + x (Tensor): FPN feature maps of the specified stride. + scale (:obj: `mmcv.cnn.Scale`): Learnable scale module to resize + the bbox prediction. + stride (int): The corresponding stride for feature maps, only + used to normalize the bbox prediction when self.norm_on_bbox + is True. + + Returns: + tuple: scores for each class, bbox predictions and centerness \ + predictions of input feature maps. + """ + cls_score, bbox_pred, cls_feat, reg_feat = super().forward_single(x) + if self.centerness_on_reg: + centerness = self.conv_centerness(reg_feat) + else: + centerness = self.conv_centerness(cls_feat) + # scale the bbox_pred of different level + # float to avoid overflow when enabling FP16 + bbox_pred = scale(bbox_pred).float() + if self.norm_on_bbox: + bbox_pred = F.relu(bbox_pred) + if not self.training: + bbox_pred *= stride + else: + bbox_pred = bbox_pred.exp() + return cls_score, bbox_pred, centerness + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'centernesses')) + def loss(self, + cls_scores, + bbox_preds, + centernesses, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute loss of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level, + each is a 4D-tensor, the channel number is + num_points * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level, each is a 4D-tensor, the channel number is + num_points * 4. + centernesses (list[Tensor]): Centerss for each scale level, each + is a 4D-tensor, the channel number is num_points * 1. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + assert len(cls_scores) == len(bbox_preds) == len(centernesses) + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + all_level_points = self.get_points(featmap_sizes, bbox_preds[0].dtype, + bbox_preds[0].device) + labels, bbox_targets = self.get_targets(all_level_points, gt_bboxes, + gt_labels) + + num_imgs = cls_scores[0].size(0) + # flatten cls_scores, bbox_preds and centerness + flatten_cls_scores = [ + cls_score.permute(0, 2, 3, 1).reshape(-1, self.cls_out_channels) + for cls_score in cls_scores + ] + flatten_bbox_preds = [ + bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) + for bbox_pred in bbox_preds + ] + flatten_centerness = [ + centerness.permute(0, 2, 3, 1).reshape(-1) + for centerness in centernesses + ] + flatten_cls_scores = torch.cat(flatten_cls_scores) + flatten_bbox_preds = torch.cat(flatten_bbox_preds) + flatten_centerness = torch.cat(flatten_centerness) + flatten_labels = torch.cat(labels) + flatten_bbox_targets = torch.cat(bbox_targets) + # repeat points to align with bbox_preds + flatten_points = torch.cat( + [points.repeat(num_imgs, 1) for points in all_level_points]) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + bg_class_ind = self.num_classes + pos_inds = ((flatten_labels >= 0) + & (flatten_labels < bg_class_ind)).nonzero().reshape(-1) + num_pos = torch.tensor( + len(pos_inds), dtype=torch.float, device=bbox_preds[0].device) + num_pos = max(reduce_mean(num_pos), 1.0) + loss_cls = self.loss_cls( + flatten_cls_scores, flatten_labels, avg_factor=num_pos) + + pos_bbox_preds = flatten_bbox_preds[pos_inds] + pos_centerness = flatten_centerness[pos_inds] + + if len(pos_inds) > 0: + pos_bbox_targets = flatten_bbox_targets[pos_inds] + pos_centerness_targets = self.centerness_target(pos_bbox_targets) + pos_points = flatten_points[pos_inds] + pos_decoded_bbox_preds = distance2bbox(pos_points, pos_bbox_preds) + pos_decoded_target_preds = distance2bbox(pos_points, + pos_bbox_targets) + # centerness weighted iou loss + centerness_denorm = max( + reduce_mean(pos_centerness_targets.sum().detach()), 1e-6) + loss_bbox = self.loss_bbox( + pos_decoded_bbox_preds, + pos_decoded_target_preds, + weight=pos_centerness_targets, + avg_factor=centerness_denorm) + loss_centerness = self.loss_centerness( + pos_centerness, pos_centerness_targets, avg_factor=num_pos) + else: + loss_bbox = pos_bbox_preds.sum() + loss_centerness = pos_centerness.sum() + + return dict( + loss_cls=loss_cls, + loss_bbox=loss_bbox, + loss_centerness=loss_centerness) + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'centernesses')) + def get_bboxes(self, + cls_scores, + bbox_preds, + centernesses, + img_metas, + cfg=None, + rescale=False, + with_nms=True): + """Transform network output for a batch into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + with shape (N, num_points * num_classes, H, W). + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_points * 4, H, W). + centernesses (list[Tensor]): Centerness for each scale level with + shape (N, num_points * 1, H, W). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. Default: None. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + list[tuple[Tensor, Tensor]]: Each item in result_list is 2-tuple. + The first item is an (n, 5) tensor, where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. The second item is a + (n,) tensor where each item is the predicted class label of the + corresponding box. + """ + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + mlvl_points = self.get_points(featmap_sizes, bbox_preds[0].dtype, + bbox_preds[0].device) + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + centerness_pred_list = [ + centernesses[i][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + det_bboxes = self._get_bboxes_single( + cls_score_list, bbox_pred_list, centerness_pred_list, + mlvl_points, img_shape, scale_factor, cfg, rescale, with_nms) + result_list.append(det_bboxes) + return result_list + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + centernesses, + mlvl_points, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box scores for a single scale level + with shape (num_points * num_classes, H, W). + bbox_preds (list[Tensor]): Box energies / deltas for a single scale + level with shape (num_points * 4, H, W). + centernesses (list[Tensor]): Centerness for a single scale level + with shape (num_points * 4, H, W). + mlvl_points (list[Tensor]): Box reference for a single scale level + with shape (num_total_points, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arrange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + tuple(Tensor): + det_bboxes (Tensor): BBox predictions in shape (n, 5), where + the first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score + between 0 and 1. + det_labels (Tensor): A (n,) tensor where each item is the + predicted class label of the corresponding box. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) == len(mlvl_points) + mlvl_bboxes = [] + mlvl_scores = [] + mlvl_centerness = [] + for cls_score, bbox_pred, centerness, points in zip( + cls_scores, bbox_preds, centernesses, mlvl_points): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + scores = cls_score.permute(1, 2, 0).reshape( + -1, self.cls_out_channels).sigmoid() + centerness = centerness.permute(1, 2, 0).reshape(-1).sigmoid() + + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + max_scores, _ = (scores * centerness[:, None]).max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + points = points[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + centerness = centerness[topk_inds] + bboxes = distance2bbox(points, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_centerness.append(centerness) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + mlvl_centerness = torch.cat(mlvl_centerness) + + if with_nms: + det_bboxes, det_labels = multiclass_nms( + mlvl_bboxes, + mlvl_scores, + cfg.score_thr, + cfg.nms, + cfg.max_per_img, + score_factors=mlvl_centerness) + return det_bboxes, det_labels + else: + return mlvl_bboxes, mlvl_scores, mlvl_centerness + + def _get_points_single(self, + featmap_size, + stride, + dtype, + device, + flatten=False): + """Get points according to feature map sizes.""" + y, x = super()._get_points_single(featmap_size, stride, dtype, device) + points = torch.stack((x.reshape(-1) * stride, y.reshape(-1) * stride), + dim=-1) + stride // 2 + return points + + def get_targets(self, points, gt_bboxes_list, gt_labels_list): + """Compute regression, classification and centerss targets for points + in multiple images. + + Args: + points (list[Tensor]): Points of each fpn level, each has shape + (num_points, 2). + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image, + each has shape (num_gt, 4). + gt_labels_list (list[Tensor]): Ground truth labels of each box, + each has shape (num_gt,). + + Returns: + tuple: + concat_lvl_labels (list[Tensor]): Labels of each level. \ + concat_lvl_bbox_targets (list[Tensor]): BBox targets of each \ + level. + """ + assert len(points) == len(self.regress_ranges) + num_levels = len(points) + # expand regress ranges to align with points + expanded_regress_ranges = [ + points[i].new_tensor(self.regress_ranges[i])[None].expand_as( + points[i]) for i in range(num_levels) + ] + # concat all levels points and regress ranges + concat_regress_ranges = torch.cat(expanded_regress_ranges, dim=0) + concat_points = torch.cat(points, dim=0) + + # the number of points per img, per lvl + num_points = [center.size(0) for center in points] + + # get labels and bbox_targets of each image + labels_list, bbox_targets_list = multi_apply( + self._get_target_single, + gt_bboxes_list, + gt_labels_list, + points=concat_points, + regress_ranges=concat_regress_ranges, + num_points_per_lvl=num_points) + + # split to per img, per level + labels_list = [labels.split(num_points, 0) for labels in labels_list] + bbox_targets_list = [ + bbox_targets.split(num_points, 0) + for bbox_targets in bbox_targets_list + ] + + # concat per level image + concat_lvl_labels = [] + concat_lvl_bbox_targets = [] + for i in range(num_levels): + concat_lvl_labels.append( + torch.cat([labels[i] for labels in labels_list])) + bbox_targets = torch.cat( + [bbox_targets[i] for bbox_targets in bbox_targets_list]) + if self.norm_on_bbox: + bbox_targets = bbox_targets / self.strides[i] + concat_lvl_bbox_targets.append(bbox_targets) + return concat_lvl_labels, concat_lvl_bbox_targets + + def _get_target_single(self, gt_bboxes, gt_labels, points, regress_ranges, + num_points_per_lvl): + """Compute regression and classification targets for a single image.""" + num_points = points.size(0) + num_gts = gt_labels.size(0) + if num_gts == 0: + return gt_labels.new_full((num_points,), self.num_classes), \ + gt_bboxes.new_zeros((num_points, 4)) + + areas = (gt_bboxes[:, 2] - gt_bboxes[:, 0]) * ( + gt_bboxes[:, 3] - gt_bboxes[:, 1]) + # TODO: figure out why these two are different + # areas = areas[None].expand(num_points, num_gts) + areas = areas[None].repeat(num_points, 1) + regress_ranges = regress_ranges[:, None, :].expand( + num_points, num_gts, 2) + gt_bboxes = gt_bboxes[None].expand(num_points, num_gts, 4) + xs, ys = points[:, 0], points[:, 1] + xs = xs[:, None].expand(num_points, num_gts) + ys = ys[:, None].expand(num_points, num_gts) + + left = xs - gt_bboxes[..., 0] + right = gt_bboxes[..., 2] - xs + top = ys - gt_bboxes[..., 1] + bottom = gt_bboxes[..., 3] - ys + bbox_targets = torch.stack((left, top, right, bottom), -1) + + if self.center_sampling: + # condition1: inside a `center bbox` + radius = self.center_sample_radius + center_xs = (gt_bboxes[..., 0] + gt_bboxes[..., 2]) / 2 + center_ys = (gt_bboxes[..., 1] + gt_bboxes[..., 3]) / 2 + center_gts = torch.zeros_like(gt_bboxes) + stride = center_xs.new_zeros(center_xs.shape) + + # project the points on current lvl back to the `original` sizes + lvl_begin = 0 + for lvl_idx, num_points_lvl in enumerate(num_points_per_lvl): + lvl_end = lvl_begin + num_points_lvl + stride[lvl_begin:lvl_end] = self.strides[lvl_idx] * radius + lvl_begin = lvl_end + + x_mins = center_xs - stride + y_mins = center_ys - stride + x_maxs = center_xs + stride + y_maxs = center_ys + stride + center_gts[..., 0] = torch.where(x_mins > gt_bboxes[..., 0], + x_mins, gt_bboxes[..., 0]) + center_gts[..., 1] = torch.where(y_mins > gt_bboxes[..., 1], + y_mins, gt_bboxes[..., 1]) + center_gts[..., 2] = torch.where(x_maxs > gt_bboxes[..., 2], + gt_bboxes[..., 2], x_maxs) + center_gts[..., 3] = torch.where(y_maxs > gt_bboxes[..., 3], + gt_bboxes[..., 3], y_maxs) + + cb_dist_left = xs - center_gts[..., 0] + cb_dist_right = center_gts[..., 2] - xs + cb_dist_top = ys - center_gts[..., 1] + cb_dist_bottom = center_gts[..., 3] - ys + center_bbox = torch.stack( + (cb_dist_left, cb_dist_top, cb_dist_right, cb_dist_bottom), -1) + inside_gt_bbox_mask = center_bbox.min(-1)[0] > 0 + else: + # condition1: inside a gt bbox + inside_gt_bbox_mask = bbox_targets.min(-1)[0] > 0 + + # condition2: limit the regression range for each location + max_regress_distance = bbox_targets.max(-1)[0] + inside_regress_range = ( + (max_regress_distance >= regress_ranges[..., 0]) + & (max_regress_distance <= regress_ranges[..., 1])) + + # if there are still more than one objects for a location, + # we choose the one with minimal area + areas[inside_gt_bbox_mask == 0] = INF + areas[inside_regress_range == 0] = INF + min_area, min_area_inds = areas.min(dim=1) + + labels = gt_labels[min_area_inds] + labels[min_area == INF] = self.num_classes # set as BG + bbox_targets = bbox_targets[range(num_points), min_area_inds] + + return labels, bbox_targets + + def centerness_target(self, pos_bbox_targets): + """Compute centerness targets. + + Args: + pos_bbox_targets (Tensor): BBox targets of positive bboxes in shape + (num_pos, 4) + + Returns: + Tensor: Centerness target. + """ + # only calculate pos centerness targets, otherwise there may be nan + left_right = pos_bbox_targets[:, [0, 2]] + top_bottom = pos_bbox_targets[:, [1, 3]] + centerness_targets = ( + left_right.min(dim=-1)[0] / left_right.max(dim=-1)[0]) * ( + top_bottom.min(dim=-1)[0] / top_bottom.max(dim=-1)[0]) + return torch.sqrt(centerness_targets) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fovea_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fovea_head.py new file mode 100644 index 00000000..c8ccea78 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fovea_head.py @@ -0,0 +1,341 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, normal_init +from mmcv.ops import DeformConv2d + +from mmdet.core import multi_apply, multiclass_nms +from ..builder import HEADS +from .anchor_free_head import AnchorFreeHead + +INF = 1e8 + + +class FeatureAlign(nn.Module): + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + deform_groups=4): + super(FeatureAlign, self).__init__() + offset_channels = kernel_size * kernel_size * 2 + self.conv_offset = nn.Conv2d( + 4, deform_groups * offset_channels, 1, bias=False) + self.conv_adaption = DeformConv2d( + in_channels, + out_channels, + kernel_size=kernel_size, + padding=(kernel_size - 1) // 2, + deform_groups=deform_groups) + self.relu = nn.ReLU(inplace=True) + + def init_weights(self): + normal_init(self.conv_offset, std=0.1) + normal_init(self.conv_adaption, std=0.01) + + def forward(self, x, shape): + offset = self.conv_offset(shape) + x = self.relu(self.conv_adaption(x, offset)) + return x + + +@HEADS.register_module() +class FoveaHead(AnchorFreeHead): + """FoveaBox: Beyond Anchor-based Object Detector + https://arxiv.org/abs/1904.03797 + """ + + def __init__(self, + num_classes, + in_channels, + base_edge_list=(16, 32, 64, 128, 256), + scale_ranges=((8, 32), (16, 64), (32, 128), (64, 256), (128, + 512)), + sigma=0.4, + with_deform=False, + deform_groups=4, + **kwargs): + self.base_edge_list = base_edge_list + self.scale_ranges = scale_ranges + self.sigma = sigma + self.with_deform = with_deform + self.deform_groups = deform_groups + super().__init__(num_classes, in_channels, **kwargs) + + def _init_layers(self): + # box branch + super()._init_reg_convs() + self.conv_reg = nn.Conv2d(self.feat_channels, 4, 3, padding=1) + + # cls branch + if not self.with_deform: + super()._init_cls_convs() + self.conv_cls = nn.Conv2d( + self.feat_channels, self.cls_out_channels, 3, padding=1) + else: + self.cls_convs = nn.ModuleList() + self.cls_convs.append( + ConvModule( + self.feat_channels, (self.feat_channels * 4), + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + bias=self.norm_cfg is None)) + self.cls_convs.append( + ConvModule((self.feat_channels * 4), (self.feat_channels * 4), + 1, + stride=1, + padding=0, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + bias=self.norm_cfg is None)) + self.feature_adaption = FeatureAlign( + self.feat_channels, + self.feat_channels, + kernel_size=3, + deform_groups=self.deform_groups) + self.conv_cls = nn.Conv2d( + int(self.feat_channels * 4), + self.cls_out_channels, + 3, + padding=1) + + def init_weights(self): + super().init_weights() + if self.with_deform: + self.feature_adaption.init_weights() + + def forward_single(self, x): + cls_feat = x + reg_feat = x + for reg_layer in self.reg_convs: + reg_feat = reg_layer(reg_feat) + bbox_pred = self.conv_reg(reg_feat) + if self.with_deform: + cls_feat = self.feature_adaption(cls_feat, bbox_pred.exp()) + for cls_layer in self.cls_convs: + cls_feat = cls_layer(cls_feat) + cls_score = self.conv_cls(cls_feat) + return cls_score, bbox_pred + + def _get_points_single(self, *args, **kwargs): + y, x = super()._get_points_single(*args, **kwargs) + return y + 0.5, x + 0.5 + + def loss(self, + cls_scores, + bbox_preds, + gt_bbox_list, + gt_label_list, + img_metas, + gt_bboxes_ignore=None): + assert len(cls_scores) == len(bbox_preds) + + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + points = self.get_points(featmap_sizes, bbox_preds[0].dtype, + bbox_preds[0].device) + num_imgs = cls_scores[0].size(0) + flatten_cls_scores = [ + cls_score.permute(0, 2, 3, 1).reshape(-1, self.cls_out_channels) + for cls_score in cls_scores + ] + flatten_bbox_preds = [ + bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4) + for bbox_pred in bbox_preds + ] + flatten_cls_scores = torch.cat(flatten_cls_scores) + flatten_bbox_preds = torch.cat(flatten_bbox_preds) + flatten_labels, flatten_bbox_targets = self.get_targets( + gt_bbox_list, gt_label_list, featmap_sizes, points) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + pos_inds = ((flatten_labels >= 0) + & (flatten_labels < self.num_classes)).nonzero().view(-1) + num_pos = len(pos_inds) + + loss_cls = self.loss_cls( + flatten_cls_scores, flatten_labels, avg_factor=num_pos + num_imgs) + if num_pos > 0: + pos_bbox_preds = flatten_bbox_preds[pos_inds] + pos_bbox_targets = flatten_bbox_targets[pos_inds] + pos_weights = pos_bbox_targets.new_zeros( + pos_bbox_targets.size()) + 1.0 + loss_bbox = self.loss_bbox( + pos_bbox_preds, + pos_bbox_targets, + pos_weights, + avg_factor=num_pos) + else: + loss_bbox = torch.tensor( + 0, + dtype=flatten_bbox_preds.dtype, + device=flatten_bbox_preds.device) + return dict(loss_cls=loss_cls, loss_bbox=loss_bbox) + + def get_targets(self, gt_bbox_list, gt_label_list, featmap_sizes, points): + label_list, bbox_target_list = multi_apply( + self._get_target_single, + gt_bbox_list, + gt_label_list, + featmap_size_list=featmap_sizes, + point_list=points) + flatten_labels = [ + torch.cat([ + labels_level_img.flatten() for labels_level_img in labels_level + ]) for labels_level in zip(*label_list) + ] + flatten_bbox_targets = [ + torch.cat([ + bbox_targets_level_img.reshape(-1, 4) + for bbox_targets_level_img in bbox_targets_level + ]) for bbox_targets_level in zip(*bbox_target_list) + ] + flatten_labels = torch.cat(flatten_labels) + flatten_bbox_targets = torch.cat(flatten_bbox_targets) + return flatten_labels, flatten_bbox_targets + + def _get_target_single(self, + gt_bboxes_raw, + gt_labels_raw, + featmap_size_list=None, + point_list=None): + + gt_areas = torch.sqrt((gt_bboxes_raw[:, 2] - gt_bboxes_raw[:, 0]) * + (gt_bboxes_raw[:, 3] - gt_bboxes_raw[:, 1])) + label_list = [] + bbox_target_list = [] + # for each pyramid, find the cls and box target + for base_len, (lower_bound, upper_bound), stride, featmap_size, \ + (y, x) in zip(self.base_edge_list, self.scale_ranges, + self.strides, featmap_size_list, point_list): + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + labels = gt_labels_raw.new_zeros(featmap_size) + self.num_classes + bbox_targets = gt_bboxes_raw.new(featmap_size[0], featmap_size[1], + 4) + 1 + # scale assignment + hit_indices = ((gt_areas >= lower_bound) & + (gt_areas <= upper_bound)).nonzero().flatten() + if len(hit_indices) == 0: + label_list.append(labels) + bbox_target_list.append(torch.log(bbox_targets)) + continue + _, hit_index_order = torch.sort(-gt_areas[hit_indices]) + hit_indices = hit_indices[hit_index_order] + gt_bboxes = gt_bboxes_raw[hit_indices, :] / stride + gt_labels = gt_labels_raw[hit_indices] + half_w = 0.5 * (gt_bboxes[:, 2] - gt_bboxes[:, 0]) + half_h = 0.5 * (gt_bboxes[:, 3] - gt_bboxes[:, 1]) + # valid fovea area: left, right, top, down + pos_left = torch.ceil( + gt_bboxes[:, 0] + (1 - self.sigma) * half_w - 0.5).long().\ + clamp(0, featmap_size[1] - 1) + pos_right = torch.floor( + gt_bboxes[:, 0] + (1 + self.sigma) * half_w - 0.5).long().\ + clamp(0, featmap_size[1] - 1) + pos_top = torch.ceil( + gt_bboxes[:, 1] + (1 - self.sigma) * half_h - 0.5).long().\ + clamp(0, featmap_size[0] - 1) + pos_down = torch.floor( + gt_bboxes[:, 1] + (1 + self.sigma) * half_h - 0.5).long().\ + clamp(0, featmap_size[0] - 1) + for px1, py1, px2, py2, label, (gt_x1, gt_y1, gt_x2, gt_y2) in \ + zip(pos_left, pos_top, pos_right, pos_down, gt_labels, + gt_bboxes_raw[hit_indices, :]): + labels[py1:py2 + 1, px1:px2 + 1] = label + bbox_targets[py1:py2 + 1, px1:px2 + 1, 0] = \ + (stride * x[py1:py2 + 1, px1:px2 + 1] - gt_x1) / base_len + bbox_targets[py1:py2 + 1, px1:px2 + 1, 1] = \ + (stride * y[py1:py2 + 1, px1:px2 + 1] - gt_y1) / base_len + bbox_targets[py1:py2 + 1, px1:px2 + 1, 2] = \ + (gt_x2 - stride * x[py1:py2 + 1, px1:px2 + 1]) / base_len + bbox_targets[py1:py2 + 1, px1:px2 + 1, 3] = \ + (gt_y2 - stride * y[py1:py2 + 1, px1:px2 + 1]) / base_len + bbox_targets = bbox_targets.clamp(min=1. / 16, max=16.) + label_list.append(labels) + bbox_target_list.append(torch.log(bbox_targets)) + return label_list, bbox_target_list + + def get_bboxes(self, + cls_scores, + bbox_preds, + img_metas, + cfg=None, + rescale=None): + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + points = self.get_points( + featmap_sizes, + bbox_preds[0].dtype, + bbox_preds[0].device, + flatten=True) + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + det_bboxes = self._get_bboxes_single(cls_score_list, + bbox_pred_list, featmap_sizes, + points, img_shape, + scale_factor, cfg, rescale) + result_list.append(det_bboxes) + return result_list + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + featmap_sizes, + point_list, + img_shape, + scale_factor, + cfg, + rescale=False): + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) == len(point_list) + det_bboxes = [] + det_scores = [] + for cls_score, bbox_pred, featmap_size, stride, base_len, (y, x) \ + in zip(cls_scores, bbox_preds, featmap_sizes, self.strides, + self.base_edge_list, point_list): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + scores = cls_score.permute(1, 2, 0).reshape( + -1, self.cls_out_channels).sigmoid() + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4).exp() + nms_pre = cfg.get('nms_pre', -1) + if (nms_pre > 0) and (scores.shape[0] > nms_pre): + max_scores, _ = scores.max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + y = y[topk_inds] + x = x[topk_inds] + x1 = (stride * x - base_len * bbox_pred[:, 0]).\ + clamp(min=0, max=img_shape[1] - 1) + y1 = (stride * y - base_len * bbox_pred[:, 1]).\ + clamp(min=0, max=img_shape[0] - 1) + x2 = (stride * x + base_len * bbox_pred[:, 2]).\ + clamp(min=0, max=img_shape[1] - 1) + y2 = (stride * y + base_len * bbox_pred[:, 3]).\ + clamp(min=0, max=img_shape[0] - 1) + bboxes = torch.stack([x1, y1, x2, y2], -1) + det_bboxes.append(bboxes) + det_scores.append(scores) + det_bboxes = torch.cat(det_bboxes) + if rescale: + det_bboxes /= det_bboxes.new_tensor(scale_factor) + det_scores = torch.cat(det_scores) + padding = det_scores.new_zeros(det_scores.shape[0], 1) + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + det_scores = torch.cat([det_scores, padding], dim=1) + det_bboxes, det_labels = multiclass_nms(det_bboxes, det_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + return det_bboxes, det_labels diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/free_anchor_retina_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/free_anchor_retina_head.py new file mode 100644 index 00000000..79879fdc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/free_anchor_retina_head.py @@ -0,0 +1,270 @@ +import torch +import torch.nn.functional as F + +from mmdet.core import bbox_overlaps +from ..builder import HEADS +from .retina_head import RetinaHead + +EPS = 1e-12 + + +@HEADS.register_module() +class FreeAnchorRetinaHead(RetinaHead): + """FreeAnchor RetinaHead used in https://arxiv.org/abs/1909.02466. + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + stacked_convs (int): Number of conv layers in cls and reg tower. + Default: 4. + conv_cfg (dict): dictionary to construct and config conv layer. + Default: None. + norm_cfg (dict): dictionary to construct and config norm layer. + Default: norm_cfg=dict(type='GN', num_groups=32, + requires_grad=True). + pre_anchor_topk (int): Number of boxes that be token in each bag. + bbox_thr (float): The threshold of the saturated linear function. It is + usually the same with the IoU threshold used in NMS. + gamma (float): Gamma parameter in focal loss. + alpha (float): Alpha parameter in focal loss. + """ # noqa: W605 + + def __init__(self, + num_classes, + in_channels, + stacked_convs=4, + conv_cfg=None, + norm_cfg=None, + pre_anchor_topk=50, + bbox_thr=0.6, + gamma=2.0, + alpha=0.5, + **kwargs): + super(FreeAnchorRetinaHead, + self).__init__(num_classes, in_channels, stacked_convs, conv_cfg, + norm_cfg, **kwargs) + + self.pre_anchor_topk = pre_anchor_topk + self.bbox_thr = bbox_thr + self.gamma = gamma + self.alpha = alpha + + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == len(self.anchor_generator.base_anchors) + + anchor_list, _ = self.get_anchors(featmap_sizes, img_metas) + anchors = [torch.cat(anchor) for anchor in anchor_list] + + # concatenate each level + cls_scores = [ + cls.permute(0, 2, 3, + 1).reshape(cls.size(0), -1, self.cls_out_channels) + for cls in cls_scores + ] + bbox_preds = [ + bbox_pred.permute(0, 2, 3, 1).reshape(bbox_pred.size(0), -1, 4) + for bbox_pred in bbox_preds + ] + cls_scores = torch.cat(cls_scores, dim=1) + bbox_preds = torch.cat(bbox_preds, dim=1) + + cls_prob = torch.sigmoid(cls_scores) + box_prob = [] + num_pos = 0 + positive_losses = [] + for _, (anchors_, gt_labels_, gt_bboxes_, cls_prob_, + bbox_preds_) in enumerate( + zip(anchors, gt_labels, gt_bboxes, cls_prob, bbox_preds)): + + with torch.no_grad(): + if len(gt_bboxes_) == 0: + image_box_prob = torch.zeros( + anchors_.size(0), + self.cls_out_channels).type_as(bbox_preds_) + else: + # box_localization: a_{j}^{loc}, shape: [j, 4] + pred_boxes = self.bbox_coder.decode(anchors_, bbox_preds_) + + # object_box_iou: IoU_{ij}^{loc}, shape: [i, j] + object_box_iou = bbox_overlaps(gt_bboxes_, pred_boxes) + + # object_box_prob: P{a_{j} -> b_{i}}, shape: [i, j] + t1 = self.bbox_thr + t2 = object_box_iou.max( + dim=1, keepdim=True).values.clamp(min=t1 + 1e-12) + object_box_prob = ((object_box_iou - t1) / + (t2 - t1)).clamp( + min=0, max=1) + + # object_cls_box_prob: P{a_{j} -> b_{i}}, shape: [i, c, j] + num_obj = gt_labels_.size(0) + indices = torch.stack([ + torch.arange(num_obj).type_as(gt_labels_), gt_labels_ + ], + dim=0) + object_cls_box_prob = torch.sparse_coo_tensor( + indices, object_box_prob) + + # image_box_iou: P{a_{j} \in A_{+}}, shape: [c, j] + """ + from "start" to "end" implement: + image_box_iou = torch.sparse.max(object_cls_box_prob, + dim=0).t() + + """ + # start + box_cls_prob = torch.sparse.sum( + object_cls_box_prob, dim=0).to_dense() + + indices = torch.nonzero(box_cls_prob, as_tuple=False).t_() + if indices.numel() == 0: + image_box_prob = torch.zeros( + anchors_.size(0), + self.cls_out_channels).type_as(object_box_prob) + else: + nonzero_box_prob = torch.where( + (gt_labels_.unsqueeze(dim=-1) == indices[0]), + object_box_prob[:, indices[1]], + torch.tensor([ + 0 + ]).type_as(object_box_prob)).max(dim=0).values + + # upmap to shape [j, c] + image_box_prob = torch.sparse_coo_tensor( + indices.flip([0]), + nonzero_box_prob, + size=(anchors_.size(0), + self.cls_out_channels)).to_dense() + # end + + box_prob.append(image_box_prob) + + # construct bags for objects + match_quality_matrix = bbox_overlaps(gt_bboxes_, anchors_) + _, matched = torch.topk( + match_quality_matrix, + self.pre_anchor_topk, + dim=1, + sorted=False) + del match_quality_matrix + + # matched_cls_prob: P_{ij}^{cls} + matched_cls_prob = torch.gather( + cls_prob_[matched], 2, + gt_labels_.view(-1, 1, 1).repeat(1, self.pre_anchor_topk, + 1)).squeeze(2) + + # matched_box_prob: P_{ij}^{loc} + matched_anchors = anchors_[matched] + matched_object_targets = self.bbox_coder.encode( + matched_anchors, + gt_bboxes_.unsqueeze(dim=1).expand_as(matched_anchors)) + loss_bbox = self.loss_bbox( + bbox_preds_[matched], + matched_object_targets, + reduction_override='none').sum(-1) + matched_box_prob = torch.exp(-loss_bbox) + + # positive_losses: {-log( Mean-max(P_{ij}^{cls} * P_{ij}^{loc}) )} + num_pos += len(gt_bboxes_) + positive_losses.append( + self.positive_bag_loss(matched_cls_prob, matched_box_prob)) + positive_loss = torch.cat(positive_losses).sum() / max(1, num_pos) + + # box_prob: P{a_{j} \in A_{+}} + box_prob = torch.stack(box_prob, dim=0) + + # negative_loss: + # \sum_{j}{ FL((1 - P{a_{j} \in A_{+}}) * (1 - P_{j}^{bg})) } / n||B|| + negative_loss = self.negative_bag_loss(cls_prob, box_prob).sum() / max( + 1, num_pos * self.pre_anchor_topk) + + # avoid the absence of gradients in regression subnet + # when no ground-truth in a batch + if num_pos == 0: + positive_loss = bbox_preds.sum() * 0 + + losses = { + 'positive_bag_loss': positive_loss, + 'negative_bag_loss': negative_loss + } + return losses + + def positive_bag_loss(self, matched_cls_prob, matched_box_prob): + """Compute positive bag loss. + + :math:`-log( Mean-max(P_{ij}^{cls} * P_{ij}^{loc}) )`. + + :math:`P_{ij}^{cls}`: matched_cls_prob, classification probability of matched samples. + + :math:`P_{ij}^{loc}`: matched_box_prob, box probability of matched samples. + + Args: + matched_cls_prob (Tensor): Classification probabilty of matched + samples in shape (num_gt, pre_anchor_topk). + matched_box_prob (Tensor): BBox probability of matched samples, + in shape (num_gt, pre_anchor_topk). + + Returns: + Tensor: Positive bag loss in shape (num_gt,). + """ # noqa: E501, W605 + # bag_prob = Mean-max(matched_prob) + matched_prob = matched_cls_prob * matched_box_prob + weight = 1 / torch.clamp(1 - matched_prob, 1e-12, None) + weight /= weight.sum(dim=1).unsqueeze(dim=-1) + bag_prob = (weight * matched_prob).sum(dim=1) + # positive_bag_loss = -self.alpha * log(bag_prob) + return self.alpha * F.binary_cross_entropy( + bag_prob, torch.ones_like(bag_prob), reduction='none') + + def negative_bag_loss(self, cls_prob, box_prob): + """Compute negative bag loss. + + :math:`FL((1 - P_{a_{j} \in A_{+}}) * (1 - P_{j}^{bg}))`. + + :math:`P_{a_{j} \in A_{+}}`: Box_probability of matched samples. + + :math:`P_{j}^{bg}`: Classification probability of negative samples. + + Args: + cls_prob (Tensor): Classification probability, in shape + (num_img, num_anchors, num_classes). + box_prob (Tensor): Box probability, in shape + (num_img, num_anchors, num_classes). + + Returns: + Tensor: Negative bag loss in shape (num_img, num_anchors, num_classes). + """ # noqa: E501, W605 + prob = cls_prob * (1 - box_prob) + # There are some cases when neg_prob = 0. + # This will cause the neg_prob.log() to be inf without clamp. + prob = prob.clamp(min=EPS, max=1 - EPS) + negative_bag_loss = prob**self.gamma * F.binary_cross_entropy( + prob, torch.zeros_like(prob), reduction='none') + return (1 - self.alpha) * negative_bag_loss diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fsaf_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fsaf_head.py new file mode 100644 index 00000000..cf47a539 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/fsaf_head.py @@ -0,0 +1,422 @@ +import numpy as np +import torch +from mmcv.cnn import normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import (anchor_inside_flags, images_to_levels, multi_apply, + unmap) +from ..builder import HEADS +from ..losses.accuracy import accuracy +from ..losses.utils import weight_reduce_loss +from .retina_head import RetinaHead + + +@HEADS.register_module() +class FSAFHead(RetinaHead): + """Anchor-free head used in `FSAF `_. + + The head contains two subnetworks. The first classifies anchor boxes and + the second regresses deltas for the anchors (num_anchors is 1 for anchor- + free methods) + + Args: + *args: Same as its base class in :class:`RetinaHead` + score_threshold (float, optional): The score_threshold to calculate + positive recall. If given, prediction scores lower than this value + is counted as incorrect prediction. Default to None. + **kwargs: Same as its base class in :class:`RetinaHead` + + Example: + >>> import torch + >>> self = FSAFHead(11, 7) + >>> x = torch.rand(1, 7, 32, 32) + >>> cls_score, bbox_pred = self.forward_single(x) + >>> # Each anchor predicts a score for each class except background + >>> cls_per_anchor = cls_score.shape[1] / self.num_anchors + >>> box_per_anchor = bbox_pred.shape[1] / self.num_anchors + >>> assert cls_per_anchor == self.num_classes + >>> assert box_per_anchor == 4 + """ + + def __init__(self, *args, score_threshold=None, **kwargs): + super().__init__(*args, **kwargs) + self.score_threshold = score_threshold + + def forward_single(self, x): + """Forward feature map of a single scale level. + + Args: + x (Tensor): Feature map of a single scale level. + + Returns: + tuple (Tensor): + cls_score (Tensor): Box scores for each scale level + Has shape (N, num_points * num_classes, H, W). + bbox_pred (Tensor): Box energies / deltas for each scale + level with shape (N, num_points * 4, H, W). + """ + cls_score, bbox_pred = super().forward_single(x) + # relu: TBLR encoder only accepts positive bbox_pred + return cls_score, self.relu(bbox_pred) + + def init_weights(self): + """Initialize weights of the head.""" + super(FSAFHead, self).init_weights() + # The positive bias in self.retina_reg conv is to prevent predicted \ + # bbox with 0 area + normal_init(self.retina_reg, std=0.01, bias=0.25) + + def _get_targets_single(self, + flat_anchors, + valid_flags, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=1, + unmap_outputs=True): + """Compute regression and classification targets for anchors in a + single image. + + Most of the codes are the same with the base class + :obj: `AnchorHead`, except that it also collects and returns + the matched gt index in the image (from 0 to num_gt-1). If the + anchor bbox is not matched to any gt, the corresponding value in + pos_gt_inds is -1. + """ + inside_flags = anchor_inside_flags(flat_anchors, valid_flags, + img_meta['img_shape'][:2], + self.train_cfg.allowed_border) + if not inside_flags.any(): + return (None, ) * 7 + # Assign gt and sample anchors + anchors = flat_anchors[inside_flags.type(torch.bool), :] + assign_result = self.assigner.assign( + anchors, gt_bboxes, gt_bboxes_ignore, + None if self.sampling else gt_labels) + + sampling_result = self.sampler.sample(assign_result, anchors, + gt_bboxes) + + num_valid_anchors = anchors.shape[0] + bbox_targets = torch.zeros_like(anchors) + bbox_weights = torch.zeros_like(anchors) + labels = anchors.new_full((num_valid_anchors, ), + self.num_classes, + dtype=torch.long) + label_weights = anchors.new_zeros((num_valid_anchors, label_channels), + dtype=torch.float) + pos_gt_inds = anchors.new_full((num_valid_anchors, ), + -1, + dtype=torch.long) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + + if len(pos_inds) > 0: + if not self.reg_decoded_bbox: + pos_bbox_targets = self.bbox_coder.encode( + sampling_result.pos_bboxes, sampling_result.pos_gt_bboxes) + else: + # When the regression loss (e.g. `IouLoss`, `GIouLoss`) + # is applied directly on the decoded bounding boxes, both + # the predicted boxes and regression targets should be with + # absolute coordinate format. + pos_bbox_targets = sampling_result.pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1.0 + # The assigned gt_index for each anchor. (0-based) + pos_gt_inds[pos_inds] = sampling_result.pos_assigned_gt_inds + if gt_labels is None: + # Only rpn gives gt_labels as None + # Foreground is the first class + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg.pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg.pos_weight + + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + # shadowed_labels is a tensor composed of tuples + # (anchor_inds, class_label) that indicate those anchors lying in the + # outer region of a gt or overlapped by another gt with a smaller + # area. + # + # Therefore, only the shadowed labels are ignored for loss calculation. + # the key `shadowed_labels` is defined in :obj:`CenterRegionAssigner` + shadowed_labels = assign_result.get_extra_property('shadowed_labels') + if shadowed_labels is not None and shadowed_labels.numel(): + if len(shadowed_labels.shape) == 2: + idx_, label_ = shadowed_labels[:, 0], shadowed_labels[:, 1] + assert (labels[idx_] != label_).all(), \ + 'One label cannot be both positive and ignored' + label_weights[idx_, label_] = 0 + else: + label_weights[shadowed_labels] = 0 + + # map up to original set of anchors + if unmap_outputs: + num_total_anchors = flat_anchors.size(0) + labels = unmap(labels, num_total_anchors, inside_flags) + label_weights = unmap(label_weights, num_total_anchors, + inside_flags) + bbox_targets = unmap(bbox_targets, num_total_anchors, inside_flags) + bbox_weights = unmap(bbox_weights, num_total_anchors, inside_flags) + pos_gt_inds = unmap( + pos_gt_inds, num_total_anchors, inside_flags, fill=-1) + + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + neg_inds, sampling_result, pos_gt_inds) + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute loss of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_points * num_classes, H, W). + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_points * 4, H, W). + gt_bboxes (list[Tensor]): each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + for i in range(len(bbox_preds)): # loop over fpn level + # avoid 0 area of the predicted bbox + bbox_preds[i] = bbox_preds[i].clamp(min=1e-4) + # TODO: It may directly use the base-class loss function. + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + batch_size = len(gt_bboxes) + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg, + pos_assigned_gt_inds_list) = cls_reg_targets + + num_gts = np.array(list(map(len, gt_labels))) + num_total_samples = ( + num_total_pos + num_total_neg if self.sampling else num_total_pos) + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + # concat all level anchors and flags to a single tensor + concat_anchor_list = [] + for i in range(len(anchor_list)): + concat_anchor_list.append(torch.cat(anchor_list[i])) + all_anchor_list = images_to_levels(concat_anchor_list, + num_level_anchors) + losses_cls, losses_bbox = multi_apply( + self.loss_single, + cls_scores, + bbox_preds, + all_anchor_list, + labels_list, + label_weights_list, + bbox_targets_list, + bbox_weights_list, + num_total_samples=num_total_samples) + + # `pos_assigned_gt_inds_list` (length: fpn_levels) stores the assigned + # gt index of each anchor bbox in each fpn level. + cum_num_gts = list(np.cumsum(num_gts)) # length of batch_size + for i, assign in enumerate(pos_assigned_gt_inds_list): + # loop over fpn levels + for j in range(1, batch_size): + # loop over batch size + # Convert gt indices in each img to those in the batch + assign[j][assign[j] >= 0] += int(cum_num_gts[j - 1]) + pos_assigned_gt_inds_list[i] = assign.flatten() + labels_list[i] = labels_list[i].flatten() + num_gts = sum(map(len, gt_labels)) # total number of gt in the batch + # The unique label index of each gt in the batch + label_sequence = torch.arange(num_gts, device=device) + # Collect the average loss of each gt in each level + with torch.no_grad(): + loss_levels, = multi_apply( + self.collect_loss_level_single, + losses_cls, + losses_bbox, + pos_assigned_gt_inds_list, + labels_seq=label_sequence) + # Shape: (fpn_levels, num_gts). Loss of each gt at each fpn level + loss_levels = torch.stack(loss_levels, dim=0) + # Locate the best fpn level for loss back-propagation + if loss_levels.numel() == 0: # zero gt + argmin = loss_levels.new_empty((num_gts, ), dtype=torch.long) + else: + _, argmin = loss_levels.min(dim=0) + + # Reweight the loss of each (anchor, label) pair, so that only those + # at the best gt level are back-propagated. + losses_cls, losses_bbox, pos_inds = multi_apply( + self.reweight_loss_single, + losses_cls, + losses_bbox, + pos_assigned_gt_inds_list, + labels_list, + list(range(len(losses_cls))), + min_levels=argmin) + num_pos = torch.cat(pos_inds, 0).sum().float() + pos_recall = self.calculate_pos_recall(cls_scores, labels_list, + pos_inds) + + if num_pos == 0: # No gt + avg_factor = num_pos + float(num_total_neg) + else: + avg_factor = num_pos + for i in range(len(losses_cls)): + losses_cls[i] /= avg_factor + losses_bbox[i] /= avg_factor + return dict( + loss_cls=losses_cls, + loss_bbox=losses_bbox, + num_pos=num_pos / batch_size, + pos_recall=pos_recall) + + def calculate_pos_recall(self, cls_scores, labels_list, pos_inds): + """Calculate positive recall with score threshold. + + Args: + cls_scores (list[Tensor]): Classification scores at all fpn levels. + Each tensor is in shape (N, num_classes * num_anchors, H, W) + labels_list (list[Tensor]): The label that each anchor is assigned + to. Shape (N * H * W * num_anchors, ) + pos_inds (list[Tensor]): List of bool tensors indicating whether + the anchor is assigned to a positive label. + Shape (N * H * W * num_anchors, ) + + Returns: + Tensor: A single float number indicating the positive recall. + """ + with torch.no_grad(): + num_class = self.num_classes + scores = [ + cls.permute(0, 2, 3, 1).reshape(-1, num_class)[pos] + for cls, pos in zip(cls_scores, pos_inds) + ] + labels = [ + label.reshape(-1)[pos] + for label, pos in zip(labels_list, pos_inds) + ] + scores = torch.cat(scores, dim=0) + labels = torch.cat(labels, dim=0) + if self.use_sigmoid_cls: + scores = scores.sigmoid() + else: + scores = scores.softmax(dim=1) + + return accuracy(scores, labels, thresh=self.score_threshold) + + def collect_loss_level_single(self, cls_loss, reg_loss, assigned_gt_inds, + labels_seq): + """Get the average loss in each FPN level w.r.t. each gt label. + + Args: + cls_loss (Tensor): Classification loss of each feature map pixel, + shape (num_anchor, num_class) + reg_loss (Tensor): Regression loss of each feature map pixel, + shape (num_anchor, 4) + assigned_gt_inds (Tensor): It indicates which gt the prior is + assigned to (0-based, -1: no assignment). shape (num_anchor), + labels_seq: The rank of labels. shape (num_gt) + + Returns: + shape: (num_gt), average loss of each gt in this level + """ + if len(reg_loss.shape) == 2: # iou loss has shape (num_prior, 4) + reg_loss = reg_loss.sum(dim=-1) # sum loss in tblr dims + if len(cls_loss.shape) == 2: + cls_loss = cls_loss.sum(dim=-1) # sum loss in class dims + loss = cls_loss + reg_loss + assert loss.size(0) == assigned_gt_inds.size(0) + # Default loss value is 1e6 for a layer where no anchor is positive + # to ensure it will not be chosen to back-propagate gradient + losses_ = loss.new_full(labels_seq.shape, 1e6) + for i, l in enumerate(labels_seq): + match = assigned_gt_inds == l + if match.any(): + losses_[i] = loss[match].mean() + return losses_, + + def reweight_loss_single(self, cls_loss, reg_loss, assigned_gt_inds, + labels, level, min_levels): + """Reweight loss values at each level. + + Reassign loss values at each level by masking those where the + pre-calculated loss is too large. Then return the reduced losses. + + Args: + cls_loss (Tensor): Element-wise classification loss. + Shape: (num_anchors, num_classes) + reg_loss (Tensor): Element-wise regression loss. + Shape: (num_anchors, 4) + assigned_gt_inds (Tensor): The gt indices that each anchor bbox + is assigned to. -1 denotes a negative anchor, otherwise it is the + gt index (0-based). Shape: (num_anchors, ), + labels (Tensor): Label assigned to anchors. Shape: (num_anchors, ). + level (int): The current level index in the pyramid + (0-4 for RetinaNet) + min_levels (Tensor): The best-matching level for each gt. + Shape: (num_gts, ), + + Returns: + tuple: + - cls_loss: Reduced corrected classification loss. Scalar. + - reg_loss: Reduced corrected regression loss. Scalar. + - pos_flags (Tensor): Corrected bool tensor indicating the + final postive anchors. Shape: (num_anchors, ). + """ + loc_weight = torch.ones_like(reg_loss) + cls_weight = torch.ones_like(cls_loss) + pos_flags = assigned_gt_inds >= 0 # positive pixel flag + pos_indices = torch.nonzero(pos_flags, as_tuple=False).flatten() + + if pos_flags.any(): # pos pixels exist + pos_assigned_gt_inds = assigned_gt_inds[pos_flags] + zeroing_indices = (min_levels[pos_assigned_gt_inds] != level) + neg_indices = pos_indices[zeroing_indices] + + if neg_indices.numel(): + pos_flags[neg_indices] = 0 + loc_weight[neg_indices] = 0 + # Only the weight corresponding to the label is + # zeroed out if not selected + zeroing_labels = labels[neg_indices] + assert (zeroing_labels >= 0).all() + cls_weight[neg_indices, zeroing_labels] = 0 + + # Weighted loss for both cls and reg loss + cls_loss = weight_reduce_loss(cls_loss, cls_weight, reduction='sum') + reg_loss = weight_reduce_loss(reg_loss, loc_weight, reduction='sum') + + return cls_loss, reg_loss, pos_flags diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_retina_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_retina_head.py new file mode 100644 index 00000000..8822d1ca --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_retina_head.py @@ -0,0 +1,109 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, bias_init_with_prob, normal_init +from mmcv.ops import MaskedConv2d + +from ..builder import HEADS +from .guided_anchor_head import FeatureAdaption, GuidedAnchorHead + + +@HEADS.register_module() +class GARetinaHead(GuidedAnchorHead): + """Guided-Anchor-based RetinaNet head.""" + + def __init__(self, + num_classes, + in_channels, + stacked_convs=4, + conv_cfg=None, + norm_cfg=None, + **kwargs): + self.stacked_convs = stacked_convs + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + super(GARetinaHead, self).__init__(num_classes, in_channels, **kwargs) + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + + self.conv_loc = nn.Conv2d(self.feat_channels, 1, 1) + self.conv_shape = nn.Conv2d(self.feat_channels, self.num_anchors * 2, + 1) + self.feature_adaption_cls = FeatureAdaption( + self.feat_channels, + self.feat_channels, + kernel_size=3, + deform_groups=self.deform_groups) + self.feature_adaption_reg = FeatureAdaption( + self.feat_channels, + self.feat_channels, + kernel_size=3, + deform_groups=self.deform_groups) + self.retina_cls = MaskedConv2d( + self.feat_channels, + self.num_anchors * self.cls_out_channels, + 3, + padding=1) + self.retina_reg = MaskedConv2d( + self.feat_channels, self.num_anchors * 4, 3, padding=1) + + def init_weights(self): + """Initialize weights of the layer.""" + for m in self.cls_convs: + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + normal_init(m.conv, std=0.01) + + self.feature_adaption_cls.init_weights() + self.feature_adaption_reg.init_weights() + + bias_cls = bias_init_with_prob(0.01) + normal_init(self.conv_loc, std=0.01, bias=bias_cls) + normal_init(self.conv_shape, std=0.01) + normal_init(self.retina_cls, std=0.01, bias=bias_cls) + normal_init(self.retina_reg, std=0.01) + + def forward_single(self, x): + """Forward feature map of a single scale level.""" + cls_feat = x + reg_feat = x + for cls_conv in self.cls_convs: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs: + reg_feat = reg_conv(reg_feat) + + loc_pred = self.conv_loc(cls_feat) + shape_pred = self.conv_shape(reg_feat) + + cls_feat = self.feature_adaption_cls(cls_feat, shape_pred) + reg_feat = self.feature_adaption_reg(reg_feat, shape_pred) + + if not self.training: + mask = loc_pred.sigmoid()[0] >= self.loc_filter_thr + else: + mask = None + cls_score = self.retina_cls(cls_feat, mask) + bbox_pred = self.retina_reg(reg_feat, mask) + return cls_score, bbox_pred, shape_pred, loc_pred diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_rpn_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_rpn_head.py new file mode 100644 index 00000000..d3c3a84b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ga_rpn_head.py @@ -0,0 +1,133 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import normal_init +from mmcv.ops import nms + +from ..builder import HEADS +from .guided_anchor_head import GuidedAnchorHead +from .rpn_test_mixin import RPNTestMixin + + +@HEADS.register_module() +class GARPNHead(RPNTestMixin, GuidedAnchorHead): + """Guided-Anchor-based RPN head.""" + + def __init__(self, in_channels, **kwargs): + super(GARPNHead, self).__init__(1, in_channels, **kwargs) + + def _init_layers(self): + """Initialize layers of the head.""" + self.rpn_conv = nn.Conv2d( + self.in_channels, self.feat_channels, 3, padding=1) + super(GARPNHead, self)._init_layers() + + def init_weights(self): + """Initialize weights of the head.""" + normal_init(self.rpn_conv, std=0.01) + super(GARPNHead, self).init_weights() + + def forward_single(self, x): + """Forward feature of a single scale level.""" + + x = self.rpn_conv(x) + x = F.relu(x, inplace=True) + (cls_score, bbox_pred, shape_pred, + loc_pred) = super(GARPNHead, self).forward_single(x) + return cls_score, bbox_pred, shape_pred, loc_pred + + def loss(self, + cls_scores, + bbox_preds, + shape_preds, + loc_preds, + gt_bboxes, + img_metas, + gt_bboxes_ignore=None): + losses = super(GARPNHead, self).loss( + cls_scores, + bbox_preds, + shape_preds, + loc_preds, + gt_bboxes, + None, + img_metas, + gt_bboxes_ignore=gt_bboxes_ignore) + return dict( + loss_rpn_cls=losses['loss_cls'], + loss_rpn_bbox=losses['loss_bbox'], + loss_anchor_shape=losses['loss_shape'], + loss_anchor_loc=losses['loss_loc']) + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + mlvl_anchors, + mlvl_masks, + img_shape, + scale_factor, + cfg, + rescale=False): + cfg = self.test_cfg if cfg is None else cfg + mlvl_proposals = [] + for idx in range(len(cls_scores)): + rpn_cls_score = cls_scores[idx] + rpn_bbox_pred = bbox_preds[idx] + anchors = mlvl_anchors[idx] + mask = mlvl_masks[idx] + assert rpn_cls_score.size()[-2:] == rpn_bbox_pred.size()[-2:] + # if no location is kept, end. + if mask.sum() == 0: + continue + rpn_cls_score = rpn_cls_score.permute(1, 2, 0) + if self.use_sigmoid_cls: + rpn_cls_score = rpn_cls_score.reshape(-1) + scores = rpn_cls_score.sigmoid() + else: + rpn_cls_score = rpn_cls_score.reshape(-1, 2) + # remind that we set FG labels to [0, num_class-1] + # since mmdet v2.0 + # BG cat_id: num_class + scores = rpn_cls_score.softmax(dim=1)[:, :-1] + # filter scores, bbox_pred w.r.t. mask. + # anchors are filtered in get_anchors() beforehand. + scores = scores[mask] + rpn_bbox_pred = rpn_bbox_pred.permute(1, 2, 0).reshape(-1, + 4)[mask, :] + if scores.dim() == 0: + rpn_bbox_pred = rpn_bbox_pred.unsqueeze(0) + anchors = anchors.unsqueeze(0) + scores = scores.unsqueeze(0) + # filter anchors, bbox_pred, scores w.r.t. scores + if cfg.nms_pre > 0 and scores.shape[0] > cfg.nms_pre: + _, topk_inds = scores.topk(cfg.nms_pre) + rpn_bbox_pred = rpn_bbox_pred[topk_inds, :] + anchors = anchors[topk_inds, :] + scores = scores[topk_inds] + # get proposals w.r.t. anchors and rpn_bbox_pred + proposals = self.bbox_coder.decode( + anchors, rpn_bbox_pred, max_shape=img_shape) + # filter out too small bboxes + if cfg.min_bbox_size > 0: + w = proposals[:, 2] - proposals[:, 0] + h = proposals[:, 3] - proposals[:, 1] + valid_inds = torch.nonzero( + (w >= cfg.min_bbox_size) & (h >= cfg.min_bbox_size), + as_tuple=False).squeeze() + proposals = proposals[valid_inds, :] + scores = scores[valid_inds] + # NMS in current level + proposals, _ = nms(proposals, scores, cfg.nms_thr) + proposals = proposals[:cfg.nms_post, :] + mlvl_proposals.append(proposals) + proposals = torch.cat(mlvl_proposals, 0) + if cfg.nms_across_levels: + # NMS across multi levels + proposals, _ = nms(proposals[:, :4], proposals[:, -1], cfg.nms_thr) + proposals = proposals[:cfg.max_num, :] + else: + scores = proposals[:, 4] + num = min(cfg.max_num, proposals.shape[0]) + _, topk_inds = scores.topk(num) + proposals = proposals[topk_inds, :] + return proposals diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/gfl_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/gfl_head.py new file mode 100644 index 00000000..efd7603a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/gfl_head.py @@ -0,0 +1,632 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, Scale, bias_init_with_prob, normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import (anchor_inside_flags, bbox2distance, bbox_overlaps, + build_assigner, build_sampler, distance2bbox, + images_to_levels, multi_apply, multiclass_nms, + reduce_mean, unmap) +from ..builder import HEADS, build_loss +from .anchor_head import AnchorHead + + +class Integral(nn.Module): + """A fixed layer for calculating integral result from distribution. + + This layer calculates the target location by :math: `sum{P(y_i) * y_i}`, + P(y_i) denotes the softmax vector that represents the discrete distribution + y_i denotes the discrete set, usually {0, 1, 2, ..., reg_max} + + Args: + reg_max (int): The maximal value of the discrete set. Default: 16. You + may want to reset it according to your new dataset or related + settings. + """ + + def __init__(self, reg_max=16): + super(Integral, self).__init__() + self.reg_max = reg_max + self.register_buffer('project', + torch.linspace(0, self.reg_max, self.reg_max + 1)) + + def forward(self, x): + """Forward feature from the regression head to get integral result of + bounding box location. + + Args: + x (Tensor): Features of the regression head, shape (N, 4*(n+1)), + n is self.reg_max. + + Returns: + x (Tensor): Integral result of box locations, i.e., distance + offsets from the box center in four directions, shape (N, 4). + """ + x = F.softmax(x.reshape(-1, self.reg_max + 1), dim=1) + x = F.linear(x, self.project.type_as(x)).reshape(-1, 4) + return x + + +@HEADS.register_module() +class GFLHead(AnchorHead): + """Generalized Focal Loss: Learning Qualified and Distributed Bounding + Boxes for Dense Object Detection. + + GFL head structure is similar with ATSS, however GFL uses + 1) joint representation for classification and localization quality, and + 2) flexible General distribution for bounding box locations, + which are supervised by + Quality Focal Loss (QFL) and Distribution Focal Loss (DFL), respectively + + https://arxiv.org/abs/2006.04388 + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + stacked_convs (int): Number of conv layers in cls and reg tower. + Default: 4. + conv_cfg (dict): dictionary to construct and config conv layer. + Default: None. + norm_cfg (dict): dictionary to construct and config norm layer. + Default: dict(type='GN', num_groups=32, requires_grad=True). + loss_qfl (dict): Config of Quality Focal Loss (QFL). + reg_max (int): Max value of integral set :math: `{0, ..., reg_max}` + in QFL setting. Default: 16. + Example: + >>> self = GFLHead(11, 7) + >>> feats = [torch.rand(1, 7, s, s) for s in [4, 8, 16, 32, 64]] + >>> cls_quality_score, bbox_pred = self.forward(feats) + >>> assert len(cls_quality_score) == len(self.scales) + """ + + def __init__(self, + num_classes, + in_channels, + stacked_convs=4, + conv_cfg=None, + norm_cfg=dict(type='GN', num_groups=32, requires_grad=True), + loss_dfl=dict(type='DistributionFocalLoss', loss_weight=0.25), + reg_max=16, + **kwargs): + self.stacked_convs = stacked_convs + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.reg_max = reg_max + super(GFLHead, self).__init__(num_classes, in_channels, **kwargs) + + self.sampling = False + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # SSD sampling=False so use PseudoSampler + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + + self.integral = Integral(self.reg_max) + self.loss_dfl = build_loss(loss_dfl) + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + assert self.num_anchors == 1, 'anchor free version' + self.gfl_cls = nn.Conv2d( + self.feat_channels, self.cls_out_channels, 3, padding=1) + self.gfl_reg = nn.Conv2d( + self.feat_channels, 4 * (self.reg_max + 1), 3, padding=1) + self.scales = nn.ModuleList( + [Scale(1.0) for _ in self.anchor_generator.strides]) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs: + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.gfl_cls, std=0.01, bias=bias_cls) + normal_init(self.gfl_reg, std=0.01) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: Usually a tuple of classification scores and bbox prediction + cls_scores (list[Tensor]): Classification and quality (IoU) + joint scores for all scale levels, each is a 4D-tensor, + the channel number is num_classes. + bbox_preds (list[Tensor]): Box distribution logits for all + scale levels, each is a 4D-tensor, the channel number is + 4*(n+1), n is max value of integral set. + """ + return multi_apply(self.forward_single, feats, self.scales) + + def forward_single(self, x, scale): + """Forward feature of a single scale level. + + Args: + x (Tensor): Features of a single scale level. + scale (:obj: `mmcv.cnn.Scale`): Learnable scale module to resize + the bbox prediction. + + Returns: + tuple: + cls_score (Tensor): Cls and quality joint scores for a single + scale level the channel number is num_classes. + bbox_pred (Tensor): Box distribution logits for a single scale + level, the channel number is 4*(n+1), n is max value of + integral set. + """ + cls_feat = x + reg_feat = x + for cls_conv in self.cls_convs: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs: + reg_feat = reg_conv(reg_feat) + cls_score = self.gfl_cls(cls_feat) + bbox_pred = scale(self.gfl_reg(reg_feat)).float() + return cls_score, bbox_pred + + def anchor_center(self, anchors): + """Get anchor centers from anchors. + + Args: + anchors (Tensor): Anchor list with shape (N, 4), "xyxy" format. + + Returns: + Tensor: Anchor centers with shape (N, 2), "xy" format. + """ + anchors_cx = (anchors[:, 2] + anchors[:, 0]) / 2 + anchors_cy = (anchors[:, 3] + anchors[:, 1]) / 2 + return torch.stack([anchors_cx, anchors_cy], dim=-1) + + def loss_single(self, anchors, cls_score, bbox_pred, labels, label_weights, + bbox_targets, stride, num_total_samples): + """Compute loss of a single scale level. + + Args: + anchors (Tensor): Box reference for each scale level with shape + (N, num_total_anchors, 4). + cls_score (Tensor): Cls and quality joint scores for each scale + level has shape (N, num_classes, H, W). + bbox_pred (Tensor): Box distribution logits for each scale + level with shape (N, 4*(n+1), H, W), n is max value of integral + set. + labels (Tensor): Labels of each anchors with shape + (N, num_total_anchors). + label_weights (Tensor): Label weights of each anchor with shape + (N, num_total_anchors) + bbox_targets (Tensor): BBox regression targets of each anchor wight + shape (N, num_total_anchors, 4). + stride (tuple): Stride in this scale level. + num_total_samples (int): Number of positive samples that is + reduced over all GPUs. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + assert stride[0] == stride[1], 'h stride is not equal to w stride!' + anchors = anchors.reshape(-1, 4) + cls_score = cls_score.permute(0, 2, 3, + 1).reshape(-1, self.cls_out_channels) + bbox_pred = bbox_pred.permute(0, 2, 3, + 1).reshape(-1, 4 * (self.reg_max + 1)) + bbox_targets = bbox_targets.reshape(-1, 4) + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + bg_class_ind = self.num_classes + pos_inds = ((labels >= 0) + & (labels < bg_class_ind)).nonzero().squeeze(1) + score = label_weights.new_zeros(labels.shape) + + if len(pos_inds) > 0: + pos_bbox_targets = bbox_targets[pos_inds] + pos_bbox_pred = bbox_pred[pos_inds] + pos_anchors = anchors[pos_inds] + pos_anchor_centers = self.anchor_center(pos_anchors) / stride[0] + + weight_targets = cls_score.detach().sigmoid() + weight_targets = weight_targets.max(dim=1)[0][pos_inds] + pos_bbox_pred_corners = self.integral(pos_bbox_pred) + pos_decode_bbox_pred = distance2bbox(pos_anchor_centers, + pos_bbox_pred_corners) + pos_decode_bbox_targets = pos_bbox_targets / stride[0] + score[pos_inds] = bbox_overlaps( + pos_decode_bbox_pred.detach(), + pos_decode_bbox_targets, + is_aligned=True) + pred_corners = pos_bbox_pred.reshape(-1, self.reg_max + 1) + target_corners = bbox2distance(pos_anchor_centers, + pos_decode_bbox_targets, + self.reg_max).reshape(-1) + + # regression loss + loss_bbox = self.loss_bbox( + pos_decode_bbox_pred, + pos_decode_bbox_targets, + weight=weight_targets, + avg_factor=1.0) + + # dfl loss + loss_dfl = self.loss_dfl( + pred_corners, + target_corners, + weight=weight_targets[:, None].expand(-1, 4).reshape(-1), + avg_factor=4.0) + else: + loss_bbox = bbox_pred.sum() * 0 + loss_dfl = bbox_pred.sum() * 0 + weight_targets = torch.tensor(0).cuda() + + # cls (qfl) loss + loss_cls = self.loss_cls( + cls_score, (labels, score), + weight=label_weights, + avg_factor=num_total_samples) + + return loss_cls, loss_bbox, loss_dfl, weight_targets.sum() + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Cls and quality scores for each scale + level has shape (N, num_classes, H, W). + bbox_preds (list[Tensor]): Box distribution logits for each scale + level with shape (N, 4*(n+1), H, W), n is max value of integral + set. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor] | None): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels) + if cls_reg_targets is None: + return None + + (anchor_list, labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, num_total_pos, num_total_neg) = cls_reg_targets + + num_total_samples = reduce_mean( + torch.tensor(num_total_pos, dtype=torch.float, + device=device)).item() + num_total_samples = max(num_total_samples, 1.0) + + losses_cls, losses_bbox, losses_dfl,\ + avg_factor = multi_apply( + self.loss_single, + anchor_list, + cls_scores, + bbox_preds, + labels_list, + label_weights_list, + bbox_targets_list, + self.anchor_generator.strides, + num_total_samples=num_total_samples) + + avg_factor = sum(avg_factor) + avg_factor = reduce_mean(avg_factor).item() + losses_bbox = list(map(lambda x: x / avg_factor, losses_bbox)) + losses_dfl = list(map(lambda x: x / avg_factor, losses_dfl)) + return dict( + loss_cls=losses_cls, loss_bbox=losses_bbox, loss_dfl=losses_dfl) + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into labeled boxes. + + Args: + cls_scores (list[Tensor]): Box scores for a single scale level + has shape (num_classes, H, W). + bbox_preds (list[Tensor]): Box distribution logits for a single + scale level with shape (4*(n+1), H, W), n is max value of + integral set. + mlvl_anchors (list[Tensor]): Box reference for a single scale level + with shape (num_total_anchors, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + tuple(Tensor): + det_bboxes (Tensor): Bbox predictions in shape (N, 5), where + the first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score + between 0 and 1. + det_labels (Tensor): A (N,) tensor where each item is the + predicted class label of the corresponding box. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) == len(mlvl_anchors) + mlvl_bboxes = [] + mlvl_scores = [] + for cls_score, bbox_pred, stride, anchors in zip( + cls_scores, bbox_preds, self.anchor_generator.strides, + mlvl_anchors): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + assert stride[0] == stride[1] + + scores = cls_score.permute(1, 2, 0).reshape( + -1, self.cls_out_channels).sigmoid() + bbox_pred = bbox_pred.permute(1, 2, 0) + bbox_pred = self.integral(bbox_pred) * stride[0] + + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + max_scores, _ = scores.max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + + bboxes = distance2bbox( + self.anchor_center(anchors), bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + + mlvl_scores = torch.cat(mlvl_scores) + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + + if with_nms: + det_bboxes, det_labels = multiclass_nms(mlvl_bboxes, mlvl_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + return det_bboxes, det_labels + else: + return mlvl_bboxes, mlvl_scores + + def get_targets(self, + anchor_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=1, + unmap_outputs=True): + """Get targets for GFL head. + + This method is almost the same as `AnchorHead.get_targets()`. Besides + returning the targets as the parent method does, it also returns the + anchors as the first element of the returned tuple. + """ + num_imgs = len(img_metas) + assert len(anchor_list) == len(valid_flag_list) == num_imgs + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + num_level_anchors_list = [num_level_anchors] * num_imgs + + # concat all level anchors and flags to a single tensor + for i in range(num_imgs): + assert len(anchor_list[i]) == len(valid_flag_list[i]) + anchor_list[i] = torch.cat(anchor_list[i]) + valid_flag_list[i] = torch.cat(valid_flag_list[i]) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + (all_anchors, all_labels, all_label_weights, all_bbox_targets, + all_bbox_weights, pos_inds_list, neg_inds_list) = multi_apply( + self._get_target_single, + anchor_list, + valid_flag_list, + num_level_anchors_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + img_metas, + label_channels=label_channels, + unmap_outputs=unmap_outputs) + # no valid anchors + if any([labels is None for labels in all_labels]): + return None + # sampled anchors of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + # split targets to a list w.r.t. multiple levels + anchors_list = images_to_levels(all_anchors, num_level_anchors) + labels_list = images_to_levels(all_labels, num_level_anchors) + label_weights_list = images_to_levels(all_label_weights, + num_level_anchors) + bbox_targets_list = images_to_levels(all_bbox_targets, + num_level_anchors) + bbox_weights_list = images_to_levels(all_bbox_weights, + num_level_anchors) + return (anchors_list, labels_list, label_weights_list, + bbox_targets_list, bbox_weights_list, num_total_pos, + num_total_neg) + + def _get_target_single(self, + flat_anchors, + valid_flags, + num_level_anchors, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=1, + unmap_outputs=True): + """Compute regression, classification targets for anchors in a single + image. + + Args: + flat_anchors (Tensor): Multi-level anchors of the image, which are + concatenated into a single tensor of shape (num_anchors, 4) + valid_flags (Tensor): Multi level valid flags of the image, + which are concatenated into a single tensor of + shape (num_anchors,). + num_level_anchors Tensor): Number of anchors of each scale level. + gt_bboxes (Tensor): Ground truth bboxes of the image, + shape (num_gts, 4). + gt_bboxes_ignore (Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + gt_labels (Tensor): Ground truth labels of each box, + shape (num_gts,). + img_meta (dict): Meta info of the image. + label_channels (int): Channel of label. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: N is the number of total anchors in the image. + anchors (Tensor): All anchors in the image with shape (N, 4). + labels (Tensor): Labels of all anchors in the image with shape + (N,). + label_weights (Tensor): Label weights of all anchor in the + image with shape (N,). + bbox_targets (Tensor): BBox targets of all anchors in the + image with shape (N, 4). + bbox_weights (Tensor): BBox weights of all anchors in the + image with shape (N, 4). + pos_inds (Tensor): Indices of postive anchor with shape + (num_pos,). + neg_inds (Tensor): Indices of negative anchor with shape + (num_neg,). + """ + inside_flags = anchor_inside_flags(flat_anchors, valid_flags, + img_meta['img_shape'][:2], + self.train_cfg.allowed_border) + if not inside_flags.any(): + return (None, ) * 7 + # assign gt and sample anchors + anchors = flat_anchors[inside_flags, :] + + num_level_anchors_inside = self.get_num_level_anchors_inside( + num_level_anchors, inside_flags) + assign_result = self.assigner.assign(anchors, num_level_anchors_inside, + gt_bboxes, gt_bboxes_ignore, + gt_labels) + + sampling_result = self.sampler.sample(assign_result, anchors, + gt_bboxes) + + num_valid_anchors = anchors.shape[0] + bbox_targets = torch.zeros_like(anchors) + bbox_weights = torch.zeros_like(anchors) + labels = anchors.new_full((num_valid_anchors, ), + self.num_classes, + dtype=torch.long) + label_weights = anchors.new_zeros(num_valid_anchors, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + pos_bbox_targets = sampling_result.pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1.0 + if gt_labels is None: + # Only rpn gives gt_labels as None + # Foreground is the first class + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg.pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg.pos_weight + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + # map up to original set of anchors + if unmap_outputs: + num_total_anchors = flat_anchors.size(0) + anchors = unmap(anchors, num_total_anchors, inside_flags) + labels = unmap( + labels, num_total_anchors, inside_flags, fill=self.num_classes) + label_weights = unmap(label_weights, num_total_anchors, + inside_flags) + bbox_targets = unmap(bbox_targets, num_total_anchors, inside_flags) + bbox_weights = unmap(bbox_weights, num_total_anchors, inside_flags) + + return (anchors, labels, label_weights, bbox_targets, bbox_weights, + pos_inds, neg_inds) + + def get_num_level_anchors_inside(self, num_level_anchors, inside_flags): + split_inside_flags = torch.split(inside_flags, num_level_anchors) + num_level_anchors_inside = [ + int(flags.sum()) for flags in split_inside_flags + ] + return num_level_anchors_inside diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/guided_anchor_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/guided_anchor_head.py new file mode 100644 index 00000000..997ebb75 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/guided_anchor_head.py @@ -0,0 +1,860 @@ +import torch +import torch.nn as nn +from mmcv.cnn import bias_init_with_prob, normal_init +from mmcv.ops import DeformConv2d, MaskedConv2d +from mmcv.runner import force_fp32 + +from mmdet.core import (anchor_inside_flags, build_anchor_generator, + build_assigner, build_bbox_coder, build_sampler, + calc_region, images_to_levels, multi_apply, + multiclass_nms, unmap) +from ..builder import HEADS, build_loss +from .anchor_head import AnchorHead + + +class FeatureAdaption(nn.Module): + """Feature Adaption Module. + + Feature Adaption Module is implemented based on DCN v1. + It uses anchor shape prediction rather than feature map to + predict offsets of deform conv layer. + + Args: + in_channels (int): Number of channels in the input feature map. + out_channels (int): Number of channels in the output feature map. + kernel_size (int): Deformable conv kernel size. + deform_groups (int): Deformable conv group size. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + deform_groups=4): + super(FeatureAdaption, self).__init__() + offset_channels = kernel_size * kernel_size * 2 + self.conv_offset = nn.Conv2d( + 2, deform_groups * offset_channels, 1, bias=False) + self.conv_adaption = DeformConv2d( + in_channels, + out_channels, + kernel_size=kernel_size, + padding=(kernel_size - 1) // 2, + deform_groups=deform_groups) + self.relu = nn.ReLU(inplace=True) + + def init_weights(self): + normal_init(self.conv_offset, std=0.1) + normal_init(self.conv_adaption, std=0.01) + + def forward(self, x, shape): + offset = self.conv_offset(shape.detach()) + x = self.relu(self.conv_adaption(x, offset)) + return x + + +@HEADS.register_module() +class GuidedAnchorHead(AnchorHead): + """Guided-Anchor-based head (GA-RPN, GA-RetinaNet, etc.). + + This GuidedAnchorHead will predict high-quality feature guided + anchors and locations where anchors will be kept in inference. + There are mainly 3 categories of bounding-boxes. + + - Sampled 9 pairs for target assignment. (approxes) + - The square boxes where the predicted anchors are based on. (squares) + - Guided anchors. + + Please refer to https://arxiv.org/abs/1901.03278 for more details. + + Args: + num_classes (int): Number of classes. + in_channels (int): Number of channels in the input feature map. + feat_channels (int): Number of hidden channels. + approx_anchor_generator (dict): Config dict for approx generator + square_anchor_generator (dict): Config dict for square generator + anchor_coder (dict): Config dict for anchor coder + bbox_coder (dict): Config dict for bbox coder + reg_decoded_bbox (bool): If true, the regression loss would be + applied directly on decoded bounding boxes, converting both + the predicted boxes and regression targets to absolute + coordinates format. Default False. It should be `True` when + using `IoULoss`, `GIoULoss`, or `DIoULoss` in the bbox head. + deform_groups: (int): Group number of DCN in + FeatureAdaption module. + loc_filter_thr (float): Threshold to filter out unconcerned regions. + loss_loc (dict): Config of location loss. + loss_shape (dict): Config of anchor shape loss. + loss_cls (dict): Config of classification loss. + loss_bbox (dict): Config of bbox regression loss. + """ + + def __init__( + self, + num_classes, + in_channels, + feat_channels=256, + approx_anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=8, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[4, 8, 16, 32, 64]), + square_anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + scales=[8], + strides=[4, 8, 16, 32, 64]), + anchor_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0] + ), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0] + ), + reg_decoded_bbox=False, + deform_groups=4, + loc_filter_thr=0.01, + train_cfg=None, + test_cfg=None, + loss_loc=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_shape=dict(type='BoundedIoULoss', beta=0.2, loss_weight=1.0), + loss_cls=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), + loss_bbox=dict(type='SmoothL1Loss', beta=1.0, + loss_weight=1.0)): # yapf: disable + super(AnchorHead, self).__init__() + self.in_channels = in_channels + self.num_classes = num_classes + self.feat_channels = feat_channels + self.deform_groups = deform_groups + self.loc_filter_thr = loc_filter_thr + + # build approx_anchor_generator and square_anchor_generator + assert (approx_anchor_generator['octave_base_scale'] == + square_anchor_generator['scales'][0]) + assert (approx_anchor_generator['strides'] == + square_anchor_generator['strides']) + self.approx_anchor_generator = build_anchor_generator( + approx_anchor_generator) + self.square_anchor_generator = build_anchor_generator( + square_anchor_generator) + self.approxs_per_octave = self.approx_anchor_generator \ + .num_base_anchors[0] + + self.reg_decoded_bbox = reg_decoded_bbox + + # one anchor per location + self.num_anchors = 1 + self.use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + self.loc_focal_loss = loss_loc['type'] in ['FocalLoss'] + self.sampling = loss_cls['type'] not in ['FocalLoss'] + self.ga_sampling = train_cfg is not None and hasattr( + train_cfg, 'ga_sampler') + if self.use_sigmoid_cls: + self.cls_out_channels = self.num_classes + else: + self.cls_out_channels = self.num_classes + 1 + + # build bbox_coder + self.anchor_coder = build_bbox_coder(anchor_coder) + self.bbox_coder = build_bbox_coder(bbox_coder) + + # build losses + self.loss_loc = build_loss(loss_loc) + self.loss_shape = build_loss(loss_shape) + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) + + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # use PseudoSampler when sampling is False + if self.sampling and hasattr(self.train_cfg, 'sampler'): + sampler_cfg = self.train_cfg.sampler + else: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + + self.ga_assigner = build_assigner(self.train_cfg.ga_assigner) + if self.ga_sampling: + ga_sampler_cfg = self.train_cfg.ga_sampler + else: + ga_sampler_cfg = dict(type='PseudoSampler') + self.ga_sampler = build_sampler(ga_sampler_cfg, context=self) + + self.fp16_enabled = False + + self._init_layers() + + def _init_layers(self): + self.relu = nn.ReLU(inplace=True) + self.conv_loc = nn.Conv2d(self.in_channels, 1, 1) + self.conv_shape = nn.Conv2d(self.in_channels, self.num_anchors * 2, 1) + self.feature_adaption = FeatureAdaption( + self.in_channels, + self.feat_channels, + kernel_size=3, + deform_groups=self.deform_groups) + self.conv_cls = MaskedConv2d(self.feat_channels, + self.num_anchors * self.cls_out_channels, + 1) + self.conv_reg = MaskedConv2d(self.feat_channels, self.num_anchors * 4, + 1) + + def init_weights(self): + normal_init(self.conv_cls, std=0.01) + normal_init(self.conv_reg, std=0.01) + + bias_cls = bias_init_with_prob(0.01) + normal_init(self.conv_loc, std=0.01, bias=bias_cls) + normal_init(self.conv_shape, std=0.01) + + self.feature_adaption.init_weights() + + def forward_single(self, x): + loc_pred = self.conv_loc(x) + shape_pred = self.conv_shape(x) + x = self.feature_adaption(x, shape_pred) + # masked conv is only used during inference for speed-up + if not self.training: + mask = loc_pred.sigmoid()[0] >= self.loc_filter_thr + else: + mask = None + cls_score = self.conv_cls(x, mask) + bbox_pred = self.conv_reg(x, mask) + return cls_score, bbox_pred, shape_pred, loc_pred + + def forward(self, feats): + return multi_apply(self.forward_single, feats) + + def get_sampled_approxs(self, featmap_sizes, img_metas, device='cuda'): + """Get sampled approxs and inside flags according to feature map sizes. + + Args: + featmap_sizes (list[tuple]): Multi-level feature map sizes. + img_metas (list[dict]): Image meta info. + device (torch.device | str): device for returned tensors + + Returns: + tuple: approxes of each image, inside flags of each image + """ + num_imgs = len(img_metas) + + # since feature map sizes of all images are the same, we only compute + # approxes for one time + multi_level_approxs = self.approx_anchor_generator.grid_anchors( + featmap_sizes, device=device) + approxs_list = [multi_level_approxs for _ in range(num_imgs)] + + # for each image, we compute inside flags of multi level approxes + inside_flag_list = [] + for img_id, img_meta in enumerate(img_metas): + multi_level_flags = [] + multi_level_approxs = approxs_list[img_id] + + # obtain valid flags for each approx first + multi_level_approx_flags = self.approx_anchor_generator \ + .valid_flags(featmap_sizes, + img_meta['pad_shape'], + device=device) + + for i, flags in enumerate(multi_level_approx_flags): + approxs = multi_level_approxs[i] + inside_flags_list = [] + for i in range(self.approxs_per_octave): + split_valid_flags = flags[i::self.approxs_per_octave] + split_approxs = approxs[i::self.approxs_per_octave, :] + inside_flags = anchor_inside_flags( + split_approxs, split_valid_flags, + img_meta['img_shape'][:2], + self.train_cfg.allowed_border) + inside_flags_list.append(inside_flags) + # inside_flag for a position is true if any anchor in this + # position is true + inside_flags = ( + torch.stack(inside_flags_list, 0).sum(dim=0) > 0) + multi_level_flags.append(inside_flags) + inside_flag_list.append(multi_level_flags) + return approxs_list, inside_flag_list + + def get_anchors(self, + featmap_sizes, + shape_preds, + loc_preds, + img_metas, + use_loc_filter=False, + device='cuda'): + """Get squares according to feature map sizes and guided anchors. + + Args: + featmap_sizes (list[tuple]): Multi-level feature map sizes. + shape_preds (list[tensor]): Multi-level shape predictions. + loc_preds (list[tensor]): Multi-level location predictions. + img_metas (list[dict]): Image meta info. + use_loc_filter (bool): Use loc filter or not. + device (torch.device | str): device for returned tensors + + Returns: + tuple: square approxs of each image, guided anchors of each image, + loc masks of each image + """ + num_imgs = len(img_metas) + num_levels = len(featmap_sizes) + + # since feature map sizes of all images are the same, we only compute + # squares for one time + multi_level_squares = self.square_anchor_generator.grid_anchors( + featmap_sizes, device=device) + squares_list = [multi_level_squares for _ in range(num_imgs)] + + # for each image, we compute multi level guided anchors + guided_anchors_list = [] + loc_mask_list = [] + for img_id, img_meta in enumerate(img_metas): + multi_level_guided_anchors = [] + multi_level_loc_mask = [] + for i in range(num_levels): + squares = squares_list[img_id][i] + shape_pred = shape_preds[i][img_id] + loc_pred = loc_preds[i][img_id] + guided_anchors, loc_mask = self._get_guided_anchors_single( + squares, + shape_pred, + loc_pred, + use_loc_filter=use_loc_filter) + multi_level_guided_anchors.append(guided_anchors) + multi_level_loc_mask.append(loc_mask) + guided_anchors_list.append(multi_level_guided_anchors) + loc_mask_list.append(multi_level_loc_mask) + return squares_list, guided_anchors_list, loc_mask_list + + def _get_guided_anchors_single(self, + squares, + shape_pred, + loc_pred, + use_loc_filter=False): + """Get guided anchors and loc masks for a single level. + + Args: + square (tensor): Squares of a single level. + shape_pred (tensor): Shape predections of a single level. + loc_pred (tensor): Loc predections of a single level. + use_loc_filter (list[tensor]): Use loc filter or not. + + Returns: + tuple: guided anchors, location masks + """ + # calculate location filtering mask + loc_pred = loc_pred.sigmoid().detach() + if use_loc_filter: + loc_mask = loc_pred >= self.loc_filter_thr + else: + loc_mask = loc_pred >= 0.0 + mask = loc_mask.permute(1, 2, 0).expand(-1, -1, self.num_anchors) + mask = mask.contiguous().view(-1) + # calculate guided anchors + squares = squares[mask] + anchor_deltas = shape_pred.permute(1, 2, 0).contiguous().view( + -1, 2).detach()[mask] + bbox_deltas = anchor_deltas.new_full(squares.size(), 0) + bbox_deltas[:, 2:] = anchor_deltas + guided_anchors = self.anchor_coder.decode( + squares, bbox_deltas, wh_ratio_clip=1e-6) + return guided_anchors, mask + + def ga_loc_targets(self, gt_bboxes_list, featmap_sizes): + """Compute location targets for guided anchoring. + + Each feature map is divided into positive, negative and ignore regions. + - positive regions: target 1, weight 1 + - ignore regions: target 0, weight 0 + - negative regions: target 0, weight 0.1 + + Args: + gt_bboxes_list (list[Tensor]): Gt bboxes of each image. + featmap_sizes (list[tuple]): Multi level sizes of each feature + maps. + + Returns: + tuple + """ + anchor_scale = self.approx_anchor_generator.octave_base_scale + anchor_strides = self.approx_anchor_generator.strides + # Currently only supports same stride in x and y direction. + for stride in anchor_strides: + assert (stride[0] == stride[1]) + anchor_strides = [stride[0] for stride in anchor_strides] + + center_ratio = self.train_cfg.center_ratio + ignore_ratio = self.train_cfg.ignore_ratio + img_per_gpu = len(gt_bboxes_list) + num_lvls = len(featmap_sizes) + r1 = (1 - center_ratio) / 2 + r2 = (1 - ignore_ratio) / 2 + all_loc_targets = [] + all_loc_weights = [] + all_ignore_map = [] + for lvl_id in range(num_lvls): + h, w = featmap_sizes[lvl_id] + loc_targets = torch.zeros( + img_per_gpu, + 1, + h, + w, + device=gt_bboxes_list[0].device, + dtype=torch.float32) + loc_weights = torch.full_like(loc_targets, -1) + ignore_map = torch.zeros_like(loc_targets) + all_loc_targets.append(loc_targets) + all_loc_weights.append(loc_weights) + all_ignore_map.append(ignore_map) + for img_id in range(img_per_gpu): + gt_bboxes = gt_bboxes_list[img_id] + scale = torch.sqrt((gt_bboxes[:, 2] - gt_bboxes[:, 0]) * + (gt_bboxes[:, 3] - gt_bboxes[:, 1])) + min_anchor_size = scale.new_full( + (1, ), float(anchor_scale * anchor_strides[0])) + # assign gt bboxes to different feature levels w.r.t. their scales + target_lvls = torch.floor( + torch.log2(scale) - torch.log2(min_anchor_size) + 0.5) + target_lvls = target_lvls.clamp(min=0, max=num_lvls - 1).long() + for gt_id in range(gt_bboxes.size(0)): + lvl = target_lvls[gt_id].item() + # rescaled to corresponding feature map + gt_ = gt_bboxes[gt_id, :4] / anchor_strides[lvl] + # calculate ignore regions + ignore_x1, ignore_y1, ignore_x2, ignore_y2 = calc_region( + gt_, r2, featmap_sizes[lvl]) + # calculate positive (center) regions + ctr_x1, ctr_y1, ctr_x2, ctr_y2 = calc_region( + gt_, r1, featmap_sizes[lvl]) + all_loc_targets[lvl][img_id, 0, ctr_y1:ctr_y2 + 1, + ctr_x1:ctr_x2 + 1] = 1 + all_loc_weights[lvl][img_id, 0, ignore_y1:ignore_y2 + 1, + ignore_x1:ignore_x2 + 1] = 0 + all_loc_weights[lvl][img_id, 0, ctr_y1:ctr_y2 + 1, + ctr_x1:ctr_x2 + 1] = 1 + # calculate ignore map on nearby low level feature + if lvl > 0: + d_lvl = lvl - 1 + # rescaled to corresponding feature map + gt_ = gt_bboxes[gt_id, :4] / anchor_strides[d_lvl] + ignore_x1, ignore_y1, ignore_x2, ignore_y2 = calc_region( + gt_, r2, featmap_sizes[d_lvl]) + all_ignore_map[d_lvl][img_id, 0, ignore_y1:ignore_y2 + 1, + ignore_x1:ignore_x2 + 1] = 1 + # calculate ignore map on nearby high level feature + if lvl < num_lvls - 1: + u_lvl = lvl + 1 + # rescaled to corresponding feature map + gt_ = gt_bboxes[gt_id, :4] / anchor_strides[u_lvl] + ignore_x1, ignore_y1, ignore_x2, ignore_y2 = calc_region( + gt_, r2, featmap_sizes[u_lvl]) + all_ignore_map[u_lvl][img_id, 0, ignore_y1:ignore_y2 + 1, + ignore_x1:ignore_x2 + 1] = 1 + for lvl_id in range(num_lvls): + # ignore negative regions w.r.t. ignore map + all_loc_weights[lvl_id][(all_loc_weights[lvl_id] < 0) + & (all_ignore_map[lvl_id] > 0)] = 0 + # set negative regions with weight 0.1 + all_loc_weights[lvl_id][all_loc_weights[lvl_id] < 0] = 0.1 + # loc average factor to balance loss + loc_avg_factor = sum( + [t.size(0) * t.size(-1) * t.size(-2) + for t in all_loc_targets]) / 200 + return all_loc_targets, all_loc_weights, loc_avg_factor + + def _ga_shape_target_single(self, + flat_approxs, + inside_flags, + flat_squares, + gt_bboxes, + gt_bboxes_ignore, + img_meta, + unmap_outputs=True): + """Compute guided anchoring targets. + + This function returns sampled anchors and gt bboxes directly + rather than calculates regression targets. + + Args: + flat_approxs (Tensor): flat approxs of a single image, + shape (n, 4) + inside_flags (Tensor): inside flags of a single image, + shape (n, ). + flat_squares (Tensor): flat squares of a single image, + shape (approxs_per_octave * n, 4) + gt_bboxes (Tensor): Ground truth bboxes of a single image. + img_meta (dict): Meta info of a single image. + approxs_per_octave (int): number of approxs per octave + cfg (dict): RPN train configs. + unmap_outputs (bool): unmap outputs or not. + + Returns: + tuple + """ + if not inside_flags.any(): + return (None, ) * 5 + # assign gt and sample anchors + expand_inside_flags = inside_flags[:, None].expand( + -1, self.approxs_per_octave).reshape(-1) + approxs = flat_approxs[expand_inside_flags, :] + squares = flat_squares[inside_flags, :] + + assign_result = self.ga_assigner.assign(approxs, squares, + self.approxs_per_octave, + gt_bboxes, gt_bboxes_ignore) + sampling_result = self.ga_sampler.sample(assign_result, squares, + gt_bboxes) + + bbox_anchors = torch.zeros_like(squares) + bbox_gts = torch.zeros_like(squares) + bbox_weights = torch.zeros_like(squares) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + bbox_anchors[pos_inds, :] = sampling_result.pos_bboxes + bbox_gts[pos_inds, :] = sampling_result.pos_gt_bboxes + bbox_weights[pos_inds, :] = 1.0 + + # map up to original set of anchors + if unmap_outputs: + num_total_anchors = flat_squares.size(0) + bbox_anchors = unmap(bbox_anchors, num_total_anchors, inside_flags) + bbox_gts = unmap(bbox_gts, num_total_anchors, inside_flags) + bbox_weights = unmap(bbox_weights, num_total_anchors, inside_flags) + + return (bbox_anchors, bbox_gts, bbox_weights, pos_inds, neg_inds) + + def ga_shape_targets(self, + approx_list, + inside_flag_list, + square_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + unmap_outputs=True): + """Compute guided anchoring targets. + + Args: + approx_list (list[list]): Multi level approxs of each image. + inside_flag_list (list[list]): Multi level inside flags of each + image. + square_list (list[list]): Multi level squares of each image. + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image. + img_metas (list[dict]): Meta info of each image. + gt_bboxes_ignore_list (list[Tensor]): ignore list of gt bboxes. + unmap_outputs (bool): unmap outputs or not. + + Returns: + tuple + """ + num_imgs = len(img_metas) + assert len(approx_list) == len(inside_flag_list) == len( + square_list) == num_imgs + # anchor number of multi levels + num_level_squares = [squares.size(0) for squares in square_list[0]] + # concat all level anchors and flags to a single tensor + inside_flag_flat_list = [] + approx_flat_list = [] + square_flat_list = [] + for i in range(num_imgs): + assert len(square_list[i]) == len(inside_flag_list[i]) + inside_flag_flat_list.append(torch.cat(inside_flag_list[i])) + approx_flat_list.append(torch.cat(approx_list[i])) + square_flat_list.append(torch.cat(square_list[i])) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + (all_bbox_anchors, all_bbox_gts, all_bbox_weights, pos_inds_list, + neg_inds_list) = multi_apply( + self._ga_shape_target_single, + approx_flat_list, + inside_flag_flat_list, + square_flat_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + img_metas, + unmap_outputs=unmap_outputs) + # no valid anchors + if any([bbox_anchors is None for bbox_anchors in all_bbox_anchors]): + return None + # sampled anchors of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + # split targets to a list w.r.t. multiple levels + bbox_anchors_list = images_to_levels(all_bbox_anchors, + num_level_squares) + bbox_gts_list = images_to_levels(all_bbox_gts, num_level_squares) + bbox_weights_list = images_to_levels(all_bbox_weights, + num_level_squares) + return (bbox_anchors_list, bbox_gts_list, bbox_weights_list, + num_total_pos, num_total_neg) + + def loss_shape_single(self, shape_pred, bbox_anchors, bbox_gts, + anchor_weights, anchor_total_num): + shape_pred = shape_pred.permute(0, 2, 3, 1).contiguous().view(-1, 2) + bbox_anchors = bbox_anchors.contiguous().view(-1, 4) + bbox_gts = bbox_gts.contiguous().view(-1, 4) + anchor_weights = anchor_weights.contiguous().view(-1, 4) + bbox_deltas = bbox_anchors.new_full(bbox_anchors.size(), 0) + bbox_deltas[:, 2:] += shape_pred + # filter out negative samples to speed-up weighted_bounded_iou_loss + inds = torch.nonzero( + anchor_weights[:, 0] > 0, as_tuple=False).squeeze(1) + bbox_deltas_ = bbox_deltas[inds] + bbox_anchors_ = bbox_anchors[inds] + bbox_gts_ = bbox_gts[inds] + anchor_weights_ = anchor_weights[inds] + pred_anchors_ = self.anchor_coder.decode( + bbox_anchors_, bbox_deltas_, wh_ratio_clip=1e-6) + loss_shape = self.loss_shape( + pred_anchors_, + bbox_gts_, + anchor_weights_, + avg_factor=anchor_total_num) + return loss_shape + + def loss_loc_single(self, loc_pred, loc_target, loc_weight, + loc_avg_factor): + loss_loc = self.loss_loc( + loc_pred.reshape(-1, 1), + loc_target.reshape(-1).long(), + loc_weight.reshape(-1), + avg_factor=loc_avg_factor) + return loss_loc + + @force_fp32( + apply_to=('cls_scores', 'bbox_preds', 'shape_preds', 'loc_preds')) + def loss(self, + cls_scores, + bbox_preds, + shape_preds, + loc_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.approx_anchor_generator.num_levels + + device = cls_scores[0].device + + # get loc targets + loc_targets, loc_weights, loc_avg_factor = self.ga_loc_targets( + gt_bboxes, featmap_sizes) + + # get sampled approxes + approxs_list, inside_flag_list = self.get_sampled_approxs( + featmap_sizes, img_metas, device=device) + # get squares and guided anchors + squares_list, guided_anchors_list, _ = self.get_anchors( + featmap_sizes, shape_preds, loc_preds, img_metas, device=device) + + # get shape targets + shape_targets = self.ga_shape_targets(approxs_list, inside_flag_list, + squares_list, gt_bboxes, + img_metas) + if shape_targets is None: + return None + (bbox_anchors_list, bbox_gts_list, anchor_weights_list, anchor_fg_num, + anchor_bg_num) = shape_targets + anchor_total_num = ( + anchor_fg_num if not self.ga_sampling else anchor_fg_num + + anchor_bg_num) + + # get anchor targets + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + guided_anchors_list, + inside_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + num_total_samples = ( + num_total_pos + num_total_neg if self.sampling else num_total_pos) + + # anchor number of multi levels + num_level_anchors = [ + anchors.size(0) for anchors in guided_anchors_list[0] + ] + # concat all level anchors to a single tensor + concat_anchor_list = [] + for i in range(len(guided_anchors_list)): + concat_anchor_list.append(torch.cat(guided_anchors_list[i])) + all_anchor_list = images_to_levels(concat_anchor_list, + num_level_anchors) + + # get classification and bbox regression losses + losses_cls, losses_bbox = multi_apply( + self.loss_single, + cls_scores, + bbox_preds, + all_anchor_list, + labels_list, + label_weights_list, + bbox_targets_list, + bbox_weights_list, + num_total_samples=num_total_samples) + + # get anchor location loss + losses_loc = [] + for i in range(len(loc_preds)): + loss_loc = self.loss_loc_single( + loc_preds[i], + loc_targets[i], + loc_weights[i], + loc_avg_factor=loc_avg_factor) + losses_loc.append(loss_loc) + + # get anchor shape loss + losses_shape = [] + for i in range(len(shape_preds)): + loss_shape = self.loss_shape_single( + shape_preds[i], + bbox_anchors_list[i], + bbox_gts_list[i], + anchor_weights_list[i], + anchor_total_num=anchor_total_num) + losses_shape.append(loss_shape) + + return dict( + loss_cls=losses_cls, + loss_bbox=losses_bbox, + loss_shape=losses_shape, + loss_loc=losses_loc) + + @force_fp32( + apply_to=('cls_scores', 'bbox_preds', 'shape_preds', 'loc_preds')) + def get_bboxes(self, + cls_scores, + bbox_preds, + shape_preds, + loc_preds, + img_metas, + cfg=None, + rescale=False): + assert len(cls_scores) == len(bbox_preds) == len(shape_preds) == len( + loc_preds) + num_levels = len(cls_scores) + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + device = cls_scores[0].device + # get guided anchors + _, guided_anchors, loc_masks = self.get_anchors( + featmap_sizes, + shape_preds, + loc_preds, + img_metas, + use_loc_filter=not self.training, + device=device) + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + guided_anchor_list = [ + guided_anchors[img_id][i].detach() for i in range(num_levels) + ] + loc_mask_list = [ + loc_masks[img_id][i].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self._get_bboxes_single(cls_score_list, bbox_pred_list, + guided_anchor_list, + loc_mask_list, img_shape, + scale_factor, cfg, rescale) + result_list.append(proposals) + return result_list + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + mlvl_anchors, + mlvl_masks, + img_shape, + scale_factor, + cfg, + rescale=False): + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) == len(mlvl_anchors) + mlvl_bboxes = [] + mlvl_scores = [] + for cls_score, bbox_pred, anchors, mask in zip(cls_scores, bbox_preds, + mlvl_anchors, + mlvl_masks): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + # if no location is kept, end. + if mask.sum() == 0: + continue + # reshape scores and bbox_pred + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) + if self.use_sigmoid_cls: + scores = cls_score.sigmoid() + else: + scores = cls_score.softmax(-1) + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + # filter scores, bbox_pred w.r.t. mask. + # anchors are filtered in get_anchors() beforehand. + scores = scores[mask, :] + bbox_pred = bbox_pred[mask, :] + if scores.dim() == 0: + anchors = anchors.unsqueeze(0) + scores = scores.unsqueeze(0) + bbox_pred = bbox_pred.unsqueeze(0) + # filter anchors, bbox_pred, scores w.r.t. scores + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + if self.use_sigmoid_cls: + max_scores, _ = scores.max(dim=1) + else: + # remind that we set FG labels to [0, num_class-1] + # since mmdet v2.0 + # BG cat_id: num_class + max_scores, _ = scores[:, :-1].max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + bboxes = self.bbox_coder.decode( + anchors, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + if self.use_sigmoid_cls: + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + # multi class NMS + det_bboxes, det_labels = multiclass_nms(mlvl_bboxes, mlvl_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + return det_bboxes, det_labels diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/nasfcos_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/nasfcos_head.py new file mode 100644 index 00000000..994ce045 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/nasfcos_head.py @@ -0,0 +1,75 @@ +import copy + +import torch.nn as nn +from mmcv.cnn import (ConvModule, Scale, bias_init_with_prob, + caffe2_xavier_init, normal_init) + +from mmdet.models.dense_heads.fcos_head import FCOSHead +from ..builder import HEADS + + +@HEADS.register_module() +class NASFCOSHead(FCOSHead): + """Anchor-free head used in `NASFCOS `_. + + It is quite similar with FCOS head, except for the searched structure of + classification branch and bbox regression branch, where a structure of + "dconv3x3, conv3x3, dconv3x3, conv1x1" is utilized instead. + """ + + def _init_layers(self): + """Initialize layers of the head.""" + dconv3x3_config = dict( + type='DCNv2', + kernel_size=3, + use_bias=True, + deform_groups=2, + padding=1) + conv3x3_config = dict(type='Conv', kernel_size=3, padding=1) + conv1x1_config = dict(type='Conv', kernel_size=1) + + self.arch_config = [ + dconv3x3_config, conv3x3_config, dconv3x3_config, conv1x1_config + ] + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i, op_ in enumerate(self.arch_config): + op = copy.deepcopy(op_) + chn = self.in_channels if i == 0 else self.feat_channels + assert isinstance(op, dict) + use_bias = op.pop('use_bias', False) + padding = op.pop('padding', 0) + kernel_size = op.pop('kernel_size') + module = ConvModule( + chn, + self.feat_channels, + kernel_size, + stride=1, + padding=padding, + norm_cfg=self.norm_cfg, + bias=use_bias, + conv_cfg=op) + + self.cls_convs.append(copy.deepcopy(module)) + self.reg_convs.append(copy.deepcopy(module)) + + self.conv_cls = nn.Conv2d( + self.feat_channels, self.cls_out_channels, 3, padding=1) + self.conv_reg = nn.Conv2d(self.feat_channels, 4, 3, padding=1) + self.conv_centerness = nn.Conv2d(self.feat_channels, 1, 3, padding=1) + + self.scales = nn.ModuleList([Scale(1.0) for _ in self.strides]) + + def init_weights(self): + """Initialize weights of the head.""" + # retinanet_bias_init + bias_cls = bias_init_with_prob(0.01) + normal_init(self.conv_reg, std=0.01) + normal_init(self.conv_centerness, std=0.01) + normal_init(self.conv_cls, std=0.01, bias=bias_cls) + + for branch in [self.cls_convs, self.reg_convs]: + for module in branch.modules(): + if isinstance(module, ConvModule) \ + and isinstance(module.conv, nn.Conv2d): + caffe2_xavier_init(module.conv) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/paa_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/paa_head.py new file mode 100644 index 00000000..3ef0ac67 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/paa_head.py @@ -0,0 +1,655 @@ +import numpy as np +import torch +from mmcv.runner import force_fp32 + +from mmdet.core import multi_apply, multiclass_nms +from mmdet.core.bbox.iou_calculators import bbox_overlaps +from mmdet.models import HEADS +from mmdet.models.dense_heads import ATSSHead + +EPS = 1e-12 +try: + import sklearn.mixture as skm +except ImportError: + skm = None + + +def levels_to_images(mlvl_tensor): + """Concat multi-level feature maps by image. + + [feature_level0, feature_level1...] -> [feature_image0, feature_image1...] + Convert the shape of each element in mlvl_tensor from (N, C, H, W) to + (N, H*W , C), then split the element to N elements with shape (H*W, C), and + concat elements in same image of all level along first dimension. + + Args: + mlvl_tensor (list[torch.Tensor]): list of Tensor which collect from + corresponding level. Each element is of shape (N, C, H, W) + + Returns: + list[torch.Tensor]: A list that contains N tensors and each tensor is + of shape (num_elements, C) + """ + batch_size = mlvl_tensor[0].size(0) + batch_list = [[] for _ in range(batch_size)] + channels = mlvl_tensor[0].size(1) + for t in mlvl_tensor: + t = t.permute(0, 2, 3, 1) + t = t.view(batch_size, -1, channels).contiguous() + for img in range(batch_size): + batch_list[img].append(t[img]) + return [torch.cat(item, 0) for item in batch_list] + + +@HEADS.register_module() +class PAAHead(ATSSHead): + """Head of PAAAssignment: Probabilistic Anchor Assignment with IoU + Prediction for Object Detection. + + Code is modified from the `official github repo + `_. + + More details can be found in the `paper + `_ . + + Args: + topk (int): Select topk samples with smallest loss in + each level. + score_voting (bool): Whether to use score voting in post-process. + covariance_type : String describing the type of covariance parameters + to be used in :class:`sklearn.mixture.GaussianMixture`. + It must be one of: + + - 'full': each component has its own general covariance matrix + - 'tied': all components share the same general covariance matrix + - 'diag': each component has its own diagonal covariance matrix + - 'spherical': each component has its own single variance + Default: 'diag'. From 'full' to 'spherical', the gmm fitting + process is faster yet the performance could be influenced. For most + cases, 'diag' should be a good choice. + """ + + def __init__(self, + *args, + topk=9, + score_voting=True, + covariance_type='diag', + **kwargs): + # topk used in paa reassign process + self.topk = topk + self.with_score_voting = score_voting + self.covariance_type = covariance_type + super(PAAHead, self).__init__(*args, **kwargs) + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'iou_preds')) + def loss(self, + cls_scores, + bbox_preds, + iou_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + iou_preds (list[Tensor]): iou_preds for each scale + level with shape (N, num_anchors * 1, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor] | None): Specify which bounding + boxes can be ignored when are computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss gmm_assignment. + """ + + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels, + ) + (labels, labels_weight, bboxes_target, bboxes_weight, pos_inds, + pos_gt_index) = cls_reg_targets + cls_scores = levels_to_images(cls_scores) + cls_scores = [ + item.reshape(-1, self.cls_out_channels) for item in cls_scores + ] + bbox_preds = levels_to_images(bbox_preds) + bbox_preds = [item.reshape(-1, 4) for item in bbox_preds] + iou_preds = levels_to_images(iou_preds) + iou_preds = [item.reshape(-1, 1) for item in iou_preds] + pos_losses_list, = multi_apply(self.get_pos_loss, anchor_list, + cls_scores, bbox_preds, labels, + labels_weight, bboxes_target, + bboxes_weight, pos_inds) + + with torch.no_grad(): + reassign_labels, reassign_label_weight, \ + reassign_bbox_weights, num_pos = multi_apply( + self.paa_reassign, + pos_losses_list, + labels, + labels_weight, + bboxes_weight, + pos_inds, + pos_gt_index, + anchor_list) + num_pos = sum(num_pos) + # convert all tensor list to a flatten tensor + cls_scores = torch.cat(cls_scores, 0).view(-1, cls_scores[0].size(-1)) + bbox_preds = torch.cat(bbox_preds, 0).view(-1, bbox_preds[0].size(-1)) + iou_preds = torch.cat(iou_preds, 0).view(-1, iou_preds[0].size(-1)) + labels = torch.cat(reassign_labels, 0).view(-1) + flatten_anchors = torch.cat( + [torch.cat(item, 0) for item in anchor_list]) + labels_weight = torch.cat(reassign_label_weight, 0).view(-1) + bboxes_target = torch.cat(bboxes_target, + 0).view(-1, bboxes_target[0].size(-1)) + + pos_inds_flatten = ((labels >= 0) + & + (labels < self.num_classes)).nonzero().reshape(-1) + + losses_cls = self.loss_cls( + cls_scores, + labels, + labels_weight, + avg_factor=max(num_pos, len(img_metas))) # avoid num_pos=0 + if num_pos: + pos_bbox_pred = self.bbox_coder.decode( + flatten_anchors[pos_inds_flatten], + bbox_preds[pos_inds_flatten]) + pos_bbox_target = bboxes_target[pos_inds_flatten] + iou_target = bbox_overlaps( + pos_bbox_pred.detach(), pos_bbox_target, is_aligned=True) + losses_iou = self.loss_centerness( + iou_preds[pos_inds_flatten], + iou_target.unsqueeze(-1), + avg_factor=num_pos) + losses_bbox = self.loss_bbox( + pos_bbox_pred, + pos_bbox_target, + iou_target.clamp(min=EPS), + avg_factor=iou_target.sum()) + else: + losses_iou = iou_preds.sum() * 0 + losses_bbox = bbox_preds.sum() * 0 + + return dict( + loss_cls=losses_cls, loss_bbox=losses_bbox, loss_iou=losses_iou) + + def get_pos_loss(self, anchors, cls_score, bbox_pred, label, label_weight, + bbox_target, bbox_weight, pos_inds): + """Calculate loss of all potential positive samples obtained from first + match process. + + Args: + anchors (list[Tensor]): Anchors of each scale. + cls_score (Tensor): Box scores of single image with shape + (num_anchors, num_classes) + bbox_pred (Tensor): Box energies / deltas of single image + with shape (num_anchors, 4) + label (Tensor): classification target of each anchor with + shape (num_anchors,) + label_weight (Tensor): Classification loss weight of each + anchor with shape (num_anchors). + bbox_target (dict): Regression target of each anchor with + shape (num_anchors, 4). + bbox_weight (Tensor): Bbox weight of each anchor with shape + (num_anchors, 4). + pos_inds (Tensor): Index of all positive samples got from + first assign process. + + Returns: + Tensor: Losses of all positive samples in single image. + """ + if not len(pos_inds): + return cls_score.new([]), + anchors_all_level = torch.cat(anchors, 0) + pos_scores = cls_score[pos_inds] + pos_bbox_pred = bbox_pred[pos_inds] + pos_label = label[pos_inds] + pos_label_weight = label_weight[pos_inds] + pos_bbox_target = bbox_target[pos_inds] + pos_bbox_weight = bbox_weight[pos_inds] + pos_anchors = anchors_all_level[pos_inds] + pos_bbox_pred = self.bbox_coder.decode(pos_anchors, pos_bbox_pred) + + # to keep loss dimension + loss_cls = self.loss_cls( + pos_scores, + pos_label, + pos_label_weight, + avg_factor=self.loss_cls.loss_weight, + reduction_override='none') + + loss_bbox = self.loss_bbox( + pos_bbox_pred, + pos_bbox_target, + pos_bbox_weight, + avg_factor=self.loss_cls.loss_weight, + reduction_override='none') + + loss_cls = loss_cls.sum(-1) + pos_loss = loss_bbox + loss_cls + return pos_loss, + + def paa_reassign(self, pos_losses, label, label_weight, bbox_weight, + pos_inds, pos_gt_inds, anchors): + """Fit loss to GMM distribution and separate positive, ignore, negative + samples again with GMM model. + + Args: + pos_losses (Tensor): Losses of all positive samples in + single image. + label (Tensor): classification target of each anchor with + shape (num_anchors,) + label_weight (Tensor): Classification loss weight of each + anchor with shape (num_anchors). + bbox_weight (Tensor): Bbox weight of each anchor with shape + (num_anchors, 4). + pos_inds (Tensor): Index of all positive samples got from + first assign process. + pos_gt_inds (Tensor): Gt_index of all positive samples got + from first assign process. + anchors (list[Tensor]): Anchors of each scale. + + Returns: + tuple: Usually returns a tuple containing learning targets. + + - label (Tensor): classification target of each anchor after + paa assign, with shape (num_anchors,) + - label_weight (Tensor): Classification loss weight of each + anchor after paa assign, with shape (num_anchors). + - bbox_weight (Tensor): Bbox weight of each anchor with shape + (num_anchors, 4). + - num_pos (int): The number of positive samples after paa + assign. + """ + if not len(pos_inds): + return label, label_weight, bbox_weight, 0 + label = label.clone() + label_weight = label_weight.clone() + bbox_weight = bbox_weight.clone() + num_gt = pos_gt_inds.max() + 1 + num_level = len(anchors) + num_anchors_each_level = [item.size(0) for item in anchors] + num_anchors_each_level.insert(0, 0) + inds_level_interval = np.cumsum(num_anchors_each_level) + pos_level_mask = [] + for i in range(num_level): + mask = (pos_inds >= inds_level_interval[i]) & ( + pos_inds < inds_level_interval[i + 1]) + pos_level_mask.append(mask) + pos_inds_after_paa = [label.new_tensor([])] + ignore_inds_after_paa = [label.new_tensor([])] + for gt_ind in range(num_gt): + pos_inds_gmm = [] + pos_loss_gmm = [] + gt_mask = pos_gt_inds == gt_ind + for level in range(num_level): + level_mask = pos_level_mask[level] + level_gt_mask = level_mask & gt_mask + value, topk_inds = pos_losses[level_gt_mask].topk( + min(level_gt_mask.sum(), self.topk), largest=False) + pos_inds_gmm.append(pos_inds[level_gt_mask][topk_inds]) + pos_loss_gmm.append(value) + pos_inds_gmm = torch.cat(pos_inds_gmm) + pos_loss_gmm = torch.cat(pos_loss_gmm) + # fix gmm need at least two sample + if len(pos_inds_gmm) < 2: + continue + device = pos_inds_gmm.device + pos_loss_gmm, sort_inds = pos_loss_gmm.sort() + pos_inds_gmm = pos_inds_gmm[sort_inds] + pos_loss_gmm = pos_loss_gmm.view(-1, 1).cpu().numpy() + min_loss, max_loss = pos_loss_gmm.min(), pos_loss_gmm.max() + means_init = np.array([min_loss, max_loss]).reshape(2, 1) + weights_init = np.array([0.5, 0.5]) + precisions_init = np.array([1.0, 1.0]).reshape(2, 1, 1) # full + if self.covariance_type == 'spherical': + precisions_init = precisions_init.reshape(2) + elif self.covariance_type == 'diag': + precisions_init = precisions_init.reshape(2, 1) + elif self.covariance_type == 'tied': + precisions_init = np.array([[1.0]]) + if skm is None: + raise ImportError('Please run "pip install sklearn" ' + 'to install sklearn first.') + gmm = skm.GaussianMixture( + 2, + weights_init=weights_init, + means_init=means_init, + precisions_init=precisions_init, + covariance_type=self.covariance_type) + gmm.fit(pos_loss_gmm) + gmm_assignment = gmm.predict(pos_loss_gmm) + scores = gmm.score_samples(pos_loss_gmm) + gmm_assignment = torch.from_numpy(gmm_assignment).to(device) + scores = torch.from_numpy(scores).to(device) + + pos_inds_temp, ignore_inds_temp = self.gmm_separation_scheme( + gmm_assignment, scores, pos_inds_gmm) + pos_inds_after_paa.append(pos_inds_temp) + ignore_inds_after_paa.append(ignore_inds_temp) + + pos_inds_after_paa = torch.cat(pos_inds_after_paa) + ignore_inds_after_paa = torch.cat(ignore_inds_after_paa) + reassign_mask = (pos_inds.unsqueeze(1) != pos_inds_after_paa).all(1) + reassign_ids = pos_inds[reassign_mask] + label[reassign_ids] = self.num_classes + label_weight[ignore_inds_after_paa] = 0 + bbox_weight[reassign_ids] = 0 + num_pos = len(pos_inds_after_paa) + return label, label_weight, bbox_weight, num_pos + + def gmm_separation_scheme(self, gmm_assignment, scores, pos_inds_gmm): + """A general separation scheme for gmm model. + + It separates a GMM distribution of candidate samples into three + parts, 0 1 and uncertain areas, and you can implement other + separation schemes by rewriting this function. + + Args: + gmm_assignment (Tensor): The prediction of GMM which is of shape + (num_samples,). The 0/1 value indicates the distribution + that each sample comes from. + scores (Tensor): The probability of sample coming from the + fit GMM distribution. The tensor is of shape (num_samples,). + pos_inds_gmm (Tensor): All the indexes of samples which are used + to fit GMM model. The tensor is of shape (num_samples,) + + Returns: + tuple[Tensor]: The indices of positive and ignored samples. + + - pos_inds_temp (Tensor): Indices of positive samples. + - ignore_inds_temp (Tensor): Indices of ignore samples. + """ + # The implementation is (c) in Fig.3 in origin paper intead of (b). + # You can refer to issues such as + # https://github.com/kkhoot/PAA/issues/8 and + # https://github.com/kkhoot/PAA/issues/9. + fgs = gmm_assignment == 0 + pos_inds_temp = fgs.new_tensor([], dtype=torch.long) + ignore_inds_temp = fgs.new_tensor([], dtype=torch.long) + if fgs.nonzero().numel(): + _, pos_thr_ind = scores[fgs].topk(1) + pos_inds_temp = pos_inds_gmm[fgs][:pos_thr_ind + 1] + ignore_inds_temp = pos_inds_gmm.new_tensor([]) + return pos_inds_temp, ignore_inds_temp + + def get_targets( + self, + anchor_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=1, + unmap_outputs=True, + ): + """Get targets for PAA head. + + This method is almost the same as `AnchorHead.get_targets()`. We direct + return the results from _get_targets_single instead map it to levels + by images_to_levels function. + + Args: + anchor_list (list[list[Tensor]]): Multi level anchors of each + image. The outer list indicates images, and the inner list + corresponds to feature levels of the image. Each element of + the inner list is a tensor of shape (num_anchors, 4). + valid_flag_list (list[list[Tensor]]): Multi level valid flags of + each image. The outer list indicates images, and the inner list + corresponds to feature levels of the image. Each element of + the inner list is a tensor of shape (num_anchors, ) + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image. + img_metas (list[dict]): Meta info of each image. + gt_bboxes_ignore_list (list[Tensor]): Ground truth bboxes to be + ignored. + gt_labels_list (list[Tensor]): Ground truth labels of each box. + label_channels (int): Channel of label. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: Usually returns a tuple containing learning targets. + + - labels (list[Tensor]): Labels of all anchors, each with + shape (num_anchors,). + - label_weights (list[Tensor]): Label weights of all anchor. + each with shape (num_anchors,). + - bbox_targets (list[Tensor]): BBox targets of all anchors. + each with shape (num_anchors, 4). + - bbox_weights (list[Tensor]): BBox weights of all anchors. + each with shape (num_anchors, 4). + - pos_inds (list[Tensor]): Contains all index of positive + sample in all anchor. + - gt_inds (list[Tensor]): Contains all gt_index of positive + sample in all anchor. + """ + + num_imgs = len(img_metas) + assert len(anchor_list) == len(valid_flag_list) == num_imgs + concat_anchor_list = [] + concat_valid_flag_list = [] + for i in range(num_imgs): + assert len(anchor_list[i]) == len(valid_flag_list[i]) + concat_anchor_list.append(torch.cat(anchor_list[i])) + concat_valid_flag_list.append(torch.cat(valid_flag_list[i])) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + results = multi_apply( + self._get_targets_single, + concat_anchor_list, + concat_valid_flag_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + img_metas, + label_channels=label_channels, + unmap_outputs=unmap_outputs) + + (labels, label_weights, bbox_targets, bbox_weights, valid_pos_inds, + valid_neg_inds, sampling_result) = results + + # Due to valid flag of anchors, we have to calculate the real pos_inds + # in origin anchor set. + pos_inds = [] + for i, single_labels in enumerate(labels): + pos_mask = (0 <= single_labels) & ( + single_labels < self.num_classes) + pos_inds.append(pos_mask.nonzero().view(-1)) + + gt_inds = [item.pos_assigned_gt_inds for item in sampling_result] + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + gt_inds) + + def _get_targets_single(self, + flat_anchors, + valid_flags, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=1, + unmap_outputs=True): + """Compute regression and classification targets for anchors in a + single image. + + This method is same as `AnchorHead._get_targets_single()`. + """ + assert unmap_outputs, 'We must map outputs back to the original' \ + 'set of anchors in PAAhead' + return super(ATSSHead, self)._get_targets_single( + flat_anchors, + valid_flags, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=1, + unmap_outputs=True) + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + iou_preds, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into labeled boxes. + + This method is almost same as `ATSSHead._get_bboxes_single()`. + We use sqrt(iou_preds * cls_scores) in NMS process instead of just + cls_scores. Besides, score voting is used when `` score_voting`` + is set to True. + """ + assert with_nms, 'PAA only supports "with_nms=True" now' + assert len(cls_scores) == len(bbox_preds) == len(mlvl_anchors) + mlvl_bboxes = [] + mlvl_scores = [] + mlvl_iou_preds = [] + for cls_score, bbox_pred, iou_preds, anchors in zip( + cls_scores, bbox_preds, iou_preds, mlvl_anchors): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + + scores = cls_score.permute(1, 2, 0).reshape( + -1, self.cls_out_channels).sigmoid() + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + iou_preds = iou_preds.permute(1, 2, 0).reshape(-1).sigmoid() + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + max_scores, _ = (scores * iou_preds[:, None]).sqrt().max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + iou_preds = iou_preds[topk_inds] + + bboxes = self.bbox_coder.decode( + anchors, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_iou_preds.append(iou_preds) + + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + mlvl_iou_preds = torch.cat(mlvl_iou_preds) + mlvl_nms_scores = (mlvl_scores * mlvl_iou_preds[:, None]).sqrt() + det_bboxes, det_labels = multiclass_nms( + mlvl_bboxes, + mlvl_nms_scores, + cfg.score_thr, + cfg.nms, + cfg.max_per_img, + score_factors=None) + if self.with_score_voting and len(det_bboxes) > 0: + det_bboxes, det_labels = self.score_voting(det_bboxes, det_labels, + mlvl_bboxes, + mlvl_nms_scores, + cfg.score_thr) + + return det_bboxes, det_labels + + def score_voting(self, det_bboxes, det_labels, mlvl_bboxes, + mlvl_nms_scores, score_thr): + """Implementation of score voting method works on each remaining boxes + after NMS procedure. + + Args: + det_bboxes (Tensor): Remaining boxes after NMS procedure, + with shape (k, 5), each dimension means + (x1, y1, x2, y2, score). + det_labels (Tensor): The label of remaining boxes, with shape + (k, 1),Labels are 0-based. + mlvl_bboxes (Tensor): All boxes before the NMS procedure, + with shape (num_anchors,4). + mlvl_nms_scores (Tensor): The scores of all boxes which is used + in the NMS procedure, with shape (num_anchors, num_class) + mlvl_iou_preds (Tensot): The predictions of IOU of all boxes + before the NMS procedure, with shape (num_anchors, 1) + score_thr (float): The score threshold of bboxes. + + Returns: + tuple: Usually returns a tuple containing voting results. + + - det_bboxes_voted (Tensor): Remaining boxes after + score voting procedure, with shape (k, 5), each + dimension means (x1, y1, x2, y2, score). + - det_labels_voted (Tensor): Label of remaining bboxes + after voting, with shape (num_anchors,). + """ + candidate_mask = mlvl_nms_scores > score_thr + candidate_mask_nozeros = candidate_mask.nonzero() + candidate_inds = candidate_mask_nozeros[:, 0] + candidate_labels = candidate_mask_nozeros[:, 1] + candidate_bboxes = mlvl_bboxes[candidate_inds] + candidate_scores = mlvl_nms_scores[candidate_mask] + det_bboxes_voted = [] + det_labels_voted = [] + for cls in range(self.cls_out_channels): + candidate_cls_mask = candidate_labels == cls + if not candidate_cls_mask.any(): + continue + candidate_cls_scores = candidate_scores[candidate_cls_mask] + candidate_cls_bboxes = candidate_bboxes[candidate_cls_mask] + det_cls_mask = det_labels == cls + det_cls_bboxes = det_bboxes[det_cls_mask].view( + -1, det_bboxes.size(-1)) + det_candidate_ious = bbox_overlaps(det_cls_bboxes[:, :4], + candidate_cls_bboxes) + for det_ind in range(len(det_cls_bboxes)): + single_det_ious = det_candidate_ious[det_ind] + pos_ious_mask = single_det_ious > 0.01 + pos_ious = single_det_ious[pos_ious_mask] + pos_bboxes = candidate_cls_bboxes[pos_ious_mask] + pos_scores = candidate_cls_scores[pos_ious_mask] + pis = (torch.exp(-(1 - pos_ious)**2 / 0.025) * + pos_scores)[:, None] + voted_box = torch.sum( + pis * pos_bboxes, dim=0) / torch.sum( + pis, dim=0) + voted_score = det_cls_bboxes[det_ind][-1:][None, :] + det_bboxes_voted.append( + torch.cat((voted_box[None, :], voted_score), dim=1)) + det_labels_voted.append(cls) + + det_bboxes_voted = torch.cat(det_bboxes_voted, dim=0) + det_labels_voted = det_labels.new_tensor(det_labels_voted) + return det_bboxes_voted, det_labels_voted diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_retinanet_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_retinanet_head.py new file mode 100644 index 00000000..bd87b9ae --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_retinanet_head.py @@ -0,0 +1,154 @@ +import torch +from mmcv.runner import force_fp32 + +from mmdet.core import images_to_levels +from ..builder import HEADS +from ..losses import carl_loss, isr_p +from .retina_head import RetinaHead + + +@HEADS.register_module() +class PISARetinaHead(RetinaHead): + """PISA Retinanet Head. + + The head owns the same structure with Retinanet Head, but differs in two + aspects: + 1. Importance-based Sample Reweighting Positive (ISR-P) is applied to + change the positive loss weights. + 2. Classification-aware regression loss is adopted as a third loss. + """ + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes of each image + with shape (num_obj, 4). + gt_labels (list[Tensor]): Ground truth labels of each image + with shape (num_obj, 4). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor]): Ignored gt bboxes of each image. + Default: None. + + Returns: + dict: Loss dict, comprise classification loss, regression loss and + carl loss. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels, + return_sampling_results=True) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg, sampling_results_list) = cls_reg_targets + num_total_samples = ( + num_total_pos + num_total_neg if self.sampling else num_total_pos) + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + # concat all level anchors and flags to a single tensor + concat_anchor_list = [] + for i in range(len(anchor_list)): + concat_anchor_list.append(torch.cat(anchor_list[i])) + all_anchor_list = images_to_levels(concat_anchor_list, + num_level_anchors) + + num_imgs = len(img_metas) + flatten_cls_scores = [ + cls_score.permute(0, 2, 3, 1).reshape(num_imgs, -1, label_channels) + for cls_score in cls_scores + ] + flatten_cls_scores = torch.cat( + flatten_cls_scores, dim=1).reshape(-1, + flatten_cls_scores[0].size(-1)) + flatten_bbox_preds = [ + bbox_pred.permute(0, 2, 3, 1).reshape(num_imgs, -1, 4) + for bbox_pred in bbox_preds + ] + flatten_bbox_preds = torch.cat( + flatten_bbox_preds, dim=1).view(-1, flatten_bbox_preds[0].size(-1)) + flatten_labels = torch.cat(labels_list, dim=1).reshape(-1) + flatten_label_weights = torch.cat( + label_weights_list, dim=1).reshape(-1) + flatten_anchors = torch.cat(all_anchor_list, dim=1).reshape(-1, 4) + flatten_bbox_targets = torch.cat( + bbox_targets_list, dim=1).reshape(-1, 4) + flatten_bbox_weights = torch.cat( + bbox_weights_list, dim=1).reshape(-1, 4) + + # Apply ISR-P + isr_cfg = self.train_cfg.get('isr', None) + if isr_cfg is not None: + all_targets = (flatten_labels, flatten_label_weights, + flatten_bbox_targets, flatten_bbox_weights) + with torch.no_grad(): + all_targets = isr_p( + flatten_cls_scores, + flatten_bbox_preds, + all_targets, + flatten_anchors, + sampling_results_list, + bbox_coder=self.bbox_coder, + loss_cls=self.loss_cls, + num_class=self.num_classes, + **self.train_cfg.isr) + (flatten_labels, flatten_label_weights, flatten_bbox_targets, + flatten_bbox_weights) = all_targets + + # For convenience we compute loss once instead separating by fpn level, + # so that we don't need to separate the weights by level again. + # The result should be the same + losses_cls = self.loss_cls( + flatten_cls_scores, + flatten_labels, + flatten_label_weights, + avg_factor=num_total_samples) + losses_bbox = self.loss_bbox( + flatten_bbox_preds, + flatten_bbox_targets, + flatten_bbox_weights, + avg_factor=num_total_samples) + loss_dict = dict(loss_cls=losses_cls, loss_bbox=losses_bbox) + + # CARL Loss + carl_cfg = self.train_cfg.get('carl', None) + if carl_cfg is not None: + loss_carl = carl_loss( + flatten_cls_scores, + flatten_labels, + flatten_bbox_preds, + flatten_bbox_targets, + self.loss_bbox, + **self.train_cfg.carl, + avg_factor=num_total_pos, + sigmoid=True, + num_class=self.num_classes) + loss_dict.update(loss_carl) + + return loss_dict diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_ssd_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_ssd_head.py new file mode 100644 index 00000000..90ef3c83 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/pisa_ssd_head.py @@ -0,0 +1,139 @@ +import torch + +from mmdet.core import multi_apply +from ..builder import HEADS +from ..losses import CrossEntropyLoss, SmoothL1Loss, carl_loss, isr_p +from .ssd_head import SSDHead + + +# TODO: add loss evaluator for SSD +@HEADS.register_module() +class PISASSDHead(SSDHead): + + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes of each image + with shape (num_obj, 4). + gt_labels (list[Tensor]): Ground truth labels of each image + with shape (num_obj, 4). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (list[Tensor]): Ignored gt bboxes of each image. + Default: None. + + Returns: + dict: Loss dict, comprise classification loss regression loss and + carl loss. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=1, + unmap_outputs=False, + return_sampling_results=True) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg, sampling_results_list) = cls_reg_targets + + num_images = len(img_metas) + all_cls_scores = torch.cat([ + s.permute(0, 2, 3, 1).reshape( + num_images, -1, self.cls_out_channels) for s in cls_scores + ], 1) + all_labels = torch.cat(labels_list, -1).view(num_images, -1) + all_label_weights = torch.cat(label_weights_list, + -1).view(num_images, -1) + all_bbox_preds = torch.cat([ + b.permute(0, 2, 3, 1).reshape(num_images, -1, 4) + for b in bbox_preds + ], -2) + all_bbox_targets = torch.cat(bbox_targets_list, + -2).view(num_images, -1, 4) + all_bbox_weights = torch.cat(bbox_weights_list, + -2).view(num_images, -1, 4) + + # concat all level anchors to a single tensor + all_anchors = [] + for i in range(num_images): + all_anchors.append(torch.cat(anchor_list[i])) + + isr_cfg = self.train_cfg.get('isr', None) + all_targets = (all_labels.view(-1), all_label_weights.view(-1), + all_bbox_targets.view(-1, + 4), all_bbox_weights.view(-1, 4)) + # apply ISR-P + if isr_cfg is not None: + all_targets = isr_p( + all_cls_scores.view(-1, all_cls_scores.size(-1)), + all_bbox_preds.view(-1, 4), + all_targets, + torch.cat(all_anchors), + sampling_results_list, + loss_cls=CrossEntropyLoss(), + bbox_coder=self.bbox_coder, + **self.train_cfg.isr, + num_class=self.num_classes) + (new_labels, new_label_weights, new_bbox_targets, + new_bbox_weights) = all_targets + all_labels = new_labels.view(all_labels.shape) + all_label_weights = new_label_weights.view(all_label_weights.shape) + all_bbox_targets = new_bbox_targets.view(all_bbox_targets.shape) + all_bbox_weights = new_bbox_weights.view(all_bbox_weights.shape) + + # add CARL loss + carl_loss_cfg = self.train_cfg.get('carl', None) + if carl_loss_cfg is not None: + loss_carl = carl_loss( + all_cls_scores.view(-1, all_cls_scores.size(-1)), + all_targets[0], + all_bbox_preds.view(-1, 4), + all_targets[2], + SmoothL1Loss(beta=1.), + **self.train_cfg.carl, + avg_factor=num_total_pos, + num_class=self.num_classes) + + # check NaN and Inf + assert torch.isfinite(all_cls_scores).all().item(), \ + 'classification scores become infinite or NaN!' + assert torch.isfinite(all_bbox_preds).all().item(), \ + 'bbox predications become infinite or NaN!' + + losses_cls, losses_bbox = multi_apply( + self.loss_single, + all_cls_scores, + all_bbox_preds, + all_anchors, + all_labels, + all_label_weights, + all_bbox_targets, + all_bbox_weights, + num_total_samples=num_total_pos) + loss_dict = dict(loss_cls=losses_cls, loss_bbox=losses_bbox) + if carl_loss_cfg is not None: + loss_dict.update(loss_carl) + return loss_dict diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/reppoints_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/reppoints_head.py new file mode 100644 index 00000000..03e3fa0f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/reppoints_head.py @@ -0,0 +1,763 @@ +import numpy as np +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, bias_init_with_prob, normal_init +from mmcv.ops import DeformConv2d + +from mmdet.core import (PointGenerator, build_assigner, build_sampler, + images_to_levels, multi_apply, multiclass_nms, unmap) +from ..builder import HEADS, build_loss +from .anchor_free_head import AnchorFreeHead + + +@HEADS.register_module() +class RepPointsHead(AnchorFreeHead): + """RepPoint head. + + Args: + point_feat_channels (int): Number of channels of points features. + gradient_mul (float): The multiplier to gradients from + points refinement and recognition. + point_strides (Iterable): points strides. + point_base_scale (int): bbox scale for assigning labels. + loss_cls (dict): Config of classification loss. + loss_bbox_init (dict): Config of initial points loss. + loss_bbox_refine (dict): Config of points loss in refinement. + use_grid_points (bool): If we use bounding box representation, the + reppoints is represented as grid points on the bounding box. + center_init (bool): Whether to use center point assignment. + transform_method (str): The methods to transform RepPoints to bbox. + """ # noqa: W605 + + def __init__(self, + num_classes, + in_channels, + point_feat_channels=256, + num_points=9, + gradient_mul=0.1, + point_strides=[8, 16, 32, 64, 128], + point_base_scale=4, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox_init=dict( + type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=0.5), + loss_bbox_refine=dict( + type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0), + use_grid_points=False, + center_init=True, + transform_method='moment', + moment_mul=0.01, + **kwargs): + self.num_points = num_points + self.point_feat_channels = point_feat_channels + self.use_grid_points = use_grid_points + self.center_init = center_init + + # we use deform conv to extract points features + self.dcn_kernel = int(np.sqrt(num_points)) + self.dcn_pad = int((self.dcn_kernel - 1) / 2) + assert self.dcn_kernel * self.dcn_kernel == num_points, \ + 'The points number should be a square number.' + assert self.dcn_kernel % 2 == 1, \ + 'The points number should be an odd square number.' + dcn_base = np.arange(-self.dcn_pad, + self.dcn_pad + 1).astype(np.float64) + dcn_base_y = np.repeat(dcn_base, self.dcn_kernel) + dcn_base_x = np.tile(dcn_base, self.dcn_kernel) + dcn_base_offset = np.stack([dcn_base_y, dcn_base_x], axis=1).reshape( + (-1)) + self.dcn_base_offset = torch.tensor(dcn_base_offset).view(1, -1, 1, 1) + + super().__init__(num_classes, in_channels, loss_cls=loss_cls, **kwargs) + + self.gradient_mul = gradient_mul + self.point_base_scale = point_base_scale + self.point_strides = point_strides + self.point_generators = [PointGenerator() for _ in self.point_strides] + + self.sampling = loss_cls['type'] not in ['FocalLoss'] + if self.train_cfg: + self.init_assigner = build_assigner(self.train_cfg.init.assigner) + self.refine_assigner = build_assigner( + self.train_cfg.refine.assigner) + # use PseudoSampler when sampling is False + if self.sampling and hasattr(self.train_cfg, 'sampler'): + sampler_cfg = self.train_cfg.sampler + else: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + self.transform_method = transform_method + if self.transform_method == 'moment': + self.moment_transfer = nn.Parameter( + data=torch.zeros(2), requires_grad=True) + self.moment_mul = moment_mul + + self.use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + if self.use_sigmoid_cls: + self.cls_out_channels = self.num_classes + else: + self.cls_out_channels = self.num_classes + 1 + self.loss_bbox_init = build_loss(loss_bbox_init) + self.loss_bbox_refine = build_loss(loss_bbox_refine) + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + pts_out_dim = 4 if self.use_grid_points else 2 * self.num_points + self.reppoints_cls_conv = DeformConv2d(self.feat_channels, + self.point_feat_channels, + self.dcn_kernel, 1, + self.dcn_pad) + self.reppoints_cls_out = nn.Conv2d(self.point_feat_channels, + self.cls_out_channels, 1, 1, 0) + self.reppoints_pts_init_conv = nn.Conv2d(self.feat_channels, + self.point_feat_channels, 3, + 1, 1) + self.reppoints_pts_init_out = nn.Conv2d(self.point_feat_channels, + pts_out_dim, 1, 1, 0) + self.reppoints_pts_refine_conv = DeformConv2d(self.feat_channels, + self.point_feat_channels, + self.dcn_kernel, 1, + self.dcn_pad) + self.reppoints_pts_refine_out = nn.Conv2d(self.point_feat_channels, + pts_out_dim, 1, 1, 0) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs: + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.reppoints_cls_conv, std=0.01) + normal_init(self.reppoints_cls_out, std=0.01, bias=bias_cls) + normal_init(self.reppoints_pts_init_conv, std=0.01) + normal_init(self.reppoints_pts_init_out, std=0.01) + normal_init(self.reppoints_pts_refine_conv, std=0.01) + normal_init(self.reppoints_pts_refine_out, std=0.01) + + def points2bbox(self, pts, y_first=True): + """Converting the points set into bounding box. + + :param pts: the input points sets (fields), each points + set (fields) is represented as 2n scalar. + :param y_first: if y_fisrt=True, the point set is represented as + [y1, x1, y2, x2 ... yn, xn], otherwise the point set is + represented as [x1, y1, x2, y2 ... xn, yn]. + :return: each points set is converting to a bbox [x1, y1, x2, y2]. + """ + pts_reshape = pts.view(pts.shape[0], -1, 2, *pts.shape[2:]) + pts_y = pts_reshape[:, :, 0, ...] if y_first else pts_reshape[:, :, 1, + ...] + pts_x = pts_reshape[:, :, 1, ...] if y_first else pts_reshape[:, :, 0, + ...] + if self.transform_method == 'minmax': + bbox_left = pts_x.min(dim=1, keepdim=True)[0] + bbox_right = pts_x.max(dim=1, keepdim=True)[0] + bbox_up = pts_y.min(dim=1, keepdim=True)[0] + bbox_bottom = pts_y.max(dim=1, keepdim=True)[0] + bbox = torch.cat([bbox_left, bbox_up, bbox_right, bbox_bottom], + dim=1) + elif self.transform_method == 'partial_minmax': + pts_y = pts_y[:, :4, ...] + pts_x = pts_x[:, :4, ...] + bbox_left = pts_x.min(dim=1, keepdim=True)[0] + bbox_right = pts_x.max(dim=1, keepdim=True)[0] + bbox_up = pts_y.min(dim=1, keepdim=True)[0] + bbox_bottom = pts_y.max(dim=1, keepdim=True)[0] + bbox = torch.cat([bbox_left, bbox_up, bbox_right, bbox_bottom], + dim=1) + elif self.transform_method == 'moment': + pts_y_mean = pts_y.mean(dim=1, keepdim=True) + pts_x_mean = pts_x.mean(dim=1, keepdim=True) + pts_y_std = torch.std(pts_y - pts_y_mean, dim=1, keepdim=True) + pts_x_std = torch.std(pts_x - pts_x_mean, dim=1, keepdim=True) + moment_transfer = (self.moment_transfer * self.moment_mul) + ( + self.moment_transfer.detach() * (1 - self.moment_mul)) + moment_width_transfer = moment_transfer[0] + moment_height_transfer = moment_transfer[1] + half_width = pts_x_std * torch.exp(moment_width_transfer) + half_height = pts_y_std * torch.exp(moment_height_transfer) + bbox = torch.cat([ + pts_x_mean - half_width, pts_y_mean - half_height, + pts_x_mean + half_width, pts_y_mean + half_height + ], + dim=1) + else: + raise NotImplementedError + return bbox + + def gen_grid_from_reg(self, reg, previous_boxes): + """Base on the previous bboxes and regression values, we compute the + regressed bboxes and generate the grids on the bboxes. + + :param reg: the regression value to previous bboxes. + :param previous_boxes: previous bboxes. + :return: generate grids on the regressed bboxes. + """ + b, _, h, w = reg.shape + bxy = (previous_boxes[:, :2, ...] + previous_boxes[:, 2:, ...]) / 2. + bwh = (previous_boxes[:, 2:, ...] - + previous_boxes[:, :2, ...]).clamp(min=1e-6) + grid_topleft = bxy + bwh * reg[:, :2, ...] - 0.5 * bwh * torch.exp( + reg[:, 2:, ...]) + grid_wh = bwh * torch.exp(reg[:, 2:, ...]) + grid_left = grid_topleft[:, [0], ...] + grid_top = grid_topleft[:, [1], ...] + grid_width = grid_wh[:, [0], ...] + grid_height = grid_wh[:, [1], ...] + intervel = torch.linspace(0., 1., self.dcn_kernel).view( + 1, self.dcn_kernel, 1, 1).type_as(reg) + grid_x = grid_left + grid_width * intervel + grid_x = grid_x.unsqueeze(1).repeat(1, self.dcn_kernel, 1, 1, 1) + grid_x = grid_x.view(b, -1, h, w) + grid_y = grid_top + grid_height * intervel + grid_y = grid_y.unsqueeze(2).repeat(1, 1, self.dcn_kernel, 1, 1) + grid_y = grid_y.view(b, -1, h, w) + grid_yx = torch.stack([grid_y, grid_x], dim=2) + grid_yx = grid_yx.view(b, -1, h, w) + regressed_bbox = torch.cat([ + grid_left, grid_top, grid_left + grid_width, grid_top + grid_height + ], 1) + return grid_yx, regressed_bbox + + def forward(self, feats): + return multi_apply(self.forward_single, feats) + + def forward_single(self, x): + """Forward feature map of a single FPN level.""" + dcn_base_offset = self.dcn_base_offset.type_as(x) + # If we use center_init, the initial reppoints is from center points. + # If we use bounding bbox representation, the initial reppoints is + # from regular grid placed on a pre-defined bbox. + if self.use_grid_points or not self.center_init: + scale = self.point_base_scale / 2 + points_init = dcn_base_offset / dcn_base_offset.max() * scale + bbox_init = x.new_tensor([-scale, -scale, scale, + scale]).view(1, 4, 1, 1) + else: + points_init = 0 + cls_feat = x + pts_feat = x + for cls_conv in self.cls_convs: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs: + pts_feat = reg_conv(pts_feat) + # initialize reppoints + pts_out_init = self.reppoints_pts_init_out( + self.relu(self.reppoints_pts_init_conv(pts_feat))) + if self.use_grid_points: + pts_out_init, bbox_out_init = self.gen_grid_from_reg( + pts_out_init, bbox_init.detach()) + else: + pts_out_init = pts_out_init + points_init + # refine and classify reppoints + pts_out_init_grad_mul = (1 - self.gradient_mul) * pts_out_init.detach( + ) + self.gradient_mul * pts_out_init + dcn_offset = pts_out_init_grad_mul - dcn_base_offset + cls_out = self.reppoints_cls_out( + self.relu(self.reppoints_cls_conv(cls_feat, dcn_offset))) + pts_out_refine = self.reppoints_pts_refine_out( + self.relu(self.reppoints_pts_refine_conv(pts_feat, dcn_offset))) + if self.use_grid_points: + pts_out_refine, bbox_out_refine = self.gen_grid_from_reg( + pts_out_refine, bbox_out_init.detach()) + else: + pts_out_refine = pts_out_refine + pts_out_init.detach() + return cls_out, pts_out_init, pts_out_refine + + def get_points(self, featmap_sizes, img_metas, device): + """Get points according to feature map sizes. + + Args: + featmap_sizes (list[tuple]): Multi-level feature map sizes. + img_metas (list[dict]): Image meta info. + + Returns: + tuple: points of each image, valid flags of each image + """ + num_imgs = len(img_metas) + num_levels = len(featmap_sizes) + + # since feature map sizes of all images are the same, we only compute + # points center for one time + multi_level_points = [] + for i in range(num_levels): + points = self.point_generators[i].grid_points( + featmap_sizes[i], self.point_strides[i], device) + multi_level_points.append(points) + points_list = [[point.clone() for point in multi_level_points] + for _ in range(num_imgs)] + + # for each image, we compute valid flags of multi level grids + valid_flag_list = [] + for img_id, img_meta in enumerate(img_metas): + multi_level_flags = [] + for i in range(num_levels): + point_stride = self.point_strides[i] + feat_h, feat_w = featmap_sizes[i] + h, w = img_meta['pad_shape'][:2] + valid_feat_h = min(int(np.ceil(h / point_stride)), feat_h) + valid_feat_w = min(int(np.ceil(w / point_stride)), feat_w) + flags = self.point_generators[i].valid_flags( + (feat_h, feat_w), (valid_feat_h, valid_feat_w), device) + multi_level_flags.append(flags) + valid_flag_list.append(multi_level_flags) + + return points_list, valid_flag_list + + def centers_to_bboxes(self, point_list): + """Get bboxes according to center points. + + Only used in :class:`MaxIoUAssigner`. + """ + bbox_list = [] + for i_img, point in enumerate(point_list): + bbox = [] + for i_lvl in range(len(self.point_strides)): + scale = self.point_base_scale * self.point_strides[i_lvl] * 0.5 + bbox_shift = torch.Tensor([-scale, -scale, scale, + scale]).view(1, 4).type_as(point[0]) + bbox_center = torch.cat( + [point[i_lvl][:, :2], point[i_lvl][:, :2]], dim=1) + bbox.append(bbox_center + bbox_shift) + bbox_list.append(bbox) + return bbox_list + + def offset_to_pts(self, center_list, pred_list): + """Change from point offset to point coordinate.""" + pts_list = [] + for i_lvl in range(len(self.point_strides)): + pts_lvl = [] + for i_img in range(len(center_list)): + pts_center = center_list[i_img][i_lvl][:, :2].repeat( + 1, self.num_points) + pts_shift = pred_list[i_lvl][i_img] + yx_pts_shift = pts_shift.permute(1, 2, 0).view( + -1, 2 * self.num_points) + y_pts_shift = yx_pts_shift[..., 0::2] + x_pts_shift = yx_pts_shift[..., 1::2] + xy_pts_shift = torch.stack([x_pts_shift, y_pts_shift], -1) + xy_pts_shift = xy_pts_shift.view(*yx_pts_shift.shape[:-1], -1) + pts = xy_pts_shift * self.point_strides[i_lvl] + pts_center + pts_lvl.append(pts) + pts_lvl = torch.stack(pts_lvl, 0) + pts_list.append(pts_lvl) + return pts_list + + def _point_target_single(self, + flat_proposals, + valid_flags, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + label_channels=1, + stage='init', + unmap_outputs=True): + inside_flags = valid_flags + if not inside_flags.any(): + return (None, ) * 7 + # assign gt and sample proposals + proposals = flat_proposals[inside_flags, :] + + if stage == 'init': + assigner = self.init_assigner + pos_weight = self.train_cfg.init.pos_weight + else: + assigner = self.refine_assigner + pos_weight = self.train_cfg.refine.pos_weight + assign_result = assigner.assign(proposals, gt_bboxes, gt_bboxes_ignore, + None if self.sampling else gt_labels) + sampling_result = self.sampler.sample(assign_result, proposals, + gt_bboxes) + + num_valid_proposals = proposals.shape[0] + bbox_gt = proposals.new_zeros([num_valid_proposals, 4]) + pos_proposals = torch.zeros_like(proposals) + proposals_weights = proposals.new_zeros([num_valid_proposals, 4]) + labels = proposals.new_full((num_valid_proposals, ), + self.num_classes, + dtype=torch.long) + label_weights = proposals.new_zeros( + num_valid_proposals, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + pos_gt_bboxes = sampling_result.pos_gt_bboxes + bbox_gt[pos_inds, :] = pos_gt_bboxes + pos_proposals[pos_inds, :] = proposals[pos_inds, :] + proposals_weights[pos_inds, :] = 1.0 + if gt_labels is None: + # Only rpn gives gt_labels as None + # Foreground is the first class + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = pos_weight + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + # map up to original set of proposals + if unmap_outputs: + num_total_proposals = flat_proposals.size(0) + labels = unmap(labels, num_total_proposals, inside_flags) + label_weights = unmap(label_weights, num_total_proposals, + inside_flags) + bbox_gt = unmap(bbox_gt, num_total_proposals, inside_flags) + pos_proposals = unmap(pos_proposals, num_total_proposals, + inside_flags) + proposals_weights = unmap(proposals_weights, num_total_proposals, + inside_flags) + + return (labels, label_weights, bbox_gt, pos_proposals, + proposals_weights, pos_inds, neg_inds) + + def get_targets(self, + proposals_list, + valid_flag_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + stage='init', + label_channels=1, + unmap_outputs=True): + """Compute corresponding GT box and classification targets for + proposals. + + Args: + proposals_list (list[list]): Multi level points/bboxes of each + image. + valid_flag_list (list[list]): Multi level valid flags of each + image. + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image. + img_metas (list[dict]): Meta info of each image. + gt_bboxes_ignore_list (list[Tensor]): Ground truth bboxes to be + ignored. + gt_bboxes_list (list[Tensor]): Ground truth labels of each box. + stage (str): `init` or `refine`. Generate target for init stage or + refine stage + label_channels (int): Channel of label. + unmap_outputs (bool): Whether to map outputs back to the original + set of anchors. + + Returns: + tuple: + - labels_list (list[Tensor]): Labels of each level. + - label_weights_list (list[Tensor]): Label weights of each level. # noqa: E501 + - bbox_gt_list (list[Tensor]): Ground truth bbox of each level. + - proposal_list (list[Tensor]): Proposals(points/bboxes) of each level. # noqa: E501 + - proposal_weights_list (list[Tensor]): Proposal weights of each level. # noqa: E501 + - num_total_pos (int): Number of positive samples in all images. # noqa: E501 + - num_total_neg (int): Number of negative samples in all images. # noqa: E501 + """ + assert stage in ['init', 'refine'] + num_imgs = len(img_metas) + assert len(proposals_list) == len(valid_flag_list) == num_imgs + + # points number of multi levels + num_level_proposals = [points.size(0) for points in proposals_list[0]] + + # concat all level points and flags to a single tensor + for i in range(num_imgs): + assert len(proposals_list[i]) == len(valid_flag_list[i]) + proposals_list[i] = torch.cat(proposals_list[i]) + valid_flag_list[i] = torch.cat(valid_flag_list[i]) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + (all_labels, all_label_weights, all_bbox_gt, all_proposals, + all_proposal_weights, pos_inds_list, neg_inds_list) = multi_apply( + self._point_target_single, + proposals_list, + valid_flag_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + stage=stage, + label_channels=label_channels, + unmap_outputs=unmap_outputs) + # no valid points + if any([labels is None for labels in all_labels]): + return None + # sampled points of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + labels_list = images_to_levels(all_labels, num_level_proposals) + label_weights_list = images_to_levels(all_label_weights, + num_level_proposals) + bbox_gt_list = images_to_levels(all_bbox_gt, num_level_proposals) + proposals_list = images_to_levels(all_proposals, num_level_proposals) + proposal_weights_list = images_to_levels(all_proposal_weights, + num_level_proposals) + return (labels_list, label_weights_list, bbox_gt_list, proposals_list, + proposal_weights_list, num_total_pos, num_total_neg) + + def loss_single(self, cls_score, pts_pred_init, pts_pred_refine, labels, + label_weights, bbox_gt_init, bbox_weights_init, + bbox_gt_refine, bbox_weights_refine, stride, + num_total_samples_init, num_total_samples_refine): + # classification loss + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + cls_score = cls_score.permute(0, 2, 3, + 1).reshape(-1, self.cls_out_channels) + cls_score = cls_score.contiguous() + loss_cls = self.loss_cls( + cls_score, + labels, + label_weights, + avg_factor=num_total_samples_refine) + + # points loss + bbox_gt_init = bbox_gt_init.reshape(-1, 4) + bbox_weights_init = bbox_weights_init.reshape(-1, 4) + bbox_pred_init = self.points2bbox( + pts_pred_init.reshape(-1, 2 * self.num_points), y_first=False) + bbox_gt_refine = bbox_gt_refine.reshape(-1, 4) + bbox_weights_refine = bbox_weights_refine.reshape(-1, 4) + bbox_pred_refine = self.points2bbox( + pts_pred_refine.reshape(-1, 2 * self.num_points), y_first=False) + normalize_term = self.point_base_scale * stride + loss_pts_init = self.loss_bbox_init( + bbox_pred_init / normalize_term, + bbox_gt_init / normalize_term, + bbox_weights_init, + avg_factor=num_total_samples_init) + loss_pts_refine = self.loss_bbox_refine( + bbox_pred_refine / normalize_term, + bbox_gt_refine / normalize_term, + bbox_weights_refine, + avg_factor=num_total_samples_refine) + return loss_cls, loss_pts_init, loss_pts_refine + + def loss(self, + cls_scores, + pts_preds_init, + pts_preds_refine, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == len(self.point_generators) + device = cls_scores[0].device + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + + # target for initial stage + center_list, valid_flag_list = self.get_points(featmap_sizes, + img_metas, device) + pts_coordinate_preds_init = self.offset_to_pts(center_list, + pts_preds_init) + if self.train_cfg.init.assigner['type'] == 'PointAssigner': + # Assign target for center list + candidate_list = center_list + else: + # transform center list to bbox list and + # assign target for bbox list + bbox_list = self.centers_to_bboxes(center_list) + candidate_list = bbox_list + cls_reg_targets_init = self.get_targets( + candidate_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + stage='init', + label_channels=label_channels) + (*_, bbox_gt_list_init, candidate_list_init, bbox_weights_list_init, + num_total_pos_init, num_total_neg_init) = cls_reg_targets_init + num_total_samples_init = ( + num_total_pos_init + + num_total_neg_init if self.sampling else num_total_pos_init) + + # target for refinement stage + center_list, valid_flag_list = self.get_points(featmap_sizes, + img_metas, device) + pts_coordinate_preds_refine = self.offset_to_pts( + center_list, pts_preds_refine) + bbox_list = [] + for i_img, center in enumerate(center_list): + bbox = [] + for i_lvl in range(len(pts_preds_refine)): + bbox_preds_init = self.points2bbox( + pts_preds_init[i_lvl].detach()) + bbox_shift = bbox_preds_init * self.point_strides[i_lvl] + bbox_center = torch.cat( + [center[i_lvl][:, :2], center[i_lvl][:, :2]], dim=1) + bbox.append(bbox_center + + bbox_shift[i_img].permute(1, 2, 0).reshape(-1, 4)) + bbox_list.append(bbox) + cls_reg_targets_refine = self.get_targets( + bbox_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + stage='refine', + label_channels=label_channels) + (labels_list, label_weights_list, bbox_gt_list_refine, + candidate_list_refine, bbox_weights_list_refine, num_total_pos_refine, + num_total_neg_refine) = cls_reg_targets_refine + num_total_samples_refine = ( + num_total_pos_refine + + num_total_neg_refine if self.sampling else num_total_pos_refine) + + # compute loss + losses_cls, losses_pts_init, losses_pts_refine = multi_apply( + self.loss_single, + cls_scores, + pts_coordinate_preds_init, + pts_coordinate_preds_refine, + labels_list, + label_weights_list, + bbox_gt_list_init, + bbox_weights_list_init, + bbox_gt_list_refine, + bbox_weights_list_refine, + self.point_strides, + num_total_samples_init=num_total_samples_init, + num_total_samples_refine=num_total_samples_refine) + loss_dict_all = { + 'loss_cls': losses_cls, + 'loss_pts_init': losses_pts_init, + 'loss_pts_refine': losses_pts_refine + } + return loss_dict_all + + def get_bboxes(self, + cls_scores, + pts_preds_init, + pts_preds_refine, + img_metas, + cfg=None, + rescale=False, + with_nms=True): + assert len(cls_scores) == len(pts_preds_refine) + device = cls_scores[0].device + bbox_preds_refine = [ + self.points2bbox(pts_pred_refine) + for pts_pred_refine in pts_preds_refine + ] + num_levels = len(cls_scores) + mlvl_points = [ + self.point_generators[i].grid_points(cls_scores[i].size()[-2:], + self.point_strides[i], device) + for i in range(num_levels) + ] + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds_refine[i][img_id].detach() + for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self._get_bboxes_single(cls_score_list, bbox_pred_list, + mlvl_points, img_shape, + scale_factor, cfg, rescale, + with_nms) + result_list.append(proposals) + return result_list + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + mlvl_points, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) == len(mlvl_points) + mlvl_bboxes = [] + mlvl_scores = [] + for i_lvl, (cls_score, bbox_pred, points) in enumerate( + zip(cls_scores, bbox_preds, mlvl_points)): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) + if self.use_sigmoid_cls: + scores = cls_score.sigmoid() + else: + scores = cls_score.softmax(-1) + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + if self.use_sigmoid_cls: + max_scores, _ = scores.max(dim=1) + else: + # remind that we set FG labels to [0, num_class-1] + # since mmdet v2.0 + # BG cat_id: num_class + max_scores, _ = scores[:, :-1].max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + points = points[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + bbox_pos_center = torch.cat([points[:, :2], points[:, :2]], dim=1) + bboxes = bbox_pred * self.point_strides[i_lvl] + bbox_pos_center + x1 = bboxes[:, 0].clamp(min=0, max=img_shape[1]) + y1 = bboxes[:, 1].clamp(min=0, max=img_shape[0]) + x2 = bboxes[:, 2].clamp(min=0, max=img_shape[1]) + y2 = bboxes[:, 3].clamp(min=0, max=img_shape[0]) + bboxes = torch.stack([x1, y1, x2, y2], dim=-1) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + if self.use_sigmoid_cls: + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + if with_nms: + det_bboxes, det_labels = multiclass_nms(mlvl_bboxes, mlvl_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + return det_bboxes, det_labels + else: + return mlvl_bboxes, mlvl_scores diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_head.py new file mode 100644 index 00000000..b12416fa --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_head.py @@ -0,0 +1,114 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, bias_init_with_prob, normal_init + +from ..builder import HEADS +from .anchor_head import AnchorHead + + +@HEADS.register_module() +class RetinaHead(AnchorHead): + r"""An anchor-based head used in `RetinaNet + `_. + + The head contains two subnetworks. The first classifies anchor boxes and + the second regresses deltas for the anchors. + + Example: + >>> import torch + >>> self = RetinaHead(11, 7) + >>> x = torch.rand(1, 7, 32, 32) + >>> cls_score, bbox_pred = self.forward_single(x) + >>> # Each anchor predicts a score for each class except background + >>> cls_per_anchor = cls_score.shape[1] / self.num_anchors + >>> box_per_anchor = bbox_pred.shape[1] / self.num_anchors + >>> assert cls_per_anchor == (self.num_classes) + >>> assert box_per_anchor == 4 + """ + + def __init__(self, + num_classes, + in_channels, + stacked_convs=4, + conv_cfg=None, + norm_cfg=None, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=4, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[8, 16, 32, 64, 128]), + **kwargs): + self.stacked_convs = stacked_convs + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + super(RetinaHead, self).__init__( + num_classes, + in_channels, + anchor_generator=anchor_generator, + **kwargs) + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.retina_cls = nn.Conv2d( + self.feat_channels, + self.num_anchors * self.cls_out_channels, + 3, + padding=1) + self.retina_reg = nn.Conv2d( + self.feat_channels, self.num_anchors * 4, 3, padding=1) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs: + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.retina_cls, std=0.01, bias=bias_cls) + normal_init(self.retina_reg, std=0.01) + + def forward_single(self, x): + """Forward feature of a single scale level. + + Args: + x (Tensor): Features of a single scale level. + + Returns: + tuple: + cls_score (Tensor): Cls scores for a single scale level + the channels number is num_anchors * num_classes. + bbox_pred (Tensor): Box energies / deltas for a single scale + level, the channels number is num_anchors * 4. + """ + cls_feat = x + reg_feat = x + for cls_conv in self.cls_convs: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs: + reg_feat = reg_conv(reg_feat) + cls_score = self.retina_cls(cls_feat) + bbox_pred = self.retina_reg(reg_feat) + return cls_score, bbox_pred diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_sepbn_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_sepbn_head.py new file mode 100644 index 00000000..6b8ce7f0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/retina_sepbn_head.py @@ -0,0 +1,113 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, bias_init_with_prob, normal_init + +from ..builder import HEADS +from .anchor_head import AnchorHead + + +@HEADS.register_module() +class RetinaSepBNHead(AnchorHead): + """"RetinaHead with separate BN. + + In RetinaHead, conv/norm layers are shared across different FPN levels, + while in RetinaSepBNHead, conv layers are shared across different FPN + levels, but BN layers are separated. + """ + + def __init__(self, + num_classes, + num_ins, + in_channels, + stacked_convs=4, + conv_cfg=None, + norm_cfg=None, + **kwargs): + self.stacked_convs = stacked_convs + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.num_ins = num_ins + super(RetinaSepBNHead, self).__init__(num_classes, in_channels, + **kwargs) + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.num_ins): + cls_convs = nn.ModuleList() + reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.cls_convs.append(cls_convs) + self.reg_convs.append(reg_convs) + for i in range(self.stacked_convs): + for j in range(1, self.num_ins): + self.cls_convs[j][i].conv = self.cls_convs[0][i].conv + self.reg_convs[j][i].conv = self.reg_convs[0][i].conv + self.retina_cls = nn.Conv2d( + self.feat_channels, + self.num_anchors * self.cls_out_channels, + 3, + padding=1) + self.retina_reg = nn.Conv2d( + self.feat_channels, self.num_anchors * 4, 3, padding=1) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs[0]: + normal_init(m.conv, std=0.01) + for m in self.reg_convs[0]: + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.retina_cls, std=0.01, bias=bias_cls) + normal_init(self.retina_reg, std=0.01) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: Usually a tuple of classification scores and bbox prediction + cls_scores (list[Tensor]): Classification scores for all scale + levels, each is a 4D-tensor, the channels number is + num_anchors * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for all scale + levels, each is a 4D-tensor, the channels number is + num_anchors * 4. + """ + cls_scores = [] + bbox_preds = [] + for i, x in enumerate(feats): + cls_feat = feats[i] + reg_feat = feats[i] + for cls_conv in self.cls_convs[i]: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs[i]: + reg_feat = reg_conv(reg_feat) + cls_score = self.retina_cls(cls_feat) + bbox_pred = self.retina_reg(reg_feat) + cls_scores.append(cls_score) + bbox_preds.append(bbox_pred) + return cls_scores, bbox_preds diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_head.py new file mode 100644 index 00000000..f565d1a4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_head.py @@ -0,0 +1,168 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import normal_init +from mmcv.ops import batched_nms + +from ..builder import HEADS +from .anchor_head import AnchorHead +from .rpn_test_mixin import RPNTestMixin + + +@HEADS.register_module() +class RPNHead(RPNTestMixin, AnchorHead): + """RPN head. + + Args: + in_channels (int): Number of channels in the input feature map. + """ # noqa: W605 + + def __init__(self, in_channels, **kwargs): + super(RPNHead, self).__init__(1, in_channels, **kwargs) + + def _init_layers(self): + """Initialize layers of the head.""" + self.rpn_conv = nn.Conv2d( + self.in_channels, self.feat_channels, 3, padding=1) + self.rpn_cls = nn.Conv2d(self.feat_channels, + self.num_anchors * self.cls_out_channels, 1) + self.rpn_reg = nn.Conv2d(self.feat_channels, self.num_anchors * 4, 1) + + def init_weights(self): + """Initialize weights of the head.""" + normal_init(self.rpn_conv, std=0.01) + normal_init(self.rpn_cls, std=0.01) + normal_init(self.rpn_reg, std=0.01) + + def forward_single(self, x): + """Forward feature map of a single scale level.""" + x = self.rpn_conv(x) + x = F.relu(x, inplace=True) + rpn_cls_score = self.rpn_cls(x) + rpn_bbox_pred = self.rpn_reg(x) + return rpn_cls_score, rpn_bbox_pred + + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + losses = super(RPNHead, self).loss( + cls_scores, + bbox_preds, + gt_bboxes, + None, + img_metas, + gt_bboxes_ignore=gt_bboxes_ignore) + return dict( + loss_rpn_cls=losses['loss_cls'], loss_rpn_bbox=losses['loss_bbox']) + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False): + """Transform outputs for a single batch item into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (num_anchors * num_classes, H, W). + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (num_anchors * 4, H, W). + mlvl_anchors (list[Tensor]): Box reference for each scale level + with shape (num_total_anchors, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + + Returns: + Tensor: Labeled boxes in shape (n, 5), where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. + """ + cfg = self.test_cfg if cfg is None else cfg + # bboxes from different level should be independent during NMS, + # level_ids are used as labels for batched NMS to separate them + level_ids = [] + mlvl_scores = [] + mlvl_bbox_preds = [] + mlvl_valid_anchors = [] + for idx in range(len(cls_scores)): + rpn_cls_score = cls_scores[idx] + rpn_bbox_pred = bbox_preds[idx] + assert rpn_cls_score.size()[-2:] == rpn_bbox_pred.size()[-2:] + rpn_cls_score = rpn_cls_score.permute(1, 2, 0) + if self.use_sigmoid_cls: + rpn_cls_score = rpn_cls_score.reshape(-1) + scores = rpn_cls_score.sigmoid() + else: + rpn_cls_score = rpn_cls_score.reshape(-1, 2) + # We set FG labels to [0, num_class-1] and BG label to + # num_class in RPN head since mmdet v2.5, which is unified to + # be consistent with other head since mmdet v2.0. In mmdet v2.0 + # to v2.4 we keep BG label as 0 and FG label as 1 in rpn head. + scores = rpn_cls_score.softmax(dim=1)[:, 0] + rpn_bbox_pred = rpn_bbox_pred.permute(1, 2, 0).reshape(-1, 4) + anchors = mlvl_anchors[idx] + if cfg.nms_pre > 0 and scores.shape[0] > cfg.nms_pre: + # sort is faster than topk + # _, topk_inds = scores.topk(cfg.nms_pre) + ranked_scores, rank_inds = scores.sort(descending=True) + topk_inds = rank_inds[:cfg.nms_pre] + scores = ranked_scores[:cfg.nms_pre] + rpn_bbox_pred = rpn_bbox_pred[topk_inds, :] + anchors = anchors[topk_inds, :] + mlvl_scores.append(scores) + mlvl_bbox_preds.append(rpn_bbox_pred) + mlvl_valid_anchors.append(anchors) + level_ids.append( + scores.new_full((scores.size(0), ), idx, dtype=torch.long)) + + scores = torch.cat(mlvl_scores) + anchors = torch.cat(mlvl_valid_anchors) + rpn_bbox_pred = torch.cat(mlvl_bbox_preds) + proposals = self.bbox_coder.decode( + anchors, rpn_bbox_pred, max_shape=img_shape) + ids = torch.cat(level_ids) + + if cfg.min_bbox_size > 0: + w = proposals[:, 2] - proposals[:, 0] + h = proposals[:, 3] - proposals[:, 1] + valid_inds = torch.nonzero( + (w >= cfg.min_bbox_size) + & (h >= cfg.min_bbox_size), + as_tuple=False).squeeze() + if valid_inds.sum().item() != len(proposals): + proposals = proposals[valid_inds, :] + scores = scores[valid_inds] + ids = ids[valid_inds] + + # TODO: remove the hard coded nms type + nms_cfg = dict(type='nms', iou_threshold=cfg.nms_thr) + dets, keep = batched_nms(proposals, scores, ids, nms_cfg) + return dets[:cfg.nms_post] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_test_mixin.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_test_mixin.py new file mode 100644 index 00000000..4ce5c66f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/rpn_test_mixin.py @@ -0,0 +1,59 @@ +import sys + +from mmdet.core import merge_aug_proposals + +if sys.version_info >= (3, 7): + from mmdet.utils.contextmanagers import completed + + +class RPNTestMixin(object): + """Test methods of RPN.""" + + if sys.version_info >= (3, 7): + + async def async_simple_test_rpn(self, x, img_metas): + sleep_interval = self.test_cfg.pop('async_sleep_interval', 0.025) + async with completed( + __name__, 'rpn_head_forward', + sleep_interval=sleep_interval): + rpn_outs = self(x) + + proposal_list = self.get_bboxes(*rpn_outs, img_metas) + return proposal_list + + def simple_test_rpn(self, x, img_metas): + """Test without augmentation. + + Args: + x (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + img_metas (list[dict]): Meta info of each image. + + Returns: + list[Tensor]: Proposals of each image. + """ + rpn_outs = self(x) + proposal_list = self.get_bboxes(*rpn_outs, img_metas) + return proposal_list + + def aug_test_rpn(self, feats, img_metas): + samples_per_gpu = len(img_metas[0]) + aug_proposals = [[] for _ in range(samples_per_gpu)] + for x, img_meta in zip(feats, img_metas): + proposal_list = self.simple_test_rpn(x, img_meta) + for i, proposals in enumerate(proposal_list): + aug_proposals[i].append(proposals) + # reorganize the order of 'img_metas' to match the dimensions + # of 'aug_proposals' + aug_img_metas = [] + for i in range(samples_per_gpu): + aug_img_meta = [] + for j in range(len(img_metas)): + aug_img_meta.append(img_metas[j][i]) + aug_img_metas.append(aug_img_meta) + # after merging, proposals will be rescaled to the original image size + merged_proposals = [ + merge_aug_proposals(proposals, aug_img_meta, self.test_cfg) + for proposals, aug_img_meta in zip(aug_proposals, aug_img_metas) + ] + return merged_proposals diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/sabl_retina_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/sabl_retina_head.py new file mode 100644 index 00000000..4211622c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/sabl_retina_head.py @@ -0,0 +1,621 @@ +import numpy as np +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, bias_init_with_prob, normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import (build_anchor_generator, build_assigner, + build_bbox_coder, build_sampler, images_to_levels, + multi_apply, multiclass_nms, unmap) +from ..builder import HEADS, build_loss +from .base_dense_head import BaseDenseHead +from .guided_anchor_head import GuidedAnchorHead + + +@HEADS.register_module() +class SABLRetinaHead(BaseDenseHead): + """Side-Aware Boundary Localization (SABL) for RetinaNet. + + The anchor generation, assigning and sampling in SABLRetinaHead + are the same as GuidedAnchorHead for guided anchoring. + + Please refer to https://arxiv.org/abs/1912.04260 for more details. + + Args: + num_classes (int): Number of classes. + in_channels (int): Number of channels in the input feature map. + stacked_convs (int): Number of Convs for classification \ + and regression branches. Defaults to 4. + feat_channels (int): Number of hidden channels. \ + Defaults to 256. + approx_anchor_generator (dict): Config dict for approx generator. + square_anchor_generator (dict): Config dict for square generator. + conv_cfg (dict): Config dict for ConvModule. Defaults to None. + norm_cfg (dict): Config dict for Norm Layer. Defaults to None. + bbox_coder (dict): Config dict for bbox coder. + reg_decoded_bbox (bool): If true, the regression loss would be + applied directly on decoded bounding boxes, converting both + the predicted boxes and regression targets to absolute + coordinates format. Default False. It should be `True` when + using `IoULoss`, `GIoULoss`, or `DIoULoss` in the bbox head. + train_cfg (dict): Training config of SABLRetinaHead. + test_cfg (dict): Testing config of SABLRetinaHead. + loss_cls (dict): Config of classification loss. + loss_bbox_cls (dict): Config of classification loss for bbox branch. + loss_bbox_reg (dict): Config of regression loss for bbox branch. + """ + + def __init__(self, + num_classes, + in_channels, + stacked_convs=4, + feat_channels=256, + approx_anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=4, + scales_per_octave=3, + ratios=[0.5, 1.0, 2.0], + strides=[8, 16, 32, 64, 128]), + square_anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + scales=[4], + strides=[8, 16, 32, 64, 128]), + conv_cfg=None, + norm_cfg=None, + bbox_coder=dict( + type='BucketingBBoxCoder', + num_buckets=14, + scale_factor=3.0), + reg_decoded_bbox=False, + train_cfg=None, + test_cfg=None, + loss_cls=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + loss_bbox_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.5), + loss_bbox_reg=dict( + type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.5)): + super(SABLRetinaHead, self).__init__() + self.in_channels = in_channels + self.num_classes = num_classes + self.feat_channels = feat_channels + self.num_buckets = bbox_coder['num_buckets'] + self.side_num = int(np.ceil(self.num_buckets / 2)) + + assert (approx_anchor_generator['octave_base_scale'] == + square_anchor_generator['scales'][0]) + assert (approx_anchor_generator['strides'] == + square_anchor_generator['strides']) + + self.approx_anchor_generator = build_anchor_generator( + approx_anchor_generator) + self.square_anchor_generator = build_anchor_generator( + square_anchor_generator) + self.approxs_per_octave = ( + self.approx_anchor_generator.num_base_anchors[0]) + + # one anchor per location + self.num_anchors = 1 + self.stacked_convs = stacked_convs + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + + self.reg_decoded_bbox = reg_decoded_bbox + + self.use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + self.sampling = loss_cls['type'] not in [ + 'FocalLoss', 'GHMC', 'QualityFocalLoss' + ] + if self.use_sigmoid_cls: + self.cls_out_channels = num_classes + else: + self.cls_out_channels = num_classes + 1 + + self.bbox_coder = build_bbox_coder(bbox_coder) + self.loss_cls = build_loss(loss_cls) + self.loss_bbox_cls = build_loss(loss_bbox_cls) + self.loss_bbox_reg = build_loss(loss_bbox_reg) + + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # use PseudoSampler when sampling is False + if self.sampling and hasattr(self.train_cfg, 'sampler'): + sampler_cfg = self.train_cfg.sampler + else: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + + self.fp16_enabled = False + self._init_layers() + + def _init_layers(self): + self.relu = nn.ReLU(inplace=True) + self.cls_convs = nn.ModuleList() + self.reg_convs = nn.ModuleList() + for i in range(self.stacked_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.cls_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.reg_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.retina_cls = nn.Conv2d( + self.feat_channels, self.cls_out_channels, 3, padding=1) + self.retina_bbox_reg = nn.Conv2d( + self.feat_channels, self.side_num * 4, 3, padding=1) + self.retina_bbox_cls = nn.Conv2d( + self.feat_channels, self.side_num * 4, 3, padding=1) + + def init_weights(self): + for m in self.cls_convs: + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + normal_init(m.conv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.retina_cls, std=0.01, bias=bias_cls) + normal_init(self.retina_bbox_reg, std=0.01) + normal_init(self.retina_bbox_cls, std=0.01) + + def forward_single(self, x): + cls_feat = x + reg_feat = x + for cls_conv in self.cls_convs: + cls_feat = cls_conv(cls_feat) + for reg_conv in self.reg_convs: + reg_feat = reg_conv(reg_feat) + cls_score = self.retina_cls(cls_feat) + bbox_cls_pred = self.retina_bbox_cls(reg_feat) + bbox_reg_pred = self.retina_bbox_reg(reg_feat) + bbox_pred = (bbox_cls_pred, bbox_reg_pred) + return cls_score, bbox_pred + + def forward(self, feats): + return multi_apply(self.forward_single, feats) + + def get_anchors(self, featmap_sizes, img_metas, device='cuda'): + """Get squares according to feature map sizes and guided anchors. + + Args: + featmap_sizes (list[tuple]): Multi-level feature map sizes. + img_metas (list[dict]): Image meta info. + device (torch.device | str): device for returned tensors + + Returns: + tuple: square approxs of each image + """ + num_imgs = len(img_metas) + + # since feature map sizes of all images are the same, we only compute + # squares for one time + multi_level_squares = self.square_anchor_generator.grid_anchors( + featmap_sizes, device=device) + squares_list = [multi_level_squares for _ in range(num_imgs)] + + return squares_list + + def get_target(self, + approx_list, + inside_flag_list, + square_list, + gt_bboxes_list, + img_metas, + gt_bboxes_ignore_list=None, + gt_labels_list=None, + label_channels=None, + sampling=True, + unmap_outputs=True): + """Compute bucketing targets. + Args: + approx_list (list[list]): Multi level approxs of each image. + inside_flag_list (list[list]): Multi level inside flags of each + image. + square_list (list[list]): Multi level squares of each image. + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image. + img_metas (list[dict]): Meta info of each image. + gt_bboxes_ignore_list (list[Tensor]): ignore list of gt bboxes. + gt_bboxes_list (list[Tensor]): Gt bboxes of each image. + label_channels (int): Channel of label. + sampling (bool): Sample Anchors or not. + unmap_outputs (bool): unmap outputs or not. + + Returns: + tuple: Returns a tuple containing learning targets. + + - labels_list (list[Tensor]): Labels of each level. + - label_weights_list (list[Tensor]): Label weights of each \ + level. + - bbox_cls_targets_list (list[Tensor]): BBox cls targets of \ + each level. + - bbox_cls_weights_list (list[Tensor]): BBox cls weights of \ + each level. + - bbox_reg_targets_list (list[Tensor]): BBox reg targets of \ + each level. + - bbox_reg_weights_list (list[Tensor]): BBox reg weights of \ + each level. + - num_total_pos (int): Number of positive samples in all \ + images. + - num_total_neg (int): Number of negative samples in all \ + images. + """ + num_imgs = len(img_metas) + assert len(approx_list) == len(inside_flag_list) == len( + square_list) == num_imgs + # anchor number of multi levels + num_level_squares = [squares.size(0) for squares in square_list[0]] + # concat all level anchors and flags to a single tensor + inside_flag_flat_list = [] + approx_flat_list = [] + square_flat_list = [] + for i in range(num_imgs): + assert len(square_list[i]) == len(inside_flag_list[i]) + inside_flag_flat_list.append(torch.cat(inside_flag_list[i])) + approx_flat_list.append(torch.cat(approx_list[i])) + square_flat_list.append(torch.cat(square_list[i])) + + # compute targets for each image + if gt_bboxes_ignore_list is None: + gt_bboxes_ignore_list = [None for _ in range(num_imgs)] + if gt_labels_list is None: + gt_labels_list = [None for _ in range(num_imgs)] + (all_labels, all_label_weights, all_bbox_cls_targets, + all_bbox_cls_weights, all_bbox_reg_targets, all_bbox_reg_weights, + pos_inds_list, neg_inds_list) = multi_apply( + self._get_target_single, + approx_flat_list, + inside_flag_flat_list, + square_flat_list, + gt_bboxes_list, + gt_bboxes_ignore_list, + gt_labels_list, + img_metas, + label_channels=label_channels, + sampling=sampling, + unmap_outputs=unmap_outputs) + # no valid anchors + if any([labels is None for labels in all_labels]): + return None + # sampled anchors of all images + num_total_pos = sum([max(inds.numel(), 1) for inds in pos_inds_list]) + num_total_neg = sum([max(inds.numel(), 1) for inds in neg_inds_list]) + # split targets to a list w.r.t. multiple levels + labels_list = images_to_levels(all_labels, num_level_squares) + label_weights_list = images_to_levels(all_label_weights, + num_level_squares) + bbox_cls_targets_list = images_to_levels(all_bbox_cls_targets, + num_level_squares) + bbox_cls_weights_list = images_to_levels(all_bbox_cls_weights, + num_level_squares) + bbox_reg_targets_list = images_to_levels(all_bbox_reg_targets, + num_level_squares) + bbox_reg_weights_list = images_to_levels(all_bbox_reg_weights, + num_level_squares) + return (labels_list, label_weights_list, bbox_cls_targets_list, + bbox_cls_weights_list, bbox_reg_targets_list, + bbox_reg_weights_list, num_total_pos, num_total_neg) + + def _get_target_single(self, + flat_approxs, + inside_flags, + flat_squares, + gt_bboxes, + gt_bboxes_ignore, + gt_labels, + img_meta, + label_channels=None, + sampling=True, + unmap_outputs=True): + """Compute regression and classification targets for anchors in a + single image. + + Args: + flat_approxs (Tensor): flat approxs of a single image, + shape (n, 4) + inside_flags (Tensor): inside flags of a single image, + shape (n, ). + flat_squares (Tensor): flat squares of a single image, + shape (approxs_per_octave * n, 4) + gt_bboxes (Tensor): Ground truth bboxes of a single image, \ + shape (num_gts, 4). + gt_bboxes_ignore (Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + gt_labels (Tensor): Ground truth labels of each box, + shape (num_gts,). + img_meta (dict): Meta info of the image. + label_channels (int): Channel of label. + sampling (bool): Sample Anchors or not. + unmap_outputs (bool): unmap outputs or not. + + Returns: + tuple: + + - labels_list (Tensor): Labels in a single image + - label_weights (Tensor): Label weights in a single image + - bbox_cls_targets (Tensor): BBox cls targets in a single image + - bbox_cls_weights (Tensor): BBox cls weights in a single image + - bbox_reg_targets (Tensor): BBox reg targets in a single image + - bbox_reg_weights (Tensor): BBox reg weights in a single image + - num_total_pos (int): Number of positive samples \ + in a single image + - num_total_neg (int): Number of negative samples \ + in a single image + """ + if not inside_flags.any(): + return (None, ) * 8 + # assign gt and sample anchors + expand_inside_flags = inside_flags[:, None].expand( + -1, self.approxs_per_octave).reshape(-1) + approxs = flat_approxs[expand_inside_flags, :] + squares = flat_squares[inside_flags, :] + + assign_result = self.assigner.assign(approxs, squares, + self.approxs_per_octave, + gt_bboxes, gt_bboxes_ignore) + sampling_result = self.sampler.sample(assign_result, squares, + gt_bboxes) + + num_valid_squares = squares.shape[0] + bbox_cls_targets = squares.new_zeros( + (num_valid_squares, self.side_num * 4)) + bbox_cls_weights = squares.new_zeros( + (num_valid_squares, self.side_num * 4)) + bbox_reg_targets = squares.new_zeros( + (num_valid_squares, self.side_num * 4)) + bbox_reg_weights = squares.new_zeros( + (num_valid_squares, self.side_num * 4)) + labels = squares.new_full((num_valid_squares, ), + self.num_classes, + dtype=torch.long) + label_weights = squares.new_zeros(num_valid_squares, dtype=torch.float) + + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + if len(pos_inds) > 0: + (pos_bbox_reg_targets, pos_bbox_reg_weights, pos_bbox_cls_targets, + pos_bbox_cls_weights) = self.bbox_coder.encode( + sampling_result.pos_bboxes, sampling_result.pos_gt_bboxes) + + bbox_cls_targets[pos_inds, :] = pos_bbox_cls_targets + bbox_reg_targets[pos_inds, :] = pos_bbox_reg_targets + bbox_cls_weights[pos_inds, :] = pos_bbox_cls_weights + bbox_reg_weights[pos_inds, :] = pos_bbox_reg_weights + if gt_labels is None: + # Only rpn gives gt_labels as None + # Foreground is the first class + labels[pos_inds] = 0 + else: + labels[pos_inds] = gt_labels[ + sampling_result.pos_assigned_gt_inds] + if self.train_cfg.pos_weight <= 0: + label_weights[pos_inds] = 1.0 + else: + label_weights[pos_inds] = self.train_cfg.pos_weight + if len(neg_inds) > 0: + label_weights[neg_inds] = 1.0 + + # map up to original set of anchors + if unmap_outputs: + num_total_anchors = flat_squares.size(0) + labels = unmap( + labels, num_total_anchors, inside_flags, fill=self.num_classes) + label_weights = unmap(label_weights, num_total_anchors, + inside_flags) + bbox_cls_targets = unmap(bbox_cls_targets, num_total_anchors, + inside_flags) + bbox_cls_weights = unmap(bbox_cls_weights, num_total_anchors, + inside_flags) + bbox_reg_targets = unmap(bbox_reg_targets, num_total_anchors, + inside_flags) + bbox_reg_weights = unmap(bbox_reg_weights, num_total_anchors, + inside_flags) + return (labels, label_weights, bbox_cls_targets, bbox_cls_weights, + bbox_reg_targets, bbox_reg_weights, pos_inds, neg_inds) + + def loss_single(self, cls_score, bbox_pred, labels, label_weights, + bbox_cls_targets, bbox_cls_weights, bbox_reg_targets, + bbox_reg_weights, num_total_samples): + # classification loss + labels = labels.reshape(-1) + label_weights = label_weights.reshape(-1) + cls_score = cls_score.permute(0, 2, 3, + 1).reshape(-1, self.cls_out_channels) + loss_cls = self.loss_cls( + cls_score, labels, label_weights, avg_factor=num_total_samples) + # regression loss + bbox_cls_targets = bbox_cls_targets.reshape(-1, self.side_num * 4) + bbox_cls_weights = bbox_cls_weights.reshape(-1, self.side_num * 4) + bbox_reg_targets = bbox_reg_targets.reshape(-1, self.side_num * 4) + bbox_reg_weights = bbox_reg_weights.reshape(-1, self.side_num * 4) + (bbox_cls_pred, bbox_reg_pred) = bbox_pred + bbox_cls_pred = bbox_cls_pred.permute(0, 2, 3, 1).reshape( + -1, self.side_num * 4) + bbox_reg_pred = bbox_reg_pred.permute(0, 2, 3, 1).reshape( + -1, self.side_num * 4) + loss_bbox_cls = self.loss_bbox_cls( + bbox_cls_pred, + bbox_cls_targets.long(), + bbox_cls_weights, + avg_factor=num_total_samples * 4 * self.side_num) + loss_bbox_reg = self.loss_bbox_reg( + bbox_reg_pred, + bbox_reg_targets, + bbox_reg_weights, + avg_factor=num_total_samples * 4 * self.bbox_coder.offset_topk) + return loss_cls, loss_bbox_cls, loss_bbox_reg + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.approx_anchor_generator.num_levels + + device = cls_scores[0].device + + # get sampled approxes + approxs_list, inside_flag_list = GuidedAnchorHead.get_sampled_approxs( + self, featmap_sizes, img_metas, device=device) + + square_list = self.get_anchors(featmap_sizes, img_metas, device=device) + + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + + cls_reg_targets = self.get_target( + approxs_list, + inside_flag_list, + square_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels, + sampling=self.sampling) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_cls_targets_list, + bbox_cls_weights_list, bbox_reg_targets_list, bbox_reg_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + num_total_samples = ( + num_total_pos + num_total_neg if self.sampling else num_total_pos) + losses_cls, losses_bbox_cls, losses_bbox_reg = multi_apply( + self.loss_single, + cls_scores, + bbox_preds, + labels_list, + label_weights_list, + bbox_cls_targets_list, + bbox_cls_weights_list, + bbox_reg_targets_list, + bbox_reg_weights_list, + num_total_samples=num_total_samples) + return dict( + loss_cls=losses_cls, + loss_bbox_cls=losses_bbox_cls, + loss_bbox_reg=losses_bbox_reg) + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def get_bboxes(self, + cls_scores, + bbox_preds, + img_metas, + cfg=None, + rescale=False): + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + + device = cls_scores[0].device + mlvl_anchors = self.get_anchors( + featmap_sizes, img_metas, device=device) + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_cls_pred_list = [ + bbox_preds[i][0][img_id].detach() for i in range(num_levels) + ] + bbox_reg_pred_list = [ + bbox_preds[i][1][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self.get_bboxes_single(cls_score_list, + bbox_cls_pred_list, + bbox_reg_pred_list, + mlvl_anchors[img_id], img_shape, + scale_factor, cfg, rescale) + result_list.append(proposals) + return result_list + + def get_bboxes_single(self, + cls_scores, + bbox_cls_preds, + bbox_reg_preds, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False): + cfg = self.test_cfg if cfg is None else cfg + mlvl_bboxes = [] + mlvl_scores = [] + mlvl_confids = [] + assert len(cls_scores) == len(bbox_cls_preds) == len( + bbox_reg_preds) == len(mlvl_anchors) + for cls_score, bbox_cls_pred, bbox_reg_pred, anchors in zip( + cls_scores, bbox_cls_preds, bbox_reg_preds, mlvl_anchors): + assert cls_score.size()[-2:] == bbox_cls_pred.size( + )[-2:] == bbox_reg_pred.size()[-2::] + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) + if self.use_sigmoid_cls: + scores = cls_score.sigmoid() + else: + scores = cls_score.softmax(-1) + bbox_cls_pred = bbox_cls_pred.permute(1, 2, 0).reshape( + -1, self.side_num * 4) + bbox_reg_pred = bbox_reg_pred.permute(1, 2, 0).reshape( + -1, self.side_num * 4) + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + if self.use_sigmoid_cls: + max_scores, _ = scores.max(dim=1) + else: + max_scores, _ = scores[:, :-1].max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_cls_pred = bbox_cls_pred[topk_inds, :] + bbox_reg_pred = bbox_reg_pred[topk_inds, :] + scores = scores[topk_inds, :] + bbox_preds = [ + bbox_cls_pred.contiguous(), + bbox_reg_pred.contiguous() + ] + bboxes, confids = self.bbox_coder.decode( + anchors.contiguous(), bbox_preds, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_confids.append(confids) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + mlvl_confids = torch.cat(mlvl_confids) + if self.use_sigmoid_cls: + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + det_bboxes, det_labels = multiclass_nms( + mlvl_bboxes, + mlvl_scores, + cfg.score_thr, + cfg.nms, + cfg.max_per_img, + score_factors=mlvl_confids) + return det_bboxes, det_labels diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ssd_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ssd_head.py new file mode 100644 index 00000000..145622b6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/ssd_head.py @@ -0,0 +1,265 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import xavier_init +from mmcv.runner import force_fp32 + +from mmdet.core import (build_anchor_generator, build_assigner, + build_bbox_coder, build_sampler, multi_apply) +from ..builder import HEADS +from ..losses import smooth_l1_loss +from .anchor_head import AnchorHead + + +# TODO: add loss evaluator for SSD +@HEADS.register_module() +class SSDHead(AnchorHead): + """SSD head used in https://arxiv.org/abs/1512.02325. + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + anchor_generator (dict): Config dict for anchor generator + bbox_coder (dict): Config of bounding box coder. + reg_decoded_bbox (bool): If true, the regression loss would be + applied directly on decoded bounding boxes, converting both + the predicted boxes and regression targets to absolute + coordinates format. Default False. It should be `True` when + using `IoULoss`, `GIoULoss`, or `DIoULoss` in the bbox head. + train_cfg (dict): Training config of anchor head. + test_cfg (dict): Testing config of anchor head. + """ # noqa: W605 + + def __init__(self, + num_classes=80, + in_channels=(512, 1024, 512, 256, 256, 256), + anchor_generator=dict( + type='SSDAnchorGenerator', + scale_major=False, + input_size=300, + strides=[8, 16, 32, 64, 100, 300], + ratios=([2], [2, 3], [2, 3], [2, 3], [2], [2]), + basesize_ratio_range=(0.1, 0.9)), + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + clip_border=True, + target_means=[.0, .0, .0, .0], + target_stds=[1.0, 1.0, 1.0, 1.0], + ), + reg_decoded_bbox=False, + train_cfg=None, + test_cfg=None): + super(AnchorHead, self).__init__() + self.num_classes = num_classes + self.in_channels = in_channels + self.cls_out_channels = num_classes + 1 # add background class + self.anchor_generator = build_anchor_generator(anchor_generator) + num_anchors = self.anchor_generator.num_base_anchors + + reg_convs = [] + cls_convs = [] + for i in range(len(in_channels)): + reg_convs.append( + nn.Conv2d( + in_channels[i], + num_anchors[i] * 4, + kernel_size=3, + padding=1)) + cls_convs.append( + nn.Conv2d( + in_channels[i], + num_anchors[i] * (num_classes + 1), + kernel_size=3, + padding=1)) + self.reg_convs = nn.ModuleList(reg_convs) + self.cls_convs = nn.ModuleList(cls_convs) + + self.bbox_coder = build_bbox_coder(bbox_coder) + self.reg_decoded_bbox = reg_decoded_bbox + self.use_sigmoid_cls = False + self.cls_focal_loss = False + self.train_cfg = train_cfg + self.test_cfg = test_cfg + # set sampling=False for archor_target + self.sampling = False + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + # SSD sampling=False so use PseudoSampler + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + self.fp16_enabled = False + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.modules(): + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform', bias=0) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: + cls_scores (list[Tensor]): Classification scores for all scale + levels, each is a 4D-tensor, the channels number is + num_anchors * num_classes. + bbox_preds (list[Tensor]): Box energies / deltas for all scale + levels, each is a 4D-tensor, the channels number is + num_anchors * 4. + """ + cls_scores = [] + bbox_preds = [] + for feat, reg_conv, cls_conv in zip(feats, self.reg_convs, + self.cls_convs): + cls_scores.append(cls_conv(feat)) + bbox_preds.append(reg_conv(feat)) + return cls_scores, bbox_preds + + def loss_single(self, cls_score, bbox_pred, anchor, labels, label_weights, + bbox_targets, bbox_weights, num_total_samples): + """Compute loss of a single image. + + Args: + cls_score (Tensor): Box scores for eachimage + Has shape (num_total_anchors, num_classes). + bbox_pred (Tensor): Box energies / deltas for each image + level with shape (num_total_anchors, 4). + anchors (Tensor): Box reference for each scale level with shape + (num_total_anchors, 4). + labels (Tensor): Labels of each anchors with shape + (num_total_anchors,). + label_weights (Tensor): Label weights of each anchor with shape + (num_total_anchors,) + bbox_targets (Tensor): BBox regression targets of each anchor wight + shape (num_total_anchors, 4). + bbox_weights (Tensor): BBox regression loss weights of each anchor + with shape (num_total_anchors, 4). + num_total_samples (int): If sampling, num total samples equal to + the number of total anchors; Otherwise, it is the number of + positive anchors. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + + loss_cls_all = F.cross_entropy( + cls_score, labels, reduction='none') * label_weights + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + pos_inds = ((labels >= 0) & + (labels < self.num_classes)).nonzero().reshape(-1) + neg_inds = (labels == self.num_classes).nonzero().view(-1) + + num_pos_samples = pos_inds.size(0) + num_neg_samples = self.train_cfg.neg_pos_ratio * num_pos_samples + if num_neg_samples > neg_inds.size(0): + num_neg_samples = neg_inds.size(0) + topk_loss_cls_neg, _ = loss_cls_all[neg_inds].topk(num_neg_samples) + loss_cls_pos = loss_cls_all[pos_inds].sum() + loss_cls_neg = topk_loss_cls_neg.sum() + loss_cls = (loss_cls_pos + loss_cls_neg) / num_total_samples + + if self.reg_decoded_bbox: + # When the regression loss (e.g. `IouLoss`, `GIouLoss`) + # is applied directly on the decoded bounding boxes, it + # decodes the already encoded coordinates to absolute format. + bbox_pred = self.bbox_coder.decode(anchor, bbox_pred) + + loss_bbox = smooth_l1_loss( + bbox_pred, + bbox_targets, + bbox_weights, + beta=self.train_cfg.smoothl1_beta, + avg_factor=num_total_samples) + return loss_cls[None], loss_bbox + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute losses of the head. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=1, + unmap_outputs=False) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + + num_images = len(img_metas) + all_cls_scores = torch.cat([ + s.permute(0, 2, 3, 1).reshape( + num_images, -1, self.cls_out_channels) for s in cls_scores + ], 1) + all_labels = torch.cat(labels_list, -1).view(num_images, -1) + all_label_weights = torch.cat(label_weights_list, + -1).view(num_images, -1) + all_bbox_preds = torch.cat([ + b.permute(0, 2, 3, 1).reshape(num_images, -1, 4) + for b in bbox_preds + ], -2) + all_bbox_targets = torch.cat(bbox_targets_list, + -2).view(num_images, -1, 4) + all_bbox_weights = torch.cat(bbox_weights_list, + -2).view(num_images, -1, 4) + + # concat all level anchors to a single tensor + all_anchors = [] + for i in range(num_images): + all_anchors.append(torch.cat(anchor_list[i])) + + # check NaN and Inf + assert torch.isfinite(all_cls_scores).all().item(), \ + 'classification scores become infinite or NaN!' + assert torch.isfinite(all_bbox_preds).all().item(), \ + 'bbox predications become infinite or NaN!' + + losses_cls, losses_bbox = multi_apply( + self.loss_single, + all_cls_scores, + all_bbox_preds, + all_anchors, + all_labels, + all_label_weights, + all_bbox_targets, + all_bbox_weights, + num_total_samples=num_total_pos) + return dict(loss_cls=losses_cls, loss_bbox=losses_bbox) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/transformer_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/transformer_head.py new file mode 100644 index 00000000..eab6cf0c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/transformer_head.py @@ -0,0 +1,654 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import Conv2d, Linear, build_activation_layer +from mmcv.runner import force_fp32 + +from mmdet.core import (bbox_cxcywh_to_xyxy, bbox_xyxy_to_cxcywh, + build_assigner, build_sampler, multi_apply, + reduce_mean) +from mmdet.models.utils import (FFN, build_positional_encoding, + build_transformer) +from ..builder import HEADS, build_loss +from .anchor_free_head import AnchorFreeHead + + +@HEADS.register_module() +class TransformerHead(AnchorFreeHead): + """Implements the DETR transformer head. + + See `paper: End-to-End Object Detection with Transformers + `_ for details. + + Args: + num_classes (int): Number of categories excluding the background. + in_channels (int): Number of channels in the input feature map. + num_fcs (int, optional): Number of fully-connected layers used in + `FFN`, which is then used for the regression head. Default 2. + transformer (dict, optional): Config for transformer. + positional_encoding (dict, optional): Config for position encoding. + loss_cls (dict, optional): Config of the classification loss. + Default `CrossEntropyLoss`. + loss_bbox (dict, optional): Config of the regression loss. + Default `L1Loss`. + loss_iou (dict, optional): Config of the regression iou loss. + Default `GIoULoss`. + tran_cfg (dict, optional): Training config of transformer head. + test_cfg (dict, optional): Testing config of transformer head. + + Example: + >>> import torch + >>> self = TransformerHead(80, 2048) + >>> x = torch.rand(1, 2048, 32, 32) + >>> mask = torch.ones(1, 32, 32).to(x.dtype) + >>> mask[:, :16, :15] = 0 + >>> all_cls_scores, all_bbox_preds = self(x, mask) + """ + + def __init__(self, + num_classes, + in_channels, + num_fcs=2, + transformer=dict( + type='Transformer', + embed_dims=256, + num_heads=8, + num_encoder_layers=6, + num_decoder_layers=6, + feedforward_channels=2048, + dropout=0.1, + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2, + pre_norm=False, + return_intermediate_dec=True), + positional_encoding=dict( + type='SinePositionalEncoding', + num_feats=128, + normalize=True), + loss_cls=dict( + type='CrossEntropyLoss', + bg_cls_weight=0.1, + use_sigmoid=False, + loss_weight=1.0, + class_weight=1.0), + loss_bbox=dict(type='L1Loss', loss_weight=5.0), + loss_iou=dict(type='GIoULoss', loss_weight=2.0), + train_cfg=dict( + assigner=dict( + type='HungarianAssigner', + cls_cost=dict(type='ClassificationCost', weight=1.), + reg_cost=dict(type='BBoxL1Cost', weight=5.0), + iou_cost=dict( + type='IoUCost', iou_mode='giou', weight=2.0))), + test_cfg=dict(max_per_img=100), + **kwargs): + # NOTE here use `AnchorFreeHead` instead of `TransformerHead`, + # since it brings inconvenience when the initialization of + # `AnchorFreeHead` is called. + super(AnchorFreeHead, self).__init__() + use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + assert not use_sigmoid_cls, 'setting use_sigmoid_cls as True is ' \ + 'not supported in DETR, since background is needed for the ' \ + 'matching process.' + assert 'embed_dims' in transformer \ + and 'num_feats' in positional_encoding + num_feats = positional_encoding['num_feats'] + embed_dims = transformer['embed_dims'] + assert num_feats * 2 == embed_dims, 'embed_dims should' \ + f' be exactly 2 times of num_feats. Found {embed_dims}' \ + f' and {num_feats}.' + assert test_cfg is not None and 'max_per_img' in test_cfg + + class_weight = loss_cls.get('class_weight', None) + if class_weight is not None: + assert isinstance(class_weight, float), 'Expected ' \ + 'class_weight to have type float. Found ' \ + f'{type(class_weight)}.' + # NOTE following the official DETR rep0, bg_cls_weight means + # relative classification weight of the no-object class. + bg_cls_weight = loss_cls.get('bg_cls_weight', class_weight) + assert isinstance(bg_cls_weight, float), 'Expected ' \ + 'bg_cls_weight to have type float. Found ' \ + f'{type(bg_cls_weight)}.' + class_weight = torch.ones(num_classes + 1) * class_weight + # set background class as the last indice + class_weight[num_classes] = bg_cls_weight + loss_cls.update({'class_weight': class_weight}) + if 'bg_cls_weight' in loss_cls: + loss_cls.pop('bg_cls_weight') + self.bg_cls_weight = bg_cls_weight + + if train_cfg: + assert 'assigner' in train_cfg, 'assigner should be provided '\ + 'when train_cfg is set.' + assigner = train_cfg['assigner'] + assert loss_cls['loss_weight'] == assigner['cls_cost']['weight'], \ + 'The classification weight for loss and matcher should be' \ + 'exactly the same.' + assert loss_bbox['loss_weight'] == assigner['reg_cost'][ + 'weight'], 'The regression L1 weight for loss and matcher ' \ + 'should be exactly the same.' + assert loss_iou['loss_weight'] == assigner['iou_cost']['weight'], \ + 'The regression iou weight for loss and matcher should be' \ + 'exactly the same.' + self.assigner = build_assigner(assigner) + # DETR sampling=False, so use PseudoSampler + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + self.num_classes = num_classes + self.cls_out_channels = num_classes + 1 + self.in_channels = in_channels + self.num_fcs = num_fcs + self.train_cfg = train_cfg + self.test_cfg = test_cfg + self.use_sigmoid_cls = use_sigmoid_cls + self.embed_dims = embed_dims + self.num_query = test_cfg['max_per_img'] + self.fp16_enabled = False + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) + self.loss_iou = build_loss(loss_iou) + self.act_cfg = transformer.get('act_cfg', + dict(type='ReLU', inplace=True)) + self.activate = build_activation_layer(self.act_cfg) + self.positional_encoding = build_positional_encoding( + positional_encoding) + self.transformer = build_transformer(transformer) + self._init_layers() + + def _init_layers(self): + """Initialize layers of the transformer head.""" + self.input_proj = Conv2d( + self.in_channels, self.embed_dims, kernel_size=1) + self.fc_cls = Linear(self.embed_dims, self.cls_out_channels) + self.reg_ffn = FFN( + self.embed_dims, + self.embed_dims, + self.num_fcs, + self.act_cfg, + dropout=0.0, + add_residual=False) + self.fc_reg = Linear(self.embed_dims, 4) + self.query_embedding = nn.Embedding(self.num_query, self.embed_dims) + + def init_weights(self, distribution='uniform'): + """Initialize weights of the transformer head.""" + # The initialization for transformer is important + self.transformer.init_weights() + + def _load_from_state_dict(self, state_dict, prefix, local_metadata, strict, + missing_keys, unexpected_keys, error_msgs): + """load checkpoints.""" + # NOTE here use `AnchorFreeHead` instead of `TransformerHead`, + # since `AnchorFreeHead._load_from_state_dict` should not be + # called here. Invoking the default `Module._load_from_state_dict` + # is enough. + super(AnchorFreeHead, + self)._load_from_state_dict(state_dict, prefix, local_metadata, + strict, missing_keys, + unexpected_keys, error_msgs) + + def forward(self, feats, img_metas): + """Forward function. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + img_metas (list[dict]): List of image information. + + Returns: + tuple[list[Tensor], list[Tensor]]: Outputs for all scale levels. + + - all_cls_scores_list (list[Tensor]): Classification scores \ + for each scale level. Each is a 4D-tensor with shape \ + [nb_dec, bs, num_query, cls_out_channels]. Note \ + `cls_out_channels` should includes background. + - all_bbox_preds_list (list[Tensor]): Sigmoid regression \ + outputs for each scale level. Each is a 4D-tensor with \ + normalized coordinate format (cx, cy, w, h) and shape \ + [nb_dec, bs, num_query, 4]. + """ + num_levels = len(feats) + img_metas_list = [img_metas for _ in range(num_levels)] + return multi_apply(self.forward_single, feats, img_metas_list) + + def forward_single(self, x, img_metas): + """"Forward function for a single feature level. + + Args: + x (Tensor): Input feature from backbone's single stage, shape + [bs, c, h, w]. + img_metas (list[dict]): List of image information. + + Returns: + all_cls_scores (Tensor): Outputs from the classification head, + shape [nb_dec, bs, num_query, cls_out_channels]. Note + cls_out_channels should includes background. + all_bbox_preds (Tensor): Sigmoid outputs from the regression + head with normalized coordinate format (cx, cy, w, h). + Shape [nb_dec, bs, num_query, 4]. + """ + # construct binary masks which used for the transformer. + # NOTE following the official DETR repo, non-zero values representing + # ignored positions, while zero values means valid positions. + batch_size = x.size(0) + input_img_h, input_img_w = img_metas[0]['batch_input_shape'] + masks = x.new_ones((batch_size, input_img_h, input_img_w)) + for img_id in range(batch_size): + img_h, img_w, _ = img_metas[img_id]['img_shape'] + masks[img_id, :img_h, :img_w] = 0 + + x = self.input_proj(x) + # interpolate masks to have the same spatial shape with x + masks = F.interpolate( + masks.unsqueeze(1), size=x.shape[-2:]).to(torch.bool).squeeze(1) + # position encoding + pos_embed = self.positional_encoding(masks) # [bs, embed_dim, h, w] + # outs_dec: [nb_dec, bs, num_query, embed_dim] + outs_dec, _ = self.transformer(x, masks, self.query_embedding.weight, + pos_embed) + + all_cls_scores = self.fc_cls(outs_dec) + all_bbox_preds = self.fc_reg(self.activate( + self.reg_ffn(outs_dec))).sigmoid() + return all_cls_scores, all_bbox_preds + + @force_fp32(apply_to=('all_cls_scores_list', 'all_bbox_preds_list')) + def loss(self, + all_cls_scores_list, + all_bbox_preds_list, + gt_bboxes_list, + gt_labels_list, + img_metas, + gt_bboxes_ignore=None): + """"Loss function. + + Only outputs from the last feature level are used for computing + losses by default. + + Args: + all_cls_scores_list (list[Tensor]): Classification outputs + for each feature level. Each is a 4D-tensor with shape + [nb_dec, bs, num_query, cls_out_channels]. + all_bbox_preds_list (list[Tensor]): Sigmoid regression + outputs for each feature level. Each is a 4D-tensor with + normalized coordinate format (cx, cy, w, h) and shape + [nb_dec, bs, num_query, 4]. + gt_bboxes_list (list[Tensor]): Ground truth bboxes for each image + with shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels_list (list[Tensor]): Ground truth class indices for each + image with shape (num_gts, ). + img_metas (list[dict]): List of image meta information. + gt_bboxes_ignore (list[Tensor], optional): Bounding boxes + which can be ignored for each image. Default None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + # NOTE defaultly only the outputs from the last feature scale is used. + all_cls_scores = all_cls_scores_list[-1] + all_bbox_preds = all_bbox_preds_list[-1] + assert gt_bboxes_ignore is None, \ + 'Only supports for gt_bboxes_ignore setting to None.' + + num_dec_layers = len(all_cls_scores) + all_gt_bboxes_list = [gt_bboxes_list for _ in range(num_dec_layers)] + all_gt_labels_list = [gt_labels_list for _ in range(num_dec_layers)] + all_gt_bboxes_ignore_list = [ + gt_bboxes_ignore for _ in range(num_dec_layers) + ] + img_metas_list = [img_metas for _ in range(num_dec_layers)] + + losses_cls, losses_bbox, losses_iou = multi_apply( + self.loss_single, all_cls_scores, all_bbox_preds, + all_gt_bboxes_list, all_gt_labels_list, img_metas_list, + all_gt_bboxes_ignore_list) + + loss_dict = dict() + # loss from the last decoder layer + loss_dict['loss_cls'] = losses_cls[-1] + loss_dict['loss_bbox'] = losses_bbox[-1] + loss_dict['loss_iou'] = losses_iou[-1] + # loss from other decoder layers + num_dec_layer = 0 + for loss_cls_i, loss_bbox_i, loss_iou_i in zip(losses_cls[:-1], + losses_bbox[:-1], + losses_iou[:-1]): + loss_dict[f'd{num_dec_layer}.loss_cls'] = loss_cls_i + loss_dict[f'd{num_dec_layer}.loss_bbox'] = loss_bbox_i + loss_dict[f'd{num_dec_layer}.loss_iou'] = loss_iou_i + num_dec_layer += 1 + return loss_dict + + def loss_single(self, + cls_scores, + bbox_preds, + gt_bboxes_list, + gt_labels_list, + img_metas, + gt_bboxes_ignore_list=None): + """"Loss function for outputs from a single decoder layer of a single + feature level. + + Args: + cls_scores (Tensor): Box score logits from a single decoder layer + for all images. Shape [bs, num_query, cls_out_channels]. + bbox_preds (Tensor): Sigmoid outputs from a single decoder layer + for all images, with normalized coordinate (cx, cy, w, h) and + shape [bs, num_query, 4]. + gt_bboxes_list (list[Tensor]): Ground truth bboxes for each image + with shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels_list (list[Tensor]): Ground truth class indices for each + image with shape (num_gts, ). + img_metas (list[dict]): List of image meta information. + gt_bboxes_ignore_list (list[Tensor], optional): Bounding + boxes which can be ignored for each image. Default None. + + Returns: + dict[str, Tensor]: A dictionary of loss components for outputs from + a single decoder layer. + """ + num_imgs = cls_scores.size(0) + cls_scores_list = [cls_scores[i] for i in range(num_imgs)] + bbox_preds_list = [bbox_preds[i] for i in range(num_imgs)] + cls_reg_targets = self.get_targets(cls_scores_list, bbox_preds_list, + gt_bboxes_list, gt_labels_list, + img_metas, gt_bboxes_ignore_list) + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg) = cls_reg_targets + labels = torch.cat(labels_list, 0) + label_weights = torch.cat(label_weights_list, 0) + bbox_targets = torch.cat(bbox_targets_list, 0) + bbox_weights = torch.cat(bbox_weights_list, 0) + + # classification loss + cls_scores = cls_scores.reshape(-1, self.cls_out_channels) + # construct weighted avg_factor to match with the official DETR repo + cls_avg_factor = num_total_pos * 1.0 + \ + num_total_neg * self.bg_cls_weight + loss_cls = self.loss_cls( + cls_scores, labels, label_weights, avg_factor=cls_avg_factor) + + # Compute the average number of gt boxes accross all gpus, for + # normalization purposes + num_total_pos = loss_cls.new_tensor([num_total_pos]) + num_total_pos = torch.clamp(reduce_mean(num_total_pos), min=1).item() + + # construct factors used for rescale bboxes + factors = [] + for img_meta, bbox_pred in zip(img_metas, bbox_preds): + img_h, img_w, _ = img_meta['img_shape'] + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0).repeat( + bbox_pred.size(0), 1) + factors.append(factor) + factors = torch.cat(factors, 0) + + # DETR regress the relative position of boxes (cxcywh) in the image, + # thus the learning target is normalized by the image size. So here + # we need to re-scale them for calculating IoU loss + bbox_preds = bbox_preds.reshape(-1, 4) + bboxes = bbox_cxcywh_to_xyxy(bbox_preds) * factors + bboxes_gt = bbox_cxcywh_to_xyxy(bbox_targets) * factors + + # regression IoU loss, defaultly GIoU loss + loss_iou = self.loss_iou( + bboxes, bboxes_gt, bbox_weights, avg_factor=num_total_pos) + + # regression L1 loss + loss_bbox = self.loss_bbox( + bbox_preds, bbox_targets, bbox_weights, avg_factor=num_total_pos) + return loss_cls, loss_bbox, loss_iou + + def get_targets(self, + cls_scores_list, + bbox_preds_list, + gt_bboxes_list, + gt_labels_list, + img_metas, + gt_bboxes_ignore_list=None): + """"Compute regression and classification targets for a batch image. + + Outputs from a single decoder layer of a single feature level are used. + + Args: + cls_scores_list (list[Tensor]): Box score logits from a single + decoder layer for each image with shape [num_query, + cls_out_channels]. + bbox_preds_list (list[Tensor]): Sigmoid outputs from a single + decoder layer for each image, with normalized coordinate + (cx, cy, w, h) and shape [num_query, 4]. + gt_bboxes_list (list[Tensor]): Ground truth bboxes for each image + with shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels_list (list[Tensor]): Ground truth class indices for each + image with shape (num_gts, ). + img_metas (list[dict]): List of image meta information. + gt_bboxes_ignore_list (list[Tensor], optional): Bounding + boxes which can be ignored for each image. Default None. + + Returns: + tuple: a tuple containing the following targets. + + - labels_list (list[Tensor]): Labels for all images. + - label_weights_list (list[Tensor]): Label weights for all \ + images. + - bbox_targets_list (list[Tensor]): BBox targets for all \ + images. + - bbox_weights_list (list[Tensor]): BBox weights for all \ + images. + - num_total_pos (int): Number of positive samples in all \ + images. + - num_total_neg (int): Number of negative samples in all \ + images. + """ + assert gt_bboxes_ignore_list is None, \ + 'Only supports for gt_bboxes_ignore setting to None.' + num_imgs = len(cls_scores_list) + gt_bboxes_ignore_list = [ + gt_bboxes_ignore_list for _ in range(num_imgs) + ] + + (labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, pos_inds_list, neg_inds_list) = multi_apply( + self._get_target_single, cls_scores_list, bbox_preds_list, + gt_bboxes_list, gt_labels_list, img_metas, gt_bboxes_ignore_list) + num_total_pos = sum((inds.numel() for inds in pos_inds_list)) + num_total_neg = sum((inds.numel() for inds in neg_inds_list)) + return (labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, num_total_pos, num_total_neg) + + def _get_target_single(self, + cls_score, + bbox_pred, + gt_bboxes, + gt_labels, + img_meta, + gt_bboxes_ignore=None): + """"Compute regression and classification targets for one image. + + Outputs from a single decoder layer of a single feature level are used. + + Args: + cls_score (Tensor): Box score logits from a single decoder layer + for one image. Shape [num_query, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from a single decoder layer + for one image, with normalized coordinate (cx, cy, w, h) and + shape [num_query, 4]. + gt_bboxes (Tensor): Ground truth bboxes for one image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (Tensor): Ground truth class indices for one image + with shape (num_gts, ). + img_meta (dict): Meta information for one image. + gt_bboxes_ignore (Tensor, optional): Bounding boxes + which can be ignored. Default None. + + Returns: + tuple[Tensor]: a tuple containing the following for one image. + + - labels (Tensor): Labels of each image. + - label_weights (Tensor]): Label weights of each image. + - bbox_targets (Tensor): BBox targets of each image. + - bbox_weights (Tensor): BBox weights of each image. + - pos_inds (Tensor): Sampled positive indices for each image. + - neg_inds (Tensor): Sampled negative indices for each image. + """ + + num_bboxes = bbox_pred.size(0) + # assigner and sampler + assign_result = self.assigner.assign(bbox_pred, cls_score, gt_bboxes, + gt_labels, img_meta, + gt_bboxes_ignore) + sampling_result = self.sampler.sample(assign_result, bbox_pred, + gt_bboxes) + pos_inds = sampling_result.pos_inds + neg_inds = sampling_result.neg_inds + + # label targets + labels = gt_bboxes.new_full((num_bboxes, ), + self.num_classes, + dtype=torch.long) + labels[pos_inds] = gt_labels[sampling_result.pos_assigned_gt_inds] + label_weights = gt_bboxes.new_ones(num_bboxes) + + # bbox targets + bbox_targets = torch.zeros_like(bbox_pred) + bbox_weights = torch.zeros_like(bbox_pred) + bbox_weights[pos_inds] = 1.0 + img_h, img_w, _ = img_meta['img_shape'] + + # DETR regress the relative position of boxes (cxcywh) in the image. + # Thus the learning target should be normalized by the image size, also + # the box format should be converted from defaultly x1y1x2y2 to cxcywh. + factor = bbox_pred.new_tensor([img_w, img_h, img_w, + img_h]).unsqueeze(0) + pos_gt_bboxes_normalized = sampling_result.pos_gt_bboxes / factor + pos_gt_bboxes_targets = bbox_xyxy_to_cxcywh(pos_gt_bboxes_normalized) + bbox_targets[pos_inds] = pos_gt_bboxes_targets + return (labels, label_weights, bbox_targets, bbox_weights, pos_inds, + neg_inds) + + # over-write because img_metas are needed as inputs for bbox_head. + def forward_train(self, + x, + img_metas, + gt_bboxes, + gt_labels=None, + gt_bboxes_ignore=None, + proposal_cfg=None, + **kwargs): + """Forward function for training mode. + + Args: + x (list[Tensor]): Features from backbone. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes (Tensor): Ground truth bboxes of the image, + shape (num_gts, 4). + gt_labels (Tensor): Ground truth labels of each box, + shape (num_gts,). + gt_bboxes_ignore (Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + proposal_cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + assert proposal_cfg is None, '"proposal_cfg" must be None' + outs = self(x, img_metas) + if gt_labels is None: + loss_inputs = outs + (gt_bboxes, img_metas) + else: + loss_inputs = outs + (gt_bboxes, gt_labels, img_metas) + losses = self.loss(*loss_inputs, gt_bboxes_ignore=gt_bboxes_ignore) + return losses + + @force_fp32(apply_to=('all_cls_scores_list', 'all_bbox_preds_list')) + def get_bboxes(self, + all_cls_scores_list, + all_bbox_preds_list, + img_metas, + rescale=False): + """Transform network outputs for a batch into bbox predictions. + + Args: + all_cls_scores_list (list[Tensor]): Classification outputs + for each feature level. Each is a 4D-tensor with shape + [nb_dec, bs, num_query, cls_out_channels]. + all_bbox_preds_list (list[Tensor]): Sigmoid regression + outputs for each feature level. Each is a 4D-tensor with + normalized coordinate format (cx, cy, w, h) and shape + [nb_dec, bs, num_query, 4]. + img_metas (list[dict]): Meta information of each image. + rescale (bool, optional): If True, return boxes in original + image space. Defalut False. + + Returns: + list[list[Tensor, Tensor]]: Each item in result_list is 2-tuple. \ + The first item is an (n, 5) tensor, where the first 4 columns \ + are bounding box positions (tl_x, tl_y, br_x, br_y) and the \ + 5-th column is a score between 0 and 1. The second item is a \ + (n,) tensor where each item is the predicted class label of \ + the corresponding box. + """ + # NOTE defaultly only using outputs from the last feature level, + # and only the ouputs from the last decoder layer is used. + cls_scores = all_cls_scores_list[-1][-1] + bbox_preds = all_bbox_preds_list[-1][-1] + + result_list = [] + for img_id in range(len(img_metas)): + cls_score = cls_scores[img_id] + bbox_pred = bbox_preds[img_id] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self._get_bboxes_single(cls_score, bbox_pred, + img_shape, scale_factor, + rescale) + result_list.append(proposals) + return result_list + + def _get_bboxes_single(self, + cls_score, + bbox_pred, + img_shape, + scale_factor, + rescale=False): + """Transform outputs from the last decoder layer into bbox predictions + for each image. + + Args: + cls_score (Tensor): Box score logits from the last decoder layer + for each image. Shape [num_query, cls_out_channels]. + bbox_pred (Tensor): Sigmoid outputs from the last decoder layer + for each image, with coordinate format (cx, cy, w, h) and + shape [num_query, 4]. + img_shape (tuple[int]): Shape of input image, (height, width, 3). + scale_factor (ndarray, optional): Scale factor of the image arange + as (w_scale, h_scale, w_scale, h_scale). + rescale (bool, optional): If True, return boxes in original image + space. Default False. + + Returns: + tuple[Tensor]: Results of detected bboxes and labels. + + - det_bboxes: Predicted bboxes with shape [num_query, 5], \ + where the first 4 columns are bounding box positions \ + (tl_x, tl_y, br_x, br_y) and the 5-th column are scores \ + between 0 and 1. + - det_labels: Predicted labels of the corresponding box with \ + shape [num_query]. + """ + assert len(cls_score) == len(bbox_pred) + # exclude background + scores, det_labels = F.softmax(cls_score, dim=-1)[..., :-1].max(-1) + det_bboxes = bbox_cxcywh_to_xyxy(bbox_pred) + det_bboxes[:, 0::2] = det_bboxes[:, 0::2] * img_shape[1] + det_bboxes[:, 1::2] = det_bboxes[:, 1::2] * img_shape[0] + det_bboxes[:, 0::2].clamp_(min=0, max=img_shape[1]) + det_bboxes[:, 1::2].clamp_(min=0, max=img_shape[0]) + if rescale: + det_bboxes /= det_bboxes.new_tensor(scale_factor) + det_bboxes = torch.cat((det_bboxes, scores.unsqueeze(1)), -1) + return det_bboxes, det_labels diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/vfnet_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/vfnet_head.py new file mode 100644 index 00000000..7243bb62 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/vfnet_head.py @@ -0,0 +1,794 @@ +import numpy as np +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, Scale, bias_init_with_prob, normal_init +from mmcv.ops import DeformConv2d +from mmcv.runner import force_fp32 + +from mmdet.core import (bbox2distance, bbox_overlaps, build_anchor_generator, + build_assigner, build_sampler, distance2bbox, + multi_apply, multiclass_nms, reduce_mean) +from ..builder import HEADS, build_loss +from .atss_head import ATSSHead +from .fcos_head import FCOSHead + +INF = 1e8 + + +@HEADS.register_module() +class VFNetHead(ATSSHead, FCOSHead): + """Head of `VarifocalNet (VFNet): An IoU-aware Dense Object + Detector.`_. + + The VFNet predicts IoU-aware classification scores which mix the + object presence confidence and object localization accuracy as the + detection score. It is built on the FCOS architecture and uses ATSS + for defining positive/negative training examples. The VFNet is trained + with Varifocal Loss and empolys star-shaped deformable convolution to + extract features for a bbox. + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + regress_ranges (tuple[tuple[int, int]]): Regress range of multiple + level points. + center_sampling (bool): If true, use center sampling. Default: False. + center_sample_radius (float): Radius of center sampling. Default: 1.5. + sync_num_pos (bool): If true, synchronize the number of positive + examples across GPUs. Default: True + gradient_mul (float): The multiplier to gradients from bbox refinement + and recognition. Default: 0.1. + bbox_norm_type (str): The bbox normalization type, 'reg_denom' or + 'stride'. Default: reg_denom + loss_cls_fl (dict): Config of focal loss. + use_vfl (bool): If true, use varifocal loss for training. + Default: True. + loss_cls (dict): Config of varifocal loss. + loss_bbox (dict): Config of localization loss, GIoU Loss. + loss_bbox (dict): Config of localization refinement loss, GIoU Loss. + norm_cfg (dict): dictionary to construct and config norm layer. + Default: norm_cfg=dict(type='GN', num_groups=32, + requires_grad=True). + use_atss (bool): If true, use ATSS to define positive/negative + examples. Default: True. + anchor_generator (dict): Config of anchor generator for ATSS. + + Example: + >>> self = VFNetHead(11, 7) + >>> feats = [torch.rand(1, 7, s, s) for s in [4, 8, 16, 32, 64]] + >>> cls_score, bbox_pred, bbox_pred_refine= self.forward(feats) + >>> assert len(cls_score) == len(self.scales) + """ # noqa: E501 + + def __init__(self, + num_classes, + in_channels, + regress_ranges=((-1, 64), (64, 128), (128, 256), (256, 512), + (512, INF)), + center_sampling=False, + center_sample_radius=1.5, + sync_num_pos=True, + gradient_mul=0.1, + bbox_norm_type='reg_denom', + loss_cls_fl=dict( + type='FocalLoss', + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + loss_weight=1.0), + use_vfl=True, + loss_cls=dict( + type='VarifocalLoss', + use_sigmoid=True, + alpha=0.75, + gamma=2.0, + iou_weighted=True, + loss_weight=1.0), + loss_bbox=dict(type='GIoULoss', loss_weight=1.5), + loss_bbox_refine=dict(type='GIoULoss', loss_weight=2.0), + norm_cfg=dict(type='GN', num_groups=32, requires_grad=True), + use_atss=True, + anchor_generator=dict( + type='AnchorGenerator', + ratios=[1.0], + octave_base_scale=8, + scales_per_octave=1, + center_offset=0.0, + strides=[8, 16, 32, 64, 128]), + **kwargs): + # dcn base offsets, adapted from reppoints_head.py + self.num_dconv_points = 9 + self.dcn_kernel = int(np.sqrt(self.num_dconv_points)) + self.dcn_pad = int((self.dcn_kernel - 1) / 2) + dcn_base = np.arange(-self.dcn_pad, + self.dcn_pad + 1).astype(np.float64) + dcn_base_y = np.repeat(dcn_base, self.dcn_kernel) + dcn_base_x = np.tile(dcn_base, self.dcn_kernel) + dcn_base_offset = np.stack([dcn_base_y, dcn_base_x], axis=1).reshape( + (-1)) + self.dcn_base_offset = torch.tensor(dcn_base_offset).view(1, -1, 1, 1) + + super(FCOSHead, self).__init__( + num_classes, in_channels, norm_cfg=norm_cfg, **kwargs) + self.regress_ranges = regress_ranges + self.reg_denoms = [ + regress_range[-1] for regress_range in regress_ranges + ] + self.reg_denoms[-1] = self.reg_denoms[-2] * 2 + self.center_sampling = center_sampling + self.center_sample_radius = center_sample_radius + self.sync_num_pos = sync_num_pos + self.bbox_norm_type = bbox_norm_type + self.gradient_mul = gradient_mul + self.use_vfl = use_vfl + if self.use_vfl: + self.loss_cls = build_loss(loss_cls) + else: + self.loss_cls = build_loss(loss_cls_fl) + self.loss_bbox = build_loss(loss_bbox) + self.loss_bbox_refine = build_loss(loss_bbox_refine) + + # for getting ATSS targets + self.use_atss = use_atss + self.use_sigmoid_cls = loss_cls.get('use_sigmoid', False) + self.anchor_generator = build_anchor_generator(anchor_generator) + self.anchor_center_offset = anchor_generator['center_offset'] + self.num_anchors = self.anchor_generator.num_base_anchors[0] + self.sampling = False + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + + def _init_layers(self): + """Initialize layers of the head.""" + super(FCOSHead, self)._init_cls_convs() + super(FCOSHead, self)._init_reg_convs() + self.relu = nn.ReLU(inplace=True) + self.vfnet_reg_conv = ConvModule( + self.feat_channels, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + bias=self.conv_bias) + self.vfnet_reg = nn.Conv2d(self.feat_channels, 4, 3, padding=1) + self.scales = nn.ModuleList([Scale(1.0) for _ in self.strides]) + + self.vfnet_reg_refine_dconv = DeformConv2d( + self.feat_channels, + self.feat_channels, + self.dcn_kernel, + 1, + padding=self.dcn_pad) + self.vfnet_reg_refine = nn.Conv2d(self.feat_channels, 4, 3, padding=1) + self.scales_refine = nn.ModuleList([Scale(1.0) for _ in self.strides]) + + self.vfnet_cls_dconv = DeformConv2d( + self.feat_channels, + self.feat_channels, + self.dcn_kernel, + 1, + padding=self.dcn_pad) + self.vfnet_cls = nn.Conv2d( + self.feat_channels, self.cls_out_channels, 3, padding=1) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.cls_convs: + if isinstance(m.conv, nn.Conv2d): + normal_init(m.conv, std=0.01) + for m in self.reg_convs: + if isinstance(m.conv, nn.Conv2d): + normal_init(m.conv, std=0.01) + normal_init(self.vfnet_reg_conv.conv, std=0.01) + normal_init(self.vfnet_reg, std=0.01) + normal_init(self.vfnet_reg_refine_dconv, std=0.01) + normal_init(self.vfnet_reg_refine, std=0.01) + normal_init(self.vfnet_cls_dconv, std=0.01) + bias_cls = bias_init_with_prob(0.01) + normal_init(self.vfnet_cls, std=0.01, bias=bias_cls) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple: + cls_scores (list[Tensor]): Box iou-aware scores for each scale + level, each is a 4D-tensor, the channel number is + num_points * num_classes. + bbox_preds (list[Tensor]): Box offsets for each + scale level, each is a 4D-tensor, the channel number is + num_points * 4. + bbox_preds_refine (list[Tensor]): Refined Box offsets for + each scale level, each is a 4D-tensor, the channel + number is num_points * 4. + """ + return multi_apply(self.forward_single, feats, self.scales, + self.scales_refine, self.strides, self.reg_denoms) + + def forward_single(self, x, scale, scale_refine, stride, reg_denom): + """Forward features of a single scale level. + + Args: + x (Tensor): FPN feature maps of the specified stride. + scale (:obj: `mmcv.cnn.Scale`): Learnable scale module to resize + the bbox prediction. + scale_refine (:obj: `mmcv.cnn.Scale`): Learnable scale module to + resize the refined bbox prediction. + stride (int): The corresponding stride for feature maps, + used to normalize the bbox prediction when + bbox_norm_type = 'stride'. + reg_denom (int): The corresponding regression range for feature + maps, only used to normalize the bbox prediction when + bbox_norm_type = 'reg_denom'. + + Returns: + tuple: iou-aware cls scores for each box, bbox predictions and + refined bbox predictions of input feature maps. + """ + cls_feat = x + reg_feat = x + + for cls_layer in self.cls_convs: + cls_feat = cls_layer(cls_feat) + + for reg_layer in self.reg_convs: + reg_feat = reg_layer(reg_feat) + + # predict the bbox_pred of different level + reg_feat_init = self.vfnet_reg_conv(reg_feat) + if self.bbox_norm_type == 'reg_denom': + bbox_pred = scale( + self.vfnet_reg(reg_feat_init)).float().exp() * reg_denom + elif self.bbox_norm_type == 'stride': + bbox_pred = scale( + self.vfnet_reg(reg_feat_init)).float().exp() * stride + else: + raise NotImplementedError + + # compute star deformable convolution offsets + # converting dcn_offset to reg_feat.dtype thus VFNet can be + # trained with FP16 + dcn_offset = self.star_dcn_offset(bbox_pred, self.gradient_mul, + stride).to(reg_feat.dtype) + + # refine the bbox_pred + reg_feat = self.relu(self.vfnet_reg_refine_dconv(reg_feat, dcn_offset)) + bbox_pred_refine = scale_refine( + self.vfnet_reg_refine(reg_feat)).float().exp() + bbox_pred_refine = bbox_pred_refine * bbox_pred.detach() + + # predict the iou-aware cls score + cls_feat = self.relu(self.vfnet_cls_dconv(cls_feat, dcn_offset)) + cls_score = self.vfnet_cls(cls_feat) + + return cls_score, bbox_pred, bbox_pred_refine + + def star_dcn_offset(self, bbox_pred, gradient_mul, stride): + """Compute the star deformable conv offsets. + + Args: + bbox_pred (Tensor): Predicted bbox distance offsets (l, r, t, b). + gradient_mul (float): Gradient multiplier. + stride (int): The corresponding stride for feature maps, + used to project the bbox onto the feature map. + + Returns: + dcn_offsets (Tensor): The offsets for deformable convolution. + """ + dcn_base_offset = self.dcn_base_offset.type_as(bbox_pred) + bbox_pred_grad_mul = (1 - gradient_mul) * bbox_pred.detach() + \ + gradient_mul * bbox_pred + # map to the feature map scale + bbox_pred_grad_mul = bbox_pred_grad_mul / stride + N, C, H, W = bbox_pred.size() + + x1 = bbox_pred_grad_mul[:, 0, :, :] + y1 = bbox_pred_grad_mul[:, 1, :, :] + x2 = bbox_pred_grad_mul[:, 2, :, :] + y2 = bbox_pred_grad_mul[:, 3, :, :] + bbox_pred_grad_mul_offset = bbox_pred.new_zeros( + N, 2 * self.num_dconv_points, H, W) + bbox_pred_grad_mul_offset[:, 0, :, :] = -1.0 * y1 # -y1 + bbox_pred_grad_mul_offset[:, 1, :, :] = -1.0 * x1 # -x1 + bbox_pred_grad_mul_offset[:, 2, :, :] = -1.0 * y1 # -y1 + bbox_pred_grad_mul_offset[:, 4, :, :] = -1.0 * y1 # -y1 + bbox_pred_grad_mul_offset[:, 5, :, :] = x2 # x2 + bbox_pred_grad_mul_offset[:, 7, :, :] = -1.0 * x1 # -x1 + bbox_pred_grad_mul_offset[:, 11, :, :] = x2 # x2 + bbox_pred_grad_mul_offset[:, 12, :, :] = y2 # y2 + bbox_pred_grad_mul_offset[:, 13, :, :] = -1.0 * x1 # -x1 + bbox_pred_grad_mul_offset[:, 14, :, :] = y2 # y2 + bbox_pred_grad_mul_offset[:, 16, :, :] = y2 # y2 + bbox_pred_grad_mul_offset[:, 17, :, :] = x2 # x2 + dcn_offset = bbox_pred_grad_mul_offset - dcn_base_offset + + return dcn_offset + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'bbox_preds_refine')) + def loss(self, + cls_scores, + bbox_preds, + bbox_preds_refine, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute loss of the head. + + Args: + cls_scores (list[Tensor]): Box iou-aware scores for each scale + level, each is a 4D-tensor, the channel number is + num_points * num_classes. + bbox_preds (list[Tensor]): Box offsets for each + scale level, each is a 4D-tensor, the channel number is + num_points * 4. + bbox_preds_refine (list[Tensor]): Refined Box offsets for + each scale level, each is a 4D-tensor, the channel + number is num_points * 4. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + Default: None. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + assert len(cls_scores) == len(bbox_preds) == len(bbox_preds_refine) + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + all_level_points = self.get_points(featmap_sizes, bbox_preds[0].dtype, + bbox_preds[0].device) + labels, label_weights, bbox_targets, bbox_weights = self.get_targets( + cls_scores, all_level_points, gt_bboxes, gt_labels, img_metas, + gt_bboxes_ignore) + + num_imgs = cls_scores[0].size(0) + # flatten cls_scores, bbox_preds and bbox_preds_refine + flatten_cls_scores = [ + cls_score.permute(0, 2, 3, + 1).reshape(-1, + self.cls_out_channels).contiguous() + for cls_score in cls_scores + ] + flatten_bbox_preds = [ + bbox_pred.permute(0, 2, 3, 1).reshape(-1, 4).contiguous() + for bbox_pred in bbox_preds + ] + flatten_bbox_preds_refine = [ + bbox_pred_refine.permute(0, 2, 3, 1).reshape(-1, 4).contiguous() + for bbox_pred_refine in bbox_preds_refine + ] + flatten_cls_scores = torch.cat(flatten_cls_scores) + flatten_bbox_preds = torch.cat(flatten_bbox_preds) + flatten_bbox_preds_refine = torch.cat(flatten_bbox_preds_refine) + flatten_labels = torch.cat(labels) + flatten_bbox_targets = torch.cat(bbox_targets) + # repeat points to align with bbox_preds + flatten_points = torch.cat( + [points.repeat(num_imgs, 1) for points in all_level_points]) + + # FG cat_id: [0, num_classes - 1], BG cat_id: num_classes + bg_class_ind = self.num_classes + pos_inds = torch.where( + ((flatten_labels >= 0) & (flatten_labels < bg_class_ind)) > 0)[0] + num_pos = len(pos_inds) + + pos_bbox_preds = flatten_bbox_preds[pos_inds] + pos_bbox_preds_refine = flatten_bbox_preds_refine[pos_inds] + pos_labels = flatten_labels[pos_inds] + + # sync num_pos across all gpus + if self.sync_num_pos: + num_pos_avg_per_gpu = reduce_mean( + pos_inds.new_tensor(num_pos).float()).item() + num_pos_avg_per_gpu = max(num_pos_avg_per_gpu, 1.0) + else: + num_pos_avg_per_gpu = num_pos + + if num_pos > 0: + pos_bbox_targets = flatten_bbox_targets[pos_inds] + pos_points = flatten_points[pos_inds] + + pos_decoded_bbox_preds = distance2bbox(pos_points, pos_bbox_preds) + pos_decoded_target_preds = distance2bbox(pos_points, + pos_bbox_targets) + iou_targets_ini = bbox_overlaps( + pos_decoded_bbox_preds, + pos_decoded_target_preds.detach(), + is_aligned=True).clamp(min=1e-6) + bbox_weights_ini = iou_targets_ini.clone().detach() + iou_targets_ini_avg_per_gpu = reduce_mean( + bbox_weights_ini.sum()).item() + bbox_avg_factor_ini = max(iou_targets_ini_avg_per_gpu, 1.0) + loss_bbox = self.loss_bbox( + pos_decoded_bbox_preds, + pos_decoded_target_preds.detach(), + weight=bbox_weights_ini, + avg_factor=bbox_avg_factor_ini) + + pos_decoded_bbox_preds_refine = \ + distance2bbox(pos_points, pos_bbox_preds_refine) + iou_targets_rf = bbox_overlaps( + pos_decoded_bbox_preds_refine, + pos_decoded_target_preds.detach(), + is_aligned=True).clamp(min=1e-6) + bbox_weights_rf = iou_targets_rf.clone().detach() + iou_targets_rf_avg_per_gpu = reduce_mean( + bbox_weights_rf.sum()).item() + bbox_avg_factor_rf = max(iou_targets_rf_avg_per_gpu, 1.0) + loss_bbox_refine = self.loss_bbox_refine( + pos_decoded_bbox_preds_refine, + pos_decoded_target_preds.detach(), + weight=bbox_weights_rf, + avg_factor=bbox_avg_factor_rf) + + # build IoU-aware cls_score targets + if self.use_vfl: + pos_ious = iou_targets_rf.clone().detach() + cls_iou_targets = torch.zeros_like(flatten_cls_scores) + cls_iou_targets[pos_inds, pos_labels] = pos_ious + else: + loss_bbox = pos_bbox_preds.sum() * 0 + loss_bbox_refine = pos_bbox_preds_refine.sum() * 0 + if self.use_vfl: + cls_iou_targets = torch.zeros_like(flatten_cls_scores) + + if self.use_vfl: + loss_cls = self.loss_cls( + flatten_cls_scores, + cls_iou_targets, + avg_factor=num_pos_avg_per_gpu) + else: + loss_cls = self.loss_cls( + flatten_cls_scores, + flatten_labels, + weight=label_weights, + avg_factor=num_pos_avg_per_gpu) + + return dict( + loss_cls=loss_cls, + loss_bbox=loss_bbox, + loss_bbox_rf=loss_bbox_refine) + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'bbox_preds_refine')) + def get_bboxes(self, + cls_scores, + bbox_preds, + bbox_preds_refine, + img_metas, + cfg=None, + rescale=None, + with_nms=True): + """Transform network outputs for a batch into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box iou-aware scores for each scale + level with shape (N, num_points * num_classes, H, W). + bbox_preds (list[Tensor]): Box offsets for each scale + level with shape (N, num_points * 4, H, W). + bbox_preds_refine (list[Tensor]): Refined Box offsets for + each scale level with shape (N, num_points * 4, H, W). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used. Default: None. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before returning boxes. + Default: True. + + Returns: + list[tuple[Tensor, Tensor]]: Each item in result_list is 2-tuple. + The first item is an (n, 5) tensor, where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. The second item is a + (n,) tensor where each item is the predicted class label of + the corresponding box. + """ + assert len(cls_scores) == len(bbox_preds) == len(bbox_preds_refine) + num_levels = len(cls_scores) + + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + mlvl_points = self.get_points(featmap_sizes, bbox_preds[0].dtype, + bbox_preds[0].device) + result_list = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds_refine[i][img_id].detach() + for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + det_bboxes = self._get_bboxes_single(cls_score_list, + bbox_pred_list, mlvl_points, + img_shape, scale_factor, cfg, + rescale, with_nms) + result_list.append(det_bboxes) + return result_list + + def _get_bboxes_single(self, + cls_scores, + bbox_preds, + mlvl_points, + img_shape, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into bbox predictions. + + Args: + cls_scores (list[Tensor]): Box iou-aware scores for a single scale + level with shape (num_points * num_classes, H, W). + bbox_preds (list[Tensor]): Box offsets for a single scale + level with shape (num_points * 4, H, W). + mlvl_points (list[Tensor]): Box reference for a single scale level + with shape (num_total_points, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arrange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before returning boxes. + Default: True. + + Returns: + tuple(Tensor): + det_bboxes (Tensor): BBox predictions in shape (n, 5), where + the first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score + between 0 and 1. + det_labels (Tensor): A (n,) tensor where each item is the + predicted class label of the corresponding box. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_scores) == len(bbox_preds) == len(mlvl_points) + mlvl_bboxes = [] + mlvl_scores = [] + for cls_score, bbox_pred, points in zip(cls_scores, bbox_preds, + mlvl_points): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + scores = cls_score.permute(1, 2, 0).reshape( + -1, self.cls_out_channels).contiguous().sigmoid() + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4).contiguous() + + nms_pre = cfg.get('nms_pre', -1) + if 0 < nms_pre < scores.shape[0]: + max_scores, _ = scores.max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + points = points[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + bboxes = distance2bbox(points, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + if with_nms: + det_bboxes, det_labels = multiclass_nms(mlvl_bboxes, mlvl_scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + return det_bboxes, det_labels + else: + return mlvl_bboxes, mlvl_scores + + def _get_points_single(self, + featmap_size, + stride, + dtype, + device, + flatten=False): + """Get points according to feature map sizes.""" + h, w = featmap_size + x_range = torch.arange( + 0, w * stride, stride, dtype=dtype, device=device) + y_range = torch.arange( + 0, h * stride, stride, dtype=dtype, device=device) + y, x = torch.meshgrid(y_range, x_range) + # to be compatible with anchor points in ATSS + if self.use_atss: + points = torch.stack( + (x.reshape(-1), y.reshape(-1)), dim=-1) + \ + stride * self.anchor_center_offset + else: + points = torch.stack( + (x.reshape(-1), y.reshape(-1)), dim=-1) + stride // 2 + return points + + def get_targets(self, cls_scores, mlvl_points, gt_bboxes, gt_labels, + img_metas, gt_bboxes_ignore): + """A wrapper for computing ATSS and FCOS targets for points in multiple + images. + + Args: + cls_scores (list[Tensor]): Box iou-aware scores for each scale + level with shape (N, num_points * num_classes, H, W). + mlvl_points (list[Tensor]): Points of each fpn level, each has + shape (num_points, 2). + gt_bboxes (list[Tensor]): Ground truth bboxes of each image, + each has shape (num_gt, 4). + gt_labels (list[Tensor]): Ground truth labels of each box, + each has shape (num_gt,). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). + + Returns: + tuple: + labels_list (list[Tensor]): Labels of each level. + label_weights (Tensor/None): Label weights of all levels. + bbox_targets_list (list[Tensor]): Regression targets of each + level, (l, t, r, b). + bbox_weights (Tensor/None): Bbox weights of all levels. + """ + if self.use_atss: + return self.get_atss_targets(cls_scores, mlvl_points, gt_bboxes, + gt_labels, img_metas, + gt_bboxes_ignore) + else: + self.norm_on_bbox = False + return self.get_fcos_targets(mlvl_points, gt_bboxes, gt_labels) + + def _get_target_single(self, *args, **kwargs): + """Avoid ambiguity in multiple inheritance.""" + if self.use_atss: + return ATSSHead._get_target_single(self, *args, **kwargs) + else: + return FCOSHead._get_target_single(self, *args, **kwargs) + + def get_fcos_targets(self, points, gt_bboxes_list, gt_labels_list): + """Compute FCOS regression and classification targets for points in + multiple images. + + Args: + points (list[Tensor]): Points of each fpn level, each has shape + (num_points, 2). + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image, + each has shape (num_gt, 4). + gt_labels_list (list[Tensor]): Ground truth labels of each box, + each has shape (num_gt,). + + Returns: + tuple: + labels (list[Tensor]): Labels of each level. + label_weights: None, to be compatible with ATSS targets. + bbox_targets (list[Tensor]): BBox targets of each level. + bbox_weights: None, to be compatible with ATSS targets. + """ + labels, bbox_targets = FCOSHead.get_targets(self, points, + gt_bboxes_list, + gt_labels_list) + label_weights = None + bbox_weights = None + return labels, label_weights, bbox_targets, bbox_weights + + def get_atss_targets(self, + cls_scores, + mlvl_points, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """A wrapper for computing ATSS targets for points in multiple images. + + Args: + cls_scores (list[Tensor]): Box iou-aware scores for each scale + level with shape (N, num_points * num_classes, H, W). + mlvl_points (list[Tensor]): Points of each fpn level, each has + shape (num_points, 2). + gt_bboxes (list[Tensor]): Ground truth bboxes of each image, + each has shape (num_gt, 4). + gt_labels (list[Tensor]): Ground truth labels of each box, + each has shape (num_gt,). + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | Tensor): Ground truth bboxes to be + ignored, shape (num_ignored_gts, 4). Default: None. + + Returns: + tuple: + labels_list (list[Tensor]): Labels of each level. + label_weights (Tensor): Label weights of all levels. + bbox_targets_list (list[Tensor]): Regression targets of each + level, (l, t, r, b). + bbox_weights (Tensor): Bbox weights of all levels. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + + cls_reg_targets = ATSSHead.get_targets( + self, + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels, + unmap_outputs=True) + if cls_reg_targets is None: + return None + + (anchor_list, labels_list, label_weights_list, bbox_targets_list, + bbox_weights_list, num_total_pos, num_total_neg) = cls_reg_targets + + bbox_targets_list = [ + bbox_targets.reshape(-1, 4) for bbox_targets in bbox_targets_list + ] + + num_imgs = len(img_metas) + # transform bbox_targets (x1, y1, x2, y2) into (l, t, r, b) format + bbox_targets_list = self.transform_bbox_targets( + bbox_targets_list, mlvl_points, num_imgs) + + labels_list = [labels.reshape(-1) for labels in labels_list] + label_weights_list = [ + label_weights.reshape(-1) for label_weights in label_weights_list + ] + bbox_weights_list = [ + bbox_weights.reshape(-1) for bbox_weights in bbox_weights_list + ] + label_weights = torch.cat(label_weights_list) + bbox_weights = torch.cat(bbox_weights_list) + return labels_list, label_weights, bbox_targets_list, bbox_weights + + def transform_bbox_targets(self, decoded_bboxes, mlvl_points, num_imgs): + """Transform bbox_targets (x1, y1, x2, y2) into (l, t, r, b) format. + + Args: + decoded_bboxes (list[Tensor]): Regression targets of each level, + in the form of (x1, y1, x2, y2). + mlvl_points (list[Tensor]): Points of each fpn level, each has + shape (num_points, 2). + num_imgs (int): the number of images in a batch. + + Returns: + bbox_targets (list[Tensor]): Regression targets of each level in + the form of (l, t, r, b). + """ + # TODO: Re-implemented in Class PointCoder + assert len(decoded_bboxes) == len(mlvl_points) + num_levels = len(decoded_bboxes) + mlvl_points = [points.repeat(num_imgs, 1) for points in mlvl_points] + bbox_targets = [] + for i in range(num_levels): + bbox_target = bbox2distance(mlvl_points[i], decoded_bboxes[i]) + bbox_targets.append(bbox_target) + + return bbox_targets + + def _load_from_state_dict(self, state_dict, prefix, local_metadata, strict, + missing_keys, unexpected_keys, error_msgs): + """Override the method in the parent class to avoid changing para's + name.""" + pass diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolact_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolact_head.py new file mode 100644 index 00000000..aa9229dc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolact_head.py @@ -0,0 +1,942 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, xavier_init +from mmcv.runner import force_fp32 + +from mmdet.core import build_sampler, fast_nms, images_to_levels, multi_apply +from ..builder import HEADS, build_loss +from .anchor_head import AnchorHead + + +@HEADS.register_module() +class YOLACTHead(AnchorHead): + """YOLACT box head used in https://arxiv.org/abs/1904.02689. + + Note that YOLACT head is a light version of RetinaNet head. + Four differences are described as follows: + + 1. YOLACT box head has three-times fewer anchors. + 2. YOLACT box head shares the convs for box and cls branches. + 3. YOLACT box head uses OHEM instead of Focal loss. + 4. YOLACT box head predicts a set of mask coefficients for each box. + + Args: + num_classes (int): Number of categories excluding the background + category. + in_channels (int): Number of channels in the input feature map. + anchor_generator (dict): Config dict for anchor generator + loss_cls (dict): Config of classification loss. + loss_bbox (dict): Config of localization loss. + num_head_convs (int): Number of the conv layers shared by + box and cls branches. + num_protos (int): Number of the mask coefficients. + use_ohem (bool): If true, ``loss_single_OHEM`` will be used for + cls loss calculation. If false, ``loss_single`` will be used. + conv_cfg (dict): Dictionary to construct and config conv layer. + norm_cfg (dict): Dictionary to construct and config norm layer. + """ + + def __init__(self, + num_classes, + in_channels, + anchor_generator=dict( + type='AnchorGenerator', + octave_base_scale=3, + scales_per_octave=1, + ratios=[0.5, 1.0, 2.0], + strides=[8, 16, 32, 64, 128]), + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + reduction='none', + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1.5), + num_head_convs=1, + num_protos=32, + use_ohem=True, + conv_cfg=None, + norm_cfg=None, + **kwargs): + self.num_head_convs = num_head_convs + self.num_protos = num_protos + self.use_ohem = use_ohem + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + super(YOLACTHead, self).__init__( + num_classes, + in_channels, + loss_cls=loss_cls, + loss_bbox=loss_bbox, + anchor_generator=anchor_generator, + **kwargs) + if self.use_ohem: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + self.sampling = False + + def _init_layers(self): + """Initialize layers of the head.""" + self.relu = nn.ReLU(inplace=True) + self.head_convs = nn.ModuleList() + for i in range(self.num_head_convs): + chn = self.in_channels if i == 0 else self.feat_channels + self.head_convs.append( + ConvModule( + chn, + self.feat_channels, + 3, + stride=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.conv_cls = nn.Conv2d( + self.feat_channels, + self.num_anchors * self.cls_out_channels, + 3, + padding=1) + self.conv_reg = nn.Conv2d( + self.feat_channels, self.num_anchors * 4, 3, padding=1) + self.conv_coeff = nn.Conv2d( + self.feat_channels, + self.num_anchors * self.num_protos, + 3, + padding=1) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.head_convs: + xavier_init(m.conv, distribution='uniform', bias=0) + xavier_init(self.conv_cls, distribution='uniform', bias=0) + xavier_init(self.conv_reg, distribution='uniform', bias=0) + xavier_init(self.conv_coeff, distribution='uniform', bias=0) + + def forward_single(self, x): + """Forward feature of a single scale level. + + Args: + x (Tensor): Features of a single scale level. + + Returns: + tuple: + cls_score (Tensor): Cls scores for a single scale level \ + the channels number is num_anchors * num_classes. + bbox_pred (Tensor): Box energies / deltas for a single scale \ + level, the channels number is num_anchors * 4. + coeff_pred (Tensor): Mask coefficients for a single scale \ + level, the channels number is num_anchors * num_protos. + """ + for head_conv in self.head_convs: + x = head_conv(x) + cls_score = self.conv_cls(x) + bbox_pred = self.conv_reg(x) + coeff_pred = self.conv_coeff(x).tanh() + return cls_score, bbox_pred, coeff_pred + + @force_fp32(apply_to=('cls_scores', 'bbox_preds')) + def loss(self, + cls_scores, + bbox_preds, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """A combination of the func:``AnchorHead.loss`` and + func:``SSDHead.loss``. + + When ``self.use_ohem == True``, it functions like ``SSDHead.loss``, + otherwise, it follows ``AnchorHead.loss``. Besides, it additionally + returns ``sampling_results``. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + Has shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): Class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): Specify which bounding + boxes can be ignored when computing the loss. Default: None + + Returns: + tuple: + dict[str, Tensor]: A dictionary of loss components. + List[:obj:``SamplingResult``]: Sampler results for each image. + """ + featmap_sizes = [featmap.size()[-2:] for featmap in cls_scores] + assert len(featmap_sizes) == self.anchor_generator.num_levels + + device = cls_scores[0].device + + anchor_list, valid_flag_list = self.get_anchors( + featmap_sizes, img_metas, device=device) + label_channels = self.cls_out_channels if self.use_sigmoid_cls else 1 + cls_reg_targets = self.get_targets( + anchor_list, + valid_flag_list, + gt_bboxes, + img_metas, + gt_bboxes_ignore_list=gt_bboxes_ignore, + gt_labels_list=gt_labels, + label_channels=label_channels, + unmap_outputs=not self.use_ohem, + return_sampling_results=True) + if cls_reg_targets is None: + return None + (labels_list, label_weights_list, bbox_targets_list, bbox_weights_list, + num_total_pos, num_total_neg, sampling_results) = cls_reg_targets + + if self.use_ohem: + num_images = len(img_metas) + all_cls_scores = torch.cat([ + s.permute(0, 2, 3, 1).reshape( + num_images, -1, self.cls_out_channels) for s in cls_scores + ], 1) + all_labels = torch.cat(labels_list, -1).view(num_images, -1) + all_label_weights = torch.cat(label_weights_list, + -1).view(num_images, -1) + all_bbox_preds = torch.cat([ + b.permute(0, 2, 3, 1).reshape(num_images, -1, 4) + for b in bbox_preds + ], -2) + all_bbox_targets = torch.cat(bbox_targets_list, + -2).view(num_images, -1, 4) + all_bbox_weights = torch.cat(bbox_weights_list, + -2).view(num_images, -1, 4) + + # concat all level anchors to a single tensor + all_anchors = [] + for i in range(num_images): + all_anchors.append(torch.cat(anchor_list[i])) + + # check NaN and Inf + assert torch.isfinite(all_cls_scores).all().item(), \ + 'classification scores become infinite or NaN!' + assert torch.isfinite(all_bbox_preds).all().item(), \ + 'bbox predications become infinite or NaN!' + + losses_cls, losses_bbox = multi_apply( + self.loss_single_OHEM, + all_cls_scores, + all_bbox_preds, + all_anchors, + all_labels, + all_label_weights, + all_bbox_targets, + all_bbox_weights, + num_total_samples=num_total_pos) + else: + num_total_samples = ( + num_total_pos + + num_total_neg if self.sampling else num_total_pos) + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + # concat all level anchors and flags to a single tensor + concat_anchor_list = [] + for i in range(len(anchor_list)): + concat_anchor_list.append(torch.cat(anchor_list[i])) + all_anchor_list = images_to_levels(concat_anchor_list, + num_level_anchors) + losses_cls, losses_bbox = multi_apply( + self.loss_single, + cls_scores, + bbox_preds, + all_anchor_list, + labels_list, + label_weights_list, + bbox_targets_list, + bbox_weights_list, + num_total_samples=num_total_samples) + + return dict( + loss_cls=losses_cls, loss_bbox=losses_bbox), sampling_results + + def loss_single_OHEM(self, cls_score, bbox_pred, anchors, labels, + label_weights, bbox_targets, bbox_weights, + num_total_samples): + """"See func:``SSDHead.loss``.""" + loss_cls_all = self.loss_cls(cls_score, labels, label_weights) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + pos_inds = ((labels >= 0) & + (labels < self.num_classes)).nonzero().reshape(-1) + neg_inds = (labels == self.num_classes).nonzero().view(-1) + + num_pos_samples = pos_inds.size(0) + if num_pos_samples == 0: + num_neg_samples = neg_inds.size(0) + else: + num_neg_samples = self.train_cfg.neg_pos_ratio * num_pos_samples + if num_neg_samples > neg_inds.size(0): + num_neg_samples = neg_inds.size(0) + topk_loss_cls_neg, _ = loss_cls_all[neg_inds].topk(num_neg_samples) + loss_cls_pos = loss_cls_all[pos_inds].sum() + loss_cls_neg = topk_loss_cls_neg.sum() + loss_cls = (loss_cls_pos + loss_cls_neg) / num_total_samples + if self.reg_decoded_bbox: + # When the regression loss (e.g. `IouLoss`, `GIouLoss`) + # is applied directly on the decoded bounding boxes, it + # decodes the already encoded coordinates to absolute format. + bbox_pred = self.bbox_coder.decode(anchors, bbox_pred) + loss_bbox = self.loss_bbox( + bbox_pred, + bbox_targets, + bbox_weights, + avg_factor=num_total_samples) + return loss_cls[None], loss_bbox + + @force_fp32(apply_to=('cls_scores', 'bbox_preds', 'coeff_preds')) + def get_bboxes(self, + cls_scores, + bbox_preds, + coeff_preds, + img_metas, + cfg=None, + rescale=False): + """"Similiar to func:``AnchorHead.get_bboxes``, but additionally + processes coeff_preds. + + Args: + cls_scores (list[Tensor]): Box scores for each scale level + with shape (N, num_anchors * num_classes, H, W) + bbox_preds (list[Tensor]): Box energies / deltas for each scale + level with shape (N, num_anchors * 4, H, W) + coeff_preds (list[Tensor]): Mask coefficients for each scale + level with shape (N, num_anchors * num_protos, H, W) + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used + rescale (bool): If True, return boxes in original image space. + Default: False. + + Returns: + list[tuple[Tensor, Tensor, Tensor]]: Each item in result_list is + a 3-tuple. The first item is an (n, 5) tensor, where the + first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score + between 0 and 1. The second item is an (n,) tensor where each + item is the predicted class label of the corresponding box. + The third item is an (n, num_protos) tensor where each item + is the predicted mask coefficients of instance inside the + corresponding box. + """ + assert len(cls_scores) == len(bbox_preds) + num_levels = len(cls_scores) + + device = cls_scores[0].device + featmap_sizes = [cls_scores[i].shape[-2:] for i in range(num_levels)] + mlvl_anchors = self.anchor_generator.grid_anchors( + featmap_sizes, device=device) + + det_bboxes = [] + det_labels = [] + det_coeffs = [] + for img_id in range(len(img_metas)): + cls_score_list = [ + cls_scores[i][img_id].detach() for i in range(num_levels) + ] + bbox_pred_list = [ + bbox_preds[i][img_id].detach() for i in range(num_levels) + ] + coeff_pred_list = [ + coeff_preds[i][img_id].detach() for i in range(num_levels) + ] + img_shape = img_metas[img_id]['img_shape'] + scale_factor = img_metas[img_id]['scale_factor'] + bbox_res = self._get_bboxes_single(cls_score_list, bbox_pred_list, + coeff_pred_list, mlvl_anchors, + img_shape, scale_factor, cfg, + rescale) + det_bboxes.append(bbox_res[0]) + det_labels.append(bbox_res[1]) + det_coeffs.append(bbox_res[2]) + return det_bboxes, det_labels, det_coeffs + + def _get_bboxes_single(self, + cls_score_list, + bbox_pred_list, + coeff_preds_list, + mlvl_anchors, + img_shape, + scale_factor, + cfg, + rescale=False): + """"Similiar to func:``AnchorHead._get_bboxes_single``, but + additionally processes coeff_preds_list and uses fast NMS instead of + traditional NMS. + + Args: + cls_score_list (list[Tensor]): Box scores for a single scale level + Has shape (num_anchors * num_classes, H, W). + bbox_pred_list (list[Tensor]): Box energies / deltas for a single + scale level with shape (num_anchors * 4, H, W). + coeff_preds_list (list[Tensor]): Mask coefficients for a single + scale level with shape (num_anchors * num_protos, H, W). + mlvl_anchors (list[Tensor]): Box reference for a single scale level + with shape (num_total_anchors, 4). + img_shape (tuple[int]): Shape of the input image, + (height, width, 3). + scale_factor (ndarray): Scale factor of the image arange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + + Returns: + tuple[Tensor, Tensor, Tensor]: The first item is an (n, 5) tensor, + where the first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score between + 0 and 1. The second item is an (n,) tensor where each item is + the predicted class label of the corresponding box. The third + item is an (n, num_protos) tensor where each item is the + predicted mask coefficients of instance inside the + corresponding box. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(cls_score_list) == len(bbox_pred_list) == len(mlvl_anchors) + mlvl_bboxes = [] + mlvl_scores = [] + mlvl_coeffs = [] + for cls_score, bbox_pred, coeff_pred, anchors in \ + zip(cls_score_list, bbox_pred_list, + coeff_preds_list, mlvl_anchors): + assert cls_score.size()[-2:] == bbox_pred.size()[-2:] + cls_score = cls_score.permute(1, 2, + 0).reshape(-1, self.cls_out_channels) + if self.use_sigmoid_cls: + scores = cls_score.sigmoid() + else: + scores = cls_score.softmax(-1) + bbox_pred = bbox_pred.permute(1, 2, 0).reshape(-1, 4) + coeff_pred = coeff_pred.permute(1, 2, + 0).reshape(-1, self.num_protos) + nms_pre = cfg.get('nms_pre', -1) + if nms_pre > 0 and scores.shape[0] > nms_pre: + # Get maximum scores for foreground classes. + if self.use_sigmoid_cls: + max_scores, _ = scores.max(dim=1) + else: + # remind that we set FG labels to [0, num_class-1] + # since mmdet v2.0 + # BG cat_id: num_class + max_scores, _ = scores[:, :-1].max(dim=1) + _, topk_inds = max_scores.topk(nms_pre) + anchors = anchors[topk_inds, :] + bbox_pred = bbox_pred[topk_inds, :] + scores = scores[topk_inds, :] + coeff_pred = coeff_pred[topk_inds, :] + bboxes = self.bbox_coder.decode( + anchors, bbox_pred, max_shape=img_shape) + mlvl_bboxes.append(bboxes) + mlvl_scores.append(scores) + mlvl_coeffs.append(coeff_pred) + mlvl_bboxes = torch.cat(mlvl_bboxes) + if rescale: + mlvl_bboxes /= mlvl_bboxes.new_tensor(scale_factor) + mlvl_scores = torch.cat(mlvl_scores) + mlvl_coeffs = torch.cat(mlvl_coeffs) + if self.use_sigmoid_cls: + # Add a dummy background class to the backend when using sigmoid + # remind that we set FG labels to [0, num_class-1] since mmdet v2.0 + # BG cat_id: num_class + padding = mlvl_scores.new_zeros(mlvl_scores.shape[0], 1) + mlvl_scores = torch.cat([mlvl_scores, padding], dim=1) + det_bboxes, det_labels, det_coeffs = fast_nms(mlvl_bboxes, mlvl_scores, + mlvl_coeffs, + cfg.score_thr, + cfg.iou_thr, cfg.top_k, + cfg.max_per_img) + return det_bboxes, det_labels, det_coeffs + + +@HEADS.register_module() +class YOLACTSegmHead(nn.Module): + """YOLACT segmentation head used in https://arxiv.org/abs/1904.02689. + + Apply a semantic segmentation loss on feature space using layers that are + only evaluated during training to increase performance with no speed + penalty. + + Args: + in_channels (int): Number of channels in the input feature map. + num_classes (int): Number of categories excluding the background + category. + loss_segm (dict): Config of semantic segmentation loss. + """ + + def __init__(self, + num_classes, + in_channels=256, + loss_segm=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0)): + super(YOLACTSegmHead, self).__init__() + self.in_channels = in_channels + self.num_classes = num_classes + self.loss_segm = build_loss(loss_segm) + self._init_layers() + self.fp16_enabled = False + + def _init_layers(self): + """Initialize layers of the head.""" + self.segm_conv = nn.Conv2d( + self.in_channels, self.num_classes, kernel_size=1) + + def init_weights(self): + """Initialize weights of the head.""" + xavier_init(self.segm_conv, distribution='uniform') + + def forward(self, x): + """Forward feature from the upstream network. + + Args: + x (Tensor): Feature from the upstream network, which is + a 4D-tensor. + + Returns: + Tensor: Predicted semantic segmentation map with shape + (N, num_classes, H, W). + """ + return self.segm_conv(x) + + @force_fp32(apply_to=('segm_pred', )) + def loss(self, segm_pred, gt_masks, gt_labels): + """Compute loss of the head. + + Args: + segm_pred (list[Tensor]): Predicted semantic segmentation map + with shape (N, num_classes, H, W). + gt_masks (list[Tensor]): Ground truth masks for each image with + the same shape of the input image. + gt_labels (list[Tensor]): Class indices corresponding to each box. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + loss_segm = [] + num_imgs, num_classes, mask_h, mask_w = segm_pred.size() + for idx in range(num_imgs): + cur_segm_pred = segm_pred[idx] + cur_gt_masks = gt_masks[idx].float() + cur_gt_labels = gt_labels[idx] + segm_targets = self.get_targets(cur_segm_pred, cur_gt_masks, + cur_gt_labels) + if segm_targets is None: + loss = self.loss_segm(cur_segm_pred, + torch.zeros_like(cur_segm_pred), + torch.zeros_like(cur_segm_pred)) + else: + loss = self.loss_segm( + cur_segm_pred, + segm_targets, + avg_factor=num_imgs * mask_h * mask_w) + loss_segm.append(loss) + return dict(loss_segm=loss_segm) + + def get_targets(self, segm_pred, gt_masks, gt_labels): + """Compute semantic segmentation targets for each image. + + Args: + segm_pred (Tensor): Predicted semantic segmentation map + with shape (num_classes, H, W). + gt_masks (Tensor): Ground truth masks for each image with + the same shape of the input image. + gt_labels (Tensor): Class indices corresponding to each box. + + Returns: + Tensor: Semantic segmentation targets with shape + (num_classes, H, W). + """ + if gt_masks.size(0) == 0: + return None + num_classes, mask_h, mask_w = segm_pred.size() + with torch.no_grad(): + downsampled_masks = F.interpolate( + gt_masks.unsqueeze(0), (mask_h, mask_w), + mode='bilinear', + align_corners=False).squeeze(0) + downsampled_masks = downsampled_masks.gt(0.5).float() + segm_targets = torch.zeros_like(segm_pred, requires_grad=False) + for obj_idx in range(downsampled_masks.size(0)): + segm_targets[gt_labels[obj_idx] - 1] = torch.max( + segm_targets[gt_labels[obj_idx] - 1], + downsampled_masks[obj_idx]) + return segm_targets + + +@HEADS.register_module() +class YOLACTProtonet(nn.Module): + """YOLACT mask head used in https://arxiv.org/abs/1904.02689. + + This head outputs the mask prototypes for YOLACT. + + Args: + in_channels (int): Number of channels in the input feature map. + proto_channels (tuple[int]): Output channels of protonet convs. + proto_kernel_sizes (tuple[int]): Kernel sizes of protonet convs. + include_last_relu (Bool): If keep the last relu of protonet. + num_protos (int): Number of prototypes. + num_classes (int): Number of categories excluding the background + category. + loss_mask_weight (float): Reweight the mask loss by this factor. + max_masks_to_train (int): Maximum number of masks to train for + each image. + """ + + def __init__(self, + num_classes, + in_channels=256, + proto_channels=(256, 256, 256, None, 256, 32), + proto_kernel_sizes=(3, 3, 3, -2, 3, 1), + include_last_relu=True, + num_protos=32, + loss_mask_weight=1.0, + max_masks_to_train=100): + super(YOLACTProtonet, self).__init__() + self.in_channels = in_channels + self.proto_channels = proto_channels + self.proto_kernel_sizes = proto_kernel_sizes + self.include_last_relu = include_last_relu + self.protonet = self._init_layers() + + self.loss_mask_weight = loss_mask_weight + self.num_protos = num_protos + self.num_classes = num_classes + self.max_masks_to_train = max_masks_to_train + self.fp16_enabled = False + + def _init_layers(self): + """A helper function to take a config setting and turn it into a + network.""" + # Possible patterns: + # ( 256, 3) -> conv + # ( 256,-2) -> deconv + # (None,-2) -> bilinear interpolate + in_channels = self.in_channels + protonets = nn.ModuleList() + for num_channels, kernel_size in zip(self.proto_channels, + self.proto_kernel_sizes): + if kernel_size > 0: + layer = nn.Conv2d( + in_channels, + num_channels, + kernel_size, + padding=kernel_size // 2) + else: + if num_channels is None: + layer = InterpolateModule( + scale_factor=-kernel_size, + mode='bilinear', + align_corners=False) + else: + layer = nn.ConvTranspose2d( + in_channels, + num_channels, + -kernel_size, + padding=kernel_size // 2) + protonets.append(layer) + protonets.append(nn.ReLU(inplace=True)) + in_channels = num_channels if num_channels is not None \ + else in_channels + if not self.include_last_relu: + protonets = protonets[:-1] + return nn.Sequential(*protonets) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.protonet: + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform') + + def forward(self, x, coeff_pred, bboxes, img_meta, sampling_results=None): + """Forward feature from the upstream network to get prototypes and + linearly combine the prototypes, using masks coefficients, into + instance masks. Finally, crop the instance masks with given bboxes. + + Args: + x (Tensor): Feature from the upstream network, which is + a 4D-tensor. + coeff_pred (list[Tensor]): Mask coefficients for each scale + level with shape (N, num_anchors * num_protos, H, W). + bboxes (list[Tensor]): Box used for cropping with shape + (N, num_anchors * 4, H, W). During training, they are + ground truth boxes. During testing, they are predicted + boxes. + img_meta (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + sampling_results (List[:obj:``SamplingResult``]): Sampler results + for each image. + + Returns: + list[Tensor]: Predicted instance segmentation masks. + """ + prototypes = self.protonet(x) + prototypes = prototypes.permute(0, 2, 3, 1).contiguous() + + num_imgs = x.size(0) + # Training state + if self.training: + coeff_pred_list = [] + for coeff_pred_per_level in coeff_pred: + coeff_pred_per_level = \ + coeff_pred_per_level.permute(0, 2, 3, 1)\ + .reshape(num_imgs, -1, self.num_protos) + coeff_pred_list.append(coeff_pred_per_level) + coeff_pred = torch.cat(coeff_pred_list, dim=1) + + mask_pred_list = [] + for idx in range(num_imgs): + cur_prototypes = prototypes[idx] + cur_coeff_pred = coeff_pred[idx] + cur_bboxes = bboxes[idx] + cur_img_meta = img_meta[idx] + + # Testing state + if not self.training: + bboxes_for_cropping = cur_bboxes + else: + cur_sampling_results = sampling_results[idx] + pos_assigned_gt_inds = \ + cur_sampling_results.pos_assigned_gt_inds + bboxes_for_cropping = cur_bboxes[pos_assigned_gt_inds].clone() + pos_inds = cur_sampling_results.pos_inds + cur_coeff_pred = cur_coeff_pred[pos_inds] + + # Linearly combine the prototypes with the mask coefficients + mask_pred = cur_prototypes @ cur_coeff_pred.t() + mask_pred = torch.sigmoid(mask_pred) + + h, w = cur_img_meta['img_shape'][:2] + bboxes_for_cropping[:, 0] /= w + bboxes_for_cropping[:, 1] /= h + bboxes_for_cropping[:, 2] /= w + bboxes_for_cropping[:, 3] /= h + + mask_pred = self.crop(mask_pred, bboxes_for_cropping) + mask_pred = mask_pred.permute(2, 0, 1).contiguous() + mask_pred_list.append(mask_pred) + return mask_pred_list + + @force_fp32(apply_to=('mask_pred', )) + def loss(self, mask_pred, gt_masks, gt_bboxes, img_meta, sampling_results): + """Compute loss of the head. + + Args: + mask_pred (list[Tensor]): Predicted prototypes with shape + (num_classes, H, W). + gt_masks (list[Tensor]): Ground truth masks for each image with + the same shape of the input image. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + img_meta (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + sampling_results (List[:obj:``SamplingResult``]): Sampler results + for each image. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + loss_mask = [] + num_imgs = len(mask_pred) + total_pos = 0 + for idx in range(num_imgs): + cur_mask_pred = mask_pred[idx] + cur_gt_masks = gt_masks[idx].float() + cur_gt_bboxes = gt_bboxes[idx] + cur_img_meta = img_meta[idx] + cur_sampling_results = sampling_results[idx] + + pos_assigned_gt_inds = cur_sampling_results.pos_assigned_gt_inds + num_pos = pos_assigned_gt_inds.size(0) + # Since we're producing (near) full image masks, + # it'd take too much vram to backprop on every single mask. + # Thus we select only a subset. + if num_pos > self.max_masks_to_train: + perm = torch.randperm(num_pos) + select = perm[:self.max_masks_to_train] + cur_mask_pred = cur_mask_pred[select] + pos_assigned_gt_inds = pos_assigned_gt_inds[select] + num_pos = self.max_masks_to_train + total_pos += num_pos + + gt_bboxes_for_reweight = cur_gt_bboxes[pos_assigned_gt_inds] + + mask_targets = self.get_targets(cur_mask_pred, cur_gt_masks, + pos_assigned_gt_inds) + if num_pos == 0: + loss = cur_mask_pred.sum() * 0. + elif mask_targets is None: + loss = F.binary_cross_entropy(cur_mask_pred, + torch.zeros_like(cur_mask_pred), + torch.zeros_like(cur_mask_pred)) + else: + cur_mask_pred = torch.clamp(cur_mask_pred, 0, 1) + loss = F.binary_cross_entropy( + cur_mask_pred, mask_targets, + reduction='none') * self.loss_mask_weight + + h, w = cur_img_meta['img_shape'][:2] + gt_bboxes_width = (gt_bboxes_for_reweight[:, 2] - + gt_bboxes_for_reweight[:, 0]) / w + gt_bboxes_height = (gt_bboxes_for_reweight[:, 3] - + gt_bboxes_for_reweight[:, 1]) / h + loss = loss.mean(dim=(1, + 2)) / gt_bboxes_width / gt_bboxes_height + loss = torch.sum(loss) + loss_mask.append(loss) + + if total_pos == 0: + total_pos += 1 # avoid nan + loss_mask = [x / total_pos for x in loss_mask] + + return dict(loss_mask=loss_mask) + + def get_targets(self, mask_pred, gt_masks, pos_assigned_gt_inds): + """Compute instance segmentation targets for each image. + + Args: + mask_pred (Tensor): Predicted prototypes with shape + (num_classes, H, W). + gt_masks (Tensor): Ground truth masks for each image with + the same shape of the input image. + pos_assigned_gt_inds (Tensor): GT indices of the corresponding + positive samples. + Returns: + Tensor: Instance segmentation targets with shape + (num_instances, H, W). + """ + if gt_masks.size(0) == 0: + return None + mask_h, mask_w = mask_pred.shape[-2:] + gt_masks = F.interpolate( + gt_masks.unsqueeze(0), (mask_h, mask_w), + mode='bilinear', + align_corners=False).squeeze(0) + gt_masks = gt_masks.gt(0.5).float() + mask_targets = gt_masks[pos_assigned_gt_inds] + return mask_targets + + def get_seg_masks(self, mask_pred, label_pred, img_meta, rescale): + """Resize, binarize, and format the instance mask predictions. + + Args: + mask_pred (Tensor): shape (N, H, W). + label_pred (Tensor): shape (N, ). + img_meta (dict): Meta information of each image, e.g., + image size, scaling factor, etc. + rescale (bool): If rescale is False, then returned masks will + fit the scale of imgs[0]. + Returns: + list[ndarray]: Mask predictions grouped by their predicted classes. + """ + ori_shape = img_meta['ori_shape'] + scale_factor = img_meta['scale_factor'] + if rescale: + img_h, img_w = ori_shape[:2] + else: + img_h = np.round(ori_shape[0] * scale_factor[1]).astype(np.int32) + img_w = np.round(ori_shape[1] * scale_factor[0]).astype(np.int32) + + cls_segms = [[] for _ in range(self.num_classes)] + if mask_pred.size(0) == 0: + return cls_segms + + mask_pred = F.interpolate( + mask_pred.unsqueeze(0), (img_h, img_w), + mode='bilinear', + align_corners=False).squeeze(0) > 0.5 + mask_pred = mask_pred.cpu().numpy().astype(np.uint8) + + for m, l in zip(mask_pred, label_pred): + cls_segms[l].append(m) + return cls_segms + + def crop(self, masks, boxes, padding=1): + """Crop predicted masks by zeroing out everything not in the predicted + bbox. + + Args: + masks (Tensor): shape [H, W, N]. + boxes (Tensor): bbox coords in relative point form with + shape [N, 4]. + + Return: + Tensor: The cropped masks. + """ + h, w, n = masks.size() + x1, x2 = self.sanitize_coordinates( + boxes[:, 0], boxes[:, 2], w, padding, cast=False) + y1, y2 = self.sanitize_coordinates( + boxes[:, 1], boxes[:, 3], h, padding, cast=False) + + rows = torch.arange( + w, device=masks.device, dtype=x1.dtype).view(1, -1, + 1).expand(h, w, n) + cols = torch.arange( + h, device=masks.device, dtype=x1.dtype).view(-1, 1, + 1).expand(h, w, n) + + masks_left = rows >= x1.view(1, 1, -1) + masks_right = rows < x2.view(1, 1, -1) + masks_up = cols >= y1.view(1, 1, -1) + masks_down = cols < y2.view(1, 1, -1) + + crop_mask = masks_left * masks_right * masks_up * masks_down + + return masks * crop_mask.float() + + def sanitize_coordinates(self, x1, x2, img_size, padding=0, cast=True): + """Sanitizes the input coordinates so that x1 < x2, x1 != x2, x1 >= 0, + and x2 <= image_size. Also converts from relative to absolute + coordinates and casts the results to long tensors. + + Warning: this does things in-place behind the scenes so + copy if necessary. + + Args: + _x1 (Tensor): shape (N, ). + _x2 (Tensor): shape (N, ). + img_size (int): Size of the input image. + padding (int): x1 >= padding, x2 <= image_size-padding. + cast (bool): If cast is false, the result won't be cast to longs. + + Returns: + tuple: + x1 (Tensor): Sanitized _x1. + x2 (Tensor): Sanitized _x2. + """ + x1 = x1 * img_size + x2 = x2 * img_size + if cast: + x1 = x1.long() + x2 = x2.long() + x1 = torch.min(x1, x2) + x2 = torch.max(x1, x2) + x1 = torch.clamp(x1 - padding, min=0) + x2 = torch.clamp(x2 + padding, max=img_size) + return x1, x2 + + +class InterpolateModule(nn.Module): + """This is a module version of F.interpolate. + + Any arguments you give it just get passed along for the ride. + """ + + def __init__(self, *args, **kwargs): + super().__init__() + + self.args = args + self.kwargs = kwargs + + def forward(self, x): + """Forward features from the upstream network.""" + return F.interpolate(x, *self.args, **self.kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolo_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolo_head.py new file mode 100644 index 00000000..93d051e7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/dense_heads/yolo_head.py @@ -0,0 +1,536 @@ +# Copyright (c) 2019 Western Digital Corporation or its affiliates. + +import warnings + +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, normal_init +from mmcv.runner import force_fp32 + +from mmdet.core import (build_anchor_generator, build_assigner, + build_bbox_coder, build_sampler, images_to_levels, + multi_apply, multiclass_nms) +from ..builder import HEADS, build_loss +from .base_dense_head import BaseDenseHead +from .dense_test_mixins import BBoxTestMixin + + +@HEADS.register_module() +class YOLOV3Head(BaseDenseHead, BBoxTestMixin): + """YOLOV3Head Paper link: https://arxiv.org/abs/1804.02767. + + Args: + num_classes (int): The number of object classes (w/o background) + in_channels (List[int]): Number of input channels per scale. + out_channels (List[int]): The number of output channels per scale + before the final 1x1 layer. Default: (1024, 512, 256). + anchor_generator (dict): Config dict for anchor generator + bbox_coder (dict): Config of bounding box coder. + featmap_strides (List[int]): The stride of each scale. + Should be in descending order. Default: (32, 16, 8). + one_hot_smoother (float): Set a non-zero value to enable label-smooth + Default: 0. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Dictionary to construct and config norm layer. + Default: dict(type='BN', requires_grad=True) + act_cfg (dict): Config dict for activation layer. + Default: dict(type='LeakyReLU', negative_slope=0.1). + loss_cls (dict): Config of classification loss. + loss_conf (dict): Config of confidence loss. + loss_xy (dict): Config of xy coordinate loss. + loss_wh (dict): Config of wh coordinate loss. + train_cfg (dict): Training config of YOLOV3 head. Default: None. + test_cfg (dict): Testing config of YOLOV3 head. Default: None. + """ + + def __init__(self, + num_classes, + in_channels, + out_channels=(1024, 512, 256), + anchor_generator=dict( + type='YOLOAnchorGenerator', + base_sizes=[[(116, 90), (156, 198), (373, 326)], + [(30, 61), (62, 45), (59, 119)], + [(10, 13), (16, 30), (33, 23)]], + strides=[32, 16, 8]), + bbox_coder=dict(type='YOLOBBoxCoder'), + featmap_strides=[32, 16, 8], + one_hot_smoother=0., + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + act_cfg=dict(type='LeakyReLU', negative_slope=0.1), + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + loss_conf=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + loss_xy=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + loss_wh=dict(type='MSELoss', loss_weight=1.0), + train_cfg=None, + test_cfg=None): + super(YOLOV3Head, self).__init__() + # Check params + assert (len(in_channels) == len(out_channels) == len(featmap_strides)) + + self.num_classes = num_classes + self.in_channels = in_channels + self.out_channels = out_channels + self.featmap_strides = featmap_strides + self.train_cfg = train_cfg + self.test_cfg = test_cfg + if self.train_cfg: + self.assigner = build_assigner(self.train_cfg.assigner) + if hasattr(self.train_cfg, 'sampler'): + sampler_cfg = self.train_cfg.sampler + else: + sampler_cfg = dict(type='PseudoSampler') + self.sampler = build_sampler(sampler_cfg, context=self) + + self.one_hot_smoother = one_hot_smoother + + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + + self.bbox_coder = build_bbox_coder(bbox_coder) + self.anchor_generator = build_anchor_generator(anchor_generator) + + self.loss_cls = build_loss(loss_cls) + self.loss_conf = build_loss(loss_conf) + self.loss_xy = build_loss(loss_xy) + self.loss_wh = build_loss(loss_wh) + # usually the numbers of anchors for each level are the same + # except SSD detectors + self.num_anchors = self.anchor_generator.num_base_anchors[0] + assert len( + self.anchor_generator.num_base_anchors) == len(featmap_strides) + self._init_layers() + + @property + def num_levels(self): + return len(self.featmap_strides) + + @property + def num_attrib(self): + """int: number of attributes in pred_map, bboxes (4) + + objectness (1) + num_classes""" + + return 5 + self.num_classes + + def _init_layers(self): + self.convs_bridge = nn.ModuleList() + self.convs_pred = nn.ModuleList() + for i in range(self.num_levels): + conv_bridge = ConvModule( + self.in_channels[i], + self.out_channels[i], + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + conv_pred = nn.Conv2d(self.out_channels[i], + self.num_anchors * self.num_attrib, 1) + + self.convs_bridge.append(conv_bridge) + self.convs_pred.append(conv_pred) + + def init_weights(self): + """Initialize weights of the head.""" + for m in self.convs_pred: + normal_init(m, std=0.01) + + def forward(self, feats): + """Forward features from the upstream network. + + Args: + feats (tuple[Tensor]): Features from the upstream network, each is + a 4D-tensor. + + Returns: + tuple[Tensor]: A tuple of multi-level predication map, each is a + 4D-tensor of shape (batch_size, 5+num_classes, height, width). + """ + + assert len(feats) == self.num_levels + pred_maps = [] + for i in range(self.num_levels): + x = feats[i] + x = self.convs_bridge[i](x) + pred_map = self.convs_pred[i](x) + pred_maps.append(pred_map) + + return tuple(pred_maps), + + @force_fp32(apply_to=('pred_maps', )) + def get_bboxes(self, + pred_maps, + img_metas, + cfg=None, + rescale=False, + with_nms=True): + """Transform network output for a batch into bbox predictions. + + Args: + pred_maps (list[Tensor]): Raw predictions for a batch of images. + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. Default: None. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + list[tuple[Tensor, Tensor]]: Each item in result_list is 2-tuple. + The first item is an (n, 5) tensor, where the first 4 columns + are bounding box positions (tl_x, tl_y, br_x, br_y) and the + 5-th column is a score between 0 and 1. The second item is a + (n,) tensor where each item is the predicted class label of the + corresponding box. + """ + result_list = [] + num_levels = len(pred_maps) + for img_id in range(len(img_metas)): + pred_maps_list = [ + pred_maps[i][img_id].detach() for i in range(num_levels) + ] + scale_factor = img_metas[img_id]['scale_factor'] + proposals = self._get_bboxes_single(pred_maps_list, scale_factor, + cfg, rescale, with_nms) + result_list.append(proposals) + return result_list + + def _get_bboxes_single(self, + pred_maps_list, + scale_factor, + cfg, + rescale=False, + with_nms=True): + """Transform outputs for a single batch item into bbox predictions. + + Args: + pred_maps_list (list[Tensor]): Prediction maps for different scales + of each single image in the batch. + scale_factor (ndarray): Scale factor of the image arrange as + (w_scale, h_scale, w_scale, h_scale). + cfg (mmcv.Config | None): Test / postprocessing configuration, + if None, test_cfg would be used. + rescale (bool): If True, return boxes in original image space. + Default: False. + with_nms (bool): If True, do nms before return boxes. + Default: True. + + Returns: + tuple(Tensor): + det_bboxes (Tensor): BBox predictions in shape (n, 5), where + the first 4 columns are bounding box positions + (tl_x, tl_y, br_x, br_y) and the 5-th column is a score + between 0 and 1. + det_labels (Tensor): A (n,) tensor where each item is the + predicted class label of the corresponding box. + """ + cfg = self.test_cfg if cfg is None else cfg + assert len(pred_maps_list) == self.num_levels + multi_lvl_bboxes = [] + multi_lvl_cls_scores = [] + multi_lvl_conf_scores = [] + num_levels = len(pred_maps_list) + featmap_sizes = [ + pred_maps_list[i].shape[-2:] for i in range(num_levels) + ] + multi_lvl_anchors = self.anchor_generator.grid_anchors( + featmap_sizes, pred_maps_list[0][0].device) + for i in range(self.num_levels): + # get some key info for current scale + pred_map = pred_maps_list[i] + stride = self.featmap_strides[i] + + # (h, w, num_anchors*num_attrib) -> (h*w*num_anchors, num_attrib) + pred_map = pred_map.permute(1, 2, 0).reshape(-1, self.num_attrib) + + pred_map[..., :2] = torch.sigmoid(pred_map[..., :2]) + bbox_pred = self.bbox_coder.decode(multi_lvl_anchors[i], + pred_map[..., :4], stride) + # conf and cls + conf_pred = torch.sigmoid(pred_map[..., 4]).view(-1) + cls_pred = torch.sigmoid(pred_map[..., 5:]).view( + -1, self.num_classes) # Cls pred one-hot. + + # Filtering out all predictions with conf < conf_thr + conf_thr = cfg.get('conf_thr', -1) + if conf_thr > 0: + # add as_tuple=False for compatibility in Pytorch 1.6 + # flatten would create a Reshape op with constant values, + # and raise RuntimeError when doing inference in ONNX Runtime + # with a different input image (#4221). + conf_inds = conf_pred.ge(conf_thr).nonzero( + as_tuple=False).squeeze(1) + bbox_pred = bbox_pred[conf_inds, :] + cls_pred = cls_pred[conf_inds, :] + conf_pred = conf_pred[conf_inds] + + # Get top-k prediction + nms_pre = cfg.get('nms_pre', -1) + if 0 < nms_pre < conf_pred.size(0) and ( + not torch.onnx.is_in_onnx_export()): + _, topk_inds = conf_pred.topk(nms_pre) + bbox_pred = bbox_pred[topk_inds, :] + cls_pred = cls_pred[topk_inds, :] + conf_pred = conf_pred[topk_inds] + + # Save the result of current scale + multi_lvl_bboxes.append(bbox_pred) + multi_lvl_cls_scores.append(cls_pred) + multi_lvl_conf_scores.append(conf_pred) + + # Merge the results of different scales together + multi_lvl_bboxes = torch.cat(multi_lvl_bboxes) + multi_lvl_cls_scores = torch.cat(multi_lvl_cls_scores) + multi_lvl_conf_scores = torch.cat(multi_lvl_conf_scores) + + if with_nms and (multi_lvl_conf_scores.size(0) == 0): + return torch.zeros((0, 5)), torch.zeros((0, )) + + if rescale: + multi_lvl_bboxes /= multi_lvl_bboxes.new_tensor(scale_factor) + + # In mmdet 2.x, the class_id for background is num_classes. + # i.e., the last column. + padding = multi_lvl_cls_scores.new_zeros(multi_lvl_cls_scores.shape[0], + 1) + multi_lvl_cls_scores = torch.cat([multi_lvl_cls_scores, padding], + dim=1) + + # Support exporting to onnx without nms + if with_nms and cfg.get('nms', None) is not None: + det_bboxes, det_labels = multiclass_nms( + multi_lvl_bboxes, + multi_lvl_cls_scores, + cfg.score_thr, + cfg.nms, + cfg.max_per_img, + score_factors=multi_lvl_conf_scores) + return det_bboxes, det_labels + else: + return (multi_lvl_bboxes, multi_lvl_cls_scores, + multi_lvl_conf_scores) + + @force_fp32(apply_to=('pred_maps', )) + def loss(self, + pred_maps, + gt_bboxes, + gt_labels, + img_metas, + gt_bboxes_ignore=None): + """Compute loss of the head. + + Args: + pred_maps (list[Tensor]): Prediction map for each scale level, + shape (N, num_anchors * num_attrib, H, W) + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + img_metas (list[dict]): Meta information of each image, e.g., + image size, scaling factor, etc. + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + num_imgs = len(img_metas) + device = pred_maps[0][0].device + + featmap_sizes = [ + pred_maps[i].shape[-2:] for i in range(self.num_levels) + ] + multi_level_anchors = self.anchor_generator.grid_anchors( + featmap_sizes, device) + anchor_list = [multi_level_anchors for _ in range(num_imgs)] + + responsible_flag_list = [] + for img_id in range(len(img_metas)): + responsible_flag_list.append( + self.anchor_generator.responsible_flags( + featmap_sizes, gt_bboxes[img_id], device)) + + target_maps_list, neg_maps_list = self.get_targets( + anchor_list, responsible_flag_list, gt_bboxes, gt_labels) + + losses_cls, losses_conf, losses_xy, losses_wh = multi_apply( + self.loss_single, pred_maps, target_maps_list, neg_maps_list) + + return dict( + loss_cls=losses_cls, + loss_conf=losses_conf, + loss_xy=losses_xy, + loss_wh=losses_wh) + + def loss_single(self, pred_map, target_map, neg_map): + """Compute loss of a single image from a batch. + + Args: + pred_map (Tensor): Raw predictions for a single level. + target_map (Tensor): The Ground-Truth target for a single level. + neg_map (Tensor): The negative masks for a single level. + + Returns: + tuple: + loss_cls (Tensor): Classification loss. + loss_conf (Tensor): Confidence loss. + loss_xy (Tensor): Regression loss of x, y coordinate. + loss_wh (Tensor): Regression loss of w, h coordinate. + """ + + num_imgs = len(pred_map) + pred_map = pred_map.permute(0, 2, 3, + 1).reshape(num_imgs, -1, self.num_attrib) + neg_mask = neg_map.float() + pos_mask = target_map[..., 4] + pos_and_neg_mask = neg_mask + pos_mask + pos_mask = pos_mask.unsqueeze(dim=-1) + if torch.max(pos_and_neg_mask) > 1.: + warnings.warn('There is overlap between pos and neg sample.') + pos_and_neg_mask = pos_and_neg_mask.clamp(min=0., max=1.) + + pred_xy = pred_map[..., :2] + pred_wh = pred_map[..., 2:4] + pred_conf = pred_map[..., 4] + pred_label = pred_map[..., 5:] + + target_xy = target_map[..., :2] + target_wh = target_map[..., 2:4] + target_conf = target_map[..., 4] + target_label = target_map[..., 5:] + + loss_cls = self.loss_cls(pred_label, target_label, weight=pos_mask) + loss_conf = self.loss_conf( + pred_conf, target_conf, weight=pos_and_neg_mask) + loss_xy = self.loss_xy(pred_xy, target_xy, weight=pos_mask) + loss_wh = self.loss_wh(pred_wh, target_wh, weight=pos_mask) + + return loss_cls, loss_conf, loss_xy, loss_wh + + def get_targets(self, anchor_list, responsible_flag_list, gt_bboxes_list, + gt_labels_list): + """Compute target maps for anchors in multiple images. + + Args: + anchor_list (list[list[Tensor]]): Multi level anchors of each + image. The outer list indicates images, and the inner list + corresponds to feature levels of the image. Each element of + the inner list is a tensor of shape (num_total_anchors, 4). + responsible_flag_list (list[list[Tensor]]): Multi level responsible + flags of each image. Each element is a tensor of shape + (num_total_anchors, ) + gt_bboxes_list (list[Tensor]): Ground truth bboxes of each image. + gt_labels_list (list[Tensor]): Ground truth labels of each box. + + Returns: + tuple: Usually returns a tuple containing learning targets. + - target_map_list (list[Tensor]): Target map of each level. + - neg_map_list (list[Tensor]): Negative map of each level. + """ + num_imgs = len(anchor_list) + + # anchor number of multi levels + num_level_anchors = [anchors.size(0) for anchors in anchor_list[0]] + + results = multi_apply(self._get_targets_single, anchor_list, + responsible_flag_list, gt_bboxes_list, + gt_labels_list) + + all_target_maps, all_neg_maps = results + assert num_imgs == len(all_target_maps) == len(all_neg_maps) + target_maps_list = images_to_levels(all_target_maps, num_level_anchors) + neg_maps_list = images_to_levels(all_neg_maps, num_level_anchors) + + return target_maps_list, neg_maps_list + + def _get_targets_single(self, anchors, responsible_flags, gt_bboxes, + gt_labels): + """Generate matching bounding box prior and converted GT. + + Args: + anchors (list[Tensor]): Multi-level anchors of the image. + responsible_flags (list[Tensor]): Multi-level responsible flags of + anchors + gt_bboxes (Tensor): Ground truth bboxes of single image. + gt_labels (Tensor): Ground truth labels of single image. + + Returns: + tuple: + target_map (Tensor): Predication target map of each + scale level, shape (num_total_anchors, + 5+num_classes) + neg_map (Tensor): Negative map of each scale level, + shape (num_total_anchors,) + """ + + anchor_strides = [] + for i in range(len(anchors)): + anchor_strides.append( + torch.tensor(self.featmap_strides[i], + device=gt_bboxes.device).repeat(len(anchors[i]))) + concat_anchors = torch.cat(anchors) + concat_responsible_flags = torch.cat(responsible_flags) + + anchor_strides = torch.cat(anchor_strides) + assert len(anchor_strides) == len(concat_anchors) == \ + len(concat_responsible_flags) + assign_result = self.assigner.assign(concat_anchors, + concat_responsible_flags, + gt_bboxes) + sampling_result = self.sampler.sample(assign_result, concat_anchors, + gt_bboxes) + + target_map = concat_anchors.new_zeros( + concat_anchors.size(0), self.num_attrib) + + target_map[sampling_result.pos_inds, :4] = self.bbox_coder.encode( + sampling_result.pos_bboxes, sampling_result.pos_gt_bboxes, + anchor_strides[sampling_result.pos_inds]) + + target_map[sampling_result.pos_inds, 4] = 1 + + gt_labels_one_hot = F.one_hot( + gt_labels, num_classes=self.num_classes).float() + if self.one_hot_smoother != 0: # label smooth + gt_labels_one_hot = gt_labels_one_hot * ( + 1 - self.one_hot_smoother + ) + self.one_hot_smoother / self.num_classes + target_map[sampling_result.pos_inds, 5:] = gt_labels_one_hot[ + sampling_result.pos_assigned_gt_inds] + + neg_map = concat_anchors.new_zeros( + concat_anchors.size(0), dtype=torch.uint8) + neg_map[sampling_result.neg_inds] = 1 + + return target_map, neg_map + + def aug_test(self, feats, img_metas, rescale=False): + """Test function with test time augmentation. + + Args: + feats (list[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains features for all images in the batch. + img_metas (list[list[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. each dict has image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[ndarray]: bbox results of each class + """ + return self.aug_test_bboxes(feats, img_metas, rescale=rescale) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/__init__.py new file mode 100644 index 00000000..a22e99c8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/__init__.py @@ -0,0 +1,36 @@ +from .atss import ATSS +from .base import BaseDetector +from .cascade_rcnn import CascadeRCNN +from .cornernet import CornerNet +from .detr import DETR +from .fast_rcnn import FastRCNN +from .faster_rcnn import FasterRCNN +from .fcos import FCOS +from .fovea import FOVEA +from .fsaf import FSAF +from .gfl import GFL +from .grid_rcnn import GridRCNN +from .htc import HybridTaskCascade +from .mask_rcnn import MaskRCNN +from .mask_scoring_rcnn import MaskScoringRCNN +from .nasfcos import NASFCOS +from .paa import PAA +from .point_rend import PointRend +from .reppoints_detector import RepPointsDetector +from .retinanet import RetinaNet +from .rpn import RPN +from .single_stage import SingleStageDetector +from .sparse_rcnn import SparseRCNN +from .trident_faster_rcnn import TridentFasterRCNN +from .two_stage import TwoStageDetector +from .vfnet import VFNet +from .yolact import YOLACT +from .yolo import YOLOV3 + +__all__ = [ + 'ATSS', 'BaseDetector', 'SingleStageDetector', 'TwoStageDetector', 'RPN', + 'FastRCNN', 'FasterRCNN', 'MaskRCNN', 'CascadeRCNN', 'HybridTaskCascade', + 'RetinaNet', 'FCOS', 'GridRCNN', 'MaskScoringRCNN', 'RepPointsDetector', + 'FOVEA', 'FSAF', 'NASFCOS', 'PointRend', 'GFL', 'CornerNet', 'PAA', + 'YOLOV3', 'YOLACT', 'VFNet', 'DETR', 'TridentFasterRCNN', 'SparseRCNN' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/atss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/atss.py new file mode 100644 index 00000000..db7139c6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/atss.py @@ -0,0 +1,17 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class ATSS(SingleStageDetector): + """Implementation of `ATSS `_.""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(ATSS, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/base.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/base.py new file mode 100644 index 00000000..7bab36c8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/base.py @@ -0,0 +1,362 @@ +from abc import ABCMeta, abstractmethod +from collections import OrderedDict + +import mmcv +import numpy as np +import torch +import torch.distributed as dist +import torch.nn as nn +from mmcv.runner import auto_fp16 +from mmcv.utils import print_log + +from mmdet.core.visualization import imshow_det_bboxes +from mmdet.utils import get_root_logger + + +class BaseDetector(nn.Module, metaclass=ABCMeta): + """Base class for detectors.""" + + def __init__(self): + super(BaseDetector, self).__init__() + self.fp16_enabled = False + + @property + def with_neck(self): + """bool: whether the detector has a neck""" + return hasattr(self, 'neck') and self.neck is not None + + # TODO: these properties need to be carefully handled + # for both single stage & two stage detectors + @property + def with_shared_head(self): + """bool: whether the detector has a shared head in the RoI Head""" + return hasattr(self, 'roi_head') and self.roi_head.with_shared_head + + @property + def with_bbox(self): + """bool: whether the detector has a bbox head""" + return ((hasattr(self, 'roi_head') and self.roi_head.with_bbox) + or (hasattr(self, 'bbox_head') and self.bbox_head is not None)) + + @property + def with_mask(self): + """bool: whether the detector has a mask head""" + return ((hasattr(self, 'roi_head') and self.roi_head.with_mask) + or (hasattr(self, 'mask_head') and self.mask_head is not None)) + + @abstractmethod + def extract_feat(self, imgs): + """Extract features from images.""" + pass + + def extract_feats(self, imgs): + """Extract features from multiple images. + + Args: + imgs (list[torch.Tensor]): A list of images. The images are + augmented from the same image but in different ways. + + Returns: + list[torch.Tensor]: Features of different images + """ + assert isinstance(imgs, list) + return [self.extract_feat(img) for img in imgs] + + def forward_train(self, imgs, img_metas, **kwargs): + """ + Args: + img (list[Tensor]): List of tensors of shape (1, C, H, W). + Typically these should be mean centered and std scaled. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys, see + :class:`mmdet.datasets.pipelines.Collect`. + kwargs (keyword arguments): Specific to concrete implementation. + """ + # NOTE the batched image size information may be useful, e.g. + # in DETR, this is needed for the construction of masks, which is + # then used for the transformer_head. + batch_input_shape = tuple(imgs[0].size()[-2:]) + for img_meta in img_metas: + img_meta['batch_input_shape'] = batch_input_shape + + async def async_simple_test(self, img, img_metas, **kwargs): + raise NotImplementedError + + @abstractmethod + def simple_test(self, img, img_metas, **kwargs): + pass + + @abstractmethod + def aug_test(self, imgs, img_metas, **kwargs): + """Test function with test time augmentation.""" + pass + + def init_weights(self, pretrained=None): + """Initialize the weights in detector. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if pretrained is not None: + logger = get_root_logger() + print_log(f'load model from: {pretrained}', logger=logger) + + async def aforward_test(self, *, img, img_metas, **kwargs): + for var, name in [(img, 'img'), (img_metas, 'img_metas')]: + if not isinstance(var, list): + raise TypeError(f'{name} must be a list, but got {type(var)}') + + num_augs = len(img) + if num_augs != len(img_metas): + raise ValueError(f'num of augmentations ({len(img)}) ' + f'!= num of image metas ({len(img_metas)})') + # TODO: remove the restriction of samples_per_gpu == 1 when prepared + samples_per_gpu = img[0].size(0) + assert samples_per_gpu == 1 + + if num_augs == 1: + return await self.async_simple_test(img[0], img_metas[0], **kwargs) + else: + raise NotImplementedError + + def forward_test(self, imgs, img_metas, **kwargs): + """ + Args: + imgs (List[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains all images in the batch. + img_metas (List[List[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. + """ + for var, name in [(imgs, 'imgs'), (img_metas, 'img_metas')]: + if not isinstance(var, list): + raise TypeError(f'{name} must be a list, but got {type(var)}') + + num_augs = len(imgs) + if num_augs != len(img_metas): + raise ValueError(f'num of augmentations ({len(imgs)}) ' + f'!= num of image meta ({len(img_metas)})') + + # NOTE the batched image size information may be useful, e.g. + # in DETR, this is needed for the construction of masks, which is + # then used for the transformer_head. + for img, img_meta in zip(imgs, img_metas): + batch_size = len(img_meta) + for img_id in range(batch_size): + img_meta[img_id]['batch_input_shape'] = tuple(img.size()[-2:]) + + if num_augs == 1: + # proposals (List[List[Tensor]]): the outer list indicates + # test-time augs (multiscale, flip, etc.) and the inner list + # indicates images in a batch. + # The Tensor should have a shape Px4, where P is the number of + # proposals. + if 'proposals' in kwargs: + kwargs['proposals'] = kwargs['proposals'][0] + return self.simple_test(imgs[0], img_metas[0], **kwargs) + else: + assert imgs[0].size(0) == 1, 'aug test does not support ' \ + 'inference with batch size ' \ + f'{imgs[0].size(0)}' + # TODO: support test augmentation for predefined proposals + assert 'proposals' not in kwargs + return self.aug_test(imgs, img_metas, **kwargs) + + @auto_fp16(apply_to=('img', )) + def forward(self, img, img_metas, return_loss=True, **kwargs): + """Calls either :func:`forward_train` or :func:`forward_test` depending + on whether ``return_loss`` is ``True``. + + Note this setting will change the expected inputs. When + ``return_loss=True``, img and img_meta are single-nested (i.e. Tensor + and List[dict]), and when ``resturn_loss=False``, img and img_meta + should be double nested (i.e. List[Tensor], List[List[dict]]), with + the outer list indicating test time augmentations. + """ + if return_loss: + return self.forward_train(img, img_metas, **kwargs) + else: + return self.forward_test(img, img_metas, **kwargs) + + def _parse_losses(self, losses): + """Parse the raw outputs (losses) of the network. + + Args: + losses (dict): Raw output of the network, which usually contain + losses and other necessary infomation. + + Returns: + tuple[Tensor, dict]: (loss, log_vars), loss is the loss tensor \ + which may be a weighted sum of all losses, log_vars contains \ + all the variables to be sent to the logger. + """ + log_vars = OrderedDict() + for loss_name, loss_value in losses.items(): + if isinstance(loss_value, torch.Tensor): + log_vars[loss_name] = loss_value.mean() + elif isinstance(loss_value, list): + log_vars[loss_name] = sum(_loss.mean() for _loss in loss_value) + else: + raise TypeError( + f'{loss_name} is not a tensor or list of tensors') + + loss = sum(_value for _key, _value in log_vars.items() + if 'loss' in _key) + + log_vars['loss'] = loss + for loss_name, loss_value in log_vars.items(): + # reduce loss when distributed training + if dist.is_available() and dist.is_initialized(): + loss_value = loss_value.data.clone() + dist.all_reduce(loss_value.div_(dist.get_world_size())) + log_vars[loss_name] = loss_value.item() + + return loss, log_vars + + def train_step(self, data, optimizer): + """The iteration step during training. + + This method defines an iteration step during training, except for the + back propagation and optimizer updating, which are done in an optimizer + hook. Note that in some complicated cases or models, the whole process + including back propagation and optimizer updating is also defined in + this method, such as GAN. + + Args: + data (dict): The output of dataloader. + optimizer (:obj:`torch.optim.Optimizer` | dict): The optimizer of + runner is passed to ``train_step()``. This argument is unused + and reserved. + + Returns: + dict: It should contain at least 3 keys: ``loss``, ``log_vars``, \ + ``num_samples``. + + - ``loss`` is a tensor for back propagation, which can be a \ + weighted sum of multiple losses. + - ``log_vars`` contains all the variables to be sent to the + logger. + - ``num_samples`` indicates the batch size (when the model is \ + DDP, it means the batch size on each GPU), which is used for \ + averaging the logs. + """ + losses = self(**data) + loss, log_vars = self._parse_losses(losses) + + outputs = dict( + loss=loss, log_vars=log_vars, num_samples=len(data['img_metas'])) + + return outputs + + def val_step(self, data, optimizer): + """The iteration step during validation. + + This method shares the same signature as :func:`train_step`, but used + during val epochs. Note that the evaluation after training epochs is + not implemented with this method, but an evaluation hook. + """ + losses = self(**data) + loss, log_vars = self._parse_losses(losses) + + outputs = dict( + loss=loss, log_vars=log_vars, num_samples=len(data['img_metas'])) + + return outputs + + def show_result(self, + img, + result, + score_thr=0.3, + bbox_color=(72, 101, 241), + text_color=(72, 101, 241), + mask_color=None, + thickness=2, + font_scale=0.5, + font_size=13, + win_name='', + fig_size=(15, 10), + show=False, + wait_time=0, + out_file=None): + """Draw `result` over `img`. + + Args: + img (str or Tensor): The image to be displayed. + result (Tensor or tuple): The results to draw over `img` + bbox_result or (bbox_result, segm_result). + score_thr (float, optional): Minimum score of bboxes to be shown. + Default: 0.3. + bbox_color (str or tuple(int) or :obj:`Color`):Color of bbox lines. + The tuple of color should be in BGR order. Default: 'green' + text_color (str or tuple(int) or :obj:`Color`):Color of texts. + The tuple of color should be in BGR order. Default: 'green' + mask_color (None or str or tuple(int) or :obj:`Color`): + Color of masks. The tuple of color should be in BGR order. + Default: None + thickness (int): Thickness of lines. Default: 2 + font_scale (float): Font scales of texts. Default: 0.5 + font_size (int): Font size of texts. Default: 13 + win_name (str): The window name. Default: '' + fig_size (tuple): Figure size of the pyplot figure. + Default: (15, 10) + wait_time (float): Value of waitKey param. + Default: 0. + show (bool): Whether to show the image. + Default: False. + out_file (str or None): The filename to write the image. + Default: None. + + Returns: + img (Tensor): Only if not `show` or `out_file` + """ + img = mmcv.imread(img) + img = img.copy() + if isinstance(result, tuple): + bbox_result, segm_result = result + if isinstance(segm_result, tuple): + segm_result = segm_result[0] # ms rcnn + else: + bbox_result, segm_result = result, None + bboxes = np.vstack(bbox_result) + labels = [ + np.full(bbox.shape[0], i, dtype=np.int32) + for i, bbox in enumerate(bbox_result) + ] + labels = np.concatenate(labels) + # draw segmentation masks + segms = None + if segm_result is not None and len(labels) > 0: # non empty + segms = mmcv.concat_list(segm_result) + if isinstance(segms[0], torch.Tensor): + segms = torch.stack(segms, dim=0).detach().cpu().numpy() + else: + segms = np.stack(segms, axis=0) + # if out_file specified, do not show image in window + if out_file is not None: + show = False + # draw bounding boxes + imshow_det_bboxes( + img, + bboxes, + labels, + segms, + class_names=self.CLASSES, + score_thr=score_thr, + bbox_color=bbox_color, + text_color=text_color, + mask_color=mask_color, + thickness=thickness, + font_scale=font_scale, + font_size=font_size, + win_name=win_name, + fig_size=fig_size, + show=show, + wait_time=wait_time, + out_file=out_file) + + if not (show or out_file): + return img diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cascade_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cascade_rcnn.py new file mode 100644 index 00000000..47cc7cef --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cascade_rcnn.py @@ -0,0 +1,37 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class CascadeRCNN(TwoStageDetector): + r"""Implementation of `Cascade R-CNN: Delving into High Quality Object + Detection `_""" + + def __init__(self, + backbone, + neck=None, + rpn_head=None, + roi_head=None, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(CascadeRCNN, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) + + def show_result(self, data, result, **kwargs): + """Show prediction results of the detector.""" + if self.with_mask: + ms_bbox_result, ms_segm_result = result + if isinstance(ms_bbox_result, dict): + result = (ms_bbox_result['ensemble'], + ms_segm_result['ensemble']) + else: + if isinstance(result, dict): + result = result['ensemble'] + return super(CascadeRCNN, self).show_result(data, result, **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cornernet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cornernet.py new file mode 100644 index 00000000..bb8ccc14 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/cornernet.py @@ -0,0 +1,95 @@ +import torch + +from mmdet.core import bbox2result, bbox_mapping_back +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class CornerNet(SingleStageDetector): + """CornerNet. + + This detector is the implementation of the paper `CornerNet: Detecting + Objects as Paired Keypoints `_ . + """ + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(CornerNet, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) + + def merge_aug_results(self, aug_results, img_metas): + """Merge augmented detection bboxes and score. + + Args: + aug_results (list[list[Tensor]]): Det_bboxes and det_labels of each + image. + img_metas (list[list[dict]]): Meta information of each image, e.g., + image size, scaling factor, etc. + + Returns: + tuple: (bboxes, labels) + """ + recovered_bboxes, aug_labels = [], [] + for bboxes_labels, img_info in zip(aug_results, img_metas): + img_shape = img_info[0]['img_shape'] # using shape before padding + scale_factor = img_info[0]['scale_factor'] + flip = img_info[0]['flip'] + bboxes, labels = bboxes_labels + bboxes, scores = bboxes[:, :4], bboxes[:, -1:] + bboxes = bbox_mapping_back(bboxes, img_shape, scale_factor, flip) + recovered_bboxes.append(torch.cat([bboxes, scores], dim=-1)) + aug_labels.append(labels) + + bboxes = torch.cat(recovered_bboxes, dim=0) + labels = torch.cat(aug_labels) + + if bboxes.shape[0] > 0: + out_bboxes, out_labels = self.bbox_head._bboxes_nms( + bboxes, labels, self.bbox_head.test_cfg) + else: + out_bboxes, out_labels = bboxes, labels + + return out_bboxes, out_labels + + def aug_test(self, imgs, img_metas, rescale=False): + """Augment testing of CornerNet. + + Args: + imgs (list[Tensor]): Augmented images. + img_metas (list[list[dict]]): Meta information of each image, e.g., + image size, scaling factor, etc. + rescale (bool): If True, return boxes in original image space. + Default: False. + + Note: + ``imgs`` must including flipped image pairs. + + Returns: + list[list[np.ndarray]]: BBox results of each image and classes. + The outer list corresponds to each image. The inner list + corresponds to each class. + """ + img_inds = list(range(len(imgs))) + + assert img_metas[0][0]['flip'] + img_metas[1][0]['flip'], ( + 'aug test must have flipped image pair') + aug_results = [] + for ind, flip_ind in zip(img_inds[0::2], img_inds[1::2]): + img_pair = torch.cat([imgs[ind], imgs[flip_ind]]) + x = self.extract_feat(img_pair) + outs = self.bbox_head(x) + bbox_list = self.bbox_head.get_bboxes( + *outs, [img_metas[ind], img_metas[flip_ind]], False, False) + aug_results.append(bbox_list[0]) + aug_results.append(bbox_list[1]) + + bboxes, labels = self.merge_aug_results(aug_results, img_metas) + bbox_results = bbox2result(bboxes, labels, self.bbox_head.num_classes) + + return [bbox_results] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/detr.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/detr.py new file mode 100644 index 00000000..5ff82a28 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/detr.py @@ -0,0 +1,46 @@ +from mmdet.core import bbox2result +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class DETR(SingleStageDetector): + r"""Implementation of `DETR: End-to-End Object Detection with + Transformers `_""" + + def __init__(self, + backbone, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(DETR, self).__init__(backbone, None, bbox_head, train_cfg, + test_cfg, pretrained) + + def simple_test(self, img, img_metas, rescale=False): + """Test function without test time augmentation. + + Args: + imgs (list[torch.Tensor]): List of multiple images + img_metas (list[dict]): List of image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[list[np.ndarray]]: BBox results of each image and classes. + The outer list corresponds to each image. The inner list + corresponds to each class. + """ + batch_size = len(img_metas) + assert batch_size == 1, 'Currently only batch_size 1 for inference ' \ + f'mode is supported. Found batch_size {batch_size}.' + x = self.extract_feat(img) + outs = self.bbox_head(x, img_metas) + bbox_list = self.bbox_head.get_bboxes( + *outs, img_metas, rescale=rescale) + + bbox_results = [ + bbox2result(det_bboxes, det_labels, self.bbox_head.num_classes) + for det_bboxes, det_labels in bbox_list + ] + return bbox_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fast_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fast_rcnn.py new file mode 100644 index 00000000..3d6e2427 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fast_rcnn.py @@ -0,0 +1,52 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class FastRCNN(TwoStageDetector): + """Implementation of `Fast R-CNN `_""" + + def __init__(self, + backbone, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + super(FastRCNN, self).__init__( + backbone=backbone, + neck=neck, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) + + def forward_test(self, imgs, img_metas, proposals, **kwargs): + """ + Args: + imgs (List[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains all images in the batch. + img_metas (List[List[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. + proposals (List[List[Tensor]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. The Tensor should have a shape Px4, where + P is the number of proposals. + """ + for var, name in [(imgs, 'imgs'), (img_metas, 'img_metas')]: + if not isinstance(var, list): + raise TypeError(f'{name} must be a list, but got {type(var)}') + + num_augs = len(imgs) + if num_augs != len(img_metas): + raise ValueError(f'num of augmentations ({len(imgs)}) ' + f'!= num of image meta ({len(img_metas)})') + + if num_augs == 1: + return self.simple_test(imgs[0], img_metas[0], proposals[0], + **kwargs) + else: + # TODO: support test-time augmentation + assert NotImplementedError diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/faster_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/faster_rcnn.py new file mode 100644 index 00000000..81bad0f4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/faster_rcnn.py @@ -0,0 +1,24 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class FasterRCNN(TwoStageDetector): + """Implementation of `Faster R-CNN `_""" + + def __init__(self, + backbone, + rpn_head, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + super(FasterRCNN, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fcos.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fcos.py new file mode 100644 index 00000000..58485c18 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fcos.py @@ -0,0 +1,17 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class FCOS(SingleStageDetector): + """Implementation of `FCOS `_""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(FCOS, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fovea.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fovea.py new file mode 100644 index 00000000..22a578ef --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fovea.py @@ -0,0 +1,17 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class FOVEA(SingleStageDetector): + """Implementation of `FoveaBox `_""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(FOVEA, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fsaf.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fsaf.py new file mode 100644 index 00000000..9f10fa1a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/fsaf.py @@ -0,0 +1,17 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class FSAF(SingleStageDetector): + """Implementation of `FSAF `_""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(FSAF, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/gfl.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/gfl.py new file mode 100644 index 00000000..64d65cb2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/gfl.py @@ -0,0 +1,16 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class GFL(SingleStageDetector): + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(GFL, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/grid_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/grid_rcnn.py new file mode 100644 index 00000000..b6145a14 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/grid_rcnn.py @@ -0,0 +1,29 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class GridRCNN(TwoStageDetector): + """Grid R-CNN. + + This detector is the implementation of: + - Grid R-CNN (https://arxiv.org/abs/1811.12030) + - Grid R-CNN Plus: Faster and Better (https://arxiv.org/abs/1906.05688) + """ + + def __init__(self, + backbone, + rpn_head, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + super(GridRCNN, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/htc.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/htc.py new file mode 100644 index 00000000..d9efdf42 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/htc.py @@ -0,0 +1,15 @@ +from ..builder import DETECTORS +from .cascade_rcnn import CascadeRCNN + + +@DETECTORS.register_module() +class HybridTaskCascade(CascadeRCNN): + """Implementation of `HTC `_""" + + def __init__(self, **kwargs): + super(HybridTaskCascade, self).__init__(**kwargs) + + @property + def with_semantic(self): + """bool: whether the detector has a semantic head""" + return self.roi_head.with_semantic diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_rcnn.py new file mode 100644 index 00000000..c15a7733 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_rcnn.py @@ -0,0 +1,24 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class MaskRCNN(TwoStageDetector): + """Implementation of `Mask R-CNN `_""" + + def __init__(self, + backbone, + rpn_head, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + super(MaskRCNN, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_scoring_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_scoring_rcnn.py new file mode 100644 index 00000000..b6252b6e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/mask_scoring_rcnn.py @@ -0,0 +1,27 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class MaskScoringRCNN(TwoStageDetector): + """Mask Scoring RCNN. + + https://arxiv.org/abs/1903.00241 + """ + + def __init__(self, + backbone, + rpn_head, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + super(MaskScoringRCNN, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/nasfcos.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/nasfcos.py new file mode 100644 index 00000000..fb014835 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/nasfcos.py @@ -0,0 +1,20 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class NASFCOS(SingleStageDetector): + """NAS-FCOS: Fast Neural Architecture Search for Object Detection. + + https://arxiv.org/abs/1906.0442 + """ + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(NASFCOS, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/paa.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/paa.py new file mode 100644 index 00000000..9b4bb5e0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/paa.py @@ -0,0 +1,17 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class PAA(SingleStageDetector): + """Implementation of `PAA `_.""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(PAA, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/point_rend.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/point_rend.py new file mode 100644 index 00000000..808ef225 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/point_rend.py @@ -0,0 +1,29 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class PointRend(TwoStageDetector): + """PointRend: Image Segmentation as Rendering + + This detector is the implementation of + `PointRend `_. + + """ + + def __init__(self, + backbone, + rpn_head, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + super(PointRend, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/reppoints_detector.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/reppoints_detector.py new file mode 100644 index 00000000..a5f6be31 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/reppoints_detector.py @@ -0,0 +1,22 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class RepPointsDetector(SingleStageDetector): + """RepPoints: Point Set Representation for Object Detection. + + This detector is the implementation of: + - RepPoints detector (https://arxiv.org/pdf/1904.11490) + """ + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(RepPointsDetector, + self).__init__(backbone, neck, bbox_head, train_cfg, test_cfg, + pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/retinanet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/retinanet.py new file mode 100644 index 00000000..41378e8b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/retinanet.py @@ -0,0 +1,17 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class RetinaNet(SingleStageDetector): + """Implementation of `RetinaNet `_""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(RetinaNet, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/rpn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/rpn.py new file mode 100644 index 00000000..7a9f454a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/rpn.py @@ -0,0 +1,154 @@ +import mmcv +from mmcv.image import tensor2imgs + +from mmdet.core import bbox_mapping +from ..builder import DETECTORS, build_backbone, build_head, build_neck +from .base import BaseDetector + + +@DETECTORS.register_module() +class RPN(BaseDetector): + """Implementation of Region Proposal Network.""" + + def __init__(self, + backbone, + neck, + rpn_head, + train_cfg, + test_cfg, + pretrained=None): + super(RPN, self).__init__() + self.backbone = build_backbone(backbone) + self.neck = build_neck(neck) if neck is not None else None + rpn_train_cfg = train_cfg.rpn if train_cfg is not None else None + rpn_head.update(train_cfg=rpn_train_cfg) + rpn_head.update(test_cfg=test_cfg.rpn) + self.rpn_head = build_head(rpn_head) + self.train_cfg = train_cfg + self.test_cfg = test_cfg + self.init_weights(pretrained=pretrained) + + def init_weights(self, pretrained=None): + """Initialize the weights in detector. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + super(RPN, self).init_weights(pretrained) + self.backbone.init_weights(pretrained=pretrained) + if self.with_neck: + self.neck.init_weights() + self.rpn_head.init_weights() + + def extract_feat(self, img): + """Extract features. + + Args: + img (torch.Tensor): Image tensor with shape (n, c, h ,w). + + Returns: + list[torch.Tensor]: Multi-level features that may have + different resolutions. + """ + x = self.backbone(img) + if self.with_neck: + x = self.neck(x) + return x + + def forward_dummy(self, img): + """Dummy forward function.""" + x = self.extract_feat(img) + rpn_outs = self.rpn_head(x) + return rpn_outs + + def forward_train(self, + img, + img_metas, + gt_bboxes=None, + gt_bboxes_ignore=None): + """ + Args: + img (Tensor): Input images of shape (N, C, H, W). + Typically these should be mean centered and std scaled. + img_metas (list[dict]): A List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + :class:`mmdet.datasets.pipelines.Collect`. + gt_bboxes (list[Tensor]): Each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + gt_bboxes_ignore (None | list[Tensor]): Specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + if (isinstance(self.train_cfg.rpn, dict) + and self.train_cfg.rpn.get('debug', False)): + self.rpn_head.debug_imgs = tensor2imgs(img) + + x = self.extract_feat(img) + losses = self.rpn_head.forward_train(x, img_metas, gt_bboxes, None, + gt_bboxes_ignore) + return losses + + def simple_test(self, img, img_metas, rescale=False): + """Test function without test time augmentation. + + Args: + imgs (list[torch.Tensor]): List of multiple images + img_metas (list[dict]): List of image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[np.ndarray]: proposals + """ + x = self.extract_feat(img) + proposal_list = self.rpn_head.simple_test_rpn(x, img_metas) + if rescale: + for proposals, meta in zip(proposal_list, img_metas): + proposals[:, :4] /= proposals.new_tensor(meta['scale_factor']) + + return [proposal.cpu().numpy() for proposal in proposal_list] + + def aug_test(self, imgs, img_metas, rescale=False): + """Test function with test time augmentation. + + Args: + imgs (list[torch.Tensor]): List of multiple images + img_metas (list[dict]): List of image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[np.ndarray]: proposals + """ + proposal_list = self.rpn_head.aug_test_rpn( + self.extract_feats(imgs), img_metas) + if not rescale: + for proposals, img_meta in zip(proposal_list, img_metas[0]): + img_shape = img_meta['img_shape'] + scale_factor = img_meta['scale_factor'] + flip = img_meta['flip'] + flip_direction = img_meta['flip_direction'] + proposals[:, :4] = bbox_mapping(proposals[:, :4], img_shape, + scale_factor, flip, + flip_direction) + return [proposal.cpu().numpy() for proposal in proposal_list] + + def show_result(self, data, result, dataset=None, top_k=20): + """Show RPN proposals on the image. + + Although we assume batch size is 1, this method supports arbitrary + batch size. + """ + img_tensor = data['img'][0] + img_metas = data['img_metas'][0].data[0] + imgs = tensor2imgs(img_tensor, **img_metas[0]['img_norm_cfg']) + assert len(imgs) == len(img_metas) + for img, img_meta in zip(imgs, img_metas): + h, w, _ = img_meta['img_shape'] + img_show = img[:h, :w, :] + mmcv.imshow_bboxes(img_show, result, top_k=top_k) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/single_stage.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/single_stage.py new file mode 100644 index 00000000..ce6b26ea --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/single_stage.py @@ -0,0 +1,149 @@ +import torch +import torch.nn as nn + +from mmdet.core import bbox2result +from ..builder import DETECTORS, build_backbone, build_head, build_neck +from .base import BaseDetector + + +@DETECTORS.register_module() +class SingleStageDetector(BaseDetector): + """Base class for single-stage detectors. + + Single-stage detectors directly and densely predict bounding boxes on the + output features of the backbone+neck. + """ + + def __init__(self, + backbone, + neck=None, + bbox_head=None, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(SingleStageDetector, self).__init__() + self.backbone = build_backbone(backbone) + if neck is not None: + self.neck = build_neck(neck) + bbox_head.update(train_cfg=train_cfg) + bbox_head.update(test_cfg=test_cfg) + self.bbox_head = build_head(bbox_head) + self.train_cfg = train_cfg + self.test_cfg = test_cfg + self.init_weights(pretrained=pretrained) + + def init_weights(self, pretrained=None): + """Initialize the weights in detector. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + super(SingleStageDetector, self).init_weights(pretrained) + self.backbone.init_weights(pretrained=pretrained) + if self.with_neck: + if isinstance(self.neck, nn.Sequential): + for m in self.neck: + m.init_weights() + else: + self.neck.init_weights() + self.bbox_head.init_weights() + + def extract_feat(self, img): + """Directly extract features from the backbone+neck.""" + x = self.backbone(img) + if self.with_neck: + x = self.neck(x) + return x + + def forward_dummy(self, img): + """Used for computing network flops. + + See `mmdetection/tools/analysis_tools/get_flops.py` + """ + x = self.extract_feat(img) + outs = self.bbox_head(x) + return outs + + def forward_train(self, + img, + img_metas, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None): + """ + Args: + img (Tensor): Input images of shape (N, C, H, W). + Typically these should be mean centered and std scaled. + img_metas (list[dict]): A List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + :class:`mmdet.datasets.pipelines.Collect`. + gt_bboxes (list[Tensor]): Each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): Class indices corresponding to each box + gt_bboxes_ignore (None | list[Tensor]): Specify which bounding + boxes can be ignored when computing the loss. + + Returns: + dict[str, Tensor]: A dictionary of loss components. + """ + super(SingleStageDetector, self).forward_train(img, img_metas) + x = self.extract_feat(img) + losses = self.bbox_head.forward_train(x, img_metas, gt_bboxes, + gt_labels, gt_bboxes_ignore) + return losses + + def simple_test(self, img, img_metas, rescale=False): + """Test function without test time augmentation. + + Args: + imgs (list[torch.Tensor]): List of multiple images + img_metas (list[dict]): List of image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[list[np.ndarray]]: BBox results of each image and classes. + The outer list corresponds to each image. The inner list + corresponds to each class. + """ + x = self.extract_feat(img) + outs = self.bbox_head(x) + bbox_list = self.bbox_head.get_bboxes( + *outs, img_metas, rescale=rescale) + # skip post-processing when exporting to ONNX + if torch.onnx.is_in_onnx_export(): + return bbox_list + + bbox_results = [ + bbox2result(det_bboxes, det_labels, self.bbox_head.num_classes) + for det_bboxes, det_labels in bbox_list + ] + return bbox_results + + def aug_test(self, imgs, img_metas, rescale=False): + """Test function with test time augmentation. + + Args: + imgs (list[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains all images in the batch. + img_metas (list[list[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. each dict has image information. + rescale (bool, optional): Whether to rescale the results. + Defaults to False. + + Returns: + list[list[np.ndarray]]: BBox results of each image and classes. + The outer list corresponds to each image. The inner list + corresponds to each class. + """ + assert hasattr(self.bbox_head, 'aug_test'), \ + f'{self.bbox_head.__class__.__name__}' \ + ' does not support test-time augmentation' + + feats = self.extract_feats(imgs) + return [self.bbox_head.aug_test(feats, img_metas, rescale=rescale)] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/sparse_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/sparse_rcnn.py new file mode 100644 index 00000000..a5dcc84c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/sparse_rcnn.py @@ -0,0 +1,110 @@ +from ..builder import DETECTORS +from .two_stage import TwoStageDetector + + +@DETECTORS.register_module() +class SparseRCNN(TwoStageDetector): + r"""Implementation of `Sparse R-CNN: End-to-End Object Detection with + Learnable Proposals `_""" + + def __init__(self, *args, **kwargs): + super(SparseRCNN, self).__init__(*args, **kwargs) + assert self.with_rpn, 'Sparse R-CNN do not support external proposals' + + def forward_train(self, + img, + img_metas, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None, + proposals=None, + **kwargs): + """Forward function of SparseR-CNN in train stage. + + Args: + img (Tensor): of shape (N, C, H, W) encoding input images. + Typically these should be mean centered and std scaled. + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + :class:`mmdet.datasets.pipelines.Collect`. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + gt_bboxes_ignore (None | list[Tensor): specify which bounding + boxes can be ignored when computing the loss. + gt_masks (List[Tensor], optional) : Segmentation masks for + each box. But we don't support it in this architecture. + proposals (List[Tensor], optional): override rpn proposals with + custom proposals. Use when `with_rpn` is False. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + + assert proposals is None, 'Sparse R-CNN does not support' \ + ' external proposals' + assert gt_masks is None, 'Sparse R-CNN does not instance segmenntaion' + + x = self.extract_feat(img) + proposal_boxes, proposal_features, imgs_whwh = \ + self.rpn_head.forward_train(x, img_metas) + roi_losses = self.roi_head.forward_train( + x, + proposal_boxes, + proposal_features, + img_metas, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=gt_bboxes_ignore, + gt_masks=gt_masks, + imgs_whwh=imgs_whwh) + return roi_losses + + def simple_test(self, img, img_metas, rescale=False): + """Test function without test time augmentation. + + Args: + imgs (list[torch.Tensor]): List of multiple images + img_metas (list[dict]): List of image information. + rescale (bool): Whether to rescale the results. + Defaults to False. + + Returns: + list[list[np.ndarray]]: BBox results of each image and classes. + The outer list corresponds to each image. The inner list + corresponds to each class. + """ + x = self.extract_feat(img) + proposal_boxes, proposal_features, imgs_whwh = \ + self.rpn_head.simple_test_rpn(x, img_metas) + bbox_results = self.roi_head.simple_test( + x, + proposal_boxes, + proposal_features, + img_metas, + imgs_whwh=imgs_whwh, + rescale=rescale) + return bbox_results + + def forward_dummy(self, img): + """Used for computing network flops. + + See `mmdetection/tools/analysis_tools/get_flops.py` + """ + # backbone + x = self.extract_feat(img) + # rpn + num_imgs = len(img) + dummy_img_metas = [ + dict(img_shape=(800, 1333, 3)) for _ in range(num_imgs) + ] + proposal_boxes, proposal_features, imgs_whwh = \ + self.rpn_head.simple_test_rpn(x, dummy_img_metas) + # roi_head + roi_outs = self.roi_head.forward_dummy(x, proposal_boxes, + proposal_features, + dummy_img_metas) + return roi_outs diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/trident_faster_rcnn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/trident_faster_rcnn.py new file mode 100644 index 00000000..f0fd80d4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/trident_faster_rcnn.py @@ -0,0 +1,66 @@ +from ..builder import DETECTORS +from .faster_rcnn import FasterRCNN + + +@DETECTORS.register_module() +class TridentFasterRCNN(FasterRCNN): + """Implementation of `TridentNet `_""" + + def __init__(self, + backbone, + rpn_head, + roi_head, + train_cfg, + test_cfg, + neck=None, + pretrained=None): + + super(TridentFasterRCNN, self).__init__( + backbone=backbone, + neck=neck, + rpn_head=rpn_head, + roi_head=roi_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) + assert self.backbone.num_branch == self.roi_head.num_branch + assert self.backbone.test_branch_idx == self.roi_head.test_branch_idx + self.num_branch = self.backbone.num_branch + self.test_branch_idx = self.backbone.test_branch_idx + + def simple_test(self, img, img_metas, proposals=None, rescale=False): + """Test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + x = self.extract_feat(img) + if proposals is None: + num_branch = (self.num_branch if self.test_branch_idx == -1 else 1) + trident_img_metas = img_metas * num_branch + proposal_list = self.rpn_head.simple_test_rpn(x, trident_img_metas) + else: + proposal_list = proposals + + return self.roi_head.simple_test( + x, proposal_list, trident_img_metas, rescale=rescale) + + def aug_test(self, imgs, img_metas, rescale=False): + """Test with augmentations. + + If rescale is False, then returned bboxes and masks will fit the scale + of imgs[0]. + """ + x = self.extract_feats(imgs) + num_branch = (self.num_branch if self.test_branch_idx == -1 else 1) + trident_img_metas = [img_metas * num_branch for img_metas in img_metas] + proposal_list = self.rpn_head.aug_test_rpn(x, trident_img_metas) + return self.roi_head.aug_test( + x, proposal_list, img_metas, rescale=rescale) + + def forward_train(self, img, img_metas, gt_bboxes, gt_labels, **kwargs): + """make copies of img and gts to fit multi-branch.""" + trident_gt_bboxes = tuple(gt_bboxes * self.num_branch) + trident_gt_labels = tuple(gt_labels * self.num_branch) + trident_img_metas = tuple(img_metas * self.num_branch) + + return super(TridentFasterRCNN, + self).forward_train(img, trident_img_metas, + trident_gt_bboxes, trident_gt_labels) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/two_stage.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/two_stage.py new file mode 100644 index 00000000..24114cf3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/two_stage.py @@ -0,0 +1,210 @@ +import torch +import torch.nn as nn + +# from mmdet.core import bbox2result, bbox2roi, build_assigner, build_sampler +from ..builder import DETECTORS, build_backbone, build_head, build_neck +from .base import BaseDetector + + +@DETECTORS.register_module() +class TwoStageDetector(BaseDetector): + """Base class for two-stage detectors. + + Two-stage detectors typically consisting of a region proposal network and a + task-specific regression head. + """ + + def __init__(self, + backbone, + neck=None, + rpn_head=None, + roi_head=None, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(TwoStageDetector, self).__init__() + self.backbone = build_backbone(backbone) + + if neck is not None: + self.neck = build_neck(neck) + + if rpn_head is not None: + rpn_train_cfg = train_cfg.rpn if train_cfg is not None else None + rpn_head_ = rpn_head.copy() + rpn_head_.update(train_cfg=rpn_train_cfg, test_cfg=test_cfg.rpn) + self.rpn_head = build_head(rpn_head_) + + if roi_head is not None: + # update train and test cfg here for now + # TODO: refactor assigner & sampler + rcnn_train_cfg = train_cfg.rcnn if train_cfg is not None else None + roi_head.update(train_cfg=rcnn_train_cfg) + roi_head.update(test_cfg=test_cfg.rcnn) + self.roi_head = build_head(roi_head) + + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + self.init_weights(pretrained=pretrained) + + @property + def with_rpn(self): + """bool: whether the detector has RPN""" + return hasattr(self, 'rpn_head') and self.rpn_head is not None + + @property + def with_roi_head(self): + """bool: whether the detector has a RoI head""" + return hasattr(self, 'roi_head') and self.roi_head is not None + + def init_weights(self, pretrained=None): + """Initialize the weights in detector. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + super(TwoStageDetector, self).init_weights(pretrained) + self.backbone.init_weights(pretrained=pretrained) + if self.with_neck: + if isinstance(self.neck, nn.Sequential): + for m in self.neck: + m.init_weights() + else: + self.neck.init_weights() + if self.with_rpn: + self.rpn_head.init_weights() + if self.with_roi_head: + self.roi_head.init_weights(pretrained) + + def extract_feat(self, img): + """Directly extract features from the backbone+neck.""" + x = self.backbone(img) + if self.with_neck: + x = self.neck(x) + return x + + def forward_dummy(self, img): + """Used for computing network flops. + + See `mmdetection/tools/analysis_tools/get_flops.py` + """ + outs = () + # backbone + x = self.extract_feat(img) + # rpn + if self.with_rpn: + rpn_outs = self.rpn_head(x) + outs = outs + (rpn_outs, ) + proposals = torch.randn(1000, 4).to(img.device) + # roi_head + roi_outs = self.roi_head.forward_dummy(x, proposals) + outs = outs + (roi_outs, ) + return outs + + def forward_train(self, + img, + img_metas, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None, + proposals=None, + **kwargs): + """ + Args: + img (Tensor): of shape (N, C, H, W) encoding input images. + Typically these should be mean centered and std scaled. + + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + + gt_labels (list[Tensor]): class indices corresponding to each box + + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + gt_masks (None | Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + proposals : override rpn proposals with custom proposals. Use when + `with_rpn` is False. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + x = self.extract_feat(img) + + losses = dict() + + # RPN forward and loss + if self.with_rpn: + proposal_cfg = self.train_cfg.get('rpn_proposal', + self.test_cfg.rpn) + rpn_losses, proposal_list = self.rpn_head.forward_train( + x, + img_metas, + gt_bboxes, + gt_labels=None, + gt_bboxes_ignore=gt_bboxes_ignore, + proposal_cfg=proposal_cfg) + losses.update(rpn_losses) + else: + proposal_list = proposals + + roi_losses = self.roi_head.forward_train(x, img_metas, proposal_list, + gt_bboxes, gt_labels, + gt_bboxes_ignore, gt_masks, + **kwargs) + losses.update(roi_losses) + + return losses + + async def async_simple_test(self, + img, + img_meta, + proposals=None, + rescale=False): + """Async test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + x = self.extract_feat(img) + + if proposals is None: + proposal_list = await self.rpn_head.async_simple_test_rpn( + x, img_meta) + else: + proposal_list = proposals + + return await self.roi_head.async_simple_test( + x, proposal_list, img_meta, rescale=rescale) + + def simple_test(self, img, img_metas, proposals=None, rescale=False): + """Test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + + x = self.extract_feat(img) + + if proposals is None: + proposal_list = self.rpn_head.simple_test_rpn(x, img_metas) + else: + proposal_list = proposals + + return self.roi_head.simple_test( + x, proposal_list, img_metas, rescale=rescale) + + def aug_test(self, imgs, img_metas, rescale=False): + """Test with augmentations. + + If rescale is False, then returned bboxes and masks will fit the scale + of imgs[0]. + """ + x = self.extract_feats(imgs) + proposal_list = self.rpn_head.aug_test_rpn(x, img_metas) + return self.roi_head.aug_test( + x, proposal_list, img_metas, rescale=rescale) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/vfnet.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/vfnet.py new file mode 100644 index 00000000..e23f8967 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/vfnet.py @@ -0,0 +1,18 @@ +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class VFNet(SingleStageDetector): + """Implementation of `VarifocalNet + (VFNet).`_""" + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(VFNet, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolact.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolact.py new file mode 100644 index 00000000..f131a83d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolact.py @@ -0,0 +1,146 @@ +import torch + +from mmdet.core import bbox2result +from ..builder import DETECTORS, build_head +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class YOLACT(SingleStageDetector): + """Implementation of `YOLACT `_""" + + def __init__(self, + backbone, + neck, + bbox_head, + segm_head, + mask_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(YOLACT, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) + self.segm_head = build_head(segm_head) + self.mask_head = build_head(mask_head) + self.init_segm_mask_weights() + + def init_segm_mask_weights(self): + """Initialize weights of the YOLACT semg head and YOLACT mask head.""" + self.segm_head.init_weights() + self.mask_head.init_weights() + + def forward_dummy(self, img): + """Used for computing network flops. + + See `mmdetection/tools/analysis_tools/get_flops.py` + """ + raise NotImplementedError + + def forward_train(self, + img, + img_metas, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None): + """ + Args: + img (Tensor): of shape (N, C, H, W) encoding input images. + Typically these should be mean centered and std scaled. + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + gt_masks (None | Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + # convert Bitmap mask or Polygon Mask to Tensor here + gt_masks = [ + gt_mask.to_tensor(dtype=torch.uint8, device=img.device) + for gt_mask in gt_masks + ] + + x = self.extract_feat(img) + + cls_score, bbox_pred, coeff_pred = self.bbox_head(x) + bbox_head_loss_inputs = (cls_score, bbox_pred) + (gt_bboxes, gt_labels, + img_metas) + losses, sampling_results = self.bbox_head.loss( + *bbox_head_loss_inputs, gt_bboxes_ignore=gt_bboxes_ignore) + + segm_head_outs = self.segm_head(x[0]) + loss_segm = self.segm_head.loss(segm_head_outs, gt_masks, gt_labels) + losses.update(loss_segm) + + mask_pred = self.mask_head(x[0], coeff_pred, gt_bboxes, img_metas, + sampling_results) + loss_mask = self.mask_head.loss(mask_pred, gt_masks, gt_bboxes, + img_metas, sampling_results) + losses.update(loss_mask) + + # check NaN and Inf + for loss_name in losses.keys(): + assert torch.isfinite(torch.stack(losses[loss_name]))\ + .all().item(), '{} becomes infinite or NaN!'\ + .format(loss_name) + + return losses + + def simple_test(self, img, img_metas, rescale=False): + """Test function without test time augmentation.""" + x = self.extract_feat(img) + + cls_score, bbox_pred, coeff_pred = self.bbox_head(x) + + bbox_inputs = (cls_score, bbox_pred, + coeff_pred) + (img_metas, self.test_cfg, rescale) + det_bboxes, det_labels, det_coeffs = self.bbox_head.get_bboxes( + *bbox_inputs) + bbox_results = [ + bbox2result(det_bbox, det_label, self.bbox_head.num_classes) + for det_bbox, det_label in zip(det_bboxes, det_labels) + ] + + num_imgs = len(img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + if all(det_bbox.shape[0] == 0 for det_bbox in det_bboxes): + segm_results = [[[] for _ in range(self.mask_head.num_classes)] + for _ in range(num_imgs)] + else: + # if det_bboxes is rescaled to the original image size, we need to + # rescale it back to the testing scale to obtain RoIs. + if rescale and not isinstance(scale_factors[0], float): + scale_factors = [ + torch.from_numpy(scale_factor).to(det_bboxes[0].device) + for scale_factor in scale_factors + ] + _bboxes = [ + det_bboxes[i][:, :4] * + scale_factors[i] if rescale else det_bboxes[i][:, :4] + for i in range(len(det_bboxes)) + ] + mask_preds = self.mask_head(x[0], det_coeffs, _bboxes, img_metas) + # apply mask post-processing to each image individually + segm_results = [] + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + segm_results.append( + [[] for _ in range(self.mask_head.num_classes)]) + else: + segm_result = self.mask_head.get_seg_masks( + mask_preds[i], det_labels[i], img_metas[i], rescale) + segm_results.append(segm_result) + return list(zip(bbox_results, segm_results)) + + def aug_test(self, imgs, img_metas, rescale=False): + """Test with augmentations.""" + raise NotImplementedError diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolo.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolo.py new file mode 100644 index 00000000..240aab20 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/detectors/yolo.py @@ -0,0 +1,18 @@ +# Copyright (c) 2019 Western Digital Corporation or its affiliates. + +from ..builder import DETECTORS +from .single_stage import SingleStageDetector + + +@DETECTORS.register_module() +class YOLOV3(SingleStageDetector): + + def __init__(self, + backbone, + neck, + bbox_head, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(YOLOV3, self).__init__(backbone, neck, bbox_head, train_cfg, + test_cfg, pretrained) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/__init__.py new file mode 100644 index 00000000..bb887d37 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/__init__.py @@ -0,0 +1,28 @@ +from .accuracy import Accuracy, accuracy +from .ae_loss import AssociativeEmbeddingLoss +from .balanced_l1_loss import BalancedL1Loss, balanced_l1_loss +from .cross_entropy_loss import (CrossEntropyLoss, binary_cross_entropy, + cross_entropy, mask_cross_entropy) +from .focal_loss import FocalLoss, sigmoid_focal_loss +from .gaussian_focal_loss import GaussianFocalLoss +from .gfocal_loss import DistributionFocalLoss, QualityFocalLoss +from .ghm_loss import GHMC, GHMR +from .iou_loss import (BoundedIoULoss, CIoULoss, DIoULoss, GIoULoss, IoULoss, + bounded_iou_loss, iou_loss) +from .mse_loss import MSELoss, mse_loss +from .pisa_loss import carl_loss, isr_p +from .smooth_l1_loss import L1Loss, SmoothL1Loss, l1_loss, smooth_l1_loss +from .utils import reduce_loss, weight_reduce_loss, weighted_loss +from .varifocal_loss import VarifocalLoss + +__all__ = [ + 'accuracy', 'Accuracy', 'cross_entropy', 'binary_cross_entropy', + 'mask_cross_entropy', 'CrossEntropyLoss', 'sigmoid_focal_loss', + 'FocalLoss', 'smooth_l1_loss', 'SmoothL1Loss', 'balanced_l1_loss', + 'BalancedL1Loss', 'mse_loss', 'MSELoss', 'iou_loss', 'bounded_iou_loss', + 'IoULoss', 'BoundedIoULoss', 'GIoULoss', 'DIoULoss', 'CIoULoss', 'GHMC', + 'GHMR', 'reduce_loss', 'weight_reduce_loss', 'weighted_loss', 'L1Loss', + 'l1_loss', 'isr_p', 'carl_loss', 'AssociativeEmbeddingLoss', + 'GaussianFocalLoss', 'QualityFocalLoss', 'DistributionFocalLoss', + 'VarifocalLoss' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/accuracy.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/accuracy.py new file mode 100644 index 00000000..924ebbed --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/accuracy.py @@ -0,0 +1,76 @@ +import torch.nn as nn + + +def accuracy(pred, target, topk=1, thresh=None): + """Calculate accuracy according to the prediction and target. + + Args: + pred (torch.Tensor): The model prediction, shape (N, num_class) + target (torch.Tensor): The target of each prediction, shape (N, ) + topk (int | tuple[int], optional): If the predictions in ``topk`` + matches the target, the predictions will be regarded as + correct ones. Defaults to 1. + thresh (float, optional): If not None, predictions with scores under + this threshold are considered incorrect. Default to None. + + Returns: + float | tuple[float]: If the input ``topk`` is a single integer, + the function will return a single float as accuracy. If + ``topk`` is a tuple containing multiple integers, the + function will return a tuple containing accuracies of + each ``topk`` number. + """ + assert isinstance(topk, (int, tuple)) + if isinstance(topk, int): + topk = (topk, ) + return_single = True + else: + return_single = False + + maxk = max(topk) + if pred.size(0) == 0: + accu = [pred.new_tensor(0.) for i in range(len(topk))] + return accu[0] if return_single else accu + assert pred.ndim == 2 and target.ndim == 1 + assert pred.size(0) == target.size(0) + assert maxk <= pred.size(1), \ + f'maxk {maxk} exceeds pred dimension {pred.size(1)}' + pred_value, pred_label = pred.topk(maxk, dim=1) + pred_label = pred_label.t() # transpose to shape (maxk, N) + correct = pred_label.eq(target.view(1, -1).expand_as(pred_label)) + if thresh is not None: + # Only prediction values larger than thresh are counted as correct + correct = correct & (pred_value > thresh).t() + res = [] + for k in topk: + correct_k = correct[:k].reshape(-1).float().sum(0, keepdim=True) + res.append(correct_k.mul_(100.0 / pred.size(0))) + return res[0] if return_single else res + + +class Accuracy(nn.Module): + + def __init__(self, topk=(1, ), thresh=None): + """Module to calculate the accuracy. + + Args: + topk (tuple, optional): The criterion used to calculate the + accuracy. Defaults to (1,). + thresh (float, optional): If not None, predictions with scores + under this threshold are considered incorrect. Default to None. + """ + super().__init__() + self.topk = topk + self.thresh = thresh + + def forward(self, pred, target): + """Forward function to calculate accuracy. + + Args: + pred (torch.Tensor): Prediction of models. + target (torch.Tensor): Target for each prediction. + + Returns: + tuple[float]: The accuracies under different topk criterions. + """ + return accuracy(pred, target, self.topk, self.thresh) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ae_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ae_loss.py new file mode 100644 index 00000000..6077652c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ae_loss.py @@ -0,0 +1,100 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES + + +def ae_loss_per_image(tl_preds, br_preds, match): + """Associative Embedding Loss in one image. + + Associative Embedding Loss including two parts: pull loss and push loss. + Pull loss makes embedding vectors from same object closer to each other. + Push loss distinguish embedding vector from different objects, and makes + the gap between them is large enough. + + During computing, usually there are 3 cases: + - no object in image: both pull loss and push loss will be 0. + - one object in image: push loss will be 0 and pull loss is computed + by the two corner of the only object. + - more than one objects in image: pull loss is computed by corner pairs + from each object, push loss is computed by each object with all + other objects. We use confusion matrix with 0 in diagonal to + compute the push loss. + + Args: + tl_preds (tensor): Embedding feature map of left-top corner. + br_preds (tensor): Embedding feature map of bottim-right corner. + match (list): Downsampled coordinates pair of each ground truth box. + """ + + tl_list, br_list, me_list = [], [], [] + if len(match) == 0: # no object in image + pull_loss = tl_preds.sum() * 0. + push_loss = tl_preds.sum() * 0. + else: + for m in match: + [tl_y, tl_x], [br_y, br_x] = m + tl_e = tl_preds[:, tl_y, tl_x].view(-1, 1) + br_e = br_preds[:, br_y, br_x].view(-1, 1) + tl_list.append(tl_e) + br_list.append(br_e) + me_list.append((tl_e + br_e) / 2.0) + + tl_list = torch.cat(tl_list) + br_list = torch.cat(br_list) + me_list = torch.cat(me_list) + + assert tl_list.size() == br_list.size() + + # N is object number in image, M is dimension of embedding vector + N, M = tl_list.size() + + pull_loss = (tl_list - me_list).pow(2) + (br_list - me_list).pow(2) + pull_loss = pull_loss.sum() / N + + margin = 1 # exp setting of CornerNet, details in section 3.3 of paper + + # confusion matrix of push loss + conf_mat = me_list.expand((N, N, M)).permute(1, 0, 2) - me_list + conf_weight = 1 - torch.eye(N).type_as(me_list) + conf_mat = conf_weight * (margin - conf_mat.sum(-1).abs()) + + if N > 1: # more than one object in current image + push_loss = F.relu(conf_mat).sum() / (N * (N - 1)) + else: + push_loss = tl_preds.sum() * 0. + + return pull_loss, push_loss + + +@LOSSES.register_module() +class AssociativeEmbeddingLoss(nn.Module): + """Associative Embedding Loss. + + More details can be found in + `Associative Embedding `_ and + `CornerNet `_ . + Code is modified from `kp_utils.py `_ # noqa: E501 + + Args: + pull_weight (float): Loss weight for corners from same object. + push_weight (float): Loss weight for corners from different object. + """ + + def __init__(self, pull_weight=0.25, push_weight=0.25): + super(AssociativeEmbeddingLoss, self).__init__() + self.pull_weight = pull_weight + self.push_weight = push_weight + + def forward(self, pred, target, match): + """Forward function.""" + batch = pred.size(0) + pull_all, push_all = 0.0, 0.0 + for i in range(batch): + pull, push = ae_loss_per_image(pred[i], target[i], match[i]) + + pull_all += self.pull_weight * pull + push_all += self.push_weight * push + + return pull_all, push_all diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/balanced_l1_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/balanced_l1_loss.py new file mode 100644 index 00000000..3790a80b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/balanced_l1_loss.py @@ -0,0 +1,118 @@ +import numpy as np +import torch +import torch.nn as nn + +from ..builder import LOSSES +from .utils import weighted_loss + + +@weighted_loss +def balanced_l1_loss(pred, + target, + beta=1.0, + alpha=0.5, + gamma=1.5, + reduction='mean'): + """Calculate balanced L1 loss. + + Please see the `Libra R-CNN `_ + + Args: + pred (torch.Tensor): The prediction with shape (N, 4). + target (torch.Tensor): The learning target of the prediction with + shape (N, 4). + beta (float): The loss is a piecewise function of prediction and target + and ``beta`` serves as a threshold for the difference between the + prediction and target. Defaults to 1.0. + alpha (float): The denominator ``alpha`` in the balanced L1 loss. + Defaults to 0.5. + gamma (float): The ``gamma`` in the balanced L1 loss. + Defaults to 1.5. + reduction (str, optional): The method that reduces the loss to a + scalar. Options are "none", "mean" and "sum". + + Returns: + torch.Tensor: The calculated loss + """ + assert beta > 0 + assert pred.size() == target.size() and target.numel() > 0 + + diff = torch.abs(pred - target) + b = np.e**(gamma / alpha) - 1 + loss = torch.where( + diff < beta, alpha / b * + (b * diff + 1) * torch.log(b * diff / beta + 1) - alpha * diff, + gamma * diff + gamma / b - alpha * beta) + + return loss + + +@LOSSES.register_module() +class BalancedL1Loss(nn.Module): + """Balanced L1 Loss. + + arXiv: https://arxiv.org/pdf/1904.02701.pdf (CVPR 2019) + + Args: + alpha (float): The denominator ``alpha`` in the balanced L1 loss. + Defaults to 0.5. + gamma (float): The ``gamma`` in the balanced L1 loss. Defaults to 1.5. + beta (float, optional): The loss is a piecewise function of prediction + and target. ``beta`` serves as a threshold for the difference + between the prediction and target. Defaults to 1.0. + reduction (str, optional): The method that reduces the loss to a + scalar. Options are "none", "mean" and "sum". + loss_weight (float, optional): The weight of the loss. Defaults to 1.0 + """ + + def __init__(self, + alpha=0.5, + gamma=1.5, + beta=1.0, + reduction='mean', + loss_weight=1.0): + super(BalancedL1Loss, self).__init__() + self.alpha = alpha + self.gamma = gamma + self.beta = beta + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + """Forward function of loss. + + Args: + pred (torch.Tensor): The prediction with shape (N, 4). + target (torch.Tensor): The learning target of the prediction with + shape (N, 4). + weight (torch.Tensor, optional): Sample-wise loss weight with + shape (N, ). + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Options are "none", "mean" and "sum". + + Returns: + torch.Tensor: The calculated loss + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss_bbox = self.loss_weight * balanced_l1_loss( + pred, + target, + weight, + alpha=self.alpha, + gamma=self.gamma, + beta=self.beta, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss_bbox diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/cross_entropy_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/cross_entropy_loss.py new file mode 100644 index 00000000..1f283dd8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/cross_entropy_loss.py @@ -0,0 +1,201 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES +from .utils import weight_reduce_loss + + +def cross_entropy(pred, + label, + weight=None, + reduction='mean', + avg_factor=None, + class_weight=None): + """Calculate the CrossEntropy loss. + + Args: + pred (torch.Tensor): The prediction with shape (N, C), C is the number + of classes. + label (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): Sample-wise loss weight. + reduction (str, optional): The method used to reduce the loss. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + class_weight (list[float], optional): The weight for each class. + + Returns: + torch.Tensor: The calculated loss + """ + # element-wise losses + loss = F.cross_entropy(pred, label, weight=class_weight, reduction='none') + + # apply weights and do the reduction + if weight is not None: + weight = weight.float() + loss = weight_reduce_loss( + loss, weight=weight, reduction=reduction, avg_factor=avg_factor) + + return loss + + +def _expand_onehot_labels(labels, label_weights, label_channels): + bin_labels = labels.new_full((labels.size(0), label_channels), 0) + inds = torch.nonzero( + (labels >= 0) & (labels < label_channels), as_tuple=False).squeeze() + if inds.numel() > 0: + bin_labels[inds, labels[inds]] = 1 + + if label_weights is None: + bin_label_weights = None + else: + bin_label_weights = label_weights.view(-1, 1).expand( + label_weights.size(0), label_channels) + + return bin_labels, bin_label_weights + + +def binary_cross_entropy(pred, + label, + weight=None, + reduction='mean', + avg_factor=None, + class_weight=None): + """Calculate the binary CrossEntropy loss. + + Args: + pred (torch.Tensor): The prediction with shape (N, 1). + label (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): Sample-wise loss weight. + reduction (str, optional): The method used to reduce the loss. + Options are "none", "mean" and "sum". + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + class_weight (list[float], optional): The weight for each class. + + Returns: + torch.Tensor: The calculated loss + """ + if pred.dim() != label.dim(): + label, weight = _expand_onehot_labels(label, weight, pred.size(-1)) + + # weighted element-wise losses + if weight is not None: + weight = weight.float() + loss = F.binary_cross_entropy_with_logits( + pred, label.float(), pos_weight=class_weight, reduction='none') + # do the reduction for the weighted loss + loss = weight_reduce_loss( + loss, weight, reduction=reduction, avg_factor=avg_factor) + + return loss + + +def mask_cross_entropy(pred, + target, + label, + reduction='mean', + avg_factor=None, + class_weight=None): + """Calculate the CrossEntropy loss for masks. + + Args: + pred (torch.Tensor): The prediction with shape (N, C), C is the number + of classes. + target (torch.Tensor): The learning label of the prediction. + label (torch.Tensor): ``label`` indicates the class label of the mask' + corresponding object. This will be used to select the mask in the + of the class which the object belongs to when the mask prediction + if not class-agnostic. + reduction (str, optional): The method used to reduce the loss. + Options are "none", "mean" and "sum". + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + class_weight (list[float], optional): The weight for each class. + + Returns: + torch.Tensor: The calculated loss + """ + # TODO: handle these two reserved arguments + assert reduction == 'mean' and avg_factor is None + num_rois = pred.size()[0] + inds = torch.arange(0, num_rois, dtype=torch.long, device=pred.device) + pred_slice = pred[inds, label].squeeze(1) + return F.binary_cross_entropy_with_logits( + pred_slice, target, weight=class_weight, reduction='mean')[None] + + +@LOSSES.register_module() +class CrossEntropyLoss(nn.Module): + + def __init__(self, + use_sigmoid=False, + use_mask=False, + reduction='mean', + class_weight=None, + loss_weight=1.0): + """CrossEntropyLoss. + + Args: + use_sigmoid (bool, optional): Whether the prediction uses sigmoid + of softmax. Defaults to False. + use_mask (bool, optional): Whether to use mask cross entropy loss. + Defaults to False. + reduction (str, optional): . Defaults to 'mean'. + Options are "none", "mean" and "sum". + class_weight (list[float], optional): Weight of each class. + Defaults to None. + loss_weight (float, optional): Weight of the loss. Defaults to 1.0. + """ + super(CrossEntropyLoss, self).__init__() + assert (use_sigmoid is False) or (use_mask is False) + self.use_sigmoid = use_sigmoid + self.use_mask = use_mask + self.reduction = reduction + self.loss_weight = loss_weight + self.class_weight = class_weight + + if self.use_sigmoid: + self.cls_criterion = binary_cross_entropy + elif self.use_mask: + self.cls_criterion = mask_cross_entropy + else: + self.cls_criterion = cross_entropy + + def forward(self, + cls_score, + label, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + """Forward function. + + Args: + cls_score (torch.Tensor): The prediction. + label (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): Sample-wise loss weight. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction (str, optional): The method used to reduce the loss. + Options are "none", "mean" and "sum". + Returns: + torch.Tensor: The calculated loss + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if self.class_weight is not None: + class_weight = cls_score.new_tensor( + self.class_weight, device=cls_score.device) + else: + class_weight = None + loss_cls = self.loss_weight * self.cls_criterion( + cls_score, + label, + weight, + class_weight=class_weight, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss_cls diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/focal_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/focal_loss.py new file mode 100644 index 00000000..493907c6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/focal_loss.py @@ -0,0 +1,181 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.ops import sigmoid_focal_loss as _sigmoid_focal_loss + +from ..builder import LOSSES +from .utils import weight_reduce_loss + + +# This method is only for debugging +def py_sigmoid_focal_loss(pred, + target, + weight=None, + gamma=2.0, + alpha=0.25, + reduction='mean', + avg_factor=None): + """PyTorch version of `Focal Loss `_. + + Args: + pred (torch.Tensor): The prediction with shape (N, C), C is the + number of classes + target (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): Sample-wise loss weight. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 2.0. + alpha (float, optional): A balanced form for Focal Loss. + Defaults to 0.25. + reduction (str, optional): The method used to reduce the loss into + a scalar. Defaults to 'mean'. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + """ + pred_sigmoid = pred.sigmoid() + target = target.type_as(pred) + pt = (1 - pred_sigmoid) * target + pred_sigmoid * (1 - target) + focal_weight = (alpha * target + (1 - alpha) * + (1 - target)) * pt.pow(gamma) + loss = F.binary_cross_entropy_with_logits( + pred, target, reduction='none') * focal_weight + if weight is not None: + if weight.shape != loss.shape: + if weight.size(0) == loss.size(0): + # For most cases, weight is of shape (num_priors, ), + # which means it does not have the second axis num_class + weight = weight.view(-1, 1) + else: + # Sometimes, weight per anchor per class is also needed. e.g. + # in FSAF. But it may be flattened of shape + # (num_priors x num_class, ), while loss is still of shape + # (num_priors, num_class). + assert weight.numel() == loss.numel() + weight = weight.view(loss.size(0), -1) + assert weight.ndim == loss.ndim + loss = weight_reduce_loss(loss, weight, reduction, avg_factor) + return loss + + +def sigmoid_focal_loss(pred, + target, + weight=None, + gamma=2.0, + alpha=0.25, + reduction='mean', + avg_factor=None): + r"""A warpper of cuda version `Focal Loss + `_. + + Args: + pred (torch.Tensor): The prediction with shape (N, C), C is the number + of classes. + target (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): Sample-wise loss weight. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 2.0. + alpha (float, optional): A balanced form for Focal Loss. + Defaults to 0.25. + reduction (str, optional): The method used to reduce the loss into + a scalar. Defaults to 'mean'. Options are "none", "mean" and "sum". + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + """ + # Function.apply does not accept keyword arguments, so the decorator + # "weighted_loss" is not applicable + loss = _sigmoid_focal_loss(pred.contiguous(), target, gamma, alpha, None, + 'none') + if weight is not None: + if weight.shape != loss.shape: + if weight.size(0) == loss.size(0): + # For most cases, weight is of shape (num_priors, ), + # which means it does not have the second axis num_class + weight = weight.view(-1, 1) + else: + # Sometimes, weight per anchor per class is also needed. e.g. + # in FSAF. But it may be flattened of shape + # (num_priors x num_class, ), while loss is still of shape + # (num_priors, num_class). + assert weight.numel() == loss.numel() + weight = weight.view(loss.size(0), -1) + assert weight.ndim == loss.ndim + loss = weight_reduce_loss(loss, weight, reduction, avg_factor) + return loss + + +@LOSSES.register_module() +class FocalLoss(nn.Module): + + def __init__(self, + use_sigmoid=True, + gamma=2.0, + alpha=0.25, + reduction='mean', + loss_weight=1.0): + """`Focal Loss `_ + + Args: + use_sigmoid (bool, optional): Whether to the prediction is + used for sigmoid or softmax. Defaults to True. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 2.0. + alpha (float, optional): A balanced form for Focal Loss. + Defaults to 0.25. + reduction (str, optional): The method used to reduce the loss into + a scalar. Defaults to 'mean'. Options are "none", "mean" and + "sum". + loss_weight (float, optional): Weight of loss. Defaults to 1.0. + """ + super(FocalLoss, self).__init__() + assert use_sigmoid is True, 'Only sigmoid focal loss supported now.' + self.use_sigmoid = use_sigmoid + self.gamma = gamma + self.alpha = alpha + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Options are "none", "mean" and "sum". + + Returns: + torch.Tensor: The calculated loss + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if self.use_sigmoid: + if torch.cuda.is_available() and pred.is_cuda: + calculate_loss_func = sigmoid_focal_loss + else: + num_classes = pred.size(1) + target = F.one_hot(target, num_classes=num_classes + 1) + target = target[:, :num_classes] + calculate_loss_func = py_sigmoid_focal_loss + + loss_cls = self.loss_weight * calculate_loss_func( + pred, + target, + weight, + gamma=self.gamma, + alpha=self.alpha, + reduction=reduction, + avg_factor=avg_factor) + + else: + raise NotImplementedError + return loss_cls diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gaussian_focal_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gaussian_focal_loss.py new file mode 100644 index 00000000..54307a1e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gaussian_focal_loss.py @@ -0,0 +1,89 @@ +import torch.nn as nn + +from ..builder import LOSSES +from .utils import weighted_loss + + +@weighted_loss +def gaussian_focal_loss(pred, gaussian_target, alpha=2.0, gamma=4.0): + """`Focal Loss `_ for targets in gaussian + distribution. + + Args: + pred (torch.Tensor): The prediction. + gaussian_target (torch.Tensor): The learning target of the prediction + in gaussian distribution. + alpha (float, optional): A balanced form for Focal Loss. + Defaults to 2.0. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 4.0. + """ + eps = 1e-12 + pos_weights = gaussian_target.eq(1) + neg_weights = (1 - gaussian_target).pow(gamma) + pos_loss = -(pred + eps).log() * (1 - pred).pow(alpha) * pos_weights + neg_loss = -(1 - pred + eps).log() * pred.pow(alpha) * neg_weights + return pos_loss + neg_loss + + +@LOSSES.register_module() +class GaussianFocalLoss(nn.Module): + """GaussianFocalLoss is a variant of focal loss. + + More details can be found in the `paper + `_ + Code is modified from `kp_utils.py + `_ # noqa: E501 + Please notice that the target in GaussianFocalLoss is a gaussian heatmap, + not 0/1 binary target. + + Args: + alpha (float): Power of prediction. + gamma (float): Power of target for negtive samples. + reduction (str): Options are "none", "mean" and "sum". + loss_weight (float): Loss weight of current loss. + """ + + def __init__(self, + alpha=2.0, + gamma=4.0, + reduction='mean', + loss_weight=1.0): + super(GaussianFocalLoss, self).__init__() + self.alpha = alpha + self.gamma = gamma + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction + in gaussian distribution. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss_reg = self.loss_weight * gaussian_focal_loss( + pred, + target, + weight, + alpha=self.alpha, + gamma=self.gamma, + reduction=reduction, + avg_factor=avg_factor) + return loss_reg diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gfocal_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gfocal_loss.py new file mode 100644 index 00000000..73102da8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/gfocal_loss.py @@ -0,0 +1,185 @@ +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES +from .utils import weighted_loss + + +@weighted_loss +def quality_focal_loss(pred, target, beta=2.0): + r"""Quality Focal Loss (QFL) is from `Generalized Focal Loss: Learning + Qualified and Distributed Bounding Boxes for Dense Object Detection + `_. + + Args: + pred (torch.Tensor): Predicted joint representation of classification + and quality (IoU) estimation with shape (N, C), C is the number of + classes. + target (tuple([torch.Tensor])): Target category label with shape (N,) + and target quality label with shape (N,). + beta (float): The beta parameter for calculating the modulating factor. + Defaults to 2.0. + + Returns: + torch.Tensor: Loss tensor with shape (N,). + """ + assert len(target) == 2, """target for QFL must be a tuple of two elements, + including category label and quality label, respectively""" + # label denotes the category id, score denotes the quality score + label, score = target + + # negatives are supervised by 0 quality score + pred_sigmoid = pred.sigmoid() + scale_factor = pred_sigmoid + zerolabel = scale_factor.new_zeros(pred.shape) + loss = F.binary_cross_entropy_with_logits( + pred, zerolabel, reduction='none') * scale_factor.pow(beta) + + # FG cat_id: [0, num_classes -1], BG cat_id: num_classes + bg_class_ind = pred.size(1) + pos = ((label >= 0) & (label < bg_class_ind)).nonzero().squeeze(1) + pos_label = label[pos].long() + # positives are supervised by bbox quality (IoU) score + scale_factor = score[pos] - pred_sigmoid[pos, pos_label] + loss[pos, pos_label] = F.binary_cross_entropy_with_logits( + pred[pos, pos_label], score[pos], + reduction='none') * scale_factor.abs().pow(beta) + + loss = loss.sum(dim=1, keepdim=False) + return loss + + +@weighted_loss +def distribution_focal_loss(pred, label): + r"""Distribution Focal Loss (DFL) is from `Generalized Focal Loss: Learning + Qualified and Distributed Bounding Boxes for Dense Object Detection + `_. + + Args: + pred (torch.Tensor): Predicted general distribution of bounding boxes + (before softmax) with shape (N, n+1), n is the max value of the + integral set `{0, ..., n}` in paper. + label (torch.Tensor): Target distance label for bounding boxes with + shape (N,). + + Returns: + torch.Tensor: Loss tensor with shape (N,). + """ + dis_left = label.long() + dis_right = dis_left + 1 + weight_left = dis_right.float() - label + weight_right = label - dis_left.float() + loss = F.cross_entropy(pred, dis_left, reduction='none') * weight_left \ + + F.cross_entropy(pred, dis_right, reduction='none') * weight_right + return loss + + +@LOSSES.register_module() +class QualityFocalLoss(nn.Module): + r"""Quality Focal Loss (QFL) is a variant of `Generalized Focal Loss: + Learning Qualified and Distributed Bounding Boxes for Dense Object + Detection `_. + + Args: + use_sigmoid (bool): Whether sigmoid operation is conducted in QFL. + Defaults to True. + beta (float): The beta parameter for calculating the modulating factor. + Defaults to 2.0. + reduction (str): Options are "none", "mean" and "sum". + loss_weight (float): Loss weight of current loss. + """ + + def __init__(self, + use_sigmoid=True, + beta=2.0, + reduction='mean', + loss_weight=1.0): + super(QualityFocalLoss, self).__init__() + assert use_sigmoid is True, 'Only sigmoid in QFL supported now.' + self.use_sigmoid = use_sigmoid + self.beta = beta + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): Predicted joint representation of + classification and quality (IoU) estimation with shape (N, C), + C is the number of classes. + target (tuple([torch.Tensor])): Target category label with shape + (N,) and target quality label with shape (N,). + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if self.use_sigmoid: + loss_cls = self.loss_weight * quality_focal_loss( + pred, + target, + weight, + beta=self.beta, + reduction=reduction, + avg_factor=avg_factor) + else: + raise NotImplementedError + return loss_cls + + +@LOSSES.register_module() +class DistributionFocalLoss(nn.Module): + r"""Distribution Focal Loss (DFL) is a variant of `Generalized Focal Loss: + Learning Qualified and Distributed Bounding Boxes for Dense Object + Detection `_. + + Args: + reduction (str): Options are `'none'`, `'mean'` and `'sum'`. + loss_weight (float): Loss weight of current loss. + """ + + def __init__(self, reduction='mean', loss_weight=1.0): + super(DistributionFocalLoss, self).__init__() + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): Predicted general distribution of bounding + boxes (before softmax) with shape (N, n+1), n is the max value + of the integral set `{0, ..., n}` in paper. + target (torch.Tensor): Target distance label for bounding boxes + with shape (N,). + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss_cls = self.loss_weight * distribution_focal_loss( + pred, target, weight, reduction=reduction, avg_factor=avg_factor) + return loss_cls diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ghm_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ghm_loss.py new file mode 100644 index 00000000..8969a23f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/ghm_loss.py @@ -0,0 +1,172 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES + + +def _expand_onehot_labels(labels, label_weights, label_channels): + bin_labels = labels.new_full((labels.size(0), label_channels), 0) + inds = torch.nonzero( + (labels >= 0) & (labels < label_channels), as_tuple=False).squeeze() + if inds.numel() > 0: + bin_labels[inds, labels[inds]] = 1 + bin_label_weights = label_weights.view(-1, 1).expand( + label_weights.size(0), label_channels) + return bin_labels, bin_label_weights + + +# TODO: code refactoring to make it consistent with other losses +@LOSSES.register_module() +class GHMC(nn.Module): + """GHM Classification Loss. + + Details of the theorem can be viewed in the paper + `Gradient Harmonized Single-stage Detector + `_. + + Args: + bins (int): Number of the unit regions for distribution calculation. + momentum (float): The parameter for moving average. + use_sigmoid (bool): Can only be true for BCE based loss now. + loss_weight (float): The weight of the total GHM-C loss. + """ + + def __init__(self, bins=10, momentum=0, use_sigmoid=True, loss_weight=1.0): + super(GHMC, self).__init__() + self.bins = bins + self.momentum = momentum + edges = torch.arange(bins + 1).float() / bins + self.register_buffer('edges', edges) + self.edges[-1] += 1e-6 + if momentum > 0: + acc_sum = torch.zeros(bins) + self.register_buffer('acc_sum', acc_sum) + self.use_sigmoid = use_sigmoid + if not self.use_sigmoid: + raise NotImplementedError + self.loss_weight = loss_weight + + def forward(self, pred, target, label_weight, *args, **kwargs): + """Calculate the GHM-C loss. + + Args: + pred (float tensor of size [batch_num, class_num]): + The direct prediction of classification fc layer. + target (float tensor of size [batch_num, class_num]): + Binary class target for each sample. + label_weight (float tensor of size [batch_num, class_num]): + the value is 1 if the sample is valid and 0 if ignored. + Returns: + The gradient harmonized loss. + """ + # the target should be binary class label + if pred.dim() != target.dim(): + target, label_weight = _expand_onehot_labels( + target, label_weight, pred.size(-1)) + target, label_weight = target.float(), label_weight.float() + edges = self.edges + mmt = self.momentum + weights = torch.zeros_like(pred) + + # gradient length + g = torch.abs(pred.sigmoid().detach() - target) + + valid = label_weight > 0 + tot = max(valid.float().sum().item(), 1.0) + n = 0 # n valid bins + for i in range(self.bins): + inds = (g >= edges[i]) & (g < edges[i + 1]) & valid + num_in_bin = inds.sum().item() + if num_in_bin > 0: + if mmt > 0: + self.acc_sum[i] = mmt * self.acc_sum[i] \ + + (1 - mmt) * num_in_bin + weights[inds] = tot / self.acc_sum[i] + else: + weights[inds] = tot / num_in_bin + n += 1 + if n > 0: + weights = weights / n + + loss = F.binary_cross_entropy_with_logits( + pred, target, weights, reduction='sum') / tot + return loss * self.loss_weight + + +# TODO: code refactoring to make it consistent with other losses +@LOSSES.register_module() +class GHMR(nn.Module): + """GHM Regression Loss. + + Details of the theorem can be viewed in the paper + `Gradient Harmonized Single-stage Detector + `_. + + Args: + mu (float): The parameter for the Authentic Smooth L1 loss. + bins (int): Number of the unit regions for distribution calculation. + momentum (float): The parameter for moving average. + loss_weight (float): The weight of the total GHM-R loss. + """ + + def __init__(self, mu=0.02, bins=10, momentum=0, loss_weight=1.0): + super(GHMR, self).__init__() + self.mu = mu + self.bins = bins + edges = torch.arange(bins + 1).float() / bins + self.register_buffer('edges', edges) + self.edges[-1] = 1e3 + self.momentum = momentum + if momentum > 0: + acc_sum = torch.zeros(bins) + self.register_buffer('acc_sum', acc_sum) + self.loss_weight = loss_weight + + # TODO: support reduction parameter + def forward(self, pred, target, label_weight, avg_factor=None): + """Calculate the GHM-R loss. + + Args: + pred (float tensor of size [batch_num, 4 (* class_num)]): + The prediction of box regression layer. Channel number can be 4 + or 4 * class_num depending on whether it is class-agnostic. + target (float tensor of size [batch_num, 4 (* class_num)]): + The target regression values with the same size of pred. + label_weight (float tensor of size [batch_num, 4 (* class_num)]): + The weight of each sample, 0 if ignored. + Returns: + The gradient harmonized loss. + """ + mu = self.mu + edges = self.edges + mmt = self.momentum + + # ASL1 loss + diff = pred - target + loss = torch.sqrt(diff * diff + mu * mu) - mu + + # gradient length + g = torch.abs(diff / torch.sqrt(mu * mu + diff * diff)).detach() + weights = torch.zeros_like(g) + + valid = label_weight > 0 + tot = max(label_weight.float().sum().item(), 1.0) + n = 0 # n: valid bins + for i in range(self.bins): + inds = (g >= edges[i]) & (g < edges[i + 1]) & valid + num_in_bin = inds.sum().item() + if num_in_bin > 0: + n += 1 + if mmt > 0: + self.acc_sum[i] = mmt * self.acc_sum[i] \ + + (1 - mmt) * num_in_bin + weights[inds] = tot / self.acc_sum[i] + else: + weights[inds] = tot / num_in_bin + if n > 0: + weights /= n + + loss = loss * weights + loss = loss.sum() / tot + return loss * self.loss_weight diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/iou_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/iou_loss.py new file mode 100644 index 00000000..f27ff627 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/iou_loss.py @@ -0,0 +1,430 @@ +import math + +import torch +import torch.nn as nn + +from mmdet.core import bbox_overlaps +from ..builder import LOSSES +from .utils import weighted_loss + + +@weighted_loss +def iou_loss(pred, target, linear=False, eps=1e-6): + """IoU loss. + + Computing the IoU loss between a set of predicted bboxes and target bboxes. + The loss is calculated as negative log of IoU. + + Args: + pred (torch.Tensor): Predicted bboxes of format (x1, y1, x2, y2), + shape (n, 4). + target (torch.Tensor): Corresponding gt bboxes, shape (n, 4). + linear (bool, optional): If True, use linear scale of loss instead of + log scale. Default: False. + eps (float): Eps to avoid log(0). + + Return: + torch.Tensor: Loss tensor. + """ + ious = bbox_overlaps(pred, target, is_aligned=True).clamp(min=eps) + if linear: + loss = 1 - ious + else: + loss = -ious.log() + return loss + + +@weighted_loss +def bounded_iou_loss(pred, target, beta=0.2, eps=1e-3): + """BIoULoss. + + This is an implementation of paper + `Improving Object Localization with Fitness NMS and Bounded IoU Loss. + `_. + + Args: + pred (torch.Tensor): Predicted bboxes. + target (torch.Tensor): Target bboxes. + beta (float): beta parameter in smoothl1. + eps (float): eps to avoid NaN. + """ + pred_ctrx = (pred[:, 0] + pred[:, 2]) * 0.5 + pred_ctry = (pred[:, 1] + pred[:, 3]) * 0.5 + pred_w = pred[:, 2] - pred[:, 0] + pred_h = pred[:, 3] - pred[:, 1] + with torch.no_grad(): + target_ctrx = (target[:, 0] + target[:, 2]) * 0.5 + target_ctry = (target[:, 1] + target[:, 3]) * 0.5 + target_w = target[:, 2] - target[:, 0] + target_h = target[:, 3] - target[:, 1] + + dx = target_ctrx - pred_ctrx + dy = target_ctry - pred_ctry + + loss_dx = 1 - torch.max( + (target_w - 2 * dx.abs()) / + (target_w + 2 * dx.abs() + eps), torch.zeros_like(dx)) + loss_dy = 1 - torch.max( + (target_h - 2 * dy.abs()) / + (target_h + 2 * dy.abs() + eps), torch.zeros_like(dy)) + loss_dw = 1 - torch.min(target_w / (pred_w + eps), pred_w / + (target_w + eps)) + loss_dh = 1 - torch.min(target_h / (pred_h + eps), pred_h / + (target_h + eps)) + loss_comb = torch.stack([loss_dx, loss_dy, loss_dw, loss_dh], + dim=-1).view(loss_dx.size(0), -1) + + loss = torch.where(loss_comb < beta, 0.5 * loss_comb * loss_comb / beta, + loss_comb - 0.5 * beta) + return loss + + +@weighted_loss +def giou_loss(pred, target, eps=1e-7): + r"""`Generalized Intersection over Union: A Metric and A Loss for Bounding + Box Regression `_. + + Args: + pred (torch.Tensor): Predicted bboxes of format (x1, y1, x2, y2), + shape (n, 4). + target (torch.Tensor): Corresponding gt bboxes, shape (n, 4). + eps (float): Eps to avoid log(0). + + Return: + Tensor: Loss tensor. + """ + gious = bbox_overlaps(pred, target, mode='giou', is_aligned=True, eps=eps) + loss = 1 - gious + return loss + + +@weighted_loss +def diou_loss(pred, target, eps=1e-7): + r"""`Implementation of Distance-IoU Loss: Faster and Better + Learning for Bounding Box Regression, https://arxiv.org/abs/1911.08287`_. + + Code is modified from https://github.com/Zzh-tju/DIoU. + + Args: + pred (Tensor): Predicted bboxes of format (x1, y1, x2, y2), + shape (n, 4). + target (Tensor): Corresponding gt bboxes, shape (n, 4). + eps (float): Eps to avoid log(0). + Return: + Tensor: Loss tensor. + """ + # overlap + lt = torch.max(pred[:, :2], target[:, :2]) + rb = torch.min(pred[:, 2:], target[:, 2:]) + wh = (rb - lt).clamp(min=0) + overlap = wh[:, 0] * wh[:, 1] + + # union + ap = (pred[:, 2] - pred[:, 0]) * (pred[:, 3] - pred[:, 1]) + ag = (target[:, 2] - target[:, 0]) * (target[:, 3] - target[:, 1]) + union = ap + ag - overlap + eps + + # IoU + ious = overlap / union + + # enclose area + enclose_x1y1 = torch.min(pred[:, :2], target[:, :2]) + enclose_x2y2 = torch.max(pred[:, 2:], target[:, 2:]) + enclose_wh = (enclose_x2y2 - enclose_x1y1).clamp(min=0) + + cw = enclose_wh[:, 0] + ch = enclose_wh[:, 1] + + c2 = cw**2 + ch**2 + eps + + b1_x1, b1_y1 = pred[:, 0], pred[:, 1] + b1_x2, b1_y2 = pred[:, 2], pred[:, 3] + b2_x1, b2_y1 = target[:, 0], target[:, 1] + b2_x2, b2_y2 = target[:, 2], target[:, 3] + + left = ((b2_x1 + b2_x2) - (b1_x1 + b1_x2))**2 / 4 + right = ((b2_y1 + b2_y2) - (b1_y1 + b1_y2))**2 / 4 + rho2 = left + right + + # DIoU + dious = ious - rho2 / c2 + loss = 1 - dious + return loss + + +@weighted_loss +def ciou_loss(pred, target, eps=1e-7): + r"""`Implementation of paper `Enhancing Geometric Factors into + Model Learning and Inference for Object Detection and Instance + Segmentation `_. + + Code is modified from https://github.com/Zzh-tju/CIoU. + + Args: + pred (Tensor): Predicted bboxes of format (x1, y1, x2, y2), + shape (n, 4). + target (Tensor): Corresponding gt bboxes, shape (n, 4). + eps (float): Eps to avoid log(0). + Return: + Tensor: Loss tensor. + """ + # overlap + lt = torch.max(pred[:, :2], target[:, :2]) + rb = torch.min(pred[:, 2:], target[:, 2:]) + wh = (rb - lt).clamp(min=0) + overlap = wh[:, 0] * wh[:, 1] + + # union + ap = (pred[:, 2] - pred[:, 0]) * (pred[:, 3] - pred[:, 1]) + ag = (target[:, 2] - target[:, 0]) * (target[:, 3] - target[:, 1]) + union = ap + ag - overlap + eps + + # IoU + ious = overlap / union + + # enclose area + enclose_x1y1 = torch.min(pred[:, :2], target[:, :2]) + enclose_x2y2 = torch.max(pred[:, 2:], target[:, 2:]) + enclose_wh = (enclose_x2y2 - enclose_x1y1).clamp(min=0) + + cw = enclose_wh[:, 0] + ch = enclose_wh[:, 1] + + c2 = cw**2 + ch**2 + eps + + b1_x1, b1_y1 = pred[:, 0], pred[:, 1] + b1_x2, b1_y2 = pred[:, 2], pred[:, 3] + b2_x1, b2_y1 = target[:, 0], target[:, 1] + b2_x2, b2_y2 = target[:, 2], target[:, 3] + + w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps + w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps + + left = ((b2_x1 + b2_x2) - (b1_x1 + b1_x2))**2 / 4 + right = ((b2_y1 + b2_y2) - (b1_y1 + b1_y2))**2 / 4 + rho2 = left + right + + factor = 4 / math.pi**2 + v = factor * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2) + + # CIoU + cious = ious - (rho2 / c2 + v**2 / (1 - ious + v)) + loss = 1 - cious + return loss + + +@LOSSES.register_module() +class IoULoss(nn.Module): + """IoULoss. + + Computing the IoU loss between a set of predicted bboxes and target bboxes. + + Args: + linear (bool): If True, use linear scale of loss instead of log scale. + Default: False. + eps (float): Eps to avoid log(0). + reduction (str): Options are "none", "mean" and "sum". + loss_weight (float): Weight of loss. + """ + + def __init__(self, + linear=False, + eps=1e-6, + reduction='mean', + loss_weight=1.0): + super(IoULoss, self).__init__() + self.linear = linear + self.eps = eps + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. Options are "none", "mean" and "sum". + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if (weight is not None) and (not torch.any(weight > 0)) and ( + reduction != 'none'): + return (pred * weight).sum() # 0 + if weight is not None and weight.dim() > 1: + # TODO: remove this in the future + # reduce the weight of shape (n, 4) to (n,) to match the + # iou_loss of shape (n,) + assert weight.shape == pred.shape + weight = weight.mean(-1) + loss = self.loss_weight * iou_loss( + pred, + target, + weight, + linear=self.linear, + eps=self.eps, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss + + +@LOSSES.register_module() +class BoundedIoULoss(nn.Module): + + def __init__(self, beta=0.2, eps=1e-3, reduction='mean', loss_weight=1.0): + super(BoundedIoULoss, self).__init__() + self.beta = beta + self.eps = eps + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + if weight is not None and not torch.any(weight > 0): + return (pred * weight).sum() # 0 + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss = self.loss_weight * bounded_iou_loss( + pred, + target, + weight, + beta=self.beta, + eps=self.eps, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss + + +@LOSSES.register_module() +class GIoULoss(nn.Module): + + def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0): + super(GIoULoss, self).__init__() + self.eps = eps + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + if weight is not None and not torch.any(weight > 0): + return (pred * weight).sum() # 0 + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if weight is not None and weight.dim() > 1: + # TODO: remove this in the future + # reduce the weight of shape (n, 4) to (n,) to match the + # giou_loss of shape (n,) + assert weight.shape == pred.shape + weight = weight.mean(-1) + loss = self.loss_weight * giou_loss( + pred, + target, + weight, + eps=self.eps, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss + + +@LOSSES.register_module() +class DIoULoss(nn.Module): + + def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0): + super(DIoULoss, self).__init__() + self.eps = eps + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + if weight is not None and not torch.any(weight > 0): + return (pred * weight).sum() # 0 + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if weight is not None and weight.dim() > 1: + # TODO: remove this in the future + # reduce the weight of shape (n, 4) to (n,) to match the + # giou_loss of shape (n,) + assert weight.shape == pred.shape + weight = weight.mean(-1) + loss = self.loss_weight * diou_loss( + pred, + target, + weight, + eps=self.eps, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss + + +@LOSSES.register_module() +class CIoULoss(nn.Module): + + def __init__(self, eps=1e-6, reduction='mean', loss_weight=1.0): + super(CIoULoss, self).__init__() + self.eps = eps + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + if weight is not None and not torch.any(weight > 0): + return (pred * weight).sum() # 0 + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if weight is not None and weight.dim() > 1: + # TODO: remove this in the future + # reduce the weight of shape (n, 4) to (n,) to match the + # giou_loss of shape (n,) + assert weight.shape == pred.shape + weight = weight.mean(-1) + loss = self.loss_weight * ciou_loss( + pred, + target, + weight, + eps=self.eps, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/mse_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/mse_loss.py new file mode 100644 index 00000000..68d05752 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/mse_loss.py @@ -0,0 +1,49 @@ +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES +from .utils import weighted_loss + + +@weighted_loss +def mse_loss(pred, target): + """Warpper of mse loss.""" + return F.mse_loss(pred, target, reduction='none') + + +@LOSSES.register_module() +class MSELoss(nn.Module): + """MSELoss. + + Args: + reduction (str, optional): The method that reduces the loss to a + scalar. Options are "none", "mean" and "sum". + loss_weight (float, optional): The weight of the loss. Defaults to 1.0 + """ + + def __init__(self, reduction='mean', loss_weight=1.0): + super().__init__() + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, pred, target, weight=None, avg_factor=None): + """Forward function of loss. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + weight (torch.Tensor, optional): Weight of the loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + + Returns: + torch.Tensor: The calculated loss + """ + loss = self.loss_weight * mse_loss( + pred, + target, + weight, + reduction=self.reduction, + avg_factor=avg_factor) + return loss diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/pisa_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/pisa_loss.py new file mode 100644 index 00000000..fb907a2e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/pisa_loss.py @@ -0,0 +1,180 @@ +import torch + +from mmdet.core import bbox_overlaps + + +def isr_p(cls_score, + bbox_pred, + bbox_targets, + rois, + sampling_results, + loss_cls, + bbox_coder, + k=2, + bias=0, + num_class=80): + """Importance-based Sample Reweighting (ISR_P), positive part. + + Args: + cls_score (Tensor): Predicted classification scores. + bbox_pred (Tensor): Predicted bbox deltas. + bbox_targets (tuple[Tensor]): A tuple of bbox targets, the are + labels, label_weights, bbox_targets, bbox_weights, respectively. + rois (Tensor): Anchors (single_stage) in shape (n, 4) or RoIs + (two_stage) in shape (n, 5). + sampling_results (obj): Sampling results. + loss_cls (func): Classification loss func of the head. + bbox_coder (obj): BBox coder of the head. + k (float): Power of the non-linear mapping. + bias (float): Shift of the non-linear mapping. + num_class (int): Number of classes, default: 80. + + Return: + tuple([Tensor]): labels, imp_based_label_weights, bbox_targets, + bbox_target_weights + """ + + labels, label_weights, bbox_targets, bbox_weights = bbox_targets + pos_label_inds = ((labels >= 0) & + (labels < num_class)).nonzero().reshape(-1) + pos_labels = labels[pos_label_inds] + + # if no positive samples, return the original targets + num_pos = float(pos_label_inds.size(0)) + if num_pos == 0: + return labels, label_weights, bbox_targets, bbox_weights + + # merge pos_assigned_gt_inds of per image to a single tensor + gts = list() + last_max_gt = 0 + for i in range(len(sampling_results)): + gt_i = sampling_results[i].pos_assigned_gt_inds + gts.append(gt_i + last_max_gt) + if len(gt_i) != 0: + last_max_gt = gt_i.max() + 1 + gts = torch.cat(gts) + assert len(gts) == num_pos + + cls_score = cls_score.detach() + bbox_pred = bbox_pred.detach() + + # For single stage detectors, rois here indicate anchors, in shape (N, 4) + # For two stage detectors, rois are in shape (N, 5) + if rois.size(-1) == 5: + pos_rois = rois[pos_label_inds][:, 1:] + else: + pos_rois = rois[pos_label_inds] + + if bbox_pred.size(-1) > 4: + bbox_pred = bbox_pred.view(bbox_pred.size(0), -1, 4) + pos_delta_pred = bbox_pred[pos_label_inds, pos_labels].view(-1, 4) + else: + pos_delta_pred = bbox_pred[pos_label_inds].view(-1, 4) + + # compute iou of the predicted bbox and the corresponding GT + pos_delta_target = bbox_targets[pos_label_inds].view(-1, 4) + pos_bbox_pred = bbox_coder.decode(pos_rois, pos_delta_pred) + target_bbox_pred = bbox_coder.decode(pos_rois, pos_delta_target) + ious = bbox_overlaps(pos_bbox_pred, target_bbox_pred, is_aligned=True) + + pos_imp_weights = label_weights[pos_label_inds] + # Two steps to compute IoU-HLR. Samples are first sorted by IoU locally, + # then sorted again within the same-rank group + max_l_num = pos_labels.bincount().max() + for label in pos_labels.unique(): + l_inds = (pos_labels == label).nonzero().view(-1) + l_gts = gts[l_inds] + for t in l_gts.unique(): + t_inds = l_inds[l_gts == t] + t_ious = ious[t_inds] + _, t_iou_rank_idx = t_ious.sort(descending=True) + _, t_iou_rank = t_iou_rank_idx.sort() + ious[t_inds] += max_l_num - t_iou_rank.float() + l_ious = ious[l_inds] + _, l_iou_rank_idx = l_ious.sort(descending=True) + _, l_iou_rank = l_iou_rank_idx.sort() # IoU-HLR + # linearly map HLR to label weights + pos_imp_weights[l_inds] *= (max_l_num - l_iou_rank.float()) / max_l_num + + pos_imp_weights = (bias + pos_imp_weights * (1 - bias)).pow(k) + + # normalize to make the new weighted loss value equal to the original loss + pos_loss_cls = loss_cls( + cls_score[pos_label_inds], pos_labels, reduction_override='none') + if pos_loss_cls.dim() > 1: + ori_pos_loss_cls = pos_loss_cls * label_weights[pos_label_inds][:, + None] + new_pos_loss_cls = pos_loss_cls * pos_imp_weights[:, None] + else: + ori_pos_loss_cls = pos_loss_cls * label_weights[pos_label_inds] + new_pos_loss_cls = pos_loss_cls * pos_imp_weights + pos_loss_cls_ratio = ori_pos_loss_cls.sum() / new_pos_loss_cls.sum() + pos_imp_weights = pos_imp_weights * pos_loss_cls_ratio + label_weights[pos_label_inds] = pos_imp_weights + + bbox_targets = labels, label_weights, bbox_targets, bbox_weights + return bbox_targets + + +def carl_loss(cls_score, + labels, + bbox_pred, + bbox_targets, + loss_bbox, + k=1, + bias=0.2, + avg_factor=None, + sigmoid=False, + num_class=80): + """Classification-Aware Regression Loss (CARL). + + Args: + cls_score (Tensor): Predicted classification scores. + labels (Tensor): Targets of classification. + bbox_pred (Tensor): Predicted bbox deltas. + bbox_targets (Tensor): Target of bbox regression. + loss_bbox (func): Regression loss func of the head. + bbox_coder (obj): BBox coder of the head. + k (float): Power of the non-linear mapping. + bias (float): Shift of the non-linear mapping. + avg_factor (int): Average factor used in regression loss. + sigmoid (bool): Activation of the classification score. + num_class (int): Number of classes, default: 80. + + Return: + dict: CARL loss dict. + """ + pos_label_inds = ((labels >= 0) & + (labels < num_class)).nonzero().reshape(-1) + if pos_label_inds.numel() == 0: + return dict(loss_carl=cls_score.sum()[None] * 0.) + pos_labels = labels[pos_label_inds] + + # multiply pos_cls_score with the corresponding bbox weight + # and remain gradient + if sigmoid: + pos_cls_score = cls_score.sigmoid()[pos_label_inds, pos_labels] + else: + pos_cls_score = cls_score.softmax(-1)[pos_label_inds, pos_labels] + carl_loss_weights = (bias + (1 - bias) * pos_cls_score).pow(k) + + # normalize carl_loss_weight to make its sum equal to num positive + num_pos = float(pos_cls_score.size(0)) + weight_ratio = num_pos / carl_loss_weights.sum() + carl_loss_weights *= weight_ratio + + if avg_factor is None: + avg_factor = bbox_targets.size(0) + # if is class agnostic, bbox pred is in shape (N, 4) + # otherwise, bbox pred is in shape (N, #classes, 4) + if bbox_pred.size(-1) > 4: + bbox_pred = bbox_pred.view(bbox_pred.size(0), -1, 4) + pos_bbox_preds = bbox_pred[pos_label_inds, pos_labels] + else: + pos_bbox_preds = bbox_pred[pos_label_inds] + ori_loss_reg = loss_bbox( + pos_bbox_preds, + bbox_targets[pos_label_inds], + reduction_override='none') / avg_factor + loss_carl = (ori_loss_reg * carl_loss_weights[:, None]).sum() + return dict(loss_carl=loss_carl[None]) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/smooth_l1_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/smooth_l1_loss.py new file mode 100644 index 00000000..ad5e8a4d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/smooth_l1_loss.py @@ -0,0 +1,136 @@ +import torch +import torch.nn as nn + +from ..builder import LOSSES +from .utils import weighted_loss + + +@weighted_loss +def smooth_l1_loss(pred, target, beta=1.0): + """Smooth L1 loss. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + beta (float, optional): The threshold in the piecewise function. + Defaults to 1.0. + + Returns: + torch.Tensor: Calculated loss + """ + assert beta > 0 + assert pred.size() == target.size() and target.numel() > 0 + diff = torch.abs(pred - target) + loss = torch.where(diff < beta, 0.5 * diff * diff / beta, + diff - 0.5 * beta) + return loss + + +@weighted_loss +def l1_loss(pred, target): + """L1 loss. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + + Returns: + torch.Tensor: Calculated loss + """ + assert pred.size() == target.size() and target.numel() > 0 + loss = torch.abs(pred - target) + return loss + + +@LOSSES.register_module() +class SmoothL1Loss(nn.Module): + """Smooth L1 loss. + + Args: + beta (float, optional): The threshold in the piecewise function. + Defaults to 1.0. + reduction (str, optional): The method to reduce the loss. + Options are "none", "mean" and "sum". Defaults to "mean". + loss_weight (float, optional): The weight of loss. + """ + + def __init__(self, beta=1.0, reduction='mean', loss_weight=1.0): + super(SmoothL1Loss, self).__init__() + self.beta = beta + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss_bbox = self.loss_weight * smooth_l1_loss( + pred, + target, + weight, + beta=self.beta, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss_bbox + + +@LOSSES.register_module() +class L1Loss(nn.Module): + """L1 loss. + + Args: + reduction (str, optional): The method to reduce the loss. + Options are "none", "mean" and "sum". + loss_weight (float, optional): The weight of loss. + """ + + def __init__(self, reduction='mean', loss_weight=1.0): + super(L1Loss, self).__init__() + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss_bbox = self.loss_weight * l1_loss( + pred, target, weight, reduction=reduction, avg_factor=avg_factor) + return loss_bbox diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/utils.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/utils.py new file mode 100644 index 00000000..3361c6ca --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/utils.py @@ -0,0 +1,98 @@ +import functools + +import torch.nn.functional as F + + +def reduce_loss(loss, reduction): + """Reduce loss as specified. + + Args: + loss (Tensor): Elementwise loss tensor. + reduction (str): Options are "none", "mean" and "sum". + + Return: + Tensor: Reduced loss tensor. + """ + reduction_enum = F._Reduction.get_enum(reduction) + # none: 0, elementwise_mean:1, sum: 2 + if reduction_enum == 0: + return loss + elif reduction_enum == 1: + return loss.mean() + elif reduction_enum == 2: + return loss.sum() + + +def weight_reduce_loss(loss, weight=None, reduction='mean', avg_factor=None): + """Apply element-wise weight and reduce loss. + + Args: + loss (Tensor): Element-wise loss. + weight (Tensor): Element-wise weights. + reduction (str): Same as built-in losses of PyTorch. + avg_factor (float): Avarage factor when computing the mean of losses. + + Returns: + Tensor: Processed loss values. + """ + # if weight is specified, apply element-wise weight + if weight is not None: + loss = loss * weight + + # if avg_factor is not specified, just reduce the loss + if avg_factor is None: + loss = reduce_loss(loss, reduction) + else: + # if reduction is mean, then average the loss by avg_factor + if reduction == 'mean': + loss = loss.sum() / avg_factor + # if reduction is 'none', then do nothing, otherwise raise an error + elif reduction != 'none': + raise ValueError('avg_factor can not be used with reduction="sum"') + return loss + + +def weighted_loss(loss_func): + """Create a weighted version of a given loss function. + + To use this decorator, the loss function must have the signature like + `loss_func(pred, target, **kwargs)`. The function only needs to compute + element-wise loss without any reduction. This decorator will add weight + and reduction arguments to the function. The decorated function will have + the signature like `loss_func(pred, target, weight=None, reduction='mean', + avg_factor=None, **kwargs)`. + + :Example: + + >>> import torch + >>> @weighted_loss + >>> def l1_loss(pred, target): + >>> return (pred - target).abs() + + >>> pred = torch.Tensor([0, 2, 3]) + >>> target = torch.Tensor([1, 1, 1]) + >>> weight = torch.Tensor([1, 0, 1]) + + >>> l1_loss(pred, target) + tensor(1.3333) + >>> l1_loss(pred, target, weight) + tensor(1.) + >>> l1_loss(pred, target, reduction='none') + tensor([1., 1., 2.]) + >>> l1_loss(pred, target, weight, avg_factor=2) + tensor(1.5000) + """ + + @functools.wraps(loss_func) + def wrapper(pred, + target, + weight=None, + reduction='mean', + avg_factor=None, + **kwargs): + # get element-wise loss + loss = loss_func(pred, target, **kwargs) + loss = weight_reduce_loss(loss, weight, reduction, avg_factor) + return loss + + return wrapper diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/varifocal_loss.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/varifocal_loss.py new file mode 100644 index 00000000..6a84307f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/losses/varifocal_loss.py @@ -0,0 +1,131 @@ +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES +from .utils import weight_reduce_loss + + +def varifocal_loss(pred, + target, + weight=None, + alpha=0.75, + gamma=2.0, + iou_weighted=True, + reduction='mean', + avg_factor=None): + """`Varifocal Loss `_ + + Args: + pred (torch.Tensor): The prediction with shape (N, C), C is the + number of classes + target (torch.Tensor): The learning target of the iou-aware + classification score with shape (N, C), C is the number of classes. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + alpha (float, optional): A balance factor for the negative part of + Varifocal Loss, which is different from the alpha of Focal Loss. + Defaults to 0.75. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 2.0. + iou_weighted (bool, optional): Whether to weight the loss of the + positive example with the iou target. Defaults to True. + reduction (str, optional): The method used to reduce the loss into + a scalar. Defaults to 'mean'. Options are "none", "mean" and + "sum". + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + """ + # pred and target should be of the same size + assert pred.size() == target.size() + pred_sigmoid = pred.sigmoid() + target = target.type_as(pred) + if iou_weighted: + focal_weight = target * (target > 0.0).float() + \ + alpha * (pred_sigmoid - target).abs().pow(gamma) * \ + (target <= 0.0).float() + else: + focal_weight = (target > 0.0).float() + \ + alpha * (pred_sigmoid - target).abs().pow(gamma) * \ + (target <= 0.0).float() + loss = F.binary_cross_entropy_with_logits( + pred, target, reduction='none') * focal_weight + loss = weight_reduce_loss(loss, weight, reduction, avg_factor) + return loss + + +@LOSSES.register_module() +class VarifocalLoss(nn.Module): + + def __init__(self, + use_sigmoid=True, + alpha=0.75, + gamma=2.0, + iou_weighted=True, + reduction='mean', + loss_weight=1.0): + """`Varifocal Loss `_ + + Args: + use_sigmoid (bool, optional): Whether the prediction is + used for sigmoid or softmax. Defaults to True. + alpha (float, optional): A balance factor for the negative part of + Varifocal Loss, which is different from the alpha of Focal + Loss. Defaults to 0.75. + gamma (float, optional): The gamma for calculating the modulating + factor. Defaults to 2.0. + iou_weighted (bool, optional): Whether to weight the loss of the + positive examples with the iou target. Defaults to True. + reduction (str, optional): The method used to reduce the loss into + a scalar. Defaults to 'mean'. Options are "none", "mean" and + "sum". + loss_weight (float, optional): Weight of loss. Defaults to 1.0. + """ + super(VarifocalLoss, self).__init__() + assert use_sigmoid is True, \ + 'Only sigmoid varifocal loss supported now.' + assert alpha >= 0.0 + self.use_sigmoid = use_sigmoid + self.alpha = alpha + self.gamma = gamma + self.iou_weighted = iou_weighted + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Options are "none", "mean" and "sum". + + Returns: + torch.Tensor: The calculated loss + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if self.use_sigmoid: + loss_cls = self.loss_weight * varifocal_loss( + pred, + target, + weight, + alpha=self.alpha, + gamma=self.gamma, + iou_weighted=self.iou_weighted, + reduction=reduction, + avg_factor=avg_factor) + else: + raise NotImplementedError + return loss_cls diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/__init__.py new file mode 100644 index 00000000..2d983844 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/__init__.py @@ -0,0 +1,15 @@ +from .bfp import BFP +from .channel_mapper import ChannelMapper +from .fpn import FPN +from .fpn_carafe import FPN_CARAFE +from .hrfpn import HRFPN +from .nas_fpn import NASFPN +from .nasfcos_fpn import NASFCOS_FPN +from .pafpn import PAFPN +from .rfp import RFP +from .yolo_neck import YOLOV3Neck + +__all__ = [ + 'FPN', 'BFP', 'ChannelMapper', 'HRFPN', 'NASFPN', 'FPN_CARAFE', 'PAFPN', + 'NASFCOS_FPN', 'RFP', 'YOLOV3Neck' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/bfp.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/bfp.py new file mode 100644 index 00000000..bc61b094 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/bfp.py @@ -0,0 +1,104 @@ +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, xavier_init +from mmcv.cnn.bricks import NonLocal2d + +from ..builder import NECKS + + +@NECKS.register_module() +class BFP(nn.Module): + """BFP (Balanced Feature Pyrmamids) + + BFP takes multi-level features as inputs and gather them into a single one, + then refine the gathered feature and scatter the refined results to + multi-level features. This module is used in Libra R-CNN (CVPR 2019), see + the paper `Libra R-CNN: Towards Balanced Learning for Object Detection + `_ for details. + + Args: + in_channels (int): Number of input channels (feature maps of all levels + should have the same channels). + num_levels (int): Number of input feature levels. + conv_cfg (dict): The config dict for convolution layers. + norm_cfg (dict): The config dict for normalization layers. + refine_level (int): Index of integration and refine level of BSF in + multi-level features from bottom to top. + refine_type (str): Type of the refine op, currently support + [None, 'conv', 'non_local']. + """ + + def __init__(self, + in_channels, + num_levels, + refine_level=2, + refine_type=None, + conv_cfg=None, + norm_cfg=None): + super(BFP, self).__init__() + assert refine_type in [None, 'conv', 'non_local'] + + self.in_channels = in_channels + self.num_levels = num_levels + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + + self.refine_level = refine_level + self.refine_type = refine_type + assert 0 <= self.refine_level < self.num_levels + + if self.refine_type == 'conv': + self.refine = ConvModule( + self.in_channels, + self.in_channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg) + elif self.refine_type == 'non_local': + self.refine = NonLocal2d( + self.in_channels, + reduction=1, + use_scale=False, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg) + + def init_weights(self): + """Initialize the weights of FPN module.""" + for m in self.modules(): + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform') + + def forward(self, inputs): + """Forward function.""" + assert len(inputs) == self.num_levels + + # step 1: gather multi-level features by resize and average + feats = [] + gather_size = inputs[self.refine_level].size()[2:] + for i in range(self.num_levels): + if i < self.refine_level: + gathered = F.adaptive_max_pool2d( + inputs[i], output_size=gather_size) + else: + gathered = F.interpolate( + inputs[i], size=gather_size, mode='nearest') + feats.append(gathered) + + bsf = sum(feats) / len(feats) + + # step 2: refine gathered features + if self.refine_type is not None: + bsf = self.refine(bsf) + + # step 3: scatter refined features to multi-levels by a residual path + outs = [] + for i in range(self.num_levels): + out_size = inputs[i].size()[2:] + if i < self.refine_level: + residual = F.interpolate(bsf, size=out_size, mode='nearest') + else: + residual = F.adaptive_max_pool2d(bsf, output_size=out_size) + outs.append(residual + inputs[i]) + + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/channel_mapper.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/channel_mapper.py new file mode 100644 index 00000000..a4f5ed44 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/channel_mapper.py @@ -0,0 +1,74 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, xavier_init + +from ..builder import NECKS + + +@NECKS.register_module() +class ChannelMapper(nn.Module): + r"""Channel Mapper to reduce/increase channels of backbone features. + + This is used to reduce/increase channels of backbone features. + + Args: + in_channels (List[int]): Number of input channels per scale. + out_channels (int): Number of output channels (used at each scale). + kernel_size (int, optional): kernel_size for reducing channels (used + at each scale). Default: 3. + conv_cfg (dict, optional): Config dict for convolution layer. + Default: None. + norm_cfg (dict, optional): Config dict for normalization layer. + Default: None. + act_cfg (dict, optional): Config dict for activation layer in + ConvModule. Default: dict(type='ReLU'). + + Example: + >>> import torch + >>> in_channels = [2, 3, 5, 7] + >>> scales = [340, 170, 84, 43] + >>> inputs = [torch.rand(1, c, s, s) + ... for c, s in zip(in_channels, scales)] + >>> self = ChannelMapper(in_channels, 11, 3).eval() + >>> outputs = self.forward(inputs) + >>> for i in range(len(outputs)): + ... print(f'outputs[{i}].shape = {outputs[i].shape}') + outputs[0].shape = torch.Size([1, 11, 340, 340]) + outputs[1].shape = torch.Size([1, 11, 170, 170]) + outputs[2].shape = torch.Size([1, 11, 84, 84]) + outputs[3].shape = torch.Size([1, 11, 43, 43]) + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size=3, + conv_cfg=None, + norm_cfg=None, + act_cfg=dict(type='ReLU')): + super(ChannelMapper, self).__init__() + assert isinstance(in_channels, list) + + self.convs = nn.ModuleList() + for in_channel in in_channels: + self.convs.append( + ConvModule( + in_channel, + out_channels, + kernel_size, + padding=(kernel_size - 1) // 2, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg)) + + # default init_weights for conv(msra) and norm in ConvModule + def init_weights(self): + """Initialize the weights of ChannelMapper module.""" + for m in self.modules(): + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform') + + def forward(self, inputs): + """Forward function.""" + assert len(inputs) == len(self.convs) + outs = [self.convs[i](inputs[i]) for i in range(len(inputs))] + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn.py new file mode 100644 index 00000000..5e5dfe68 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn.py @@ -0,0 +1,221 @@ +import warnings + +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, xavier_init +from mmcv.runner import auto_fp16 + +from ..builder import NECKS + + +@NECKS.register_module() +class FPN(nn.Module): + r"""Feature Pyramid Network. + + This is an implementation of paper `Feature Pyramid Networks for Object + Detection `_. + + Args: + in_channels (List[int]): Number of input channels per scale. + out_channels (int): Number of output channels (used at each scale) + num_outs (int): Number of output scales. + start_level (int): Index of the start input backbone level used to + build the feature pyramid. Default: 0. + end_level (int): Index of the end input backbone level (exclusive) to + build the feature pyramid. Default: -1, which means the last level. + add_extra_convs (bool | str): If bool, it decides whether to add conv + layers on top of the original feature maps. Default to False. + If True, its actual mode is specified by `extra_convs_on_inputs`. + If str, it specifies the source feature map of the extra convs. + Only the following options are allowed + + - 'on_input': Last feat map of neck inputs (i.e. backbone feature). + - 'on_lateral': Last feature map after lateral convs. + - 'on_output': The last output feature map after fpn convs. + extra_convs_on_inputs (bool, deprecated): Whether to apply extra convs + on the original feature from the backbone. If True, + it is equivalent to `add_extra_convs='on_input'`. If False, it is + equivalent to set `add_extra_convs='on_output'`. Default to True. + relu_before_extra_convs (bool): Whether to apply relu before the extra + conv. Default: False. + no_norm_on_lateral (bool): Whether to apply norm on lateral. + Default: False. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Config dict for normalization layer. Default: None. + act_cfg (str): Config dict for activation layer in ConvModule. + Default: None. + upsample_cfg (dict): Config dict for interpolate layer. + Default: `dict(mode='nearest')` + + Example: + >>> import torch + >>> in_channels = [2, 3, 5, 7] + >>> scales = [340, 170, 84, 43] + >>> inputs = [torch.rand(1, c, s, s) + ... for c, s in zip(in_channels, scales)] + >>> self = FPN(in_channels, 11, len(in_channels)).eval() + >>> outputs = self.forward(inputs) + >>> for i in range(len(outputs)): + ... print(f'outputs[{i}].shape = {outputs[i].shape}') + outputs[0].shape = torch.Size([1, 11, 340, 340]) + outputs[1].shape = torch.Size([1, 11, 170, 170]) + outputs[2].shape = torch.Size([1, 11, 84, 84]) + outputs[3].shape = torch.Size([1, 11, 43, 43]) + """ + + def __init__(self, + in_channels, + out_channels, + num_outs, + start_level=0, + end_level=-1, + add_extra_convs=False, + extra_convs_on_inputs=True, + relu_before_extra_convs=False, + no_norm_on_lateral=False, + conv_cfg=None, + norm_cfg=None, + act_cfg=None, + upsample_cfg=dict(mode='nearest')): + super(FPN, self).__init__() + assert isinstance(in_channels, list) + self.in_channels = in_channels + self.out_channels = out_channels + self.num_ins = len(in_channels) + self.num_outs = num_outs + self.relu_before_extra_convs = relu_before_extra_convs + self.no_norm_on_lateral = no_norm_on_lateral + self.fp16_enabled = False + self.upsample_cfg = upsample_cfg.copy() + + if end_level == -1: + self.backbone_end_level = self.num_ins + assert num_outs >= self.num_ins - start_level + else: + # if end_level < inputs, no extra level is allowed + self.backbone_end_level = end_level + assert end_level <= len(in_channels) + assert num_outs == end_level - start_level + self.start_level = start_level + self.end_level = end_level + self.add_extra_convs = add_extra_convs + assert isinstance(add_extra_convs, (str, bool)) + if isinstance(add_extra_convs, str): + # Extra_convs_source choices: 'on_input', 'on_lateral', 'on_output' + assert add_extra_convs in ('on_input', 'on_lateral', 'on_output') + elif add_extra_convs: # True + if extra_convs_on_inputs: + # TODO: deprecate `extra_convs_on_inputs` + warnings.simplefilter('once') + warnings.warn( + '"extra_convs_on_inputs" will be deprecated in v2.9.0,' + 'Please use "add_extra_convs"', DeprecationWarning) + self.add_extra_convs = 'on_input' + else: + self.add_extra_convs = 'on_output' + + self.lateral_convs = nn.ModuleList() + self.fpn_convs = nn.ModuleList() + + for i in range(self.start_level, self.backbone_end_level): + l_conv = ConvModule( + in_channels[i], + out_channels, + 1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg if not self.no_norm_on_lateral else None, + act_cfg=act_cfg, + inplace=False) + fpn_conv = ConvModule( + out_channels, + out_channels, + 3, + padding=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + inplace=False) + + self.lateral_convs.append(l_conv) + self.fpn_convs.append(fpn_conv) + + # add extra conv layers (e.g., RetinaNet) + extra_levels = num_outs - self.backbone_end_level + self.start_level + if self.add_extra_convs and extra_levels >= 1: + for i in range(extra_levels): + if i == 0 and self.add_extra_convs == 'on_input': + in_channels = self.in_channels[self.backbone_end_level - 1] + else: + in_channels = out_channels + extra_fpn_conv = ConvModule( + in_channels, + out_channels, + 3, + stride=2, + padding=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + inplace=False) + self.fpn_convs.append(extra_fpn_conv) + + # default init_weights for conv(msra) and norm in ConvModule + def init_weights(self): + """Initialize the weights of FPN module.""" + for m in self.modules(): + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform') + + @auto_fp16() + def forward(self, inputs): + """Forward function.""" + assert len(inputs) == len(self.in_channels) + + # build laterals + laterals = [ + lateral_conv(inputs[i + self.start_level]) + for i, lateral_conv in enumerate(self.lateral_convs) + ] + + # build top-down path + used_backbone_levels = len(laterals) + for i in range(used_backbone_levels - 1, 0, -1): + # In some cases, fixing `scale factor` (e.g. 2) is preferred, but + # it cannot co-exist with `size` in `F.interpolate`. + if 'scale_factor' in self.upsample_cfg: + laterals[i - 1] += F.interpolate(laterals[i], + **self.upsample_cfg) + else: + prev_shape = laterals[i - 1].shape[2:] + laterals[i - 1] += F.interpolate( + laterals[i], size=prev_shape, **self.upsample_cfg) + + # build outputs + # part 1: from original levels + outs = [ + self.fpn_convs[i](laterals[i]) for i in range(used_backbone_levels) + ] + # part 2: add extra levels + if self.num_outs > len(outs): + # use max pool to get more levels on top of outputs + # (e.g., Faster R-CNN, Mask R-CNN) + if not self.add_extra_convs: + for i in range(self.num_outs - used_backbone_levels): + outs.append(F.max_pool2d(outs[-1], 1, stride=2)) + # add conv layers on top of original feature maps (RetinaNet) + else: + if self.add_extra_convs == 'on_input': + extra_source = inputs[self.backbone_end_level - 1] + elif self.add_extra_convs == 'on_lateral': + extra_source = laterals[-1] + elif self.add_extra_convs == 'on_output': + extra_source = outs[-1] + else: + raise NotImplementedError + outs.append(self.fpn_convs[used_backbone_levels](extra_source)) + for i in range(used_backbone_levels + 1, self.num_outs): + if self.relu_before_extra_convs: + outs.append(self.fpn_convs[i](F.relu(outs[-1]))) + else: + outs.append(self.fpn_convs[i](outs[-1])) + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn_carafe.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn_carafe.py new file mode 100644 index 00000000..b97a6aa7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/fpn_carafe.py @@ -0,0 +1,267 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, build_upsample_layer, xavier_init +from mmcv.ops.carafe import CARAFEPack + +from ..builder import NECKS + + +@NECKS.register_module() +class FPN_CARAFE(nn.Module): + """FPN_CARAFE is a more flexible implementation of FPN. It allows more + choice for upsample methods during the top-down pathway. + + It can reproduce the preformance of ICCV 2019 paper + CARAFE: Content-Aware ReAssembly of FEatures + Please refer to https://arxiv.org/abs/1905.02188 for more details. + + Args: + in_channels (list[int]): Number of channels for each input feature map. + out_channels (int): Output channels of feature pyramids. + num_outs (int): Number of output stages. + start_level (int): Start level of feature pyramids. + (Default: 0) + end_level (int): End level of feature pyramids. + (Default: -1 indicates the last level). + norm_cfg (dict): Dictionary to construct and config norm layer. + activate (str): Type of activation function in ConvModule + (Default: None indicates w/o activation). + order (dict): Order of components in ConvModule. + upsample (str): Type of upsample layer. + upsample_cfg (dict): Dictionary to construct and config upsample layer. + """ + + def __init__(self, + in_channels, + out_channels, + num_outs, + start_level=0, + end_level=-1, + norm_cfg=None, + act_cfg=None, + order=('conv', 'norm', 'act'), + upsample_cfg=dict( + type='carafe', + up_kernel=5, + up_group=1, + encoder_kernel=3, + encoder_dilation=1)): + super(FPN_CARAFE, self).__init__() + assert isinstance(in_channels, list) + self.in_channels = in_channels + self.out_channels = out_channels + self.num_ins = len(in_channels) + self.num_outs = num_outs + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + self.with_bias = norm_cfg is None + self.upsample_cfg = upsample_cfg.copy() + self.upsample = self.upsample_cfg.get('type') + self.relu = nn.ReLU(inplace=False) + + self.order = order + assert order in [('conv', 'norm', 'act'), ('act', 'conv', 'norm')] + + assert self.upsample in [ + 'nearest', 'bilinear', 'deconv', 'pixel_shuffle', 'carafe', None + ] + if self.upsample in ['deconv', 'pixel_shuffle']: + assert hasattr( + self.upsample_cfg, + 'upsample_kernel') and self.upsample_cfg.upsample_kernel > 0 + self.upsample_kernel = self.upsample_cfg.pop('upsample_kernel') + + if end_level == -1: + self.backbone_end_level = self.num_ins + assert num_outs >= self.num_ins - start_level + else: + # if end_level < inputs, no extra level is allowed + self.backbone_end_level = end_level + assert end_level <= len(in_channels) + assert num_outs == end_level - start_level + self.start_level = start_level + self.end_level = end_level + + self.lateral_convs = nn.ModuleList() + self.fpn_convs = nn.ModuleList() + self.upsample_modules = nn.ModuleList() + + for i in range(self.start_level, self.backbone_end_level): + l_conv = ConvModule( + in_channels[i], + out_channels, + 1, + norm_cfg=norm_cfg, + bias=self.with_bias, + act_cfg=act_cfg, + inplace=False, + order=self.order) + fpn_conv = ConvModule( + out_channels, + out_channels, + 3, + padding=1, + norm_cfg=self.norm_cfg, + bias=self.with_bias, + act_cfg=act_cfg, + inplace=False, + order=self.order) + if i != self.backbone_end_level - 1: + upsample_cfg_ = self.upsample_cfg.copy() + if self.upsample == 'deconv': + upsample_cfg_.update( + in_channels=out_channels, + out_channels=out_channels, + kernel_size=self.upsample_kernel, + stride=2, + padding=(self.upsample_kernel - 1) // 2, + output_padding=(self.upsample_kernel - 1) // 2) + elif self.upsample == 'pixel_shuffle': + upsample_cfg_.update( + in_channels=out_channels, + out_channels=out_channels, + scale_factor=2, + upsample_kernel=self.upsample_kernel) + elif self.upsample == 'carafe': + upsample_cfg_.update(channels=out_channels, scale_factor=2) + else: + # suppress warnings + align_corners = (None + if self.upsample == 'nearest' else False) + upsample_cfg_.update( + scale_factor=2, + mode=self.upsample, + align_corners=align_corners) + upsample_module = build_upsample_layer(upsample_cfg_) + self.upsample_modules.append(upsample_module) + self.lateral_convs.append(l_conv) + self.fpn_convs.append(fpn_conv) + + # add extra conv layers (e.g., RetinaNet) + extra_out_levels = ( + num_outs - self.backbone_end_level + self.start_level) + if extra_out_levels >= 1: + for i in range(extra_out_levels): + in_channels = ( + self.in_channels[self.backbone_end_level - + 1] if i == 0 else out_channels) + extra_l_conv = ConvModule( + in_channels, + out_channels, + 3, + stride=2, + padding=1, + norm_cfg=norm_cfg, + bias=self.with_bias, + act_cfg=act_cfg, + inplace=False, + order=self.order) + if self.upsample == 'deconv': + upsampler_cfg_ = dict( + in_channels=out_channels, + out_channels=out_channels, + kernel_size=self.upsample_kernel, + stride=2, + padding=(self.upsample_kernel - 1) // 2, + output_padding=(self.upsample_kernel - 1) // 2) + elif self.upsample == 'pixel_shuffle': + upsampler_cfg_ = dict( + in_channels=out_channels, + out_channels=out_channels, + scale_factor=2, + upsample_kernel=self.upsample_kernel) + elif self.upsample == 'carafe': + upsampler_cfg_ = dict( + channels=out_channels, + scale_factor=2, + **self.upsample_cfg) + else: + # suppress warnings + align_corners = (None + if self.upsample == 'nearest' else False) + upsampler_cfg_ = dict( + scale_factor=2, + mode=self.upsample, + align_corners=align_corners) + upsampler_cfg_['type'] = self.upsample + upsample_module = build_upsample_layer(upsampler_cfg_) + extra_fpn_conv = ConvModule( + out_channels, + out_channels, + 3, + padding=1, + norm_cfg=self.norm_cfg, + bias=self.with_bias, + act_cfg=act_cfg, + inplace=False, + order=self.order) + self.upsample_modules.append(upsample_module) + self.fpn_convs.append(extra_fpn_conv) + self.lateral_convs.append(extra_l_conv) + + # default init_weights for conv(msra) and norm in ConvModule + def init_weights(self): + """Initialize the weights of module.""" + for m in self.modules(): + if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)): + xavier_init(m, distribution='uniform') + for m in self.modules(): + if isinstance(m, CARAFEPack): + m.init_weights() + + def slice_as(self, src, dst): + """Slice ``src`` as ``dst`` + + Note: + ``src`` should have the same or larger size than ``dst``. + + Args: + src (torch.Tensor): Tensors to be sliced. + dst (torch.Tensor): ``src`` will be sliced to have the same + size as ``dst``. + + Returns: + torch.Tensor: Sliced tensor. + """ + assert (src.size(2) >= dst.size(2)) and (src.size(3) >= dst.size(3)) + if src.size(2) == dst.size(2) and src.size(3) == dst.size(3): + return src + else: + return src[:, :, :dst.size(2), :dst.size(3)] + + def tensor_add(self, a, b): + """Add tensors ``a`` and ``b`` that might have different sizes.""" + if a.size() == b.size(): + c = a + b + else: + c = a + self.slice_as(b, a) + return c + + def forward(self, inputs): + """Forward function.""" + assert len(inputs) == len(self.in_channels) + + # build laterals + laterals = [] + for i, lateral_conv in enumerate(self.lateral_convs): + if i <= self.backbone_end_level - self.start_level: + input = inputs[min(i + self.start_level, len(inputs) - 1)] + else: + input = laterals[-1] + lateral = lateral_conv(input) + laterals.append(lateral) + + # build top-down path + for i in range(len(laterals) - 1, 0, -1): + if self.upsample is not None: + upsample_feat = self.upsample_modules[i - 1](laterals[i]) + else: + upsample_feat = laterals[i] + laterals[i - 1] = self.tensor_add(laterals[i - 1], upsample_feat) + + # build outputs + num_conv_outs = len(self.fpn_convs) + outs = [] + for i in range(num_conv_outs): + out = self.fpn_convs[i](laterals[i]) + outs.append(out) + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/hrfpn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/hrfpn.py new file mode 100644 index 00000000..cf87cfa7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/hrfpn.py @@ -0,0 +1,102 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, caffe2_xavier_init +from torch.utils.checkpoint import checkpoint + +from ..builder import NECKS + + +@NECKS.register_module() +class HRFPN(nn.Module): + """HRFPN (High Resolution Feature Pyrmamids) + + paper: `High-Resolution Representations for Labeling Pixels and Regions + `_. + + Args: + in_channels (list): number of channels for each branch. + out_channels (int): output channels of feature pyramids. + num_outs (int): number of output stages. + pooling_type (str): pooling for generating feature pyramids + from {MAX, AVG}. + conv_cfg (dict): dictionary to construct and config conv layer. + norm_cfg (dict): dictionary to construct and config norm layer. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + stride (int): stride of 3x3 convolutional layers + """ + + def __init__(self, + in_channels, + out_channels, + num_outs=5, + pooling_type='AVG', + conv_cfg=None, + norm_cfg=None, + with_cp=False, + stride=1): + super(HRFPN, self).__init__() + assert isinstance(in_channels, list) + self.in_channels = in_channels + self.out_channels = out_channels + self.num_ins = len(in_channels) + self.num_outs = num_outs + self.with_cp = with_cp + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + + self.reduction_conv = ConvModule( + sum(in_channels), + out_channels, + kernel_size=1, + conv_cfg=self.conv_cfg, + act_cfg=None) + + self.fpn_convs = nn.ModuleList() + for i in range(self.num_outs): + self.fpn_convs.append( + ConvModule( + out_channels, + out_channels, + kernel_size=3, + padding=1, + stride=stride, + conv_cfg=self.conv_cfg, + act_cfg=None)) + + if pooling_type == 'MAX': + self.pooling = F.max_pool2d + else: + self.pooling = F.avg_pool2d + + def init_weights(self): + """Initialize the weights of module.""" + for m in self.modules(): + if isinstance(m, nn.Conv2d): + caffe2_xavier_init(m) + + def forward(self, inputs): + """Forward function.""" + assert len(inputs) == self.num_ins + outs = [inputs[0]] + for i in range(1, self.num_ins): + outs.append( + F.interpolate(inputs[i], scale_factor=2**i, mode='bilinear')) + out = torch.cat(outs, dim=1) + if out.requires_grad and self.with_cp: + out = checkpoint(self.reduction_conv, out) + else: + out = self.reduction_conv(out) + outs = [out] + for i in range(1, self.num_outs): + outs.append(self.pooling(out, kernel_size=2**i, stride=2**i)) + outputs = [] + + for i in range(self.num_outs): + if outs[i].requires_grad and self.with_cp: + tmp_out = checkpoint(self.fpn_convs[i], outs[i]) + else: + tmp_out = self.fpn_convs[i](outs[i]) + outputs.append(tmp_out) + return tuple(outputs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nas_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nas_fpn.py new file mode 100644 index 00000000..8e333ce6 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nas_fpn.py @@ -0,0 +1,160 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, caffe2_xavier_init +from mmcv.ops.merge_cells import GlobalPoolingCell, SumCell + +from ..builder import NECKS + + +@NECKS.register_module() +class NASFPN(nn.Module): + """NAS-FPN. + + Implementation of `NAS-FPN: Learning Scalable Feature Pyramid Architecture + for Object Detection `_ + + Args: + in_channels (List[int]): Number of input channels per scale. + out_channels (int): Number of output channels (used at each scale) + num_outs (int): Number of output scales. + stack_times (int): The number of times the pyramid architecture will + be stacked. + start_level (int): Index of the start input backbone level used to + build the feature pyramid. Default: 0. + end_level (int): Index of the end input backbone level (exclusive) to + build the feature pyramid. Default: -1, which means the last level. + add_extra_convs (bool): It decides whether to add conv + layers on top of the original feature maps. Default to False. + If True, its actual mode is specified by `extra_convs_on_inputs`. + """ + + def __init__(self, + in_channels, + out_channels, + num_outs, + stack_times, + start_level=0, + end_level=-1, + add_extra_convs=False, + norm_cfg=None): + super(NASFPN, self).__init__() + assert isinstance(in_channels, list) + self.in_channels = in_channels + self.out_channels = out_channels + self.num_ins = len(in_channels) # num of input feature levels + self.num_outs = num_outs # num of output feature levels + self.stack_times = stack_times + self.norm_cfg = norm_cfg + + if end_level == -1: + self.backbone_end_level = self.num_ins + assert num_outs >= self.num_ins - start_level + else: + # if end_level < inputs, no extra level is allowed + self.backbone_end_level = end_level + assert end_level <= len(in_channels) + assert num_outs == end_level - start_level + self.start_level = start_level + self.end_level = end_level + self.add_extra_convs = add_extra_convs + + # add lateral connections + self.lateral_convs = nn.ModuleList() + for i in range(self.start_level, self.backbone_end_level): + l_conv = ConvModule( + in_channels[i], + out_channels, + 1, + norm_cfg=norm_cfg, + act_cfg=None) + self.lateral_convs.append(l_conv) + + # add extra downsample layers (stride-2 pooling or conv) + extra_levels = num_outs - self.backbone_end_level + self.start_level + self.extra_downsamples = nn.ModuleList() + for i in range(extra_levels): + extra_conv = ConvModule( + out_channels, out_channels, 1, norm_cfg=norm_cfg, act_cfg=None) + self.extra_downsamples.append( + nn.Sequential(extra_conv, nn.MaxPool2d(2, 2))) + + # add NAS FPN connections + self.fpn_stages = nn.ModuleList() + for _ in range(self.stack_times): + stage = nn.ModuleDict() + # gp(p6, p4) -> p4_1 + stage['gp_64_4'] = GlobalPoolingCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + # sum(p4_1, p4) -> p4_2 + stage['sum_44_4'] = SumCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + # sum(p4_2, p3) -> p3_out + stage['sum_43_3'] = SumCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + # sum(p3_out, p4_2) -> p4_out + stage['sum_34_4'] = SumCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + # sum(p5, gp(p4_out, p3_out)) -> p5_out + stage['gp_43_5'] = GlobalPoolingCell(with_out_conv=False) + stage['sum_55_5'] = SumCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + # sum(p7, gp(p5_out, p4_2)) -> p7_out + stage['gp_54_7'] = GlobalPoolingCell(with_out_conv=False) + stage['sum_77_7'] = SumCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + # gp(p7_out, p5_out) -> p6_out + stage['gp_75_6'] = GlobalPoolingCell( + in_channels=out_channels, + out_channels=out_channels, + out_norm_cfg=norm_cfg) + self.fpn_stages.append(stage) + + def init_weights(self): + """Initialize the weights of module.""" + for m in self.modules(): + if isinstance(m, nn.Conv2d): + caffe2_xavier_init(m) + + def forward(self, inputs): + """Forward function.""" + # build P3-P5 + feats = [ + lateral_conv(inputs[i + self.start_level]) + for i, lateral_conv in enumerate(self.lateral_convs) + ] + # build P6-P7 on top of P5 + for downsample in self.extra_downsamples: + feats.append(downsample(feats[-1])) + + p3, p4, p5, p6, p7 = feats + + for stage in self.fpn_stages: + # gp(p6, p4) -> p4_1 + p4_1 = stage['gp_64_4'](p6, p4, out_size=p4.shape[-2:]) + # sum(p4_1, p4) -> p4_2 + p4_2 = stage['sum_44_4'](p4_1, p4, out_size=p4.shape[-2:]) + # sum(p4_2, p3) -> p3_out + p3 = stage['sum_43_3'](p4_2, p3, out_size=p3.shape[-2:]) + # sum(p3_out, p4_2) -> p4_out + p4 = stage['sum_34_4'](p3, p4_2, out_size=p4.shape[-2:]) + # sum(p5, gp(p4_out, p3_out)) -> p5_out + p5_tmp = stage['gp_43_5'](p4, p3, out_size=p5.shape[-2:]) + p5 = stage['sum_55_5'](p5, p5_tmp, out_size=p5.shape[-2:]) + # sum(p7, gp(p5_out, p4_2)) -> p7_out + p7_tmp = stage['gp_54_7'](p5, p4_2, out_size=p7.shape[-2:]) + p7 = stage['sum_77_7'](p7, p7_tmp, out_size=p7.shape[-2:]) + # gp(p7_out, p5_out) -> p6_out + p6 = stage['gp_75_6'](p7, p5, out_size=p6.shape[-2:]) + + return p3, p4, p5, p6, p7 diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nasfcos_fpn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nasfcos_fpn.py new file mode 100644 index 00000000..2daf79ef --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/nasfcos_fpn.py @@ -0,0 +1,161 @@ +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, caffe2_xavier_init +from mmcv.ops.merge_cells import ConcatCell + +from ..builder import NECKS + + +@NECKS.register_module() +class NASFCOS_FPN(nn.Module): + """FPN structure in NASFPN. + + Implementation of paper `NAS-FCOS: Fast Neural Architecture Search for + Object Detection `_ + + Args: + in_channels (List[int]): Number of input channels per scale. + out_channels (int): Number of output channels (used at each scale) + num_outs (int): Number of output scales. + start_level (int): Index of the start input backbone level used to + build the feature pyramid. Default: 0. + end_level (int): Index of the end input backbone level (exclusive) to + build the feature pyramid. Default: -1, which means the last level. + add_extra_convs (bool): It decides whether to add conv + layers on top of the original feature maps. Default to False. + If True, its actual mode is specified by `extra_convs_on_inputs`. + conv_cfg (dict): dictionary to construct and config conv layer. + norm_cfg (dict): dictionary to construct and config norm layer. + """ + + def __init__(self, + in_channels, + out_channels, + num_outs, + start_level=1, + end_level=-1, + add_extra_convs=False, + conv_cfg=None, + norm_cfg=None): + super(NASFCOS_FPN, self).__init__() + assert isinstance(in_channels, list) + self.in_channels = in_channels + self.out_channels = out_channels + self.num_ins = len(in_channels) + self.num_outs = num_outs + self.norm_cfg = norm_cfg + self.conv_cfg = conv_cfg + + if end_level == -1: + self.backbone_end_level = self.num_ins + assert num_outs >= self.num_ins - start_level + else: + self.backbone_end_level = end_level + assert end_level <= len(in_channels) + assert num_outs == end_level - start_level + self.start_level = start_level + self.end_level = end_level + self.add_extra_convs = add_extra_convs + + self.adapt_convs = nn.ModuleList() + for i in range(self.start_level, self.backbone_end_level): + adapt_conv = ConvModule( + in_channels[i], + out_channels, + 1, + stride=1, + padding=0, + bias=False, + norm_cfg=dict(type='BN'), + act_cfg=dict(type='ReLU', inplace=False)) + self.adapt_convs.append(adapt_conv) + + # C2 is omitted according to the paper + extra_levels = num_outs - self.backbone_end_level + self.start_level + + def build_concat_cell(with_input1_conv, with_input2_conv): + cell_conv_cfg = dict( + kernel_size=1, padding=0, bias=False, groups=out_channels) + return ConcatCell( + in_channels=out_channels, + out_channels=out_channels, + with_out_conv=True, + out_conv_cfg=cell_conv_cfg, + out_norm_cfg=dict(type='BN'), + out_conv_order=('norm', 'act', 'conv'), + with_input1_conv=with_input1_conv, + with_input2_conv=with_input2_conv, + input_conv_cfg=conv_cfg, + input_norm_cfg=norm_cfg, + upsample_mode='nearest') + + # Denote c3=f0, c4=f1, c5=f2 for convince + self.fpn = nn.ModuleDict() + self.fpn['c22_1'] = build_concat_cell(True, True) + self.fpn['c22_2'] = build_concat_cell(True, True) + self.fpn['c32'] = build_concat_cell(True, False) + self.fpn['c02'] = build_concat_cell(True, False) + self.fpn['c42'] = build_concat_cell(True, True) + self.fpn['c36'] = build_concat_cell(True, True) + self.fpn['c61'] = build_concat_cell(True, True) # f9 + self.extra_downsamples = nn.ModuleList() + for i in range(extra_levels): + extra_act_cfg = None if i == 0 \ + else dict(type='ReLU', inplace=False) + self.extra_downsamples.append( + ConvModule( + out_channels, + out_channels, + 3, + stride=2, + padding=1, + act_cfg=extra_act_cfg, + order=('act', 'norm', 'conv'))) + + def forward(self, inputs): + """Forward function.""" + feats = [ + adapt_conv(inputs[i + self.start_level]) + for i, adapt_conv in enumerate(self.adapt_convs) + ] + + for (i, module_name) in enumerate(self.fpn): + idx_1, idx_2 = int(module_name[1]), int(module_name[2]) + res = self.fpn[module_name](feats[idx_1], feats[idx_2]) + feats.append(res) + + ret = [] + for (idx, input_idx) in zip([9, 8, 7], [1, 2, 3]): # add P3, P4, P5 + feats1, feats2 = feats[idx], feats[5] + feats2_resize = F.interpolate( + feats2, + size=feats1.size()[2:], + mode='bilinear', + align_corners=False) + + feats_sum = feats1 + feats2_resize + ret.append( + F.interpolate( + feats_sum, + size=inputs[input_idx].size()[2:], + mode='bilinear', + align_corners=False)) + + for submodule in self.extra_downsamples: + ret.append(submodule(ret[-1])) + + return tuple(ret) + + def init_weights(self): + """Initialize the weights of module.""" + for module in self.fpn.values(): + if hasattr(module, 'conv_out'): + caffe2_xavier_init(module.out_conv.conv) + + for modules in [ + self.adapt_convs.modules(), + self.extra_downsamples.modules() + ]: + for module in modules: + if isinstance(module, nn.Conv2d): + caffe2_xavier_init(module) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/pafpn.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/pafpn.py new file mode 100644 index 00000000..d7c0b50f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/pafpn.py @@ -0,0 +1,142 @@ +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule +from mmcv.runner import auto_fp16 + +from ..builder import NECKS +from .fpn import FPN + + +@NECKS.register_module() +class PAFPN(FPN): + """Path Aggregation Network for Instance Segmentation. + + This is an implementation of the `PAFPN in Path Aggregation Network + `_. + + Args: + in_channels (List[int]): Number of input channels per scale. + out_channels (int): Number of output channels (used at each scale) + num_outs (int): Number of output scales. + start_level (int): Index of the start input backbone level used to + build the feature pyramid. Default: 0. + end_level (int): Index of the end input backbone level (exclusive) to + build the feature pyramid. Default: -1, which means the last level. + add_extra_convs (bool): Whether to add conv layers on top of the + original feature maps. Default: False. + extra_convs_on_inputs (bool): Whether to apply extra conv on + the original feature from the backbone. Default: False. + relu_before_extra_convs (bool): Whether to apply relu before the extra + conv. Default: False. + no_norm_on_lateral (bool): Whether to apply norm on lateral. + Default: False. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Config dict for normalization layer. Default: None. + act_cfg (str): Config dict for activation layer in ConvModule. + Default: None. + """ + + def __init__(self, + in_channels, + out_channels, + num_outs, + start_level=0, + end_level=-1, + add_extra_convs=False, + extra_convs_on_inputs=True, + relu_before_extra_convs=False, + no_norm_on_lateral=False, + conv_cfg=None, + norm_cfg=None, + act_cfg=None): + super(PAFPN, + self).__init__(in_channels, out_channels, num_outs, start_level, + end_level, add_extra_convs, extra_convs_on_inputs, + relu_before_extra_convs, no_norm_on_lateral, + conv_cfg, norm_cfg, act_cfg) + # add extra bottom up pathway + self.downsample_convs = nn.ModuleList() + self.pafpn_convs = nn.ModuleList() + for i in range(self.start_level + 1, self.backbone_end_level): + d_conv = ConvModule( + out_channels, + out_channels, + 3, + stride=2, + padding=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + inplace=False) + pafpn_conv = ConvModule( + out_channels, + out_channels, + 3, + padding=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg, + inplace=False) + self.downsample_convs.append(d_conv) + self.pafpn_convs.append(pafpn_conv) + + @auto_fp16() + def forward(self, inputs): + """Forward function.""" + assert len(inputs) == len(self.in_channels) + + # build laterals + laterals = [ + lateral_conv(inputs[i + self.start_level]) + for i, lateral_conv in enumerate(self.lateral_convs) + ] + + # build top-down path + used_backbone_levels = len(laterals) + for i in range(used_backbone_levels - 1, 0, -1): + prev_shape = laterals[i - 1].shape[2:] + laterals[i - 1] += F.interpolate( + laterals[i], size=prev_shape, mode='nearest') + + # build outputs + # part 1: from original levels + inter_outs = [ + self.fpn_convs[i](laterals[i]) for i in range(used_backbone_levels) + ] + + # part 2: add bottom-up path + for i in range(0, used_backbone_levels - 1): + inter_outs[i + 1] += self.downsample_convs[i](inter_outs[i]) + + outs = [] + outs.append(inter_outs[0]) + outs.extend([ + self.pafpn_convs[i - 1](inter_outs[i]) + for i in range(1, used_backbone_levels) + ]) + + # part 3: add extra levels + if self.num_outs > len(outs): + # use max pool to get more levels on top of outputs + # (e.g., Faster R-CNN, Mask R-CNN) + if not self.add_extra_convs: + for i in range(self.num_outs - used_backbone_levels): + outs.append(F.max_pool2d(outs[-1], 1, stride=2)) + # add conv layers on top of original feature maps (RetinaNet) + else: + if self.add_extra_convs == 'on_input': + orig = inputs[self.backbone_end_level - 1] + outs.append(self.fpn_convs[used_backbone_levels](orig)) + elif self.add_extra_convs == 'on_lateral': + outs.append(self.fpn_convs[used_backbone_levels]( + laterals[-1])) + elif self.add_extra_convs == 'on_output': + outs.append(self.fpn_convs[used_backbone_levels](outs[-1])) + else: + raise NotImplementedError + for i in range(used_backbone_levels + 1, self.num_outs): + if self.relu_before_extra_convs: + outs.append(self.fpn_convs[i](F.relu(outs[-1]))) + else: + outs.append(self.fpn_convs[i](outs[-1])) + return tuple(outs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/rfp.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/rfp.py new file mode 100644 index 00000000..8a63e63b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/rfp.py @@ -0,0 +1,128 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import constant_init, kaiming_init, xavier_init + +from ..builder import NECKS, build_backbone +from .fpn import FPN + + +class ASPP(nn.Module): + """ASPP (Atrous Spatial Pyramid Pooling) + + This is an implementation of the ASPP module used in DetectoRS + (https://arxiv.org/pdf/2006.02334.pdf) + + Args: + in_channels (int): Number of input channels. + out_channels (int): Number of channels produced by this module + dilations (tuple[int]): Dilations of the four branches. + Default: (1, 3, 6, 1) + """ + + def __init__(self, in_channels, out_channels, dilations=(1, 3, 6, 1)): + super().__init__() + assert dilations[-1] == 1 + self.aspp = nn.ModuleList() + for dilation in dilations: + kernel_size = 3 if dilation > 1 else 1 + padding = dilation if dilation > 1 else 0 + conv = nn.Conv2d( + in_channels, + out_channels, + kernel_size=kernel_size, + stride=1, + dilation=dilation, + padding=padding, + bias=True) + self.aspp.append(conv) + self.gap = nn.AdaptiveAvgPool2d(1) + self.init_weights() + + def init_weights(self): + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + + def forward(self, x): + avg_x = self.gap(x) + out = [] + for aspp_idx in range(len(self.aspp)): + inp = avg_x if (aspp_idx == len(self.aspp) - 1) else x + out.append(F.relu_(self.aspp[aspp_idx](inp))) + out[-1] = out[-1].expand_as(out[-2]) + out = torch.cat(out, dim=1) + return out + + +@NECKS.register_module() +class RFP(FPN): + """RFP (Recursive Feature Pyramid) + + This is an implementation of RFP in `DetectoRS + `_. Different from standard FPN, the + input of RFP should be multi level features along with origin input image + of backbone. + + Args: + rfp_steps (int): Number of unrolled steps of RFP. + rfp_backbone (dict): Configuration of the backbone for RFP. + aspp_out_channels (int): Number of output channels of ASPP module. + aspp_dilations (tuple[int]): Dilation rates of four branches. + Default: (1, 3, 6, 1) + """ + + def __init__(self, + rfp_steps, + rfp_backbone, + aspp_out_channels, + aspp_dilations=(1, 3, 6, 1), + **kwargs): + super().__init__(**kwargs) + self.rfp_steps = rfp_steps + self.rfp_modules = nn.ModuleList() + for rfp_idx in range(1, rfp_steps): + rfp_module = build_backbone(rfp_backbone) + self.rfp_modules.append(rfp_module) + self.rfp_aspp = ASPP(self.out_channels, aspp_out_channels, + aspp_dilations) + self.rfp_weight = nn.Conv2d( + self.out_channels, + 1, + kernel_size=1, + stride=1, + padding=0, + bias=True) + + def init_weights(self): + # Avoid using super().init_weights(), which may alter the default + # initialization of the modules in self.rfp_modules that have missing + # keys in the pretrained checkpoint. + for convs in [self.lateral_convs, self.fpn_convs]: + for m in convs.modules(): + if isinstance(m, nn.Conv2d): + xavier_init(m, distribution='uniform') + for rfp_idx in range(self.rfp_steps - 1): + self.rfp_modules[rfp_idx].init_weights( + self.rfp_modules[rfp_idx].pretrained) + constant_init(self.rfp_weight, 0) + + def forward(self, inputs): + inputs = list(inputs) + assert len(inputs) == len(self.in_channels) + 1 # +1 for input image + img = inputs.pop(0) + # FPN forward + x = super().forward(tuple(inputs)) + for rfp_idx in range(self.rfp_steps - 1): + rfp_feats = [x[0]] + list( + self.rfp_aspp(x[i]) for i in range(1, len(x))) + x_idx = self.rfp_modules[rfp_idx].rfp_forward(img, rfp_feats) + # FPN forward + x_idx = super().forward(x_idx) + x_new = [] + for ft_idx in range(len(x_idx)): + add_weight = torch.sigmoid(self.rfp_weight(x_idx[ft_idx])) + x_new.append(add_weight * x_idx[ft_idx] + + (1 - add_weight) * x[ft_idx]) + x = x_new + return x diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/yolo_neck.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/yolo_neck.py new file mode 100644 index 00000000..c2f9b9ef --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/necks/yolo_neck.py @@ -0,0 +1,136 @@ +# Copyright (c) 2019 Western Digital Corporation or its affiliates. + +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule + +from ..builder import NECKS + + +class DetectionBlock(nn.Module): + """Detection block in YOLO neck. + + Let out_channels = n, the DetectionBlock contains: + Six ConvLayers, 1 Conv2D Layer and 1 YoloLayer. + The first 6 ConvLayers are formed the following way: + 1x1xn, 3x3x2n, 1x1xn, 3x3x2n, 1x1xn, 3x3x2n. + The Conv2D layer is 1x1x255. + Some block will have branch after the fifth ConvLayer. + The input channel is arbitrary (in_channels) + + Args: + in_channels (int): The number of input channels. + out_channels (int): The number of output channels. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Dictionary to construct and config norm layer. + Default: dict(type='BN', requires_grad=True) + act_cfg (dict): Config dict for activation layer. + Default: dict(type='LeakyReLU', negative_slope=0.1). + """ + + def __init__(self, + in_channels, + out_channels, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + act_cfg=dict(type='LeakyReLU', negative_slope=0.1)): + super(DetectionBlock, self).__init__() + double_out_channels = out_channels * 2 + + # shortcut + cfg = dict(conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg) + self.conv1 = ConvModule(in_channels, out_channels, 1, **cfg) + self.conv2 = ConvModule( + out_channels, double_out_channels, 3, padding=1, **cfg) + self.conv3 = ConvModule(double_out_channels, out_channels, 1, **cfg) + self.conv4 = ConvModule( + out_channels, double_out_channels, 3, padding=1, **cfg) + self.conv5 = ConvModule(double_out_channels, out_channels, 1, **cfg) + + def forward(self, x): + tmp = self.conv1(x) + tmp = self.conv2(tmp) + tmp = self.conv3(tmp) + tmp = self.conv4(tmp) + out = self.conv5(tmp) + return out + + +@NECKS.register_module() +class YOLOV3Neck(nn.Module): + """The neck of YOLOV3. + + It can be treated as a simplified version of FPN. It + will take the result from Darknet backbone and do some upsampling and + concatenation. It will finally output the detection result. + + Note: + The input feats should be from top to bottom. + i.e., from high-lvl to low-lvl + But YOLOV3Neck will process them in reversed order. + i.e., from bottom (high-lvl) to top (low-lvl) + + Args: + num_scales (int): The number of scales / stages. + in_channels (int): The number of input channels. + out_channels (int): The number of output channels. + conv_cfg (dict): Config dict for convolution layer. Default: None. + norm_cfg (dict): Dictionary to construct and config norm layer. + Default: dict(type='BN', requires_grad=True) + act_cfg (dict): Config dict for activation layer. + Default: dict(type='LeakyReLU', negative_slope=0.1). + """ + + def __init__(self, + num_scales, + in_channels, + out_channels, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + act_cfg=dict(type='LeakyReLU', negative_slope=0.1)): + super(YOLOV3Neck, self).__init__() + assert (num_scales == len(in_channels) == len(out_channels)) + self.num_scales = num_scales + self.in_channels = in_channels + self.out_channels = out_channels + + # shortcut + cfg = dict(conv_cfg=conv_cfg, norm_cfg=norm_cfg, act_cfg=act_cfg) + + # To support arbitrary scales, the code looks awful, but it works. + # Better solution is welcomed. + self.detect1 = DetectionBlock(in_channels[0], out_channels[0], **cfg) + for i in range(1, self.num_scales): + in_c, out_c = self.in_channels[i], self.out_channels[i] + self.add_module(f'conv{i}', ConvModule(in_c, out_c, 1, **cfg)) + # in_c + out_c : High-lvl feats will be cat with low-lvl feats + self.add_module(f'detect{i+1}', + DetectionBlock(in_c + out_c, out_c, **cfg)) + + def forward(self, feats): + assert len(feats) == self.num_scales + + # processed from bottom (high-lvl) to top (low-lvl) + outs = [] + out = self.detect1(feats[-1]) + outs.append(out) + + for i, x in enumerate(reversed(feats[:-1])): + conv = getattr(self, f'conv{i+1}') + tmp = conv(out) + + # Cat with low-lvl feats + tmp = F.interpolate(tmp, scale_factor=2) + tmp = torch.cat((tmp, x), 1) + + detect = getattr(self, f'detect{i+2}') + out = detect(tmp) + outs.append(out) + + return tuple(outs) + + def init_weights(self): + """Initialize the weights of module.""" + # init is done in ConvModule + pass diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/__init__.py new file mode 100644 index 00000000..5cb6245e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/__init__.py @@ -0,0 +1,28 @@ +from .base_roi_head import BaseRoIHead +from .bbox_heads import (BBoxHead, ConvFCBBoxHead, DoubleConvFCBBoxHead, + Shared2FCBBoxHead, Shared4Conv1FCBBoxHead) +from .cascade_roi_head import CascadeRoIHead +from .double_roi_head import DoubleHeadRoIHead +from .dynamic_roi_head import DynamicRoIHead +from .grid_roi_head import GridRoIHead +from .htc_roi_head import HybridTaskCascadeRoIHead +from .mask_heads import (CoarseMaskHead, FCNMaskHead, FusedSemanticHead, + GridHead, HTCMaskHead, MaskIoUHead, MaskPointHead) +from .mask_scoring_roi_head import MaskScoringRoIHead +from .pisa_roi_head import PISARoIHead +from .point_rend_roi_head import PointRendRoIHead +from .roi_extractors import SingleRoIExtractor +from .shared_heads import ResLayer +from .sparse_roi_head import SparseRoIHead +from .standard_roi_head import StandardRoIHead +from .trident_roi_head import TridentRoIHead + +__all__ = [ + 'BaseRoIHead', 'CascadeRoIHead', 'DoubleHeadRoIHead', 'MaskScoringRoIHead', + 'HybridTaskCascadeRoIHead', 'GridRoIHead', 'ResLayer', 'BBoxHead', + 'ConvFCBBoxHead', 'Shared2FCBBoxHead', 'StandardRoIHead', + 'Shared4Conv1FCBBoxHead', 'DoubleConvFCBBoxHead', 'FCNMaskHead', + 'HTCMaskHead', 'FusedSemanticHead', 'GridHead', 'MaskIoUHead', + 'SingleRoIExtractor', 'PISARoIHead', 'PointRendRoIHead', 'MaskPointHead', + 'CoarseMaskHead', 'DynamicRoIHead', 'SparseRoIHead', 'TridentRoIHead' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/base_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/base_roi_head.py new file mode 100644 index 00000000..ec027dda --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/base_roi_head.py @@ -0,0 +1,106 @@ +from abc import ABCMeta, abstractmethod + +import torch.nn as nn + +from ..builder import build_shared_head + + +class BaseRoIHead(nn.Module, metaclass=ABCMeta): + """Base class for RoIHeads.""" + + def __init__(self, + bbox_roi_extractor=None, + bbox_head=None, + mask_roi_extractor=None, + mask_head=None, + shared_head=None, + train_cfg=None, + test_cfg=None): + super(BaseRoIHead, self).__init__() + self.train_cfg = train_cfg + self.test_cfg = test_cfg + if shared_head is not None: + self.shared_head = build_shared_head(shared_head) + + if bbox_head is not None: + self.init_bbox_head(bbox_roi_extractor, bbox_head) + + if mask_head is not None: + self.init_mask_head(mask_roi_extractor, mask_head) + + self.init_assigner_sampler() + + @property + def with_bbox(self): + """bool: whether the RoI head contains a `bbox_head`""" + return hasattr(self, 'bbox_head') and self.bbox_head is not None + + @property + def with_mask(self): + """bool: whether the RoI head contains a `mask_head`""" + return hasattr(self, 'mask_head') and self.mask_head is not None + + @property + def with_shared_head(self): + """bool: whether the RoI head contains a `shared_head`""" + return hasattr(self, 'shared_head') and self.shared_head is not None + + @abstractmethod + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + pass + + @abstractmethod + def init_bbox_head(self): + """Initialize ``bbox_head``""" + pass + + @abstractmethod + def init_mask_head(self): + """Initialize ``mask_head``""" + pass + + @abstractmethod + def init_assigner_sampler(self): + """Initialize assigner and sampler.""" + pass + + @abstractmethod + def forward_train(self, + x, + img_meta, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None, + **kwargs): + """Forward function during training.""" + pass + + async def async_simple_test(self, x, img_meta, **kwargs): + """Asynchronized test function.""" + raise NotImplementedError + + def simple_test(self, + x, + proposal_list, + img_meta, + proposals=None, + rescale=False, + **kwargs): + """Test without augmentation.""" + pass + + def aug_test(self, x, proposal_list, img_metas, rescale=False, **kwargs): + """Test with augmentations. + + If rescale is False, then returned bboxes and masks will fit the scale + of imgs[0]. + """ + pass diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/__init__.py new file mode 100644 index 00000000..82aac2f7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/__init__.py @@ -0,0 +1,11 @@ +from .bbox_head import BBoxHead +from .convfc_bbox_head import (ConvFCBBoxHead, Shared2FCBBoxHead, + Shared4Conv1FCBBoxHead) +from .dii_head import DIIHead +from .double_bbox_head import DoubleConvFCBBoxHead +from .sabl_head import SABLHead + +__all__ = [ + 'BBoxHead', 'ConvFCBBoxHead', 'Shared2FCBBoxHead', + 'Shared4Conv1FCBBoxHead', 'DoubleConvFCBBoxHead', 'SABLHead', 'DIIHead' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/bbox_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/bbox_head.py new file mode 100644 index 00000000..5d3e7fd4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/bbox_head.py @@ -0,0 +1,416 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.runner import auto_fp16, force_fp32 +from torch.nn.modules.utils import _pair + +from mmdet.core import build_bbox_coder, multi_apply, multiclass_nms +from mmdet.models.builder import HEADS, build_loss +from mmdet.models.losses import accuracy + + +@HEADS.register_module() +class BBoxHead(nn.Module): + """Simplest RoI head, with only two fc layers for classification and + regression respectively.""" + + def __init__(self, + with_avg_pool=False, + with_cls=True, + with_reg=True, + roi_feat_size=7, + in_channels=256, + num_classes=80, + bbox_coder=dict( + type='DeltaXYWHBBoxCoder', + clip_border=True, + target_means=[0., 0., 0., 0.], + target_stds=[0.1, 0.1, 0.2, 0.2]), + reg_class_agnostic=False, + reg_decoded_bbox=False, + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox=dict( + type='SmoothL1Loss', beta=1.0, loss_weight=1.0)): + super(BBoxHead, self).__init__() + assert with_cls or with_reg + self.with_avg_pool = with_avg_pool + self.with_cls = with_cls + self.with_reg = with_reg + self.roi_feat_size = _pair(roi_feat_size) + self.roi_feat_area = self.roi_feat_size[0] * self.roi_feat_size[1] + self.in_channels = in_channels + self.num_classes = num_classes + self.reg_class_agnostic = reg_class_agnostic + self.reg_decoded_bbox = reg_decoded_bbox + self.fp16_enabled = False + + self.bbox_coder = build_bbox_coder(bbox_coder) + self.loss_cls = build_loss(loss_cls) + self.loss_bbox = build_loss(loss_bbox) + + in_channels = self.in_channels + if self.with_avg_pool: + self.avg_pool = nn.AvgPool2d(self.roi_feat_size) + else: + in_channels *= self.roi_feat_area + if self.with_cls: + # need to add background class + self.fc_cls = nn.Linear(in_channels, num_classes + 1) + if self.with_reg: + out_dim_reg = 4 if reg_class_agnostic else 4 * num_classes + self.fc_reg = nn.Linear(in_channels, out_dim_reg) + self.debug_imgs = None + + def init_weights(self): + # conv layers are already initialized by ConvModule + if self.with_cls: + nn.init.normal_(self.fc_cls.weight, 0, 0.01) + nn.init.constant_(self.fc_cls.bias, 0) + if self.with_reg: + nn.init.normal_(self.fc_reg.weight, 0, 0.001) + nn.init.constant_(self.fc_reg.bias, 0) + + @auto_fp16() + def forward(self, x): + if self.with_avg_pool: + x = self.avg_pool(x) + x = x.view(x.size(0), -1) + cls_score = self.fc_cls(x) if self.with_cls else None + bbox_pred = self.fc_reg(x) if self.with_reg else None + return cls_score, bbox_pred + + def _get_target_single(self, pos_bboxes, neg_bboxes, pos_gt_bboxes, + pos_gt_labels, cfg): + """Calculate the ground truth for proposals in the single image + according to the sampling results. + + Args: + pos_bboxes (Tensor): Contains all the positive boxes, + has shape (num_pos, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + neg_bboxes (Tensor): Contains all the negative boxes, + has shape (num_neg, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + pos_gt_bboxes (Tensor): Contains all the gt_boxes, + has shape (num_gt, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + pos_gt_labels (Tensor): Contains all the gt_labels, + has shape (num_gt). + cfg (obj:`ConfigDict`): `train_cfg` of R-CNN. + + Returns: + Tuple[Tensor]: Ground truth for proposals + in a single image. Containing the following Tensors: + + - labels(Tensor): Gt_labels for all proposals, has + shape (num_proposals,). + - label_weights(Tensor): Labels_weights for all + proposals, has shape (num_proposals,). + - bbox_targets(Tensor):Regression target for all + proposals, has shape (num_proposals, 4), the + last dimension 4 represents [tl_x, tl_y, br_x, br_y]. + - bbox_weights(Tensor):Regression weights for all + proposals, has shape (num_proposals, 4). + """ + num_pos = pos_bboxes.size(0) + num_neg = neg_bboxes.size(0) + num_samples = num_pos + num_neg + + # original implementation uses new_zeros since BG are set to be 0 + # now use empty & fill because BG cat_id = num_classes, + # FG cat_id = [0, num_classes-1] + labels = pos_bboxes.new_full((num_samples, ), + self.num_classes, + dtype=torch.long) + label_weights = pos_bboxes.new_zeros(num_samples) + bbox_targets = pos_bboxes.new_zeros(num_samples, 4) + bbox_weights = pos_bboxes.new_zeros(num_samples, 4) + if num_pos > 0: + labels[:num_pos] = pos_gt_labels + pos_weight = 1.0 if cfg.pos_weight <= 0 else cfg.pos_weight + label_weights[:num_pos] = pos_weight + if not self.reg_decoded_bbox: + pos_bbox_targets = self.bbox_coder.encode( + pos_bboxes, pos_gt_bboxes) + else: + # When the regression loss (e.g. `IouLoss`, `GIouLoss`) + # is applied directly on the decoded bounding boxes, both + # the predicted boxes and regression targets should be with + # absolute coordinate format. + pos_bbox_targets = pos_gt_bboxes + bbox_targets[:num_pos, :] = pos_bbox_targets + bbox_weights[:num_pos, :] = 1 + if num_neg > 0: + label_weights[-num_neg:] = 1.0 + + return labels, label_weights, bbox_targets, bbox_weights + + def get_targets(self, + sampling_results, + gt_bboxes, + gt_labels, + rcnn_train_cfg, + concat=True): + """Calculate the ground truth for all samples in a batch according to + the sampling_results. + + Almost the same as the implementation in bbox_head, we passed + additional parameters pos_inds_list and neg_inds_list to + `_get_target_single` function. + + Args: + sampling_results (List[obj:SamplingResults]): Assign results of + all images in a batch after sampling. + gt_bboxes (list[Tensor]): Gt_bboxes of all images in a batch, + each tensor has shape (num_gt, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + gt_labels (list[Tensor]): Gt_labels of all images in a batch, + each tensor has shape (num_gt,). + rcnn_train_cfg (obj:ConfigDict): `train_cfg` of RCNN. + concat (bool): Whether to concatenate the results of all + the images in a single batch. + + Returns: + Tuple[Tensor]: Ground truth for proposals in a single image. + Containing the following list of Tensors: + + - labels (list[Tensor],Tensor): Gt_labels for all + proposals in a batch, each tensor in list has + shape (num_proposals,) when `concat=False`, otherwise + just a single tensor has shape (num_all_proposals,). + - label_weights (list[Tensor]): Labels_weights for + all proposals in a batch, each tensor in list has + shape (num_proposals,) when `concat=False`, otherwise + just a single tensor has shape (num_all_proposals,). + - bbox_targets (list[Tensor],Tensor): Regression target + for all proposals in a batch, each tensor in list + has shape (num_proposals, 4) when `concat=False`, + otherwise just a single tensor has shape + (num_all_proposals, 4), the last dimension 4 represents + [tl_x, tl_y, br_x, br_y]. + - bbox_weights (list[tensor],Tensor): Regression weights for + all proposals in a batch, each tensor in list has shape + (num_proposals, 4) when `concat=False`, otherwise just a + single tensor has shape (num_all_proposals, 4). + """ + pos_bboxes_list = [res.pos_bboxes for res in sampling_results] + neg_bboxes_list = [res.neg_bboxes for res in sampling_results] + pos_gt_bboxes_list = [res.pos_gt_bboxes for res in sampling_results] + pos_gt_labels_list = [res.pos_gt_labels for res in sampling_results] + labels, label_weights, bbox_targets, bbox_weights = multi_apply( + self._get_target_single, + pos_bboxes_list, + neg_bboxes_list, + pos_gt_bboxes_list, + pos_gt_labels_list, + cfg=rcnn_train_cfg) + + if concat: + labels = torch.cat(labels, 0) + label_weights = torch.cat(label_weights, 0) + bbox_targets = torch.cat(bbox_targets, 0) + bbox_weights = torch.cat(bbox_weights, 0) + return labels, label_weights, bbox_targets, bbox_weights + + @force_fp32(apply_to=('cls_score', 'bbox_pred')) + def loss(self, + cls_score, + bbox_pred, + rois, + labels, + label_weights, + bbox_targets, + bbox_weights, + reduction_override=None): + losses = dict() + if cls_score is not None: + avg_factor = max(torch.sum(label_weights > 0).float().item(), 1.) + if cls_score.numel() > 0: + losses['loss_cls'] = self.loss_cls( + cls_score, + labels, + label_weights, + avg_factor=avg_factor, + reduction_override=reduction_override) + losses['acc'] = accuracy(cls_score, labels) + if bbox_pred is not None: + bg_class_ind = self.num_classes + # 0~self.num_classes-1 are FG, self.num_classes is BG + pos_inds = (labels >= 0) & (labels < bg_class_ind) + # do not perform bounding box regression for BG anymore. + if pos_inds.any(): + if self.reg_decoded_bbox: + # When the regression loss (e.g. `IouLoss`, + # `GIouLoss`, `DIouLoss`) is applied directly on + # the decoded bounding boxes, it decodes the + # already encoded coordinates to absolute format. + bbox_pred = self.bbox_coder.decode(rois[:, 1:], bbox_pred) + if self.reg_class_agnostic: + pos_bbox_pred = bbox_pred.view( + bbox_pred.size(0), 4)[pos_inds.type(torch.bool)] + else: + pos_bbox_pred = bbox_pred.view( + bbox_pred.size(0), -1, + 4)[pos_inds.type(torch.bool), + labels[pos_inds.type(torch.bool)]] + losses['loss_bbox'] = self.loss_bbox( + pos_bbox_pred, + bbox_targets[pos_inds.type(torch.bool)], + bbox_weights[pos_inds.type(torch.bool)], + avg_factor=bbox_targets.size(0), + reduction_override=reduction_override) + else: + losses['loss_bbox'] = bbox_pred[pos_inds].sum() + return losses + + @force_fp32(apply_to=('cls_score', 'bbox_pred')) + def get_bboxes(self, + rois, + cls_score, + bbox_pred, + img_shape, + scale_factor, + rescale=False, + cfg=None): + if isinstance(cls_score, list): + cls_score = sum(cls_score) / float(len(cls_score)) + scores = F.softmax(cls_score, dim=1) if cls_score is not None else None + + if bbox_pred is not None: + bboxes = self.bbox_coder.decode( + rois[:, 1:], bbox_pred, max_shape=img_shape) + else: + bboxes = rois[:, 1:].clone() + if img_shape is not None: + bboxes[:, [0, 2]].clamp_(min=0, max=img_shape[1]) + bboxes[:, [1, 3]].clamp_(min=0, max=img_shape[0]) + + if rescale and bboxes.size(0) > 0: + if isinstance(scale_factor, float): + bboxes /= scale_factor + else: + scale_factor = bboxes.new_tensor(scale_factor) + bboxes = (bboxes.view(bboxes.size(0), -1, 4) / + scale_factor).view(bboxes.size()[0], -1) + + if cfg is None: + return bboxes, scores + else: + det_bboxes, det_labels = multiclass_nms(bboxes, scores, + cfg.score_thr, cfg.nms, + cfg.max_per_img) + + return det_bboxes, det_labels + + @force_fp32(apply_to=('bbox_preds', )) + def refine_bboxes(self, rois, labels, bbox_preds, pos_is_gts, img_metas): + """Refine bboxes during training. + + Args: + rois (Tensor): Shape (n*bs, 5), where n is image number per GPU, + and bs is the sampled RoIs per image. The first column is + the image id and the next 4 columns are x1, y1, x2, y2. + labels (Tensor): Shape (n*bs, ). + bbox_preds (Tensor): Shape (n*bs, 4) or (n*bs, 4*#class). + pos_is_gts (list[Tensor]): Flags indicating if each positive bbox + is a gt bbox. + img_metas (list[dict]): Meta info of each image. + + Returns: + list[Tensor]: Refined bboxes of each image in a mini-batch. + + Example: + >>> # xdoctest: +REQUIRES(module:kwarray) + >>> import kwarray + >>> import numpy as np + >>> from mmdet.core.bbox.demodata import random_boxes + >>> self = BBoxHead(reg_class_agnostic=True) + >>> n_roi = 2 + >>> n_img = 4 + >>> scale = 512 + >>> rng = np.random.RandomState(0) + >>> img_metas = [{'img_shape': (scale, scale)} + ... for _ in range(n_img)] + >>> # Create rois in the expected format + >>> roi_boxes = random_boxes(n_roi, scale=scale, rng=rng) + >>> img_ids = torch.randint(0, n_img, (n_roi,)) + >>> img_ids = img_ids.float() + >>> rois = torch.cat([img_ids[:, None], roi_boxes], dim=1) + >>> # Create other args + >>> labels = torch.randint(0, 2, (n_roi,)).long() + >>> bbox_preds = random_boxes(n_roi, scale=scale, rng=rng) + >>> # For each image, pretend random positive boxes are gts + >>> is_label_pos = (labels.numpy() > 0).astype(np.int) + >>> lbl_per_img = kwarray.group_items(is_label_pos, + ... img_ids.numpy()) + >>> pos_per_img = [sum(lbl_per_img.get(gid, [])) + ... for gid in range(n_img)] + >>> pos_is_gts = [ + >>> torch.randint(0, 2, (npos,)).byte().sort( + >>> descending=True)[0] + >>> for npos in pos_per_img + >>> ] + >>> bboxes_list = self.refine_bboxes(rois, labels, bbox_preds, + >>> pos_is_gts, img_metas) + >>> print(bboxes_list) + """ + img_ids = rois[:, 0].long().unique(sorted=True) + assert img_ids.numel() <= len(img_metas) + + bboxes_list = [] + for i in range(len(img_metas)): + inds = torch.nonzero( + rois[:, 0] == i, as_tuple=False).squeeze(dim=1) + num_rois = inds.numel() + + bboxes_ = rois[inds, 1:] + label_ = labels[inds] + bbox_pred_ = bbox_preds[inds] + img_meta_ = img_metas[i] + pos_is_gts_ = pos_is_gts[i] + + bboxes = self.regress_by_class(bboxes_, label_, bbox_pred_, + img_meta_) + + # filter gt bboxes + pos_keep = 1 - pos_is_gts_ + keep_inds = pos_is_gts_.new_ones(num_rois) + keep_inds[:len(pos_is_gts_)] = pos_keep + + bboxes_list.append(bboxes[keep_inds.type(torch.bool)]) + + return bboxes_list + + @force_fp32(apply_to=('bbox_pred', )) + def regress_by_class(self, rois, label, bbox_pred, img_meta): + """Regress the bbox for the predicted class. Used in Cascade R-CNN. + + Args: + rois (Tensor): shape (n, 4) or (n, 5) + label (Tensor): shape (n, ) + bbox_pred (Tensor): shape (n, 4*(#class)) or (n, 4) + img_meta (dict): Image meta info. + + Returns: + Tensor: Regressed bboxes, the same shape as input rois. + """ + assert rois.size(1) == 4 or rois.size(1) == 5, repr(rois.shape) + + if not self.reg_class_agnostic: + label = label * 4 + inds = torch.stack((label, label + 1, label + 2, label + 3), 1) + bbox_pred = torch.gather(bbox_pred, 1, inds) + assert bbox_pred.size(1) == 4 + + if rois.size(1) == 4: + new_rois = self.bbox_coder.decode( + rois, bbox_pred, max_shape=img_meta['img_shape']) + else: + bboxes = self.bbox_coder.decode( + rois[:, 1:], bbox_pred, max_shape=img_meta['img_shape']) + new_rois = torch.cat((rois[:, [0]], bboxes), dim=1) + + return new_rois diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py new file mode 100644 index 00000000..0e86d2ea --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/convfc_bbox_head.py @@ -0,0 +1,205 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule + +from mmdet.models.builder import HEADS +from .bbox_head import BBoxHead + + +@HEADS.register_module() +class ConvFCBBoxHead(BBoxHead): + r"""More general bbox head, with shared conv and fc layers and two optional + separated branches. + + .. code-block:: none + + /-> cls convs -> cls fcs -> cls + shared convs -> shared fcs + \-> reg convs -> reg fcs -> reg + """ # noqa: W605 + + def __init__(self, + num_shared_convs=0, + num_shared_fcs=0, + num_cls_convs=0, + num_cls_fcs=0, + num_reg_convs=0, + num_reg_fcs=0, + conv_out_channels=256, + fc_out_channels=1024, + conv_cfg=None, + norm_cfg=None, + *args, + **kwargs): + super(ConvFCBBoxHead, self).__init__(*args, **kwargs) + assert (num_shared_convs + num_shared_fcs + num_cls_convs + + num_cls_fcs + num_reg_convs + num_reg_fcs > 0) + if num_cls_convs > 0 or num_reg_convs > 0: + assert num_shared_fcs == 0 + if not self.with_cls: + assert num_cls_convs == 0 and num_cls_fcs == 0 + if not self.with_reg: + assert num_reg_convs == 0 and num_reg_fcs == 0 + self.num_shared_convs = num_shared_convs + self.num_shared_fcs = num_shared_fcs + self.num_cls_convs = num_cls_convs + self.num_cls_fcs = num_cls_fcs + self.num_reg_convs = num_reg_convs + self.num_reg_fcs = num_reg_fcs + self.conv_out_channels = conv_out_channels + self.fc_out_channels = fc_out_channels + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + + # add shared convs and fcs + self.shared_convs, self.shared_fcs, last_layer_dim = \ + self._add_conv_fc_branch( + self.num_shared_convs, self.num_shared_fcs, self.in_channels, + True) + self.shared_out_channels = last_layer_dim + + # add cls specific branch + self.cls_convs, self.cls_fcs, self.cls_last_dim = \ + self._add_conv_fc_branch( + self.num_cls_convs, self.num_cls_fcs, self.shared_out_channels) + + # add reg specific branch + self.reg_convs, self.reg_fcs, self.reg_last_dim = \ + self._add_conv_fc_branch( + self.num_reg_convs, self.num_reg_fcs, self.shared_out_channels) + + if self.num_shared_fcs == 0 and not self.with_avg_pool: + if self.num_cls_fcs == 0: + self.cls_last_dim *= self.roi_feat_area + if self.num_reg_fcs == 0: + self.reg_last_dim *= self.roi_feat_area + + self.relu = nn.ReLU(inplace=True) + # reconstruct fc_cls and fc_reg since input channels are changed + if self.with_cls: + self.fc_cls = nn.Linear(self.cls_last_dim, self.num_classes + 1) + if self.with_reg: + out_dim_reg = (4 if self.reg_class_agnostic else 4 * + self.num_classes) + self.fc_reg = nn.Linear(self.reg_last_dim, out_dim_reg) + + def _add_conv_fc_branch(self, + num_branch_convs, + num_branch_fcs, + in_channels, + is_shared=False): + """Add shared or separable branch. + + convs -> avg pool (optional) -> fcs + """ + last_layer_dim = in_channels + # add branch specific conv layers + branch_convs = nn.ModuleList() + if num_branch_convs > 0: + for i in range(num_branch_convs): + conv_in_channels = ( + last_layer_dim if i == 0 else self.conv_out_channels) + branch_convs.append( + ConvModule( + conv_in_channels, + self.conv_out_channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + last_layer_dim = self.conv_out_channels + # add branch specific fc layers + branch_fcs = nn.ModuleList() + if num_branch_fcs > 0: + # for shared branch, only consider self.with_avg_pool + # for separated branches, also consider self.num_shared_fcs + if (is_shared + or self.num_shared_fcs == 0) and not self.with_avg_pool: + last_layer_dim *= self.roi_feat_area + for i in range(num_branch_fcs): + fc_in_channels = ( + last_layer_dim if i == 0 else self.fc_out_channels) + branch_fcs.append( + nn.Linear(fc_in_channels, self.fc_out_channels)) + last_layer_dim = self.fc_out_channels + return branch_convs, branch_fcs, last_layer_dim + + def init_weights(self): + super(ConvFCBBoxHead, self).init_weights() + # conv layers are already initialized by ConvModule + for module_list in [self.shared_fcs, self.cls_fcs, self.reg_fcs]: + for m in module_list.modules(): + if isinstance(m, nn.Linear): + nn.init.xavier_uniform_(m.weight) + nn.init.constant_(m.bias, 0) + + def forward(self, x): + # shared part + if self.num_shared_convs > 0: + for conv in self.shared_convs: + x = conv(x) + + if self.num_shared_fcs > 0: + if self.with_avg_pool: + x = self.avg_pool(x) + + x = x.flatten(1) + + for fc in self.shared_fcs: + x = self.relu(fc(x)) + # separate branches + x_cls = x + x_reg = x + + for conv in self.cls_convs: + x_cls = conv(x_cls) + if x_cls.dim() > 2: + if self.with_avg_pool: + x_cls = self.avg_pool(x_cls) + x_cls = x_cls.flatten(1) + for fc in self.cls_fcs: + x_cls = self.relu(fc(x_cls)) + + for conv in self.reg_convs: + x_reg = conv(x_reg) + if x_reg.dim() > 2: + if self.with_avg_pool: + x_reg = self.avg_pool(x_reg) + x_reg = x_reg.flatten(1) + for fc in self.reg_fcs: + x_reg = self.relu(fc(x_reg)) + + cls_score = self.fc_cls(x_cls) if self.with_cls else None + bbox_pred = self.fc_reg(x_reg) if self.with_reg else None + return cls_score, bbox_pred + + +@HEADS.register_module() +class Shared2FCBBoxHead(ConvFCBBoxHead): + + def __init__(self, fc_out_channels=1024, *args, **kwargs): + super(Shared2FCBBoxHead, self).__init__( + num_shared_convs=0, + num_shared_fcs=2, + num_cls_convs=0, + num_cls_fcs=0, + num_reg_convs=0, + num_reg_fcs=0, + fc_out_channels=fc_out_channels, + *args, + **kwargs) + + +@HEADS.register_module() +class Shared4Conv1FCBBoxHead(ConvFCBBoxHead): + + def __init__(self, fc_out_channels=1024, *args, **kwargs): + super(Shared4Conv1FCBBoxHead, self).__init__( + num_shared_convs=4, + num_shared_fcs=1, + num_cls_convs=0, + num_cls_fcs=0, + num_reg_convs=0, + num_reg_fcs=0, + fc_out_channels=fc_out_channels, + *args, + **kwargs) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/dii_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/dii_head.py new file mode 100644 index 00000000..8c970a78 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/dii_head.py @@ -0,0 +1,415 @@ +import torch +import torch.nn as nn +from mmcv.cnn import (bias_init_with_prob, build_activation_layer, + build_norm_layer) +from mmcv.runner import auto_fp16, force_fp32 + +from mmdet.core import multi_apply +from mmdet.models.builder import HEADS, build_loss +from mmdet.models.dense_heads.atss_head import reduce_mean +from mmdet.models.losses import accuracy +from mmdet.models.utils import FFN, MultiheadAttention, build_transformer +from .bbox_head import BBoxHead + + +@HEADS.register_module() +class DIIHead(BBoxHead): + r"""Dynamic Instance Interactive Head for `Sparse R-CNN: End-to-End Object + Detection with Learnable Proposals `_ + + Args: + num_classes (int): Number of class in dataset. + Defaults to 80. + num_ffn_fcs (int): The number of fully-connected + layers in FFNs. Defaults to 2. + num_heads (int): The hidden dimension of FFNs. + Defaults to 8. + num_cls_fcs (int): The number of fully-connected + layers in classification subnet. Defaults to 1. + num_reg_fcs (int): The number of fully-connected + layers in regression subnet. Defaults to 3. + feedforward_channels (int): The hidden dimension + of FFNs. Defaults to 2048 + in_channels (int): Hidden_channels of MultiheadAttention. + Defaults to 256. + dropout (float): Probability of drop the channel. + Defaults to 0.0 + ffn_act_cfg (dict): The activation config for FFNs. + dynamic_conv_cfg (dict): The convolution config + for DynamicConv. + loss_iou (dict): The config for iou or giou loss. + + """ + + def __init__(self, + num_classes=80, + num_ffn_fcs=2, + num_heads=8, + num_cls_fcs=1, + num_reg_fcs=3, + feedforward_channels=2048, + in_channels=256, + dropout=0.0, + ffn_act_cfg=dict(type='ReLU', inplace=True), + dynamic_conv_cfg=dict( + type='DynamicConv', + in_channels=256, + feat_channels=64, + out_channels=256, + input_feat_shape=7, + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN')), + loss_iou=dict(type='GIoULoss', loss_weight=2.0), + **kwargs): + super(DIIHead, self).__init__( + num_classes=num_classes, + reg_decoded_bbox=True, + reg_class_agnostic=True, + **kwargs) + self.loss_iou = build_loss(loss_iou) + self.in_channels = in_channels + self.fp16_enabled = False + self.attention = MultiheadAttention(in_channels, num_heads, dropout) + self.attention_norm = build_norm_layer(dict(type='LN'), in_channels)[1] + + self.instance_interactive_conv = build_transformer(dynamic_conv_cfg) + self.instance_interactive_conv_dropout = nn.Dropout(dropout) + self.instance_interactive_conv_norm = build_norm_layer( + dict(type='LN'), in_channels)[1] + + self.ffn = FFN( + in_channels, + feedforward_channels, + num_ffn_fcs, + act_cfg=ffn_act_cfg, + dropout=dropout) + self.ffn_norm = build_norm_layer(dict(type='LN'), in_channels)[1] + + self.cls_fcs = nn.ModuleList() + for _ in range(num_cls_fcs): + self.cls_fcs.append( + nn.Linear(in_channels, in_channels, bias=False)) + self.cls_fcs.append( + build_norm_layer(dict(type='LN'), in_channels)[1]) + self.cls_fcs.append( + build_activation_layer(dict(type='ReLU', inplace=True))) + + # over load the self.fc_cls in BBoxHead + if self.loss_cls.use_sigmoid: + self.fc_cls = nn.Linear(in_channels, self.num_classes) + else: + self.fc_cls = nn.Linear(in_channels, self.num_classes + 1) + + self.reg_fcs = nn.ModuleList() + for _ in range(num_reg_fcs): + self.reg_fcs.append( + nn.Linear(in_channels, in_channels, bias=False)) + self.reg_fcs.append( + build_norm_layer(dict(type='LN'), in_channels)[1]) + self.reg_fcs.append( + build_activation_layer(dict(type='ReLU', inplace=True))) + # over load the self.fc_cls in BBoxHead + self.fc_reg = nn.Linear(in_channels, 4) + + assert self.reg_class_agnostic, 'DIIHead only ' \ + 'suppport `reg_class_agnostic=True` ' + assert self.reg_decoded_bbox, 'DIIHead only ' \ + 'suppport `reg_decoded_bbox=True`' + + def init_weights(self): + """Use xavier initialization for all weight parameter and set + classification head bias as a specific value when use focal loss.""" + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + else: + # adopt the default initialization for + # the weight and bias of the layer norm + pass + if self.loss_cls.use_sigmoid: + bias_init = bias_init_with_prob(0.01) + nn.init.constant_(self.fc_cls.bias, bias_init) + + @auto_fp16() + def forward(self, roi_feat, proposal_feat): + """Forward function of Dynamic Instance Interactive Head. + + Args: + roi_feat (Tensor): Roi-pooling features with shape + (batch_size*num_proposals, feature_dimensions, + pooling_h , pooling_w). + proposal_feat (Tensor): Intermediate feature get from + diihead in last stage, has shape + (batch_size, num_proposals, feature_dimensions) + + Returns: + tuple[Tensor]: Usually a tuple of classification scores + and bbox prediction and a intermediate feature. + + - cls_scores (Tensor): Classification scores for + all proposals, has shape + (batch_size, num_proposals, num_classes). + - bbox_preds (Tensor): Box energies / deltas for + all proposals, has shape + (batch_size, num_proposals, 4). + - obj_feat (Tensor): Object feature before classification + and regression subnet, has shape + (batch_size, num_proposal, feature_dimensions). + """ + N, num_proposals = proposal_feat.shape[:2] + + # Self attention + proposal_feat = proposal_feat.permute(1, 0, 2) + proposal_feat = self.attention_norm(self.attention(proposal_feat)) + + # instance interactive + proposal_feat = proposal_feat.permute(1, 0, + 2).reshape(-1, self.in_channels) + proposal_feat_iic = self.instance_interactive_conv( + proposal_feat, roi_feat) + proposal_feat = proposal_feat + self.instance_interactive_conv_dropout( + proposal_feat_iic) + obj_feat = self.instance_interactive_conv_norm(proposal_feat) + + # FFN + obj_feat = self.ffn_norm(self.ffn(obj_feat)) + + cls_feat = obj_feat + reg_feat = obj_feat + + for cls_layer in self.cls_fcs: + cls_feat = cls_layer(cls_feat) + for reg_layer in self.reg_fcs: + reg_feat = reg_layer(reg_feat) + + cls_score = self.fc_cls(cls_feat).view(N, num_proposals, -1) + bbox_delta = self.fc_reg(reg_feat).view(N, num_proposals, -1) + + return cls_score, bbox_delta, obj_feat.view(N, num_proposals, -1) + + @force_fp32(apply_to=('cls_score', 'bbox_pred')) + def loss(self, + cls_score, + bbox_pred, + labels, + label_weights, + bbox_targets, + bbox_weights, + imgs_whwh=None, + reduction_override=None, + **kwargs): + """"Loss function of DIIHead, get loss of all images. + + Args: + cls_score (Tensor): Classification prediction + results of all class, has shape + (batch_size * num_proposals_single_image, num_classes) + bbox_pred (Tensor): Regression prediction results, + has shape + (batch_size * num_proposals_single_image, 4), the last + dimension 4 represents [tl_x, tl_y, br_x, br_y]. + labels (Tensor): Label of each proposals, has shape + (batch_size * num_proposals_single_image + label_weights (Tensor): Classification loss + weight of each proposals, has shape + (batch_size * num_proposals_single_image + bbox_targets (Tensor): Regression targets of each + proposals, has shape + (batch_size * num_proposals_single_image, 4), + the last dimension 4 represents + [tl_x, tl_y, br_x, br_y]. + bbox_weights (Tensor): Regression loss weight of each + proposals's coordinate, has shape + (batch_size * num_proposals_single_image, 4), + imgs_whwh (Tensor): imgs_whwh (Tensor): Tensor with\ + shape (batch_size, num_proposals, 4), the last + dimension means + [img_width,img_height, img_width, img_height]. + reduction_override (str, optional): The reduction + method used to override the original reduction + method of the loss. Options are "none", + "mean" and "sum". Defaults to None, + + Returns: + dict[str, Tensor]: Dictionary of loss components + """ + losses = dict() + bg_class_ind = self.num_classes + # note in spare rcnn num_gt == num_pos + pos_inds = (labels >= 0) & (labels < bg_class_ind) + num_pos = pos_inds.sum().float() + avg_factor = reduce_mean(num_pos) + if cls_score is not None: + if cls_score.numel() > 0: + losses['loss_cls'] = self.loss_cls( + cls_score, + labels, + label_weights, + avg_factor=avg_factor, + reduction_override=reduction_override) + losses['pos_acc'] = accuracy(cls_score[pos_inds], + labels[pos_inds]) + if bbox_pred is not None: + # 0~self.num_classes-1 are FG, self.num_classes is BG + # do not perform bounding box regression for BG anymore. + if pos_inds.any(): + pos_bbox_pred = bbox_pred.reshape(bbox_pred.size(0), + 4)[pos_inds.type(torch.bool)] + imgs_whwh = imgs_whwh.reshape(bbox_pred.size(0), + 4)[pos_inds.type(torch.bool)] + losses['loss_bbox'] = self.loss_bbox( + pos_bbox_pred / imgs_whwh, + bbox_targets[pos_inds.type(torch.bool)] / imgs_whwh, + bbox_weights[pos_inds.type(torch.bool)], + avg_factor=avg_factor) + losses['loss_iou'] = self.loss_iou( + pos_bbox_pred, + bbox_targets[pos_inds.type(torch.bool)], + bbox_weights[pos_inds.type(torch.bool)], + avg_factor=avg_factor) + else: + losses['loss_bbox'] = bbox_pred.sum() * 0 + losses['loss_iou'] = bbox_pred.sum() * 0 + return losses + + def _get_target_single(self, pos_inds, neg_inds, pos_bboxes, neg_bboxes, + pos_gt_bboxes, pos_gt_labels, cfg): + """Calculate the ground truth for proposals in the single image + according to the sampling results. + + Almost the same as the implementation in `bbox_head`, + we add pos_inds and neg_inds to select positive and + negative samples instead of selecting the first num_pos + as positive samples. + + Args: + pos_inds (Tensor): The length is equal to the + positive sample numbers contain all index + of the positive sample in the origin proposal set. + neg_inds (Tensor): The length is equal to the + negative sample numbers contain all index + of the negative sample in the origin proposal set. + pos_bboxes (Tensor): Contains all the positive boxes, + has shape (num_pos, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + neg_bboxes (Tensor): Contains all the negative boxes, + has shape (num_neg, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + pos_gt_bboxes (Tensor): Contains all the gt_boxes, + has shape (num_gt, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + pos_gt_labels (Tensor): Contains all the gt_labels, + has shape (num_gt). + cfg (obj:`ConfigDict`): `train_cfg` of R-CNN. + + Returns: + Tuple[Tensor]: Ground truth for proposals in a single image. + Containing the following Tensors: + + - labels(Tensor): Gt_labels for all proposals, has + shape (num_proposals,). + - label_weights(Tensor): Labels_weights for all proposals, has + shape (num_proposals,). + - bbox_targets(Tensor):Regression target for all proposals, has + shape (num_proposals, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + - bbox_weights(Tensor):Regression weights for all proposals, + has shape (num_proposals, 4). + """ + num_pos = pos_bboxes.size(0) + num_neg = neg_bboxes.size(0) + num_samples = num_pos + num_neg + + # original implementation uses new_zeros since BG are set to be 0 + # now use empty & fill because BG cat_id = num_classes, + # FG cat_id = [0, num_classes-1] + labels = pos_bboxes.new_full((num_samples, ), + self.num_classes, + dtype=torch.long) + label_weights = pos_bboxes.new_zeros(num_samples) + bbox_targets = pos_bboxes.new_zeros(num_samples, 4) + bbox_weights = pos_bboxes.new_zeros(num_samples, 4) + if num_pos > 0: + labels[pos_inds] = pos_gt_labels + pos_weight = 1.0 if cfg.pos_weight <= 0 else cfg.pos_weight + label_weights[pos_inds] = pos_weight + if not self.reg_decoded_bbox: + pos_bbox_targets = self.bbox_coder.encode( + pos_bboxes, pos_gt_bboxes) + else: + pos_bbox_targets = pos_gt_bboxes + bbox_targets[pos_inds, :] = pos_bbox_targets + bbox_weights[pos_inds, :] = 1 + if num_neg > 0: + label_weights[neg_inds] = 1.0 + + return labels, label_weights, bbox_targets, bbox_weights + + def get_targets(self, + sampling_results, + gt_bboxes, + gt_labels, + rcnn_train_cfg, + concat=True): + """Calculate the ground truth for all samples in a batch according to + the sampling_results. + + Almost the same as the implementation in bbox_head, we passed + additional parameters pos_inds_list and neg_inds_list to + `_get_target_single` function. + + Args: + sampling_results (List[obj:SamplingResults]): Assign results of + all images in a batch after sampling. + gt_bboxes (list[Tensor]): Gt_bboxes of all images in a batch, + each tensor has shape (num_gt, 4), the last dimension 4 + represents [tl_x, tl_y, br_x, br_y]. + gt_labels (list[Tensor]): Gt_labels of all images in a batch, + each tensor has shape (num_gt,). + rcnn_train_cfg (obj:`ConfigDict`): `train_cfg` of RCNN. + concat (bool): Whether to concatenate the results of all + the images in a single batch. + + Returns: + Tuple[Tensor]: Ground truth for proposals in a single image. + Containing the following list of Tensors: + + - labels (list[Tensor],Tensor): Gt_labels for all + proposals in a batch, each tensor in list has + shape (num_proposals,) when `concat=False`, otherwise just + a single tensor has shape (num_all_proposals,). + - label_weights (list[Tensor]): Labels_weights for + all proposals in a batch, each tensor in list has shape + (num_proposals,) when `concat=False`, otherwise just a + single tensor has shape (num_all_proposals,). + - bbox_targets (list[Tensor],Tensor): Regression target + for all proposals in a batch, each tensor in list has + shape (num_proposals, 4) when `concat=False`, otherwise + just a single tensor has shape (num_all_proposals, 4), + the last dimension 4 represents [tl_x, tl_y, br_x, br_y]. + - bbox_weights (list[tensor],Tensor): Regression weights for + all proposals in a batch, each tensor in list has shape + (num_proposals, 4) when `concat=False`, otherwise just a + single tensor has shape (num_all_proposals, 4). + """ + pos_inds_list = [res.pos_inds for res in sampling_results] + neg_inds_list = [res.neg_inds for res in sampling_results] + pos_bboxes_list = [res.pos_bboxes for res in sampling_results] + neg_bboxes_list = [res.neg_bboxes for res in sampling_results] + pos_gt_bboxes_list = [res.pos_gt_bboxes for res in sampling_results] + pos_gt_labels_list = [res.pos_gt_labels for res in sampling_results] + labels, label_weights, bbox_targets, bbox_weights = multi_apply( + self._get_target_single, + pos_inds_list, + neg_inds_list, + pos_bboxes_list, + neg_bboxes_list, + pos_gt_bboxes_list, + pos_gt_labels_list, + cfg=rcnn_train_cfg) + if concat: + labels = torch.cat(labels, 0) + label_weights = torch.cat(label_weights, 0) + bbox_targets = torch.cat(bbox_targets, 0) + bbox_weights = torch.cat(bbox_weights, 0) + return labels, label_weights, bbox_targets, bbox_weights diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/double_bbox_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/double_bbox_head.py new file mode 100644 index 00000000..6c154cb3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/double_bbox_head.py @@ -0,0 +1,172 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, normal_init, xavier_init + +from mmdet.models.backbones.resnet import Bottleneck +from mmdet.models.builder import HEADS +from .bbox_head import BBoxHead + + +class BasicResBlock(nn.Module): + """Basic residual block. + + This block is a little different from the block in the ResNet backbone. + The kernel size of conv1 is 1 in this block while 3 in ResNet BasicBlock. + + Args: + in_channels (int): Channels of the input feature map. + out_channels (int): Channels of the output feature map. + conv_cfg (dict): The config dict for convolution layers. + norm_cfg (dict): The config dict for normalization layers. + """ + + def __init__(self, + in_channels, + out_channels, + conv_cfg=None, + norm_cfg=dict(type='BN')): + super(BasicResBlock, self).__init__() + + # main path + self.conv1 = ConvModule( + in_channels, + in_channels, + kernel_size=3, + padding=1, + bias=False, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg) + self.conv2 = ConvModule( + in_channels, + out_channels, + kernel_size=1, + bias=False, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=None) + + # identity path + self.conv_identity = ConvModule( + in_channels, + out_channels, + kernel_size=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=None) + + self.relu = nn.ReLU(inplace=True) + + def forward(self, x): + identity = x + + x = self.conv1(x) + x = self.conv2(x) + + identity = self.conv_identity(identity) + out = x + identity + + out = self.relu(out) + return out + + +@HEADS.register_module() +class DoubleConvFCBBoxHead(BBoxHead): + r"""Bbox head used in Double-Head R-CNN + + .. code-block:: none + + /-> cls + /-> shared convs -> + \-> reg + roi features + /-> cls + \-> shared fc -> + \-> reg + """ # noqa: W605 + + def __init__(self, + num_convs=0, + num_fcs=0, + conv_out_channels=1024, + fc_out_channels=1024, + conv_cfg=None, + norm_cfg=dict(type='BN'), + **kwargs): + kwargs.setdefault('with_avg_pool', True) + super(DoubleConvFCBBoxHead, self).__init__(**kwargs) + assert self.with_avg_pool + assert num_convs > 0 + assert num_fcs > 0 + self.num_convs = num_convs + self.num_fcs = num_fcs + self.conv_out_channels = conv_out_channels + self.fc_out_channels = fc_out_channels + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + + # increase the channel of input features + self.res_block = BasicResBlock(self.in_channels, + self.conv_out_channels) + + # add conv heads + self.conv_branch = self._add_conv_branch() + # add fc heads + self.fc_branch = self._add_fc_branch() + + out_dim_reg = 4 if self.reg_class_agnostic else 4 * self.num_classes + self.fc_reg = nn.Linear(self.conv_out_channels, out_dim_reg) + + self.fc_cls = nn.Linear(self.fc_out_channels, self.num_classes + 1) + self.relu = nn.ReLU(inplace=True) + + def _add_conv_branch(self): + """Add the fc branch which consists of a sequential of conv layers.""" + branch_convs = nn.ModuleList() + for i in range(self.num_convs): + branch_convs.append( + Bottleneck( + inplanes=self.conv_out_channels, + planes=self.conv_out_channels // 4, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + return branch_convs + + def _add_fc_branch(self): + """Add the fc branch which consists of a sequential of fc layers.""" + branch_fcs = nn.ModuleList() + for i in range(self.num_fcs): + fc_in_channels = ( + self.in_channels * + self.roi_feat_area if i == 0 else self.fc_out_channels) + branch_fcs.append(nn.Linear(fc_in_channels, self.fc_out_channels)) + return branch_fcs + + def init_weights(self): + # conv layers are already initialized by ConvModule + normal_init(self.fc_cls, std=0.01) + normal_init(self.fc_reg, std=0.001) + + for m in self.fc_branch.modules(): + if isinstance(m, nn.Linear): + xavier_init(m, distribution='uniform') + + def forward(self, x_cls, x_reg): + # conv head + x_conv = self.res_block(x_reg) + + for conv in self.conv_branch: + x_conv = conv(x_conv) + + if self.with_avg_pool: + x_conv = self.avg_pool(x_conv) + + x_conv = x_conv.view(x_conv.size(0), -1) + bbox_pred = self.fc_reg(x_conv) + + # fc head + x_fc = x_cls.view(x_cls.size(0), -1) + for fc in self.fc_branch: + x_fc = self.relu(fc(x_fc)) + + cls_score = self.fc_cls(x_fc) + + return cls_score, bbox_pred diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/sabl_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/sabl_head.py new file mode 100644 index 00000000..370a933b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/bbox_heads/sabl_head.py @@ -0,0 +1,572 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, kaiming_init, normal_init, xavier_init +from mmcv.runner import force_fp32 + +from mmdet.core import build_bbox_coder, multi_apply, multiclass_nms +from mmdet.models.builder import HEADS, build_loss +from mmdet.models.losses import accuracy + + +@HEADS.register_module() +class SABLHead(nn.Module): + """Side-Aware Boundary Localization (SABL) for RoI-Head. + + Side-Aware features are extracted by conv layers + with an attention mechanism. + Boundary Localization with Bucketing and Bucketing Guided Rescoring + are implemented in BucketingBBoxCoder. + + Please refer to https://arxiv.org/abs/1912.04260 for more details. + + Args: + cls_in_channels (int): Input channels of cls RoI feature. \ + Defaults to 256. + reg_in_channels (int): Input channels of reg RoI feature. \ + Defaults to 256. + roi_feat_size (int): Size of RoI features. Defaults to 7. + reg_feat_up_ratio (int): Upsample ratio of reg features. \ + Defaults to 2. + reg_pre_kernel (int): Kernel of 2D conv layers before \ + attention pooling. Defaults to 3. + reg_post_kernel (int): Kernel of 1D conv layers after \ + attention pooling. Defaults to 3. + reg_pre_num (int): Number of pre convs. Defaults to 2. + reg_post_num (int): Number of post convs. Defaults to 1. + num_classes (int): Number of classes in dataset. Defaults to 80. + cls_out_channels (int): Hidden channels in cls fcs. Defaults to 1024. + reg_offset_out_channels (int): Hidden and output channel \ + of reg offset branch. Defaults to 256. + reg_cls_out_channels (int): Hidden and output channel \ + of reg cls branch. Defaults to 256. + num_cls_fcs (int): Number of fcs for cls branch. Defaults to 1. + num_reg_fcs (int): Number of fcs for reg branch.. Defaults to 0. + reg_class_agnostic (bool): Class agnostic regresion or not. \ + Defaults to True. + norm_cfg (dict): Config of norm layers. Defaults to None. + bbox_coder (dict): Config of bbox coder. Defaults 'BucketingBBoxCoder'. + loss_cls (dict): Config of classification loss. + loss_bbox_cls (dict): Config of classification loss for bbox branch. + loss_bbox_reg (dict): Config of regression loss for bbox branch. + """ + + def __init__(self, + num_classes, + cls_in_channels=256, + reg_in_channels=256, + roi_feat_size=7, + reg_feat_up_ratio=2, + reg_pre_kernel=3, + reg_post_kernel=3, + reg_pre_num=2, + reg_post_num=1, + cls_out_channels=1024, + reg_offset_out_channels=256, + reg_cls_out_channels=256, + num_cls_fcs=1, + num_reg_fcs=0, + reg_class_agnostic=True, + norm_cfg=None, + bbox_coder=dict( + type='BucketingBBoxCoder', + num_buckets=14, + scale_factor=1.7), + loss_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + loss_bbox_cls=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=1.0), + loss_bbox_reg=dict( + type='SmoothL1Loss', beta=0.1, loss_weight=1.0)): + super(SABLHead, self).__init__() + self.cls_in_channels = cls_in_channels + self.reg_in_channels = reg_in_channels + self.roi_feat_size = roi_feat_size + self.reg_feat_up_ratio = int(reg_feat_up_ratio) + self.num_buckets = bbox_coder['num_buckets'] + assert self.reg_feat_up_ratio // 2 >= 1 + self.up_reg_feat_size = roi_feat_size * self.reg_feat_up_ratio + assert self.up_reg_feat_size == bbox_coder['num_buckets'] + self.reg_pre_kernel = reg_pre_kernel + self.reg_post_kernel = reg_post_kernel + self.reg_pre_num = reg_pre_num + self.reg_post_num = reg_post_num + self.num_classes = num_classes + self.cls_out_channels = cls_out_channels + self.reg_offset_out_channels = reg_offset_out_channels + self.reg_cls_out_channels = reg_cls_out_channels + self.num_cls_fcs = num_cls_fcs + self.num_reg_fcs = num_reg_fcs + self.reg_class_agnostic = reg_class_agnostic + assert self.reg_class_agnostic + self.norm_cfg = norm_cfg + + self.bbox_coder = build_bbox_coder(bbox_coder) + self.loss_cls = build_loss(loss_cls) + self.loss_bbox_cls = build_loss(loss_bbox_cls) + self.loss_bbox_reg = build_loss(loss_bbox_reg) + + self.cls_fcs = self._add_fc_branch(self.num_cls_fcs, + self.cls_in_channels, + self.roi_feat_size, + self.cls_out_channels) + + self.side_num = int(np.ceil(self.num_buckets / 2)) + + if self.reg_feat_up_ratio > 1: + self.upsample_x = nn.ConvTranspose1d( + reg_in_channels, + reg_in_channels, + self.reg_feat_up_ratio, + stride=self.reg_feat_up_ratio) + self.upsample_y = nn.ConvTranspose1d( + reg_in_channels, + reg_in_channels, + self.reg_feat_up_ratio, + stride=self.reg_feat_up_ratio) + + self.reg_pre_convs = nn.ModuleList() + for i in range(self.reg_pre_num): + reg_pre_conv = ConvModule( + reg_in_channels, + reg_in_channels, + kernel_size=reg_pre_kernel, + padding=reg_pre_kernel // 2, + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU')) + self.reg_pre_convs.append(reg_pre_conv) + + self.reg_post_conv_xs = nn.ModuleList() + for i in range(self.reg_post_num): + reg_post_conv_x = ConvModule( + reg_in_channels, + reg_in_channels, + kernel_size=(1, reg_post_kernel), + padding=(0, reg_post_kernel // 2), + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU')) + self.reg_post_conv_xs.append(reg_post_conv_x) + self.reg_post_conv_ys = nn.ModuleList() + for i in range(self.reg_post_num): + reg_post_conv_y = ConvModule( + reg_in_channels, + reg_in_channels, + kernel_size=(reg_post_kernel, 1), + padding=(reg_post_kernel // 2, 0), + norm_cfg=norm_cfg, + act_cfg=dict(type='ReLU')) + self.reg_post_conv_ys.append(reg_post_conv_y) + + self.reg_conv_att_x = nn.Conv2d(reg_in_channels, 1, 1) + self.reg_conv_att_y = nn.Conv2d(reg_in_channels, 1, 1) + + self.fc_cls = nn.Linear(self.cls_out_channels, self.num_classes + 1) + self.relu = nn.ReLU(inplace=True) + + self.reg_cls_fcs = self._add_fc_branch(self.num_reg_fcs, + self.reg_in_channels, 1, + self.reg_cls_out_channels) + self.reg_offset_fcs = self._add_fc_branch(self.num_reg_fcs, + self.reg_in_channels, 1, + self.reg_offset_out_channels) + self.fc_reg_cls = nn.Linear(self.reg_cls_out_channels, 1) + self.fc_reg_offset = nn.Linear(self.reg_offset_out_channels, 1) + + def _add_fc_branch(self, num_branch_fcs, in_channels, roi_feat_size, + fc_out_channels): + in_channels = in_channels * roi_feat_size * roi_feat_size + branch_fcs = nn.ModuleList() + for i in range(num_branch_fcs): + fc_in_channels = (in_channels if i == 0 else fc_out_channels) + branch_fcs.append(nn.Linear(fc_in_channels, fc_out_channels)) + return branch_fcs + + def init_weights(self): + for module_list in [ + self.reg_cls_fcs, self.reg_offset_fcs, self.cls_fcs + ]: + for m in module_list.modules(): + if isinstance(m, nn.Linear): + xavier_init(m, distribution='uniform') + if self.reg_feat_up_ratio > 1: + kaiming_init(self.upsample_x, distribution='normal') + kaiming_init(self.upsample_y, distribution='normal') + + normal_init(self.reg_conv_att_x, 0, 0.01) + normal_init(self.reg_conv_att_y, 0, 0.01) + normal_init(self.fc_reg_offset, 0, 0.001) + normal_init(self.fc_reg_cls, 0, 0.01) + normal_init(self.fc_cls, 0, 0.01) + + def cls_forward(self, cls_x): + cls_x = cls_x.view(cls_x.size(0), -1) + for fc in self.cls_fcs: + cls_x = self.relu(fc(cls_x)) + cls_score = self.fc_cls(cls_x) + return cls_score + + def attention_pool(self, reg_x): + """Extract direction-specific features fx and fy with attention + methanism.""" + reg_fx = reg_x + reg_fy = reg_x + reg_fx_att = self.reg_conv_att_x(reg_fx).sigmoid() + reg_fy_att = self.reg_conv_att_y(reg_fy).sigmoid() + reg_fx_att = reg_fx_att / reg_fx_att.sum(dim=2).unsqueeze(2) + reg_fy_att = reg_fy_att / reg_fy_att.sum(dim=3).unsqueeze(3) + reg_fx = (reg_fx * reg_fx_att).sum(dim=2) + reg_fy = (reg_fy * reg_fy_att).sum(dim=3) + return reg_fx, reg_fy + + def side_aware_feature_extractor(self, reg_x): + """Refine and extract side-aware features without split them.""" + for reg_pre_conv in self.reg_pre_convs: + reg_x = reg_pre_conv(reg_x) + reg_fx, reg_fy = self.attention_pool(reg_x) + + if self.reg_post_num > 0: + reg_fx = reg_fx.unsqueeze(2) + reg_fy = reg_fy.unsqueeze(3) + for i in range(self.reg_post_num): + reg_fx = self.reg_post_conv_xs[i](reg_fx) + reg_fy = self.reg_post_conv_ys[i](reg_fy) + reg_fx = reg_fx.squeeze(2) + reg_fy = reg_fy.squeeze(3) + if self.reg_feat_up_ratio > 1: + reg_fx = self.relu(self.upsample_x(reg_fx)) + reg_fy = self.relu(self.upsample_y(reg_fy)) + reg_fx = torch.transpose(reg_fx, 1, 2) + reg_fy = torch.transpose(reg_fy, 1, 2) + return reg_fx.contiguous(), reg_fy.contiguous() + + def reg_pred(self, x, offfset_fcs, cls_fcs): + """Predict bucketing esimation (cls_pred) and fine regression (offset + pred) with side-aware features.""" + x_offset = x.view(-1, self.reg_in_channels) + x_cls = x.view(-1, self.reg_in_channels) + + for fc in offfset_fcs: + x_offset = self.relu(fc(x_offset)) + for fc in cls_fcs: + x_cls = self.relu(fc(x_cls)) + offset_pred = self.fc_reg_offset(x_offset) + cls_pred = self.fc_reg_cls(x_cls) + + offset_pred = offset_pred.view(x.size(0), -1) + cls_pred = cls_pred.view(x.size(0), -1) + + return offset_pred, cls_pred + + def side_aware_split(self, feat): + """Split side-aware features aligned with orders of bucketing + targets.""" + l_end = int(np.ceil(self.up_reg_feat_size / 2)) + r_start = int(np.floor(self.up_reg_feat_size / 2)) + feat_fl = feat[:, :l_end] + feat_fr = feat[:, r_start:].flip(dims=(1, )) + feat_fl = feat_fl.contiguous() + feat_fr = feat_fr.contiguous() + feat = torch.cat([feat_fl, feat_fr], dim=-1) + return feat + + def bbox_pred_split(self, bbox_pred, num_proposals_per_img): + """Split batch bbox prediction back to each image.""" + bucket_cls_preds, bucket_offset_preds = bbox_pred + bucket_cls_preds = bucket_cls_preds.split(num_proposals_per_img, 0) + bucket_offset_preds = bucket_offset_preds.split( + num_proposals_per_img, 0) + bbox_pred = tuple(zip(bucket_cls_preds, bucket_offset_preds)) + return bbox_pred + + def reg_forward(self, reg_x): + outs = self.side_aware_feature_extractor(reg_x) + edge_offset_preds = [] + edge_cls_preds = [] + reg_fx = outs[0] + reg_fy = outs[1] + offset_pred_x, cls_pred_x = self.reg_pred(reg_fx, self.reg_offset_fcs, + self.reg_cls_fcs) + offset_pred_y, cls_pred_y = self.reg_pred(reg_fy, self.reg_offset_fcs, + self.reg_cls_fcs) + offset_pred_x = self.side_aware_split(offset_pred_x) + offset_pred_y = self.side_aware_split(offset_pred_y) + cls_pred_x = self.side_aware_split(cls_pred_x) + cls_pred_y = self.side_aware_split(cls_pred_y) + edge_offset_preds = torch.cat([offset_pred_x, offset_pred_y], dim=-1) + edge_cls_preds = torch.cat([cls_pred_x, cls_pred_y], dim=-1) + + return (edge_cls_preds, edge_offset_preds) + + def forward(self, x): + + bbox_pred = self.reg_forward(x) + cls_score = self.cls_forward(x) + + return cls_score, bbox_pred + + def get_targets(self, sampling_results, gt_bboxes, gt_labels, + rcnn_train_cfg): + pos_proposals = [res.pos_bboxes for res in sampling_results] + neg_proposals = [res.neg_bboxes for res in sampling_results] + pos_gt_bboxes = [res.pos_gt_bboxes for res in sampling_results] + pos_gt_labels = [res.pos_gt_labels for res in sampling_results] + cls_reg_targets = self.bucket_target(pos_proposals, neg_proposals, + pos_gt_bboxes, pos_gt_labels, + rcnn_train_cfg) + (labels, label_weights, bucket_cls_targets, bucket_cls_weights, + bucket_offset_targets, bucket_offset_weights) = cls_reg_targets + return (labels, label_weights, (bucket_cls_targets, + bucket_offset_targets), + (bucket_cls_weights, bucket_offset_weights)) + + def bucket_target(self, + pos_proposals_list, + neg_proposals_list, + pos_gt_bboxes_list, + pos_gt_labels_list, + rcnn_train_cfg, + concat=True): + (labels, label_weights, bucket_cls_targets, bucket_cls_weights, + bucket_offset_targets, bucket_offset_weights) = multi_apply( + self._bucket_target_single, + pos_proposals_list, + neg_proposals_list, + pos_gt_bboxes_list, + pos_gt_labels_list, + cfg=rcnn_train_cfg) + + if concat: + labels = torch.cat(labels, 0) + label_weights = torch.cat(label_weights, 0) + bucket_cls_targets = torch.cat(bucket_cls_targets, 0) + bucket_cls_weights = torch.cat(bucket_cls_weights, 0) + bucket_offset_targets = torch.cat(bucket_offset_targets, 0) + bucket_offset_weights = torch.cat(bucket_offset_weights, 0) + return (labels, label_weights, bucket_cls_targets, bucket_cls_weights, + bucket_offset_targets, bucket_offset_weights) + + def _bucket_target_single(self, pos_proposals, neg_proposals, + pos_gt_bboxes, pos_gt_labels, cfg): + """Compute bucketing estimation targets and fine regression targets for + a single image. + + Args: + pos_proposals (Tensor): positive proposals of a single image, + Shape (n_pos, 4) + neg_proposals (Tensor): negative proposals of a single image, + Shape (n_neg, 4). + pos_gt_bboxes (Tensor): gt bboxes assigned to positive proposals + of a single image, Shape (n_pos, 4). + pos_gt_labels (Tensor): gt labels assigned to positive proposals + of a single image, Shape (n_pos, ). + cfg (dict): Config of calculating targets + + Returns: + tuple: + + - labels (Tensor): Labels in a single image. \ + Shape (n,). + - label_weights (Tensor): Label weights in a single image.\ + Shape (n,) + - bucket_cls_targets (Tensor): Bucket cls targets in \ + a single image. Shape (n, num_buckets*2). + - bucket_cls_weights (Tensor): Bucket cls weights in \ + a single image. Shape (n, num_buckets*2). + - bucket_offset_targets (Tensor): Bucket offset targets \ + in a single image. Shape (n, num_buckets*2). + - bucket_offset_targets (Tensor): Bucket offset weights \ + in a single image. Shape (n, num_buckets*2). + """ + num_pos = pos_proposals.size(0) + num_neg = neg_proposals.size(0) + num_samples = num_pos + num_neg + labels = pos_gt_bboxes.new_full((num_samples, ), + self.num_classes, + dtype=torch.long) + label_weights = pos_proposals.new_zeros(num_samples) + bucket_cls_targets = pos_proposals.new_zeros(num_samples, + 4 * self.side_num) + bucket_cls_weights = pos_proposals.new_zeros(num_samples, + 4 * self.side_num) + bucket_offset_targets = pos_proposals.new_zeros( + num_samples, 4 * self.side_num) + bucket_offset_weights = pos_proposals.new_zeros( + num_samples, 4 * self.side_num) + if num_pos > 0: + labels[:num_pos] = pos_gt_labels + label_weights[:num_pos] = 1.0 + (pos_bucket_offset_targets, pos_bucket_offset_weights, + pos_bucket_cls_targets, + pos_bucket_cls_weights) = self.bbox_coder.encode( + pos_proposals, pos_gt_bboxes) + bucket_cls_targets[:num_pos, :] = pos_bucket_cls_targets + bucket_cls_weights[:num_pos, :] = pos_bucket_cls_weights + bucket_offset_targets[:num_pos, :] = pos_bucket_offset_targets + bucket_offset_weights[:num_pos, :] = pos_bucket_offset_weights + if num_neg > 0: + label_weights[-num_neg:] = 1.0 + return (labels, label_weights, bucket_cls_targets, bucket_cls_weights, + bucket_offset_targets, bucket_offset_weights) + + def loss(self, + cls_score, + bbox_pred, + rois, + labels, + label_weights, + bbox_targets, + bbox_weights, + reduction_override=None): + losses = dict() + if cls_score is not None: + avg_factor = max(torch.sum(label_weights > 0).float().item(), 1.) + losses['loss_cls'] = self.loss_cls( + cls_score, + labels, + label_weights, + avg_factor=avg_factor, + reduction_override=reduction_override) + losses['acc'] = accuracy(cls_score, labels) + + if bbox_pred is not None: + bucket_cls_preds, bucket_offset_preds = bbox_pred + bucket_cls_targets, bucket_offset_targets = bbox_targets + bucket_cls_weights, bucket_offset_weights = bbox_weights + # edge cls + bucket_cls_preds = bucket_cls_preds.view(-1, self.side_num) + bucket_cls_targets = bucket_cls_targets.view(-1, self.side_num) + bucket_cls_weights = bucket_cls_weights.view(-1, self.side_num) + losses['loss_bbox_cls'] = self.loss_bbox_cls( + bucket_cls_preds, + bucket_cls_targets, + bucket_cls_weights, + avg_factor=bucket_cls_targets.size(0), + reduction_override=reduction_override) + + losses['loss_bbox_reg'] = self.loss_bbox_reg( + bucket_offset_preds, + bucket_offset_targets, + bucket_offset_weights, + avg_factor=bucket_offset_targets.size(0), + reduction_override=reduction_override) + + return losses + + @force_fp32(apply_to=('cls_score', 'bbox_pred')) + def get_bboxes(self, + rois, + cls_score, + bbox_pred, + img_shape, + scale_factor, + rescale=False, + cfg=None): + if isinstance(cls_score, list): + cls_score = sum(cls_score) / float(len(cls_score)) + scores = F.softmax(cls_score, dim=1) if cls_score is not None else None + + if bbox_pred is not None: + bboxes, confids = self.bbox_coder.decode(rois[:, 1:], bbox_pred, + img_shape) + else: + bboxes = rois[:, 1:].clone() + confids = None + if img_shape is not None: + bboxes[:, [0, 2]].clamp_(min=0, max=img_shape[1] - 1) + bboxes[:, [1, 3]].clamp_(min=0, max=img_shape[0] - 1) + + if rescale and bboxes.size(0) > 0: + if isinstance(scale_factor, float): + bboxes /= scale_factor + else: + bboxes /= torch.from_numpy(scale_factor).to(bboxes.device) + + if cfg is None: + return bboxes, scores + else: + det_bboxes, det_labels = multiclass_nms( + bboxes, + scores, + cfg.score_thr, + cfg.nms, + cfg.max_per_img, + score_factors=confids) + + return det_bboxes, det_labels + + @force_fp32(apply_to=('bbox_preds', )) + def refine_bboxes(self, rois, labels, bbox_preds, pos_is_gts, img_metas): + """Refine bboxes during training. + + Args: + rois (Tensor): Shape (n*bs, 5), where n is image number per GPU, + and bs is the sampled RoIs per image. + labels (Tensor): Shape (n*bs, ). + bbox_preds (list[Tensor]): Shape [(n*bs, num_buckets*2), \ + (n*bs, num_buckets*2)]. + pos_is_gts (list[Tensor]): Flags indicating if each positive bbox + is a gt bbox. + img_metas (list[dict]): Meta info of each image. + + Returns: + list[Tensor]: Refined bboxes of each image in a mini-batch. + """ + img_ids = rois[:, 0].long().unique(sorted=True) + assert img_ids.numel() == len(img_metas) + + bboxes_list = [] + for i in range(len(img_metas)): + inds = torch.nonzero( + rois[:, 0] == i, as_tuple=False).squeeze(dim=1) + num_rois = inds.numel() + + bboxes_ = rois[inds, 1:] + label_ = labels[inds] + edge_cls_preds, edge_offset_preds = bbox_preds + edge_cls_preds_ = edge_cls_preds[inds] + edge_offset_preds_ = edge_offset_preds[inds] + bbox_pred_ = [edge_cls_preds_, edge_offset_preds_] + img_meta_ = img_metas[i] + pos_is_gts_ = pos_is_gts[i] + + bboxes = self.regress_by_class(bboxes_, label_, bbox_pred_, + img_meta_) + # filter gt bboxes + pos_keep = 1 - pos_is_gts_ + keep_inds = pos_is_gts_.new_ones(num_rois) + keep_inds[:len(pos_is_gts_)] = pos_keep + + bboxes_list.append(bboxes[keep_inds.type(torch.bool)]) + + return bboxes_list + + @force_fp32(apply_to=('bbox_pred', )) + def regress_by_class(self, rois, label, bbox_pred, img_meta): + """Regress the bbox for the predicted class. Used in Cascade R-CNN. + + Args: + rois (Tensor): shape (n, 4) or (n, 5) + label (Tensor): shape (n, ) + bbox_pred (list[Tensor]): shape [(n, num_buckets *2), \ + (n, num_buckets *2)] + img_meta (dict): Image meta info. + + Returns: + Tensor: Regressed bboxes, the same shape as input rois. + """ + assert rois.size(1) == 4 or rois.size(1) == 5 + + if rois.size(1) == 4: + new_rois, _ = self.bbox_coder.decode(rois, bbox_pred, + img_meta['img_shape']) + else: + bboxes, _ = self.bbox_coder.decode(rois[:, 1:], bbox_pred, + img_meta['img_shape']) + new_rois = torch.cat((rois[:, [0]], bboxes), dim=1) + + return new_rois diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/cascade_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/cascade_roi_head.py new file mode 100644 index 00000000..45b6f36a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/cascade_roi_head.py @@ -0,0 +1,507 @@ +import torch +import torch.nn as nn + +from mmdet.core import (bbox2result, bbox2roi, bbox_mapping, build_assigner, + build_sampler, merge_aug_bboxes, merge_aug_masks, + multiclass_nms) +from ..builder import HEADS, build_head, build_roi_extractor +from .base_roi_head import BaseRoIHead +from .test_mixins import BBoxTestMixin, MaskTestMixin + + +@HEADS.register_module() +class CascadeRoIHead(BaseRoIHead, BBoxTestMixin, MaskTestMixin): + """Cascade roi head including one bbox head and one mask head. + + https://arxiv.org/abs/1712.00726 + """ + + def __init__(self, + num_stages, + stage_loss_weights, + bbox_roi_extractor=None, + bbox_head=None, + mask_roi_extractor=None, + mask_head=None, + shared_head=None, + train_cfg=None, + test_cfg=None): + assert bbox_roi_extractor is not None + assert bbox_head is not None + assert shared_head is None, \ + 'Shared head is not supported in Cascade RCNN anymore' + self.num_stages = num_stages + self.stage_loss_weights = stage_loss_weights + super(CascadeRoIHead, self).__init__( + bbox_roi_extractor=bbox_roi_extractor, + bbox_head=bbox_head, + mask_roi_extractor=mask_roi_extractor, + mask_head=mask_head, + shared_head=shared_head, + train_cfg=train_cfg, + test_cfg=test_cfg) + + def init_bbox_head(self, bbox_roi_extractor, bbox_head): + """Initialize box head and box roi extractor. + + Args: + bbox_roi_extractor (dict): Config of box roi extractor. + bbox_head (dict): Config of box in box head. + """ + self.bbox_roi_extractor = nn.ModuleList() + self.bbox_head = nn.ModuleList() + if not isinstance(bbox_roi_extractor, list): + bbox_roi_extractor = [ + bbox_roi_extractor for _ in range(self.num_stages) + ] + if not isinstance(bbox_head, list): + bbox_head = [bbox_head for _ in range(self.num_stages)] + assert len(bbox_roi_extractor) == len(bbox_head) == self.num_stages + for roi_extractor, head in zip(bbox_roi_extractor, bbox_head): + self.bbox_roi_extractor.append(build_roi_extractor(roi_extractor)) + self.bbox_head.append(build_head(head)) + + def init_mask_head(self, mask_roi_extractor, mask_head): + """Initialize mask head and mask roi extractor. + + Args: + mask_roi_extractor (dict): Config of mask roi extractor. + mask_head (dict): Config of mask in mask head. + """ + self.mask_head = nn.ModuleList() + if not isinstance(mask_head, list): + mask_head = [mask_head for _ in range(self.num_stages)] + assert len(mask_head) == self.num_stages + for head in mask_head: + self.mask_head.append(build_head(head)) + if mask_roi_extractor is not None: + self.share_roi_extractor = False + self.mask_roi_extractor = nn.ModuleList() + if not isinstance(mask_roi_extractor, list): + mask_roi_extractor = [ + mask_roi_extractor for _ in range(self.num_stages) + ] + assert len(mask_roi_extractor) == self.num_stages + for roi_extractor in mask_roi_extractor: + self.mask_roi_extractor.append( + build_roi_extractor(roi_extractor)) + else: + self.share_roi_extractor = True + self.mask_roi_extractor = self.bbox_roi_extractor + + def init_assigner_sampler(self): + """Initialize assigner and sampler for each stage.""" + self.bbox_assigner = [] + self.bbox_sampler = [] + if self.train_cfg is not None: + for idx, rcnn_train_cfg in enumerate(self.train_cfg): + self.bbox_assigner.append( + build_assigner(rcnn_train_cfg.assigner)) + self.current_stage = idx + self.bbox_sampler.append( + build_sampler(rcnn_train_cfg.sampler, context=self)) + + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if self.with_shared_head: + self.shared_head.init_weights(pretrained=pretrained) + for i in range(self.num_stages): + if self.with_bbox: + self.bbox_roi_extractor[i].init_weights() + self.bbox_head[i].init_weights() + if self.with_mask: + if not self.share_roi_extractor: + self.mask_roi_extractor[i].init_weights() + self.mask_head[i].init_weights() + + def forward_dummy(self, x, proposals): + """Dummy forward function.""" + # bbox head + outs = () + rois = bbox2roi([proposals]) + if self.with_bbox: + for i in range(self.num_stages): + bbox_results = self._bbox_forward(i, x, rois) + outs = outs + (bbox_results['cls_score'], + bbox_results['bbox_pred']) + # mask heads + if self.with_mask: + mask_rois = rois[:100] + for i in range(self.num_stages): + mask_results = self._mask_forward(i, x, mask_rois) + outs = outs + (mask_results['mask_pred'], ) + return outs + + def _bbox_forward(self, stage, x, rois): + """Box head forward function used in both training and testing.""" + bbox_roi_extractor = self.bbox_roi_extractor[stage] + bbox_head = self.bbox_head[stage] + bbox_feats = bbox_roi_extractor(x[:bbox_roi_extractor.num_inputs], + rois) + # do not support caffe_c4 model anymore + cls_score, bbox_pred = bbox_head(bbox_feats) + + bbox_results = dict( + cls_score=cls_score, bbox_pred=bbox_pred, bbox_feats=bbox_feats) + return bbox_results + + def _bbox_forward_train(self, stage, x, sampling_results, gt_bboxes, + gt_labels, rcnn_train_cfg): + """Run forward function and calculate loss for box head in training.""" + rois = bbox2roi([res.bboxes for res in sampling_results]) + bbox_results = self._bbox_forward(stage, x, rois) + bbox_targets = self.bbox_head[stage].get_targets( + sampling_results, gt_bboxes, gt_labels, rcnn_train_cfg) + loss_bbox = self.bbox_head[stage].loss(bbox_results['cls_score'], + bbox_results['bbox_pred'], rois, + *bbox_targets) + + bbox_results.update( + loss_bbox=loss_bbox, rois=rois, bbox_targets=bbox_targets) + return bbox_results + + def _mask_forward(self, stage, x, rois): + """Mask head forward function used in both training and testing.""" + mask_roi_extractor = self.mask_roi_extractor[stage] + mask_head = self.mask_head[stage] + mask_feats = mask_roi_extractor(x[:mask_roi_extractor.num_inputs], + rois) + # do not support caffe_c4 model anymore + mask_pred = mask_head(mask_feats) + + mask_results = dict(mask_pred=mask_pred) + return mask_results + + def _mask_forward_train(self, + stage, + x, + sampling_results, + gt_masks, + rcnn_train_cfg, + bbox_feats=None): + """Run forward function and calculate loss for mask head in + training.""" + pos_rois = bbox2roi([res.pos_bboxes for res in sampling_results]) + mask_results = self._mask_forward(stage, x, pos_rois) + + mask_targets = self.mask_head[stage].get_targets( + sampling_results, gt_masks, rcnn_train_cfg) + pos_labels = torch.cat([res.pos_gt_labels for res in sampling_results]) + loss_mask = self.mask_head[stage].loss(mask_results['mask_pred'], + mask_targets, pos_labels) + + mask_results.update(loss_mask=loss_mask) + return mask_results + + def forward_train(self, + x, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None): + """ + Args: + x (list[Tensor]): list of multi-level img features. + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + proposals (list[Tensors]): list of region proposals. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + gt_masks (None | Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + losses = dict() + for i in range(self.num_stages): + self.current_stage = i + rcnn_train_cfg = self.train_cfg[i] + lw = self.stage_loss_weights[i] + + # assign gts and sample proposals + sampling_results = [] + if self.with_bbox or self.with_mask: + bbox_assigner = self.bbox_assigner[i] + bbox_sampler = self.bbox_sampler[i] + num_imgs = len(img_metas) + if gt_bboxes_ignore is None: + gt_bboxes_ignore = [None for _ in range(num_imgs)] + + for j in range(num_imgs): + assign_result = bbox_assigner.assign( + proposal_list[j], gt_bboxes[j], gt_bboxes_ignore[j], + gt_labels[j]) + sampling_result = bbox_sampler.sample( + assign_result, + proposal_list[j], + gt_bboxes[j], + gt_labels[j], + feats=[lvl_feat[j][None] for lvl_feat in x]) + sampling_results.append(sampling_result) + + # bbox head forward and loss + bbox_results = self._bbox_forward_train(i, x, sampling_results, + gt_bboxes, gt_labels, + rcnn_train_cfg) + + for name, value in bbox_results['loss_bbox'].items(): + losses[f's{i}.{name}'] = ( + value * lw if 'loss' in name else value) + + # mask head forward and loss + if self.with_mask: + mask_results = self._mask_forward_train( + i, x, sampling_results, gt_masks, rcnn_train_cfg, + bbox_results['bbox_feats']) + for name, value in mask_results['loss_mask'].items(): + losses[f's{i}.{name}'] = ( + value * lw if 'loss' in name else value) + + # refine bboxes + if i < self.num_stages - 1: + pos_is_gts = [res.pos_is_gt for res in sampling_results] + # bbox_targets is a tuple + roi_labels = bbox_results['bbox_targets'][0] + with torch.no_grad(): + roi_labels = torch.where( + roi_labels == self.bbox_head[i].num_classes, + bbox_results['cls_score'][:, :-1].argmax(1), + roi_labels) + proposal_list = self.bbox_head[i].refine_bboxes( + bbox_results['rois'], roi_labels, + bbox_results['bbox_pred'], pos_is_gts, img_metas) + + return losses + + def simple_test(self, x, proposal_list, img_metas, rescale=False): + """Test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + num_imgs = len(proposal_list) + img_shapes = tuple(meta['img_shape'] for meta in img_metas) + ori_shapes = tuple(meta['ori_shape'] for meta in img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + + # "ms" in variable names means multi-stage + ms_bbox_result = {} + ms_segm_result = {} + ms_scores = [] + rcnn_test_cfg = self.test_cfg + + rois = bbox2roi(proposal_list) + for i in range(self.num_stages): + bbox_results = self._bbox_forward(i, x, rois) + + # split batch bbox prediction back to each image + cls_score = bbox_results['cls_score'] + bbox_pred = bbox_results['bbox_pred'] + num_proposals_per_img = tuple( + len(proposals) for proposals in proposal_list) + rois = rois.split(num_proposals_per_img, 0) + cls_score = cls_score.split(num_proposals_per_img, 0) + if isinstance(bbox_pred, torch.Tensor): + bbox_pred = bbox_pred.split(num_proposals_per_img, 0) + else: + bbox_pred = self.bbox_head[i].bbox_pred_split( + bbox_pred, num_proposals_per_img) + ms_scores.append(cls_score) + + if i < self.num_stages - 1: + bbox_label = [s[:, :-1].argmax(dim=1) for s in cls_score] + rois = torch.cat([ + self.bbox_head[i].regress_by_class(rois[j], bbox_label[j], + bbox_pred[j], + img_metas[j]) + for j in range(num_imgs) + ]) + + # average scores of each image by stages + cls_score = [ + sum([score[i] for score in ms_scores]) / float(len(ms_scores)) + for i in range(num_imgs) + ] + + # apply bbox post-processing to each image individually + det_bboxes = [] + det_labels = [] + for i in range(num_imgs): + det_bbox, det_label = self.bbox_head[-1].get_bboxes( + rois[i], + cls_score[i], + bbox_pred[i], + img_shapes[i], + scale_factors[i], + rescale=rescale, + cfg=rcnn_test_cfg) + det_bboxes.append(det_bbox) + det_labels.append(det_label) + + if torch.onnx.is_in_onnx_export(): + return det_bboxes, det_labels + bbox_results = [ + bbox2result(det_bboxes[i], det_labels[i], + self.bbox_head[-1].num_classes) + for i in range(num_imgs) + ] + ms_bbox_result['ensemble'] = bbox_results + + if self.with_mask: + if all(det_bbox.shape[0] == 0 for det_bbox in det_bboxes): + mask_classes = self.mask_head[-1].num_classes + segm_results = [[[] for _ in range(mask_classes)] + for _ in range(num_imgs)] + else: + if rescale and not isinstance(scale_factors[0], float): + scale_factors = [ + torch.from_numpy(scale_factor).to(det_bboxes[0].device) + for scale_factor in scale_factors + ] + _bboxes = [ + det_bboxes[i][:, :4] * + scale_factors[i] if rescale else det_bboxes[i][:, :4] + for i in range(len(det_bboxes)) + ] + mask_rois = bbox2roi(_bboxes) + num_mask_rois_per_img = tuple( + _bbox.size(0) for _bbox in _bboxes) + aug_masks = [] + for i in range(self.num_stages): + mask_results = self._mask_forward(i, x, mask_rois) + mask_pred = mask_results['mask_pred'] + # split batch mask prediction back to each image + mask_pred = mask_pred.split(num_mask_rois_per_img, 0) + aug_masks.append( + [m.sigmoid().cpu().numpy() for m in mask_pred]) + + # apply mask post-processing to each image individually + segm_results = [] + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + segm_results.append( + [[] + for _ in range(self.mask_head[-1].num_classes)]) + else: + aug_mask = [mask[i] for mask in aug_masks] + merged_masks = merge_aug_masks( + aug_mask, [[img_metas[i]]] * self.num_stages, + rcnn_test_cfg) + segm_result = self.mask_head[-1].get_seg_masks( + merged_masks, _bboxes[i], det_labels[i], + rcnn_test_cfg, ori_shapes[i], scale_factors[i], + rescale) + segm_results.append(segm_result) + ms_segm_result['ensemble'] = segm_results + + if self.with_mask: + results = list( + zip(ms_bbox_result['ensemble'], ms_segm_result['ensemble'])) + else: + results = ms_bbox_result['ensemble'] + + return results + + def aug_test(self, features, proposal_list, img_metas, rescale=False): + """Test with augmentations. + + If rescale is False, then returned bboxes and masks will fit the scale + of imgs[0]. + """ + rcnn_test_cfg = self.test_cfg + aug_bboxes = [] + aug_scores = [] + for x, img_meta in zip(features, img_metas): + # only one image in the batch + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + + proposals = bbox_mapping(proposal_list[0][:, :4], img_shape, + scale_factor, flip, flip_direction) + # "ms" in variable names means multi-stage + ms_scores = [] + + rois = bbox2roi([proposals]) + for i in range(self.num_stages): + bbox_results = self._bbox_forward(i, x, rois) + ms_scores.append(bbox_results['cls_score']) + + if i < self.num_stages - 1: + bbox_label = bbox_results['cls_score'][:, :-1].argmax( + dim=1) + rois = self.bbox_head[i].regress_by_class( + rois, bbox_label, bbox_results['bbox_pred'], + img_meta[0]) + + cls_score = sum(ms_scores) / float(len(ms_scores)) + bboxes, scores = self.bbox_head[-1].get_bboxes( + rois, + cls_score, + bbox_results['bbox_pred'], + img_shape, + scale_factor, + rescale=False, + cfg=None) + aug_bboxes.append(bboxes) + aug_scores.append(scores) + + # after merging, bboxes will be rescaled to the original image size + merged_bboxes, merged_scores = merge_aug_bboxes( + aug_bboxes, aug_scores, img_metas, rcnn_test_cfg) + det_bboxes, det_labels = multiclass_nms(merged_bboxes, merged_scores, + rcnn_test_cfg.score_thr, + rcnn_test_cfg.nms, + rcnn_test_cfg.max_per_img) + + bbox_result = bbox2result(det_bboxes, det_labels, + self.bbox_head[-1].num_classes) + + if self.with_mask: + if det_bboxes.shape[0] == 0: + segm_result = [[[] + for _ in range(self.mask_head[-1].num_classes)] + ] + else: + aug_masks = [] + aug_img_metas = [] + for x, img_meta in zip(features, img_metas): + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + _bboxes = bbox_mapping(det_bboxes[:, :4], img_shape, + scale_factor, flip, flip_direction) + mask_rois = bbox2roi([_bboxes]) + for i in range(self.num_stages): + mask_results = self._mask_forward(i, x, mask_rois) + aug_masks.append( + mask_results['mask_pred'].sigmoid().cpu().numpy()) + aug_img_metas.append(img_meta) + merged_masks = merge_aug_masks(aug_masks, aug_img_metas, + self.test_cfg) + + ori_shape = img_metas[0][0]['ori_shape'] + segm_result = self.mask_head[-1].get_seg_masks( + merged_masks, + det_bboxes, + det_labels, + rcnn_test_cfg, + ori_shape, + scale_factor=1.0, + rescale=False) + return [(bbox_result, segm_result)] + else: + return [bbox_result] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/double_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/double_roi_head.py new file mode 100644 index 00000000..a1aa6c82 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/double_roi_head.py @@ -0,0 +1,33 @@ +from ..builder import HEADS +from .standard_roi_head import StandardRoIHead + + +@HEADS.register_module() +class DoubleHeadRoIHead(StandardRoIHead): + """RoI head for Double Head RCNN. + + https://arxiv.org/abs/1904.06493 + """ + + def __init__(self, reg_roi_scale_factor, **kwargs): + super(DoubleHeadRoIHead, self).__init__(**kwargs) + self.reg_roi_scale_factor = reg_roi_scale_factor + + def _bbox_forward(self, x, rois): + """Box head forward function used in both training and testing time.""" + bbox_cls_feats = self.bbox_roi_extractor( + x[:self.bbox_roi_extractor.num_inputs], rois) + bbox_reg_feats = self.bbox_roi_extractor( + x[:self.bbox_roi_extractor.num_inputs], + rois, + roi_scale_factor=self.reg_roi_scale_factor) + if self.with_shared_head: + bbox_cls_feats = self.shared_head(bbox_cls_feats) + bbox_reg_feats = self.shared_head(bbox_reg_feats) + cls_score, bbox_pred = self.bbox_head(bbox_cls_feats, bbox_reg_feats) + + bbox_results = dict( + cls_score=cls_score, + bbox_pred=bbox_pred, + bbox_feats=bbox_cls_feats) + return bbox_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/dynamic_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/dynamic_roi_head.py new file mode 100644 index 00000000..89427a93 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/dynamic_roi_head.py @@ -0,0 +1,154 @@ +import numpy as np +import torch + +from mmdet.core import bbox2roi +from mmdet.models.losses import SmoothL1Loss +from ..builder import HEADS +from .standard_roi_head import StandardRoIHead + +EPS = 1e-15 + + +@HEADS.register_module() +class DynamicRoIHead(StandardRoIHead): + """RoI head for `Dynamic R-CNN `_.""" + + def __init__(self, **kwargs): + super(DynamicRoIHead, self).__init__(**kwargs) + assert isinstance(self.bbox_head.loss_bbox, SmoothL1Loss) + # the IoU history of the past `update_iter_interval` iterations + self.iou_history = [] + # the beta history of the past `update_iter_interval` iterations + self.beta_history = [] + + def forward_train(self, + x, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None): + """Forward function for training. + + Args: + x (list[Tensor]): list of multi-level img features. + + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + + proposals (list[Tensors]): list of region proposals. + + gt_bboxes (list[Tensor]): each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + + gt_labels (list[Tensor]): class indices corresponding to each box + + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + gt_masks (None | Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + # assign gts and sample proposals + if self.with_bbox or self.with_mask: + num_imgs = len(img_metas) + if gt_bboxes_ignore is None: + gt_bboxes_ignore = [None for _ in range(num_imgs)] + sampling_results = [] + cur_iou = [] + for i in range(num_imgs): + assign_result = self.bbox_assigner.assign( + proposal_list[i], gt_bboxes[i], gt_bboxes_ignore[i], + gt_labels[i]) + sampling_result = self.bbox_sampler.sample( + assign_result, + proposal_list[i], + gt_bboxes[i], + gt_labels[i], + feats=[lvl_feat[i][None] for lvl_feat in x]) + # record the `iou_topk`-th largest IoU in an image + iou_topk = min(self.train_cfg.dynamic_rcnn.iou_topk, + len(assign_result.max_overlaps)) + ious, _ = torch.topk(assign_result.max_overlaps, iou_topk) + cur_iou.append(ious[-1].item()) + sampling_results.append(sampling_result) + # average the current IoUs over images + cur_iou = np.mean(cur_iou) + self.iou_history.append(cur_iou) + + losses = dict() + # bbox head forward and loss + if self.with_bbox: + bbox_results = self._bbox_forward_train(x, sampling_results, + gt_bboxes, gt_labels, + img_metas) + losses.update(bbox_results['loss_bbox']) + + # mask head forward and loss + if self.with_mask: + mask_results = self._mask_forward_train(x, sampling_results, + bbox_results['bbox_feats'], + gt_masks, img_metas) + losses.update(mask_results['loss_mask']) + + # update IoU threshold and SmoothL1 beta + update_iter_interval = self.train_cfg.dynamic_rcnn.update_iter_interval + if len(self.iou_history) % update_iter_interval == 0: + new_iou_thr, new_beta = self.update_hyperparameters() + + return losses + + def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels, + img_metas): + num_imgs = len(img_metas) + rois = bbox2roi([res.bboxes for res in sampling_results]) + bbox_results = self._bbox_forward(x, rois) + + bbox_targets = self.bbox_head.get_targets(sampling_results, gt_bboxes, + gt_labels, self.train_cfg) + # record the `beta_topk`-th smallest target + # `bbox_targets[2]` and `bbox_targets[3]` stand for bbox_targets + # and bbox_weights, respectively + pos_inds = bbox_targets[3][:, 0].nonzero().squeeze(1) + num_pos = len(pos_inds) + cur_target = bbox_targets[2][pos_inds, :2].abs().mean(dim=1) + beta_topk = min(self.train_cfg.dynamic_rcnn.beta_topk * num_imgs, + num_pos) + cur_target = torch.kthvalue(cur_target, beta_topk)[0].item() + self.beta_history.append(cur_target) + loss_bbox = self.bbox_head.loss(bbox_results['cls_score'], + bbox_results['bbox_pred'], rois, + *bbox_targets) + + bbox_results.update(loss_bbox=loss_bbox) + return bbox_results + + def update_hyperparameters(self): + """Update hyperparameters like IoU thresholds for assigner and beta for + SmoothL1 loss based on the training statistics. + + Returns: + tuple[float]: the updated ``iou_thr`` and ``beta``. + """ + new_iou_thr = max(self.train_cfg.dynamic_rcnn.initial_iou, + np.mean(self.iou_history)) + self.iou_history = [] + self.bbox_assigner.pos_iou_thr = new_iou_thr + self.bbox_assigner.neg_iou_thr = new_iou_thr + self.bbox_assigner.min_pos_iou = new_iou_thr + if (np.median(self.beta_history) < EPS): + # avoid 0 or too small value for new_beta + new_beta = self.bbox_head.loss_bbox.beta + else: + new_beta = min(self.train_cfg.dynamic_rcnn.initial_beta, + np.median(self.beta_history)) + self.beta_history = [] + self.bbox_head.loss_bbox.beta = new_beta + return new_iou_thr, new_beta diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/grid_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/grid_roi_head.py new file mode 100644 index 00000000..4c52c798 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/grid_roi_head.py @@ -0,0 +1,176 @@ +import torch + +from mmdet.core import bbox2result, bbox2roi +from ..builder import HEADS, build_head, build_roi_extractor +from .standard_roi_head import StandardRoIHead + + +@HEADS.register_module() +class GridRoIHead(StandardRoIHead): + """Grid roi head for Grid R-CNN. + + https://arxiv.org/abs/1811.12030 + """ + + def __init__(self, grid_roi_extractor, grid_head, **kwargs): + assert grid_head is not None + super(GridRoIHead, self).__init__(**kwargs) + if grid_roi_extractor is not None: + self.grid_roi_extractor = build_roi_extractor(grid_roi_extractor) + self.share_roi_extractor = False + else: + self.share_roi_extractor = True + self.grid_roi_extractor = self.bbox_roi_extractor + self.grid_head = build_head(grid_head) + + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + super(GridRoIHead, self).init_weights(pretrained) + self.grid_head.init_weights() + if not self.share_roi_extractor: + self.grid_roi_extractor.init_weights() + + def _random_jitter(self, sampling_results, img_metas, amplitude=0.15): + """Ramdom jitter positive proposals for training.""" + for sampling_result, img_meta in zip(sampling_results, img_metas): + bboxes = sampling_result.pos_bboxes + random_offsets = bboxes.new_empty(bboxes.shape[0], 4).uniform_( + -amplitude, amplitude) + # before jittering + cxcy = (bboxes[:, 2:4] + bboxes[:, :2]) / 2 + wh = (bboxes[:, 2:4] - bboxes[:, :2]).abs() + # after jittering + new_cxcy = cxcy + wh * random_offsets[:, :2] + new_wh = wh * (1 + random_offsets[:, 2:]) + # xywh to xyxy + new_x1y1 = (new_cxcy - new_wh / 2) + new_x2y2 = (new_cxcy + new_wh / 2) + new_bboxes = torch.cat([new_x1y1, new_x2y2], dim=1) + # clip bboxes + max_shape = img_meta['img_shape'] + if max_shape is not None: + new_bboxes[:, 0::2].clamp_(min=0, max=max_shape[1] - 1) + new_bboxes[:, 1::2].clamp_(min=0, max=max_shape[0] - 1) + + sampling_result.pos_bboxes = new_bboxes + return sampling_results + + def forward_dummy(self, x, proposals): + """Dummy forward function.""" + # bbox head + outs = () + rois = bbox2roi([proposals]) + if self.with_bbox: + bbox_results = self._bbox_forward(x, rois) + outs = outs + (bbox_results['cls_score'], + bbox_results['bbox_pred']) + + # grid head + grid_rois = rois[:100] + grid_feats = self.grid_roi_extractor( + x[:self.grid_roi_extractor.num_inputs], grid_rois) + if self.with_shared_head: + grid_feats = self.shared_head(grid_feats) + grid_pred = self.grid_head(grid_feats) + outs = outs + (grid_pred, ) + + # mask head + if self.with_mask: + mask_rois = rois[:100] + mask_results = self._mask_forward(x, mask_rois) + outs = outs + (mask_results['mask_pred'], ) + return outs + + def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels, + img_metas): + """Run forward function and calculate loss for box head in training.""" + bbox_results = super(GridRoIHead, + self)._bbox_forward_train(x, sampling_results, + gt_bboxes, gt_labels, + img_metas) + + # Grid head forward and loss + sampling_results = self._random_jitter(sampling_results, img_metas) + pos_rois = bbox2roi([res.pos_bboxes for res in sampling_results]) + + # GN in head does not support zero shape input + if pos_rois.shape[0] == 0: + return bbox_results + + grid_feats = self.grid_roi_extractor( + x[:self.grid_roi_extractor.num_inputs], pos_rois) + if self.with_shared_head: + grid_feats = self.shared_head(grid_feats) + # Accelerate training + max_sample_num_grid = self.train_cfg.get('max_num_grid', 192) + sample_idx = torch.randperm( + grid_feats.shape[0])[:min(grid_feats.shape[0], max_sample_num_grid + )] + grid_feats = grid_feats[sample_idx] + + grid_pred = self.grid_head(grid_feats) + + grid_targets = self.grid_head.get_targets(sampling_results, + self.train_cfg) + grid_targets = grid_targets[sample_idx] + + loss_grid = self.grid_head.loss(grid_pred, grid_targets) + + bbox_results['loss_bbox'].update(loss_grid) + return bbox_results + + def simple_test(self, + x, + proposal_list, + img_metas, + proposals=None, + rescale=False): + """Test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + + det_bboxes, det_labels = self.simple_test_bboxes( + x, img_metas, proposal_list, self.test_cfg, rescale=False) + # pack rois into bboxes + grid_rois = bbox2roi([det_bbox[:, :4] for det_bbox in det_bboxes]) + if grid_rois.shape[0] != 0: + grid_feats = self.grid_roi_extractor( + x[:len(self.grid_roi_extractor.featmap_strides)], grid_rois) + self.grid_head.test_mode = True + grid_pred = self.grid_head(grid_feats) + # split batch grid head prediction back to each image + num_roi_per_img = tuple(len(det_bbox) for det_bbox in det_bboxes) + grid_pred = { + k: v.split(num_roi_per_img, 0) + for k, v in grid_pred.items() + } + + # apply bbox post-processing to each image individually + bbox_results = [] + num_imgs = len(det_bboxes) + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + bbox_results.append(grid_rois.new_tensor([])) + else: + det_bbox = self.grid_head.get_bboxes( + det_bboxes[i], grid_pred['fused'][i], [img_metas[i]]) + if rescale: + det_bbox[:, :4] /= img_metas[i]['scale_factor'] + bbox_results.append( + bbox2result(det_bbox, det_labels[i], + self.bbox_head.num_classes)) + else: + bbox_results = [ + grid_rois.new_tensor([]) for _ in range(len(det_bboxes)) + ] + + if not self.with_mask: + return bbox_results + else: + segm_results = self.simple_test_mask( + x, img_metas, det_bboxes, det_labels, rescale=rescale) + return list(zip(bbox_results, segm_results)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/htc_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/htc_roi_head.py new file mode 100644 index 00000000..5b5c2ec3 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/htc_roi_head.py @@ -0,0 +1,589 @@ +import torch +import torch.nn.functional as F + +from mmdet.core import (bbox2result, bbox2roi, bbox_mapping, merge_aug_bboxes, + merge_aug_masks, multiclass_nms) +from ..builder import HEADS, build_head, build_roi_extractor +from .cascade_roi_head import CascadeRoIHead + + +@HEADS.register_module() +class HybridTaskCascadeRoIHead(CascadeRoIHead): + """Hybrid task cascade roi head including one bbox head and one mask head. + + https://arxiv.org/abs/1901.07518 + """ + + def __init__(self, + num_stages, + stage_loss_weights, + semantic_roi_extractor=None, + semantic_head=None, + semantic_fusion=('bbox', 'mask'), + interleaved=True, + mask_info_flow=True, + **kwargs): + super(HybridTaskCascadeRoIHead, + self).__init__(num_stages, stage_loss_weights, **kwargs) + assert self.with_bbox and self.with_mask + assert not self.with_shared_head # shared head is not supported + + if semantic_head is not None: + self.semantic_roi_extractor = build_roi_extractor( + semantic_roi_extractor) + self.semantic_head = build_head(semantic_head) + + self.semantic_fusion = semantic_fusion + self.interleaved = interleaved + self.mask_info_flow = mask_info_flow + + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + super(HybridTaskCascadeRoIHead, self).init_weights(pretrained) + if self.with_semantic: + self.semantic_head.init_weights() + + @property + def with_semantic(self): + """bool: whether the head has semantic head""" + if hasattr(self, 'semantic_head') and self.semantic_head is not None: + return True + else: + return False + + def forward_dummy(self, x, proposals): + """Dummy forward function.""" + outs = () + # semantic head + if self.with_semantic: + _, semantic_feat = self.semantic_head(x) + else: + semantic_feat = None + # bbox heads + rois = bbox2roi([proposals]) + for i in range(self.num_stages): + bbox_results = self._bbox_forward( + i, x, rois, semantic_feat=semantic_feat) + outs = outs + (bbox_results['cls_score'], + bbox_results['bbox_pred']) + # mask heads + if self.with_mask: + mask_rois = rois[:100] + mask_roi_extractor = self.mask_roi_extractor[-1] + mask_feats = mask_roi_extractor( + x[:len(mask_roi_extractor.featmap_strides)], mask_rois) + if self.with_semantic and 'mask' in self.semantic_fusion: + mask_semantic_feat = self.semantic_roi_extractor( + [semantic_feat], mask_rois) + mask_feats += mask_semantic_feat + last_feat = None + for i in range(self.num_stages): + mask_head = self.mask_head[i] + if self.mask_info_flow: + mask_pred, last_feat = mask_head(mask_feats, last_feat) + else: + mask_pred = mask_head(mask_feats) + outs = outs + (mask_pred, ) + return outs + + def _bbox_forward_train(self, + stage, + x, + sampling_results, + gt_bboxes, + gt_labels, + rcnn_train_cfg, + semantic_feat=None): + """Run forward function and calculate loss for box head in training.""" + bbox_head = self.bbox_head[stage] + rois = bbox2roi([res.bboxes for res in sampling_results]) + bbox_results = self._bbox_forward( + stage, x, rois, semantic_feat=semantic_feat) + + bbox_targets = bbox_head.get_targets(sampling_results, gt_bboxes, + gt_labels, rcnn_train_cfg) + loss_bbox = bbox_head.loss(bbox_results['cls_score'], + bbox_results['bbox_pred'], rois, + *bbox_targets) + + bbox_results.update( + loss_bbox=loss_bbox, + rois=rois, + bbox_targets=bbox_targets, + ) + return bbox_results + + def _mask_forward_train(self, + stage, + x, + sampling_results, + gt_masks, + rcnn_train_cfg, + semantic_feat=None): + """Run forward function and calculate loss for mask head in + training.""" + mask_roi_extractor = self.mask_roi_extractor[stage] + mask_head = self.mask_head[stage] + pos_rois = bbox2roi([res.pos_bboxes for res in sampling_results]) + mask_feats = mask_roi_extractor(x[:mask_roi_extractor.num_inputs], + pos_rois) + + # semantic feature fusion + # element-wise sum for original features and pooled semantic features + if self.with_semantic and 'mask' in self.semantic_fusion: + mask_semantic_feat = self.semantic_roi_extractor([semantic_feat], + pos_rois) + if mask_semantic_feat.shape[-2:] != mask_feats.shape[-2:]: + mask_semantic_feat = F.adaptive_avg_pool2d( + mask_semantic_feat, mask_feats.shape[-2:]) + mask_feats += mask_semantic_feat + + # mask information flow + # forward all previous mask heads to obtain last_feat, and fuse it + # with the normal mask feature + if self.mask_info_flow: + last_feat = None + for i in range(stage): + last_feat = self.mask_head[i]( + mask_feats, last_feat, return_logits=False) + mask_pred = mask_head(mask_feats, last_feat, return_feat=False) + else: + mask_pred = mask_head(mask_feats, return_feat=False) + + mask_targets = mask_head.get_targets(sampling_results, gt_masks, + rcnn_train_cfg) + pos_labels = torch.cat([res.pos_gt_labels for res in sampling_results]) + loss_mask = mask_head.loss(mask_pred, mask_targets, pos_labels) + + mask_results = dict(loss_mask=loss_mask) + return mask_results + + def _bbox_forward(self, stage, x, rois, semantic_feat=None): + """Box head forward function used in both training and testing.""" + bbox_roi_extractor = self.bbox_roi_extractor[stage] + bbox_head = self.bbox_head[stage] + bbox_feats = bbox_roi_extractor( + x[:len(bbox_roi_extractor.featmap_strides)], rois) + if self.with_semantic and 'bbox' in self.semantic_fusion: + bbox_semantic_feat = self.semantic_roi_extractor([semantic_feat], + rois) + if bbox_semantic_feat.shape[-2:] != bbox_feats.shape[-2:]: + bbox_semantic_feat = F.adaptive_avg_pool2d( + bbox_semantic_feat, bbox_feats.shape[-2:]) + bbox_feats += bbox_semantic_feat + cls_score, bbox_pred = bbox_head(bbox_feats) + + bbox_results = dict(cls_score=cls_score, bbox_pred=bbox_pred) + return bbox_results + + def _mask_forward_test(self, stage, x, bboxes, semantic_feat=None): + """Mask head forward function for testing.""" + mask_roi_extractor = self.mask_roi_extractor[stage] + mask_head = self.mask_head[stage] + mask_rois = bbox2roi([bboxes]) + mask_feats = mask_roi_extractor( + x[:len(mask_roi_extractor.featmap_strides)], mask_rois) + if self.with_semantic and 'mask' in self.semantic_fusion: + mask_semantic_feat = self.semantic_roi_extractor([semantic_feat], + mask_rois) + if mask_semantic_feat.shape[-2:] != mask_feats.shape[-2:]: + mask_semantic_feat = F.adaptive_avg_pool2d( + mask_semantic_feat, mask_feats.shape[-2:]) + mask_feats += mask_semantic_feat + if self.mask_info_flow: + last_feat = None + last_pred = None + for i in range(stage): + mask_pred, last_feat = self.mask_head[i](mask_feats, last_feat) + if last_pred is not None: + mask_pred = mask_pred + last_pred + last_pred = mask_pred + mask_pred = mask_head(mask_feats, last_feat, return_feat=False) + if last_pred is not None: + mask_pred = mask_pred + last_pred + else: + mask_pred = mask_head(mask_feats) + return mask_pred + + def forward_train(self, + x, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None, + gt_semantic_seg=None): + """ + Args: + x (list[Tensor]): list of multi-level img features. + + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + + proposal_list (list[Tensors]): list of region proposals. + + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + + gt_labels (list[Tensor]): class indices corresponding to each box + + gt_bboxes_ignore (None, list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + + gt_masks (None, Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + gt_semantic_seg (None, list[Tensor]): semantic segmentation masks + used if the architecture supports semantic segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + # semantic segmentation part + # 2 outputs: segmentation prediction and embedded features + losses = dict() + if self.with_semantic: + semantic_pred, semantic_feat = self.semantic_head(x) + loss_seg = self.semantic_head.loss(semantic_pred, gt_semantic_seg) + losses['loss_semantic_seg'] = loss_seg + else: + semantic_feat = None + + for i in range(self.num_stages): + self.current_stage = i + rcnn_train_cfg = self.train_cfg[i] + lw = self.stage_loss_weights[i] + + # assign gts and sample proposals + sampling_results = [] + bbox_assigner = self.bbox_assigner[i] + bbox_sampler = self.bbox_sampler[i] + num_imgs = len(img_metas) + if gt_bboxes_ignore is None: + gt_bboxes_ignore = [None for _ in range(num_imgs)] + + for j in range(num_imgs): + assign_result = bbox_assigner.assign(proposal_list[j], + gt_bboxes[j], + gt_bboxes_ignore[j], + gt_labels[j]) + sampling_result = bbox_sampler.sample( + assign_result, + proposal_list[j], + gt_bboxes[j], + gt_labels[j], + feats=[lvl_feat[j][None] for lvl_feat in x]) + sampling_results.append(sampling_result) + + # bbox head forward and loss + bbox_results = \ + self._bbox_forward_train( + i, x, sampling_results, gt_bboxes, gt_labels, + rcnn_train_cfg, semantic_feat) + roi_labels = bbox_results['bbox_targets'][0] + + for name, value in bbox_results['loss_bbox'].items(): + losses[f's{i}.{name}'] = ( + value * lw if 'loss' in name else value) + + # mask head forward and loss + if self.with_mask: + # interleaved execution: use regressed bboxes by the box branch + # to train the mask branch + if self.interleaved: + pos_is_gts = [res.pos_is_gt for res in sampling_results] + with torch.no_grad(): + proposal_list = self.bbox_head[i].refine_bboxes( + bbox_results['rois'], roi_labels, + bbox_results['bbox_pred'], pos_is_gts, img_metas) + # re-assign and sample 512 RoIs from 512 RoIs + sampling_results = [] + for j in range(num_imgs): + assign_result = bbox_assigner.assign( + proposal_list[j], gt_bboxes[j], + gt_bboxes_ignore[j], gt_labels[j]) + sampling_result = bbox_sampler.sample( + assign_result, + proposal_list[j], + gt_bboxes[j], + gt_labels[j], + feats=[lvl_feat[j][None] for lvl_feat in x]) + sampling_results.append(sampling_result) + mask_results = self._mask_forward_train( + i, x, sampling_results, gt_masks, rcnn_train_cfg, + semantic_feat) + for name, value in mask_results['loss_mask'].items(): + losses[f's{i}.{name}'] = ( + value * lw if 'loss' in name else value) + + # refine bboxes (same as Cascade R-CNN) + if i < self.num_stages - 1 and not self.interleaved: + pos_is_gts = [res.pos_is_gt for res in sampling_results] + with torch.no_grad(): + proposal_list = self.bbox_head[i].refine_bboxes( + bbox_results['rois'], roi_labels, + bbox_results['bbox_pred'], pos_is_gts, img_metas) + + return losses + + def simple_test(self, x, proposal_list, img_metas, rescale=False): + """Test without augmentation.""" + if self.with_semantic: + _, semantic_feat = self.semantic_head(x) + else: + semantic_feat = None + + num_imgs = len(proposal_list) + img_shapes = tuple(meta['img_shape'] for meta in img_metas) + ori_shapes = tuple(meta['ori_shape'] for meta in img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + + # "ms" in variable names means multi-stage + ms_bbox_result = {} + ms_segm_result = {} + ms_scores = [] + rcnn_test_cfg = self.test_cfg + + rois = bbox2roi(proposal_list) + for i in range(self.num_stages): + bbox_head = self.bbox_head[i] + bbox_results = self._bbox_forward( + i, x, rois, semantic_feat=semantic_feat) + # split batch bbox prediction back to each image + cls_score = bbox_results['cls_score'] + bbox_pred = bbox_results['bbox_pred'] + num_proposals_per_img = tuple(len(p) for p in proposal_list) + rois = rois.split(num_proposals_per_img, 0) + cls_score = cls_score.split(num_proposals_per_img, 0) + bbox_pred = bbox_pred.split(num_proposals_per_img, 0) + ms_scores.append(cls_score) + + if i < self.num_stages - 1: + bbox_label = [s[:, :-1].argmax(dim=1) for s in cls_score] + rois = torch.cat([ + bbox_head.regress_by_class(rois[i], bbox_label[i], + bbox_pred[i], img_metas[i]) + for i in range(num_imgs) + ]) + + # average scores of each image by stages + cls_score = [ + sum([score[i] for score in ms_scores]) / float(len(ms_scores)) + for i in range(num_imgs) + ] + + # apply bbox post-processing to each image individually + det_bboxes = [] + det_labels = [] + for i in range(num_imgs): + det_bbox, det_label = self.bbox_head[-1].get_bboxes( + rois[i], + cls_score[i], + bbox_pred[i], + img_shapes[i], + scale_factors[i], + rescale=rescale, + cfg=rcnn_test_cfg) + det_bboxes.append(det_bbox) + det_labels.append(det_label) + bbox_result = [ + bbox2result(det_bboxes[i], det_labels[i], + self.bbox_head[-1].num_classes) + for i in range(num_imgs) + ] + ms_bbox_result['ensemble'] = bbox_result + + if self.with_mask: + if all(det_bbox.shape[0] == 0 for det_bbox in det_bboxes): + mask_classes = self.mask_head[-1].num_classes + segm_results = [[[] for _ in range(mask_classes)] + for _ in range(num_imgs)] + else: + if rescale and not isinstance(scale_factors[0], float): + scale_factors = [ + torch.from_numpy(scale_factor).to(det_bboxes[0].device) + for scale_factor in scale_factors + ] + _bboxes = [ + det_bboxes[i][:, :4] * + scale_factors[i] if rescale else det_bboxes[i] + for i in range(num_imgs) + ] + mask_rois = bbox2roi(_bboxes) + aug_masks = [] + mask_roi_extractor = self.mask_roi_extractor[-1] + mask_feats = mask_roi_extractor( + x[:len(mask_roi_extractor.featmap_strides)], mask_rois) + if self.with_semantic and 'mask' in self.semantic_fusion: + mask_semantic_feat = self.semantic_roi_extractor( + [semantic_feat], mask_rois) + mask_feats += mask_semantic_feat + last_feat = None + + num_bbox_per_img = tuple(len(_bbox) for _bbox in _bboxes) + for i in range(self.num_stages): + mask_head = self.mask_head[i] + if self.mask_info_flow: + mask_pred, last_feat = mask_head(mask_feats, last_feat) + else: + mask_pred = mask_head(mask_feats) + + # split batch mask prediction back to each image + mask_pred = mask_pred.split(num_bbox_per_img, 0) + aug_masks.append( + [mask.sigmoid().cpu().numpy() for mask in mask_pred]) + + # apply mask post-processing to each image individually + segm_results = [] + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + segm_results.append( + [[] + for _ in range(self.mask_head[-1].num_classes)]) + else: + aug_mask = [mask[i] for mask in aug_masks] + merged_mask = merge_aug_masks( + aug_mask, [[img_metas[i]]] * self.num_stages, + rcnn_test_cfg) + segm_result = self.mask_head[-1].get_seg_masks( + merged_mask, _bboxes[i], det_labels[i], + rcnn_test_cfg, ori_shapes[i], scale_factors[i], + rescale) + segm_results.append(segm_result) + ms_segm_result['ensemble'] = segm_results + + if self.with_mask: + results = list( + zip(ms_bbox_result['ensemble'], ms_segm_result['ensemble'])) + else: + results = ms_bbox_result['ensemble'] + + return results + + def aug_test(self, img_feats, proposal_list, img_metas, rescale=False): + """Test with augmentations. + + If rescale is False, then returned bboxes and masks will fit the scale + of imgs[0]. + """ + if self.with_semantic: + semantic_feats = [ + self.semantic_head(feat)[1] for feat in img_feats + ] + else: + semantic_feats = [None] * len(img_metas) + + rcnn_test_cfg = self.test_cfg + aug_bboxes = [] + aug_scores = [] + for x, img_meta, semantic in zip(img_feats, img_metas, semantic_feats): + # only one image in the batch + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + + proposals = bbox_mapping(proposal_list[0][:, :4], img_shape, + scale_factor, flip, flip_direction) + # "ms" in variable names means multi-stage + ms_scores = [] + + rois = bbox2roi([proposals]) + for i in range(self.num_stages): + bbox_head = self.bbox_head[i] + bbox_results = self._bbox_forward( + i, x, rois, semantic_feat=semantic) + ms_scores.append(bbox_results['cls_score']) + + if i < self.num_stages - 1: + bbox_label = bbox_results['cls_score'].argmax(dim=1) + rois = bbox_head.regress_by_class( + rois, bbox_label, bbox_results['bbox_pred'], + img_meta[0]) + + cls_score = sum(ms_scores) / float(len(ms_scores)) + bboxes, scores = self.bbox_head[-1].get_bboxes( + rois, + cls_score, + bbox_results['bbox_pred'], + img_shape, + scale_factor, + rescale=False, + cfg=None) + aug_bboxes.append(bboxes) + aug_scores.append(scores) + + # after merging, bboxes will be rescaled to the original image size + merged_bboxes, merged_scores = merge_aug_bboxes( + aug_bboxes, aug_scores, img_metas, rcnn_test_cfg) + det_bboxes, det_labels = multiclass_nms(merged_bboxes, merged_scores, + rcnn_test_cfg.score_thr, + rcnn_test_cfg.nms, + rcnn_test_cfg.max_per_img) + + bbox_result = bbox2result(det_bboxes, det_labels, + self.bbox_head[-1].num_classes) + + if self.with_mask: + if det_bboxes.shape[0] == 0: + segm_result = [[[] + for _ in range(self.mask_head[-1].num_classes)] + ] + else: + aug_masks = [] + aug_img_metas = [] + for x, img_meta, semantic in zip(img_feats, img_metas, + semantic_feats): + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + _bboxes = bbox_mapping(det_bboxes[:, :4], img_shape, + scale_factor, flip, flip_direction) + mask_rois = bbox2roi([_bboxes]) + mask_feats = self.mask_roi_extractor[-1]( + x[:len(self.mask_roi_extractor[-1].featmap_strides)], + mask_rois) + if self.with_semantic: + semantic_feat = semantic + mask_semantic_feat = self.semantic_roi_extractor( + [semantic_feat], mask_rois) + if mask_semantic_feat.shape[-2:] != mask_feats.shape[ + -2:]: + mask_semantic_feat = F.adaptive_avg_pool2d( + mask_semantic_feat, mask_feats.shape[-2:]) + mask_feats += mask_semantic_feat + last_feat = None + for i in range(self.num_stages): + mask_head = self.mask_head[i] + if self.mask_info_flow: + mask_pred, last_feat = mask_head( + mask_feats, last_feat) + else: + mask_pred = mask_head(mask_feats) + aug_masks.append(mask_pred.sigmoid().cpu().numpy()) + aug_img_metas.append(img_meta) + merged_masks = merge_aug_masks(aug_masks, aug_img_metas, + self.test_cfg) + + ori_shape = img_metas[0][0]['ori_shape'] + segm_result = self.mask_head[-1].get_seg_masks( + merged_masks, + det_bboxes, + det_labels, + rcnn_test_cfg, + ori_shape, + scale_factor=1.0, + rescale=False) + return [(bbox_result, segm_result)] + else: + return [bbox_result] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/__init__.py new file mode 100644 index 00000000..26c3e95a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/__init__.py @@ -0,0 +1,12 @@ +from .coarse_mask_head import CoarseMaskHead +from .fcn_mask_head import FCNMaskHead +from .fused_semantic_head import FusedSemanticHead +from .grid_head import GridHead +from .htc_mask_head import HTCMaskHead +from .mask_point_head import MaskPointHead +from .maskiou_head import MaskIoUHead + +__all__ = [ + 'FCNMaskHead', 'HTCMaskHead', 'FusedSemanticHead', 'GridHead', + 'MaskIoUHead', 'CoarseMaskHead', 'MaskPointHead' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/coarse_mask_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/coarse_mask_head.py new file mode 100644 index 00000000..d665dfff --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/coarse_mask_head.py @@ -0,0 +1,91 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule, Linear, constant_init, xavier_init +from mmcv.runner import auto_fp16 + +from mmdet.models.builder import HEADS +from .fcn_mask_head import FCNMaskHead + + +@HEADS.register_module() +class CoarseMaskHead(FCNMaskHead): + """Coarse mask head used in PointRend. + + Compared with standard ``FCNMaskHead``, ``CoarseMaskHead`` will downsample + the input feature map instead of upsample it. + + Args: + num_convs (int): Number of conv layers in the head. Default: 0. + num_fcs (int): Number of fc layers in the head. Default: 2. + fc_out_channels (int): Number of output channels of fc layer. + Default: 1024. + downsample_factor (int): The factor that feature map is downsampled by. + Default: 2. + """ + + def __init__(self, + num_convs=0, + num_fcs=2, + fc_out_channels=1024, + downsample_factor=2, + *arg, + **kwarg): + super(CoarseMaskHead, self).__init__( + *arg, num_convs=num_convs, upsample_cfg=dict(type=None), **kwarg) + self.num_fcs = num_fcs + assert self.num_fcs > 0 + self.fc_out_channels = fc_out_channels + self.downsample_factor = downsample_factor + assert self.downsample_factor >= 1 + # remove conv_logit + delattr(self, 'conv_logits') + + if downsample_factor > 1: + downsample_in_channels = ( + self.conv_out_channels + if self.num_convs > 0 else self.in_channels) + self.downsample_conv = ConvModule( + downsample_in_channels, + self.conv_out_channels, + kernel_size=downsample_factor, + stride=downsample_factor, + padding=0, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg) + else: + self.downsample_conv = None + + self.output_size = (self.roi_feat_size[0] // downsample_factor, + self.roi_feat_size[1] // downsample_factor) + self.output_area = self.output_size[0] * self.output_size[1] + + last_layer_dim = self.conv_out_channels * self.output_area + + self.fcs = nn.ModuleList() + for i in range(num_fcs): + fc_in_channels = ( + last_layer_dim if i == 0 else self.fc_out_channels) + self.fcs.append(Linear(fc_in_channels, self.fc_out_channels)) + last_layer_dim = self.fc_out_channels + output_channels = self.num_classes * self.output_area + self.fc_logits = Linear(last_layer_dim, output_channels) + + def init_weights(self): + for m in self.fcs.modules(): + if isinstance(m, nn.Linear): + xavier_init(m) + constant_init(self.fc_logits, 0.001) + + @auto_fp16() + def forward(self, x): + for conv in self.convs: + x = conv(x) + + if self.downsample_conv is not None: + x = self.downsample_conv(x) + + x = x.flatten(1) + for fc in self.fcs: + x = self.relu(fc(x)) + mask_pred = self.fc_logits(x).view( + x.size(0), self.num_classes, *self.output_size) + return mask_pred diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py new file mode 100644 index 00000000..0cba3cda --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fcn_mask_head.py @@ -0,0 +1,328 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import Conv2d, ConvModule, build_upsample_layer +from mmcv.ops.carafe import CARAFEPack +from mmcv.runner import auto_fp16, force_fp32 +from torch.nn.modules.utils import _pair + +from mmdet.core import mask_target +from mmdet.models.builder import HEADS, build_loss + +BYTES_PER_FLOAT = 4 +# TODO: This memory limit may be too much or too little. It would be better to +# determine it based on available resources. +GPU_MEM_LIMIT = 1024**3 # 1 GB memory limit + + +@HEADS.register_module() +class FCNMaskHead(nn.Module): + + def __init__(self, + num_convs=4, + roi_feat_size=14, + in_channels=256, + conv_kernel_size=3, + conv_out_channels=256, + num_classes=80, + class_agnostic=False, + upsample_cfg=dict(type='deconv', scale_factor=2), + conv_cfg=None, + norm_cfg=None, + loss_mask=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)): + super(FCNMaskHead, self).__init__() + self.upsample_cfg = upsample_cfg.copy() + if self.upsample_cfg['type'] not in [ + None, 'deconv', 'nearest', 'bilinear', 'carafe' + ]: + raise ValueError( + f'Invalid upsample method {self.upsample_cfg["type"]}, ' + 'accepted methods are "deconv", "nearest", "bilinear", ' + '"carafe"') + self.num_convs = num_convs + # WARN: roi_feat_size is reserved and not used + self.roi_feat_size = _pair(roi_feat_size) + self.in_channels = in_channels + self.conv_kernel_size = conv_kernel_size + self.conv_out_channels = conv_out_channels + self.upsample_method = self.upsample_cfg.get('type') + self.scale_factor = self.upsample_cfg.pop('scale_factor', None) + self.num_classes = num_classes + self.class_agnostic = class_agnostic + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.fp16_enabled = False + self.loss_mask = build_loss(loss_mask) + + self.convs = nn.ModuleList() + for i in range(self.num_convs): + in_channels = ( + self.in_channels if i == 0 else self.conv_out_channels) + padding = (self.conv_kernel_size - 1) // 2 + self.convs.append( + ConvModule( + in_channels, + self.conv_out_channels, + self.conv_kernel_size, + padding=padding, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg)) + upsample_in_channels = ( + self.conv_out_channels if self.num_convs > 0 else in_channels) + upsample_cfg_ = self.upsample_cfg.copy() + if self.upsample_method is None: + self.upsample = None + elif self.upsample_method == 'deconv': + upsample_cfg_.update( + in_channels=upsample_in_channels, + out_channels=self.conv_out_channels, + kernel_size=self.scale_factor, + stride=self.scale_factor) + self.upsample = build_upsample_layer(upsample_cfg_) + elif self.upsample_method == 'carafe': + upsample_cfg_.update( + channels=upsample_in_channels, scale_factor=self.scale_factor) + self.upsample = build_upsample_layer(upsample_cfg_) + else: + # suppress warnings + align_corners = (None + if self.upsample_method == 'nearest' else False) + upsample_cfg_.update( + scale_factor=self.scale_factor, + mode=self.upsample_method, + align_corners=align_corners) + self.upsample = build_upsample_layer(upsample_cfg_) + + out_channels = 1 if self.class_agnostic else self.num_classes + logits_in_channel = ( + self.conv_out_channels + if self.upsample_method == 'deconv' else upsample_in_channels) + self.conv_logits = Conv2d(logits_in_channel, out_channels, 1) + self.relu = nn.ReLU(inplace=True) + self.debug_imgs = None + + def init_weights(self): + for m in [self.upsample, self.conv_logits]: + if m is None: + continue + elif isinstance(m, CARAFEPack): + m.init_weights() + else: + nn.init.kaiming_normal_( + m.weight, mode='fan_out', nonlinearity='relu') + nn.init.constant_(m.bias, 0) + + @auto_fp16() + def forward(self, x): + for conv in self.convs: + x = conv(x) + if self.upsample is not None: + x = self.upsample(x) + if self.upsample_method == 'deconv': + x = self.relu(x) + mask_pred = self.conv_logits(x) + return mask_pred + + def get_targets(self, sampling_results, gt_masks, rcnn_train_cfg): + pos_proposals = [res.pos_bboxes for res in sampling_results] + pos_assigned_gt_inds = [ + res.pos_assigned_gt_inds for res in sampling_results + ] + mask_targets = mask_target(pos_proposals, pos_assigned_gt_inds, + gt_masks, rcnn_train_cfg) + return mask_targets + + @force_fp32(apply_to=('mask_pred', )) + def loss(self, mask_pred, mask_targets, labels): + loss = dict() + if mask_pred.size(0) == 0: + loss_mask = mask_pred.sum() + else: + if self.class_agnostic: + loss_mask = self.loss_mask(mask_pred, mask_targets, + torch.zeros_like(labels)) + else: + loss_mask = self.loss_mask(mask_pred, mask_targets, labels) + loss['loss_mask'] = loss_mask + return loss + + def get_seg_masks(self, mask_pred, det_bboxes, det_labels, rcnn_test_cfg, + ori_shape, scale_factor, rescale): + """Get segmentation masks from mask_pred and bboxes. + + Args: + mask_pred (Tensor or ndarray): shape (n, #class, h, w). + For single-scale testing, mask_pred is the direct output of + model, whose type is Tensor, while for multi-scale testing, + it will be converted to numpy array outside of this method. + det_bboxes (Tensor): shape (n, 4/5) + det_labels (Tensor): shape (n, ) + img_shape (Tensor): shape (3, ) + rcnn_test_cfg (dict): rcnn testing config + ori_shape: original image size + + Returns: + list[list]: encoded masks + """ + if isinstance(mask_pred, torch.Tensor): + mask_pred = mask_pred.sigmoid() + else: + mask_pred = det_bboxes.new_tensor(mask_pred) + + device = mask_pred.device + cls_segms = [[] for _ in range(self.num_classes) + ] # BG is not included in num_classes + bboxes = det_bboxes[:, :4] + labels = det_labels + + if rescale: + img_h, img_w = ori_shape[:2] + else: + if isinstance(scale_factor, float): + img_h = np.round(ori_shape[0] * scale_factor).astype(np.int32) + img_w = np.round(ori_shape[1] * scale_factor).astype(np.int32) + else: + w_scale, h_scale = scale_factor[0], scale_factor[1] + img_h = np.round(ori_shape[0] * h_scale.item()).astype( + np.int32) + img_w = np.round(ori_shape[1] * w_scale.item()).astype( + np.int32) + scale_factor = 1.0 + + if not isinstance(scale_factor, (float, torch.Tensor)): + scale_factor = bboxes.new_tensor(scale_factor) + bboxes = bboxes / scale_factor + + if torch.onnx.is_in_onnx_export(): + # TODO: Remove after F.grid_sample is supported. + from torchvision.models.detection.roi_heads \ + import paste_masks_in_image + masks = paste_masks_in_image(mask_pred, bboxes, ori_shape[:2]) + thr = rcnn_test_cfg.get('mask_thr_binary', 0) + if thr > 0: + masks = masks >= thr + return masks + + N = len(mask_pred) + # The actual implementation split the input into chunks, + # and paste them chunk by chunk. + if device.type == 'cpu': + # CPU is most efficient when they are pasted one by one with + # skip_empty=True, so that it performs minimal number of + # operations. + num_chunks = N + else: + # GPU benefits from parallelism for larger chunks, + # but may have memory issue + num_chunks = int( + np.ceil(N * img_h * img_w * BYTES_PER_FLOAT / GPU_MEM_LIMIT)) + assert (num_chunks <= + N), 'Default GPU_MEM_LIMIT is too small; try increasing it' + chunks = torch.chunk(torch.arange(N, device=device), num_chunks) + + threshold = rcnn_test_cfg.mask_thr_binary + im_mask = torch.zeros( + N, + img_h, + img_w, + device=device, + dtype=torch.bool if threshold >= 0 else torch.uint8) + + if not self.class_agnostic: + mask_pred = mask_pred[range(N), labels][:, None] + + for inds in chunks: + masks_chunk, spatial_inds = _do_paste_mask( + mask_pred[inds], + bboxes[inds], + img_h, + img_w, + skip_empty=device.type == 'cpu') + + if threshold >= 0: + masks_chunk = (masks_chunk >= threshold).to(dtype=torch.bool) + else: + # for visualization and debugging + masks_chunk = (masks_chunk * 255).to(dtype=torch.uint8) + + im_mask[(inds, ) + spatial_inds] = masks_chunk + + for i in range(N): + cls_segms[labels[i]].append(im_mask[i].detach().cpu().numpy()) + return cls_segms + + +def _do_paste_mask(masks, boxes, img_h, img_w, skip_empty=True): + """Paste instance masks acoording to boxes. + + This implementation is modified from + https://github.com/facebookresearch/detectron2/ + + Args: + masks (Tensor): N, 1, H, W + boxes (Tensor): N, 4 + img_h (int): Height of the image to be pasted. + img_w (int): Width of the image to be pasted. + skip_empty (bool): Only paste masks within the region that + tightly bound all boxes, and returns the results this region only. + An important optimization for CPU. + + Returns: + tuple: (Tensor, tuple). The first item is mask tensor, the second one + is the slice object. + If skip_empty == False, the whole image will be pasted. It will + return a mask of shape (N, img_h, img_w) and an empty tuple. + If skip_empty == True, only area around the mask will be pasted. + A mask of shape (N, h', w') and its start and end coordinates + in the original image will be returned. + """ + # On GPU, paste all masks together (up to chunk size) + # by using the entire image to sample the masks + # Compared to pasting them one by one, + # this has more operations but is faster on COCO-scale dataset. + device = masks.device + if skip_empty: + x0_int, y0_int = torch.clamp( + boxes.min(dim=0).values.floor()[:2] - 1, + min=0).to(dtype=torch.int32) + x1_int = torch.clamp( + boxes[:, 2].max().ceil() + 1, max=img_w).to(dtype=torch.int32) + y1_int = torch.clamp( + boxes[:, 3].max().ceil() + 1, max=img_h).to(dtype=torch.int32) + else: + x0_int, y0_int = 0, 0 + x1_int, y1_int = img_w, img_h + x0, y0, x1, y1 = torch.split(boxes, 1, dim=1) # each is Nx1 + + N = masks.shape[0] + + img_y = torch.arange( + y0_int, y1_int, device=device, dtype=torch.float32) + 0.5 + img_x = torch.arange( + x0_int, x1_int, device=device, dtype=torch.float32) + 0.5 + img_y = (img_y - y0) / (y1 - y0) * 2 - 1 + img_x = (img_x - x0) / (x1 - x0) * 2 - 1 + # img_x, img_y have shapes (N, w), (N, h) + if torch.isinf(img_x).any(): + inds = torch.where(torch.isinf(img_x)) + img_x[inds] = 0 + if torch.isinf(img_y).any(): + inds = torch.where(torch.isinf(img_y)) + img_y[inds] = 0 + + gx = img_x[:, None, :].expand(N, img_y.size(1), img_x.size(1)) + gy = img_y[:, :, None].expand(N, img_y.size(1), img_x.size(1)) + grid = torch.stack([gx, gy], dim=3) + + if torch.onnx.is_in_onnx_export(): + raise RuntimeError( + 'Exporting F.grid_sample from Pytorch to ONNX is not supported.') + img_masks = F.grid_sample( + masks.to(dtype=torch.float32), grid, align_corners=False) + + if skip_empty: + return img_masks[:, 0], (slice(y0_int, y1_int), slice(x0_int, x1_int)) + else: + return img_masks[:, 0], () diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fused_semantic_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fused_semantic_head.py new file mode 100644 index 00000000..2aa6033e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/fused_semantic_head.py @@ -0,0 +1,107 @@ +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, kaiming_init +from mmcv.runner import auto_fp16, force_fp32 + +from mmdet.models.builder import HEADS + + +@HEADS.register_module() +class FusedSemanticHead(nn.Module): + r"""Multi-level fused semantic segmentation head. + + .. code-block:: none + + in_1 -> 1x1 conv --- + | + in_2 -> 1x1 conv -- | + || + in_3 -> 1x1 conv - || + ||| /-> 1x1 conv (mask prediction) + in_4 -> 1x1 conv -----> 3x3 convs (*4) + | \-> 1x1 conv (feature) + in_5 -> 1x1 conv --- + """ # noqa: W605 + + def __init__(self, + num_ins, + fusion_level, + num_convs=4, + in_channels=256, + conv_out_channels=256, + num_classes=183, + ignore_label=255, + loss_weight=0.2, + conv_cfg=None, + norm_cfg=None): + super(FusedSemanticHead, self).__init__() + self.num_ins = num_ins + self.fusion_level = fusion_level + self.num_convs = num_convs + self.in_channels = in_channels + self.conv_out_channels = conv_out_channels + self.num_classes = num_classes + self.ignore_label = ignore_label + self.loss_weight = loss_weight + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.fp16_enabled = False + + self.lateral_convs = nn.ModuleList() + for i in range(self.num_ins): + self.lateral_convs.append( + ConvModule( + self.in_channels, + self.in_channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + inplace=False)) + + self.convs = nn.ModuleList() + for i in range(self.num_convs): + in_channels = self.in_channels if i == 0 else conv_out_channels + self.convs.append( + ConvModule( + in_channels, + conv_out_channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg)) + self.conv_embedding = ConvModule( + conv_out_channels, + conv_out_channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg) + self.conv_logits = nn.Conv2d(conv_out_channels, self.num_classes, 1) + + self.criterion = nn.CrossEntropyLoss(ignore_index=ignore_label) + + def init_weights(self): + kaiming_init(self.conv_logits) + + @auto_fp16() + def forward(self, feats): + x = self.lateral_convs[self.fusion_level](feats[self.fusion_level]) + fused_size = tuple(x.shape[-2:]) + for i, feat in enumerate(feats): + if i != self.fusion_level: + feat = F.interpolate( + feat, size=fused_size, mode='bilinear', align_corners=True) + x += self.lateral_convs[i](feat) + + for i in range(self.num_convs): + x = self.convs[i](x) + + mask_pred = self.conv_logits(x) + x = self.conv_embedding(x) + return mask_pred, x + + @force_fp32(apply_to=('mask_pred', )) + def loss(self, mask_pred, labels): + labels = labels.squeeze(1).long() + loss_semantic_seg = self.criterion(mask_pred, labels) + loss_semantic_seg *= self.loss_weight + return loss_semantic_seg diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/grid_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/grid_head.py new file mode 100644 index 00000000..83058cbd --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/grid_head.py @@ -0,0 +1,359 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, kaiming_init, normal_init + +from mmdet.models.builder import HEADS, build_loss + + +@HEADS.register_module() +class GridHead(nn.Module): + + def __init__(self, + grid_points=9, + num_convs=8, + roi_feat_size=14, + in_channels=256, + conv_kernel_size=3, + point_feat_channels=64, + deconv_kernel_size=4, + class_agnostic=False, + loss_grid=dict( + type='CrossEntropyLoss', use_sigmoid=True, + loss_weight=15), + conv_cfg=None, + norm_cfg=dict(type='GN', num_groups=36)): + super(GridHead, self).__init__() + self.grid_points = grid_points + self.num_convs = num_convs + self.roi_feat_size = roi_feat_size + self.in_channels = in_channels + self.conv_kernel_size = conv_kernel_size + self.point_feat_channels = point_feat_channels + self.conv_out_channels = self.point_feat_channels * self.grid_points + self.class_agnostic = class_agnostic + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + if isinstance(norm_cfg, dict) and norm_cfg['type'] == 'GN': + assert self.conv_out_channels % norm_cfg['num_groups'] == 0 + + assert self.grid_points >= 4 + self.grid_size = int(np.sqrt(self.grid_points)) + if self.grid_size * self.grid_size != self.grid_points: + raise ValueError('grid_points must be a square number') + + # the predicted heatmap is half of whole_map_size + if not isinstance(self.roi_feat_size, int): + raise ValueError('Only square RoIs are supporeted in Grid R-CNN') + self.whole_map_size = self.roi_feat_size * 4 + + # compute point-wise sub-regions + self.sub_regions = self.calc_sub_regions() + + self.convs = [] + for i in range(self.num_convs): + in_channels = ( + self.in_channels if i == 0 else self.conv_out_channels) + stride = 2 if i == 0 else 1 + padding = (self.conv_kernel_size - 1) // 2 + self.convs.append( + ConvModule( + in_channels, + self.conv_out_channels, + self.conv_kernel_size, + stride=stride, + padding=padding, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + bias=True)) + self.convs = nn.Sequential(*self.convs) + + self.deconv1 = nn.ConvTranspose2d( + self.conv_out_channels, + self.conv_out_channels, + kernel_size=deconv_kernel_size, + stride=2, + padding=(deconv_kernel_size - 2) // 2, + groups=grid_points) + self.norm1 = nn.GroupNorm(grid_points, self.conv_out_channels) + self.deconv2 = nn.ConvTranspose2d( + self.conv_out_channels, + grid_points, + kernel_size=deconv_kernel_size, + stride=2, + padding=(deconv_kernel_size - 2) // 2, + groups=grid_points) + + # find the 4-neighbor of each grid point + self.neighbor_points = [] + grid_size = self.grid_size + for i in range(grid_size): # i-th column + for j in range(grid_size): # j-th row + neighbors = [] + if i > 0: # left: (i - 1, j) + neighbors.append((i - 1) * grid_size + j) + if j > 0: # up: (i, j - 1) + neighbors.append(i * grid_size + j - 1) + if j < grid_size - 1: # down: (i, j + 1) + neighbors.append(i * grid_size + j + 1) + if i < grid_size - 1: # right: (i + 1, j) + neighbors.append((i + 1) * grid_size + j) + self.neighbor_points.append(tuple(neighbors)) + # total edges in the grid + self.num_edges = sum([len(p) for p in self.neighbor_points]) + + self.forder_trans = nn.ModuleList() # first-order feature transition + self.sorder_trans = nn.ModuleList() # second-order feature transition + for neighbors in self.neighbor_points: + fo_trans = nn.ModuleList() + so_trans = nn.ModuleList() + for _ in range(len(neighbors)): + # each transition module consists of a 5x5 depth-wise conv and + # 1x1 conv. + fo_trans.append( + nn.Sequential( + nn.Conv2d( + self.point_feat_channels, + self.point_feat_channels, + 5, + stride=1, + padding=2, + groups=self.point_feat_channels), + nn.Conv2d(self.point_feat_channels, + self.point_feat_channels, 1))) + so_trans.append( + nn.Sequential( + nn.Conv2d( + self.point_feat_channels, + self.point_feat_channels, + 5, + 1, + 2, + groups=self.point_feat_channels), + nn.Conv2d(self.point_feat_channels, + self.point_feat_channels, 1))) + self.forder_trans.append(fo_trans) + self.sorder_trans.append(so_trans) + + self.loss_grid = build_loss(loss_grid) + + def init_weights(self): + for m in self.modules(): + if isinstance(m, nn.Conv2d) or isinstance(m, nn.Linear): + # TODO: compare mode = "fan_in" or "fan_out" + kaiming_init(m) + for m in self.modules(): + if isinstance(m, nn.ConvTranspose2d): + normal_init(m, std=0.001) + nn.init.constant_(self.deconv2.bias, -np.log(0.99 / 0.01)) + + def forward(self, x): + assert x.shape[-1] == x.shape[-2] == self.roi_feat_size + # RoI feature transformation, downsample 2x + x = self.convs(x) + + c = self.point_feat_channels + # first-order fusion + x_fo = [None for _ in range(self.grid_points)] + for i, points in enumerate(self.neighbor_points): + x_fo[i] = x[:, i * c:(i + 1) * c] + for j, point_idx in enumerate(points): + x_fo[i] = x_fo[i] + self.forder_trans[i][j]( + x[:, point_idx * c:(point_idx + 1) * c]) + + # second-order fusion + x_so = [None for _ in range(self.grid_points)] + for i, points in enumerate(self.neighbor_points): + x_so[i] = x[:, i * c:(i + 1) * c] + for j, point_idx in enumerate(points): + x_so[i] = x_so[i] + self.sorder_trans[i][j](x_fo[point_idx]) + + # predicted heatmap with fused features + x2 = torch.cat(x_so, dim=1) + x2 = self.deconv1(x2) + x2 = F.relu(self.norm1(x2), inplace=True) + heatmap = self.deconv2(x2) + + # predicted heatmap with original features (applicable during training) + if self.training: + x1 = x + x1 = self.deconv1(x1) + x1 = F.relu(self.norm1(x1), inplace=True) + heatmap_unfused = self.deconv2(x1) + else: + heatmap_unfused = heatmap + + return dict(fused=heatmap, unfused=heatmap_unfused) + + def calc_sub_regions(self): + """Compute point specific representation regions. + + See Grid R-CNN Plus (https://arxiv.org/abs/1906.05688) for details. + """ + # to make it consistent with the original implementation, half_size + # is computed as 2 * quarter_size, which is smaller + half_size = self.whole_map_size // 4 * 2 + sub_regions = [] + for i in range(self.grid_points): + x_idx = i // self.grid_size + y_idx = i % self.grid_size + if x_idx == 0: + sub_x1 = 0 + elif x_idx == self.grid_size - 1: + sub_x1 = half_size + else: + ratio = x_idx / (self.grid_size - 1) - 0.25 + sub_x1 = max(int(ratio * self.whole_map_size), 0) + + if y_idx == 0: + sub_y1 = 0 + elif y_idx == self.grid_size - 1: + sub_y1 = half_size + else: + ratio = y_idx / (self.grid_size - 1) - 0.25 + sub_y1 = max(int(ratio * self.whole_map_size), 0) + sub_regions.append( + (sub_x1, sub_y1, sub_x1 + half_size, sub_y1 + half_size)) + return sub_regions + + def get_targets(self, sampling_results, rcnn_train_cfg): + # mix all samples (across images) together. + pos_bboxes = torch.cat([res.pos_bboxes for res in sampling_results], + dim=0).cpu() + pos_gt_bboxes = torch.cat( + [res.pos_gt_bboxes for res in sampling_results], dim=0).cpu() + assert pos_bboxes.shape == pos_gt_bboxes.shape + + # expand pos_bboxes to 2x of original size + x1 = pos_bboxes[:, 0] - (pos_bboxes[:, 2] - pos_bboxes[:, 0]) / 2 + y1 = pos_bboxes[:, 1] - (pos_bboxes[:, 3] - pos_bboxes[:, 1]) / 2 + x2 = pos_bboxes[:, 2] + (pos_bboxes[:, 2] - pos_bboxes[:, 0]) / 2 + y2 = pos_bboxes[:, 3] + (pos_bboxes[:, 3] - pos_bboxes[:, 1]) / 2 + pos_bboxes = torch.stack([x1, y1, x2, y2], dim=-1) + pos_bbox_ws = (pos_bboxes[:, 2] - pos_bboxes[:, 0]).unsqueeze(-1) + pos_bbox_hs = (pos_bboxes[:, 3] - pos_bboxes[:, 1]).unsqueeze(-1) + + num_rois = pos_bboxes.shape[0] + map_size = self.whole_map_size + # this is not the final target shape + targets = torch.zeros((num_rois, self.grid_points, map_size, map_size), + dtype=torch.float) + + # pre-compute interpolation factors for all grid points. + # the first item is the factor of x-dim, and the second is y-dim. + # for a 9-point grid, factors are like (1, 0), (0.5, 0.5), (0, 1) + factors = [] + for j in range(self.grid_points): + x_idx = j // self.grid_size + y_idx = j % self.grid_size + factors.append((1 - x_idx / (self.grid_size - 1), + 1 - y_idx / (self.grid_size - 1))) + + radius = rcnn_train_cfg.pos_radius + radius2 = radius**2 + for i in range(num_rois): + # ignore small bboxes + if (pos_bbox_ws[i] <= self.grid_size + or pos_bbox_hs[i] <= self.grid_size): + continue + # for each grid point, mark a small circle as positive + for j in range(self.grid_points): + factor_x, factor_y = factors[j] + gridpoint_x = factor_x * pos_gt_bboxes[i, 0] + ( + 1 - factor_x) * pos_gt_bboxes[i, 2] + gridpoint_y = factor_y * pos_gt_bboxes[i, 1] + ( + 1 - factor_y) * pos_gt_bboxes[i, 3] + + cx = int((gridpoint_x - pos_bboxes[i, 0]) / pos_bbox_ws[i] * + map_size) + cy = int((gridpoint_y - pos_bboxes[i, 1]) / pos_bbox_hs[i] * + map_size) + + for x in range(cx - radius, cx + radius + 1): + for y in range(cy - radius, cy + radius + 1): + if x >= 0 and x < map_size and y >= 0 and y < map_size: + if (x - cx)**2 + (y - cy)**2 <= radius2: + targets[i, j, y, x] = 1 + # reduce the target heatmap size by a half + # proposed in Grid R-CNN Plus (https://arxiv.org/abs/1906.05688). + sub_targets = [] + for i in range(self.grid_points): + sub_x1, sub_y1, sub_x2, sub_y2 = self.sub_regions[i] + sub_targets.append(targets[:, [i], sub_y1:sub_y2, sub_x1:sub_x2]) + sub_targets = torch.cat(sub_targets, dim=1) + sub_targets = sub_targets.to(sampling_results[0].pos_bboxes.device) + return sub_targets + + def loss(self, grid_pred, grid_targets): + loss_fused = self.loss_grid(grid_pred['fused'], grid_targets) + loss_unfused = self.loss_grid(grid_pred['unfused'], grid_targets) + loss_grid = loss_fused + loss_unfused + return dict(loss_grid=loss_grid) + + def get_bboxes(self, det_bboxes, grid_pred, img_metas): + # TODO: refactoring + assert det_bboxes.shape[0] == grid_pred.shape[0] + det_bboxes = det_bboxes.cpu() + cls_scores = det_bboxes[:, [4]] + det_bboxes = det_bboxes[:, :4] + grid_pred = grid_pred.sigmoid().cpu() + + R, c, h, w = grid_pred.shape + half_size = self.whole_map_size // 4 * 2 + assert h == w == half_size + assert c == self.grid_points + + # find the point with max scores in the half-sized heatmap + grid_pred = grid_pred.view(R * c, h * w) + pred_scores, pred_position = grid_pred.max(dim=1) + xs = pred_position % w + ys = pred_position // w + + # get the position in the whole heatmap instead of half-sized heatmap + for i in range(self.grid_points): + xs[i::self.grid_points] += self.sub_regions[i][0] + ys[i::self.grid_points] += self.sub_regions[i][1] + + # reshape to (num_rois, grid_points) + pred_scores, xs, ys = tuple( + map(lambda x: x.view(R, c), [pred_scores, xs, ys])) + + # get expanded pos_bboxes + widths = (det_bboxes[:, 2] - det_bboxes[:, 0]).unsqueeze(-1) + heights = (det_bboxes[:, 3] - det_bboxes[:, 1]).unsqueeze(-1) + x1 = (det_bboxes[:, 0, None] - widths / 2) + y1 = (det_bboxes[:, 1, None] - heights / 2) + # map the grid point to the absolute coordinates + abs_xs = (xs.float() + 0.5) / w * widths + x1 + abs_ys = (ys.float() + 0.5) / h * heights + y1 + + # get the grid points indices that fall on the bbox boundaries + x1_inds = [i for i in range(self.grid_size)] + y1_inds = [i * self.grid_size for i in range(self.grid_size)] + x2_inds = [ + self.grid_points - self.grid_size + i + for i in range(self.grid_size) + ] + y2_inds = [(i + 1) * self.grid_size - 1 for i in range(self.grid_size)] + + # voting of all grid points on some boundary + bboxes_x1 = (abs_xs[:, x1_inds] * pred_scores[:, x1_inds]).sum( + dim=1, keepdim=True) / ( + pred_scores[:, x1_inds].sum(dim=1, keepdim=True)) + bboxes_y1 = (abs_ys[:, y1_inds] * pred_scores[:, y1_inds]).sum( + dim=1, keepdim=True) / ( + pred_scores[:, y1_inds].sum(dim=1, keepdim=True)) + bboxes_x2 = (abs_xs[:, x2_inds] * pred_scores[:, x2_inds]).sum( + dim=1, keepdim=True) / ( + pred_scores[:, x2_inds].sum(dim=1, keepdim=True)) + bboxes_y2 = (abs_ys[:, y2_inds] * pred_scores[:, y2_inds]).sum( + dim=1, keepdim=True) / ( + pred_scores[:, y2_inds].sum(dim=1, keepdim=True)) + + bbox_res = torch.cat( + [bboxes_x1, bboxes_y1, bboxes_x2, bboxes_y2, cls_scores], dim=1) + bbox_res[:, [0, 2]].clamp_(min=0, max=img_metas[0]['img_shape'][1]) + bbox_res[:, [1, 3]].clamp_(min=0, max=img_metas[0]['img_shape'][0]) + + return bbox_res diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/htc_mask_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/htc_mask_head.py new file mode 100644 index 00000000..330b778e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/htc_mask_head.py @@ -0,0 +1,43 @@ +from mmcv.cnn import ConvModule + +from mmdet.models.builder import HEADS +from .fcn_mask_head import FCNMaskHead + + +@HEADS.register_module() +class HTCMaskHead(FCNMaskHead): + + def __init__(self, with_conv_res=True, *args, **kwargs): + super(HTCMaskHead, self).__init__(*args, **kwargs) + self.with_conv_res = with_conv_res + if self.with_conv_res: + self.conv_res = ConvModule( + self.conv_out_channels, + self.conv_out_channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg) + + def init_weights(self): + super(HTCMaskHead, self).init_weights() + if self.with_conv_res: + self.conv_res.init_weights() + + def forward(self, x, res_feat=None, return_logits=True, return_feat=True): + if res_feat is not None: + assert self.with_conv_res + res_feat = self.conv_res(res_feat) + x = x + res_feat + for conv in self.convs: + x = conv(x) + res_feat = x + outs = [] + if return_logits: + x = self.upsample(x) + if self.upsample_method == 'deconv': + x = self.relu(x) + mask_pred = self.conv_logits(x) + outs.append(mask_pred) + if return_feat: + outs.append(res_feat) + return outs if len(outs) > 1 else outs[0] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/mask_point_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/mask_point_head.py new file mode 100644 index 00000000..f38a5c9d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/mask_point_head.py @@ -0,0 +1,300 @@ +# Modified from https://github.com/facebookresearch/detectron2/tree/master/projects/PointRend/point_head/point_head.py # noqa + +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule, normal_init +from mmcv.ops import point_sample, rel_roi_point_to_rel_img_point + +from mmdet.models.builder import HEADS, build_loss + + +@HEADS.register_module() +class MaskPointHead(nn.Module): + """A mask point head use in PointRend. + + ``MaskPointHead`` use shared multi-layer perceptron (equivalent to + nn.Conv1d) to predict the logit of input points. The fine-grained feature + and coarse feature will be concatenate together for predication. + + Args: + num_fcs (int): Number of fc layers in the head. Default: 3. + in_channels (int): Number of input channels. Default: 256. + fc_channels (int): Number of fc channels. Default: 256. + num_classes (int): Number of classes for logits. Default: 80. + class_agnostic (bool): Whether use class agnostic classification. + If so, the output channels of logits will be 1. Default: False. + coarse_pred_each_layer (bool): Whether concatenate coarse feature with + the output of each fc layer. Default: True. + conv_cfg (dict | None): Dictionary to construct and config conv layer. + Default: dict(type='Conv1d')) + norm_cfg (dict | None): Dictionary to construct and config norm layer. + Default: None. + loss_point (dict): Dictionary to construct and config loss layer of + point head. Default: dict(type='CrossEntropyLoss', use_mask=True, + loss_weight=1.0). + """ + + def __init__(self, + num_classes, + num_fcs=3, + in_channels=256, + fc_channels=256, + class_agnostic=False, + coarse_pred_each_layer=True, + conv_cfg=dict(type='Conv1d'), + norm_cfg=None, + act_cfg=dict(type='ReLU'), + loss_point=dict( + type='CrossEntropyLoss', use_mask=True, loss_weight=1.0)): + super().__init__() + self.num_fcs = num_fcs + self.in_channels = in_channels + self.fc_channles = fc_channels + self.num_classes = num_classes + self.class_agnostic = class_agnostic + self.coarse_pred_each_layer = coarse_pred_each_layer + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.loss_point = build_loss(loss_point) + + fc_in_channels = in_channels + num_classes + self.fcs = nn.ModuleList() + for _ in range(num_fcs): + fc = ConvModule( + fc_in_channels, + fc_channels, + kernel_size=1, + stride=1, + padding=0, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + self.fcs.append(fc) + fc_in_channels = fc_channels + fc_in_channels += num_classes if self.coarse_pred_each_layer else 0 + + out_channels = 1 if self.class_agnostic else self.num_classes + self.fc_logits = nn.Conv1d( + fc_in_channels, out_channels, kernel_size=1, stride=1, padding=0) + + def init_weights(self): + """Initialize last classification layer of MaskPointHead, conv layers + are already initialized by ConvModule.""" + normal_init(self.fc_logits, std=0.001) + + def forward(self, fine_grained_feats, coarse_feats): + """Classify each point base on fine grained and coarse feats. + + Args: + fine_grained_feats (Tensor): Fine grained feature sampled from FPN, + shape (num_rois, in_channels, num_points). + coarse_feats (Tensor): Coarse feature sampled from CoarseMaskHead, + shape (num_rois, num_classes, num_points). + + Returns: + Tensor: Point classification results, + shape (num_rois, num_class, num_points). + """ + + x = torch.cat([fine_grained_feats, coarse_feats], dim=1) + for fc in self.fcs: + x = fc(x) + if self.coarse_pred_each_layer: + x = torch.cat((x, coarse_feats), dim=1) + return self.fc_logits(x) + + def get_targets(self, rois, rel_roi_points, sampling_results, gt_masks, + cfg): + """Get training targets of MaskPointHead for all images. + + Args: + rois (Tensor): Region of Interest, shape (num_rois, 5). + rel_roi_points: Points coordinates relative to RoI, shape + (num_rois, num_points, 2). + sampling_results (:obj:`SamplingResult`): Sampling result after + sampling and assignment. + gt_masks (Tensor) : Ground truth segmentation masks of + corresponding boxes, shape (num_rois, height, width). + cfg (dict): Training cfg. + + Returns: + Tensor: Point target, shape (num_rois, num_points). + """ + + num_imgs = len(sampling_results) + rois_list = [] + rel_roi_points_list = [] + for batch_ind in range(num_imgs): + inds = (rois[:, 0] == batch_ind) + rois_list.append(rois[inds]) + rel_roi_points_list.append(rel_roi_points[inds]) + pos_assigned_gt_inds_list = [ + res.pos_assigned_gt_inds for res in sampling_results + ] + cfg_list = [cfg for _ in range(num_imgs)] + + point_targets = map(self._get_target_single, rois_list, + rel_roi_points_list, pos_assigned_gt_inds_list, + gt_masks, cfg_list) + point_targets = list(point_targets) + + if len(point_targets) > 0: + point_targets = torch.cat(point_targets) + + return point_targets + + def _get_target_single(self, rois, rel_roi_points, pos_assigned_gt_inds, + gt_masks, cfg): + """Get training target of MaskPointHead for each image.""" + num_pos = rois.size(0) + num_points = cfg.num_points + if num_pos > 0: + gt_masks_th = ( + gt_masks.to_tensor(rois.dtype, rois.device).index_select( + 0, pos_assigned_gt_inds)) + gt_masks_th = gt_masks_th.unsqueeze(1) + rel_img_points = rel_roi_point_to_rel_img_point( + rois, rel_roi_points, gt_masks_th.shape[2:]) + point_targets = point_sample(gt_masks_th, + rel_img_points).squeeze(1) + else: + point_targets = rois.new_zeros((0, num_points)) + return point_targets + + def loss(self, point_pred, point_targets, labels): + """Calculate loss for MaskPointHead. + + Args: + point_pred (Tensor): Point predication result, shape + (num_rois, num_classes, num_points). + point_targets (Tensor): Point targets, shape (num_roi, num_points). + labels (Tensor): Class label of corresponding boxes, + shape (num_rois, ) + + Returns: + dict[str, Tensor]: a dictionary of point loss components + """ + + loss = dict() + if self.class_agnostic: + loss_point = self.loss_point(point_pred, point_targets, + torch.zeros_like(labels)) + else: + loss_point = self.loss_point(point_pred, point_targets, labels) + loss['loss_point'] = loss_point + return loss + + def _get_uncertainty(self, mask_pred, labels): + """Estimate uncertainty based on pred logits. + + We estimate uncertainty as L1 distance between 0.0 and the logits + prediction in 'mask_pred' for the foreground class in `classes`. + + Args: + mask_pred (Tensor): mask predication logits, shape (num_rois, + num_classes, mask_height, mask_width). + + labels (list[Tensor]): Either predicted or ground truth label for + each predicted mask, of length num_rois. + + Returns: + scores (Tensor): Uncertainty scores with the most uncertain + locations having the highest uncertainty score, + shape (num_rois, 1, mask_height, mask_width) + """ + if mask_pred.shape[1] == 1: + gt_class_logits = mask_pred.clone() + else: + inds = torch.arange(mask_pred.shape[0], device=mask_pred.device) + gt_class_logits = mask_pred[inds, labels].unsqueeze(1) + return -torch.abs(gt_class_logits) + + def get_roi_rel_points_train(self, mask_pred, labels, cfg): + """Get ``num_points`` most uncertain points with random points during + train. + + Sample points in [0, 1] x [0, 1] coordinate space based on their + uncertainty. The uncertainties are calculated for each point using + '_get_uncertainty()' function that takes point's logit prediction as + input. + + Args: + mask_pred (Tensor): A tensor of shape (num_rois, num_classes, + mask_height, mask_width) for class-specific or class-agnostic + prediction. + labels (list): The ground truth class for each instance. + cfg (dict): Training config of point head. + + Returns: + point_coords (Tensor): A tensor of shape (num_rois, num_points, 2) + that contains the coordinates sampled points. + """ + num_points = cfg.num_points + oversample_ratio = cfg.oversample_ratio + importance_sample_ratio = cfg.importance_sample_ratio + assert oversample_ratio >= 1 + assert 0 <= importance_sample_ratio <= 1 + batch_size = mask_pred.shape[0] + num_sampled = int(num_points * oversample_ratio) + point_coords = torch.rand( + batch_size, num_sampled, 2, device=mask_pred.device) + point_logits = point_sample(mask_pred, point_coords) + # It is crucial to calculate uncertainty based on the sampled + # prediction value for the points. Calculating uncertainties of the + # coarse predictions first and sampling them for points leads to + # incorrect results. To illustrate this: assume uncertainty func( + # logits)=-abs(logits), a sampled point between two coarse + # predictions with -1 and 1 logits has 0 logits, and therefore 0 + # uncertainty value. However, if we calculate uncertainties for the + # coarse predictions first, both will have -1 uncertainty, + # and sampled point will get -1 uncertainty. + point_uncertainties = self._get_uncertainty(point_logits, labels) + num_uncertain_points = int(importance_sample_ratio * num_points) + num_random_points = num_points - num_uncertain_points + idx = torch.topk( + point_uncertainties[:, 0, :], k=num_uncertain_points, dim=1)[1] + shift = num_sampled * torch.arange( + batch_size, dtype=torch.long, device=mask_pred.device) + idx += shift[:, None] + point_coords = point_coords.view(-1, 2)[idx.view(-1), :].view( + batch_size, num_uncertain_points, 2) + if num_random_points > 0: + rand_roi_coords = torch.rand( + batch_size, num_random_points, 2, device=mask_pred.device) + point_coords = torch.cat((point_coords, rand_roi_coords), dim=1) + return point_coords + + def get_roi_rel_points_test(self, mask_pred, pred_label, cfg): + """Get ``num_points`` most uncertain points during test. + + Args: + mask_pred (Tensor): A tensor of shape (num_rois, num_classes, + mask_height, mask_width) for class-specific or class-agnostic + prediction. + pred_label (list): The predication class for each instance. + cfg (dict): Testing config of point head. + + Returns: + point_indices (Tensor): A tensor of shape (num_rois, num_points) + that contains indices from [0, mask_height x mask_width) of the + most uncertain points. + point_coords (Tensor): A tensor of shape (num_rois, num_points, 2) + that contains [0, 1] x [0, 1] normalized coordinates of the + most uncertain points from the [mask_height, mask_width] grid . + """ + num_points = cfg.subdivision_num_points + uncertainty_map = self._get_uncertainty(mask_pred, pred_label) + num_rois, _, mask_height, mask_width = uncertainty_map.shape + h_step = 1.0 / mask_height + w_step = 1.0 / mask_width + + uncertainty_map = uncertainty_map.view(num_rois, + mask_height * mask_width) + num_points = min(mask_height * mask_width, num_points) + point_indices = uncertainty_map.topk(num_points, dim=1)[1] + point_coords = uncertainty_map.new_zeros(num_rois, num_points, 2) + point_coords[:, :, 0] = w_step / 2.0 + (point_indices % + mask_width).float() * w_step + point_coords[:, :, 1] = h_step / 2.0 + (point_indices // + mask_width).float() * h_step + return point_indices, point_coords diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/maskiou_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/maskiou_head.py new file mode 100644 index 00000000..39bcd6a7 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_heads/maskiou_head.py @@ -0,0 +1,186 @@ +import numpy as np +import torch +import torch.nn as nn +from mmcv.cnn import Conv2d, Linear, MaxPool2d, kaiming_init, normal_init +from mmcv.runner import force_fp32 +from torch.nn.modules.utils import _pair + +from mmdet.models.builder import HEADS, build_loss + + +@HEADS.register_module() +class MaskIoUHead(nn.Module): + """Mask IoU Head. + + This head predicts the IoU of predicted masks and corresponding gt masks. + """ + + def __init__(self, + num_convs=4, + num_fcs=2, + roi_feat_size=14, + in_channels=256, + conv_out_channels=256, + fc_out_channels=1024, + num_classes=80, + loss_iou=dict(type='MSELoss', loss_weight=0.5)): + super(MaskIoUHead, self).__init__() + self.in_channels = in_channels + self.conv_out_channels = conv_out_channels + self.fc_out_channels = fc_out_channels + self.num_classes = num_classes + self.fp16_enabled = False + + self.convs = nn.ModuleList() + for i in range(num_convs): + if i == 0: + # concatenation of mask feature and mask prediction + in_channels = self.in_channels + 1 + else: + in_channels = self.conv_out_channels + stride = 2 if i == num_convs - 1 else 1 + self.convs.append( + Conv2d( + in_channels, + self.conv_out_channels, + 3, + stride=stride, + padding=1)) + + roi_feat_size = _pair(roi_feat_size) + pooled_area = (roi_feat_size[0] // 2) * (roi_feat_size[1] // 2) + self.fcs = nn.ModuleList() + for i in range(num_fcs): + in_channels = ( + self.conv_out_channels * + pooled_area if i == 0 else self.fc_out_channels) + self.fcs.append(Linear(in_channels, self.fc_out_channels)) + + self.fc_mask_iou = Linear(self.fc_out_channels, self.num_classes) + self.relu = nn.ReLU() + self.max_pool = MaxPool2d(2, 2) + self.loss_iou = build_loss(loss_iou) + + def init_weights(self): + for conv in self.convs: + kaiming_init(conv) + for fc in self.fcs: + kaiming_init( + fc, + a=1, + mode='fan_in', + nonlinearity='leaky_relu', + distribution='uniform') + normal_init(self.fc_mask_iou, std=0.01) + + def forward(self, mask_feat, mask_pred): + mask_pred = mask_pred.sigmoid() + mask_pred_pooled = self.max_pool(mask_pred.unsqueeze(1)) + + x = torch.cat((mask_feat, mask_pred_pooled), 1) + + for conv in self.convs: + x = self.relu(conv(x)) + x = x.flatten(1) + for fc in self.fcs: + x = self.relu(fc(x)) + mask_iou = self.fc_mask_iou(x) + return mask_iou + + @force_fp32(apply_to=('mask_iou_pred', )) + def loss(self, mask_iou_pred, mask_iou_targets): + pos_inds = mask_iou_targets > 0 + if pos_inds.sum() > 0: + loss_mask_iou = self.loss_iou(mask_iou_pred[pos_inds], + mask_iou_targets[pos_inds]) + else: + loss_mask_iou = mask_iou_pred.sum() * 0 + return dict(loss_mask_iou=loss_mask_iou) + + @force_fp32(apply_to=('mask_pred', )) + def get_targets(self, sampling_results, gt_masks, mask_pred, mask_targets, + rcnn_train_cfg): + """Compute target of mask IoU. + + Mask IoU target is the IoU of the predicted mask (inside a bbox) and + the gt mask of corresponding gt mask (the whole instance). + The intersection area is computed inside the bbox, and the gt mask area + is computed with two steps, firstly we compute the gt area inside the + bbox, then divide it by the area ratio of gt area inside the bbox and + the gt area of the whole instance. + + Args: + sampling_results (list[:obj:`SamplingResult`]): sampling results. + gt_masks (BitmapMask | PolygonMask): Gt masks (the whole instance) + of each image, with the same shape of the input image. + mask_pred (Tensor): Predicted masks of each positive proposal, + shape (num_pos, h, w). + mask_targets (Tensor): Gt mask of each positive proposal, + binary map of the shape (num_pos, h, w). + rcnn_train_cfg (dict): Training config for R-CNN part. + + Returns: + Tensor: mask iou target (length == num positive). + """ + pos_proposals = [res.pos_bboxes for res in sampling_results] + pos_assigned_gt_inds = [ + res.pos_assigned_gt_inds for res in sampling_results + ] + + # compute the area ratio of gt areas inside the proposals and + # the whole instance + area_ratios = map(self._get_area_ratio, pos_proposals, + pos_assigned_gt_inds, gt_masks) + area_ratios = torch.cat(list(area_ratios)) + assert mask_targets.size(0) == area_ratios.size(0) + + mask_pred = (mask_pred > rcnn_train_cfg.mask_thr_binary).float() + mask_pred_areas = mask_pred.sum((-1, -2)) + + # mask_pred and mask_targets are binary maps + overlap_areas = (mask_pred * mask_targets).sum((-1, -2)) + + # compute the mask area of the whole instance + gt_full_areas = mask_targets.sum((-1, -2)) / (area_ratios + 1e-7) + + mask_iou_targets = overlap_areas / ( + mask_pred_areas + gt_full_areas - overlap_areas) + return mask_iou_targets + + def _get_area_ratio(self, pos_proposals, pos_assigned_gt_inds, gt_masks): + """Compute area ratio of the gt mask inside the proposal and the gt + mask of the corresponding instance.""" + num_pos = pos_proposals.size(0) + if num_pos > 0: + area_ratios = [] + proposals_np = pos_proposals.cpu().numpy() + pos_assigned_gt_inds = pos_assigned_gt_inds.cpu().numpy() + # compute mask areas of gt instances (batch processing for speedup) + gt_instance_mask_area = gt_masks.areas + for i in range(num_pos): + gt_mask = gt_masks[pos_assigned_gt_inds[i]] + + # crop the gt mask inside the proposal + bbox = proposals_np[i, :].astype(np.int32) + gt_mask_in_proposal = gt_mask.crop(bbox) + + ratio = gt_mask_in_proposal.areas[0] / ( + gt_instance_mask_area[pos_assigned_gt_inds[i]] + 1e-7) + area_ratios.append(ratio) + area_ratios = torch.from_numpy(np.stack(area_ratios)).float().to( + pos_proposals.device) + else: + area_ratios = pos_proposals.new_zeros((0, )) + return area_ratios + + @force_fp32(apply_to=('mask_iou_pred', )) + def get_mask_scores(self, mask_iou_pred, det_bboxes, det_labels): + """Get the mask scores. + + mask_score = bbox_score * mask_iou + """ + inds = range(det_labels.size(0)) + mask_scores = mask_iou_pred[inds, det_labels] * det_bboxes[inds, -1] + mask_scores = mask_scores.cpu().numpy() + det_labels = det_labels.cpu().numpy() + return [mask_scores[det_labels == i] for i in range(self.num_classes)] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_scoring_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_scoring_roi_head.py new file mode 100644 index 00000000..c6e55c77 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/mask_scoring_roi_head.py @@ -0,0 +1,122 @@ +import torch + +from mmdet.core import bbox2roi +from ..builder import HEADS, build_head +from .standard_roi_head import StandardRoIHead + + +@HEADS.register_module() +class MaskScoringRoIHead(StandardRoIHead): + """Mask Scoring RoIHead for Mask Scoring RCNN. + + https://arxiv.org/abs/1903.00241 + """ + + def __init__(self, mask_iou_head, **kwargs): + assert mask_iou_head is not None + super(MaskScoringRoIHead, self).__init__(**kwargs) + self.mask_iou_head = build_head(mask_iou_head) + + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + super(MaskScoringRoIHead, self).init_weights(pretrained) + self.mask_iou_head.init_weights() + + def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks, + img_metas): + """Run forward function and calculate loss for Mask head in + training.""" + pos_labels = torch.cat([res.pos_gt_labels for res in sampling_results]) + mask_results = super(MaskScoringRoIHead, + self)._mask_forward_train(x, sampling_results, + bbox_feats, gt_masks, + img_metas) + if mask_results['loss_mask'] is None: + return mask_results + + # mask iou head forward and loss + pos_mask_pred = mask_results['mask_pred'][ + range(mask_results['mask_pred'].size(0)), pos_labels] + mask_iou_pred = self.mask_iou_head(mask_results['mask_feats'], + pos_mask_pred) + pos_mask_iou_pred = mask_iou_pred[range(mask_iou_pred.size(0)), + pos_labels] + + mask_iou_targets = self.mask_iou_head.get_targets( + sampling_results, gt_masks, pos_mask_pred, + mask_results['mask_targets'], self.train_cfg) + loss_mask_iou = self.mask_iou_head.loss(pos_mask_iou_pred, + mask_iou_targets) + mask_results['loss_mask'].update(loss_mask_iou) + return mask_results + + def simple_test_mask(self, + x, + img_metas, + det_bboxes, + det_labels, + rescale=False): + """Obtain mask prediction without augmentation.""" + # image shapes of images in the batch + ori_shapes = tuple(meta['ori_shape'] for meta in img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + + num_imgs = len(det_bboxes) + if all(det_bbox.shape[0] == 0 for det_bbox in det_bboxes): + num_classes = self.mask_head.num_classes + segm_results = [[[] for _ in range(num_classes)] + for _ in range(num_imgs)] + mask_scores = [[[] for _ in range(num_classes)] + for _ in range(num_imgs)] + else: + # if det_bboxes is rescaled to the original image size, we need to + # rescale it back to the testing scale to obtain RoIs. + if rescale and not isinstance(scale_factors[0], float): + scale_factors = [ + torch.from_numpy(scale_factor).to(det_bboxes[0].device) + for scale_factor in scale_factors + ] + _bboxes = [ + det_bboxes[i][:, :4] * + scale_factors[i] if rescale else det_bboxes[i] + for i in range(num_imgs) + ] + mask_rois = bbox2roi(_bboxes) + mask_results = self._mask_forward(x, mask_rois) + concat_det_labels = torch.cat(det_labels) + # get mask scores with mask iou head + mask_feats = mask_results['mask_feats'] + mask_pred = mask_results['mask_pred'] + mask_iou_pred = self.mask_iou_head( + mask_feats, mask_pred[range(concat_det_labels.size(0)), + concat_det_labels]) + # split batch mask prediction back to each image + num_bboxes_per_img = tuple(len(_bbox) for _bbox in _bboxes) + mask_preds = mask_pred.split(num_bboxes_per_img, 0) + mask_iou_preds = mask_iou_pred.split(num_bboxes_per_img, 0) + + # apply mask post-processing to each image individually + segm_results = [] + mask_scores = [] + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + segm_results.append( + [[] for _ in range(self.mask_head.num_classes)]) + mask_scores.append( + [[] for _ in range(self.mask_head.num_classes)]) + else: + segm_result = self.mask_head.get_seg_masks( + mask_preds[i], _bboxes[i], det_labels[i], + self.test_cfg, ori_shapes[i], scale_factors[i], + rescale) + # get mask scores with mask iou head + mask_score = self.mask_iou_head.get_mask_scores( + mask_iou_preds[i], det_bboxes[i], det_labels[i]) + segm_results.append(segm_result) + mask_scores.append(mask_score) + return list(zip(segm_results, mask_scores)) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/pisa_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/pisa_roi_head.py new file mode 100644 index 00000000..e0111362 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/pisa_roi_head.py @@ -0,0 +1,159 @@ +from mmdet.core import bbox2roi +from ..builder import HEADS +from ..losses.pisa_loss import carl_loss, isr_p +from .standard_roi_head import StandardRoIHead + + +@HEADS.register_module() +class PISARoIHead(StandardRoIHead): + r"""The RoI head for `Prime Sample Attention in Object Detection + `_.""" + + def forward_train(self, + x, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None): + """Forward function for training. + + Args: + x (list[Tensor]): List of multi-level img features. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + proposals (list[Tensors]): List of region proposals. + gt_bboxes (list[Tensor]): Each item are the truth boxes for each + image in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): Class indices corresponding to each box + gt_bboxes_ignore (list[Tensor], optional): Specify which bounding + boxes can be ignored when computing the loss. + gt_masks (None | Tensor) : True segmentation masks for each box + used if the architecture supports a segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + # assign gts and sample proposals + if self.with_bbox or self.with_mask: + num_imgs = len(img_metas) + if gt_bboxes_ignore is None: + gt_bboxes_ignore = [None for _ in range(num_imgs)] + sampling_results = [] + neg_label_weights = [] + for i in range(num_imgs): + assign_result = self.bbox_assigner.assign( + proposal_list[i], gt_bboxes[i], gt_bboxes_ignore[i], + gt_labels[i]) + sampling_result = self.bbox_sampler.sample( + assign_result, + proposal_list[i], + gt_bboxes[i], + gt_labels[i], + feats=[lvl_feat[i][None] for lvl_feat in x]) + # neg label weight is obtained by sampling when using ISR-N + neg_label_weight = None + if isinstance(sampling_result, tuple): + sampling_result, neg_label_weight = sampling_result + sampling_results.append(sampling_result) + neg_label_weights.append(neg_label_weight) + + losses = dict() + # bbox head forward and loss + if self.with_bbox: + bbox_results = self._bbox_forward_train( + x, + sampling_results, + gt_bboxes, + gt_labels, + img_metas, + neg_label_weights=neg_label_weights) + losses.update(bbox_results['loss_bbox']) + + # mask head forward and loss + if self.with_mask: + mask_results = self._mask_forward_train(x, sampling_results, + bbox_results['bbox_feats'], + gt_masks, img_metas) + losses.update(mask_results['loss_mask']) + + return losses + + def _bbox_forward(self, x, rois): + """Box forward function used in both training and testing.""" + # TODO: a more flexible way to decide which feature maps to use + bbox_feats = self.bbox_roi_extractor( + x[:self.bbox_roi_extractor.num_inputs], rois) + if self.with_shared_head: + bbox_feats = self.shared_head(bbox_feats) + cls_score, bbox_pred = self.bbox_head(bbox_feats) + + bbox_results = dict( + cls_score=cls_score, bbox_pred=bbox_pred, bbox_feats=bbox_feats) + return bbox_results + + def _bbox_forward_train(self, + x, + sampling_results, + gt_bboxes, + gt_labels, + img_metas, + neg_label_weights=None): + """Run forward function and calculate loss for box head in training.""" + rois = bbox2roi([res.bboxes for res in sampling_results]) + + bbox_results = self._bbox_forward(x, rois) + + bbox_targets = self.bbox_head.get_targets(sampling_results, gt_bboxes, + gt_labels, self.train_cfg) + + # neg_label_weights obtained by sampler is image-wise, mapping back to + # the corresponding location in label weights + if neg_label_weights[0] is not None: + label_weights = bbox_targets[1] + cur_num_rois = 0 + for i in range(len(sampling_results)): + num_pos = sampling_results[i].pos_inds.size(0) + num_neg = sampling_results[i].neg_inds.size(0) + label_weights[cur_num_rois + num_pos:cur_num_rois + num_pos + + num_neg] = neg_label_weights[i] + cur_num_rois += num_pos + num_neg + + cls_score = bbox_results['cls_score'] + bbox_pred = bbox_results['bbox_pred'] + + # Apply ISR-P + isr_cfg = self.train_cfg.get('isr', None) + if isr_cfg is not None: + bbox_targets = isr_p( + cls_score, + bbox_pred, + bbox_targets, + rois, + sampling_results, + self.bbox_head.loss_cls, + self.bbox_head.bbox_coder, + **isr_cfg, + num_class=self.bbox_head.num_classes) + loss_bbox = self.bbox_head.loss(cls_score, bbox_pred, rois, + *bbox_targets) + + # Add CARL Loss + carl_cfg = self.train_cfg.get('carl', None) + if carl_cfg is not None: + loss_carl = carl_loss( + cls_score, + bbox_targets[0], + bbox_pred, + bbox_targets[2], + self.bbox_head.loss_bbox, + **carl_cfg, + num_class=self.bbox_head.num_classes) + loss_bbox.update(loss_carl) + + bbox_results.update(loss_bbox=loss_bbox) + return bbox_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/point_rend_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/point_rend_roi_head.py new file mode 100644 index 00000000..478cdf5b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/point_rend_roi_head.py @@ -0,0 +1,218 @@ +# Modified from https://github.com/facebookresearch/detectron2/tree/master/projects/PointRend # noqa + +import torch +import torch.nn.functional as F +from mmcv.ops import point_sample, rel_roi_point_to_rel_img_point + +from mmdet.core import bbox2roi, bbox_mapping, merge_aug_masks +from .. import builder +from ..builder import HEADS +from .standard_roi_head import StandardRoIHead + + +@HEADS.register_module() +class PointRendRoIHead(StandardRoIHead): + """`PointRend `_.""" + + def __init__(self, point_head, *args, **kwargs): + super().__init__(*args, **kwargs) + assert self.with_bbox and self.with_mask + self.init_point_head(point_head) + + def init_point_head(self, point_head): + """Initialize ``point_head``""" + self.point_head = builder.build_head(point_head) + + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + """ + super().init_weights(pretrained) + self.point_head.init_weights() + + def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks, + img_metas): + """Run forward function and calculate loss for mask head and point head + in training.""" + mask_results = super()._mask_forward_train(x, sampling_results, + bbox_feats, gt_masks, + img_metas) + if mask_results['loss_mask'] is not None: + loss_point = self._mask_point_forward_train( + x, sampling_results, mask_results['mask_pred'], gt_masks, + img_metas) + mask_results['loss_mask'].update(loss_point) + + return mask_results + + def _mask_point_forward_train(self, x, sampling_results, mask_pred, + gt_masks, img_metas): + """Run forward function and calculate loss for point head in + training.""" + pos_labels = torch.cat([res.pos_gt_labels for res in sampling_results]) + rel_roi_points = self.point_head.get_roi_rel_points_train( + mask_pred, pos_labels, cfg=self.train_cfg) + rois = bbox2roi([res.pos_bboxes for res in sampling_results]) + + fine_grained_point_feats = self._get_fine_grained_point_feats( + x, rois, rel_roi_points, img_metas) + coarse_point_feats = point_sample(mask_pred, rel_roi_points) + mask_point_pred = self.point_head(fine_grained_point_feats, + coarse_point_feats) + mask_point_target = self.point_head.get_targets( + rois, rel_roi_points, sampling_results, gt_masks, self.train_cfg) + loss_mask_point = self.point_head.loss(mask_point_pred, + mask_point_target, pos_labels) + + return loss_mask_point + + def _get_fine_grained_point_feats(self, x, rois, rel_roi_points, + img_metas): + """Sample fine grained feats from each level feature map and + concatenate them together.""" + num_imgs = len(img_metas) + fine_grained_feats = [] + for idx in range(self.mask_roi_extractor.num_inputs): + feats = x[idx] + spatial_scale = 1. / float( + self.mask_roi_extractor.featmap_strides[idx]) + point_feats = [] + for batch_ind in range(num_imgs): + # unravel batch dim + feat = feats[batch_ind].unsqueeze(0) + inds = (rois[:, 0].long() == batch_ind) + if inds.any(): + rel_img_points = rel_roi_point_to_rel_img_point( + rois[inds], rel_roi_points[inds], feat.shape[2:], + spatial_scale).unsqueeze(0) + point_feat = point_sample(feat, rel_img_points) + point_feat = point_feat.squeeze(0).transpose(0, 1) + point_feats.append(point_feat) + fine_grained_feats.append(torch.cat(point_feats, dim=0)) + return torch.cat(fine_grained_feats, dim=1) + + def _mask_point_forward_test(self, x, rois, label_pred, mask_pred, + img_metas): + """Mask refining process with point head in testing.""" + refined_mask_pred = mask_pred.clone() + for subdivision_step in range(self.test_cfg.subdivision_steps): + refined_mask_pred = F.interpolate( + refined_mask_pred, + scale_factor=self.test_cfg.scale_factor, + mode='bilinear', + align_corners=False) + # If `subdivision_num_points` is larger or equal to the + # resolution of the next step, then we can skip this step + num_rois, channels, mask_height, mask_width = \ + refined_mask_pred.shape + if (self.test_cfg.subdivision_num_points >= + self.test_cfg.scale_factor**2 * mask_height * mask_width + and + subdivision_step < self.test_cfg.subdivision_steps - 1): + continue + point_indices, rel_roi_points = \ + self.point_head.get_roi_rel_points_test( + refined_mask_pred, label_pred, cfg=self.test_cfg) + fine_grained_point_feats = self._get_fine_grained_point_feats( + x, rois, rel_roi_points, img_metas) + coarse_point_feats = point_sample(mask_pred, rel_roi_points) + mask_point_pred = self.point_head(fine_grained_point_feats, + coarse_point_feats) + + point_indices = point_indices.unsqueeze(1).expand(-1, channels, -1) + refined_mask_pred = refined_mask_pred.reshape( + num_rois, channels, mask_height * mask_width) + refined_mask_pred = refined_mask_pred.scatter_( + 2, point_indices, mask_point_pred) + refined_mask_pred = refined_mask_pred.view(num_rois, channels, + mask_height, mask_width) + + return refined_mask_pred + + def simple_test_mask(self, + x, + img_metas, + det_bboxes, + det_labels, + rescale=False): + """Obtain mask prediction without augmentation.""" + ori_shapes = tuple(meta['ori_shape'] for meta in img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + num_imgs = len(det_bboxes) + if all(det_bbox.shape[0] == 0 for det_bbox in det_bboxes): + segm_results = [[[] for _ in range(self.mask_head.num_classes)] + for _ in range(num_imgs)] + else: + # if det_bboxes is rescaled to the original image size, we need to + # rescale it back to the testing scale to obtain RoIs. + if rescale and not isinstance(scale_factors[0], float): + scale_factors = [ + torch.from_numpy(scale_factor).to(det_bboxes[0].device) + for scale_factor in scale_factors + ] + _bboxes = [ + det_bboxes[i][:, :4] * + scale_factors[i] if rescale else det_bboxes[i][:, :4] + for i in range(len(det_bboxes)) + ] + mask_rois = bbox2roi(_bboxes) + mask_results = self._mask_forward(x, mask_rois) + # split batch mask prediction back to each image + mask_pred = mask_results['mask_pred'] + num_mask_roi_per_img = [len(det_bbox) for det_bbox in det_bboxes] + mask_preds = mask_pred.split(num_mask_roi_per_img, 0) + mask_rois = mask_rois.split(num_mask_roi_per_img, 0) + + # apply mask post-processing to each image individually + segm_results = [] + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + segm_results.append( + [[] for _ in range(self.mask_head.num_classes)]) + else: + x_i = [xx[[i]] for xx in x] + mask_rois_i = mask_rois[i] + mask_rois_i[:, 0] = 0 # TODO: remove this hack + mask_pred_i = self._mask_point_forward_test( + x_i, mask_rois_i, det_labels[i], mask_preds[i], + [img_metas]) + segm_result = self.mask_head.get_seg_masks( + mask_pred_i, _bboxes[i], det_labels[i], self.test_cfg, + ori_shapes[i], scale_factors[i], rescale) + segm_results.append(segm_result) + return segm_results + + def aug_test_mask(self, feats, img_metas, det_bboxes, det_labels): + """Test for mask head with test time augmentation.""" + if det_bboxes.shape[0] == 0: + segm_result = [[] for _ in range(self.mask_head.num_classes)] + else: + aug_masks = [] + for x, img_meta in zip(feats, img_metas): + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + _bboxes = bbox_mapping(det_bboxes[:, :4], img_shape, + scale_factor, flip) + mask_rois = bbox2roi([_bboxes]) + mask_results = self._mask_forward(x, mask_rois) + mask_results['mask_pred'] = self._mask_point_forward_test( + x, mask_rois, det_labels, mask_results['mask_pred'], + img_metas) + # convert to numpy array to save memory + aug_masks.append( + mask_results['mask_pred'].sigmoid().cpu().numpy()) + merged_masks = merge_aug_masks(aug_masks, img_metas, self.test_cfg) + + ori_shape = img_metas[0][0]['ori_shape'] + segm_result = self.mask_head.get_seg_masks( + merged_masks, + det_bboxes, + det_labels, + self.test_cfg, + ori_shape, + scale_factor=1.0, + rescale=False) + return segm_result diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/__init__.py new file mode 100644 index 00000000..a6ec0ecc --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/__init__.py @@ -0,0 +1,7 @@ +from .generic_roi_extractor import GenericRoIExtractor +from .single_level_roi_extractor import SingleRoIExtractor + +__all__ = [ + 'SingleRoIExtractor', + 'GenericRoIExtractor', +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/base_roi_extractor.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/base_roi_extractor.py new file mode 100644 index 00000000..0e42b52f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/base_roi_extractor.py @@ -0,0 +1,83 @@ +from abc import ABCMeta, abstractmethod + +import torch +import torch.nn as nn +from mmcv import ops + + +class BaseRoIExtractor(nn.Module, metaclass=ABCMeta): + """Base class for RoI extractor. + + Args: + roi_layer (dict): Specify RoI layer type and arguments. + out_channels (int): Output channels of RoI layers. + featmap_strides (int): Strides of input feature maps. + """ + + def __init__(self, roi_layer, out_channels, featmap_strides): + super(BaseRoIExtractor, self).__init__() + self.roi_layers = self.build_roi_layers(roi_layer, featmap_strides) + self.out_channels = out_channels + self.featmap_strides = featmap_strides + self.fp16_enabled = False + + @property + def num_inputs(self): + """int: Number of input feature maps.""" + return len(self.featmap_strides) + + def init_weights(self): + pass + + def build_roi_layers(self, layer_cfg, featmap_strides): + """Build RoI operator to extract feature from each level feature map. + + Args: + layer_cfg (dict): Dictionary to construct and config RoI layer + operation. Options are modules under ``mmcv/ops`` such as + ``RoIAlign``. + featmap_strides (int): The stride of input feature map w.r.t to the + original image size, which would be used to scale RoI + coordinate (original image coordinate system) to feature + coordinate system. + + Returns: + nn.ModuleList: The RoI extractor modules for each level feature + map. + """ + + cfg = layer_cfg.copy() + layer_type = cfg.pop('type') + assert hasattr(ops, layer_type) + layer_cls = getattr(ops, layer_type) + roi_layers = nn.ModuleList( + [layer_cls(spatial_scale=1 / s, **cfg) for s in featmap_strides]) + return roi_layers + + def roi_rescale(self, rois, scale_factor): + """Scale RoI coordinates by scale factor. + + Args: + rois (torch.Tensor): RoI (Region of Interest), shape (n, 5) + scale_factor (float): Scale factor that RoI will be multiplied by. + + Returns: + torch.Tensor: Scaled RoI. + """ + + cx = (rois[:, 1] + rois[:, 3]) * 0.5 + cy = (rois[:, 2] + rois[:, 4]) * 0.5 + w = rois[:, 3] - rois[:, 1] + h = rois[:, 4] - rois[:, 2] + new_w = w * scale_factor + new_h = h * scale_factor + x1 = cx - new_w * 0.5 + x2 = cx + new_w * 0.5 + y1 = cy - new_h * 0.5 + y2 = cy + new_h * 0.5 + new_rois = torch.stack((rois[:, 0], x1, y1, x2, y2), dim=-1) + return new_rois + + @abstractmethod + def forward(self, feats, rois, roi_scale_factor=None): + pass diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/generic_roi_extractor.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/generic_roi_extractor.py new file mode 100644 index 00000000..80c25bb8 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/generic_roi_extractor.py @@ -0,0 +1,83 @@ +from mmcv.cnn.bricks import build_plugin_layer +from mmcv.runner import force_fp32 + +from mmdet.models.builder import ROI_EXTRACTORS +from .base_roi_extractor import BaseRoIExtractor + + +@ROI_EXTRACTORS.register_module() +class GenericRoIExtractor(BaseRoIExtractor): + """Extract RoI features from all level feature maps levels. + + This is the implementation of `A novel Region of Interest Extraction Layer + for Instance Segmentation `_. + + Args: + aggregation (str): The method to aggregate multiple feature maps. + Options are 'sum', 'concat'. Default: 'sum'. + pre_cfg (dict | None): Specify pre-processing modules. Default: None. + post_cfg (dict | None): Specify post-processing modules. Default: None. + kwargs (keyword arguments): Arguments that are the same + as :class:`BaseRoIExtractor`. + """ + + def __init__(self, + aggregation='sum', + pre_cfg=None, + post_cfg=None, + **kwargs): + super(GenericRoIExtractor, self).__init__(**kwargs) + + assert aggregation in ['sum', 'concat'] + + self.aggregation = aggregation + self.with_post = post_cfg is not None + self.with_pre = pre_cfg is not None + # build pre/post processing modules + if self.with_post: + self.post_module = build_plugin_layer(post_cfg, '_post_module')[1] + if self.with_pre: + self.pre_module = build_plugin_layer(pre_cfg, '_pre_module')[1] + + @force_fp32(apply_to=('feats', ), out_fp16=True) + def forward(self, feats, rois, roi_scale_factor=None): + """Forward function.""" + if len(feats) == 1: + return self.roi_layers[0](feats[0], rois) + + out_size = self.roi_layers[0].output_size + num_levels = len(feats) + roi_feats = feats[0].new_zeros( + rois.size(0), self.out_channels, *out_size) + + # some times rois is an empty tensor + if roi_feats.shape[0] == 0: + return roi_feats + + if roi_scale_factor is not None: + rois = self.roi_rescale(rois, roi_scale_factor) + + # mark the starting channels for concat mode + start_channels = 0 + for i in range(num_levels): + roi_feats_t = self.roi_layers[i](feats[i], rois) + end_channels = start_channels + roi_feats_t.size(1) + if self.with_pre: + # apply pre-processing to a RoI extracted from each layer + roi_feats_t = self.pre_module(roi_feats_t) + if self.aggregation == 'sum': + # and sum them all + roi_feats += roi_feats_t + else: + # and concat them along channel dimension + roi_feats[:, start_channels:end_channels] = roi_feats_t + # update channels starting position + start_channels = end_channels + # check if concat channels match at the end + if self.aggregation == 'concat': + assert start_channels == self.out_channels + + if self.with_post: + # apply post-processing before return the result + roi_feats = self.post_module(roi_feats) + return roi_feats diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/single_level_roi_extractor.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/single_level_roi_extractor.py new file mode 100644 index 00000000..c0eebc4a --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/roi_extractors/single_level_roi_extractor.py @@ -0,0 +1,99 @@ +import torch +from mmcv.runner import force_fp32 + +from mmdet.models.builder import ROI_EXTRACTORS +from .base_roi_extractor import BaseRoIExtractor + + +@ROI_EXTRACTORS.register_module() +class SingleRoIExtractor(BaseRoIExtractor): + """Extract RoI features from a single level feature map. + + If there are multiple input feature levels, each RoI is mapped to a level + according to its scale. The mapping rule is proposed in + `FPN `_. + + Args: + roi_layer (dict): Specify RoI layer type and arguments. + out_channels (int): Output channels of RoI layers. + featmap_strides (int): Strides of input feature maps. + finest_scale (int): Scale threshold of mapping to level 0. Default: 56. + """ + + def __init__(self, + roi_layer, + out_channels, + featmap_strides, + finest_scale=56): + super(SingleRoIExtractor, self).__init__(roi_layer, out_channels, + featmap_strides) + self.finest_scale = finest_scale + + def map_roi_levels(self, rois, num_levels): + """Map rois to corresponding feature levels by scales. + + - scale < finest_scale * 2: level 0 + - finest_scale * 2 <= scale < finest_scale * 4: level 1 + - finest_scale * 4 <= scale < finest_scale * 8: level 2 + - scale >= finest_scale * 8: level 3 + + Args: + rois (Tensor): Input RoIs, shape (k, 5). + num_levels (int): Total level number. + + Returns: + Tensor: Level index (0-based) of each RoI, shape (k, ) + """ + scale = torch.sqrt( + (rois[:, 3] - rois[:, 1]) * (rois[:, 4] - rois[:, 2])) + target_lvls = torch.floor(torch.log2(scale / self.finest_scale + 1e-6)) + target_lvls = target_lvls.clamp(min=0, max=num_levels - 1).long() + return target_lvls + + @force_fp32(apply_to=('feats', ), out_fp16=True) + def forward(self, feats, rois, roi_scale_factor=None): + """Forward function.""" + out_size = self.roi_layers[0].output_size + num_levels = len(feats) + if torch.onnx.is_in_onnx_export(): + # Work around to export mask-rcnn to onnx + roi_feats = rois[:, :1].clone().detach() + roi_feats = roi_feats.expand( + -1, self.out_channels * out_size[0] * out_size[1]) + roi_feats = roi_feats.reshape(-1, self.out_channels, *out_size) + roi_feats = roi_feats * 0 + else: + roi_feats = feats[0].new_zeros( + rois.size(0), self.out_channels, *out_size) + # TODO: remove this when parrots supports + if torch.__version__ == 'parrots': + roi_feats.requires_grad = True + + if num_levels == 1: + if len(rois) == 0: + return roi_feats + return self.roi_layers[0](feats[0], rois) + + target_lvls = self.map_roi_levels(rois, num_levels) + if roi_scale_factor is not None: + rois = self.roi_rescale(rois, roi_scale_factor) + + for i in range(num_levels): + mask = target_lvls == i + inds = mask.nonzero(as_tuple=False).squeeze(1) + # TODO: make it nicer when exporting to onnx + if torch.onnx.is_in_onnx_export(): + # To keep all roi_align nodes exported to onnx + rois_ = rois[inds] + roi_feats_t = self.roi_layers[i](feats[i], rois_) + roi_feats[inds] = roi_feats_t + continue + if inds.numel() > 0: + rois_ = rois[inds] + roi_feats_t = self.roi_layers[i](feats[i], rois_) + roi_feats[inds] = roi_feats_t + else: + roi_feats += sum( + x.view(-1)[0] + for x in self.parameters()) * 0. + feats[i].sum() * 0. + return roi_feats diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/__init__.py new file mode 100644 index 00000000..bbe70145 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/__init__.py @@ -0,0 +1,3 @@ +from .res_layer import ResLayer + +__all__ = ['ResLayer'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/res_layer.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/res_layer.py new file mode 100644 index 00000000..b5c34325 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/shared_heads/res_layer.py @@ -0,0 +1,77 @@ +import torch.nn as nn +from mmcv.cnn import constant_init, kaiming_init +from mmcv.runner import auto_fp16, load_checkpoint + +from mmdet.models.backbones import ResNet +from mmdet.models.builder import SHARED_HEADS +from mmdet.models.utils import ResLayer as _ResLayer +from mmdet.utils import get_root_logger + + +@SHARED_HEADS.register_module() +class ResLayer(nn.Module): + + def __init__(self, + depth, + stage=3, + stride=2, + dilation=1, + style='pytorch', + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=True, + with_cp=False, + dcn=None): + super(ResLayer, self).__init__() + self.norm_eval = norm_eval + self.norm_cfg = norm_cfg + self.stage = stage + self.fp16_enabled = False + block, stage_blocks = ResNet.arch_settings[depth] + stage_block = stage_blocks[stage] + planes = 64 * 2**stage + inplanes = 64 * 2**(stage - 1) * block.expansion + + res_layer = _ResLayer( + block, + inplanes, + planes, + stage_block, + stride=stride, + dilation=dilation, + style=style, + with_cp=with_cp, + norm_cfg=self.norm_cfg, + dcn=dcn) + self.add_module(f'layer{stage + 1}', res_layer) + + def init_weights(self, pretrained=None): + """Initialize the weights in the module. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, nn.BatchNorm2d): + constant_init(m, 1) + else: + raise TypeError('pretrained must be a str or None') + + @auto_fp16() + def forward(self, x): + res_layer = getattr(self, f'layer{self.stage + 1}') + out = res_layer(x) + return out + + def train(self, mode=True): + super(ResLayer, self).train(mode) + if self.norm_eval: + for m in self.modules(): + if isinstance(m, nn.BatchNorm2d): + m.eval() diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/sparse_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/sparse_roi_head.py new file mode 100644 index 00000000..da97bad2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/sparse_roi_head.py @@ -0,0 +1,311 @@ +import torch + +from mmdet.core import bbox2result, bbox2roi, bbox_xyxy_to_cxcywh +from mmdet.core.bbox.samplers import PseudoSampler +from ..builder import HEADS +from .cascade_roi_head import CascadeRoIHead + + +@HEADS.register_module() +class SparseRoIHead(CascadeRoIHead): + r"""The RoIHead for `Sparse R-CNN: End-to-End Object Detection with + Learnable Proposals `_ + + Args: + num_stages (int): Number of stage whole iterative process. + Defaults to 6. + stage_loss_weights (Tuple[float]): The loss + weight of each stage. By default all stages have + the same weight 1. + bbox_roi_extractor (dict): Config of box roi extractor. + bbox_head (dict): Config of box head. + train_cfg (dict, optional): Configuration information in train stage. + Defaults to None. + test_cfg (dict, optional): Configuration information in test stage. + Defaults to None. + + """ + + def __init__(self, + num_stages=6, + stage_loss_weights=(1, 1, 1, 1, 1, 1), + proposal_feature_channel=256, + bbox_roi_extractor=dict( + type='SingleRoIExtractor', + roi_layer=dict( + type='RoIAlign', output_size=7, sampling_ratio=2), + out_channels=256, + featmap_strides=[4, 8, 16, 32]), + bbox_head=dict( + type='DIIHead', + num_classes=80, + num_fcs=2, + num_heads=8, + num_cls_fcs=1, + num_reg_fcs=3, + feedforward_channels=2048, + hidden_channels=256, + dropout=0.0, + roi_feat_size=7, + ffn_act_cfg=dict(type='ReLU', inplace=True)), + train_cfg=None, + test_cfg=None): + assert bbox_roi_extractor is not None + assert bbox_head is not None + assert len(stage_loss_weights) == num_stages + self.num_stages = num_stages + self.stage_loss_weights = stage_loss_weights + self.proposal_feature_channel = proposal_feature_channel + super(SparseRoIHead, self).__init__( + num_stages, + stage_loss_weights, + bbox_roi_extractor=bbox_roi_extractor, + bbox_head=bbox_head, + train_cfg=train_cfg, + test_cfg=test_cfg) + # train_cfg would be None when run the test.py + if train_cfg is not None: + for stage in range(num_stages): + assert isinstance(self.bbox_sampler[stage], PseudoSampler), \ + 'Sparse R-CNN only support `PseudoSampler`' + + def _bbox_forward(self, stage, x, rois, object_feats, img_metas): + """Box head forward function used in both training and testing. Returns + all regression, classification results and a intermediate feature. + + Args: + stage (int): The index of current stage in + iterative process. + x (List[Tensor]): List of FPN features + rois (Tensor): Rois in total batch. With shape (num_proposal, 5). + the last dimension 5 represents (img_index, x1, y1, x2, y2). + object_feats (Tensor): The object feature extracted from + the previous stage. + img_metas (dict): meta information of images. + + Returns: + dict[str, Tensor]: a dictionary of bbox head outputs, + Containing the following results: + + - cls_score (Tensor): The score of each class, has + shape (batch_size, num_proposals, num_classes) + when use focal loss or + (batch_size, num_proposals, num_classes+1) + otherwise. + - decode_bbox_pred (Tensor): The regression results + with shape (batch_size, num_proposal, 4). + The last dimension 4 represents + [tl_x, tl_y, br_x, br_y]. + - object_feats (Tensor): The object feature extracted + from current stage + - detach_cls_score_list (list[Tensor]): The detached + classification results, length is batch_size, and + each tensor has shape (num_proposal, num_classes). + - detach_proposal_list (list[tensor]): The detached + regression results, length is batch_size, and each + tensor has shape (num_proposal, 4). The last + dimension 4 represents [tl_x, tl_y, br_x, br_y]. + """ + num_imgs = len(img_metas) + bbox_roi_extractor = self.bbox_roi_extractor[stage] + bbox_head = self.bbox_head[stage] + bbox_feats = bbox_roi_extractor(x[:bbox_roi_extractor.num_inputs], + rois) + cls_score, bbox_pred, object_feats = bbox_head(bbox_feats, + object_feats) + proposal_list = self.bbox_head[stage].refine_bboxes( + rois, + rois.new_zeros(len(rois)), # dummy arg + bbox_pred.view(-1, bbox_pred.size(-1)), + [rois.new_zeros(object_feats.size(1)) for _ in range(num_imgs)], + img_metas) + bbox_results = dict( + cls_score=cls_score, + decode_bbox_pred=torch.cat(proposal_list), + object_feats=object_feats, + # detach then use it in label assign + detach_cls_score_list=[ + cls_score[i].detach() for i in range(num_imgs) + ], + detach_proposal_list=[item.detach() for item in proposal_list]) + + return bbox_results + + def forward_train(self, + x, + proposal_boxes, + proposal_features, + img_metas, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + imgs_whwh=None, + gt_masks=None): + """Forward function in training stage. + + Args: + x (list[Tensor]): list of multi-level img features. + proposals (Tensor): Decoded proposal bboxes, has shape + (batch_size, num_proposals, 4) + proposal_features (Tensor): Expanded proposal + features, has shape + (batch_size, num_proposals, proposal_feature_channel) + img_metas (list[dict]): list of image info dict where + each dict has: 'img_shape', 'scale_factor', 'flip', + and may also contain 'filename', 'ori_shape', + 'pad_shape', and 'img_norm_cfg'. For details on the + values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + imgs_whwh (Tensor): Tensor with shape (batch_size, 4), + the dimension means + [img_width,img_height, img_width, img_height]. + gt_masks (None | Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components of all stage. + """ + + num_imgs = len(img_metas) + num_proposals = proposal_boxes.size(1) + imgs_whwh = imgs_whwh.repeat(1, num_proposals, 1) + all_stage_bbox_results = [] + proposal_list = [proposal_boxes[i] for i in range(len(proposal_boxes))] + object_feats = proposal_features + all_stage_loss = {} + for stage in range(self.num_stages): + rois = bbox2roi(proposal_list) + bbox_results = self._bbox_forward(stage, x, rois, object_feats, + img_metas) + all_stage_bbox_results.append(bbox_results) + if gt_bboxes_ignore is None: + # TODO support ignore + gt_bboxes_ignore = [None for _ in range(num_imgs)] + sampling_results = [] + cls_pred_list = bbox_results['detach_cls_score_list'] + proposal_list = bbox_results['detach_proposal_list'] + for i in range(num_imgs): + normolize_bbox_ccwh = bbox_xyxy_to_cxcywh(proposal_list[i] / + imgs_whwh[i]) + assign_result = self.bbox_assigner[stage].assign( + normolize_bbox_ccwh, cls_pred_list[i], gt_bboxes[i], + gt_labels[i], img_metas[i]) + sampling_result = self.bbox_sampler[stage].sample( + assign_result, proposal_list[i], gt_bboxes[i]) + sampling_results.append(sampling_result) + bbox_targets = self.bbox_head[stage].get_targets( + sampling_results, gt_bboxes, gt_labels, self.train_cfg[stage], + True) + cls_score = bbox_results['cls_score'] + decode_bbox_pred = bbox_results['decode_bbox_pred'] + + single_stage_loss = self.bbox_head[stage].loss( + cls_score.view(-1, cls_score.size(-1)), + decode_bbox_pred.view(-1, 4), + *bbox_targets, + imgs_whwh=imgs_whwh) + for key, value in single_stage_loss.items(): + all_stage_loss[f'stage{stage}_{key}'] = value * \ + self.stage_loss_weights[stage] + object_feats = bbox_results['object_feats'] + + return all_stage_loss + + def simple_test(self, + x, + proposal_boxes, + proposal_features, + img_metas, + imgs_whwh, + rescale=False): + """Test without augmentation. + + Args: + x (list[Tensor]): list of multi-level img features. + proposal_boxes (Tensor): Decoded proposal bboxes, has shape + (batch_size, num_proposals, 4) + proposal_features (Tensor): Expanded proposal + features, has shape + (batch_size, num_proposals, proposal_feature_channel) + img_metas (dict): meta information of images. + imgs_whwh (Tensor): Tensor with shape (batch_size, 4), + the dimension means + [img_width,img_height, img_width, img_height]. + rescale (bool): If True, return boxes in original image + space. Defaults to False. + + Returns: + bbox_results (list[tuple[np.ndarray]]): \ + [[cls1_det, cls2_det, ...], ...]. \ + The outer list indicates images, and the inner \ + list indicates per-class detected bboxes. The \ + np.ndarray has shape (num_det, 5) and the last \ + dimension 5 represents (x1, y1, x2, y2, score). + """ + assert self.with_bbox, 'Bbox head must be implemented.' + # Decode initial proposals + num_imgs = len(img_metas) + proposal_list = [proposal_boxes[i] for i in range(num_imgs)] + object_feats = proposal_features + for stage in range(self.num_stages): + rois = bbox2roi(proposal_list) + bbox_results = self._bbox_forward(stage, x, rois, object_feats, + img_metas) + object_feats = bbox_results['object_feats'] + cls_score = bbox_results['cls_score'] + proposal_list = bbox_results['detach_proposal_list'] + + num_classes = self.bbox_head[-1].num_classes + det_bboxes = [] + det_labels = [] + + if self.bbox_head[-1].loss_cls.use_sigmoid: + cls_score = cls_score.sigmoid() + else: + cls_score = cls_score.softmax(-1)[..., :-1] + + for img_id in range(num_imgs): + cls_score_per_img = cls_score[img_id] + scores_per_img, topk_indices = cls_score_per_img.flatten( + 0, 1).topk( + self.test_cfg.max_per_img, sorted=False) + labels_per_img = topk_indices % num_classes + bbox_pred_per_img = proposal_list[img_id][topk_indices // + num_classes] + if rescale: + scale_factor = img_metas[img_id]['scale_factor'] + bbox_pred_per_img /= bbox_pred_per_img.new_tensor(scale_factor) + det_bboxes.append( + torch.cat([bbox_pred_per_img, scores_per_img[:, None]], dim=1)) + det_labels.append(labels_per_img) + + bbox_results = [ + bbox2result(det_bboxes[i], det_labels[i], num_classes) + for i in range(num_imgs) + ] + + return bbox_results + + def aug_test(self, features, proposal_list, img_metas, rescale=False): + raise NotImplementedError('Sparse R-CNN does not support `aug_test`') + + def forward_dummy(self, x, proposal_boxes, proposal_features, img_metas): + """Dummy forward function when do the flops computing.""" + all_stage_bbox_results = [] + proposal_list = [proposal_boxes[i] for i in range(len(proposal_boxes))] + object_feats = proposal_features + if self.with_bbox: + for stage in range(self.num_stages): + rois = bbox2roi(proposal_list) + bbox_results = self._bbox_forward(stage, x, rois, object_feats, + img_metas) + + all_stage_bbox_results.append(bbox_results) + proposal_list = bbox_results['detach_proposal_list'] + object_feats = bbox_results['object_feats'] + return all_stage_bbox_results diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/standard_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/standard_roi_head.py new file mode 100644 index 00000000..c530f2a5 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/standard_roi_head.py @@ -0,0 +1,295 @@ +import torch + +from mmdet.core import bbox2result, bbox2roi, build_assigner, build_sampler +from ..builder import HEADS, build_head, build_roi_extractor +from .base_roi_head import BaseRoIHead +from .test_mixins import BBoxTestMixin, MaskTestMixin + + +@HEADS.register_module() +class StandardRoIHead(BaseRoIHead, BBoxTestMixin, MaskTestMixin): + """Simplest base roi head including one bbox head and one mask head.""" + + def init_assigner_sampler(self): + """Initialize assigner and sampler.""" + self.bbox_assigner = None + self.bbox_sampler = None + if self.train_cfg: + self.bbox_assigner = build_assigner(self.train_cfg.assigner) + self.bbox_sampler = build_sampler( + self.train_cfg.sampler, context=self) + + def init_bbox_head(self, bbox_roi_extractor, bbox_head): + """Initialize ``bbox_head``""" + self.bbox_roi_extractor = build_roi_extractor(bbox_roi_extractor) + self.bbox_head = build_head(bbox_head) + + def init_mask_head(self, mask_roi_extractor, mask_head): + """Initialize ``mask_head``""" + if mask_roi_extractor is not None: + self.mask_roi_extractor = build_roi_extractor(mask_roi_extractor) + self.share_roi_extractor = False + else: + self.share_roi_extractor = True + self.mask_roi_extractor = self.bbox_roi_extractor + self.mask_head = build_head(mask_head) + + def init_weights(self, pretrained): + """Initialize the weights in head. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if self.with_shared_head: + self.shared_head.init_weights(pretrained=pretrained) + if self.with_bbox: + self.bbox_roi_extractor.init_weights() + self.bbox_head.init_weights() + if self.with_mask: + self.mask_head.init_weights() + if not self.share_roi_extractor: + self.mask_roi_extractor.init_weights() + + def forward_dummy(self, x, proposals): + """Dummy forward function.""" + # bbox head + outs = () + rois = bbox2roi([proposals]) + if self.with_bbox: + bbox_results = self._bbox_forward(x, rois) + outs = outs + (bbox_results['cls_score'], + bbox_results['bbox_pred']) + # mask head + if self.with_mask: + mask_rois = rois[:100] + mask_results = self._mask_forward(x, mask_rois) + outs = outs + (mask_results['mask_pred'], ) + return outs + + def forward_train(self, + x, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + gt_masks=None): + """ + Args: + x (list[Tensor]): list of multi-level img features. + img_metas (list[dict]): list of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmdet/datasets/pipelines/formatting.py:Collect`. + proposals (list[Tensors]): list of region proposals. + gt_bboxes (list[Tensor]): Ground truth bboxes for each image with + shape (num_gts, 4) in [tl_x, tl_y, br_x, br_y] format. + gt_labels (list[Tensor]): class indices corresponding to each box + gt_bboxes_ignore (None | list[Tensor]): specify which bounding + boxes can be ignored when computing the loss. + gt_masks (None | Tensor) : true segmentation masks for each box + used if the architecture supports a segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + # assign gts and sample proposals + if self.with_bbox or self.with_mask: + num_imgs = len(img_metas) + if gt_bboxes_ignore is None: + gt_bboxes_ignore = [None for _ in range(num_imgs)] + sampling_results = [] + for i in range(num_imgs): + assign_result = self.bbox_assigner.assign( + proposal_list[i], gt_bboxes[i], gt_bboxes_ignore[i], + gt_labels[i]) + sampling_result = self.bbox_sampler.sample( + assign_result, + proposal_list[i], + gt_bboxes[i], + gt_labels[i], + feats=[lvl_feat[i][None] for lvl_feat in x]) + sampling_results.append(sampling_result) + + losses = dict() + # bbox head forward and loss + if self.with_bbox: + bbox_results = self._bbox_forward_train(x, sampling_results, + gt_bboxes, gt_labels, + img_metas) + losses.update(bbox_results['loss_bbox']) + + # mask head forward and loss + if self.with_mask: + mask_results = self._mask_forward_train(x, sampling_results, + bbox_results['bbox_feats'], + gt_masks, img_metas) + losses.update(mask_results['loss_mask']) + + return losses + + def _bbox_forward(self, x, rois): + """Box head forward function used in both training and testing.""" + # TODO: a more flexible way to decide which feature maps to use + bbox_feats = self.bbox_roi_extractor( + x[:self.bbox_roi_extractor.num_inputs], rois) + if self.with_shared_head: + bbox_feats = self.shared_head(bbox_feats) + cls_score, bbox_pred = self.bbox_head(bbox_feats) + + bbox_results = dict( + cls_score=cls_score, bbox_pred=bbox_pred, bbox_feats=bbox_feats) + return bbox_results + + def _bbox_forward_train(self, x, sampling_results, gt_bboxes, gt_labels, + img_metas): + """Run forward function and calculate loss for box head in training.""" + rois = bbox2roi([res.bboxes for res in sampling_results]) + bbox_results = self._bbox_forward(x, rois) + + bbox_targets = self.bbox_head.get_targets(sampling_results, gt_bboxes, + gt_labels, self.train_cfg) + loss_bbox = self.bbox_head.loss(bbox_results['cls_score'], + bbox_results['bbox_pred'], rois, + *bbox_targets) + + bbox_results.update(loss_bbox=loss_bbox) + return bbox_results + + def _mask_forward_train(self, x, sampling_results, bbox_feats, gt_masks, + img_metas): + """Run forward function and calculate loss for mask head in + training.""" + if not self.share_roi_extractor: + pos_rois = bbox2roi([res.pos_bboxes for res in sampling_results]) + mask_results = self._mask_forward(x, pos_rois) + else: + pos_inds = [] + device = bbox_feats.device + for res in sampling_results: + pos_inds.append( + torch.ones( + res.pos_bboxes.shape[0], + device=device, + dtype=torch.uint8)) + pos_inds.append( + torch.zeros( + res.neg_bboxes.shape[0], + device=device, + dtype=torch.uint8)) + pos_inds = torch.cat(pos_inds) + + mask_results = self._mask_forward( + x, pos_inds=pos_inds, bbox_feats=bbox_feats) + + mask_targets = self.mask_head.get_targets(sampling_results, gt_masks, + self.train_cfg) + pos_labels = torch.cat([res.pos_gt_labels for res in sampling_results]) + loss_mask = self.mask_head.loss(mask_results['mask_pred'], + mask_targets, pos_labels) + + mask_results.update(loss_mask=loss_mask, mask_targets=mask_targets) + return mask_results + + def _mask_forward(self, x, rois=None, pos_inds=None, bbox_feats=None): + """Mask head forward function used in both training and testing.""" + assert ((rois is not None) ^ + (pos_inds is not None and bbox_feats is not None)) + if rois is not None: + mask_feats = self.mask_roi_extractor( + x[:self.mask_roi_extractor.num_inputs], rois) + if self.with_shared_head: + mask_feats = self.shared_head(mask_feats) + else: + assert bbox_feats is not None + mask_feats = bbox_feats[pos_inds] + + mask_pred = self.mask_head(mask_feats) + mask_results = dict(mask_pred=mask_pred, mask_feats=mask_feats) + return mask_results + + async def async_simple_test(self, + x, + proposal_list, + img_metas, + proposals=None, + rescale=False): + """Async test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + + det_bboxes, det_labels = await self.async_test_bboxes( + x, img_metas, proposal_list, self.test_cfg, rescale=rescale) + bbox_results = bbox2result(det_bboxes, det_labels, + self.bbox_head.num_classes) + if not self.with_mask: + return bbox_results + else: + segm_results = await self.async_test_mask( + x, + img_metas, + det_bboxes, + det_labels, + rescale=rescale, + mask_test_cfg=self.test_cfg.get('mask')) + return bbox_results, segm_results + + def simple_test(self, + x, + proposal_list, + img_metas, + proposals=None, + rescale=False): + """Test without augmentation.""" + assert self.with_bbox, 'Bbox head must be implemented.' + + det_bboxes, det_labels = self.simple_test_bboxes( + x, img_metas, proposal_list, self.test_cfg, rescale=rescale) + if torch.onnx.is_in_onnx_export(): + if self.with_mask: + segm_results = self.simple_test_mask( + x, img_metas, det_bboxes, det_labels, rescale=rescale) + return det_bboxes, det_labels, segm_results + else: + return det_bboxes, det_labels + + bbox_results = [ + bbox2result(det_bboxes[i], det_labels[i], + self.bbox_head.num_classes) + for i in range(len(det_bboxes)) + ] + + if not self.with_mask: + return bbox_results + else: + segm_results = self.simple_test_mask( + x, img_metas, det_bboxes, det_labels, rescale=rescale) + return list(zip(bbox_results, segm_results)) + + def aug_test(self, x, proposal_list, img_metas, rescale=False): + """Test with augmentations. + + If rescale is False, then returned bboxes and masks will fit the scale + of imgs[0]. + """ + det_bboxes, det_labels = self.aug_test_bboxes(x, img_metas, + proposal_list, + self.test_cfg) + + if rescale: + _det_bboxes = det_bboxes + else: + _det_bboxes = det_bboxes.clone() + _det_bboxes[:, :4] *= det_bboxes.new_tensor( + img_metas[0][0]['scale_factor']) + bbox_results = bbox2result(_det_bboxes, det_labels, + self.bbox_head.num_classes) + + # det_bboxes always keep the original scale + if self.with_mask: + segm_results = self.aug_test_mask(x, img_metas, det_bboxes, + det_labels) + return [(bbox_results, segm_results)] + else: + return [bbox_results] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/test_mixins.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/test_mixins.py new file mode 100644 index 00000000..0e675d6e --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/test_mixins.py @@ -0,0 +1,271 @@ +import logging +import sys + +import torch + +from mmdet.core import (bbox2roi, bbox_mapping, merge_aug_bboxes, + merge_aug_masks, multiclass_nms) + +logger = logging.getLogger(__name__) + +if sys.version_info >= (3, 7): + from mmdet.utils.contextmanagers import completed + + +class BBoxTestMixin(object): + + if sys.version_info >= (3, 7): + + async def async_test_bboxes(self, + x, + img_metas, + proposals, + rcnn_test_cfg, + rescale=False, + bbox_semaphore=None, + global_lock=None): + """Asynchronized test for box head without augmentation.""" + rois = bbox2roi(proposals) + roi_feats = self.bbox_roi_extractor( + x[:len(self.bbox_roi_extractor.featmap_strides)], rois) + if self.with_shared_head: + roi_feats = self.shared_head(roi_feats) + sleep_interval = rcnn_test_cfg.get('async_sleep_interval', 0.017) + + async with completed( + __name__, 'bbox_head_forward', + sleep_interval=sleep_interval): + cls_score, bbox_pred = self.bbox_head(roi_feats) + + img_shape = img_metas[0]['img_shape'] + scale_factor = img_metas[0]['scale_factor'] + det_bboxes, det_labels = self.bbox_head.get_bboxes( + rois, + cls_score, + bbox_pred, + img_shape, + scale_factor, + rescale=rescale, + cfg=rcnn_test_cfg) + return det_bboxes, det_labels + + def simple_test_bboxes(self, + x, + img_metas, + proposals, + rcnn_test_cfg, + rescale=False): + """Test only det bboxes without augmentation.""" + rois = bbox2roi(proposals) + bbox_results = self._bbox_forward(x, rois) + img_shapes = tuple(meta['img_shape'] for meta in img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + + # split batch bbox prediction back to each image + cls_score = bbox_results['cls_score'] + bbox_pred = bbox_results['bbox_pred'] + num_proposals_per_img = tuple(len(p) for p in proposals) + rois = rois.split(num_proposals_per_img, 0) + cls_score = cls_score.split(num_proposals_per_img, 0) + + # some detector with_reg is False, bbox_pred will be None + if bbox_pred is not None: + # the bbox prediction of some detectors like SABL is not Tensor + if isinstance(bbox_pred, torch.Tensor): + bbox_pred = bbox_pred.split(num_proposals_per_img, 0) + else: + bbox_pred = self.bbox_head.bbox_pred_split( + bbox_pred, num_proposals_per_img) + else: + bbox_pred = (None, ) * len(proposals) + + # apply bbox post-processing to each image individually + det_bboxes = [] + det_labels = [] + for i in range(len(proposals)): + det_bbox, det_label = self.bbox_head.get_bboxes( + rois[i], + cls_score[i], + bbox_pred[i], + img_shapes[i], + scale_factors[i], + rescale=rescale, + cfg=rcnn_test_cfg) + det_bboxes.append(det_bbox) + det_labels.append(det_label) + return det_bboxes, det_labels + + def aug_test_bboxes(self, feats, img_metas, proposal_list, rcnn_test_cfg): + """Test det bboxes with test time augmentation.""" + aug_bboxes = [] + aug_scores = [] + for x, img_meta in zip(feats, img_metas): + # only one image in the batch + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + # TODO more flexible + proposals = bbox_mapping(proposal_list[0][:, :4], img_shape, + scale_factor, flip, flip_direction) + rois = bbox2roi([proposals]) + bbox_results = self._bbox_forward(x, rois) + bboxes, scores = self.bbox_head.get_bboxes( + rois, + bbox_results['cls_score'], + bbox_results['bbox_pred'], + img_shape, + scale_factor, + rescale=False, + cfg=None) + aug_bboxes.append(bboxes) + aug_scores.append(scores) + # after merging, bboxes will be rescaled to the original image size + merged_bboxes, merged_scores = merge_aug_bboxes( + aug_bboxes, aug_scores, img_metas, rcnn_test_cfg) + det_bboxes, det_labels = multiclass_nms(merged_bboxes, merged_scores, + rcnn_test_cfg.score_thr, + rcnn_test_cfg.nms, + rcnn_test_cfg.max_per_img) + return det_bboxes, det_labels + + +class MaskTestMixin(object): + + if sys.version_info >= (3, 7): + + async def async_test_mask(self, + x, + img_metas, + det_bboxes, + det_labels, + rescale=False, + mask_test_cfg=None): + """Asynchronized test for mask head without augmentation.""" + # image shape of the first image in the batch (only one) + ori_shape = img_metas[0]['ori_shape'] + scale_factor = img_metas[0]['scale_factor'] + if det_bboxes.shape[0] == 0: + segm_result = [[] for _ in range(self.mask_head.num_classes)] + else: + if rescale and not isinstance(scale_factor, + (float, torch.Tensor)): + scale_factor = det_bboxes.new_tensor(scale_factor) + _bboxes = ( + det_bboxes[:, :4] * + scale_factor if rescale else det_bboxes) + mask_rois = bbox2roi([_bboxes]) + mask_feats = self.mask_roi_extractor( + x[:len(self.mask_roi_extractor.featmap_strides)], + mask_rois) + + if self.with_shared_head: + mask_feats = self.shared_head(mask_feats) + if mask_test_cfg and mask_test_cfg.get('async_sleep_interval'): + sleep_interval = mask_test_cfg['async_sleep_interval'] + else: + sleep_interval = 0.035 + async with completed( + __name__, + 'mask_head_forward', + sleep_interval=sleep_interval): + mask_pred = self.mask_head(mask_feats) + segm_result = self.mask_head.get_seg_masks( + mask_pred, _bboxes, det_labels, self.test_cfg, ori_shape, + scale_factor, rescale) + return segm_result + + def simple_test_mask(self, + x, + img_metas, + det_bboxes, + det_labels, + rescale=False): + """Simple test for mask head without augmentation.""" + # image shapes of images in the batch + ori_shapes = tuple(meta['ori_shape'] for meta in img_metas) + scale_factors = tuple(meta['scale_factor'] for meta in img_metas) + num_imgs = len(det_bboxes) + if all(det_bbox.shape[0] == 0 for det_bbox in det_bboxes): + segm_results = [[[] for _ in range(self.mask_head.num_classes)] + for _ in range(num_imgs)] + else: + # if det_bboxes is rescaled to the original image size, we need to + # rescale it back to the testing scale to obtain RoIs. + if rescale and not isinstance(scale_factors[0], float): + scale_factors = [ + torch.from_numpy(scale_factor).to(det_bboxes[0].device) + for scale_factor in scale_factors + ] + if torch.onnx.is_in_onnx_export(): + # avoid mask_pred.split with static number of prediction + mask_preds = [] + _bboxes = [] + for i, boxes in enumerate(det_bboxes): + boxes = boxes[:, :4] + if rescale: + boxes *= scale_factors[i] + _bboxes.append(boxes) + img_inds = boxes[:, :1].clone() * 0 + i + mask_rois = torch.cat([img_inds, boxes], dim=-1) + mask_result = self._mask_forward(x, mask_rois) + mask_preds.append(mask_result['mask_pred']) + else: + _bboxes = [ + det_bboxes[i][:, :4] * + scale_factors[i] if rescale else det_bboxes[i][:, :4] + for i in range(len(det_bboxes)) + ] + mask_rois = bbox2roi(_bboxes) + mask_results = self._mask_forward(x, mask_rois) + mask_pred = mask_results['mask_pred'] + # split batch mask prediction back to each image + num_mask_roi_per_img = [ + det_bbox.shape[0] for det_bbox in det_bboxes + ] + mask_preds = mask_pred.split(num_mask_roi_per_img, 0) + + # apply mask post-processing to each image individually + segm_results = [] + for i in range(num_imgs): + if det_bboxes[i].shape[0] == 0: + segm_results.append( + [[] for _ in range(self.mask_head.num_classes)]) + else: + segm_result = self.mask_head.get_seg_masks( + mask_preds[i], _bboxes[i], det_labels[i], + self.test_cfg, ori_shapes[i], scale_factors[i], + rescale) + segm_results.append(segm_result) + return segm_results + + def aug_test_mask(self, feats, img_metas, det_bboxes, det_labels): + """Test for mask head with test time augmentation.""" + if det_bboxes.shape[0] == 0: + segm_result = [[] for _ in range(self.mask_head.num_classes)] + else: + aug_masks = [] + for x, img_meta in zip(feats, img_metas): + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + _bboxes = bbox_mapping(det_bboxes[:, :4], img_shape, + scale_factor, flip, flip_direction) + mask_rois = bbox2roi([_bboxes]) + mask_results = self._mask_forward(x, mask_rois) + # convert to numpy array to save memory + aug_masks.append( + mask_results['mask_pred'].sigmoid().cpu().numpy()) + merged_masks = merge_aug_masks(aug_masks, img_metas, self.test_cfg) + + ori_shape = img_metas[0][0]['ori_shape'] + segm_result = self.mask_head.get_seg_masks( + merged_masks, + det_bboxes, + det_labels, + self.test_cfg, + ori_shape, + scale_factor=1.0, + rescale=False) + return segm_result diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/trident_roi_head.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/trident_roi_head.py new file mode 100644 index 00000000..da3eed8f --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/roi_heads/trident_roi_head.py @@ -0,0 +1,111 @@ +import torch +from mmcv.ops import batched_nms + +from mmdet.core import (bbox2result, bbox2roi, bbox_mapping, merge_aug_bboxes, + multiclass_nms) +from mmdet.models.roi_heads.standard_roi_head import StandardRoIHead +from ..builder import HEADS + + +@HEADS.register_module() +class TridentRoIHead(StandardRoIHead): + """Trident roi head. + + Args: + num_branch (int): Number of branches in TridentNet. + test_branch_idx (int): In inference, all 3 branches will be used + if `test_branch_idx==-1`, otherwise only branch with index + `test_branch_idx` will be used. + """ + + def __init__(self, num_branch, test_branch_idx, **kwargs): + self.num_branch = num_branch + self.test_branch_idx = test_branch_idx + super(TridentRoIHead, self).__init__(**kwargs) + + def simple_test(self, + x, + proposal_list, + img_metas, + proposals=None, + rescale=False): + """Test without augmentation as follows: + + 1. Compute prediction bbox and label per branch. + 2. Merge predictions of each branch according to scores of + bboxes, i.e., bboxes with higher score are kept to give + top-k prediction. + """ + assert self.with_bbox, 'Bbox head must be implemented.' + det_bboxes_list, det_labels_list = self.simple_test_bboxes( + x, img_metas, proposal_list, self.test_cfg, rescale=rescale) + + for _ in range(len(det_bboxes_list)): + if det_bboxes_list[_].shape[0] == 0: + det_bboxes_list[_] = det_bboxes_list[_].new_empty((0, 5)) + trident_det_bboxes = torch.cat(det_bboxes_list, 0) + trident_det_labels = torch.cat(det_labels_list, 0) + + if trident_det_bboxes.numel() == 0: + det_bboxes = trident_det_bboxes.new_zeros((0, 5)) + det_labels = trident_det_bboxes.new_zeros((0, ), dtype=torch.long) + else: + nms_bboxes = trident_det_bboxes[:, :4] + nms_scores = trident_det_bboxes[:, 4].contiguous() + nms_inds = trident_det_labels + nms_cfg = self.test_cfg['nms'] + det_bboxes, keep = batched_nms(nms_bboxes, nms_scores, nms_inds, + nms_cfg) + det_labels = trident_det_labels[keep] + if self.test_cfg['max_per_img'] > 0: + det_labels = det_labels[:self.test_cfg['max_per_img']] + det_bboxes = det_bboxes[:self.test_cfg['max_per_img']] + + det_bboxes, det_labels = [det_bboxes], [det_labels] + + bbox_results = [ + bbox2result(det_bboxes[i], det_labels[i], + self.bbox_head.num_classes) + for i in range(len(det_bboxes)) + ] + + return bbox_results + + def aug_test_bboxes(self, feats, img_metas, proposal_list, rcnn_test_cfg): + """Test det bboxes with test time augmentation.""" + aug_bboxes = [] + aug_scores = [] + for x, img_meta in zip(feats, img_metas): + # only one image in the batch + img_shape = img_meta[0]['img_shape'] + scale_factor = img_meta[0]['scale_factor'] + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + + trident_bboxes, trident_scores = [], [] + for branch_idx in range(len(proposal_list)): + proposals = bbox_mapping(proposal_list[0][:, :4], img_shape, + scale_factor, flip, flip_direction) + rois = bbox2roi([proposals]) + bbox_results = self._bbox_forward(x, rois) + bboxes, scores = self.bbox_head.get_bboxes( + rois, + bbox_results['cls_score'], + bbox_results['bbox_pred'], + img_shape, + scale_factor, + rescale=False, + cfg=None) + trident_bboxes.append(bboxes) + trident_scores.append(scores) + + aug_bboxes.append(torch.cat(trident_bboxes, 0)) + aug_scores.append(torch.cat(trident_scores, 0)) + # after merging, bboxes will be rescaled to the original image size + merged_bboxes, merged_scores = merge_aug_bboxes( + aug_bboxes, aug_scores, img_metas, rcnn_test_cfg) + det_bboxes, det_labels = multiclass_nms(merged_bboxes, merged_scores, + rcnn_test_cfg.score_thr, + rcnn_test_cfg.nms, + rcnn_test_cfg.max_per_img) + return det_bboxes, det_labels diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/__init__.py new file mode 100644 index 00000000..f278821b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/__init__.py @@ -0,0 +1,16 @@ +from .builder import build_positional_encoding, build_transformer +from .gaussian_target import gaussian_radius, gen_gaussian_target +from .positional_encoding import (LearnedPositionalEncoding, + SinePositionalEncoding) +from .res_layer import ResLayer +from .transformer import (FFN, DynamicConv, MultiheadAttention, Transformer, + TransformerDecoder, TransformerDecoderLayer, + TransformerEncoder, TransformerEncoderLayer) + +__all__ = [ + 'ResLayer', 'gaussian_radius', 'gen_gaussian_target', 'MultiheadAttention', + 'FFN', 'TransformerEncoderLayer', 'TransformerEncoder', + 'TransformerDecoderLayer', 'TransformerDecoder', 'Transformer', + 'build_transformer', 'build_positional_encoding', 'SinePositionalEncoding', + 'LearnedPositionalEncoding', 'DynamicConv' +] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/builder.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/builder.py new file mode 100644 index 00000000..f362d1c9 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/builder.py @@ -0,0 +1,14 @@ +from mmcv.utils import Registry, build_from_cfg + +TRANSFORMER = Registry('Transformer') +POSITIONAL_ENCODING = Registry('Position encoding') + + +def build_transformer(cfg, default_args=None): + """Builder for Transformer.""" + return build_from_cfg(cfg, TRANSFORMER, default_args) + + +def build_positional_encoding(cfg, default_args=None): + """Builder for Position Encoding.""" + return build_from_cfg(cfg, POSITIONAL_ENCODING, default_args) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/gaussian_target.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/gaussian_target.py new file mode 100644 index 00000000..7bb7160c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/gaussian_target.py @@ -0,0 +1,185 @@ +from math import sqrt + +import torch + + +def gaussian2D(radius, sigma=1, dtype=torch.float32, device='cpu'): + """Generate 2D gaussian kernel. + + Args: + radius (int): Radius of gaussian kernel. + sigma (int): Sigma of gaussian function. Default: 1. + dtype (torch.dtype): Dtype of gaussian tensor. Default: torch.float32. + device (str): Device of gaussian tensor. Default: 'cpu'. + + Returns: + h (Tensor): Gaussian kernel with a + ``(2 * radius + 1) * (2 * radius + 1)`` shape. + """ + x = torch.arange( + -radius, radius + 1, dtype=dtype, device=device).view(1, -1) + y = torch.arange( + -radius, radius + 1, dtype=dtype, device=device).view(-1, 1) + + h = (-(x * x + y * y) / (2 * sigma * sigma)).exp() + + h[h < torch.finfo(h.dtype).eps * h.max()] = 0 + return h + + +def gen_gaussian_target(heatmap, center, radius, k=1): + """Generate 2D gaussian heatmap. + + Args: + heatmap (Tensor): Input heatmap, the gaussian kernel will cover on + it and maintain the max value. + center (list[int]): Coord of gaussian kernel's center. + radius (int): Radius of gaussian kernel. + k (int): Coefficient of gaussian kernel. Default: 1. + + Returns: + out_heatmap (Tensor): Updated heatmap covered by gaussian kernel. + """ + diameter = 2 * radius + 1 + gaussian_kernel = gaussian2D( + radius, sigma=diameter / 6, dtype=heatmap.dtype, device=heatmap.device) + + x, y = center + + height, width = heatmap.shape[:2] + + left, right = min(x, radius), min(width - x, radius + 1) + top, bottom = min(y, radius), min(height - y, radius + 1) + + masked_heatmap = heatmap[y - top:y + bottom, x - left:x + right] + masked_gaussian = gaussian_kernel[radius - top:radius + bottom, + radius - left:radius + right] + out_heatmap = heatmap + torch.max( + masked_heatmap, + masked_gaussian * k, + out=out_heatmap[y - top:y + bottom, x - left:x + right]) + + return out_heatmap + + +def gaussian_radius(det_size, min_overlap): + r"""Generate 2D gaussian radius. + + This function is modified from the `official github repo + `_. + + Given ``min_overlap``, radius could computed by a quadratic equation + according to Vieta's formulas. + + There are 3 cases for computing gaussian radius, details are following: + + - Explanation of figure: ``lt`` and ``br`` indicates the left-top and + bottom-right corner of ground truth box. ``x`` indicates the + generated corner at the limited position when ``radius=r``. + + - Case1: one corner is inside the gt box and the other is outside. + + .. code:: text + + |< width >| + + lt-+----------+ - + | | | ^ + +--x----------+--+ + | | | | + | | | | height + | | overlap | | + | | | | + | | | | v + +--+---------br--+ - + | | | + +----------+--x + + To ensure IoU of generated box and gt box is larger than ``min_overlap``: + + .. math:: + \cfrac{(w-r)*(h-r)}{w*h+(w+h)r-r^2} \ge {iou} \quad\Rightarrow\quad + {r^2-(w+h)r+\cfrac{1-iou}{1+iou}*w*h} \ge 0 \\ + {a} = 1,\quad{b} = {-(w+h)},\quad{c} = {\cfrac{1-iou}{1+iou}*w*h} + {r} \le \cfrac{-b-\sqrt{b^2-4*a*c}}{2*a} + + - Case2: both two corners are inside the gt box. + + .. code:: text + + |< width >| + + lt-+----------+ - + | | | ^ + +--x-------+ | + | | | | + | |overlap| | height + | | | | + | +-------x--+ + | | | v + +----------+-br - + + To ensure IoU of generated box and gt box is larger than ``min_overlap``: + + .. math:: + \cfrac{(w-2*r)*(h-2*r)}{w*h} \ge {iou} \quad\Rightarrow\quad + {4r^2-2(w+h)r+(1-iou)*w*h} \ge 0 \\ + {a} = 4,\quad {b} = {-2(w+h)},\quad {c} = {(1-iou)*w*h} + {r} \le \cfrac{-b-\sqrt{b^2-4*a*c}}{2*a} + + - Case3: both two corners are outside the gt box. + + .. code:: text + + |< width >| + + x--+----------------+ + | | | + +-lt-------------+ | - + | | | | ^ + | | | | + | | overlap | | height + | | | | + | | | | v + | +------------br--+ - + | | | + +----------------+--x + + To ensure IoU of generated box and gt box is larger than ``min_overlap``: + + .. math:: + \cfrac{w*h}{(w+2*r)*(h+2*r)} \ge {iou} \quad\Rightarrow\quad + {4*iou*r^2+2*iou*(w+h)r+(iou-1)*w*h} \le 0 \\ + {a} = {4*iou},\quad {b} = {2*iou*(w+h)},\quad {c} = {(iou-1)*w*h} \\ + {r} \le \cfrac{-b+\sqrt{b^2-4*a*c}}{2*a} + + Args: + det_size (list[int]): Shape of object. + min_overlap (float): Min IoU with ground truth for boxes generated by + keypoints inside the gaussian kernel. + + Returns: + radius (int): Radius of gaussian kernel. + """ + height, width = det_size + + a1 = 1 + b1 = (height + width) + c1 = width * height * (1 - min_overlap) / (1 + min_overlap) + sq1 = sqrt(b1**2 - 4 * a1 * c1) + r1 = (b1 - sq1) / (2 * a1) + + a2 = 4 + b2 = 2 * (height + width) + c2 = (1 - min_overlap) * width * height + sq2 = sqrt(b2**2 - 4 * a2 * c2) + r2 = (b2 - sq2) / (2 * a2) + + a3 = 4 * min_overlap + b3 = -2 * min_overlap * (height + width) + c3 = (min_overlap - 1) * width * height + sq3 = sqrt(b3**2 - 4 * a3 * c3) + r3 = (b3 + sq3) / (2 * a3) + return min(r1, r2, r3) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/positional_encoding.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/positional_encoding.py new file mode 100644 index 00000000..9bda2bbd --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/positional_encoding.py @@ -0,0 +1,150 @@ +import math + +import torch +import torch.nn as nn +from mmcv.cnn import uniform_init + +from .builder import POSITIONAL_ENCODING + + +@POSITIONAL_ENCODING.register_module() +class SinePositionalEncoding(nn.Module): + """Position encoding with sine and cosine functions. + + See `End-to-End Object Detection with Transformers + `_ for details. + + Args: + num_feats (int): The feature dimension for each position + along x-axis or y-axis. Note the final returned dimension + for each position is 2 times of this value. + temperature (int, optional): The temperature used for scaling + the position embedding. Default 10000. + normalize (bool, optional): Whether to normalize the position + embedding. Default False. + scale (float, optional): A scale factor that scales the position + embedding. The scale will be used only when `normalize` is True. + Default 2*pi. + eps (float, optional): A value added to the denominator for + numerical stability. Default 1e-6. + """ + + def __init__(self, + num_feats, + temperature=10000, + normalize=False, + scale=2 * math.pi, + eps=1e-6): + super(SinePositionalEncoding, self).__init__() + if normalize: + assert isinstance(scale, (float, int)), 'when normalize is set,' \ + 'scale should be provided and in float or int type, ' \ + f'found {type(scale)}' + self.num_feats = num_feats + self.temperature = temperature + self.normalize = normalize + self.scale = scale + self.eps = eps + + def forward(self, mask): + """Forward function for `SinePositionalEncoding`. + + Args: + mask (Tensor): ByteTensor mask. Non-zero values representing + ignored positions, while zero values means valid positions + for this image. Shape [bs, h, w]. + + Returns: + pos (Tensor): Returned position embedding with shape + [bs, num_feats*2, h, w]. + """ + not_mask = ~mask + y_embed = not_mask.cumsum(1, dtype=torch.float32) + x_embed = not_mask.cumsum(2, dtype=torch.float32) + if self.normalize: + y_embed = y_embed / (y_embed[:, -1:, :] + self.eps) * self.scale + x_embed = x_embed / (x_embed[:, :, -1:] + self.eps) * self.scale + dim_t = torch.arange( + self.num_feats, dtype=torch.float32, device=mask.device) + dim_t = self.temperature**(2 * (dim_t // 2) / self.num_feats) + pos_x = x_embed[:, :, :, None] / dim_t + pos_y = y_embed[:, :, :, None] / dim_t + pos_x = torch.stack( + (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), + dim=4).flatten(3) + pos_y = torch.stack( + (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), + dim=4).flatten(3) + pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) + return pos + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(num_feats={self.num_feats}, ' + repr_str += f'temperature={self.temperature}, ' + repr_str += f'normalize={self.normalize}, ' + repr_str += f'scale={self.scale}, ' + repr_str += f'eps={self.eps})' + return repr_str + + +@POSITIONAL_ENCODING.register_module() +class LearnedPositionalEncoding(nn.Module): + """Position embedding with learnable embedding weights. + + Args: + num_feats (int): The feature dimension for each position + along x-axis or y-axis. The final returned dimension for + each position is 2 times of this value. + row_num_embed (int, optional): The dictionary size of row embeddings. + Default 50. + col_num_embed (int, optional): The dictionary size of col embeddings. + Default 50. + """ + + def __init__(self, num_feats, row_num_embed=50, col_num_embed=50): + super(LearnedPositionalEncoding, self).__init__() + self.row_embed = nn.Embedding(row_num_embed, num_feats) + self.col_embed = nn.Embedding(col_num_embed, num_feats) + self.num_feats = num_feats + self.row_num_embed = row_num_embed + self.col_num_embed = col_num_embed + self.init_weights() + + def init_weights(self): + """Initialize the learnable weights.""" + uniform_init(self.row_embed) + uniform_init(self.col_embed) + + def forward(self, mask): + """Forward function for `LearnedPositionalEncoding`. + + Args: + mask (Tensor): ByteTensor mask. Non-zero values representing + ignored positions, while zero values means valid positions + for this image. Shape [bs, h, w]. + + Returns: + pos (Tensor): Returned position embedding with shape + [bs, num_feats*2, h, w]. + """ + h, w = mask.shape[-2:] + x = torch.arange(w, device=mask.device) + y = torch.arange(h, device=mask.device) + x_embed = self.col_embed(x) + y_embed = self.row_embed(y) + pos = torch.cat( + (x_embed.unsqueeze(0).repeat(h, 1, 1), y_embed.unsqueeze(1).repeat( + 1, w, 1)), + dim=-1).permute(2, 0, + 1).unsqueeze(0).repeat(mask.shape[0], 1, 1, 1) + return pos + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(num_feats={self.num_feats}, ' + repr_str += f'row_num_embed={self.row_num_embed}, ' + repr_str += f'col_num_embed={self.col_num_embed})' + return repr_str diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/res_layer.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/res_layer.py new file mode 100644 index 00000000..27902426 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/res_layer.py @@ -0,0 +1,102 @@ +from mmcv.cnn import build_conv_layer, build_norm_layer +from torch import nn as nn + + +class ResLayer(nn.Sequential): + """ResLayer to build ResNet style backbone. + + Args: + block (nn.Module): block used to build ResLayer. + inplanes (int): inplanes of block. + planes (int): planes of block. + num_blocks (int): number of blocks. + stride (int): stride of the first block. Default: 1 + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottleneck. Default: False + conv_cfg (dict): dictionary to construct and config conv layer. + Default: None + norm_cfg (dict): dictionary to construct and config norm layer. + Default: dict(type='BN') + downsample_first (bool): Downsample at the first block or last block. + False for Hourglass, True for ResNet. Default: True + """ + + def __init__(self, + block, + inplanes, + planes, + num_blocks, + stride=1, + avg_down=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + downsample_first=True, + **kwargs): + self.block = block + + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = [] + conv_stride = stride + if avg_down: + conv_stride = 1 + downsample.append( + nn.AvgPool2d( + kernel_size=stride, + stride=stride, + ceil_mode=True, + count_include_pad=False)) + downsample.extend([ + build_conv_layer( + conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=conv_stride, + bias=False), + build_norm_layer(norm_cfg, planes * block.expansion)[1] + ]) + downsample = nn.Sequential(*downsample) + + layers = [] + if downsample_first: + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=stride, + downsample=downsample, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + inplanes = planes * block.expansion + for _ in range(1, num_blocks): + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + + else: # downsample_first=False is for HourglassModule + for _ in range(num_blocks - 1): + layers.append( + block( + inplanes=inplanes, + planes=inplanes, + stride=1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=stride, + downsample=downsample, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + super(ResLayer, self).__init__(*layers) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/transformer.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/transformer.py new file mode 100644 index 00000000..cb45bde2 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/models/utils/transformer.py @@ -0,0 +1,860 @@ +import torch +import torch.nn as nn +from mmcv.cnn import (Linear, build_activation_layer, build_norm_layer, + xavier_init) + +from .builder import TRANSFORMER + + +class MultiheadAttention(nn.Module): + """A warpper for torch.nn.MultiheadAttention. + + This module implements MultiheadAttention with residual connection, + and positional encoding used in DETR is also passed as input. + + Args: + embed_dims (int): The embedding dimension. + num_heads (int): Parallel attention heads. Same as + `nn.MultiheadAttention`. + dropout (float): A Dropout layer on attn_output_weights. Default 0.0. + """ + + def __init__(self, embed_dims, num_heads, dropout=0.0): + super(MultiheadAttention, self).__init__() + assert embed_dims % num_heads == 0, 'embed_dims must be ' \ + f'divisible by num_heads. got {embed_dims} and {num_heads}.' + self.embed_dims = embed_dims + self.num_heads = num_heads + self.dropout = dropout + self.attn = nn.MultiheadAttention(embed_dims, num_heads, dropout) + self.dropout = nn.Dropout(dropout) + + def forward(self, + x, + key=None, + value=None, + residual=None, + query_pos=None, + key_pos=None, + attn_mask=None, + key_padding_mask=None): + """Forward function for `MultiheadAttention`. + + Args: + x (Tensor): The input query with shape [num_query, bs, + embed_dims]. Same in `nn.MultiheadAttention.forward`. + key (Tensor): The key tensor with shape [num_key, bs, + embed_dims]. Same in `nn.MultiheadAttention.forward`. + Default None. If None, the `query` will be used. + value (Tensor): The value tensor with same shape as `key`. + Same in `nn.MultiheadAttention.forward`. Default None. + If None, the `key` will be used. + residual (Tensor): The tensor used for addition, with the + same shape as `x`. Default None. If None, `x` will be used. + query_pos (Tensor): The positional encoding for query, with + the same shape as `x`. Default None. If not None, it will + be added to `x` before forward function. + key_pos (Tensor): The positional encoding for `key`, with the + same shape as `key`. Default None. If not None, it will + be added to `key` before forward function. If None, and + `query_pos` has the same shape as `key`, then `query_pos` + will be used for `key_pos`. + attn_mask (Tensor): ByteTensor mask with shape [num_query, + num_key]. Same in `nn.MultiheadAttention.forward`. + Default None. + key_padding_mask (Tensor): ByteTensor with shape [bs, num_key]. + Same in `nn.MultiheadAttention.forward`. Default None. + + Returns: + Tensor: forwarded results with shape [num_query, bs, embed_dims]. + """ + query = x + if key is None: + key = query + if value is None: + value = key + if residual is None: + residual = x + if key_pos is None: + if query_pos is not None and key is not None: + if query_pos.shape == key.shape: + key_pos = query_pos + if query_pos is not None: + query = query + query_pos + if key_pos is not None: + key = key + key_pos + out = self.attn( + query, + key, + value=value, + attn_mask=attn_mask, + key_padding_mask=key_padding_mask)[0] + + return residual + self.dropout(out) + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(embed_dims={self.embed_dims}, ' + repr_str += f'num_heads={self.num_heads}, ' + repr_str += f'dropout={self.dropout})' + return repr_str + + +class FFN(nn.Module): + """Implements feed-forward networks (FFNs) with residual connection. + + Args: + embed_dims (int): The feature dimension. Same as + `MultiheadAttention`. + feedforward_channels (int): The hidden dimension of FFNs. + num_fcs (int, optional): The number of fully-connected layers in + FFNs. Defaluts to 2. + act_cfg (dict, optional): The activation config for FFNs. + dropout (float, optional): Probability of an element to be + zeroed. Default 0.0. + add_residual (bool, optional): Add resudual connection. + Defaults to True. + """ + + def __init__(self, + embed_dims, + feedforward_channels, + num_fcs=2, + act_cfg=dict(type='ReLU', inplace=True), + dropout=0.0, + add_residual=True): + super(FFN, self).__init__() + assert num_fcs >= 2, 'num_fcs should be no less ' \ + f'than 2. got {num_fcs}.' + self.embed_dims = embed_dims + self.feedforward_channels = feedforward_channels + self.num_fcs = num_fcs + self.act_cfg = act_cfg + self.dropout = dropout + self.activate = build_activation_layer(act_cfg) + + layers = nn.ModuleList() + in_channels = embed_dims + for _ in range(num_fcs - 1): + layers.append( + nn.Sequential( + Linear(in_channels, feedforward_channels), self.activate, + nn.Dropout(dropout))) + in_channels = feedforward_channels + layers.append(Linear(feedforward_channels, embed_dims)) + self.layers = nn.Sequential(*layers) + self.dropout = nn.Dropout(dropout) + self.add_residual = add_residual + + def forward(self, x, residual=None): + """Forward function for `FFN`.""" + out = self.layers(x) + if not self.add_residual: + return out + if residual is None: + residual = x + return residual + self.dropout(out) + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(embed_dims={self.embed_dims}, ' + repr_str += f'feedforward_channels={self.feedforward_channels}, ' + repr_str += f'num_fcs={self.num_fcs}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'dropout={self.dropout}, ' + repr_str += f'add_residual={self.add_residual})' + return repr_str + + +class TransformerEncoderLayer(nn.Module): + """Implements one encoder layer in DETR transformer. + + Args: + embed_dims (int): The feature dimension. Same as `FFN`. + num_heads (int): Parallel attention heads. + feedforward_channels (int): The hidden dimension for FFNs. + dropout (float): Probability of an element to be zeroed. Default 0.0. + order (tuple[str]): The order for encoder layer. Valid examples are + ('selfattn', 'norm', 'ffn', 'norm') and ('norm', 'selfattn', + 'norm', 'ffn'). Default ('selfattn', 'norm', 'ffn', 'norm'). + act_cfg (dict): The activation config for FFNs. Defalut ReLU. + norm_cfg (dict): Config dict for normalization layer. Default + layer normalization. + num_fcs (int): The number of fully-connected layers for FFNs. + Default 2. + """ + + def __init__(self, + embed_dims, + num_heads, + feedforward_channels, + dropout=0.0, + order=('selfattn', 'norm', 'ffn', 'norm'), + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2): + super(TransformerEncoderLayer, self).__init__() + assert isinstance(order, tuple) and len(order) == 4 + assert set(order) == set(['selfattn', 'norm', 'ffn']) + self.embed_dims = embed_dims + self.num_heads = num_heads + self.feedforward_channels = feedforward_channels + self.dropout = dropout + self.order = order + self.act_cfg = act_cfg + self.norm_cfg = norm_cfg + self.num_fcs = num_fcs + self.pre_norm = order[0] == 'norm' + self.self_attn = MultiheadAttention(embed_dims, num_heads, dropout) + self.ffn = FFN(embed_dims, feedforward_channels, num_fcs, act_cfg, + dropout) + self.norms = nn.ModuleList() + self.norms.append(build_norm_layer(norm_cfg, embed_dims)[1]) + self.norms.append(build_norm_layer(norm_cfg, embed_dims)[1]) + + def forward(self, x, pos=None, attn_mask=None, key_padding_mask=None): + """Forward function for `TransformerEncoderLayer`. + + Args: + x (Tensor): The input query with shape [num_key, bs, + embed_dims]. Same in `MultiheadAttention.forward`. + pos (Tensor): The positional encoding for query. Default None. + Same as `query_pos` in `MultiheadAttention.forward`. + attn_mask (Tensor): ByteTensor mask with shape [num_key, + num_key]. Same in `MultiheadAttention.forward`. Default None. + key_padding_mask (Tensor): ByteTensor with shape [bs, num_key]. + Same in `MultiheadAttention.forward`. Default None. + + Returns: + Tensor: forwarded results with shape [num_key, bs, embed_dims]. + """ + norm_cnt = 0 + inp_residual = x + for layer in self.order: + if layer == 'selfattn': + # self attention + query = key = value = x + x = self.self_attn( + query, + key, + value, + inp_residual if self.pre_norm else None, + query_pos=pos, + key_pos=pos, + attn_mask=attn_mask, + key_padding_mask=key_padding_mask) + inp_residual = x + elif layer == 'norm': + x = self.norms[norm_cnt](x) + norm_cnt += 1 + elif layer == 'ffn': + x = self.ffn(x, inp_residual if self.pre_norm else None) + return x + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(embed_dims={self.embed_dims}, ' + repr_str += f'num_heads={self.num_heads}, ' + repr_str += f'feedforward_channels={self.feedforward_channels}, ' + repr_str += f'dropout={self.dropout}, ' + repr_str += f'order={self.order}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'norm_cfg={self.norm_cfg}, ' + repr_str += f'num_fcs={self.num_fcs})' + return repr_str + + +class TransformerDecoderLayer(nn.Module): + """Implements one decoder layer in DETR transformer. + + Args: + embed_dims (int): The feature dimension. Same as + `TransformerEncoderLayer`. + num_heads (int): Parallel attention heads. + feedforward_channels (int): Same as `TransformerEncoderLayer`. + dropout (float): Same as `TransformerEncoderLayer`. Default 0.0. + order (tuple[str]): The order for decoder layer. Valid examples are + ('selfattn', 'norm', 'multiheadattn', 'norm', 'ffn', 'norm') and + ('norm', 'selfattn', 'norm', 'multiheadattn', 'norm', 'ffn'). + Default the former. + act_cfg (dict): Same as `TransformerEncoderLayer`. Defalut ReLU. + norm_cfg (dict): Config dict for normalization layer. Default + layer normalization. + num_fcs (int): The number of fully-connected layers in FFNs. + """ + + def __init__(self, + embed_dims, + num_heads, + feedforward_channels, + dropout=0.0, + order=('selfattn', 'norm', 'multiheadattn', 'norm', 'ffn', + 'norm'), + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2): + super(TransformerDecoderLayer, self).__init__() + assert isinstance(order, tuple) and len(order) == 6 + assert set(order) == set(['selfattn', 'norm', 'multiheadattn', 'ffn']) + self.embed_dims = embed_dims + self.num_heads = num_heads + self.feedforward_channels = feedforward_channels + self.dropout = dropout + self.order = order + self.act_cfg = act_cfg + self.norm_cfg = norm_cfg + self.num_fcs = num_fcs + self.pre_norm = order[0] == 'norm' + self.self_attn = MultiheadAttention(embed_dims, num_heads, dropout) + self.multihead_attn = MultiheadAttention(embed_dims, num_heads, + dropout) + self.ffn = FFN(embed_dims, feedforward_channels, num_fcs, act_cfg, + dropout) + self.norms = nn.ModuleList() + # 3 norm layers in official DETR's TransformerDecoderLayer + for _ in range(3): + self.norms.append(build_norm_layer(norm_cfg, embed_dims)[1]) + + def forward(self, + x, + memory, + memory_pos=None, + query_pos=None, + memory_attn_mask=None, + target_attn_mask=None, + memory_key_padding_mask=None, + target_key_padding_mask=None): + """Forward function for `TransformerDecoderLayer`. + + Args: + x (Tensor): Input query with shape [num_query, bs, embed_dims]. + memory (Tensor): Tensor got from `TransformerEncoder`, with shape + [num_key, bs, embed_dims]. + memory_pos (Tensor): The positional encoding for `memory`. Default + None. Same as `key_pos` in `MultiheadAttention.forward`. + query_pos (Tensor): The positional encoding for `query`. Default + None. Same as `query_pos` in `MultiheadAttention.forward`. + memory_attn_mask (Tensor): ByteTensor mask for `memory`, with + shape [num_key, num_key]. Same as `attn_mask` in + `MultiheadAttention.forward`. Default None. + target_attn_mask (Tensor): ByteTensor mask for `x`, with shape + [num_query, num_query]. Same as `attn_mask` in + `MultiheadAttention.forward`. Default None. + memory_key_padding_mask (Tensor): ByteTensor for `memory`, with + shape [bs, num_key]. Same as `key_padding_mask` in + `MultiheadAttention.forward`. Default None. + target_key_padding_mask (Tensor): ByteTensor for `x`, with shape + [bs, num_query]. Same as `key_padding_mask` in + `MultiheadAttention.forward`. Default None. + + Returns: + Tensor: forwarded results with shape [num_query, bs, embed_dims]. + """ + norm_cnt = 0 + inp_residual = x + for layer in self.order: + if layer == 'selfattn': + query = key = value = x + x = self.self_attn( + query, + key, + value, + inp_residual if self.pre_norm else None, + query_pos, + key_pos=query_pos, + attn_mask=target_attn_mask, + key_padding_mask=target_key_padding_mask) + inp_residual = x + elif layer == 'norm': + x = self.norms[norm_cnt](x) + norm_cnt += 1 + elif layer == 'multiheadattn': + query = x + key = value = memory + x = self.multihead_attn( + query, + key, + value, + inp_residual if self.pre_norm else None, + query_pos, + key_pos=memory_pos, + attn_mask=memory_attn_mask, + key_padding_mask=memory_key_padding_mask) + inp_residual = x + elif layer == 'ffn': + x = self.ffn(x, inp_residual if self.pre_norm else None) + return x + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(embed_dims={self.embed_dims}, ' + repr_str += f'num_heads={self.num_heads}, ' + repr_str += f'feedforward_channels={self.feedforward_channels}, ' + repr_str += f'dropout={self.dropout}, ' + repr_str += f'order={self.order}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'norm_cfg={self.norm_cfg}, ' + repr_str += f'num_fcs={self.num_fcs})' + return repr_str + + +class TransformerEncoder(nn.Module): + """Implements the encoder in DETR transformer. + + Args: + num_layers (int): The number of `TransformerEncoderLayer`. + embed_dims (int): Same as `TransformerEncoderLayer`. + num_heads (int): Same as `TransformerEncoderLayer`. + feedforward_channels (int): Same as `TransformerEncoderLayer`. + dropout (float): Same as `TransformerEncoderLayer`. Default 0.0. + order (tuple[str]): Same as `TransformerEncoderLayer`. + act_cfg (dict): Same as `TransformerEncoderLayer`. Defalut ReLU. + norm_cfg (dict): Same as `TransformerEncoderLayer`. Default + layer normalization. + num_fcs (int): Same as `TransformerEncoderLayer`. Default 2. + """ + + def __init__(self, + num_layers, + embed_dims, + num_heads, + feedforward_channels, + dropout=0.0, + order=('selfattn', 'norm', 'ffn', 'norm'), + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2): + super(TransformerEncoder, self).__init__() + assert isinstance(order, tuple) and len(order) == 4 + assert set(order) == set(['selfattn', 'norm', 'ffn']) + self.num_layers = num_layers + self.embed_dims = embed_dims + self.num_heads = num_heads + self.feedforward_channels = feedforward_channels + self.dropout = dropout + self.order = order + self.act_cfg = act_cfg + self.norm_cfg = norm_cfg + self.num_fcs = num_fcs + self.pre_norm = order[0] == 'norm' + self.layers = nn.ModuleList() + for _ in range(num_layers): + self.layers.append( + TransformerEncoderLayer(embed_dims, num_heads, + feedforward_channels, dropout, order, + act_cfg, norm_cfg, num_fcs)) + self.norm = build_norm_layer(norm_cfg, + embed_dims)[1] if self.pre_norm else None + + def forward(self, x, pos=None, attn_mask=None, key_padding_mask=None): + """Forward function for `TransformerEncoder`. + + Args: + x (Tensor): Input query. Same in `TransformerEncoderLayer.forward`. + pos (Tensor): Positional encoding for query. Default None. + Same in `TransformerEncoderLayer.forward`. + attn_mask (Tensor): ByteTensor attention mask. Default None. + Same in `TransformerEncoderLayer.forward`. + key_padding_mask (Tensor): Same in + `TransformerEncoderLayer.forward`. Default None. + + Returns: + Tensor: Results with shape [num_key, bs, embed_dims]. + """ + for layer in self.layers: + x = layer(x, pos, attn_mask, key_padding_mask) + if self.norm is not None: + x = self.norm(x) + return x + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(num_layers={self.num_layers}, ' + repr_str += f'embed_dims={self.embed_dims}, ' + repr_str += f'num_heads={self.num_heads}, ' + repr_str += f'feedforward_channels={self.feedforward_channels}, ' + repr_str += f'dropout={self.dropout}, ' + repr_str += f'order={self.order}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'norm_cfg={self.norm_cfg}, ' + repr_str += f'num_fcs={self.num_fcs})' + return repr_str + + +class TransformerDecoder(nn.Module): + """Implements the decoder in DETR transformer. + + Args: + num_layers (int): The number of `TransformerDecoderLayer`. + embed_dims (int): Same as `TransformerDecoderLayer`. + num_heads (int): Same as `TransformerDecoderLayer`. + feedforward_channels (int): Same as `TransformerDecoderLayer`. + dropout (float): Same as `TransformerDecoderLayer`. Default 0.0. + order (tuple[str]): Same as `TransformerDecoderLayer`. + act_cfg (dict): Same as `TransformerDecoderLayer`. Defalut ReLU. + norm_cfg (dict): Same as `TransformerDecoderLayer`. Default + layer normalization. + num_fcs (int): Same as `TransformerDecoderLayer`. Default 2. + """ + + def __init__(self, + num_layers, + embed_dims, + num_heads, + feedforward_channels, + dropout=0.0, + order=('selfattn', 'norm', 'multiheadattn', 'norm', 'ffn', + 'norm'), + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2, + return_intermediate=False): + super(TransformerDecoder, self).__init__() + assert isinstance(order, tuple) and len(order) == 6 + assert set(order) == set(['selfattn', 'norm', 'multiheadattn', 'ffn']) + self.num_layers = num_layers + self.embed_dims = embed_dims + self.num_heads = num_heads + self.feedforward_channels = feedforward_channels + self.dropout = dropout + self.order = order + self.act_cfg = act_cfg + self.norm_cfg = norm_cfg + self.num_fcs = num_fcs + self.return_intermediate = return_intermediate + self.layers = nn.ModuleList() + for _ in range(num_layers): + self.layers.append( + TransformerDecoderLayer(embed_dims, num_heads, + feedforward_channels, dropout, order, + act_cfg, norm_cfg, num_fcs)) + self.norm = build_norm_layer(norm_cfg, embed_dims)[1] + + def forward(self, + x, + memory, + memory_pos=None, + query_pos=None, + memory_attn_mask=None, + target_attn_mask=None, + memory_key_padding_mask=None, + target_key_padding_mask=None): + """Forward function for `TransformerDecoder`. + + Args: + x (Tensor): Input query. Same in `TransformerDecoderLayer.forward`. + memory (Tensor): Same in `TransformerDecoderLayer.forward`. + memory_pos (Tensor): Same in `TransformerDecoderLayer.forward`. + Default None. + query_pos (Tensor): Same in `TransformerDecoderLayer.forward`. + Default None. + memory_attn_mask (Tensor): Same in + `TransformerDecoderLayer.forward`. Default None. + target_attn_mask (Tensor): Same in + `TransformerDecoderLayer.forward`. Default None. + memory_key_padding_mask (Tensor): Same in + `TransformerDecoderLayer.forward`. Default None. + target_key_padding_mask (Tensor): Same in + `TransformerDecoderLayer.forward`. Default None. + + Returns: + Tensor: Results with shape [num_query, bs, embed_dims]. + """ + intermediate = [] + for layer in self.layers: + x = layer(x, memory, memory_pos, query_pos, memory_attn_mask, + target_attn_mask, memory_key_padding_mask, + target_key_padding_mask) + if self.return_intermediate: + intermediate.append(self.norm(x)) + if self.norm is not None: + x = self.norm(x) + if self.return_intermediate: + intermediate.pop() + intermediate.append(x) + if self.return_intermediate: + return torch.stack(intermediate) + return x.unsqueeze(0) + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(num_layers={self.num_layers}, ' + repr_str += f'embed_dims={self.embed_dims}, ' + repr_str += f'num_heads={self.num_heads}, ' + repr_str += f'feedforward_channels={self.feedforward_channels}, ' + repr_str += f'dropout={self.dropout}, ' + repr_str += f'order={self.order}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'norm_cfg={self.norm_cfg}, ' + repr_str += f'num_fcs={self.num_fcs}, ' + repr_str += f'return_intermediate={self.return_intermediate})' + return repr_str + + +@TRANSFORMER.register_module() +class Transformer(nn.Module): + """Implements the DETR transformer. + + Following the official DETR implementation, this module copy-paste + from torch.nn.Transformer with modifications: + + * positional encodings are passed in MultiheadAttention + * extra LN at the end of encoder is removed + * decoder returns a stack of activations from all decoding layers + + See `paper: End-to-End Object Detection with Transformers + `_ for details. + + Args: + embed_dims (int): The feature dimension. + num_heads (int): Parallel attention heads. Same as + `nn.MultiheadAttention`. + num_encoder_layers (int): Number of `TransformerEncoderLayer`. + num_decoder_layers (int): Number of `TransformerDecoderLayer`. + feedforward_channels (int): The hidden dimension for FFNs used in both + encoder and decoder. + dropout (float): Probability of an element to be zeroed. Default 0.0. + act_cfg (dict): Activation config for FFNs used in both encoder + and decoder. Defalut ReLU. + norm_cfg (dict): Config dict for normalization used in both encoder + and decoder. Default layer normalization. + num_fcs (int): The number of fully-connected layers in FFNs, which is + used for both encoder and decoder. + pre_norm (bool): Whether the normalization layer is ordered + first in the encoder and decoder. Default False. + return_intermediate_dec (bool): Whether to return the intermediate + output from each TransformerDecoderLayer or only the last + TransformerDecoderLayer. Default False. If False, the returned + `hs` has shape [num_decoder_layers, bs, num_query, embed_dims]. + If True, the returned `hs` will have shape [1, bs, num_query, + embed_dims]. + """ + + def __init__(self, + embed_dims=512, + num_heads=8, + num_encoder_layers=6, + num_decoder_layers=6, + feedforward_channels=2048, + dropout=0.0, + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN'), + num_fcs=2, + pre_norm=False, + return_intermediate_dec=False): + super(Transformer, self).__init__() + self.embed_dims = embed_dims + self.num_heads = num_heads + self.num_encoder_layers = num_encoder_layers + self.num_decoder_layers = num_decoder_layers + self.feedforward_channels = feedforward_channels + self.dropout = dropout + self.act_cfg = act_cfg + self.norm_cfg = norm_cfg + self.num_fcs = num_fcs + self.pre_norm = pre_norm + self.return_intermediate_dec = return_intermediate_dec + if self.pre_norm: + encoder_order = ('norm', 'selfattn', 'norm', 'ffn') + decoder_order = ('norm', 'selfattn', 'norm', 'multiheadattn', + 'norm', 'ffn') + else: + encoder_order = ('selfattn', 'norm', 'ffn', 'norm') + decoder_order = ('selfattn', 'norm', 'multiheadattn', 'norm', + 'ffn', 'norm') + self.encoder = TransformerEncoder(num_encoder_layers, embed_dims, + num_heads, feedforward_channels, + dropout, encoder_order, act_cfg, + norm_cfg, num_fcs) + self.decoder = TransformerDecoder(num_decoder_layers, embed_dims, + num_heads, feedforward_channels, + dropout, decoder_order, act_cfg, + norm_cfg, num_fcs, + return_intermediate_dec) + + def init_weights(self, distribution='uniform'): + """Initialize the transformer weights.""" + # follow the official DETR to init parameters + for m in self.modules(): + if hasattr(m, 'weight') and m.weight.dim() > 1: + xavier_init(m, distribution=distribution) + + def forward(self, x, mask, query_embed, pos_embed): + """Forward function for `Transformer`. + + Args: + x (Tensor): Input query with shape [bs, c, h, w] where + c = embed_dims. + mask (Tensor): The key_padding_mask used for encoder and decoder, + with shape [bs, h, w]. + query_embed (Tensor): The query embedding for decoder, with shape + [num_query, c]. + pos_embed (Tensor): The positional encoding for encoder and + decoder, with the same shape as `x`. + + Returns: + tuple[Tensor]: results of decoder containing the following tensor. + + - out_dec: Output from decoder. If return_intermediate_dec \ + is True output has shape [num_dec_layers, bs, + num_query, embed_dims], else has shape [1, bs, \ + num_query, embed_dims]. + - memory: Output results from encoder, with shape \ + [bs, embed_dims, h, w]. + """ + bs, c, h, w = x.shape + x = x.flatten(2).permute(2, 0, 1) # [bs, c, h, w] -> [h*w, bs, c] + pos_embed = pos_embed.flatten(2).permute(2, 0, 1) + query_embed = query_embed.unsqueeze(1).repeat( + 1, bs, 1) # [num_query, dim] -> [num_query, bs, dim] + mask = mask.flatten(1) # [bs, h, w] -> [bs, h*w] + memory = self.encoder( + x, pos=pos_embed, attn_mask=None, key_padding_mask=mask) + target = torch.zeros_like(query_embed) + # out_dec: [num_layers, num_query, bs, dim] + out_dec = self.decoder( + target, + memory, + memory_pos=pos_embed, + query_pos=query_embed, + memory_attn_mask=None, + target_attn_mask=None, + memory_key_padding_mask=mask, + target_key_padding_mask=None) + out_dec = out_dec.transpose(1, 2) + memory = memory.permute(1, 2, 0).reshape(bs, c, h, w) + return out_dec, memory + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(embed_dims={self.embed_dims}, ' + repr_str += f'num_heads={self.num_heads}, ' + repr_str += f'num_encoder_layers={self.num_encoder_layers}, ' + repr_str += f'num_decoder_layers={self.num_decoder_layers}, ' + repr_str += f'feedforward_channels={self.feedforward_channels}, ' + repr_str += f'dropout={self.dropout}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'norm_cfg={self.norm_cfg}, ' + repr_str += f'num_fcs={self.num_fcs}, ' + repr_str += f'pre_norm={self.pre_norm}, ' + repr_str += f'return_intermediate_dec={self.return_intermediate_dec})' + return repr_str + + +@TRANSFORMER.register_module() +class DynamicConv(nn.Module): + """Implements Dynamic Convolution. + + This module generate parameters for each sample and + use bmm to implement 1*1 convolution. Code is modified + from the `official github repo `_ . + + Args: + in_channels (int): The input feature channel. + Defaults to 256. + feat_channels (int): The inner feature channel. + Defaults to 64. + out_channels (int, optional): The output feature channel. + When not specified, it will be set to `in_channels` + by default + input_feat_shape (int): The shape of input feature. + Defaults to 7. + act_cfg (dict): The activation config for DynamicConv. + norm_cfg (dict): Config dict for normalization layer. Default + layer normalization. + """ + + def __init__(self, + in_channels=256, + feat_channels=64, + out_channels=None, + input_feat_shape=7, + act_cfg=dict(type='ReLU', inplace=True), + norm_cfg=dict(type='LN')): + super(DynamicConv, self).__init__() + self.in_channels = in_channels + self.feat_channels = feat_channels + self.out_channels_raw = out_channels + self.input_feat_shape = input_feat_shape + self.act_cfg = act_cfg + self.norm_cfg = norm_cfg + self.out_channels = out_channels if out_channels else in_channels + + self.num_params_in = self.in_channels * self.feat_channels + self.num_params_out = self.out_channels * self.feat_channels + self.dynamic_layer = nn.Linear( + self.in_channels, self.num_params_in + self.num_params_out) + + self.norm_in = build_norm_layer(norm_cfg, self.feat_channels)[1] + self.norm_out = build_norm_layer(norm_cfg, self.out_channels)[1] + + self.activation = build_activation_layer(act_cfg) + + num_output = self.out_channels * input_feat_shape**2 + self.fc_layer = nn.Linear(num_output, self.out_channels) + self.fc_norm = build_norm_layer(norm_cfg, self.out_channels)[1] + + def forward(self, param_feature, input_feature): + """Forward function for `DynamicConv`. + + Args: + param_feature (Tensor): The feature can be used + to generate the parameter, has shape + (num_all_proposals, in_channels). + input_feature (Tensor): Feature that + interact with parameters, has shape + (num_all_proposals, in_channels, H, W). + + Returns: + Tensor: The output feature has shape + (num_all_proposals, out_channels). + """ + num_proposals = param_feature.size(0) + input_feature = input_feature.view(num_proposals, self.in_channels, + -1).permute(2, 0, 1) + + input_feature = input_feature.permute(1, 0, 2) + parameters = self.dynamic_layer(param_feature) + + param_in = parameters[:, :self.num_params_in].view( + -1, self.in_channels, self.feat_channels) + param_out = parameters[:, -self.num_params_out:].view( + -1, self.feat_channels, self.out_channels) + + # input_feature has shape (num_all_proposals, H*W, in_channels) + # param_in has shape (num_all_proposals, in_channels, feat_channels) + # feature has shape (num_all_proposals, H*W, feat_channels) + features = torch.bmm(input_feature, param_in) + features = self.norm_in(features) + features = self.activation(features) + + # param_out has shape (batch_size, feat_channels, out_channels) + features = torch.bmm(features, param_out) + features = self.norm_out(features) + features = self.activation(features) + + features = features.flatten(1) + features = self.fc_layer(features) + features = self.fc_norm(features) + features = self.activation(features) + + return features + + def __repr__(self): + """str: a string that describes the module""" + repr_str = self.__class__.__name__ + repr_str += f'(in_channels={self.in_channels}, ' + repr_str += f'feat_channels={self.feat_channels}, ' + repr_str += f'out_channels={self.out_channels_raw}, ' + repr_str += f'input_feat_shape={self.input_feat_shape}, ' + repr_str += f'act_cfg={self.act_cfg}, ' + repr_str += f'norm_cfg={self.norm_cfg})' + return repr_str diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/__init__.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/__init__.py new file mode 100644 index 00000000..ac489e2d --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/__init__.py @@ -0,0 +1,4 @@ +from .collect_env import collect_env +from .logger import get_root_logger + +__all__ = ['get_root_logger', 'collect_env'] diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/collect_env.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/collect_env.py new file mode 100644 index 00000000..89c064ac --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/collect_env.py @@ -0,0 +1,16 @@ +from mmcv.utils import collect_env as collect_base_env +from mmcv.utils import get_git_hash + +import mmdet + + +def collect_env(): + """Collect the information of the running environments.""" + env_info = collect_base_env() + env_info['MMDetection'] = mmdet.__version__ + '+' + get_git_hash()[:7] + return env_info + + +if __name__ == '__main__': + for name, val in collect_env().items(): + print(f'{name}: {val}') diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/contextmanagers.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/contextmanagers.py new file mode 100644 index 00000000..38a63926 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/contextmanagers.py @@ -0,0 +1,121 @@ +import asyncio +import contextlib +import logging +import os +import time +from typing import List + +import torch + +logger = logging.getLogger(__name__) + +DEBUG_COMPLETED_TIME = bool(os.environ.get('DEBUG_COMPLETED_TIME', False)) + + +@contextlib.asynccontextmanager +async def completed(trace_name='', + name='', + sleep_interval=0.05, + streams: List[torch.cuda.Stream] = None): + """Async context manager that waits for work to complete on given CUDA + streams.""" + if not torch.cuda.is_available(): + yield + return + + stream_before_context_switch = torch.cuda.current_stream() + if not streams: + streams = [stream_before_context_switch] + else: + streams = [s if s else stream_before_context_switch for s in streams] + + end_events = [ + torch.cuda.Event(enable_timing=DEBUG_COMPLETED_TIME) for _ in streams + ] + + if DEBUG_COMPLETED_TIME: + start = torch.cuda.Event(enable_timing=True) + stream_before_context_switch.record_event(start) + + cpu_start = time.monotonic() + logger.debug('%s %s starting, streams: %s', trace_name, name, streams) + grad_enabled_before = torch.is_grad_enabled() + try: + yield + finally: + current_stream = torch.cuda.current_stream() + assert current_stream == stream_before_context_switch + + if DEBUG_COMPLETED_TIME: + cpu_end = time.monotonic() + for i, stream in enumerate(streams): + event = end_events[i] + stream.record_event(event) + + grad_enabled_after = torch.is_grad_enabled() + + # observed change of torch.is_grad_enabled() during concurrent run of + # async_test_bboxes code + assert (grad_enabled_before == grad_enabled_after + ), 'Unexpected is_grad_enabled() value change' + + are_done = [e.query() for e in end_events] + logger.debug('%s %s completed: %s streams: %s', trace_name, name, + are_done, streams) + with torch.cuda.stream(stream_before_context_switch): + while not all(are_done): + await asyncio.sleep(sleep_interval) + are_done = [e.query() for e in end_events] + logger.debug( + '%s %s completed: %s streams: %s', + trace_name, + name, + are_done, + streams, + ) + + current_stream = torch.cuda.current_stream() + assert current_stream == stream_before_context_switch + + if DEBUG_COMPLETED_TIME: + cpu_time = (cpu_end - cpu_start) * 1000 + stream_times_ms = '' + for i, stream in enumerate(streams): + elapsed_time = start.elapsed_time(end_events[i]) + stream_times_ms += f' {stream} {elapsed_time:.2f} ms' + logger.info('%s %s %.2f ms %s', trace_name, name, cpu_time, + stream_times_ms) + + +@contextlib.asynccontextmanager +async def concurrent(streamqueue: asyncio.Queue, + trace_name='concurrent', + name='stream'): + """Run code concurrently in different streams. + + :param streamqueue: asyncio.Queue instance. + + Queue tasks define the pool of streams used for concurrent execution. + """ + if not torch.cuda.is_available(): + yield + return + + initial_stream = torch.cuda.current_stream() + + with torch.cuda.stream(initial_stream): + stream = await streamqueue.get() + assert isinstance(stream, torch.cuda.Stream) + + try: + with torch.cuda.stream(stream): + logger.debug('%s %s is starting, stream: %s', trace_name, name, + stream) + yield + current = torch.cuda.current_stream() + assert current == stream + logger.debug('%s %s has finished, stream: %s', trace_name, + name, stream) + finally: + streamqueue.task_done() + streamqueue.put_nowait(stream) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/logger.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/logger.py new file mode 100644 index 00000000..6fc6e6b4 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/logger.py @@ -0,0 +1,19 @@ +import logging + +from mmcv.utils import get_logger + + +def get_root_logger(log_file=None, log_level=logging.INFO): + """Get root logger. + + Args: + log_file (str, optional): File path of log. Defaults to None. + log_level (int, optional): The level of logger. + Defaults to logging.INFO. + + Returns: + :obj:`logging.Logger`: The obtained logger + """ + logger = get_logger(name='mmdet', log_file=log_file, log_level=log_level) + + return logger diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/profiling.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/profiling.py new file mode 100644 index 00000000..4be9222c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/profiling.py @@ -0,0 +1,39 @@ +import contextlib +import sys +import time + +import torch + +if sys.version_info >= (3, 7): + + @contextlib.contextmanager + def profile_time(trace_name, + name, + enabled=True, + stream=None, + end_stream=None): + """Print time spent by CPU and GPU. + + Useful as a temporary context manager to find sweet spots of code + suitable for async implementation. + """ + if (not enabled) or not torch.cuda.is_available(): + yield + return + stream = stream if stream else torch.cuda.current_stream() + end_stream = end_stream if end_stream else stream + start = torch.cuda.Event(enable_timing=True) + end = torch.cuda.Event(enable_timing=True) + stream.record_event(start) + try: + cpu_start = time.monotonic() + yield + finally: + cpu_end = time.monotonic() + end_stream.record_event(end) + end.synchronize() + cpu_time = (cpu_end - cpu_start) * 1000 + gpu_time = start.elapsed_time(end) + msg = f'{trace_name} {name} cpu_time {cpu_time:.2f} ms ' + msg += f'gpu_time {gpu_time:.2f} ms stream {stream}' + print(msg, end_stream) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/util_mixins.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/util_mixins.py new file mode 100644 index 00000000..69669a3c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/utils/util_mixins.py @@ -0,0 +1,104 @@ +"""This module defines the :class:`NiceRepr` mixin class, which defines a +``__repr__`` and ``__str__`` method that only depend on a custom ``__nice__`` +method, which you must define. This means you only have to overload one +function instead of two. Furthermore, if the object defines a ``__len__`` +method, then the ``__nice__`` method defaults to something sensible, otherwise +it is treated as abstract and raises ``NotImplementedError``. + +To use simply have your object inherit from :class:`NiceRepr` +(multi-inheritance should be ok). + +This code was copied from the ubelt library: https://github.com/Erotemic/ubelt + +Example: + >>> # Objects that define __nice__ have a default __str__ and __repr__ + >>> class Student(NiceRepr): + ... def __init__(self, name): + ... self.name = name + ... def __nice__(self): + ... return self.name + >>> s1 = Student('Alice') + >>> s2 = Student('Bob') + >>> print(f's1 = {s1}') + >>> print(f's2 = {s2}') + s1 = + s2 = + +Example: + >>> # Objects that define __len__ have a default __nice__ + >>> class Group(NiceRepr): + ... def __init__(self, data): + ... self.data = data + ... def __len__(self): + ... return len(self.data) + >>> g = Group([1, 2, 3]) + >>> print(f'g = {g}') + g = +""" +import warnings + + +class NiceRepr(object): + """Inherit from this class and define ``__nice__`` to "nicely" print your + objects. + + Defines ``__str__`` and ``__repr__`` in terms of ``__nice__`` function + Classes that inherit from :class:`NiceRepr` should redefine ``__nice__``. + If the inheriting class has a ``__len__``, method then the default + ``__nice__`` method will return its length. + + Example: + >>> class Foo(NiceRepr): + ... def __nice__(self): + ... return 'info' + >>> foo = Foo() + >>> assert str(foo) == '' + >>> assert repr(foo).startswith('>> class Bar(NiceRepr): + ... pass + >>> bar = Bar() + >>> import pytest + >>> with pytest.warns(None) as record: + >>> assert 'object at' in str(bar) + >>> assert 'object at' in repr(bar) + + Example: + >>> class Baz(NiceRepr): + ... def __len__(self): + ... return 5 + >>> baz = Baz() + >>> assert str(baz) == '' + """ + + def __nice__(self): + """str: a "nice" summary string describing this module""" + if hasattr(self, '__len__'): + # It is a common pattern for objects to use __len__ in __nice__ + # As a convenience we define a default __nice__ for these objects + return str(len(self)) + else: + # In all other cases force the subclass to overload __nice__ + raise NotImplementedError( + f'Define the __nice__ method for {self.__class__!r}') + + def __repr__(self): + """str: the string of the module""" + try: + nice = self.__nice__() + classname = self.__class__.__name__ + return f'<{classname}({nice}) at {hex(id(self))}>' + except NotImplementedError as ex: + warnings.warn(str(ex), category=RuntimeWarning) + return object.__repr__(self) + + def __str__(self): + """str: the string of the module""" + try: + classname = self.__class__.__name__ + nice = self.__nice__() + return f'<{classname}({nice})>' + except NotImplementedError as ex: + warnings.warn(str(ex), category=RuntimeWarning) + return object.__repr__(self) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/mmdet/version.py b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/version.py new file mode 100644 index 00000000..06ce7df0 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/mmdet/version.py @@ -0,0 +1,19 @@ +# Copyright (c) Open-MMLab. All rights reserved. + +__version__ = '2.8.0' +short_version = __version__ + + +def parse_version_info(version_str): + version_info = [] + for x in version_str.split('.'): + if x.isdigit(): + version_info.append(int(x)) + elif x.find('rc') != -1: + patch_version = x.split('rc') + version_info.append(int(patch_version[0])) + version_info.append(f'rc{patch_version[1]}') + return tuple(version_info) + + +version_info = parse_version_info(__version__) diff --git a/PyTorch/NLP/Conformer-main/mmdetection/pytest.ini b/PyTorch/NLP/Conformer-main/mmdetection/pytest.ini new file mode 100644 index 00000000..9796e871 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/pytest.ini @@ -0,0 +1,7 @@ +[pytest] +addopts = --xdoctest --xdoctest-style=auto +norecursedirs = .git ignore build __pycache__ data docker docs .eggs + +filterwarnings= default + ignore:.*No cfgstr given in Cacher constructor or call.*:Warning + ignore:.*Define the __nice__ method for.*:Warning diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements.txt new file mode 100644 index 00000000..6981bd72 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements.txt @@ -0,0 +1,4 @@ +-r requirements/build.txt +-r requirements/optional.txt +-r requirements/runtime.txt +-r requirements/tests.txt diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements/build.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements/build.txt new file mode 100644 index 00000000..d8a13b75 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements/build.txt @@ -0,0 +1,4 @@ +# These must be installed before building mmdetection +cython +numpy +einops diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements/docs.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements/docs.txt new file mode 100644 index 00000000..89fbf86c --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements/docs.txt @@ -0,0 +1,4 @@ +recommonmark +sphinx +sphinx_markdown_tables +sphinx_rtd_theme diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements/optional.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements/optional.txt new file mode 100644 index 00000000..35b5242b --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements/optional.txt @@ -0,0 +1,6 @@ +albumentations>=0.3.2 +cityscapesscripts +imagecorruptions +mmlvis +scipy +sklearn diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements/readthedocs.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements/readthedocs.txt new file mode 100644 index 00000000..0542bfce --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements/readthedocs.txt @@ -0,0 +1,3 @@ +mmcv +torch +torchvision diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements/runtime.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements/runtime.txt new file mode 100644 index 00000000..8eb0c3db --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements/runtime.txt @@ -0,0 +1,5 @@ +matplotlib +mmpycocotools +numpy +six +terminaltables diff --git a/PyTorch/NLP/Conformer-main/mmdetection/requirements/tests.txt b/PyTorch/NLP/Conformer-main/mmdetection/requirements/tests.txt new file mode 100644 index 00000000..974d4159 --- /dev/null +++ b/PyTorch/NLP/Conformer-main/mmdetection/requirements/tests.txt @@ -0,0 +1,11 @@ +asynctest +codecov +flake8 +interrogate +isort==4.3.21 +# Note: used for kwarray.group_items, this may be ported to mmcv in the future. +kwarray +pytest +ubelt +xdoctest>=0.10.0 +yapf diff --git a/PyTorch/NLP/Conformer-main/mmdetection/resources/coco_test_12510.jpg b/PyTorch/NLP/Conformer-main/mmdetection/resources/coco_test_12510.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1271ae1d8a3e9b052d06e72f7b764887d171d96e GIT binary patch literal 183096 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