From 8e57a2e5a8b07937a6c84d40ec8868020ad8bb41 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Mon, 10 Mar 2025 11:17:38 -0700 Subject: [PATCH 01/28] First commit for forked branch. --- models/retinalOCT_RPD_segmentation/LICENSE | 25 + .../configs/inference.yaml | 23 + .../configs/inference_yb.yaml | 26 + .../configs/large_files.yaml | 5 + .../configs/metadata.json | 101 ++ .../docs/Figure1.jpg | Bin 0 -> 192692 bytes .../docs/README.md | 155 +++ .../docs/Table2.gif | Bin 0 -> 39501 bytes .../scripts/Base-RCNN-FPN.yaml | 41 + .../scripts/Ensembler.py | 117 +++ .../scripts/__init__.py | 1 + .../scripts/analysis_lib.py | 946 ++++++++++++++++++ .../scripts/datasets/__init__.py | 0 .../scripts/datasets/data.py | 112 +++ .../scripts/datasets/volReader.py | 335 +++++++ .../scripts/inference.py | 237 +++++ .../scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml | 56 ++ .../scripts/table_styles.py | 41 + .../scripts/working.yaml | 56 ++ .../scripts/ybpres.mplstyle | 6 + 20 files changed, 2283 insertions(+) create mode 100644 models/retinalOCT_RPD_segmentation/LICENSE create mode 100644 models/retinalOCT_RPD_segmentation/configs/inference.yaml create mode 100644 models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml create mode 100644 models/retinalOCT_RPD_segmentation/configs/large_files.yaml create mode 100644 models/retinalOCT_RPD_segmentation/configs/metadata.json create mode 100644 models/retinalOCT_RPD_segmentation/docs/Figure1.jpg create mode 100644 models/retinalOCT_RPD_segmentation/docs/README.md create mode 100644 models/retinalOCT_RPD_segmentation/docs/Table2.gif create mode 100644 models/retinalOCT_RPD_segmentation/scripts/Base-RCNN-FPN.yaml create mode 100644 models/retinalOCT_RPD_segmentation/scripts/Ensembler.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/__init__.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/datasets/__init__.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/datasets/data.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/inference.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml create mode 100644 models/retinalOCT_RPD_segmentation/scripts/table_styles.py create mode 100644 models/retinalOCT_RPD_segmentation/scripts/working.yaml create mode 100644 models/retinalOCT_RPD_segmentation/scripts/ybpres.mplstyle diff --git a/models/retinalOCT_RPD_segmentation/LICENSE b/models/retinalOCT_RPD_segmentation/LICENSE new file mode 100644 index 00000000..dc32dc5a --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/LICENSE @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2022, uw-biomedical-ml +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/models/retinalOCT_RPD_segmentation/configs/inference.yaml b/models/retinalOCT_RPD_segmentation/configs/inference.yaml new file mode 100644 index 00000000..35336773 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/configs/inference.yaml @@ -0,0 +1,23 @@ +imports: +- $import scripts +- $import scripts.inference + +args: + run_extract : False + input_dir : "/path/to/data" + extracted_dir : "/path/to/extracted/data" + input_format : "dicom" + create_dataset : True + dataset_name : "my_dataset_name" + + output_dir : "/path/to/model/output" + run_inference : True + create_tables : True + +# create visuals + binary_mask : False + binary_mask_overlay : True + instance_mask_overlay : False + +inference: +- $scripts.inference.main(@args) \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml b/models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml new file mode 100644 index 00000000..488de340 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml @@ -0,0 +1,26 @@ +imports: +- $import scripts +- $import scripts.inference + +args: + run_extract : False + # input_dir : "/data/amd-data/cera-rpddata/Himeesh DICOM/Folder 1" + # extracted_dir : "/data/yelena/monaiRPD/extracted_dicom" + # input_format : "dicom" + input_dir : "/data/amd-data/cera-rpddata/RPD_Himeesh_v2" + extracted_dir : "/data/yelena/monaiRPD/extracted_vol" + input_format : "vol" + create_dataset : False + dataset_name : "monai_vol" + + output_dir : "/data/yelena/monaiRPD/output_vol" + run_inference : False + create_tables : False + +# create visuals + binary_mask : False + binary_mask_overlay : False + instance_mask_overlay : False + +inference: +- $scripts.inference.main(@args) \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/configs/large_files.yaml b/models/retinalOCT_RPD_segmentation/configs/large_files.yaml new file mode 100644 index 00000000..e4e5e95d --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/configs/large_files.yaml @@ -0,0 +1,5 @@ +large_files: + - path: "models/models.zip" + url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/models.zip" + hash_val: "" + hash_type: "" \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json new file mode 100644 index 00000000..cbea63c3 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -0,0 +1,101 @@ +{ + "version": "0.0.1", + "changelog": { + "0.0.1": "Initial version" + }, + "monai_version": "1.1.0", + "pytorch_version": "1.10.0", + "numpy_version": "1.21.2", + "required_packages_version": { + "opencv-python-headless": "4.11.0.86", + "pandas": "1.3.5", + "seaborn": "0.12.2", + "scikit-learn": "1.0.2", + "configargparse": "1.7", + "progressbar": "2.5", + "pydicom": "2.4.4", + "fire": "0.7.0", + "jinja2": "3.1.5", + "detectron2": "0.6+cu113" + }, + "task": "Reticular Pseudodrusen (RPD) instance segmentation.", + "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", + "authors": "Yelena Bagdasarova, Scott Song", + "copyright": "Copyright (c) 2022, uw-biomedical-ml", +"network_data_format": { + "inputs": { + "image": { + "type": "image", + "format": "PNG", + "modality": "OCT", + "num_channels": 1, + "spatial_shape":[496,1024], + "dtype": "int16", + "value_range": [0,256], + "is_patch_data": false, + "channel_def": {"0": "image"} + } + }, + "preprocessed_data_sources": { + "vol_file": { + "type": "image", + "format": "VOL", + "modality": "OCT", + "num_channels": 1, + "spatial_shape":[496,1024,"D"], + "dtype": "int16", + "value_range": [0,256], + "description": "The pixel array of each OCT slice is extracted with volreader and the png files saved to ////_oct_.png on disk, where is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " + + }, + "dicom_series": { + "type": "image", + "format": "DICOM", + "modality": "OCT", + "SOP class UID" : "1.2.840.10008.5.1.4.1.1.77.1.5.4", + "num_channels": 1, + "spatial_shape":[496,1024,"D"], + "dtype": "int16", + "value_range": [0,256], + "description": "The pixel array of each OCT slice is extracted with pydicom and the png files saved to //_oct_.png on disk, where is the slice number. " + } + }, + "outputs": { + "instances": { + "type": "dictionary", + "format": "COCO", + "modality": "n/a", + "num_channels": 1, + "spatial_shape": [496,1024], + "channel_def": {"0": "RPD"}, + "description": "This output is a JSON file in COCO Instance Segmentation format, containing bounding boxes, segmentation masks, and output probabilities for detected instances." + } + }, + "post_processed_outputs": { + "binary segmentation": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [496,1024], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a binary segmentation mask for a single OCT slice from the input volume. The segmentation masks are stacked in the same order as the original OCT slices." + }, + "binary segmentation overlay": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [496,1024], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." + }, + "instance segmentation overlay": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [496,1024], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." + } + } + } +} \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/docs/Figure1.jpg b/models/retinalOCT_RPD_segmentation/docs/Figure1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3964f0ef7647c1ccdec8ad9b59df9b4fd0d2fc1 GIT binary patch literal 192692 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

~L|1T1ofDBHxUHfg) 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 z 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 Is2q>}A1lEURR910 literal 0 HcmV?d00001 diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md new file mode 100644 index 00000000..d717514c --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -0,0 +1,155 @@ + +# RPD OCT Segmentation +### **Authors** +Himeesh Kumar, Yelena Bagdasarova, Scott Song, Doron G. Hickey, Amy C. Cohn, Mali Okada, Robert P. Finger, Jan H. Terheyden, Ruth E. Hogg, Pierre-Henry Gabrielle, Louis Arnould, Maxime Jannaud, Xavier Hadoux, Peter van Wijngaarden, Carla J. Abbott, Lauren A.B. Hodgson, Roy Schwartz, Adnan Tufail, Emily Y. Chew, Cecilia S. Lee, Erica L. Fletcher, Melanie Bahlo, Brendan R.E. Ansell, Alice Pébay, Robyn H. Guymer, Aaron Y. Lee, Zhichao Wu + +### **Tags** +Reticular Pseudodrusen, AMD, OCT, Segmentation + +## **Model Description** +This model detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans. The instance segmentation model used a Mask-RCNN [1] head with the ResNeXt-101-32x8d-FPN [2] backbone (pretrained on ImageNet) implemented via the Detectron2 framework [3]. The model produces outputs that consist of bounding boxes and segmentation masks that delineate the coordinates and pixels of each instance detected, which are assigned a corresponding output probability. A tuneable probability threshold can then be applied to finalise the binary detection of an RPD instance. + +Five segmentation models using these RPD instance labels on the OCT B-scans were trained based on five-fold cross-validation which were used to form a final ensemble model using soft voting (see supplementary material of paper for more information on model training.) + +## **Data** +The model was trained using the prospectively-collected, baseline OCT scans (prior to any treatments) of individuals enrolled in the LEAD study [4] imaged using Heidelberg Spectralis HRA+OCT. OCT B-scans from 200 eyes from 100 individuals in the LEAD study were randomly selected to undergo manual annotations of RPD by a single grader (HK) at the pixel level, following training from two senior investigators (RHG and ZW). Only definite RPD lesions, defined as subretinal hyperreflective accumulations that altered the contour of, or broke through, the overlying photoreceptor ellipsoid zone on the OCT B-scans were annotated. + +The model was then internally tested in a different set of OCT scans from 125 eyes from 92 individuals from the LEAD study, and externally tested on five independent datasets: the MACUSTAR study [5], the Northern Ireland Cohort for Longitudinal Study of Ageing (NICOLA) study [6], the Montrachet study [7], AMD observational studies at the University of Bonn, Germany (UB), and a routine clinical care cohort seen at the University of Washington (UW). The presence of RPD was graded either as part of each study (MACUSTAR and UB datasets) or graded by one of the study investigators (HK; in the NICOLA, UW, and Montrachet datasets). All these studies defined RPD based on the presence of five or more definite lesions on more than one OCT B-scan that corresponded to hyporeflective lesions seen on near-infrared reflectance imaging. + +#### **Preprocessing** +Scans were kept at native resolution (1024 x 496 pixels). + +## **Performance** +In the external test datasets, the overall performance for detecting RPD in a volume scan was (AUC = 0·94; 95% CI = 0·92–0·97). In the internal test dataset, the Dice coefficient (DSC) between the model and manual annotations by retinal specialists for each B-scan was caculated and the average over the dataset is listed in the table below. Note that the DSC was assigned a value of 1·0 to all pairwise comparisons where no pixels on a B-scan were labelled as having RPD. + +![](Table2.gif) + +![](Figure1.jpg) + +For more details regarding evaluation results, please see Results section of paper. + +## INSTALLATION +This bundle can be installed using docker by navigating to the RPDBundle directory and running +``` +docker build -t : . +``` + +## USAGE +The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: + +``` +imports: +- $import scripts +- $import scripts.inference + +args: + run_extract : False + input_dir : "/path/to/data" + extracted_dir : "/path/to/extracted/data" + input_format : "dicom" + create_dataset : True + dataset_name : "my_dataset_name" + + output_dir : "/path/to/model/output" + run_inference : True + create_tables : True + +# create visuals + binary_mask : False + binary_mask_overlay : True + instance_mask_overlay : False + +inference: +- $scripts.inference.main(@args) +``` +Then in your bash shell run +``` +BUNDLE="/path/to/budle/RPDBundle" + +python -m monai.bundle run inference \ + --bundle_root "$BUNDLE" \ + --config_file "$BUNDLE/configs/inference.yaml" \ + --meta_file "$BUNDLE/configs/metadata.json" +``` +### VOL/DICOM EXTRACTION +If extracting DICOM or VOL files: +* set `run_extract` to `True` +* specify `input_dir`, the path to the directory that contains the VOL or DICOM files +* specify `extracted_dir`, the path to the directory where extracted images will be stored +* set `input_format` to "dicom" or "vol" + +The VOL or DICOM files can be in a nested hierarchy of folders, and all files in that directory with a VOL or DICOM extension will be extracted. + +For DICOM files, each OCT slice will be saved as a png file to `//_oct_.png` on disk, where `` is the slice number. + +For VOL files, each OCT slice will be saved as a png file to `////_oct_.png` on disk, where `` is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " + +### DATASET PACKAGING +Once you have the scans in PNG format, you can create a "dataset" in Detectron2 dictionary format for model consumption: +* set `create_dataset` to `True` +* set `dataset_name` to the chosen name of your dataset + +The dataset dictionary will be saved as pickle file in `////RPDBundle/datasets/.pk` + +### INFERENCE +To run inference on your dataset: +* set `dataset_name` to the name of your dataset which you create with the previous step and resides in `////RPDBundle/datasets/.pk` +* set `output_dir`, the path to the directory where model predictions and other data will be stored. +* set `run_inference` to `True` + +The final ensembled predictions will be saved in COCO Instance Segmentation format in `coco_instances_results.json` in the output directory. The output directory will also be populated with five folders with the preffix 'fold' which contain predictions from the individual models of the ensemble. + +### SUMMARY TABLES and VISUAL OUTPUT +Tables and images can be created from the predictions and written to the output directory. +These tables can be created by setting `create_tables` to `True`: +* HTML table called `dfimg_.html` indexed by OCT-B scan with columns listing the detected number of RPD instances (dt_instances), pixels (dt_pixels), and horizontal pixels (dt_xpxs) in that B-scan. +* HTML table called `dfvol_.html` indexed by OCT volume with columns listing the detected number of RPD instances (dt_instances), pixels (dt_pixels), and horizontal pixels (dt_xpxs) in that volume. + +The predicted segmentations can be output as multi-page TIFFs, where each TIFF file corresponds to an input volume of the dataset, and each page to an OCT slice from the volume in original order. The output images can be binary masks, binary masks overlaying the original B-scan, and instance masks overlaying the original B-scan. Set the `binary_mask`, `binary_mask_overlay` and `instance_mask_overlay` flags in the yaml file to `True` accordingly. + +## **System Configuration** +Inference on one Nvidia A100 gpu takes about 0.041 s/batch of 14 images, about 3G of gpu memory, and 6G of RAM. + +## **Limitations** +This model has not been tested for robustness of performance on OCTs imaged with other devices and with different scan parameters. + +## **Citation Info** + +``` +@article {Kumar2024.09.11.24312817, + author = {Kumar, Himeesh and Bagdasarova, Yelena and Song, Scott and Hickey, Doron G. and Cohn, Amy C. and Okada, Mali and Finger, Robert P. and Terheyden, Jan H. and Hogg, Ruth E. and Gabrielle, Pierre-Henry and Arnould, Louis and Jannaud, Maxime and Hadoux, Xavier and van Wijngaarden, Peter and Abbott, Carla J. and Hodgson, Lauren A.B. and Schwartz, Roy and Tufail, Adnan and Chew, Emily Y. and Lee, Cecilia S. and Fletcher, Erica L. and Bahlo, Melanie and Ansell, Brendan R.E. and P{\'e}bay, Alice and Guymer, Robyn H. and Lee, Aaron Y. and Wu, Zhichao}, + title = {Deep Learning-Based Detection of Reticular Pseudodrusen in Age-Related Macular Degeneration on Optical Coherence Tomography}, + elocation-id = {2024.09.11.24312817}, + year = {2024}, + doi = {10.1101/2024.09.11.24312817}, + publisher = {Cold Spring Harbor Laboratory Press}, + URL = {https://www.medrxiv.org/content/early/2024/09/12/2024.09.11.24312817}, + eprint = {https://www.medrxiv.org/content/early/2024/09/12/2024.09.11.24312817.full.pdf}, + journal = {medRxiv} +} +``` + +## **References** +[1]: He, Kaiming, Georgia Gkioxari, Piotr Dollár, and Ross Girshick. "Mask R-CNN." In Proceedings of the IEEE international conference on computer vision (ICCV), pp. 2961-2969. 2017. + +[2]: Xie, Saining, Ross Girshick, Piotr Dollár, Zhuowen Tu, and Kaiming He. "Aggregated residual transformations for deep neural networks." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1492-1500. 2017. + +[3]: Wu, Yuxin, Alexander Kirillov, Francisco Massa, Wan-Yen Lo, and Ross Girshick. "Detectron2." arXiv preprint arXiv:1902.09615 (2019). + +[4]: Liu X, Faes L, Kale AU, et al. A comparison of deep learning performance against health-care professionals in detecting diseases from medical imaging: a systematic review and meta-analysis. The Lancet Digital Health. 2019;1(6):e271–e97. + +[5]: Finger RP, Schmitz-Valckenberg S, Schmid M, et al. MACUSTAR: Development and Clinical Validation of Functional, Structural, and Patient-Reported Endpoints in Intermediate Age-Related Macular Degeneration. Ophthalmologica. 2019;241(2):61–72. + +[6]: Hogg RE, Wright DM, Quinn NB, et al. Prevalence and risk factors for age-related macular degeneration in a population-based cohort study of older adults in Northern Ireland using multimodal imaging: NICOLA Study. Br J Ophthalmol. 2022:bjophthalmol-2021-320469. + +[7]: Gabrielle P-H, Seydou A, Arnould L, et al. Subretinal Drusenoid Deposits in the Elderly in a Population-Based Study (the Montrachet Study). Invest Ophthalmol Vis Sci. 2019;60(14):4838–48. + + + + + + + + + + diff --git a/models/retinalOCT_RPD_segmentation/docs/Table2.gif b/models/retinalOCT_RPD_segmentation/docs/Table2.gif new file mode 100644 index 0000000000000000000000000000000000000000..d69eead0f2faf49ee08411004153ef047c440069 GIT binary patch literal 39501 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 z�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�)o!1(kC$rP#}yWgN+Gp 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 Wx6?as+YXndy*f2qzKqQPi~bK-=AMNB literal 0 HcmV?d00001 diff --git a/models/retinalOCT_RPD_segmentation/scripts/Base-RCNN-FPN.yaml b/models/retinalOCT_RPD_segmentation/scripts/Base-RCNN-FPN.yaml new file mode 100644 index 00000000..7ee168fe --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/Base-RCNN-FPN.yaml @@ -0,0 +1,41 @@ +MODEL: + META_ARCHITECTURE: "GeneralizedRCNN" + BACKBONE: + NAME: "build_resnet_fpn_backbone" + RESNETS: + OUT_FEATURES: ["res2", "res3", "res4", "res5"] + FPN: + IN_FEATURES: ["res2", "res3", "res4", "res5"] + ANCHOR_GENERATOR: + SIZES: [[32], [64], [128], [256], [512]] # One size for each in feature map + ASPECT_RATIOS: [[0.5, 1.0, 2.0]] # Three aspect ratios (same for all in feature maps) + RPN: + IN_FEATURES: ["p2", "p3", "p4", "p5", "p6"] + PRE_NMS_TOPK_TRAIN: 2000 # Per FPN level + PRE_NMS_TOPK_TEST: 1000 # Per FPN level + # Detectron1 uses 2000 proposals per-batch, + # (See "modeling/rpn/rpn_outputs.py" for details of this legacy issue) + # which is approximately 1000 proposals per-image since the default batch size for FPN is 2. + POST_NMS_TOPK_TRAIN: 1000 + POST_NMS_TOPK_TEST: 1000 + ROI_HEADS: + NAME: "StandardROIHeads" + IN_FEATURES: ["p2", "p3", "p4", "p5"] + ROI_BOX_HEAD: + NAME: "FastRCNNConvFCHead" + NUM_FC: 2 + POOLER_RESOLUTION: 7 + ROI_MASK_HEAD: + NAME: "MaskRCNNConvUpsampleHead" + NUM_CONV: 4 + POOLER_RESOLUTION: 14 +SOLVER: + IMS_PER_BATCH: 14 + BASE_LR: 0.02 + STEPS: (60000, 80000) + MAX_ITER: 90000 +INPUT: + MIN_SIZE_TRAIN: (496,) +VERSION: 2 +DATALOADER: + FILTER_EMPTY_ANNOTATIONS: False diff --git a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py new file mode 100644 index 00000000..d57a76e6 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py @@ -0,0 +1,117 @@ +from pycocotools.coco import COCO +import pandas as pd +from torchvision.ops.boxes import box_iou,box_convert +import torch +import numpy as np +import os +import json +from tqdm import tqdm + +class NpEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, np.integer): + return int(obj) + elif isinstance(obj, np.floating): + return float(obj) + elif isinstance(obj, np.ndarray): + return obj.tolist() + else: + return super(NpEncoder, self).default(obj) + +class Ensembler(): + def __init__(self,output_dir,dataset_name,grplist,iou_thresh,coco_gt_path=None,coco_instances_results_fname=None): + self.output_dir = output_dir + self.dataset_name=dataset_name + self.grplist = grplist + self.iou_thresh=iou_thresh + self.n_detectors = len(grplist) + + if coco_gt_path is None: + fname_gt = os.path.join(output_dir,dataset_name +"_coco_format.json") + else: + fname_gt = coco_gt_path + + if coco_instances_results_fname is None: + fname_dt = "coco_instances_results.json" + else: + fname_dt = coco_instances_results_fname + + #load in ground truth (form image lists) + coco_gt = COCO(fname_gt) + #populate detector truths + dtlist = [] + for grp in grplist: + fname = os.path.join(output_dir,grp,fname_dt) + dtlist.append(coco_gt.loadRes(fname)) + print('Successfully loaded {} into memory. {} instance detected.\n'.format(fname,len(dtlist[-1].anns))) + + self.coco_gt = coco_gt + self.cats = [cat['id'] for cat in self.coco_gt.dataset['categories']] + self.dtlist = dtlist + self.results=[] + + print('Working with {} models, {} categories, and {} images.'.format(self.n_detectors,len(self.cats),len(self.coco_gt.imgs.keys()))) + + def mean_score_nms(self): + def nik_merge(lsts): + """Niklas B. https://github.com/rikpg/IntersectionMerge/blob/master/core.py""" + sets = [set(lst) for lst in lsts if lst] + merged = 1 + while merged: + merged = 0 + results = [] + while sets: + common, rest = sets[0], sets[1:] + sets = [] + for x in rest: + if x.isdisjoint(common): + sets.append(x) + else: + merged = 1 + common |= x + results.append(common) + sets = results + return sets + winning_list = [] + print('Computing mean score non-max suppression ensembling for {} images.'.format(len(self.coco_gt.imgs.keys()))) + for img in tqdm(self.coco_gt.imgs.keys()): + #print(img) + df = pd.DataFrame() #a dataframe of detections + obj_set = set() #a set of objects (frozensets) + for i,coco_dt in enumerate(self.dtlist): #for each detector append predictions to df + df = df.append(pd.DataFrame(coco_dt.imgToAnns[img]).assign(det=i),ignore_index=True) + if not df.empty: + for cat in self.cats: #for each category + dfcat = df[df['category_id']==cat] + ts = box_convert(torch.tensor(dfcat['bbox']),in_fmt='xywh',out_fmt='xyxy') #list of tensor boxes for cateogory + iou_bool = np.array((box_iou(ts,ts)>self.iou_thresh)) #compute IoU matrix and threshold + for i in range(len(dfcat)): #for each detection in that category + fset = frozenset(dfcat.index[iou_bool[i]]) + obj_set.add(fset) #compute set of sets representing objects + #find overlapping sets + + # for fs in obj_set: #for existing sets + # if fs&fset: #check for + # fsnew = fs.union(fset) + # obj_set.remove(fs) + # obj_set.add(fsnew) + obj_set = nik_merge(obj_set) + for s in obj_set:#for each detected objects, find winning box and assign score as mean of scores + dfset = dfcat.loc[list(s)] + mean_score = dfset['score'].sum()/max(self.n_detectors,len(s)) #allows for more detections than detectors + winning_box = dfset.iloc[dfset['score'].argmax()].to_dict() + winning_box['score']=mean_score + winning_list.append(winning_box) + print('{} resulting instances from NMS'.format(len(winning_list))) + self.results = winning_list + return self + + def save_coco_instances(self,fname = "coco_instances_results.json"): + if self.results: + with open(os.path.join(self.output_dir,fname),'w') as f: + f.write(json.dumps(self.results,cls=NpEncoder)) + f.flush() + +if __name__ == "__main__": + ens = Ensembler('dev',["fold1", "fold2", "fold3", "fold4","fold5"],.2) + ens.mean_score_nms() \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/scripts/__init__.py b/models/retinalOCT_RPD_segmentation/scripts/__init__.py new file mode 100644 index 00000000..29348081 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/__init__.py @@ -0,0 +1 @@ +from.inference import main # Import main from inference.py \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py new file mode 100644 index 00000000..961d2b09 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py @@ -0,0 +1,946 @@ +#!/usr/bin/env python + +""" +Utiltites for analyizing and visualizing model segmentations on dataset. +Yelena Bagdasarova, Scott Song +""" + +import os +import pickle +import numpy as np +import pandas as pd +import warnings +from tqdm import tqdm +import json +import sys + +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval +from pycocotools.mask import decode + +import torch +from detectron2.data import ( + DatasetCatalog, + MetadataCatalog) +import detectron2 +import detectron2.utils.comm as comm +from detectron2.engine import DefaultPredictor +from detectron2.utils.visualizer import Visualizer +from detectron2.evaluation import COCOEvaluator + +import cv2 +from PIL import Image +import matplotlib.pyplot as plt +plt.style.use('ybpres.mplstyle') +#plt.style.use('/data/ssong/detectron2-rpd-yb/detectron2-rpd-pkg/src/detectron2-rpd/ybpres.mplstyle') +from matplotlib.backends.backend_pdf import PdfPages +import seaborn as sns + + +def grab_dataset(name): + def f(): + return pickle.load( open( "datasets/"+name+".pk", "rb" ) ) + return f + + +class OutputVis(): + + def __init__(self,dataset_name,cfg=None,prob_thresh=0.5,pred_mode='model',pred_file=None,has_annotations=True, draw_mode = 'default'): + self.dataset_name = dataset_name + self.cfg = cfg + self.prob_thresh = prob_thresh + self.data = DatasetCatalog.get(dataset_name) + if pred_mode =='model': + self.predictor = DefaultPredictor(cfg) + self._mode = 'model' + elif pred_mode =='file': + with open(pred_file,'r') as f: + self.pred_instances = json.load(f) + self.instance_img_list = [p['image_id'] for p in self.pred_instances] + self._mode = 'file' + else: + sys.exit('Invalid mode. Only "model" or "file" permitted.') + self.has_annotations = has_annotations + self.permitted_draw_modes = ['default','bw'] + self.set_draw_mode(draw_mode) + self.font_size = 16 #28 for ARVO + self.annotation_color = 'r' + self.scale = 3.0 + + def set_draw_mode(self,draw_mode): + if draw_mode not in self.permitted_draw_modes: + sys.exit('draw_mode must be one of the following: {}'.format(self.permitted_draw_modes)) + self.draw_mode = draw_mode + + def get_ori_image(self,ImgId): + """[summary] + + Args: + ImgId (str): Value of image_id in image data structure. + + Returns: + PIL.Image: Original image fed into the model scaled up by a factor of 3 for visualization. + """ + dat = self.get_gt_image_data(ImgId) #gt + im = cv2.imread(dat['file_name']) #input to model + v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) + result_image = v_gt.output.get_image() #get original image + img = Image.fromarray(result_image) + return img + + def get_gt_image_data(self,ImgId): + """Returns image ground truth image entry for corresponding to ImgId. + + Args: + ImgId (str): Value of image_id in image data structure. + + Returns: + dict: Dictionary for the image with corresponding ImgId. + """ + gt_data = next(item for item in self.data if (item['image_id'] == ImgId)) + return gt_data + + def produce_gt_image(self,dat,im): + """Returns image im overlayed with ground truth instances found in dat if there are any. Depending on visualizer mode, the instances are separate colors or monochrome. + + Args: + dat (dict): Dictionary for the image im containing ground truth annotations. + im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to + the height and width of the image respectively. C is the number of color channels. The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. + + Returns: + PIL.Image: The resulting original image overlayed with ground truth instances. + """ + v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) + if (self.has_annotations): #ground truth boxes and masks + segs = [ddict['segmentation'] for ddict in dat['annotations']] + if self.draw_mode is 'bw': + BBoxes = None + assigned_colors = [self.annotation_color]*len(segs) + else: #default behavior + bboxes = [ddict['bbox'] for ddict in dat['annotations']] + BBoxes = detectron2.structures.Boxes(bboxes) + BBoxes = detectron2.structures.BoxMode.convert(BBoxes.tensor,from_mode=1,to_mode=0) #0= XYXY, 1 = XYWH + assigned_colors = None + + result_image = v_gt.overlay_instances(boxes=BBoxes,masks=segs,assigned_colors=assigned_colors, alpha=1.0).get_image() + else: + result_image = v_gt.output.get_image() #get original image if no annotations + img = Image.fromarray(result_image) + return img + + def produce_model_image(self,ImgId,dat,im): + """Returns image im overlayed with instances predicted by the model. Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on the given ImgId. + + Args: + ImgId (str): Value of image_id in image data structure. + dat (dict): Dictionary for the image im. Used for height and width parameters. + im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to + the height and width of the image respectively. C is the number of color channels. The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. + + Returns: + PIL.Image: The resulting original image overlayed with model-predicted instances. + """ + v_dt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) + v_dt._default_font_size = self.font_size + + #get predictions from model or file + if self._mode=='model': + outputs = self.predictor(im)["instances"].to("cpu") + elif self._mode=='file': + outputs = self.get_outputs_from_file(ImgId,(dat['height'],dat['width'])) + outputs = outputs[outputs.scores>self.prob_thresh] #apply probability threshold to instances + if self.draw_mode is 'bw': + result_model = v_dt.overlay_instances(masks=outputs.pred_masks,assigned_colors=[self.annotation_color]*len(outputs), alpha=1.0).get_image() + else: #default behavior + result_model = v_dt.draw_instance_predictions(outputs).get_image() + img_model = Image.fromarray(result_model) + return img_model + + def get_image(self,ImgId): + """Returns the ground truth and model prediction overlays for the image corresponding to ImgId. + + Args: + ImgId (str): Value of image_id in image data structure. + + Returns: + (PIL.Image,PIL.Image): Tuple of PIL.images corresponding to ground truth and model prediction respectively. + """ + dat = self.get_gt_image_data(ImgId) #gt + im = cv2.imread(dat['file_name']) #input to model + img = self.produce_gt_image(dat,im) + img_model = self.produce_model_image(ImgId,dat,im) + return img, img_model + + def get_outputs_from_file(self,ImgId,imgsize): + """For image with image_id ImgId, reads in and converts instances from coco format in self.pred_file to a detectron2 Instances structure required for the visulizer utility. + + Args: + ImgId (str): Value of image_id in image data structure. + imgsize (tuple): Height and width of the image in pixels. + + Returns: + detectron2.structures.Instances: The correctly formated data structure to be used to the detectron2 visualizer utility. + """ + + pred_boxes = [] + scores = [] + pred_classes = [] + pred_masks = [] + for i,img in enumerate(self.instance_img_list): + if img==ImgId: + pred_boxes.append(self.pred_instances[i]['bbox']) + scores.append(self.pred_instances[i]['score']) + pred_classes.append(int(self.pred_instances[i]['category_id'])) + #pred_masks_rle.append(self.pred_instances[i]['segmentation']) + pred_masks.append(decode(self.pred_instances[i]['segmentation'])) + BBoxes = detectron2.structures.Boxes(pred_boxes) + pred_boxes = detectron2.structures.BoxMode.convert(BBoxes.tensor,from_mode=1,to_mode=0) #0= XYXY, 1 = XYWH + inst_dict = dict(pred_boxes = pred_boxes,scores=torch.tensor(np.array(scores)),pred_classes=torch.tensor(np.array(pred_classes)),pred_masks = torch.tensor(np.array(pred_masks)).to(torch.bool))#pred_masks_rle=pred_masks_rle) + outputs = detectron2.structures.Instances(imgsize,**inst_dict) + return outputs + + @staticmethod + def height_crop_range(im,height_target=256): + """Find the range of pixels in the height dimension spanning the height height_target which contain the brightest regions of the image. + + Args: + im (numpy array): a numpy array of shape (H, W, C) + height_target (int, optional): The desired span of the image height. Defaults to 256. + + Returns: + range: The starting and stopping pixels for cropping the image height. + """ + yhist = im.sum(axis=1) #integrate over width of image + mu = np.average(np.arange(yhist.shape[0]),weights = yhist) + h1 = int(np.floor(mu-height_target/2)) #inclusive + h2 = int(np.ceil(mu+height_target/2)) #exclusive + if h1<0: + h1 = 0 + h2 = height_target + if h2>yhist.shape[0]: + h2 = yhist.shape[0] + h1 = h2-height_target + return range(h1,h2) + + def output_to_pdf(self,ImgIds,outname,dfimg=None): + """Create pdf with name outname displaying ground truth and model prediction overlays for image ids listed in ImgIds. + + Args: + ImgIds (list(str)): List of image_id values to output. + outname (str): path name for pdf + dfimg (pandas.DataFrame, optional): A dataframe of stats to display for each image. Defaults to None. + """ + + gtstr = '' + dtstr = '' + + if dfimg is not None: + gtcols = dfimg.columns[['gt_' in col for col in dfimg.columns]] + dtcols = dfimg.columns[['dt_' in col for col in dfimg.columns]] + + with PdfPages(outname) as pdf: + for imgid in tqdm(ImgIds): + img, img_model = self.get_image(imgid) + #pdb.set_trace() + crop_range = self.height_crop_range(np.array(img.convert('L')),height_target=256*self.scale) + img = np.array(img)[crop_range] + img_model = np.array(img_model)[crop_range] + + fig, ax = plt.subplots(2,1,figsize=[22,10],dpi=200) + ax[0].imshow(img) + ax[0].set_title(imgid+' Ground Truth') + ax[0].set_axis_off() + ax[1].imshow(img_model) + ax[1].set_title(imgid+' Model Prediction') + ax[1].set_axis_off() + if dfimg is not None: #annotate with provided stats + gtstr = ['{:s}={:.2f}'.format(col,dfimg.loc[imgid,col]) for col in gtcols] + ax[0].text(0,.05*(ax[0].get_ylim()[0]),gtstr,color='white',fontsize=14) + dtstr = ['{:s}={:.2f}'.format(col,dfimg.loc[imgid,col]) for col in dtcols] + ax[1].text(0,.05*(ax[1].get_ylim()[0]),dtstr,color='white',fontsize=14) + pdf.savefig(fig) + plt.close(fig) + + def save_imgarr_to_tiff(self,imgs,outname): + """Save array of images in stacked tiff format (one image per page). + + Args: + imgs (array(PIL.Images)): An array of PIL.Images to save. + outname (str): Path name to save to. + """ + if len(imgs) > 1: + imgs[0].save(outname,dpi=(400,400), tags = "", compression = None, save_all=True, append_images=imgs[1:]) + else: + imgs[0].save(outname) + + def output_ori_to_tiff(self,ImgIds,outname): + """Save list of original images corresponding to ImgIds in stacked tiff format. + + Args: + ImgIds (list(str)): A list of image_ids for images to save. + outname (str): Path name to save to. + """ + imgs = [] + for imgid in tqdm(ImgIds): + img_ori = self.get_ori_image(imgid) #PIL Image + imgs.append(img_ori) + self.save_imgarr_to_tiff(imgs,outname) + + def output_pred_to_tiff(self,ImgIds,outname,pred_only=False): + """Save list of images overlayed with the model predictions in stacked tiff format. + + Args: + ImgIds (list(str)): A list of image_ids for images to save. + outname (str): Path name to save to. + """ + imgs = self.output_pred_to_list(ImgIds,pred_only) + self.save_imgarr_to_tiff(imgs,outname) + + def output_pred_to_list(self,ImgIds,pred_only=False): + """Return list of images overlayed with the model predictions. + + Args: + ImgIds (list(str)): A list of image_ids for images to save. + outname (str): Path name to save to. + """ + imgs = [] + for imgid in tqdm(ImgIds): + dat = self.get_gt_image_data(imgid) #gt + if pred_only: + im = np.zeros((dat['height'],dat['width'],3)) #blank image for overlay + assert self._mode == 'file', 'pred_mode must be "file" when pred_only flage is set to True.' #fix this later + else: + im = cv2.imread(dat['file_name']) #input to model + img_dt = self.produce_model_image(imgid,dat,im) + imgs.append(img_dt) + return imgs + + def output_all_to_tiff(self,ImgIds,outname): + """Save list of images (original, ground truth overlay, and model prediction overlay) to stacked tiff format. + + Args: + ImgIds (list(str)): A list of image_ids for images to save. + outname (str): Path name to save to. + """ + imgs = [] + for imgid in tqdm(ImgIds): + img_gt, img_dt = self.get_image(imgid) + img_ori = self.get_ori_image(imgid) + hcrange = list(self.height_crop_range(np.array(img_ori.convert('L')),height_target=256*self.scale)) + img_result = Image.fromarray(np.concatenate((np.array(img_ori.convert('RGB'))[hcrange,:],np.array(img_gt)[hcrange,:],np.array(img_dt)[hcrange]))) + imgs.append(img_result) + self.save_imgarr_to_tiff(imgs,outname) + + def get_enface_dt(self,grp,scan_height,scan_width,scan_spacing): + """Return enface perspective of model predictions for a single scan volume whose imgids are listed in the index of grp. + + Args: + grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. + scan_height (int): Image height in pixels. + scan_width (int): Image width in pixels. + scan_spacing (float): The spacing between scan centers in pixels. + + Returns: + np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. + """ + grp = grp.sort_index() + nscans = len(grp) + enface_height = int(np.ceil((nscans-1)*scan_spacing)) + enface = np.zeros((enface_height,scan_width,3),dtype=int) + for i,imgid in enumerate(grp.index): + pos = int(np.clip(np.floor(scan_spacing*i),0,scan_width-1)) #vertical enface position + + + outputs = self.get_outputs_from_file(imgid,(scan_height,scan_width)) + outputs = outputs[outputs.scores>self.prob_thresh] + instances = outputs.pred_boxes[:,(0,2)].round().clip(0,scan_width-1).to(np.int) + + for inst in instances: + try: + enface[max(pos-4,0):min(pos+4,scan_width-1),inst[0]:inst[1]]=np.array([255,255,255])#random_color(rgb = True) + except(IndexError): + print( pos, inst[0],inst[1]) + return enface + + def get_enface_gt(self,grp,scan_height,scan_width,scan_spacing): + """Return enface perspective of ground truth annotations for a single scan volume whose imgids are listed in the index of grp. + + Args: + grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. + scan_height (int): Image height in pixels. + scan_width (int): Image width in pixels. + scan_spacing (float): The spacing between scan centers in pixels. + + Returns: + np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. + """ + grp = grp.sort_index() + nscans = len(grp) + enface_height = int(np.ceil((nscans-1)*scan_spacing)) + enface = np.zeros((enface_height,scan_width,3),dtype=int) + if not self.has_annotations: + enface[:,:] = np.array([100,100,100]) + + else: + #minx = scan_width + for i,imgid in enumerate(grp.index): + pos = int(np.clip(np.floor(scan_spacing*i),0,scan_width-1)) + instances = self.get_gt_image_data(imgid)['annotations'] + for inst in instances: + x1= inst['bbox'][0] + #minx = min(minx,x1) + x2 = x1 + inst['bbox'][2] + try: + enface[max(pos-4,0):min(pos+4,scan_width-1),x1:x2]=np.array([255,255,255])#random_color(rgb = True) + except(IndexError): + print( pos, x1,x2) + return enface + + def compare_enface(self,grp,name,scan_height,scan_width,scan_spacing): + """Return figure comparing detector enface perspective of model prediction with ground truth. + + Args: + grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. + name (str): The name of the group identified by scan volume ID. + scan_height (int): Image height in pixels. + scan_width (int): Image width in pixels. + scan_spacing (float): The spacing between scan centers in pixels. + + Returns: + (matplotlib.figure.Figure, array(AxesSubplot)): Tuple of figure handle and array of subplot axes. + """ + fig, ax = plt.subplots(1,2,figsize=[18,9],dpi=120) + + enface = self.get_enface_dt(grp,scan_height,scan_width,scan_spacing) + ax[0].imshow(enface) + ax[0].set_title(str(name) + ' DT') + ax[0].set_aspect('equal') + + + enface = self.get_enface_gt(grp,scan_height,scan_width,scan_spacing) + ax[1].imshow(enface) + ax[1].set_title(str(name) + ' GT') + ax[1].set_aspect('equal') + return fig,ax + +def Wilson_CI(p,n,z): + if (p<0 or p>1 or n==0): + if (p<0 or p>1): + warnings.warn(f'The value of proportion {p} must be in the range [0,1]. Returning identity for CIs.') + else: + warnings.warn(f'The number of counts {n} must be above zero. Returning identity for CIs.') + return (p,p) + sym = z*(p*(1-p)/n + z*z/4/n/n)**.5 + asym = p + z*z/2/n + fact = 1/(1+z*z/n) + upper = fact*(asym+sym) + lower = fact*(asym-sym) + return (lower,upper) + +class EvaluateClass(COCOEvaluator): + def __init__(self,dataset_name, output_dir,prob_thresh=0.5,iou_thresh = 0.1,evalsuper=True): + super().__init__(dataset_name,tasks={'bbox','segm'},output_dir = output_dir) + self.dataset_name = dataset_name + self.mycoco=None #pycocotools.cocoEval instance + self.cocoDt=None + self.cocoGt=None + self.evalsuper = evalsuper # if True, run COCOEvaluator.evaluate() when self.evaluate is run + self.prob_thresh = prob_thresh #instance probabilty threshold for scalars (precision,recall,fpr for scans) + self.iou_thresh = iou_thresh #iou threshold for defining precision,recall + self.pr = None + self.rc = None + self.fpr = None + def reset(self): + super().reset() + self.mycoco=None + def process(self, inputs, outputs): + super().process(inputs,outputs) + def evaluate(self): + #with nostdout(): #suppress the coco summarize statment (the one with APs) + if self.evalsuper: + _ = super().evaluate() #this call populates coco_instances_results.json + comm.synchronize() + if not comm.is_main_process(): + return () + self.cocoGt = COCO(os.path.join(self._output_dir,self.dataset_name +'_coco_format.json')) #produced when super is initialized + self.cocoDt = self.cocoGt.loadRes(os.path.join(self._output_dir,'coco_instances_results.json')) #load detector results + self.mycoco = COCOeval(self.cocoGt,self.cocoDt,iouType ='segm') + self.num_images = len(self.mycoco.params.imgIds) + print('Calculated metrics for {} images'.format(self.num_images)) + self.mycoco.params.iouThrs = np.arange(.10,.6,.1) + #mycoco.params.recThrs = [0,.5,.75,1] + self.mycoco.params.maxDets = [100] + #mycoco.params.imgIds=[imgId] + self.mycoco.params.areaRng = [[0, 10000000000.0]] + + self.mycoco.evaluate() + self.mycoco.accumulate() + + self.pr = self.mycoco.eval['precision'][:, #iouthresh + :, #recall level + 0, #catagory + 0, #area range + 0] #max detections per image + self.rc = self.mycoco.params.recThrs + self.iou = self.mycoco.params.iouThrs + self.scores = self.mycoco.eval['scores'][:,:,0,0,0] #unreliable if GT has no instances + p,r = self.get_precision_recall() + return p,r + + def plot_PRcurve(self,ax=None): + if ax==None: + fig, ax = plt.subplots(1,1) + for i in range(len(self.iou)): + ax.plot(self.rc,self.pr[i],label = '{:.2}'.format(self.iou[i])) + ax.set_xlabel('Recall') + ax.set_ylabel('Precision') + ax.set_title('') + ax.legend(title='IoU') + + def plot_recall_vs_prob(self): + plt.figure() + for i in range(len(self.iou)): + plt.plot(self.rc,self.scores[i],label = '{:.2}'.format(self.iou[i])) + plt.ylabel('Model probability') + plt.xlabel('Recall') + plt.legend(title='IoU') + + def get_precision_recall(self): + iou_idx,rc_idx = self._find_iou_rc_inds() + precision = self.pr[iou_idx,rc_idx] + recall = self.rc[rc_idx] + return precision,recall + + def _calculate_fpr_matrix(self): + #FP rate, 1 RPD in image = FP + if (self.scores.min()==-1) and (self.scores.max()==-1): + print('WARNING: Scores for all iou thresholds and all recall levels are not defined. This can arise if ground truth annotations contain no instances. Leaving fpr matrix as None') + self.fpr = None + return + + fpr = np.zeros((len(self.iou),len(self.rc))) + for i in range(len(self.iou)): + for j,s in enumerate(self.scores[i]): #j -> recall level, s -> corresponding score + ng = 0 #number of negative images + fp = 0 #number of false positives images + for el in self.mycoco.evalImgs: + if el is None:#no predictions, no gts + ng=ng+1 + elif len(el['gtIds'])==0:# some predictions and no gts + ng=ng+1 + if (np.array(el['dtScores']) >s).sum() > 0: #if at least one score over threshold for recall level + fp=fp+1 #count as FP + else: + continue + fpr[i,j] = fp/ng + self.fpr = fpr + + def _calculate_fpr(self): + print('Using alternate calculation for fpr at instance score threshold of {}'.format(self.prob_thresh)) + ng = 0 #number of negative images + fp = 0 #number of false positives images + for el in self.mycoco.evalImgs: + if el is None:#no predictions, no gts + ng=ng+1 + elif len(el['gtIds'])==0:# some predictions and no gts + ng=ng+1 + if (np.array(el['dtScores']) >self.prob_thresh).sum() > 0: #if at least one score over threshold for recall level + fp=fp+1 #count as FP + else: #gt has instances + continue + return fp/(ng+1e-5) + + def _find_iou_rc_inds(self): + try: + iou_idx = np.argwhere(self.iou==self.iou_thresh)[0][0] #first instance of + except IndexError: + print('iou threshold {} not found in mycoco.params.iouThrs {}'.format(self.iou_thresh,self.mycoco.params.iouThrs)) + exit(1) + #test above for out of bounds + inds = np.argwhere(self.scores[iou_idx]>=self.prob_thresh) + if len(inds)>0: + rc_idx = inds[-1][0] #get recall index corresponding to prob_thresh + else: + rc_idx = 0 + return iou_idx,rc_idx + + def get_fpr(self): + + if self.fpr is None: + self._calculate_fpr_matrix() + + if self.fpr is not None: + iou_idx,rc_idx = self._find_iou_rc_inds() + fpr = self.fpr[iou_idx,rc_idx] + elif len(self.mycoco.cocoGt.anns)==0: + fpr = self._calculate_fpr() + else: + fpr=-1 + return fpr + + def summarize_scalars(self): #for pretty printing + p,r = self.get_precision_recall() + f1 = 2*(p*r)/(p + r) + fpr = self.get_fpr() + + #Confidence intervals + z=1.96 #95% Gaussian + #instance count + inst_cnt = self.count_instances() + n_r = inst_cnt['gt_instances'] + n_p = inst_cnt['dt_instances'] + n_fpr = inst_cnt['gt_neg_scans'] + + def stat_CI(p,n,z): + return z*np.sqrt(p*(1-p)/n) + + r_ci = Wilson_CI(r,n_r,z) + p_ci = Wilson_CI(p,n_p,z) + fpr_ci = Wilson_CI(fpr,n_fpr,z) + + #propogate errors for f1 + int_r = stat_CI(r,n_r,z) + int_p = stat_CI(p,n_p,z) + int_f1 =(f1)*np.sqrt(int_r**2 * (1/r - 1/(p+r))**2 + int_p**2 * (1/p - 1/(p+r))**2) + f1_ci = (f1-int_f1,f1+int_f1) + + dd = dict(dataset = self.dataset_name, precision = float(p),precision_ci = p_ci,recall=float(r), recall_ci = r_ci,f1 = float(f1),f1_ci = f1_ci, fpr=float(fpr),fpr_ci = fpr_ci, iou=self.iou_thresh,probability=self.prob_thresh) + return dd + + def count_instances(self): + gt_inst = 0 + dt_inst = 0 + gt_neg_scans = 0 + for key,val in self.cocoGt.imgs.items(): + imgid = val['id'] + #Gt instances + annIdsGt = self.cocoGt.getAnnIds([imgid]) + annsGt = self.cocoGt.loadAnns(annIdsGt) + gt_inst+=len(annsGt) + if len(annsGt)==0: + gt_neg_scans+=1 + + #Dt instances + annIdsDt = self.cocoDt.getAnnIds([imgid]) + annsDt = self.cocoDt.loadAnns(annIdsDt) + annsDt = [ann for ann in annsDt if ann['score']>self.prob_thresh] + dt_inst+=len(annsDt) + + return dict(gt_instances=gt_inst,dt_instances=dt_inst,gt_neg_scans = gt_neg_scans) + + +from sklearn.metrics import precision_recall_curve,average_precision_score +class CreatePlotsRPD(): + def __init__(self,dfimg): + self.dfimg = dfimg + self.dfvol = self.dfimg.groupby(['volID'])[['gt_instances','gt_pxs','gt_xpxs','dt_instances','dt_pxs','dt_xpxs']].sum() + + @classmethod + def initfromcoco(cls,mycoco,prob_thresh): + df = pd.DataFrame(index = mycoco.cocoGt.imgs.keys(), columns=['gt_instances','gt_pxs','gt_xpxs','dt_instances','dt_pxs','dt_xpxs'],dtype=np.uint64) + + for key,val in mycoco.cocoGt.imgs.items(): + imgid = val['id'] + #Gt instances + annIdsGt = mycoco.cocoGt.getAnnIds([imgid]) + annsGt = mycoco.cocoGt.loadAnns(annIdsGt) + instGt = [mycoco.cocoGt.annToMask(ann).sum() for ann in annsGt] + xprojGt = [(mycoco.cocoGt.annToMask(ann).sum(axis=0)>0).astype('uint8').sum() for ann in annsGt] + #Dt instances + annIdsDt = mycoco.cocoDt.getAnnIds([imgid]) + annsDt = mycoco.cocoDt.loadAnns(annIdsDt) + annsDt = [ann for ann in annsDt if ann['score']>prob_thresh] + instDt = [mycoco.cocoDt.annToMask(ann).sum() for ann in annsDt] + xprojDt = [(mycoco.cocoDt.annToMask(ann).sum(axis=0)>0).astype('uint8').sum() for ann in annsDt] + + dat = [len(instGt),np.array(instGt).sum(),np.array(xprojGt).sum(),len(instDt),np.array(instDt).sum(),np.array(xprojDt).sum()] + df.loc[key] = dat + + newdf = pd.DataFrame([idx.rsplit('.',1)[0].rsplit('_',1) for idx in df.index],columns=['volID','scan'],index = df.index) + df = df.merge(newdf,how='inner',left_index=True,right_index=True) + return cls(df) + + @classmethod + def initfromcsv(cls,fname): + df = pd.read_csv(fname) + return cls(df) + + def get_max_limits(self,df): + max_inst=np.max([df.gt_instances.max(),df.dt_instances.max()]) + max_xpxs = np.max([df.gt_xpxs.max(),df.dt_xpxs.max()]) + max_pxs = np.max([df.gt_pxs.max(),df.dt_pxs.max()]) +# print('Max instances:',max_inst) +# print('Max xpxs:',max_xpxs) +# print('Max pxs:',max_pxs) + return max_inst,max_xpxs,max_pxs + + def vol_level_prc(self,df,gt_thresh=5,ax=None): + + prc = precision_recall_curve(df.gt_instances>=gt_thresh,df.dt_instances) + if ax==None: + fig,ax = plt.subplots(1,1) + ax.plot(prc[1],prc[0]) + ax.set_xlabel('RPD Volume Recall') + ax.set_ylabel('RPD Volume Precision') + + + ap = average_precision_score(df.gt_instances>=gt_thresh,df.dt_instances) + return ap,prc + + def plot_img_level_instance_thresholding(self,df,inst): + + rc = np.zeros((len(inst),)) + pr = np.zeros((len(inst),)) + fpr = np.zeros((len(inst),)) + + fig, ax = plt.subplots(1,3,figsize = [15,5]) + for i,dt_thresh in enumerate(inst): + gt = df.gt_instances>dt_thresh + dt = df.dt_instances>dt_thresh + rc[i] = (gt&dt).sum()/gt.sum() + pr[i] = (gt&dt).sum()/dt.sum() + fpr[i] = ((~gt)&(dt)).sum()/((~gt).sum()) + + ax[1].plot(inst,pr) + ax[1].set_ylim(0.45,1.01) + ax[1].set_xlabel('instance threshold') + ax[1].set_ylabel('Precision') + + + ax[0].plot(inst,rc) + ax[0].set_ylim(0.45,1.01) + ax[0].set_ylabel('Recall') + ax[0].set_xlabel('instance threshold') + + + ax[2].plot(inst,fpr) + ax[2].set_ylim(0,0.80) + ax[2].set_xlabel('instance threshold') + ax[2].set_ylabel('FPR') + + plt.tight_layout() + return pr,rc,fpr + + def plot_img_level_instance_thresholding2(self,df,inst,gt_thresh,plot=True): + + #should be using global function + # def Wilson_CI(p,n,z): + + # sym = z*(p*(1-p)/n + z*z/4/n/n)**.5 + # asym = p + z*z/2/n + # fact = 1/(1+z*z/n) + # upper = fact*(asym+sym) + # lower = fact*(asym-sym) + # return (lower,upper) + + rc = np.zeros((len(inst),)) + pr = np.zeros((len(inst),)) + fpr = np.zeros((len(inst),)) + rc_ci = np.zeros((len(inst),2)) + pr_ci = np.zeros((len(inst),2)) + fpr_ci = np.zeros((len(inst),2)) + + + for i,dt_thresh in enumerate(inst): + gt = df.gt_instances>=gt_thresh + dt = df.dt_instances>=dt_thresh + rc[i] = (gt&dt).sum()/gt.sum() + pr[i] = (gt&dt).sum()/dt.sum() + fpr[i] = ((~gt)&(dt)).sum()/((~gt).sum()) + rc_ci[i,:] = Wilson_CI(rc[i],gt.sum(),1.96) + pr_ci[i,:]= Wilson_CI(pr[i],dt.sum(),1.96) + fpr_ci[i,:] = Wilson_CI(fpr[i],((~gt).sum()),1.96) + + if plot: + fig, ax = plt.subplots(1,3,figsize = [15,5]) + # ax[0].plot(rc,pr) + # ax[0].set_xlabel('Recall') + # ax[0].set_ylabel('Precision') + + ax[1].plot(inst,pr) + ax[1].fill_between(inst,pr_ci[:,0],pr_ci[:,1],alpha=.25) + #ax[1].set_ylim(0.45,1.01) + ax[1].set_xlabel('instance threshold') + ax[1].set_ylabel('Precision') + + + ax[0].plot(inst,rc) + ax[0].fill_between(inst,rc_ci[:,0],rc_ci[:,1],alpha=.25) + #ax[0].set_ylim(0.45,1.01) + ax[0].set_ylabel('Recall') + ax[0].set_xlabel('instance threshold') + + + ax[2].plot(inst,fpr) + ax[2].fill_between(inst,fpr_ci[:,0],fpr_ci[:,1],alpha=.25) + #ax[2].set_ylim(0,0.80) + ax[2].set_xlabel('instance threshold') + ax[2].set_ylabel('FPR') + + plt.tight_layout() + return dict(precision=pr,precision_ci = pr_ci,recall=rc,recall_ci = rc_ci, fpr=fpr,fpr_ci = fpr_ci) + + def gt_vs_dt_instances(self,ax=None): + df = self.dfimg + max_inst,max_xpxs,max_pxs = self.get_max_limits(df) + idx = (df.gt_instances>0)&(df.dt_instances>0) + + if ax==None: + fig = plt.figure(dpi=100) + ax = fig.add_subplot(111) + + y = df[idx].groupby('gt_instances')['dt_instances'].mean() + yerr = df[idx].groupby('gt_instances')['dt_instances'].std() + ax.errorbar(y.index,y.values,yerr.values,fmt='*') + plt.plot([0,max_inst],[0,max_inst],alpha=.5) + plt.xlim(0,max_inst+1) + plt.ylim(0,max_inst+1) + ax.set_aspect(1) + plt.xlabel('gt_instances') + plt.ylabel('dt_instances') + plt.tight_layout() + return ax + + def gt_vs_dt_instances_boxplot(self,ax=None): + df = self.dfimg + max_inst,max_xpxs,max_pxs = self.get_max_limits(df) + max_inst = int(max_inst) + if ax==None: + fig = plt.figure(dpi=100) + ax = fig.add_subplot(111) + + + + + ax.plot([0,max_inst+1],[0,max_inst+1],alpha=.5) + x = df['gt_instances'].values.astype(int) + y = df['dt_instances'].values.astype(int) + sns.boxplot(x,y, ax=ax,width=.5) + ax.set_xbound(0,max_inst+1) + ax.set_ybound(0,max_inst+1) + ax.set_aspect('equal') + + + ax.set_title('') + ax.set_xlabel('gt_instances') + ax.set_ylabel('dt_instances') + + import matplotlib.ticker as pltticker + loc = pltticker.MultipleLocator(base=2.0) + ax.xaxis.set_major_locator(loc) + ax.yaxis.set_major_locator(loc) + + + return ax + + + + def gt_vs_dt_xpxs(self): + df = self.dfimg + max_inst,max_xpxs,max_pxs = self.get_max_limits(df) + idx = (df.gt_instances>0)&(df.dt_instances>0) + dfsub = df[idx] + + fig1 = plt.figure(figsize = [10,10],dpi=100) + ax = fig1.add_subplot(111) + sc = ax.scatter(dfsub['gt_xpxs'],dfsub['dt_xpxs'],c =dfsub['gt_instances'] ,cmap='viridis') + ax.set_aspect(1) + #ax = dfsub.plot(kind = 'scatter',x=,y=,c='gt_instances') + plt.plot([0,max_xpxs],[0,max_xpxs],alpha=.5) + plt.xlim(0,max_xpxs) + plt.ylim(0,max_xpxs) + plt.xlabel('gt_xpxs') + plt.ylabel('dt_xpxs') + cbar = plt.colorbar(sc) + cbar.ax.set_ylabel('gt_instances') + plt.tight_layout() + + fig2 = plt.figure(figsize = [10,10],dpi=100) + ax = fig2.add_subplot(111) + sc = ax.scatter(dfsub['gt_xpxs'],dfsub['gt_xpxs']-dfsub['dt_xpxs'],c =dfsub['gt_instances'] ,cmap='viridis') + #ax = dfsub.plot(kind = 'scatter',x=,y=,c='gt_instances') + plt.plot([0,max_xpxs],[0,0],alpha=.5) + plt.xlabel('gt_xpxs') + plt.ylabel('gt_xpxs-dt_xpxs') + cbar = plt.colorbar(sc) + cbar.ax.set_ylabel('gt_instances') + plt.tight_layout() + + fig3 = plt.figure(dpi=100) + plt.hist(dfsub['gt_xpxs']-dfsub['dt_xpxs']) + plt.xlabel('gt_xpxs - dt_xpxs') + plt.ylabel('B-scans') + + return fig1,fig2,fig3 + + def gt_vs_dt_xpxs_mu(self): + df = self.dfimg + max_inst,max_xpxs,max_pxs = self.get_max_limits(df) + idx = (df.gt_instances>0)&(df.dt_instances>0) + dfsub = df[idx] + + from scipy import stats + mu_dt,bins,bnum = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['dt_xpxs'],statistic = 'mean',bins=10) + std_dt,_,_ = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['dt_xpxs'],statistic = 'std',bins = bins) + mu_gt,_,_ = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['gt_xpxs'],statistic='mean',bins=bins) + std_gt,_,_ = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['gt_xpxs'],statistic = 'std',bins = bins) + fig = plt.figure(dpi=100) + plt.errorbar(mu_gt,mu_dt,yerr = std_dt,xerr=std_gt,fmt='*') + plt.xlabel('gt_xpxs') + plt.ylabel('dt_xpxs') + plt.plot([0,max_xpxs],[0,max_xpxs],alpha=.5) + plt.xlim(0,max_xpxs) + plt.ylim(0,max_xpxs) + plt.gca().set_aspect(1) + plt.tight_layout() + return fig + + def gt_dt_FP_FN_count(self): + df = self.dfimg + fig,ax =plt.subplots(1,2,figsize=[10,5]) + + idx = (df.gt_instances==0)&(df.dt_instances>0) + ax[0].hist(df[idx]['dt_instances'],bins = range(1,10)) + ax[0].set_xlabel('dt instances') + ax[0].set_ylabel('B-scans') + ax[0].set_title('FP dt instance count per B-scan') + + idx = (df.gt_instances>0)&(df.dt_instances==0) + ax[1].hist(df[idx]['gt_instances'],bins = range(1,10)) + ax[1].set_xlabel('gt instances') + ax[1].set_ylabel('B-scans') + ax[1].set_title('FN gt instance count per B-scan') + + plt.tight_layout() + return fig + + def avg_inst_size(self): + df = self.dfimg + max_inst,max_xpxs,max_pxs = self.get_max_limits(df) + idx = (df.gt_instances>0)&(df.dt_instances>0) + dfsub = df[idx] + + fig = plt.figure(figsize=[10,5]) + plt.subplot(121) + bins = np.arange(0,120,10) + ax = (dfsub.gt_xpxs/dfsub.gt_instances).hist(bins = bins,alpha=.5,label='gt') + ax = (dfsub.dt_xpxs/dfsub.dt_instances).hist(bins=bins,alpha=.5,label='dt') + ax.set_xlabel('xpxs') + ax.set_ylabel('B-scans') + ax.set_title('Average size of instance') + ax.legend() + + plt.subplot(122) + bins = np.arange(0,600,40) + ax = (dfsub.gt_pxs/dfsub.gt_instances).hist(bins=bins,alpha=.5,label='gt') + ax = (dfsub.dt_pxs/dfsub.dt_instances).hist(bins=bins,alpha=.5,label='dt') + ax.set_xlabel('pxs') + ax.set_ylabel('B-scans') + ax.set_title('Average size of instance') + ax.legend() + + plt.tight_layout() + return fig + + diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/__init__.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py new file mode 100644 index 00000000..652baf84 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -0,0 +1,112 @@ +import os +import shutil +import cv2 +from PIL import Image +from .volReader import volFile +from tqdm import tqdm +import glob +import distutils.util +from pydicom import dcmread +from pydicom.fileset import FileSet +import pandas as pd + + +script_dir = os.path.dirname(__file__) +class Error(Exception): + """Base class for exceptions in this module.""" + pass + + + +# def extract_files(dirtoextract, extracted_path): +# proceed = True +# if ((os.path.isdir(extracted_path)) and (len(os.listdir(extracted_path))!=0)): +# val = input(f'{extracted_path} exists and is not empty. Files may be overwritten. Proceed with extraction? (Y/N)') +# proceed = bool(distutils.util.strtobool(val)) +# if proceed: +# print(f"Extracting files from {dirtoextract} into {extracted_path}...") +# files_to_extract = glob.glob(os.path.join(dirtoextract,'**/*.vol'),recursive=True) +# for i,line in enumerate(tqdm(files_to_extract)): +# fpath = line.strip('\n') +# vol = volFile(fpath) +# fpath = fpath.replace('\\','/') +# path, scan_str = fpath.strip('.vol').rsplit('/',1) +# extractpath = os.path.join(extracted_path,scan_str.replace('_','/')) +# os.makedirs(extractpath,exist_ok=True) +# preffix = os.path.join(extractpath, scan_str+'_oct') +# vol.renderOCTscans(preffix) +# else: +# pass + +def extract_files(dirtoextract, extracted_path, input_format): + assert input_format in ['vol','dicom'], 'Error: input_format must be "vol" or "dicom".' + proceed = True + if ((os.path.isdir(extracted_path)) and (len(os.listdir(extracted_path))!=0)): + val = input(f'{extracted_path} exists and is not empty. Files may be overwritten. Proceed with extraction? (Y/N)') + proceed = bool(distutils.util.strtobool(val)) + if proceed: + print(f"Extracting files from {dirtoextract} into {extracted_path}...") + if input_format == 'vol': + files_to_extract = glob.glob(os.path.join(dirtoextract,'**/*.vol'),recursive=True) + for i,line in enumerate(tqdm(files_to_extract)): + fpath = line.strip('\n') + vol = volFile(fpath) + fpath = fpath.replace('\\','/') + path, scan_str = fpath.strip('.vol').rsplit('/',1) + extractpath = os.path.join(extracted_path,scan_str.replace('_','/')) + os.makedirs(extractpath,exist_ok=True) + preffix = os.path.join(extractpath, scan_str+'_oct') + vol.renderOCTscans(preffix) + elif input_format =='dicom': + keywords = ['SOPInstanceUID', + 'PatientID', + 'ImageLaterality', + 'SeriesDate' + ] + list_of_dicts = [] + dirgen = glob.iglob(os.path.join(dirtoextract,'**/DICOMDIR'),recursive=True) + + for dsstr in dirgen: + fs = FileSet(dcmread(dsstr)) + fsgenOPT = genOPTfs(fs) + for fi in tqdm(fsgenOPT): + dd=dict() + #top level keywords + for key in keywords: + dd[key] = fi.get(key) + + volpath = os.path.join(extracted_path, f'{fi.SOPInstanceUID}') + #volpath = os.path.join(extracted_path, f'{fi.PatientID}_{fi.ImageLaterality}_{fi.SeriesDate}') #path for volume + shutil.rmtree(volpath,ignore_errors=True) + os.mkdir(volpath) + n = fi.NumberOfFrames + for i in range(n): + fname = os.path.join(volpath,f'{fi.SOPInstanceUID}_oct_{i:03d}.png') + Image.fromarray(fi.pixel_array[i]).save(fname) + list_of_dicts.append(dd.copy()) + dfoct = pd.DataFrame(list_of_dicts, columns = keywords) + dfoct.to_csv(os.path.join(extracted_path,'basic_meta.csv')) + else: + pass + +def rpd_data(extracted_path): + dataset = [] + instances = 0 + wrong_poly = 0 + extracted_files = glob.glob(os.path.join(extracted_path,'**/*.png'),recursive=True) + print("Generating dataset of images...") + for fn in tqdm(extracted_files): + fn_adjusted = fn.replace('\\','/') + imageid = fn_adjusted.split("/")[-1] + im = cv2.imread(fn) + dat = dict(file_name = fn_adjusted, height = im.shape[0], width = im.shape[1], image_id = imageid) + dataset.append(dat) + print(f"Found {len(dataset)} images") + print(f"Found {instances} instances") + print(f"Found {wrong_poly} too few vertices") + return dataset + +def genOPTfs(fs): + for instance in fs.find(Modality='OPT'): + ds = instance.load() + yield ds \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py new file mode 100644 index 00000000..92314063 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py @@ -0,0 +1,335 @@ +#!/usr/bin/env python +# +# Aaron Y. Lee MD MSCI (University of Washington) Copyright 2019 +# +# Code ported from Markus Mayer's excellent work (https://www5.cs.fau.de/research/software/octseg/) +# +# Also thanks to who contributed to the original openVol.m in Markus's project +# Radim Kolar, Brno University, Czech Republic +# Kris Sheets, Retinal Cell Biology Lab, Neuroscience Center of Excellence, LSU Health Sciences Center, New Orleans + + +import struct, array, datetime, codecs +import numpy as np +from collections import OrderedDict + +class volFile(): + def __init__(self, filename): + """ + Parses Heyex Spectralis *.vol files. + + Args: + filename (str): Path to vol file + + Returns: + volFile class + + """ + self.__parseVolFile(filename) + + @property + def oct(self): + """ + Retrieve OCT volume as a 3D numpy array. + + Returns: + 3D numpy array with OCT intensities as 'uint8' array + + """ + return self.wholefile["cScan"] + + @property + def irslo(self): + """ + Retrieve IR SLO image as 2D numpy array + + Returns: + 2D numpy array with IR reflectance SLO image as 'uint8' array. + + """ + return self.wholefile["sloImage"] + + @property + def grid(self): + """ + Retrieve the IR SLO pixel coordinates for the B scan OCT slices + + Returns: + 2D numpy array with the number of b scan images in the first dimension + and x_0, y_0, x_1, y_1 defining the line of the B scan on the pixel + coordinates of the IR SLO image. + + """ + wf = self.wholefile + grid = [] + for bi in range(len(wf["slice-headers"])): + bscanHead = wf["slice-headers"][bi] + x_0 = int(bscanHead["startX"] / wf["header"]["scaleXSlo"]) + x_1 = int(bscanHead["endX"] / wf["header"]["scaleXSlo"]) + y_0 = int(bscanHead["startY"] / wf["header"]["scaleYSlo"]) + y_1 = int(bscanHead["endY"] / wf["header"]["scaleYSlo"]) + grid.append([x_0, y_0, x_1, y_1]) + return grid + + def renderIRslo(self, filename, renderGrid=False): + """ + Renders IR SLO image as a PNG file and optionally overlays grid of B scans + + Args: + filename (str): filename to save IR SLO image + renderGrid (bool): True will render red lines for the location of the B scans. + + Returns: + None + + """ + from PIL import Image, ImageDraw + wf = self.wholefile + a = np.copy(wf["sloImage"]) + if renderGrid: + a = np.stack((a,)*3, axis=-1) + a = Image.fromarray(a) + draw = ImageDraw.Draw(a) + grid = self.grid + for (x_0, y_0, x_1, y_1) in grid: + draw.line((x_0,y_0, x_1, y_1), fill=(255,0,0), width=3) + a.save(filename) + else: + Image.fromarray(a).save(filepre) + + def renderOCTscans(self, filepre = "oct", renderSeg=False): + """ + Renders OCT images a PNG file and optionally overlays segmentation lines + Also creates a CSV file of vol file features. + + Args: + filepre (str): filename prefix. OCT Images will be named as "_001.png" + renderSeg (bool): True will render colored lines for the segmentation of the RPE, ILM, and NFL on the B scans. + + Returns: + None + + """ + from PIL import Image + wf = self.wholefile + for i in range(wf["cScan"].shape[0]): + a = np.copy(wf["cScan"][i]) + if renderSeg: + a = np.stack((a,)*3, axis=-1) + for li in range(wf["segmentations"].shape[0]): + for x in range(wf["segmentations"].shape[2]): + a[int(wf["segmentations"][li,i,x]),x, li] = 255 + + Image.fromarray(a).save("%s_%03d.png" % (filepre, i)) + + def __parseVolFile(self, fn, parseSeg=False): + print(fn) + wholefile = OrderedDict() + decode_hex = codecs.getdecoder("hex_codec") + with open(fn, "rb") as fin: + header = OrderedDict() + header["version"] = fin.read(12) + header["octSizeX"] = struct.unpack("I", fin.read(4))[0] # lateral resolution + header["numBscan"] = struct.unpack("I", fin.read(4))[0] + header["octSizeZ"] = struct.unpack("I", fin.read(4))[0] # OCT depth + header["scaleX"] = struct.unpack("d", fin.read(8))[0] + header["distance"] = struct.unpack("d", fin.read(8))[0] + header["scaleZ"] = struct.unpack("d", fin.read(8))[0] + header["sizeXSlo"] = struct.unpack("I", fin.read(4))[0] + header["sizeYSlo"] = struct.unpack("I", fin.read(4))[0] + header["scaleXSlo"] = struct.unpack("d", fin.read(8))[0] + header["scaleYSlo"] = struct.unpack("d", fin.read(8))[0] + header["fieldSizeSlo"] = struct.unpack("I", fin.read(4))[0] # FOV in degrees + header["scanFocus"] = struct.unpack("d", fin.read(8))[0] + header["scanPos"] = fin.read(4) + header["examTime"] = struct.unpack("=q", fin.read(8))[0] / 1e7 + header["examTime"] = datetime.datetime.utcfromtimestamp(header["examTime"] - (369*365.25+4) * 24*60*60) # needs to be checked + header["scanPattern"] = struct.unpack("I", fin.read(4))[0] + header["BscanHdrSize"] = struct.unpack("I", fin.read(4))[0] + header["ID"] = fin.read(16) + header["ReferenceID"] = fin.read(16) + header["PID"] = struct.unpack("I", fin.read(4))[0] + header["PatientID"] = fin.read(21) + header["unknown2"] = fin.read(3) + header["DOB"] = struct.unpack("d", fin.read(8))[0] - 25569 + header["DOB"] = datetime.datetime.utcfromtimestamp(0) + datetime.timedelta(seconds=header["DOB"] * 24 * 60 * 60 ) # needs to be checked + header["VID"] = struct.unpack("I", fin.read(4))[0] + header["VisitID"] = fin.read(24) + header["VisitDate"] = struct.unpack("d", fin.read(8))[0] - 25569 + header["VisitDate"] = datetime.datetime.utcfromtimestamp(0) + datetime.timedelta(seconds=header["VisitDate"] * 24 * 60 * 60) # needs to be checked + header["GridType"] = struct.unpack("I", fin.read(4))[0] + header["GridOffset"] = struct.unpack("I", fin.read(4))[0] + + wholefile["header"] = header + fin.seek(2048) + U = array.array("B") + U.frombytes(fin.read(header["sizeXSlo"] * header["sizeYSlo"])) + U = np.array(U).astype("uint8").reshape((header["sizeXSlo"],header["sizeYSlo"])) + wholefile["sloImage"] = U + + sloOffset = 2048 + header["sizeXSlo"] * header["sizeYSlo"] + octOffset = header["BscanHdrSize"] + header["octSizeX"] * header["octSizeZ"] * 4 + bscans = [] + bscanheaders = [] + bscanqualities = [] + if parseSeg: + segmentations = None + for i in range(header["numBscan"]): + fin.seek(16 + sloOffset + i * octOffset) + bscanHead = OrderedDict() + bscanHead["startX"] = struct.unpack("d", fin.read(8))[0] + bscanHead["startY"] = struct.unpack("d", fin.read(8))[0] + bscanHead["endX"] = struct.unpack("d", fin.read(8))[0] + bscanHead["endY"] = struct.unpack("d", fin.read(8))[0] + bscanHead["numSeg"] = struct.unpack("I", fin.read(4))[0] + bscanHead["offSeg"] = struct.unpack("I", fin.read(4))[0] + bscanHead["quality"] = struct.unpack("f", fin.read(4))[0] + bscanHead["shift"] = struct.unpack("I", fin.read(4))[0] + bscanheaders.append(bscanHead) + bscanqualities.append(bscanHead["quality"]) + + # extract OCT B scan data + fin.seek(header["BscanHdrSize"] + sloOffset + i * octOffset) + U = array.array("f") + U.frombytes(fin.read(4 * header["octSizeX"] * header["octSizeZ"])) + U = np.array(U).reshape((header["octSizeZ"],header["octSizeX"])) + # remove out of boundary + v = struct.unpack("f", decode_hex('FFFF7F7F')[0]) + U[U == v] = 0 + # log normalize + U = np.log(10000 * U + 1) + U = (255. * (np.clip(U, 0, np.max(U)) / np.max(U))).astype("uint8") + bscans.append(U) + if parseSeg: + # extract OCT segmentations data + fin.seek(256 + sloOffset + i * octOffset) + U = array.array("f") + U.frombytes(fin.read(4 * header["octSizeX"] * bscanHead["numSeg"])) + U = np.array(U) + print(U.shape) + U[U == v] = 0. + if segmentations == None: + segmentations = [] + for j in range(bscanHead["numSeg"]): + segmentations.append([]) + + for j in range(bscanHead["numSeg"]): + segmentations[j].append(U[j*header["octSizeX"]:(j+1) * header["octSizeX"]].tolist()) + wholefile["cScan"] = np.array(bscans) + if parseSeg: + wholefile["segmentations"] = np.array(segmentations) + wholefile["slice-headers"] = bscanheaders + wholefile["average-quality"] = np.mean(bscanqualities) + self.wholefile = wholefile + import csv + from pathlib import Path, PurePath + volFeatures = [PurePath(fn).name, wholefile["header"]["version"].decode("utf-8").rstrip('\x00'), wholefile["header"]["numBscan"], wholefile["header"]["octSizeX"], wholefile["header"]["octSizeZ"], wholefile["header"]["distance"], wholefile["header"]["scaleX"], \ + wholefile["header"]["scaleZ"], wholefile["header"]["sizeXSlo"], wholefile["header"]["sizeYSlo"], wholefile["header"]["scaleXSlo"], wholefile["header"]["scaleYSlo"], wholefile["header"]["fieldSizeSlo"], \ + wholefile["header"]["scanFocus"], wholefile["header"]["scanPos"].decode("utf-8").rstrip('\x00'), wholefile["header"]["examTime"], wholefile["header"]["scanPattern"], wholefile["header"]["BscanHdrSize"], \ + wholefile["header"]["ID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["ReferenceID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["PID"], wholefile["header"]["PatientID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["DOB"], wholefile["header"]["VID"], wholefile["header"]["VisitID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["VisitDate"], \ + wholefile["header"]["GridType"], wholefile["header"]["GridOffset"], wholefile["average-quality"]] + output_dir = PurePath(fn).parent + output_csv = output_dir.joinpath('vols.csv') + if not Path(output_csv).exists(): + print("Creating vols.csv as it does not exist.") + with open(output_csv, 'w', newline='') as file: + writer = csv.writer(file) + writer.writerow(["filename", "version", "numBscan", "octSizeX", "octSizeZ", "distance", "scaleX", \ + "scaleZ", "sizeXSlo", "sizeYSlo", "scaleXSlo", "scaleYSlo", "fieldSizeSlo", \ + "scanFocus", "scanPos", "examTime", "scanPattern", "BscanHdrSize", \ + "ID", "ReferenceID", "PID", "PatientID", "DOB", "VID", "VisitID", "VisitDate", \ + "GridType", "GridOffset", "Average Quality"]) + with open(output_csv, 'r', newline='') as file: + existing_vols = csv.reader(file) + for vol in existing_vols: + if vol[0] == PurePath(fn).name: + print("Skipping,", PurePath(fn).name, "already present in vols.csv.") + return + with open(output_csv, 'a', newline='') as file: + print("Adding", PurePath(fn).name, "to vols.csv.") + writer = csv.writer(file) + writer.writerow(volFeatures) + + + + @property + def fileHeader(self): + """ + Retrieve vol header fields + + Returns: + Dictionary with the following keys + - version: version number of vol file definition + - numBscan: number of B scan images in the volume + - octSizeX: number of pixels in the width of the OCT B scan + - octSizeZ: number of pixels in the height of the OCT B scan + - distance: unknown + - scaleX: resolution scaling factor of the width of the OCT B scan + - scaleZ: resolution scaling factor of the height of the OCT B scan + - sizeXSlo: number of pixels in the width of the IR SLO image + - sizeYSlo: number of pixels in the height of the IR SLO image + - scaleXSlo: resolution scaling factor of the width of the IR SLO image + - scaleYSlo: resolution scaling factor of the height of the IR SLO image + - fieldSizeSlo: field of view (FOV) of the retina in degrees + - scanFocus: unknown + - scanPos: Left or Right eye scanned + - examTime: Datetime of the scan (needs to be checked) + - scanPattern: unknown + - BscanHdrSize: size of B scan header in bytes + - ID: unknown + - ReferenceID + - PID: unknown + - PatientID: Patient ID string + - DOB: Date of birth + - VID: unknown + - VisitID: Visit ID string + - VisitDate: Datetime of visit (needs to be checked) + - GridType: unknown + - GridOffset: unknown + + """ + return self.wholefile["header"] + + def bScanHeader(self, slicei): + """ + Retrieve the B Scan header information per slice. + + Args: + slicei (int): index of B scan + + Returns: + Dictionary with the following keys + - startX: x-coordinate for B scan on IR. (see getGrid) + - startY: y-coordinate for B scan on IR. (see getGrid) + - endX: x-coordinate for B scan on IR. (see getGrid) + - endY: y-coordinate for B scan on IR. (see getGrid) + - numSeg: 2 or 3 segmentation lines for the B scan + - quality: OCT signal quality + - shift: unknown + + """ + return self.wholefile["slice-headers"][slicei] + + def saveGrid(self, outfn): + """ + Saves the grid coordinates mapping OCT Bscans to the IR SLO image to a text file. The text file + will be a tab-delimited file with 5 columns: The bscan number, x_0, y_0, x_1, y_1 in pixel space + scaled to the resolution of the IR SLO image. + + Args: + outfn (str): location of where to output the file + + Returns: + None + + """ + grid = self.grid + with open(outfn, "w") as fout: + fout.write("bscan\tx_0\ty_0\tx_1\ty_1\n") + ri = 0 + for r in grid: + r = [ri] + r + fout.write("%s\n" % "\t".join(map(str, r))) + ri += 1 + + diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py new file mode 100644 index 00000000..76d137a5 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -0,0 +1,237 @@ +import os +os.chdir(os.path.dirname(os.path.abspath(__file__))) +current_directory = os.getcwd() +print(current_directory) + + +from .datasets import data +from .analysis_lib import grab_dataset,EvaluateClass,CreatePlotsRPD,OutputVis +from .Ensembler import Ensembler +from .table_styles import styles + +import pickle +from detectron2.config import get_cfg +from detectron2.data import DatasetCatalog,MetadataCatalog +from detectron2.modeling import build_model +from detectron2.data import build_detection_test_loader +from detectron2.checkpoint import DetectionCheckpointer +from detectron2.evaluation import inference_on_dataset, COCOEvaluator + +import pandas as pd +import logging +import configargparse +import progressbar +import urllib +logging.basicConfig(level=logging.INFO) + +import json +import urllib.request +import zipfile + +os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" +os.environ["CUDA_VISIBLE_DEVICES"] = "0" + +dpi= 120 +class MyProgressBar(): + # https://stackoverflow.com/a/53643011/3826929 + # George C + def __init__(self): + self.pbar = None + + def __call__(self, block_num, block_size, total_size): + if not self.pbar: + self.pbar=progressbar.ProgressBar(maxval=total_size) + self.pbar.start() + + downloaded = block_num * block_size + if downloaded < total_size: + self.pbar.update(downloaded) + else: + self.pbar.finish() + +def create_dataset(dataset_name, extracted_path): # Creates dataset and pk file from extracted images. + stored_data = data.rpd_data(extracted_path) + pickle.dump(stored_data, open(os.path.join(data.script_dir,f"{dataset_name}.pk"), "wb")) + +def configure_model(): + cfg = get_cfg() + moddir = os.path.dirname(os.path.realpath(__file__)) + name = 'working.yaml' + cfg_path = os.path.join(moddir, name) + cfg.merge_from_file(cfg_path) + return cfg + +def register_dataset(dataset_name): + for name in [dataset_name]: + try: + DatasetCatalog.register(name, grab_dataset(name)) + except: + print('Already registered.') + MetadataCatalog.get(name).thing_classes = ["rpd"] + +def run_prediction(cfg, dataset_name, output_path): + model = build_model(cfg) # returns a torch.nn.Module + myloader = build_detection_test_loader(cfg,dataset_name) + myeval = COCOEvaluator(dataset_name,tasks={'bbox','segm'},output_dir =output_path) #produces _coco_format.json when initialized + for mdl in ("fold1", "fold2", "fold3", "fold4","fold5"): + extract_directory = '../model' + if not os.path.isdir(extract_directory): + os.mkdir(extract_directory) + url = 'https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/models.zip' + path_to_zip_file, headers = urllib.request.urlretrieve(url, reporthook = MyProgressBar()) + with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref: + zip_ref.extractall(extract_directory) + file_name = mdl + "_model_final.pth" + model_weights_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), extract_directory, file_name) + print(model_weights_path) + DetectionCheckpointer(model).load(model_weights_path) # load a file, usually from cfg.MODEL.WEIGHTS + model.eval() #set model in evaluation mode + myeval.reset() + output_dir = os.path.join(output_path, mdl) + myeval._output_dir = output_dir + print("Running inference with model ", mdl) + results_i = inference_on_dataset(model, myloader, myeval) #produces coco_instance_results.json when myeval.evaluate is called + print("Done with predictions!") + +def run_ensemble(dataset_name, output_path, iou_thresh = 0.2): + ens = Ensembler(output_path,dataset_name,["fold1", "fold2", "fold3", "fold4","fold5"], iou_thresh=iou_thresh) + ens.mean_score_nms() + ens.save_coco_instances() + return ens + +def evaluate_dataset(dataset_name, output_path,iou_thresh = 0.2,prob_thresh = 0.5): + myeval = EvaluateClass(dataset_name, output_path, iou_thresh = iou_thresh, prob_thresh=prob_thresh,evalsuper=False) + myeval.evaluate() + with open(os.path.join(output_path,'scalar_dict.json'),"w") as outfile: + json.dump(obj=myeval.summarize_scalars(),fp=outfile) + return myeval + +def create_table(myeval): + dataset_table = CreatePlotsRPD.initfromcoco(myeval.mycoco,myeval.prob_thresh) + dataset_table.dfimg.sort_index(inplace=True) + return dataset_table + #dataset_table.dfimg['scan'] = dataset_table.dfimg['scan'].astype('int') #depends on what we want scan field to be + +def output_vol_predictions(dataset_table,vis,volID,output_path,output_mode='pred_overlay'): + dfimg = dataset_table.dfimg + imgids = dfimg[dfimg.volID ==volID].sort_index().index.values + outname = os.path.join(output_path,f'{volID}.tiff') + if output_mode=='pred_overlay': + vis.output_pred_to_tiff(imgids,outname,pred_only=False) + elif output_mode == 'pred_only': + vis.output_pred_to_tiff(imgids,outname,pred_only=True) + elif output_mode == 'originals': + vis.output_ori_to_tiff(imgids,outname) + elif output_mode == 'all': + vis.output_all_to_tiff(imgids,outname) + else: + print(f'Invalid mode {output_mode} for function output_vol_predictions.') + +def output_dataset_predictions(dataset_table,vis,output_path,output_mode = 'pred_overlay',draw_mode='default'): + vis.set_draw_mode(draw_mode) + os.makedirs(output_path,exist_ok=True) ## should this be set to exist_ok=False? + for volID in dataset_table.dfvol.index: + output_vol_predictions(dataset_table,vis,volID,output_path,output_mode) + +def create_dfvol(dataset_name, output_path, dataset_table): + dfvol = dataset_table.dfvol.sort_values(by=['dt_instances'],ascending=False) + with pd.option_context('styler.render.max_elements', int(dfvol.size)+1): + html_str = dfvol.style.format('{:.0f}').set_table_styles(styles).to_html() + html_file = open(os.path.join(output_path, 'dfvol_'+dataset_name+'.html'),'w') + html_file.write(html_str) + html_file.close() + +def create_dfimg(dataset_name, output_path, dataset_table): + dfimg = dataset_table.dfimg.sort_index() + with pd.option_context('styler.render.max_elements', int(dfimg.size)+1): + html_str = dfimg.style.set_table_styles(styles).to_html() + html_file = open(os.path.join(output_path, 'dfimg_'+dataset_name+'.html'),'w') + html_file.write(html_str) + html_file.close() + +def main(args): + dataset_name = None + input_dir = None + extracted = None + output = None + run_ext = True + run_inf = True + make_table = True + make_visuals = False + bm = False + bmo = False + imo = False + + print(args) + + dataset_name = args.get('dataset_name') # Access values from the dictionary + input_dir = args.get('input_dir') + extracted = args.get('extracted_dir') + input_format = args.get('input_format') + output = args.get('output_dir') + run_ext = args.get('run_extract', True) # Provide default values + make_dataset = args.get('create_dataset',True) + run_inf = args.get('run_inference', True) + make_table = args.get('create_tables', True) + bm = args.get('binary_mask', False) + bmo = args.get('binary_mask_overlay', False) + imo = args.get('instance_mask_overlay', False) + make_visuals = (bm | bmo | imo) + + iou_thresh = 0.2 + prob_thresh = 0.5 + if run_ext: + if not os.path.isdir(extracted): + print("Extracted dir does not exist! Making extracted dir...") + os.mkdir(extracted) + data.extract_files(input_dir, extracted, input_format) + print("Image extraction complete!") + if make_dataset: + print("Creating dataset from extracted images...") + create_dataset(dataset_name, extracted) + if run_inf: + print("Configuring model...") + cfg = configure_model() + print("Registering dataset...") + register_dataset(dataset_name) + if not os.path.isdir(output): + print("Output dir does not exist! Making output dir...") + os.makedirs(output) + print("Running inference...") + run_prediction(cfg, dataset_name, output) + print("Inference complete, running ensemble...") + run_ensemble(dataset_name, output) + print("Ensemble complete!") + if make_table or make_visuals: + print("Registering dataset...") + register_dataset(dataset_name) + print("Evaluating dataset...") + eval = evaluate_dataset(dataset_name, output, iou_thresh, prob_thresh) + print("Creating dataset table...") + table = create_table(eval) + if make_table: + create_dfvol(dataset_name, output, table) + create_dfimg(dataset_name, output, table) + print("Dataset htmls complete!") + if make_visuals: + vis = OutputVis(dataset_name, + prob_thresh = eval.prob_thresh, + pred_mode = 'file', + pred_file = os.path.join(output, 'coco_instances_results.json'), + has_annotations=False) + vis.scale=1.0 + if bm: + print("Creating binary masks tif (no overlay)...") + vis.annotation_color='w' + output_dataset_predictions(table,vis,os.path.join(output,'predicted_binary_masks'),'pred_only','bw') + if bmo: + print("Creating binary masks tif (with overlay)...") + output_dataset_predictions(table,vis,os.path.join(output,'predicted_binary_overlays'),'pred_overlay','bw') + if imo: + print("Creating instances masks tif (with overlay)...") + output_dataset_predictions(table,vis,os.path.join(output,'predicted_instance_overlays'),'pred_overlay','default') + print("Visualizations complete!") + +# if __name__ == "__main__": +# main(sys.argv[1:]) +# # main_alt() \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml b/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml new file mode 100644 index 00000000..47d3aa24 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml @@ -0,0 +1,56 @@ +_BASE_: "Base-RCNN-FPN.yaml" +MODEL: + WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl" + PIXEL_STD: [57.375, 57.120, 58.395] + MASK_ON: True + RESNETS: + STRIDE_IN_1X1: False # this is a C2 model + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + DEPTH: 101 + ROI_HEADS: + NUM_CLASSES: 1 + SCORE_THRESH_TEST: 0.001 + NMS_THRESH_TEST: .01 +INPUT: + MIN_SIZE_TRAIN: (496,) + MIN_SIZE_TEST: 496 +SOLVER: + BASE_LR: 0.02 + #GAMMA: 0.05 + #STEPS: (3000, 7000, 11000, 15000) + #MAX_ITER: 18000 + GAMMA: 0.1 + STEPS: (3000, 4500) + MAX_ITER: 6000 + CHECKPOINT_PERIOD: 300 + IMS_PER_BATCH: 14 +TEST: + DETECTIONS_PER_IMAGE: 30 # LVIS allows up to 300 + EVAL_PERIOD: 300 +DATALOADER: + SAMPLER_TRAIN: "RepeatFactorTrainingSampler" + REPEAT_THRESHOLD: 0.001 + NUM_WORKERS: 4 +# DATASETS: +# TRAIN: ("fold1","fold2","fold3","fold4",) +# TEST: ("fold5",) +# OUTPUT_DIR: "./output_valid_fold5" +# DATASETS: +# TRAIN: ("fold2","fold3","fold4","fold5",) +# TEST: ("fold1",) +# OUTPUT_DIR: "./output_valid_fold1" +# DATASETS: +# TRAIN: ("fold3","fold4","fold5","fold1",) +# TEST: ("fold2",) +# OUTPUT_DIR: "./output_valid_fold2" +# DATASETS: +# TRAIN: ("fold4","fold5","fold1","fold2",) +# TEST: ("fold3",) +# OUTPUT_DIR: "./output_valid_fold3" +# DATASETS: +# TRAIN: ("fold5","fold1","fold2","fold3",) +# TEST: ("fold4",) +# OUTPUT_DIR: "./output_valid_fold4" + +#modifiying to commit again \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/scripts/table_styles.py b/models/retinalOCT_RPD_segmentation/scripts/table_styles.py new file mode 100644 index 00000000..148e76b6 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/table_styles.py @@ -0,0 +1,41 @@ +def hover(hover_color="#add8e6"): + return dict(selector="tbody tr:hover", + props=[("background-color", "%s" % hover_color)]) + +styles = [ + #table properties + dict(selector=" ", + props=[("margin","0"), + ("font-family",'"Helvetica", "Arial", sans-serif'), + ("border-collapse", "collapse"), + ("border","none"), + ("border", "2px solid #ccf") + ]), + +# #header color - optional +# dict(selector="thead", +# props=[("background-color","#cc8484") +# ]), + + #background shading + dict(selector="tbody tr:nth-child(even)", + props=[("background-color", "#fff")]), + dict(selector="tbody tr:nth-child(odd)", + props=[("background-color", "#eee")]), + + #cell spacing + dict(selector="td", + props=[("padding", ".5em"),("text-align","center")]), + + #header cell properties + dict(selector="th", + props=[("font-size", "125%"), + ("text-align", "center")]), + + #caption placement + dict(selector="caption", + props=[("caption-side", "bottom")]), + + #render hover last to override background-color + hover() +] diff --git a/models/retinalOCT_RPD_segmentation/scripts/working.yaml b/models/retinalOCT_RPD_segmentation/scripts/working.yaml new file mode 100644 index 00000000..47d3aa24 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/working.yaml @@ -0,0 +1,56 @@ +_BASE_: "Base-RCNN-FPN.yaml" +MODEL: + WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl" + PIXEL_STD: [57.375, 57.120, 58.395] + MASK_ON: True + RESNETS: + STRIDE_IN_1X1: False # this is a C2 model + NUM_GROUPS: 32 + WIDTH_PER_GROUP: 8 + DEPTH: 101 + ROI_HEADS: + NUM_CLASSES: 1 + SCORE_THRESH_TEST: 0.001 + NMS_THRESH_TEST: .01 +INPUT: + MIN_SIZE_TRAIN: (496,) + MIN_SIZE_TEST: 496 +SOLVER: + BASE_LR: 0.02 + #GAMMA: 0.05 + #STEPS: (3000, 7000, 11000, 15000) + #MAX_ITER: 18000 + GAMMA: 0.1 + STEPS: (3000, 4500) + MAX_ITER: 6000 + CHECKPOINT_PERIOD: 300 + IMS_PER_BATCH: 14 +TEST: + DETECTIONS_PER_IMAGE: 30 # LVIS allows up to 300 + EVAL_PERIOD: 300 +DATALOADER: + SAMPLER_TRAIN: "RepeatFactorTrainingSampler" + REPEAT_THRESHOLD: 0.001 + NUM_WORKERS: 4 +# DATASETS: +# TRAIN: ("fold1","fold2","fold3","fold4",) +# TEST: ("fold5",) +# OUTPUT_DIR: "./output_valid_fold5" +# DATASETS: +# TRAIN: ("fold2","fold3","fold4","fold5",) +# TEST: ("fold1",) +# OUTPUT_DIR: "./output_valid_fold1" +# DATASETS: +# TRAIN: ("fold3","fold4","fold5","fold1",) +# TEST: ("fold2",) +# OUTPUT_DIR: "./output_valid_fold2" +# DATASETS: +# TRAIN: ("fold4","fold5","fold1","fold2",) +# TEST: ("fold3",) +# OUTPUT_DIR: "./output_valid_fold3" +# DATASETS: +# TRAIN: ("fold5","fold1","fold2","fold3",) +# TEST: ("fold4",) +# OUTPUT_DIR: "./output_valid_fold4" + +#modifiying to commit again \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/scripts/ybpres.mplstyle b/models/retinalOCT_RPD_segmentation/scripts/ybpres.mplstyle new file mode 100644 index 00000000..a0c9a964 --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/scripts/ybpres.mplstyle @@ -0,0 +1,6 @@ +axes.titlesize : 16 +axes.labelsize : 16 +lines.linewidth : 2 +lines.markersize : 6 +xtick.labelsize : 15 +ytick.labelsize : 15 From 1e02cc58850834f7b965921a342ed775830f504c Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Wed, 12 Mar 2025 14:03:44 -0700 Subject: [PATCH 02/28] Deleted the zip file download in inference.py. Updated urls in large_files.yaml. Fixed case-sensitivity for .png/.PNG in dataset/data.py. Made confidence threshold an external argument. --- .../configs/inference_yb.yaml | 26 ------------------- .../configs/large_files.yaml | 24 +++++++++++++++-- .../docs/README.md | 5 ++-- .../scripts/datasets/data.py | 2 +- .../scripts/inference.py | 11 +++----- 5 files changed, 29 insertions(+), 39 deletions(-) delete mode 100644 models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml diff --git a/models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml b/models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml deleted file mode 100644 index 488de340..00000000 --- a/models/retinalOCT_RPD_segmentation/configs/inference_yb.yaml +++ /dev/null @@ -1,26 +0,0 @@ -imports: -- $import scripts -- $import scripts.inference - -args: - run_extract : False - # input_dir : "/data/amd-data/cera-rpddata/Himeesh DICOM/Folder 1" - # extracted_dir : "/data/yelena/monaiRPD/extracted_dicom" - # input_format : "dicom" - input_dir : "/data/amd-data/cera-rpddata/RPD_Himeesh_v2" - extracted_dir : "/data/yelena/monaiRPD/extracted_vol" - input_format : "vol" - create_dataset : False - dataset_name : "monai_vol" - - output_dir : "/data/yelena/monaiRPD/output_vol" - run_inference : False - create_tables : False - -# create visuals - binary_mask : False - binary_mask_overlay : False - instance_mask_overlay : False - -inference: -- $scripts.inference.main(@args) \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/configs/large_files.yaml b/models/retinalOCT_RPD_segmentation/configs/large_files.yaml index e4e5e95d..72728060 100644 --- a/models/retinalOCT_RPD_segmentation/configs/large_files.yaml +++ b/models/retinalOCT_RPD_segmentation/configs/large_files.yaml @@ -1,5 +1,25 @@ large_files: - - path: "models/models.zip" - url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/models.zip" + - path: "models/fold1_model_final.pth" + url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold1_model_final.pth" + hash_val: "" + hash_type: "" + + - path: "models/fold2_model_final.pth" + url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold2_model_final.pth" + hash_val: "" + hash_type: "" + + - path: "models/fold3_model_final.pth" + url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold3_model_final.pth" + hash_val: "" + hash_type: "" + + - path: "models/fold4_model_final.pth" + url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold4_model_final.pth" + hash_val: "" + hash_type: "" + + - path: "models/fold5_model_final.pth" + url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold5_model_final.pth" hash_val: "" hash_type: "" \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index d717514c..e9695e33 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -100,8 +100,9 @@ To run inference on your dataset: The final ensembled predictions will be saved in COCO Instance Segmentation format in `coco_instances_results.json` in the output directory. The output directory will also be populated with five folders with the preffix 'fold' which contain predictions from the individual models of the ensemble. ### SUMMARY TABLES and VISUAL OUTPUT -Tables and images can be created from the predictions and written to the output directory. -These tables can be created by setting `create_tables` to `True`: +Tables and images can be created from the predictions and written to the output directory. A confidence threshold of 0.5 is applied to the scored predictions by default. To change the threshold, set the `prob_thresh` value between 0.0 and 1.0. + +The tables can be created by setting `create_tables` to `True`: * HTML table called `dfimg_.html` indexed by OCT-B scan with columns listing the detected number of RPD instances (dt_instances), pixels (dt_pixels), and horizontal pixels (dt_xpxs) in that B-scan. * HTML table called `dfvol_.html` indexed by OCT volume with columns listing the detected number of RPD instances (dt_instances), pixels (dt_pixels), and horizontal pixels (dt_xpxs) in that volume. diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py index 652baf84..31dbf260 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -93,7 +93,7 @@ def rpd_data(extracted_path): dataset = [] instances = 0 wrong_poly = 0 - extracted_files = glob.glob(os.path.join(extracted_path,'**/*.png'),recursive=True) + extracted_files = glob.glob(os.path.join(extracted_path,'**/*.[Pp][Nn][Gg]'),recursive=True) print("Generating dataset of images...") for fn in tqdm(extracted_files): fn_adjusted = fn.replace('\\','/') diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 76d137a5..055dddb0 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -75,12 +75,6 @@ def run_prediction(cfg, dataset_name, output_path): myeval = COCOEvaluator(dataset_name,tasks={'bbox','segm'},output_dir =output_path) #produces _coco_format.json when initialized for mdl in ("fold1", "fold2", "fold3", "fold4","fold5"): extract_directory = '../model' - if not os.path.isdir(extract_directory): - os.mkdir(extract_directory) - url = 'https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/models.zip' - path_to_zip_file, headers = urllib.request.urlretrieve(url, reporthook = MyProgressBar()) - with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref: - zip_ref.extractall(extract_directory) file_name = mdl + "_model_final.pth" model_weights_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), extract_directory, file_name) print(model_weights_path) @@ -156,6 +150,8 @@ def main(args): output = None run_ext = True run_inf = True + prob_thresh = 0.5 + iou_thresh = 0.2 make_table = True make_visuals = False bm = False @@ -172,14 +168,13 @@ def main(args): run_ext = args.get('run_extract', True) # Provide default values make_dataset = args.get('create_dataset',True) run_inf = args.get('run_inference', True) + prob_thresh = args.get('prob_thresh',0.5) make_table = args.get('create_tables', True) bm = args.get('binary_mask', False) bmo = args.get('binary_mask_overlay', False) imo = args.get('instance_mask_overlay', False) make_visuals = (bm | bmo | imo) - iou_thresh = 0.2 - prob_thresh = 0.5 if run_ext: if not os.path.isdir(extracted): print("Extracted dir does not exist! Making extracted dir...") From 3ac9f28aa369c5240d8b24c897f2a844b6ab45f1 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Tue, 25 Mar 2025 10:27:49 -0700 Subject: [PATCH 03/28] Implemented unit testing and added sample_data. --- ci/bundle_custom_data.py | 2 + .../test_retinalOCT_RPD_segmentation.py | 125 ++++++++++++++++++ .../configs/metadata.json | 54 ++++---- ...5a985fb301988fce780dcaad37e71a_oct_026.png | Bin 0 -> 207284 bytes ...5a985fb301988fce780dcaad37e71a_oct_051.png | Bin 0 -> 198775 bytes ...5a985fb301988fce780dcaad37e71a_oct_060.png | Bin 0 -> 198794 bytes ...abf1e4c558ab7b7637b88d962920af_oct_027.png | Bin 0 -> 217808 bytes ...abf1e4c558ab7b7637b88d962920af_oct_033.png | Bin 0 -> 201337 bytes .../scripts/Ensembler.py | 12 +- .../scripts/analysis_lib.py | 38 +++--- .../scripts/datasets/data.py | 11 +- .../scripts/datasets/volReader.py | 9 +- .../scripts/inference.py | 29 ++-- 13 files changed, 210 insertions(+), 70 deletions(-) create mode 100644 ci/unit_tests/test_retinalOCT_RPD_segmentation.py create mode 100644 models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_026.png create mode 100644 models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_051.png create mode 100644 models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_060.png create mode 100644 models/retinalOCT_RPD_segmentation/sample_data/8c85a17e87eef485a975566dab6b54cafbabf1e4c558ab7b7637b88d962920af_oct_027.png create mode 100644 models/retinalOCT_RPD_segmentation/sample_data/8c85a17e87eef485a975566dab6b54cafbabf1e4c558ab7b7637b88d962920af_oct_033.png diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index 6f20d112..51cb50bf 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -23,6 +23,7 @@ "maisi_ct_generative", "cxr_image_synthesis_latent_diffusion_model", "brain_image_synthesis_latent_diffusion_model", + "retinalOCT_RPD_segmentation", ] # This list is used for our CI tests to determine whether a bundle contains the preferred files. @@ -47,6 +48,7 @@ "mednist_ddpm", "cxr_image_synthesis_latent_diffusion_model", "brain_image_synthesis_latent_diffusion_model", + "retinalOCT_RPD_segmentation", ] # This list is used for our CI tests to determine whether a bundle needs to be tested after downloading diff --git a/ci/unit_tests/test_retinalOCT_RPD_segmentation.py b/ci/unit_tests/test_retinalOCT_RPD_segmentation.py new file mode 100644 index 00000000..7f82570f --- /dev/null +++ b/ci/unit_tests/test_retinalOCT_RPD_segmentation.py @@ -0,0 +1,125 @@ +import glob +import json +import os +import shutil +import subprocess +import sys +import tempfile +import unittest + +import numpy as np +import pandas as pd +import yaml +from PIL import Image + + +class TestRPDInference(unittest.TestCase): + def setUp(self): + print(os.getcwd()) + # set the bundle root to the directory the test is being run from. + self.bundle_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..","..","models", "retinalOCT_RPD_segmentation")) + # Change the current working directory to bundle_root + os.chdir(self.bundle_root) + + # Create a temporary directory for test data + self.test_data_dir = tempfile.mkdtemp() + self.extracted_dir = os.path.join(self.bundle_root, "sample_data") + + + # create a dummy metadata.json file. + metadata_file = os.path.join(self.test_data_dir, "metadata.json") + metadata = { + "version": "0.0.1", + "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", + } + with open(metadata_file, 'w') as f: + json.dump(metadata, f) + + # create output directory. + self.output_dir = os.path.join(self.test_data_dir, "output") + os.makedirs(self.output_dir) + + + + def tearDown(self): + # Clean up the temporary directory + shutil.rmtree(self.test_data_dir) + + + def test_inference_run(self): + # Override configuration parameters + override = { + "args": { + "extracted_dir": self.extracted_dir, + "output_dir": self.output_dir, + "run_extract": False, + "create_dataset": True, + "run_inference": True, + "binary_mask": True, + "binary_mask_overlay": True, + "instance_mask_overlay": True, + "dataset_name": "testDataset" + }, + } + + # Load the original inference.yaml + inference_yaml_path = "configs/inference.yaml" + with open(inference_yaml_path, 'r') as f: + inference_yaml = yaml.safe_load(f) + + # Modify inference.yaml with override parameters. + inference_yaml['args'].update(override['args']) + + # Create a new inference.yaml in the test_data_dir + test_inference_yaml_path = os.path.join(self.test_data_dir, "inference.yaml") + with open(test_inference_yaml_path, 'w') as f: + yaml.dump(inference_yaml, f) + + # Run the inference command using subprocess + cmd = [ + sys.executable, # Use the same Python interpreter + "-m", + "monai.bundle", + "run", + "inference", + "--bundle_root", + self.bundle_root, + "--config_file", + test_inference_yaml_path, # Use the new file + "--meta_file", + os.path.join(self.test_data_dir, "metadata.json"), + ] + + try: + subprocess.run(cmd, check=True) + except subprocess.CalledProcessError as e: + self.fail(f"Inference command failed: {e}") + + + # Add assertions to check the output + # Check if output files were created + output_files = os.listdir(self.output_dir) + self.assertTrue(len(output_files) > 0) + + # Check for the COCO JSON file + coco_file_found = glob.glob(os.path.join(self.output_dir,'**','coco_instances_results.json'),recursive=True) + print(coco_file_found) + self.assertTrue(len(coco_file_found)==6) + + # Check for the TIFF files. + tiff_files_found = glob.glob(os.path.join(self.output_dir,'**','*.tiff'),recursive=True) + self.assertTrue(len(tiff_files_found)==6) + + # Check for the html files. + html_files_found = glob.glob(os.path.join(self.output_dir,'*.html')) + self.assertTrue(len(html_files_found)==2) + + # At least 10 RPD present in sample data + dfvol = pd.read_html(os.path.join(self.output_dir,'dfvol_testDataset.html'))[0] + self.assertTrue(dfvol['dt_instances'].sum()[0]>10) + + + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index cbea63c3..45e3101a 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -1,28 +1,30 @@ { - "version": "0.0.1", - "changelog": { - "0.0.1": "Initial version" - }, - "monai_version": "1.1.0", - "pytorch_version": "1.10.0", - "numpy_version": "1.21.2", - "required_packages_version": { - "opencv-python-headless": "4.11.0.86", - "pandas": "1.3.5", - "seaborn": "0.12.2", - "scikit-learn": "1.0.2", - "configargparse": "1.7", - "progressbar": "2.5", - "pydicom": "2.4.4", - "fire": "0.7.0", - "jinja2": "3.1.5", - "detectron2": "0.6+cu113" - }, - "task": "Reticular Pseudodrusen (RPD) instance segmentation.", - "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", - "authors": "Yelena Bagdasarova, Scott Song", - "copyright": "Copyright (c) 2022, uw-biomedical-ml", -"network_data_format": { + "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", + "version": "0.0.1", + "changelog": { + "0.0.1": "Initial version" + }, + "monai_version": "1.1.0", + "pytorch_version": "1.10.0", + "numpy_version": "1.21.2", + "optional_packages_version": { + "opencv-python-headless": "4.11.0.86", + "pandas": "1.3.5", + "seaborn": "0.12.2", + "scikit-learn": "1.0.2", + "configargparse": "1.7", + "progressbar": "2.5", + "pydicom": "2.4.4", + "fire": "0.7.0", + "jinja2": "3.1.5", + "detectron2": "0.6+cu113" + }, + "name": "retinalOCT_RPD_segmentation", + "task": "Reticular Pseudodrusen (RPD) instance segmentation.", + "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", + "authors": "Yelena Bagdasarova, Scott Song", + "copyright": "Copyright (c) 2022, uw-biomedical-ml", + "network_data_format": { "inputs": { "image": { "type": "image", @@ -61,10 +63,12 @@ } }, "outputs": { - "instances": { + "pred": { + "dtype": "dictionary", "type": "dictionary", "format": "COCO", "modality": "n/a", + "value_range": [0,1], "num_channels": 1, "spatial_shape": [496,1024], "channel_def": {"0": "RPD"}, diff --git a/models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_026.png b/models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_026.png new file mode 100644 index 0000000000000000000000000000000000000000..25bdb40f3171956c524b71a48dc1943ba1ba29b0 GIT binary patch literal 207284 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®*lpVy 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�Xu7op*0Ss!n?vOcVLv=T#Y#IK-cyg2FN_y@OjK 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�xc|oF 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%0A(0 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 X>$qIV$-tQx00000NkvXXu0mjfKT)b& literal 0 HcmV?d00001 diff --git a/models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_051.png b/models/retinalOCT_RPD_segmentation/sample_data/37721c93df11e35a8caa9b15616841ae985a985fb301988fce780dcaad37e71a_oct_051.png new file mode 100644 index 0000000000000000000000000000000000000000..d649eaa40479b71fd3df63df533b4d871ccad28f GIT binary patch literal 198775 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%0D!)K;WKN5UURcg3$%NZAYktMLPr-ckPwKb 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

MD+svDYf6wW*0FfDnu{^o!T#mEcAmd zs7G$puNk*EbeCBCq7OJXIn&h?=aC8e006CAe5kw>du(fP!6>laDel!_RwINro}d(# zRYxn4!(lF^Q8OX@VFA!C+N6;u#x(3IS5!PPoe3q~4rb2;l$l}`6=IPr8 z0x&zMB5%(~vVs_R;smm%R zaZo-jwJnXh=fqAr`$9r-2PJBud~zlyR@_}$Oo@9bAVeZzRT1(~HYK-K)>_^<&zkPXhdg1lkvi*?9hj=fY8m=NcbBFAf5gHZQa9C;{ z)ifhP+rD>c^{SD!i&ZO&V3k0IBFMuJsL@EKMqQO)cAynYNKf6ZaThZrCqvW0)8ENe z2iNrUvF}#je?Np)RscaaY^>|XuuBV6Iy|%F!;@aN&+i`e!D@XlXXvESQ827gcWXMG zXb-9lsU;+m`U)jvDNl#?@;v#mxohOxo69i_hk6?ZIYfX`Rrm0HDX=?weE4-Q?$aZd zqVm`8+>ZLaBC7=tM}D1i`W^t-$*vzYB(C`!xsEOg;jc$sEZ?c54UPcqeHF7ed`L=bV5rBz2m$2q}%tTaCz@ia2w-$g(V;hr-;> zdbU(wO_}v907RYqKIPUh9h)Wy>FLmaw|p@Vc@s5z003Y-?;!z{ssXeuVA%SH*P-*y zs$#a*+*p~aXPr(fVk(BE0%;xF0J#Va1RRiKBXVgK6{K~DwdHEqr?&-*C0;C zx?xK>)H6ugS;ox+l_e2Fi;R5E-KIUCNlc?H{jlzka$+kJ_n=QZI2d2kgZg(Kc7d#g zkalE}m#UamYihGkH94NvAbmyO@LW2@fhj2!gPn0Aze|Z__Z1a)tMoIe%^OxlI|$J) zyDW(v?f(+ps@U_#{)p6g_r}@<8iQSN`AR!?F|-JBc=z4ltpjbFai2g?@VqWgb-A`X z0dM-b(xPR_qb^z-RhasLL0D)An@7%5Kx6i}oQac*<0@g&sKDGPhc4q_tvemyC zHG`tKG{-%yUbL-Big>*NETPLK9NGv?H?!tDF#^tZW=p!StQhMrsnsoZ`@AV``b^3R zL!^4XU8oIbYWSMm?2ChgMXYdazr{PN+SG)m*XrptwLRk@_uadXoAWck!|-*TJAO#k zrzmQ!r2u#)vl6?OD<~=2>3D;XtzIG{B4B@HiA05dXo+0r8<(O8Sqm?l=_bBw#*7hy zV-QkgCaChNWl)d`DA26<-3s8vQNSpwG#G1O43w_evg__Pf_*RO+DfPdQ1L6Yq9d|H zuhq;OaZyQ)b%~u5ouh~D-VKfNY|E;5h_Ply=;Dn`#WY9$0&9+~lo5-P8O*^y$++j4uyr z!B)}*R@2<0X0)kxLaExqY88M0AveX(LzA4d?RQ1gc5f&@uPayeF1CnWXRBMOsH2?- zs&j?Y)^zD>0%*;hoAD=e)V?uVz zE#%3BJBZ@zM)lCFP5?yy5awu}>U#hr7aHw&+*3iR83@(E>+f7NDm89b0D2rb^S_^z zYXX2?f8QabFYq6GP*!9@mA&xk#w_=l%Y3m++ZlA@i~Wxj-Dz35vYcM8MN=jYR-}hnmGXc z@j{GI5~CW{%uCde6z-{Kg~=SS0cAC5s5KEMM!-2^D2!)ZX@PZj4irfA1g@ykDX1AY zrYo}tH1t2Bo1r#j1)^cBzm3SZ~z!5mWkWZKv;}zkK~jtbxsHzPQH-($%$e6vZl)1He+Kvysc`%5`mf z9Rbj3DL^*xf$FeNbn}^X1Y-53icdK}B`6a-9%3#!d{yGFzuwydz`_a{n4le$2G;9| zs#Ln|_M6{(yPjLMdD}|6_iCjGpTdNFXr-UiB%k~A0Y*>b_)&=&{Lis2#Ciqr$7aL5 z%f7&1U%}m1D7AhRIZDQingKd<9v(9M)cv#63O9W!td_U}_*ejbXvJllGpH^twO0gy zLgTy@s6hVi_5})ADbiAFY0<}SCsY7b0Z2VBkYo2GCnEj%)x%wK@t_FL{JEZ|`y~5L zR{*FL{lUHqqs&&FG^gdze%+550NOzm-G|*t1IyBo1Ru5CT&F;)djJ51YfhpIQCJSS zh}@5~WGE>Ut9wlPI188br%>$<@P||gBq>>2(S%}r-ge%IN{N+K@hTZ(oT~KmqI)o(zY0uB5y*-fDna| zSR$hWRG8$oZGzamYvr63#DiQ2Wc?v^$(qPYV)EE$3a2(i)rEVheS1EbX&j$D^bXaz z>1&F`J0S{BRBL1)5NSt7m_sC)&zkd6YpdK=KsLaQXybibVd!ogBR~CuyK%yI`W7oN z-NW`bIeoyV{&e*Tz}uf(`-)Um|50E#?$9xQcM1#PF!}{h)C(Gvx;Mt>X7tI(BoF{V zA|0=VOO5h4??^?7od5#U50~}%#TCXGiao&y0P~)i!sXcQ!x9Ss0ptkXDSRy@F9-nn zww>Y(06>)&fIv++18@q8)rPM!g}}iB>`ocBp_Z#qnDc0N^8^bR+P7!30T6%_+y~6h zPvsT6BdL<|9i_?G(V;o-*_RSq7C_6jAF^ip)ca_TxSz{=pMkE>YbSW;w}v(K&TN5L zgt^p~wbg5zsNmzB%jCxjjb3uvVR8kP76cG-Rx)lI#wwIEkM^=g0HE>*1yBLm^Wp2- zwODw|BT-jOQ7UN4LewmjFrIj=H4x@xlFLdIN=b_>8fax!+l-%Y9}?zBGsl5eEzOV$x1E0&k)@xDt**{E5LTmsuEHeKd;B;2COMlVew*Z zh78qYfr4?yF~(gQe`QM5C6=vbt$|62e#s$QB8i~7##g_SD_3tr+m^KwFA_n71-Tq# z+Y~4znTN83xS5Jiy6Zif$A1G({wV&rUXu#b{ouE@%hKrLq>z@&RJ`lOa3{Z+e6Q6N z5Y(n)yXyu-3Q17cq|v)>u0C=h(a>p0Lz|qaO;PO{;8~Un05sjsx;594wjCs$|1^B` z{eL&gRcP4_U|BFMgQBvNQQN%Wqq*lvZ2-X2VgaJmGsCP~b?NnPo2;t~GBNOe$kFPn zedIp?N&%Rh8?9f?gjbdTs(g^J!P^@E0kmp9_rH77fU$zCJekyfZZB6$sm% zWo%o)^)Rtih_7C9m)W)rn(8X?3V=!(2%pm#bHF8Nd(Q2^OWaMCq6h!O^=60q@*W5K z21;Wse=e-QuLrjI(&fY|vUL;L2Uds{6NWMG-MDjD_g1@Pn@cvm-j(&Tp?fgheqR}j z34;Sbs^-zeO=OCZ7f_0;T7K_${-6bFb*hCBK*v_2H5{@h%PSKCU6e5x#74#>#;Kn^$X^Q38+aTCri!s%>pRj*9m`d~=jS_}D?~KQ^92 z++Qx$aG8&Op2VZ%;6r}^Ew_)bKY2?fnmIEuxtQIc->kRYatD(OkJ6kcx#Vxll|PO3&k0R5F*Y~ zks^~cjwucNf^tOwzcVUCl~}Gj!wrD7bc=MLH4%fD9kR+;A;_*~kP-0@?*b9<{Ibcm zIB+eN&W0dr`q1@Ys{~}pd8umTvKFWnS*pmW?45zAG*?U#uW+YMG1N{Hl z`j2JHk|awMQ(|nBL+-s!B9c^fRW<6NA%ejZ%rFAJ8vg+*-Tk_YWM)LT`z7a`&5Wrk z2K9#V54OxyZL!|2vF>q*N&II$LEGQ*p=je%DNHqdjZKaP<^gVpUIK^Hn9ecsLFMhzZ@>8LgUI$w(%)xCy*jdgb?bUu1lMI9YkW4Ca@ zmGUoIXh>Yr9Ls#NuJG}(<<^tzc)lh*+|+Rj@0ZV?ok6M4x;@>AkN$qnc?|Tn$<$71 zw@U7bZ-8dt2wd+&T>PoR;lUjM0GIiFwQ+wyk!e_(N;$u{{qxgnIb7Fq`T#5R{gUeE z^zO&kr-5M$^8-|m@26WucY8!_YR|)lXeqSYaZcZhIov^vuH%1$>B~&(`je(Y?$SA&Ug#6+*x3$&GE?8QJ2{Ps6V$4j?q7ea~H~tVCvnTUlUXSfZvTrheAU* z;A)R`|C8o%ytQ$L$9{GwiJV)TVIUW5O<-tQaf;G}Njm@!>O2x9(b6E8skkWE9y+Oz zuL3BwOj9>!$J3Epc|3iUw^AylYvbYH#;?y7ejKj1U=`lT{L22$8&w8lo6djK8}|Q=2_zE zwBvGoKWK2WJ^XY{&It;>6EcN;6Lts?DtESr>(Y4{dlba#Xr04RnVuS#n0!m1}rSt zp6aH(&$^CN$sJpeoiTlX4csrMUj(1R;?sV}i{4|QFrOZ`nuE&_q{B^O>qB@8=kv$W zPG!}*0)QVa0>Hj8^V>OeGC+hp{4BAdADnaZ$BAI{ER9`%d*!^OF*B(HWEu-n?VW;S zUFc_wAtel5_NSv^_=YJOF$P( zG$xeB-icK7WUY`^YF#}80Mgw1p3z4j@oXI=2kLxC!((R$Y5~zt@u>R-rwQHiUcy{4 z?C3syRX%_Faii165=TJKHG6Yo^}LUiOxCgXawVU<)n#rHYaI;sGlTRl!{}Ii%0iKP zZ&qII+8ba@x13I)Au@sV7H2#X$;&Z%zzoZ#rHzgCGN+}bMtrCUa#_4X=O81Yi(Oqf zJAIvby!!@EejoB2AMbxhH5dCfKEgo!IMVFgyZUWR+c}`r7x#X(cd%_rncZ|6%kp{r z*IpIxe$11*KvO>~W&HXh4g4H)R=OP15%#lteD(h$UKEDjC_Lf!Z)D(t-+W2AqKA)= ztsb}0k9qlV;#PxGin&Z7ee}UYZ`e!qr)gfLu%G%Nt)m}(&u~AUudTqG!+ZmPd)eT_ zpWid&=}-Q?hGuK}DczXI@j)I{PmgvE7C%CmLRI$plHju3UlV@p^F>X|{^E8RBSTD! z#0m58Yqi*6P9f6vn{MFw9gybpLsJbS=;OmE!8q7NHGf_9_q41~ny=CK2g-XKb6sXI zH?&sj{b>;QdV~b4Dx6NgE#+a5VRD;yhr-^5yy5jNME+?R2lcSOVuyzCADy@apc*E~ zVP3&R>GwRrp=k@Cc&TqpN!A!7M~pWgTVck*p|pSn_nzSBE?Lvu`LHNv3f!y52(CN8 zA-N-P&#pOay&MsOSxB*UvPR(?O5}n&@!(r*y9Bua0EP2mtKlZx#%VH`BvU_dT>apn zj~Hblp;mS6W;jfOduhjJTI#{$z^L(jQ)OjqN7o;zQ4ke$1jh#8rA+=vV^x0P8(5d4 zb%C79JAXQ-2|E{+vS*jV{l`%FF*q`CLJj701|6s1nIb-odi_4lw-=NqHIMq?{||M& zG0R)1opjrF13UUmzdq_4KzsET*`?uj!=PLqW*>|Gs0r=ckN)%gKM>TNfBg67C&-t# z9VFcJnjmFY&>SKAf4Ke|cRH+~!-3Nu?gk|wDPTaz|cU)C5++G*- zK&STRivQD3A4|V`b>B29eeQ#Lay*JUjcjS7y znyh%5O5Y>)%_h3l8ZD3HvUawCKg1*qlV24f_l?*R=SE9#m<>9N+=`a*e&ZRB)5I-5 zNFl^%%|AuC_TxOfT=6pTI6iY;Snufj>7>0ZKfayz33X3@JAYU|C<`1_zzsu}4%Sgecd%(lIC#^ zubTYnbAHo^Z7RCF&F0{)f0y3>{qs1C8sfFiP1;~NTE%tv&cZgI+U@l^RDiXeg0~wS zdaY$Y;qk{*%{8;7Gs8SAC&$-f8DHRsHy2iBH^=sX2`usL@kH_m|8L(RxwjP5`!D&X zjqG%#LZ9M-R+7V$mGL@v`qyPT-4I}&zXSA+s>)-4$Dv*^~453g`1$s&j*{ zz?^-`1SDv`%L96o6glgUj$l?`eQBz2P5D|5MsN=*9o7Z(jyv z=TH3Lu`blMJ=Dj;-TK>m8vV54IAac9-Z04I+f*ZM{p=42u9G}*Y2;Bd0N8&xS2Hkm z9G}8p_Idce(#z0~7CUJ0Hit4C^Vy!HUgy0+3{{5l4a4~Rrg#@(`0n^SoySx9Ho6#r zz{UndwPTO;NRu7v{OnA;DzG$8(vO<2pp7k~wH1?~Z%c4pja6FlOgq~Itu(A2v7aiqU z4@a9g`{<#C^TkC4g~hQhVNS2**Wr}k0p32%Qu{3l#F5~S^cQB=<5PLNeTAiIRHk7n z8GU>-0RVOa4r*fsc%J@c+W;c}7{}~42h@+;!NIWw?=ym%xPfE|XkgH}e^+P#0AaGd zQ+rR(bAE1q7}oQX`}X$shtpr5+RpjAdY|g*%d0ea`e=$_oaw7PoGmR|y)}T`92fZb0Pta9>DnG5}iW!8IL30ySx(9XapLgis(X+H#y)mnN5|ntO;(Bdos0uL-~N1IH;!R3Gsa z1=v!dluXRA^?h*Da(s=gOhfCNlOF>_Dww-M*H9JK5rK0%Ox@)+Sc+J&jVt zpUIK8+S(_t$HjMSH|MlpQtK7Mt!|mz;40?!L$IsJiYxyQ{ zIUPS_#@2&7+BWX<<%dTXd<(Cze}6pdvFB;;^V|LJPxr>?a#5%PR&#JYjKcu{*JoO` z>-2%^<@73d$ZCZkyK6P9i%&=Q0is{Q`2~@D*sfDuhrl1Y@5vATgco>Kq%MPW#(qn1%<$^BCG)y{rIGst1Jg+&`o`Egz(&#T&k}ZU;a3SqhrBlF9)4dQ>X4LWc|x| zD$!C8yIA(EQ|0s#kI+PWj%QqxI`&@6QnBu(`&vcnaRv^snbaBvx<<&i!q5?c&Lo6U zAq}P>Y|@wSan9;lj@HhjLwA98BCOSruFv=cN)`LMav zdEPE3>v9fj16cI+g7pV%yPxnp9AWm{+I0^9F0Z>R^UIL;meKv77o$_+4)c1H|NY?f z3OJ|x1^@`K?%<#-lZQ4IxX8WloB-!#JI~7|gDcstX|0rx0=?7u&%;InHGI)h0DAjq zpB^21hmZ38l;7}lZE1h#Pvth`3Jn0rIR{C7h3FnoLIPlgCs&CJeoi^vr}=(kEU*-~ zd((J&2fxR5IL!0&HNF2H02uugFWDX^c>M{hi_BDOjRTrmc72`>B>+o6w7+G=wnys8 z*6Pu^1i-3d+Q9+=f@1>|^9YhP_M?N*fKtV96oHtm_RH0l5H*Y@qtlD~B}pIRMkv^9VEx6hKq}0GMLA0e}jNk4+wHjZNZso1XvDB!+M< z*7ei%KkLW$MzX{(-(Xkow@xV%)CSO&TmgRk09aRmcA9a0z_N~>>Tl+p9lec2C;;Fu zsnnOhRq&L9KfD7F4hH>DNi*#ZOxurR#MBD_#+~EgC;RjdKMhA4UFz}o(xGjz7%=Sj z6G74JI+(a7=eWDli!(PUg`R>{Y{d`9g3ytmg|XepqnJj7h7bY32ZYjctz{Oh?iS`!T6BN`XTi50MA#=gvke4J7GA# zUt@DFgYN^j_VMMk5^OPSxrOxC^Vi0ZD`1QWy#=R|ua{ny7T;h5zlS6eLauNKPmuZ^ zd^K?1HF0Y3saDmx%X&;c`Sv)zS|)R3w~z)tntAFCL)#0*)HZ#GiEG9vy)~M-$8mf5 z(uZTvjlZIIUhVlG_tO4?WB%p0b$Q2Y`~~1L+(PglpZH(GaD4rC9&fn=^w!;Q^3!X` z*XPT1m2TBw)Onw`w-rAuS40s`UL1G&b>Ywj%$Z1 zyZk103fKV*V68(K4L*-c;7i$}=1z(U*@2X@*qyIFGfBNih|Ih!&l-}MlnDg=+ z%88b59{l{cj^F-w5vy|<0LSZe`~oybiHG4BANLgmzvd4B7AE zlt2x*EwX(d{iB>*4*>L-ul>V&RWL_*yw@6!+2>xl6-V(E959r^ z5ItZ!F3uIL*(;RNJCew*F{zN9-ZrBuim%mWcSOZ|I-^ag~`8h)PSGf z7y4<4ZTa!>!~PwJ{tD<{25rONaG2nJcV4>_*DC+rojQiqp2D79eu(bt>2tc>msqxK zc&_iKF}=ZXbz5uf_&Y$FKgQ`-DNw~bgF(C(ckG#>k2{ntrN=OQH(+d9zyW~U{&w`s zT((^y`ZcHX(+7ZdkKf@D5lTBllg-?atOBS)ef23{r&kq#yp7J~F&6XT&clgXdjJ4{ zQP`ys0D!jJacs*0^E7^)KYjW<o3*){rxX;`UCy9(^DBP|MS;5HV1nXa8CV! z!$f_Ler&gNoSySN?=YTwDFBbt%Xa`E052a8lHnA7KHxg+G>*TDxBdXgOT7N_GJX(a z9MZ*~_n$6*_i2{+JlgcBU|X$Q`n`^@P!F)(c^|QBOCH)O8B!^@jsZYhY0+^}QtFJg zCou12pwi5tI0oCuQ|*8{ksPghZ$K;?iI3GWR~B*2xO&)I$VXRSWF!nTZ(r2WWuOkC zqq|JLkca4WKpZBg*>$O_zb)fl3$!R8hsFf#>h{c0yE>wz8Vm<@4DqNR_~9Kl5n?wE z`7%cN(ZgJ_zxU?NuZN4eWtUE!(>;!)sVunDaK_vHJj+qp_mWdbJEU1JWKAB`lPw#0 zswFhQx{bX7)ct6uDHK6ls++uX0X(C>6gOztpNSTz5n_0?*kuYmC0QmwYFj{1c8}STX3Z!}uao_<{xfIGnW)6akR zLwZUEri(!K+Fu7FF)0Aqsl>&HKZf>LADv{~@m1CeNW!xxo z!Md(_uSNau0AOnam2-J(EfyDXZ!8c%G$YrU%l%N(5|Y-yx(96R`9D76prVnHpo3nV ztm_mTmu$pH5xexNt{xbyQDkf~9DEd4-qGW29k#>XhLI%D5k`3o`xtub87^*57l+@~pMK8DEf@dvL>D+pJDl9_Py6=MFMa!t zbKHD08~*XN;`OjXV;h%<6|pU(#~WOx#f1iIPW{{N!lSO59M=b=tK@Mz3;bm#pD)D}&Yxt&|DMJ}3_yBLxDN4p?>_~g z70{_bI^n#u4$h0T&eP}3(0XIsf?G0@AOZM6Md$f@b{+tpU*bq#|M>FhGCy77@o}{N z^=0t;w`!l__Q@Te*#BSuIFz^HO53k*KL7Kd{_*o^;PQXD{rdlQmwlMs1@6g%+Mqng zzbvGb=pb7O0G!_!7;o)E*5zfo5db1ir~Z#J{;%7J?o;CU<>Es_S4=^VZ7a?FCif&4&qoY5szTaVrU+Ioq!s zY0{V~Uc?F61;A@%qx*7k2t8XG@&ku#A2mLv1j%e52hK@$+^ahcqmHEf`8P}iO@ zEN?|FU;OSVa4@Ye{=o0w`t=Fzk7p(Lmi6(P>hkkH)!!tH_V4ia5e>?ew3U>~>Dh->zHa?H#)@zHpuE5s0LRrEE zzM*1bnkxBs3gKKeF}>-1Hz!vfA+4BK`I z?{tdR_0-;yPkz7SFz`UW)Cf%5z|FbrS@lO`4(2Ej128!S1Ygt{aJOsyk@=#pty zblAGrCb@baMp3hX&iwhGN?0;E2q``X__mREbIqI7mJd2b@!_H}MwTv~>cCsdWw_FZ zQAE=^SPFfm?Q!s?+LK}DBfAzHJiE;tcyAnT^yZ+Kom)G0oo(&(m1|BjwZm`>rFEAS z{dv+#-n`p)CaT>9`Q`cK^)9qSc(d#M22oZU0y*6Fjb_)|fdg=WvfLI75d|r8cOJvQ z&N$TJEc*OqnB{76`>Pc1pXATfBmOgee0=i%+ux7JZ`;f?`|I^vmEpJaA`b_&F9cik zG4`i(U5g)v_$|W@Fs66dpaYDj?ci4zdMEDj%04zttbez?8+`DyslLSib)BE$58fKb z{l4@8xBGvLDjy?==QjX6jv)$ZU6(T-K7`?Os&wCv&;c;=(p)S{I*qDC&GC5O01&`< z4wJjGPVv8VfBEY6`5*p#VMK6BWThY`MdvjAF|6N;A6*j9;71!<1^rXlw#%1KC+9KE z3E4_^qwd>|hkJ4RZu?_YDYyRkAKT-nAsy}WmrKh$SNU{`p?SDmC|ri{*q&bk93M57 z=HM_{*VZzrQCC$y>F|3y0Kk6xQ(S;ua`t{1X<%JdX#}T&+KY~%QI?S~SXEIi*4l|G zKue=?f#OE5)f|Y4Fq&2GVuR^2_Y_jdCz}AEFlUJ&$%bsD+j@$950zTDOk-yT^0!T)uh%iZ(22M>t9rv}BQ zp)B=LjZWiv-&J#pwswxTixe*6lVo|G12Rx^M9pf9>Og=2-BVEuP%98a)(X*@kRLPP z)1@CRx|&9!>0)MdZ!Ur&$X-jENaX>09fpyO)CYE=rNzFD7+zf7`T;I-hz|Ep0(zR9 zp3^cETJKqsu6-DLCN{D6WhPVwUr%Yb;L2VnTj!yoq!Xszdrh%-^AV?!Fg+7YhTAl; z*7e@!WeD0WuFV6gvh!LsIr6r{3`N6Oe=VOz*K|#x;-=+$Xmr@-F-_bRNtOsb9>t}} zs$8%5dJIm77nk>KauV+yF0((pTI`Ah#e_S5Xk=YOnC{1Rwv zlbrhhcsdu=Ca8Z~KRxNcVatE|NBDo){KtQd*YEZmztpyONNyW_jT@#M?_l*&vd^zi z{uR`_TnX3gFTUaXqh7#ZIDcNJ>EDRS?J@lV(4ak~b)5GFA5TwkPBtd_G#t}{HhxWi z-)(>YC7wS0vHMs5{C9uCx1aL}<0Xc9{f(|7lMA0B9E;-Tm!8klC9W>HebwZ!I|iQ= zdG<;s?#t}%V&SLj@w(GEI^|R@{|U?Al2apOs{tU*Fhqkoo~1)ybL>)@>~w@eyi@W6yUJ_q03=sdc#dTdVmkT~jC zeZW{bC2SBHQPsVOF|F3D*tm5Xfw>V{(q){k$m;ywn}+i_=0>HxS3A*OtSP&0tsukJ z(Uk~gJqHr+bi5qgWogGx?&>7j&ZA{;&U^rLWKc?!wUl8L2Wft4uk%y8bLW&cP{p<% z=L>w~%hZnh6TN2|%kYoxx0Vgl={cFE;hI37Q(N9PkHqpcU2+N+PE?jGb9?$^=T`st z&wp-Hz1VXI{}lB&{rPysC8pxQ54Sw2JLe02{PXk2VqyB9VB>RLPkMRVZJ4p^OLYHy zdxV#-XL8&3&zJr69;49%c>MF{%k9bDzWns}7^X=!PY)fp{qxy3wff7S#&mHtKJ3f? z>F4&h^XA7hyD2?RI7@UqoTHYi`1PgBV1ccIcSN26Ock*A2)Tg@B(J7+8hxkaoy!91 zPt*|9O2xKUyHc%3u+^xeufVlCGCyL?S3i5{dpeyXTcMF*M~0@omDWGNVe7)h&!%`8 zfLmikABYPP2Ir{t-vdC;ku1%_`&e#knCF(&)gCTw_gK$q8@Ok|Lja*NfHY+y>nc2i zPRhQE_3jhbl{p|PiB;q@dSpmuB*+HJ&AD;<&JK~)jfc68t$Vj-1c-ZU_Qj3Zo6xgg zvah`!B1NaOQ){;t92t7+o=JVW7SjN|hxmL~Nn8`7z|9gj*cE^p7_9VUu8e3NpwsIv-XYr*Jo@4(bqx`JfOE zqDiU}aEy;^!S&wq`8eVwqBL|KsQmEzfxY&vqKiX6wej@&@F(zI^ta$q?Y4Xlv%NM- zzKlWa(jWe>6KP$a{&3w({ydK$Ki87rAYsLPUQRh@qD%t|MU0zAFpq_n}W!HZGZUery(EN zPU9&4DQ&mta)|f+d}2i>KOIJ?AL$vdfBLzY!*ZGq7>L|>?yfTXL|qBa7wE32Qr{3x zyGGV-B&}#gCQxu5yJxT!0D(&pCdAegF8OIhkhXnt`~KJAgokiGT{Up;DIM{m^}SLB z>(z)GZkwpJAHwD6OQ@1_I{D;7Ru}ifz+hWt5Och7G*<8+@O!~nCVl;gKIz22jcp&P zz7Lv*$vv24oXxQI0w53P9pnM58X2}G>OCRqeG)i>t}wrRmwJ@O$lEq{#F}Pm#-Vr~Rgyfm zmK&$Gu;p2aTCJ!Jy_}ll%M)xg{u0ceDxd&!Tbq#OC`dwcJ(Lv&>!;d={;-~hx{RLJ zr5)2SBZvF{Z;TA+HINc#IAL&n}=tyw>0v8r0m z4f~^|mjqqWAbbhO@FedQ^IP(zO|#t&zD6hYX<8bDczPZfYa3rq{!@LL!U&3YBhXKl+XB|SC%-T2(p@hwy1CLxj%R~I;(q$e7rt>wGkd{O0 zczQl%ss*~nAOWPht_ZEe#zWkdkh&k%mE3Y95}KTIrFZf^;z0hf*%ZjP9n;Z$6cB!S z)=k#G61W7n`8^-pP z(mV8)9lB6|w<2kTta8s0KEn04SL!Ex1ZSJ>&BazgKe$a!wa{eE0fo}NS3@QhLIwa* zN2un`2zEe3<^hqQtF`2ftaGqkTxIXizujYWq$nz}I5;5mE{_{pvU{*n9fe`^ZW@O1 z?0+j0l_F=6;w}W&6L0rUz4++GYrw}|ygNkg!U^$_W@H`@utWux1nprlx=t_D-@){+Vlx(0YMN zLp3z?y@#$+sr1Li^$v8i_wW)>v&D8Gc`efWhIS6c)B1rgTx)%BcT;!s38iUo$A)h2 z-a9vYcHL%h&`JwGNkY3|a%np66uA!5Wme~o!}YPJDCJ(dJ&ik*C+{!Y$JbE8c>L+2 zyPByBuXff~ogn#@`16U|4}bmA{y6;uJ^t2;KaGq(!kKe|R6l)TE9Df1=Xjj&?#ZRO zZD`+&{OHnkiqg;Lvk9i-!8ANY_OPN>$HGwZ$-e8;fR7SnPJza2#@@O= zbONm#Vve07Ls!E_A|x9?K+O<|-1#g((J*uCtPRWNfYw}e8gk!%8!1%wC~5&joD;Fu zUC@CQyAMW)NEb%pFdslK!TS(+1 zYYgKI<8%Z9v^Gk2(=ccbZxxp;?jN-eid zxpyd<2u+uRBOF@MU5;DUFvLoO<8J28u>i&~+8A_n!MU_nKZZ&^0{W+s5zs;$vSD`} zlDkVB1A#WR6{YXz)7tuBQaAQGpX?Di2m3u9Am2&|Zv#hZ7rB)!Bt$krt}$}&Jmd8# zF57(=xY%H&dm`)(4`z1NtTSneAt*$t7|rLdQ9-H_83|Ggl)aaPr7OF$hgKt)_9;}& zOh&aZ2G(L^=JMpw;(+QCxb||4Yx#s!_rXn!Wg0>}(44NCJWo$Uk$*oXq6U^J{BwR= zYd^th$hj6n7dM-G7u}tSbFlq(KCaBEi~1NM^;Vg?48Gg21uH3FH`}oH4~9JzR8?i_ zn;D6C@I&v!n9Xcwif98%%?AgLJ`LP!7{FQT73omH**38%xYGcJ;{O-~Tw68>#G4fan9kr)NZ~asXBF9g`OCX7sIB`}7n~J4$yn9G^}|1kWTq~UW zD$BN}%7&tQ$69_CG4H?-;>*zalA;%_ZI;OBDe>kKgK}TgSAq@=1cB^Zy2sM}zCGH+LwIWa%o3TI;lOh%N@-hcmxZlm+%kk7# zs|Sr~80X=xe+5^6p77#6c&cR$Ly~OKkB8;e1rHG{`QAG3+u#)tQ{6T1+Z<7wgdQ;rGlq3e%t`J09dVw zj>dzokmXf~F7Y)qpq`cXtTWd_#$;Rw1{^4cEcPDIlY%C-D2B+&kx}J(eP!$gEF=ll5Cf4jZ(ZbGdCvRZPmBW zUrK;3y@PYTdu!yeX_d&>ltxko?&7tosL$3pwpK4*QUV>kFrrYb)mVt3+vIxPYBMHP zRVm&ngy<3<<#6OR#fs+`pD|n1(JgW;=yg4I3S`JEzM%+NQa4Wj>X24R^UL)(9~W5d zZ28U?SSL8NPglysJnd>R{-6)O?5xQ{{sCin_p|dckasd(@n3JJtGnA2jX~-?!bEK- z2W*q?=8#OK?|J6`5TQ46B-?w=`yl{rbIQ>g!@+?{-{#-~0_$G#?AMx$|Jy|CoN6wb zF7>TntfnvHe1uV+OWCILpdt4uLZ$&~E5TXnUut%sy%~(56zLD?gHoumib+}aF%oCt z=hjF+q|Q!`>_DZ9V$AMxyrUk;qwIcEH>kz@!=Je@=aTE>$yJhy{fMEJDa=$c)=DPW z1NGJiZ#Czls4)zv0NeK)UCyZ#z)qM5n77T6Ei|h!+CB^+xz&wlZHz8Xa|skp{OrRu(mCART=r09G7*cRrOa2SneG z+NyKZ*~IzU6gXJAk~&P$V;=nw9O}o>1hkN11&tJWu-+^9d2EEG`VF2x#U5d(d))zG zd9owgJDf({APjN-Rzppf@fJg&Fx6#we|#NvspBQ}GKYndKUZ}pZV5>{rw$m>+u}V* z?^ahIU|*U#1}*cX+WHvqxK&+cnh7hAHH&`p4QSBC7~>dwZF@K&$oL{hDKFoSQzC#-Q)YsLa1naLeuQjP0L#%S5Qx)YKL~zNO}bEsBzG!eHa>gmoce!paDV10h~_9 zhw~Bxai|;$xCZ0Ce&*VBKu{;%=Z)NyH=L=yhxx?R(aVI+i*ry=$j=v}G`iM~JZ$W# ztF^!wP$Y6sY&Q~c6wM8UfTtMRPFS$iqGkWR9iUk_&H1b#d?X`>8cI$~upE?7cher626A5VK8;<5yrsZVq2pyZ7GPlKbesyh zCVO&C%Ch#@9){&`=A-P};Rbx59q)CNrB5sl{JmUN)Y9x+7a4-KFj2iR&a{fSz|dny ztTlRbqpOepj8yl7o%)npJ`uIYfk1Rf>VEc%Ji*r0u2UQOs(I8q4d7Uh)_u-6fu~kh zHzkw05#<8Z_gx5zI_~j=y;%)2c{{p77YRV2ZX3aFV#S5R6WF#8Qy}f)Xbu=q<8Ai!A?kywV;e#%8d5hU0Y6jlDOh{#1MC*!X1c>U#@U9L zHE_Mv;5$*~PnUO{FOxjhG(P$T4Y(^|UEO+QLO`-y4$U7F`n$?N&5&b|mbh6wMf4zO z@xILMachJl9uD8rbMm3p^M!JsI|FyVE2-!^BJzpW##v8`#kXwTr(F*$(9?t#6E->3F2nv#^MiDwgxSXB`ni z(dlw$mPL2&g9Ymw1+S5XYggpZ+2tLg@8$y<34mzX$Z@iRB5{DcAy7G7pxqydZVyWR z#yocx;{)dl9gRz78sI|YPgE67P!2px)CP$hA(m{_dX(ZkREhm9=Q}3>b{e|tAcxo( znom%KhcTBsPH{lhihFJQUM9EVE>V6r8E!Crb-{O6<4@P6N@W)Z`B?US)ErT)F((qM z&M{+eTZ`I}97v0Z);mQfg}M2z4Qx9B5vT$|>p_EbAp!;Hl^MP3y>@nbjI?LOodV%7 zc|ln$E8#4hS_6r}7IMaw#XD@0H<*2QU=8i4M8i5oKp`Q4wl;DL=furAt4SPaOAf;{DfCxxpuh`*QM)RAZ#cTh)QO6lJ1-n}P^C z*&?y@+vA9lcYN5HO*&F7$+ROQYpZqs;yO=3z<`4zYS}Q5b3iGauXzCx(5<@Ob!GSc zuU|in{^Mhx$K!ly--oYGYwm!lA$YauIK?`oetQhr?c)=@l@Nd>Llt6*PMefgnk8T| zmz3f(bDW=O-84ELpZxGW%T9LoZMHg1=4nOeP2Hip`Q9S->e*_69>=^xbwR{~Ie9!< zk{bNpU6b=5)d%R(EtE>me9#WwIZ6YlVUr;0ha=mC+5w@X$9gFEjBKdYP4Kot!6wEr zX>SP99!HqkL7(R|-8S^zFb?g=LyV!+28=-=Fw}#*g}@|Xs@wNsQ@}1ASUpOSMI!-9 zes}DB1zQmu*0S9mHiaL8?ub^=elHnL)uCV=e7@j?{~P84Ex?aef26VAaFU_cspZ}G zGXe*y)lnnt-K6+wh#k{t9Rqg!D6N_q@qTVSteYI&@rfRZ&;{5`ljFR+ZEm;a0&vv9iqdW!2kNDF z^Sv5JZ;p$ofpgw@@3bGy&7R!g^uFKXm}0Q%5*F-rp93mY821Od1RQ*;87W)>8mo_a zPFX;NoVGBdxR^hrvjSml;MsQP8zrecA~;~&6e|Ua)6gHs>ZJkX!_-8JC}@l6B)u0? z8HQ@mA?Bh)X=>%R*&~uP^KjG)OTWLf6t8)&N@QA%Km~f3JzICKifC|}$SM+%^A=*X zO?qB)u%3Ii&~A)Jc|0;tA)-GJeW=Ip8DgppqzCj9>lN4hJk)&)w3ybP{PHw;X&&4C zkmFDe6rjN9R2?>Jbxji^c~>eklh=+6t^;=_KuFX@0<4OiOMSR!XVhI`U+%JNQ^hcv z*UAM%C6h%Fv}%G4s&*;BtO#P=00w84uK^Jn4q??zhLKGSOg~x^iUE7mi(=8fNAF4< zRCb-F<2_dAt1f!!O{g7JhjhZXJ_O%{w}9UEH2?~uFQ1Ifev@-eOpD_v6Z~CCE4~VJj_P|=_03qtc&q{ zvgUVjvbzG(IzO%A@Nk+{hF;w}PNCZa2-dy(kn&&yZJRbzgTs_J_?J!7)pFY!3DsO~8eg7s-cNKbi)u;;BO%nOZv} z*s_Tj>!Z4InA^*)&K2R&Z(#_Y@%Jo|AbfUjSRuZi*596o*ak1IYx_J0Oc=-Px(cC$ zQk$^0QV`nU6zJTJK7opW(~iLagYUHz&!))IQLs9);H?wX*6bkP>cCc)jNS?J?4WrQ zX0C?=k%F!jjb7g&%Vr_s?wMMpfqn2@7UQY_$bjBs)LsD)2dLwaNOEJoj{Yz2lAvOG z7mws&fbMwqclZX+gs*>_|2PWvUgx?@&$1lwB2QDl6(vT_=3ZrAAw%=eE?cqr|qzYh1i5Y66X|mH^F$OIo@o zH^ie!ubF1xdg$O~Yvbv07q?1?``%{6aVHZ>kQ73by)0hT&u@*Y;XVw#%34KJ$lA{% zRrVf&4HFh=XyjzWYu}0^E1;E{s@}KZ$r1N}jW5YDxvC;)os6jKdD68HZfn=D)ixRE zemAt^A%#ZH3A;F8u+TNPDT20jI*Sf*lDiZ^jj7h%#9+I%+_Y}3JozJ!Zg)_ zWp9A|4&clrmu_t;#AA%*Eb) zR{&Yw&s@3ys2yd-Wt&K-^>X$IX3{DQ*E#xNQt1k9+d-u| z7jpG#{FJM&o*XXy+*|9Bm@3a;rVw(65pe_#c0gyj`%}0rGjA!~b(&lka!|C@!K5>^ z%|ePK1&<{;Ub-f7G_p2@e%Cn+lWa#kS9}n` z>>ECd9c9DNLVBZ<(K^?bq+9@!4<{XZlv;woTW4K!Gv%AvhAHme_bzRG+q z@4e}8;tjl7FMVAWJ*365d>+aXm`H(}^2vI0<0cw{HE)<~c$kOQy=(GXhIkODfNZ0$+{V9gr~ps6|S9@TZDEv?dugiW7sj3L!%7CKIR7K+CP?bYvOI&Q?DU~F8a!)-aM5MOAu%x* zq#-p<_u|RNO?FFdcRe?Udmoi-TjiAY!?Cm~+;EiUnOi3~%=vhoG5u{k*W8)r*uv4ez2-Gwb;u+=^jn4X4c}zAsAp0Oq9zSH zrS+TdhVOll;&s!Sq_&L*w|gL2H`Uz1U=Bn*5|Pt`_2Xkgo=hDtUYI-{Pu9JsO~McmU_o&yQ`aY z2S)T#0Fqa;F{RK1h+E!E_hu^SfB}%xaT7hzVe!Y-s;8p;?Kd4!XsK!3M1=rd-&$gJ zR9nI3sODnwd*7hJ73Tr~`SF9Vvwq%x^VWE1oeqnk+sq9GJ#>aHB?JO}zc?@hsDaG| zWQ9Q5Ed=gN+BOBrSp{Yqx;0%#?Tbl2%7nHb)%DOKHGiSkuna6&SB=m(+@un zY3G_QyqP<8@N^2tukt+b17Z_cvSewq7s)L0_|24(KG$qb&4_c;3fz$p#YkWaac zifk?-gYisqJU=`9&L(bJv{_DZBEN$b2L=6&6k+Q`O-etXo$b3|DD@7?8xM~k!^nQ! zh5N*PDPwMu&!g^R@3?$;KgUi3EKBIsoiMfT+~bI?g>>Ao z`O9SWz72yvup4BI(9lUSf@&ze)uj6UUiYe}z7qZTHk$aLh#Xr?VA+n%pTp{Vk9e2| zr>)$7uO*VhP2vW02O7qjKQZ93k8})S@6r3MP5AHU3jnZBM<{v13`RlK=%@%vfkW%n zK~K=Ndah{A7*R;KfTq~00t_RXbs^rnIGYKfTW3{kAccAlM6JqJ+r?=ed}>Ag&>C~E z1hN@vokraNL+L<4ow^~Z2G8k|AI%41reV)?8cs3|(zn@7<=2R3Ahg~sDUM^c>viiN zY9vd0Y|mtZA&BdxZCZ>4$o3i#c#Q3B=X?&0K{RW0rcK?8Yv?@qnOY*p8k`zA<`JY= zL4;CI3InOt4&sV(Yhul7vv!;vP$x&8U9(c-(Yj{=vEC*`(Qyu|?mAmfrU6H0lrV`w zb1~pZ4;lz+0Xxihub`PtNp`Y)@LASef*v(NR+6=5XeoTqye{X%*?t$gSj_Elk{*M# zdf&-NTYDO*)naS&#i4TBy>r&!_;?z39J%6dvPJ8$D~byooFj)lXdgmvlF&#Wiq^m? zd-T*Rd2K+J9jZS;)8;`$yQr6a3s%(yR^Z>5QDor^0-8T zz7jAAif7ekwQ>;C0BY>Ji5X$HGT;W?l~Q?HDu#%v=7$g`bLQv080mqo?If+Bb_`Y6 zbtR}xBVA_s@#;vyh#VEdl4C*u3DZx8G`hN)JpTQh&iG0C2s?6Lhr__m$pm(Nj(&S2 z-zxJtD3WjD+HfIk!5C^sEshxqaB#^l!lj+gpSL0rG=L9CrT+^bZe>sgCrkm6lUV-88!DPz;I?R8-^Cw{0| zBSVAT)mZ>u{UI<*BM*dyZ(V|hQ0i!Z~uMbPi=!mW#P z;>Uvu3z453y1sgj+JS zLFz3gkNa_^rnJp{1(f@QxwZ*C9D!Zc#?xd9jSkd^0s;#uQ72P$cZ>jJ&7e47hhp8k zX3YZc4OJ{+&%RATivj}_G8ZfP>>+?mf**5qREC$?ASqSw)*C>#n#IhrL%42yT9h;$sua%E}UdDPmw#~7;Arlb(*83L&t8Xe#iB%cwjqW zVQig%-T4VWT5pSvXY1VwVXI1u{WZefn67rS-s zsEXUxWN@lpL<~d-EuMMU_UIe2R~0F}_mWPeOG-GSipe3t6w}}=#x(?4%YJX4Q%$g& zn1j0U{&b->S|QwgD0_-gj}Q^9RwKd?<%qo*_R{Nu^%lQ(D9@@P+V24XOaXvA_T%dC zM-4wkso-7laohTD7ZANtDG>l`nDb7I7QBkAy`8LU=nO46hX}o)sc)7&w;YmHr-;!I zK$@ECl_et(_>)rrjf_zP0QBMzeAL>bB3t$;U7ut0P_gx{V-e{NQopq*z9Ue=)jHp$ zDVVN-B=JTCI7Tu!(%CjolQn=r66g2CGPrYc`++$#I`3<}x9iw`JfEzDM*;CiN1wWz zx+s(qC#ot8s>%*jk8E^+cu=c>u$S5lCMeZtU~$)ZlktVmoVWM!nICFGlRw&qp88R2 zg8SagdecnAs?cBS;I?;W&u!-rhkF~H9yRxtl3D1z!`z%K*Y#-bA%3*&UUZ(xSpF@#$ewwql z?U8$1atMQml0wJ?hZ^L%IId8<)5gl=nA|u~S$1Dk(VG_Vc2s&v8Dm-9aH8nI)Ey2Aqk_(LQ(LslN zB7u7Hc-Mgsb8@uN#o3X_)g0W^D$e2_*68fO6buz~g zxfD{u7#TAl4Ojr2Sp^_T!PPTCtrMXS)8y2TUCHcl0LRu8kU_c>Q)o|o9L~OPXt^O` zDn=6oA>vV$%lK$%9$-6Kz{cg?#tU zAv61F_apiJ&>>Qup-Y1<$BOMRFmcW#jn%xMf=RSIxU5l{1rKA~a$DE2!M4&_mm~Xl zPASDC4W(CmEvcd$a)`QswFg9S=OD;LZS@({z=@iG`Vga`=lD!+Kj^V!h3GnlQ8tml z+$mwV!$GP`u7xoh#i)=_s<6KDl>-Ba1$mbkv3HJc%LKVPUhg;a9H12)V@#k;X=l5u zV$@h#(%J!B4bvzcq}%FJ&#L#q^1psP(KgqBGtm?f0@KMwqaM#*2#FW~*=5C^0c7T0Xz;!C=3A$Dzj-{?@w{_C z#t|Jj>x#XT_&82!{JebNV~fXCtestx2h;6I_AzltBQj8^BM$v>_;x?~iMTNXc?a_? z*KgxIQMZag3&mu6Ws;Rr3wmo|czYjG%eif-zz|rGtRSMl`XQnZjw3elRQ8$tXc?n4 z#1)UsF7mC^RNRIvE_*{Z0jsf`=RkSkd095NRGm>vYk)YcI=@9U7`rNk(5NeH-AUzd7#?KUt^ zkj0QFB0AIFh$6go?ZuV1nA-Ot;&>YFj`&2s%DTbt5n(62^LN_5_R9o?~ImE^WPHSZ^1C}-T1{guP;%W}-r$Nb}RM=DBx+F&i}JY}(68?s;J6 zT8DhZnYe5^ZMXYz4CgWQxABDutR8*g;4dy02`tOOQ&p0-*XDgWbQXg4AZ{j*D$FBs zptd>ehL8pU1aooXjj$DBS|kb+4djB;dlZ42P~Z9hMKY|~LLT=RA( zB2@%LM~(w_%DOYE$OjI^&^1Fhinh{_uyog$25ik(q$`cC!G4&MZ&n=vn!B8V(VUsD z&4IU~REsebn6^=`^}wjlWsKRY++>Lq)g~==)Wh0P{0f!Ank{NX0FE{ z$A5h&^v1fD_1JwY`F##vjr;%wO%F2NaL&z3;3xF}2*LvDw90=lN- z04c4*(OdGa+y|(L>>zs=yWtcz=SS~_3lRIsOW@-e2lQ3MdR7P4OY~JsV=`_4V2XxF zu0FDET!M82WIvwV>*L;@r@q+OhZGa%-lTeTc8)At-+O}|bZg`v6Z3@*@^>SQYh5o9 zeLD)FBj$2UR=>RuC$iJZ8+p6`x+ym9u7CyhU3uC z-DqM)1nTJYIr zEG?z}(dJ_HY_&FCm4u}S39JyD>cFSbIFx<5^$|Lxb-Lx-MtL8bGzaJhirO>v_xS&3 z>p!|J*_I_e%+(YTvBVacN8I<`MWMg~$qu{x|84e&F#wPRz^YeukI2j|)>3i+J_kf+hBBI z8we6=D`QGLEMX~&bb^?0Z$#_;HMJw>$oV;_M4Ms73$N_bQ;|K*X8l{;3PEZ(jdg}_-;$?``C|(k1^DO z?;q=PfxeAnccLM2S&;hh5QZ~$_n18mm*HwH=SIn^>(O{&qDW`~wjf3h6cr9h;?zCE z&K8dyQldf7>%wDzJ-;s7swn>dKE2AI?Vis8>yGV(U;>01FXzzvYqx?T^-y z-TNVcMjbeM`swxCZ+AlhW+oT5@-OLj`B5W!tPJPA zoteM(Ju!JxKr7lz&%JAvxs{H!yrlR$#Cb59L+S|N2I&2Gc%-diKj!0RDgpA0?X$ul zmQ#24-EtZhv5pWhC78vwKAqTeJjJ(rIj2QFEk}-N^7}ZATS|tgeXLxn-S?e_psST? zCkx(ta05=+ieV@gV<7}=b*ICnYsF4u_e4Wkp>^t*cm;5jE36u$7dz)ZfFTk=KspOx zFAyn*2(`r=_Vxe>Vgjb4nm+pWZ_r8~4t3lA{8lR^4nFR$qnNLyOqWbC@o~%{0_eUf z)}5%+GFrDFa+vNm!9Q1xM~1>AUIT9p+J=t)7%(i8NV+6~bvr2e5i<3dk`k(f(rw`6 zk8u2;<`*KyVWW@GKO66lnFp%2o$b+C#&o1*-anURR-E&Nj)YnUtl)$HQUHX=){C6+ zHq8$>p}s#s-u55=-E76+oZ55vSYnmkh7XI#o6+b3U?rG(2|CEhs`UWc8&4!%>kyi{ z`{*cTU_cyd6YIX`D5xz8P%=b?QHwhvlaP;r10^VEBnx-|M=G=KI>iKA^-7ZjEv z-Ytwu)}e9MM{gk|oo%;7(~R>dD+K7PeZrofFHGWto}aRufBs#0nYHixo8Is|f7IEx z+hY&-F|&HiWfPGsw)X&pa*a`h*a4}b=>^NcQ6Zs|Nx*K6*VJh;)lI_&d`ad$8iO%q zLRh>A@)>JL=gf>T4tRQRmg9#_Ey!rDQyA-(WNzz#`{-3`h=&iKQ`_~eQ0U_k^9YOID*25fln&kcVF^qePpMaBu^@0BgQ27D&86S)de&~n0Tp7NZ5y9> zOv@S8Y>jb@G)rGc(EE0Mp6aIQaoFv?y~QY(Q#$zmW7&d#10T@l%Xy3ub?v3BfAX?o z$=$>pMzmpCS6N~(q+=hMw24e2fL@z5Pu$K)V10}8DW~RgA{v%-r;xy4g%%7EwgEuFZx(`kI3e!6V!HaM9z zId-4?@u)A&964ePMjAB7B zImlG2*9H+xE8)yza3hXfy4DkX-wz#=9~@A(&d>o7+n-P)tvP!2#A1x&)(@|@&ycEa z3zdHC)Eq*y(ozs3=Iy>6v1xjmPnq(h4Tg6(zeI0E!pk*bSF|)Xo;*HfDz`c{J(%_b ze4O+8!z9oc?O>Az`*@TH7`FC>YiH?7sBzSsF+9r)t8C7X_E_}u$BV*d`(MIwZQqfEYJOV!e!v z-iIA(fe6JFjMSVD#JcinKhf2(>|m#pDAJYhzrI}Ki+G>HIpSW|kj`zIV!^!3$9(*+ zAE1wvpH6UQ^!Iw1((|Val|+|T7WzTw2_6TduRah>$V+7|3kPfiQ4B#R-S^{E3Y&KH z_JCxhgC~L2&RlOt3_1vyL{14mPDYt=JPseH0~2uWK-#_iT7JKUBD&6|oIqcz+6c_vXE`(>;{>s>}|rGBRY zus>RC_@NUHqH%P=-T=gFdwfp}GoR-mIgU0Yj4>0oeVwi|96kyn4`d9}39bIvui7_M z4fNT}w|knW2nKh`ZXNeS*_=o_+AYZF9T1;)qB4)t%jQpEvtZ+zZAge?v$rp z_L>{WO!s!Xew|_2DzJ^r{`iE&B+zvXSCCr51VYeVH^g9JR2oza+{8K*DeJ*V)>;JV!u42$1|yqh@RZacvhIXD?pWyqRj`d-af;Hs ze~x3isfCEFEd6MEfb}rT`Zz72xw0(IVa&GE2sso^h*MH!vg>_A^*4U*J zkc{IoJcw!J0F8{7ukM&h*5R@Zs_0G-D7di^)RvrhT-MNo`FPJ%C`&{QFU8m^A z7aOj}KH#tig>Ko7^+t{N?>{yT5sqXQ@raABM)rv3fFam=tDv{<#iPci5|yXo<4K}W zY0_XKFF5*WjDG1j#vX@Bmgl8dmR>MC`g<6gK9=~Q?&C*T0{+!au;2&#IL5hW<+ph` zF0xU^tw*^nSn5K0w2wJ^ghcndo`dZu%)67t7erz_wvbWFNLJ5jSMOBnSi~zdz-2Uv zDY!KUEDimL*NCf)L7CAcj{xK&<50$7Ho}C?F%Dzzn^DYBQI-;tkOB%Ga8s%%h{!qA z9jKs`acB;6CJFt%O$eEb_fyt1jlg?3=62YqC+q#PZlqlfQ$;+-p8xef4E@8-jcMxL zMwX8cJ`a{bP;KJA)H3SPUGq$%kJK}vx{D6r=?Hz#ftAFZ8$lZ*AOMU$3fkjyo=ti` z_FrH1C>)MUhh)GFlwf#(bj3k045o^Qv>> zupKBD5mP~}9}f}e0(#h`Htv1&V-J(r9-ubddTo-d2GTC@AlX5yUhuvdWE-)JiDS0s zNs8MsQeUx+IF#g+v9PHq2s7@@W}3kI(Vg?!I-BRjd^BLcyH*JkV)Wy#P_Ge$NkWh@ zKFfgUMJp3`_XA;LA0Ll{q#M94Stf>B$UV+((po$2pP@ticz=r1beIgphyKa~IyR-a z6(C+Yh~cz`)8cj|8x)aP=21$?a_qxh*E{3)=G2!X^cDbd)ojb>Won`(9 zO$R=OeW&zHmZ;RDKEb2RVWDm7BUw{j#zU)W^|CJj0lEKi{^C6ak&G6#f?&E%r9Ju*B+JnkYpunUWROHtahXj}(%!g- z8F9!sMs;FD>eps)5g=LDCD#xQV+3F9uH6v5B{+16~hGGICkFK=XGLhR*y&Eu{VVS0}kYXd#fP0 zKdxaYX4_zA*5Y6WdFERk!@y#!)v&AZ=ca*OAJ|Jx(IOay7!b; zJu@u9taEo=M{U$i>tmw_(z*`(Q2N*TH!FgFl>~bavD)l@Fuh${3SbcXif$Leu>)TFPLTiCn zMG&`{6B}kqXvYK3K>}5xpv?waISa9m!BJhPV4Jj8A9HxF*@aZ&Z6AI3$E%MBRV^|WbY1b@5sk6%h?;@eC3V~ z6v&mDp#uUGh0$=%30BsdT^6XFjF7d~dE#2ZnEj4VbR~-@z3R=l_S<|SD;qMf4s*mM z6qqs<7D6*?Ai;G`H}78hDUWW%BlhZU!8u|X&9iqUt)!A{Fz+D4_2ty&*Ju1_o6g#H zkK5%Z8CaCIK3*sIH16B#Tn^7GOIht{#2C+7*L0%Uy=gcNC$noF5YB2!2-)!fVg{mO z^`ZOl;_62Gw=3G0J1xK*5f#E;{Q?0IXzf>Y@| z!AU=-J)7@#iq`IDIq(>RiO~uYU_<2)8sQ{GA+SXzBWN*8!63(m5yqwue%d@Z070*E zjt)DJ1#WIodK_C~Zv&A7xJ78HVA4haQYx-++{G2Be@yJ!3m)rJ43gP>HTWllTx}d4 z;#w%2uyGuU%OxnB|GXE6DKZVme*0rNoxMuDw^k*ZA#whDE+5ikta0w^ln`SMfu@(G z?HwiuSHqy-?v$+!_k$83G~|@%sHmzIQx=`hnKh+(673#=-oUFLW2!J!-5YVnefQ(` zIVG>O%o)@p44Lsl*421we^1aA(X{#`5 zam%s7Ftk=YShq)O+Lcx^M0jma%6c%U^H zu$=nF7@{{-G3$dmU`!JO0-9kU6he^Dox{LKV{$5WiU5QICGT46cw`2|TIk-n9%hxl z*QaQG;Bic2L_UQWKY*u%hfmQ{@XtM=Ab410FBsL@fS7Ju6VQMIRvgFH=Iu|oQhYw- z!El~F7T_I00{rD0Ajl4s;~(pi+d^N*|GsOqGH+`?eUAQlu7qPg>*&$mW!A1!Zm~3B ztP1dM!zu+R$wr_(FH&G;4#5ZY2InVErC?O5#HrOWi_<7FP)aYvXNIwjm+0MqVpr-q zCffm;MeT!wVeEsNJ0Xxc1)R!Je>^d2rO(e6381X>n8kmsmf)p|o3 z%Jf)Ah=(c=H;;~-Ha2!ifX;ypduB5o#3<5Q2)(LGu(O$!)$jr0`nbo)lQn{9R`OIK zaDDg)m-3KlNVcXEmY#?kFPYsj_KZa$B1kr2whGgnd+*CH=Leb&nDpRGcJxTQT|%cZ zgFgECI$P@s)eR05P)>&~G}G}o=a%s+B;T`Az< zf8_$XbLtoX&Gw#dVhRZ#k8}Jx|8IP{e}-Ts2lN}wxCZ`h&OJtl#pk83ax+%< zbm@gT4Vl%5w2z|#abi{MYVYwf6I-@`4I&d4Y|==K9F&{3Iw5NB+)Tm%J@8OsM0FD$ z0>jzH0BPib&z{i=L9rZ1w^|LdTgZX~4VstMn|Y-(k{^X&57SY~nKznu5AuAyPu9v# zddRXs`9C6_(nXFm-v^D(VG^2a!=I-c(wFr&(8r{X<&ahxW$J2ZJpj}J@F7dcbYH0= z3aw3Q%On61YC{@3_1W5f)R=uYd5kI2!=KN`q4eSHXz;*EpqSV7wUOWva*|rsXnMar zU8%iCXt@^*8X8KqM(oXYJ>+PGjOFaj)>H2;IXz5q7{n0gIYu&f^rP|(C5&Ep}|-qHmgaT9I-~& zMKN~b7P}MQ zLhC8$cUsbPfo~e+99#G{Mw$Z(KF8CZPaD-g{+r=gcSL(2h8U1z*rS%(58q!SU@o6K zOi9Sw2Lx!Y3{b!a4%e8s8whkd=-RdAZ143-yM~gEV~#yf{WubR49^tCEiWWT`EK(x z_Q#FhN;f%mj(EsvnU0nc5<|!dSQ>^PT#Sjs?DJA^M( zGPsL|`Lc&O+m{FkZzR`tz})uZqxSX{u8&4KflZqRm4rNfqEQg82FJVvrjAPhvo%A z|FRAZFz(CT3d z);xW>qcab-!xcuw$d(YGxoOkP3N@xN z+7Sn_(OiVqw5)BCY0438BW4*kP@5@8`E(o=orN3UA1}|N8@5B;!yCvE*+OQI%`(wB z%l2oy)YrC_e3kL=O3JcGJh7 z>+6f`|2V~NL#|38;_6f2Op9x=9x}9Lg5iUa!{o(js1q||>B^9zIF58heW*!_lR3m4 z@@3)HY?e80^OrcVobhAK+{QKZ6k0+&uipaO4z8Xx0P>^Ecyx7OJD2MAmBn z%QBDvA3SI+iL9+PehS*VF-%r_Ab|E+TR1*Xv~JHw|0w$s!CJ?mf*>-{I9DCbR_Ob& zGv_)a{pCIYnkv}&2u>sE7=DCY9>t$e>vNKybN__tfUU=;t4#3dd2)pP6sbcU5OQtQ zTg>e+t3A7RP%Z>CfF*&)mc1V}k9cnw8W&#b?a1hD;@}S+IXH?Q!44#;AYjPD8OLC2 z!ceUPAnbb_D9A>AonxpqhnQ3E7%NT$!W7X1B6}~RLCguEhE^1;*+z-ms!KrfR38$t zpRHVH^ebZdB<+F_7$0S5`sMF0 zvY(GO{cM~IUxIWHR7v~#{?%ZiW?Zr)Knn5J-3Gs7z@!ssqh+N)d1=^R=3`p`)!x1l zG&t6|ms$1TEY9VV2DeU**4tyJVBLbWBc>KS&eXJNfdHNJ-bkIQ|I_x=gGvzB@z4xi zq1Wz##af+(ED<_hXpG(k2S8<^eY%Bk-K<-?vM zj@l;rc;sfSf7a`)!V;*$s#)0Uw=h*)u)&^sw}C=Z0krKH%%P+t$R?5a`UP$Fst01- zBeiu5VnsV{P{W_JFVp=oPtmY6yqG>dzdoProzgE>!J4&Hnv+WyH2n0b%T-ff!;4l@ zG5D){0FeXGWt#9C)ldM&F&+SD2G?tw;<&+mo$@j2bF8-h*PmaxjeU$ksRt_ok1>ru zkISeQE;r*Mm+Dg&DoHvI%MX0sN|-mCT8yw-ig~^3S>`EdU;c@Lwo%1wi7*hcDhY%3 z7AiFw1$XuVUd4LAUa*jL2dgy$07y8dv>f6l-ihSN?%QxRCUKYkMvEN1Zw9Zrr{pi^{_*Vj=`zce>$i<=x~a^Z z_bJ?YNh~OHWP(XJoaUr^3tB)c`8J9uG)QSUtq2-Wu(Eo>4WgZ5G%zgagy+`|WaS0w|QO|3t=UP3<_ag=yzG#Zf&a zi-PevlS1qDXsX1%H(MtebMG{MJ5ztZT+6qgV%xQUJb~47m}6)<8HaxO+ zA>LJ+v(@kwJdSDmCtK_P{}BwxQVL(t;Bxu61JoV~Ci?yJKh7T##sNsDpIF%2fSEi>!~`s4gK!+?Q1%?DImo(5Iq=Mb z$T5gR2heJdQ!oXuF@PUc4t5x7Dgi(N6IiL^JO?(Fd}t0L;E_A2gQnQTovgMbUbS8F zoIZK40llUEJ{|AZ1dru(9DN-)T{2%6Q8<+nOe1vTl)(+qXg5PfTY(19aDX@FDR?fSxV?5T+&)Oi678{)kacn#}xBN zdr4(KIZ-oJ>FXsPomG*h@Rw-B0Sd8i$Cz_|$(u7Qi+E|@CxJC3JAKZGgQn-xjW)Qn z-zj|jlCZ=9eDKLval7*8^CV^WqFEG~Vzf-%S`9{H1=v}jgO-x1Z)GF2?IQ|GLuw-# zWgL{Xje;j}ERmg}bR13?-KbkH-II*cnP$|3&rjC{FbH8xqs3(iH^pJ=lA2JLl`<%R zB1+DD(~X&^v(&=d;B}NA@zT|TdnTS=8ufo9Qb*yAr@49d-*K!W8 z-%lhnxl`^xOxunwxJ_dV3-NKEL~8%MoLh$@{Bj#P?`6VX!U&KOYIF?M10P#V5@u`C z>GJ(bK(p_JaSptvz9;Nr)sol0szMCF!~?re^Y@$?q=Ww4+Pz zA2fsAZ896RmKRV}Nn;~A3MQbt=k&m(_8iudNY@d;B-|lYeNYNQDv3S&rh;S4Y)i-+ znU5HcN397#$YYLXkS4$Y6cmWPqEdiTeRDtf-TD` z-JigENtf|Pg!7~_jvx74{|Fw;{^}$W06{&8t+%!O9}~w*cznD3JUtk1dwJ97=gSeO z?(fQ;mK~p9%#Ir~j3E=n)9_sT+#9JwKX(`1IBqJCIHVXxm6Q(e3ZS<$jJ$^#*AHI$ zc1ok-Jgw-vM0hwRubU*mZWp=(S0zG5bp)DW?SmTo!Fh6yIiNSAk?7zlEI2A~>2tg_ zoKhT#wd)L?r5rfQk$v=X427Jaa5s$5qK^%3KYbtt)$8&; z9;;xlwvWi|n>;;_zk}E)pS>Jma6t7hXNd$)7mwTTZd*EP4A3=%uq3Y%2oxzYK_AdA zu=YOAu^bXU?^_IQoAQ_wdP`DNO&`J5C*;N4VB!kM)STv~>4Y}iELatSKmjSnGixIq z9jn#nxEH5Msv{W1UPo=crfhnR4ae5Qam**bZ5ytLTcgi9_iyJf_SR2s`f)np+Rx-e zJiyF~la4vaY(83=paF_U43iGSCtyH?To@W4&TWi2rU3Ju876^n4B84zz2O-11g%El ztdipYcAF?0&V*vF7NO3g(HlSU;1HWnBpn3Hdy5;OcEpm*0f;pcH6q52O?9gp(A&K^PII(7OwCTwjnDw0gn{s>kK^rQW>QovC##@lD4giE*}xGAL<{AehD+~%!fzAp6TXSU_}ofD1e7duuMd;1{3a$zX_ zp2KwMNal}zyCjSN;eENVLGro(m!I>aizn+5c8H-LqxZs!Y61HLBQ>w13E(ND=-gXD z@suk2#K!~omQD^IC)yE=ThT&-VdEh@FMY1NO_m@S?fYgzBD0sr!P2CX*VvK z4x5*?yiEQ5D?G9tI-l$E_IsF@xCa~PZR&+C@i~0nt=-eIT=f}t56kT@1ppk-8UbKt zp7!^?=tIIim7ch_k@dF=@g`gz7+t61^aVf5f`)=#kC@W>K2Em%`3!zfp_?`=HOeu$ zhTQrP;@-Lgl8w*LU#HXFQ=E?qalhk)P%P|Y4!u?x5($O@jZKaS+9}j1PS6sK7=R#1 zcz_1*jsYQf8jS^oM`Z1z5KA6jn5efpdZCiocbX$H4(ac;^*Q9QmB6sCF#|NqqcnGb z`RKLeBq+&&B<8Y`h}@ok#`8aV;+GucSW&ihoXDq3=46kD%sEM%)rF^~bHbmb?T>Tz zGNMCz}bG^eCkI*J*?See2&jIYT z=qu-KK(;L!`M26h7~Ivpa6i0TixFHr=71murX5iv2s$|E7}54-EU^Zw9M`*(-5DeE zWbK^Vahm2LV?Bx<6J{^1<({DGc2e8>fd{_7q}%9ax=dIe>$E<8{Qc$izdkPUF~`bV zuX{+fAv}+N+`fk0FLP&K@fp|0Q_6&p(({iB&^6GpwU^5VZm#-=Pv>P`USEj5w*=?^ z_Se5af;`=B#Nj1;?{%D|3=QNGmfU~5hwEqBbmEOdye+B9UN4#@6^!8^94U&{*@r!FtZPqhPjqBCK@1HG*wFJqOcJ zL)}}){8-Zj$JAIBxY#vo~bVHEzB|YY}YijhG$G7Q1=jphV#6ZJ9U~Nqz#BETsro z1z%=dU~8xLpX>B%*dOr{D@c$;q9~8>bT0CRYR0R7CU@f;J5>NP+AG4gM&-NjVkD*tQ@(zL%xy?`QCR4s5UhX$ZiCr%E{eI=|wf@v= zMN}v1BXM5`Q95T=UjxObgin6Zk=tR(9(TC1Q7@PqzKBifQ^U0Nrp_^O*119F(4`g*qCN)nfs0on zeUH~Z&bE*ED9^~MBQiex#E%SPWb6PoAY#?#3+pJ<2hOjNJ&E1KQZ9QN+-Ul#{B z&0!zXvv-$Y!fuz@>Er~BjuuI^={c?g1#}>!l`gh$rfgOW3S~ zmeNtN?ITofCD}k2YWY$9bs2R^Kb<|leH=b?}#GTYgYU@ROpAn=sQd6Jdtsf?fcg!G#fvB z-bdp0>3tGNas8chJ~T1*l}7IrC`oHp4;pf+IqZ8C?J5wP$MSHl(EKqZ^&_a%eXj45 zbF{sjbp6by^}%IJ&$i*r1G{nXJ#5qk=A?r%@zlY>{1!pC?7Mr? z@-){alL5MUy?bz%`j=FQl*+>aL$ruTCkAmwE(HwgUJ?ur-^13Q7qsa)QlnhA+-kgf z7;1M-lX+PH)ThUiZ}aRcyIapvheT!(yvs8B-D2AH z(O8BW!Z6=~UGNcw0j(ln7&bf#a9$j0g-mXPQ&I$rP6-DaV1&`fh+u>x>llSoh}sfB zc4$1s0A1^bk}?7(n|v#$c4u(64d};56g&3!OV~f#RDhD9P^KQ5CXw;lb@@;IzouDK zm8cWtR1bPt{D`3rh0l15@uOVRGGFKC-}e5?w0ynHV^{qn${MsJXWv+KqcC0RzaB?2 z9Sz46B*$^oCuycl;qGA>$6;Bpf23k3cv}2m^vH*jw==zU3?QyT7`flJ>lF9UjNmaA z8$PU;SL`uyKZ&qz**@@u?n}H+lWYf`IBlQT(6%}yty9%$qKfc<+z(yS7*@!_B<0UT-o`!CC?t(-SVzjz`pSjs?A)IqDc7XMGIh~pwQY*~DfTr5IG#s&BUszH4@Fbn4 z5PFvHmkV7!B7XVtxiOxfzVL^ImwA-ywEft-U(RiMeLGHggmAk2Pjr4+Qb=+teA?#! z)f0^|aSQQZ_>W(|%y{~LbSOAc+}19MY`np9`vG|uuloa)yeQ$;KHwbAQ{N9~0JSJ; z)_XB*T)=v)WA?TYrtYM51gySeqPgj~&A`K{ z*KJOFq^9#Tt@|&u&X0e536Y!2Bopv?-!1+9I{!I+sgb_pPg9`u?RWy}4?gW3@*f|+ zTx@%4kW4$$s84^J#@oSpg{SSo68Ey|d_sfeGQsQD^f@r3R`<;!jw%83+$_$2br6$^ z0r5B*+t`BI(4Yk2)DKY0iPrsX4mceoN5?ImLV3Sded5t>`;sVUg%P%rj>p%hJWk`L zEk?D#EHg#FM}=&a#eM8?lGHWLhdw8yRqzW$DuwEHTGXuzAfRdWs0Tq5#AC2G0vl*f zX6i(HP^ADM3NVmY$LyvBvvuz1Lc67b)gs$HT$A@YJX+`y9SOy?VJ|iCo;c(FXhByi zQObda58S&HoU`s^gXMTw(u2v!89Ek95}rw>gi{iWr!i=Gc|lGgF#kH!%ge{-#>$Mj zzxf)c=PxZi+3aE{0MAeG=X|~DdXdL^`41sJeVygB|1Y2Gzr5}nja#~KMRwyKFZBL= z#v=2VKBR3kZS|xb{Wz*E1@Bc@_TI-ziF37921`_i7Fe_nO7{yvu;IXjKcT+K?spkEI^dL5R}o&ha{J zVuc<}i;bD|n8)KGZCqlpEp*ey@M(XWiYP!*Xis3HE>nwYi~`D z`sG>L9$)4V%5nV*0d#Z#3+c!~4;X92X>$AQ^!49Ct-W2^-neu+C;cNyD~s=^yS<)D z=^y1e(j*&FgDCU1K2N>bVKK>J6Yl9eW8EeK#ABUuF2p+@_jsw>!sMU%jH81(^hjx{ zZFlhw3A?*?^?9LnbjM&STSe>_S1?g^6>g#qbF<26Ksx>*JJ2i+_sqB~gPA4hm0Ly5Q>wo$6 z#n3HMjNLUbukZd4Nu@0WeLq2-2kw1oO?C1{^+0NIlxU_7`r|706Apreg%kBbbM0-w z6ZK7Ruha5tu2yvYB5*Hpf_0tf>!=UF2k>+iPhC_JpMP6lfA$VtP^*;fGQ>5#{MIjF zyq*)q^go^*C6pfLpO@0~n%cW?jHhtP6MxG;Kgo~dZTc%Zbafzfzh0{zOVrST&$EAo z0ARiJ2tUBd`bF;FUzg=9K1sI-1NwNGxtSgyI@__F57XFsM69clTxP!$Nemo|oD>O;bYBjuVtX*9^nHE)3JYmPvloo9UKx|(9d{U;qgE50- zZfZeSWq=9HdW*qB9hjx4w=LX{3x%sW=uzj?j}M|U$)O;Gj#0R?J2ORC&(PTGwCySI z+|SWzp4ze4kq8yV&H*f!yG>YYggW{Ssb>ruVTIso45N1xX>~Ao&OX!@J+!6Kmm9#y z2+vX;1CurwrS=%c8$1q$`0e`g8rR$B=+hLQMmcEv?V7LH>R4=h$`pD02&8euv*o$^ z%jSB&J(tz5XK$Eaoa0maa;p9EI(y&!ZZR+6wpWI(;pNhH_!^4;EYClu`Obe;h64va zh4(%YSbUO)NM*BBTtl~zcTti0nU=n9IG?ANYE$~P@~21sTLjlNiXkZy3;Sn8#Z=bF z3&D7p1b;cTdOKZ0p0ErEk|t+bGI3#H@v+H~mSF>xz= zS>n8y?l##PpqHb>)JCy!34FPl7HGepphYap^%i%_A;1_F(#w07iTV6AiFgyEasVTO%wPbV0Uu*jdE%iQb;-5U&hz>addYbB0lpQQhweSnQ2 z6KMv0b{kNm-Ycyw6zYc_C*N9};3#2&@luBl7XCW(^H++~wp}h0bT0-x_VKNZ)Na$u z%i=y=>2rU@m`|qjUzOny4O)|M+f>E_W9(KN>!_M=cAx57OvS@#D@wrBZuXQeA8>mn z&C<<3P9}+p=NrUG!04%ehS#~Xpjhk6>~RKT!li%L@UMV(;W4{P=3uF9PcX)M2n;#( zB8P`LLGz|SwY!;z=#^Nw3v(v|x89T1Q5mpTnE zr{K+dk7?1^#|avqp&rkH!OLTg)C|q%Q=zfRad5X7gTCL-mt|gy`ZH|Lr@paj3O)I@ zqsB0^pT11?4ww7%(;hTU;mjkPUQaGo-fvZyH);z-zhygUY>!`aRD8)aGL8yoR$B1+ z3wAT;hXqHq0lw{(aX@_imkH-g?x$?E7ikCll~$ELMoq`Mol|FU!YzJvR)0 z?n#eh()wGvxY{2N!e<-0aQmE2lStc-6YniWYIY4rPF0ICdcy^d=oL;~p1bq$=yASt z4qKOKk%!aRDp|Ce*iR71ugA|){ z2a35hY5)T!wu%;x-g1|5KVdLK^U+3zfvf|tw;JYBQ6zH`0UtmrIx>ieWV9RuQ*UzB zf-~x{5&I3$R5PUZ{W|sId&Q6fDX=z?+Ew|If>1dmEgTn!$NfjK`IlF>PJh20)c>1z z82j$_@{85>Z$It7Q5Fg3w!&?@zJxMHSIn3GaR!)v`f~OD^{4;k4w0_j#RdpOIRIit z+eRB9PZ6EM2T7oXcsgT!vBGZClO0yuKzl}bL5!Ul>U7HU>tpT9FF5`u&To(N!+4QH zrK~3_Jw9ZdzKwjr6|r}u?3hlIIab3YCQ}W&pRkk}1_!=z#bDYF3mjZMO1!o2UwKtILA^tFSXM7zdYOhoc{CY)4%v}JXxW9ef)iSqH5c}Z>J|}3EuQ) z44R%HPl-;iul^jPFrV}O!C5t?5g7dO@XtOa8N9qzcM5P_5P$l`CsxwiY~v0N{6(8I3ASPaa!I|L83Wss9LYi;M#QtKmgZ_*S# zb2=!IkU4H^dNS+7gS(S*2H~UFkZrg*_#hEXQjr(FuRKk3tA}V0?w;oSupzynPoc6m zanf@5ve&(ZzM?D%>PT8UQ99w~f(=L}SH9sj@)%E|J58b2l)`!oOK3NRc+`W7$LQj< z1xbT}WQyausRV0-(wyg)N$+yyH(bu=Pre_G@-$=r2oz3ynjPNK>ETCw`Zq4XBX&RT z^(75XIp9xU;}3p*wtxTLLLOQ?vXB5e9@Eo-N+~k=v|z}?$`Y(o6l0m4tEN=d9=c38 zx@+ffpD%DbQJ*PPGfe;C=OaEp(Kd&Bk@DT^oEN2mwT#zzJD#I}H4uy9zQ;>+XpX#& zd(Qn%^FfHHVKfD7yOxm?;yhzzeoszM*bG|FWn#auHGw>e&dv7G8eAim$0%Qi;52pB zi&RJ)t^(_iv|qlS=6Ox0sEbfap}$;n9(-;TAf$1fH(_tS#J)bf-40f*lH(bpwt0cJA~-}^kM_C#RTTm_vQh39vV5|y-CqBoc>p~?!oNE7N=7N%@^yQM^XYqs zBTn{w34S0C3t>6lyJ83#Mw>p{xFopmOYdRI@Sg{DDSWZSeFx_e+P8CA|K$vJkIt^# z0oY^2%}eP=5NCq{y5>!i>bcERo`s+j>u ziY=Y{JvHLQZ4BE|HyfvTFW`Lv^ zY&`HJU16`gX@dX3Nx=KtZhKR$bl)4x2Qj=J^67-l_yzI@G{BHIih{g0`9udy4%^Myw!SML9xc#UW| zdohZMlqc>1N7aTE#hYjZimdrV)2=R5O!je|qkCN+W#ul%!tl3)0Hu`WwdLbB(z0=& z`;?x?iqZ>n>odchVwh5B-F1-H3$(g^^)<(K2%#(W!RNaDk_>~O5|cKxNevCL#(DU$ zJr-H$Icy$>`LYb7e@pduJO6jD17^;t!HM=w>T0TR{w2odi3T3fX#pUPKB`ILQF(ma~&P@VC%fqr0n)W4)dGXiM3eoW!R=jq!w znBgN$|M=yp|5*Qa9wnz~2N)e7XU_xKIM+Yth|6)Sa@G4jUzWki9@QSM_7xl_#7u4g zGaR#xygu5wlxXf zRtpmpqHEi`S1!F_wYHKeZ=%r=h!9X5wH+bEa%@FnZ~almy!2xUU$Pjij?xAJ^}<0CKid}(ll$IT_YM8Y)1v#$c}{Jid`rF;)` z9i5-%poo9O(9WY#k?FMK(6!Rxp^REvuN7kt)%F~VDaOEgn!CIr zbBTScXc8}%J@l`Q+sM;6pYmDto6(T4y`5iEm3|7%0jAn`rZl`F_M^mFFRQXE7>QCF zil9sczZQi;JPzDOYv<)h->1aEfQF1y*yb;-k-z4lQa4PC*zr|EK%y_Ru#nfepQm|S`xiYdc~_dam@WFxZV ze}zRMFG8e;b&hHZ+aD1o{hhMNc>|k1+xa{mLn?%2dgxp1Wt(_Y`01-ayJKAc{JP|? z7`D$bj|ZNQu{T)60Ag<{k^zra^#8o~V>kD71e($mRSOIv1~WQwTvc%#Pvf?ft}MVh5HoO}>j9YHIBdnHcL+7#u`=r9GDLS;NL5H^q)eO6{?%`+0eTXfj3fIYK%he7S@# z*Yt6@(6^1R!ny`pGGA6r{h=?te#@yRi?}f)APS2d4Kw2To+TvL;L7J=F!oCxHhjlP z2frS&;~&cs zA4xA$kNNuON4PBS*4;U)TDi7Y@lEE zGR0v@OjAKpCi5W)gzeA(obkR7%M+Cta)hDH*^hKd$513N!v+>ybcfKxaKFrW5NKDM zC*s`DtanqSO?PN*rIQvPHU|sVv^@IiPcJVM0_H1%_s45m+-$dVHXVem&w}a7m0phK z_RYc-pk8G{!Onhb0hRP6^8Be$7?U%{pnQyxBqw@QdnU@ICD>NBqfeZD$Hcz( zPQ++Uu7WJ}6ekGQA2B_`I0A$zQbYt)H7yqlGg18PMwpgXca~?CWvEqq4^xYzL_>4L&>o}B;4mlJv}|O5uf<8!s`q7QJ-T| zMwc+oUe9N{Z#mn~7l6f%{PX!Lm&Kbdp|#`nsXb0VxBm20?s3W_@E@lST*i!RjsY+4 z6vlbl{P^hI){kCi@Ar^f8-M(VFOhX^(!jw_OqA0t$H;9R>Fm3AlKLEUzJ`GPSi@OP z133uqw`qPpC7j}V;@&85;{g-j_Mh^$+2!E-jv=nUEfLc$Vc3k{F8SE57{C1OZ`feS z-_8Ys={QDS0C}uJd6q@i#(5^PdBt=}Pm>Kfy~J93I`Qfgr}>{d^4(jfcC`DtKrvlg zv*foy`+GmOzY@Uk(Yd#k008o`qJj;8b{qh%TPLiXCf5F3EiRYQfABI!rgyK&X^Ia@ zIQ9?rmAeq)+X1c~_x}c%>J8JiYy$QlG$T$||32Q4*&3i@l!JT#+BH}BGcpDUS!|DA9l)INVwM{uF zUWQd8;9~e$Pj;LNdOL&F&lET5RV8^0$?|iKez^^}->dso>rubwtRu*UsC+(dsWlJ; z@isnnj`{j(b=IEWsdXD!(e8P%qP560|Frl0x4`l`o&PWEkJ88G%ft$#r_`xBFH^!% zLLfNG0&P5J>tXtd9~fdwAqjmwufAPtjU~Ko>-a##=*;df z?G}ZnBZ$l{XAT->!|5y1&1hSqx3T8^(lq{UYugDj^WMF8$j1Y1^uFpSU z3)4r%oH8jxQEjb*gy=zV?rVSU6&=n~ne+VZ_NMvg==*_u zPWkfsaCxb6Ft%aHn67Cy?Z5wR9&kQSPZ?QqdHN2!TI19F z1|b|Zzg$N)@R=fozn%YK^?`r?*J%lm3G?jt1t&xyT#Y%E`|6CGm*Lm>T5mMPZT>n} z%Q2*8MnA`ZiC(D~WQO~0mXC+}UJLvs6~a?|FbX`s8)10* z?nXhwRSp3%Ap_1l7V9IO;9I!tiE7BD&gXX}bZk2vHjT2pis^no@v*P%{M-uD;zy6! zS{YBfp9<_xUws+(-~S%ROFGVT(I@;YlW%f2gyAA;hyMFhf^b5H?sG31L`EGz(z{U{ zy;}w6>AvDuH;i7XvxLnPJFb8t{b4mOPDz7lFbutkjt$Xa5~>_nPj!&B5yDH*YM zNMVqUWDN|$J05OH3lR32CoQM(;7Frme+W{X6LRZdAQ1V!xCvB(>F1yFIS6{0&mPkIW79a^?m0bQ zL?a#&!wKs-&t+lG)?af`#JE_?fgE_kd>q5T>9p-ky<59wxZPUJ80J2bcHgjW?zdyZ zR*ypMFKtjDMB8{e6cTNgtL1b*P3RxzWFFa+<_T`vXZlw1HbUHYc&kg;yTQdAlM`O* zmL~n9>t_sF!fEf1&r`@?=cwg-cqrxk^S3j@6@I+Xc#d_=?KqNKf3)YM(m+7hvBWxY zA{O7VCulIDDHC`a4@fS)gCRv{;dAmFbhHqCl6|OmcJfApvBAJ7qUz{%Pkihwt#XjS zt#fvv022_VvE-NNeU4G;ZA8JsDDbx zc`~H5BxdIlL!u}G21}av0qu58xJb#@&mZ6&P<+2{`!eI_BcB95rYuJT@khEy-|;dU ztz2#!tjBVFtnrok(ej<2vXxprmgzZjJ&n9|w#v)%*X6geH4O&f{PK6Ww6}+1di<#j zwMA~*aH_@p7VIY|*Ps7>{@ftSL6-le{`~RdeGl>1=TyHu{ql2qT8{au+bujU_cmLK z0Tre&^r$Mw@fe=xLN7i`V4o7roR-Phj^)9*vV5Q&LUY7Av0;AjtaA%%iW3 zr#kk3PR+sOc^h>j?R$ApGnCxDO7$ik!2KlOz6dYNqe33~_+@!7(_Xy) za{4|8l6xC++e@fl(x>FprD1{_3=cTJhtu7n97P}Z>kFmOcL+Spa^o(c{uyS#kmt`iZ@wMl z@#xce9tTKQ*~3d%cYh%}pX0QaeqVTt=k9xh^V9MU=bVZ|YoXUA>}5Ri9)bm^51d2$ z|IzhlNs?p9mLnW{7ZPQ%Uni2Ae|#33+) z_gcIA_WK*2woiN+YW)7CZTa=j&!hVfyh(5TcG0x-k>gaRzirpw|MRWxP8Gx>)tFzd z{14eyZS%U+oYpI?*I@@z)mZGB$9dScX3(GgzUPF-Ns6r3NU^+sscMqk$B>#_DqFDl z>;MSNF&gLD4#(Lr^Pw-R<8@l5<1yB;pMCaHN_SI#cBb<2S_nA(ItpQ4>Uq7MQPN*0 zEX%7TDCZvq*UJy&ADPcN{&y=|J}$RJpb4~m(LY{5%ZZ=cdw~YK!H#e5LdnkNFDWy= zrCav-nm_xk(#rcI-sW+YQ-s=gop1gBUWw1^n%*yZL4tPV_lw;PQW+y;VMdKHmxO&F zcdddR1ck;>JGuDe8RuF+$=v`g!`!{Zm|cv}dQkKiCRSC9RFO<1C|X(qaH&4dx{zl_ z$qN{Y&YaX77~DJALts>BzB-|jCmoO@95W9ejvE+e>kfzOV(6T42#MZ z&o2;?tS;^2x&|d?Ry`&xan$s-)V5xii6vieX)ZU^M0 zMEdyb7k;LxcbK1j8~AaD3t#KQ*loGa74bxvdb{q|x3hft^8>$Jzm(TeuWv5-@i%$= z_**7bc-FFmx`g4JG{UN?Lck(p}U3a?G|9UQOx%WNo zyvdrPHf}Gt<$8@Kxnxg&F7xwN0WstLm;6qn32R*cdF6I}vqzW25c%3LX)a5C=wjG1 z?}+L{*{N1Lru3cP$wH9}G`C362`4ZDO-;jtyWfyeuX3gYPB6~CCNl$ZH5P!z9G#Za z)?$OjfPGu5>H}9BF*`E}y$}b{B-mP~^2)5Py~26R5VKV}&nN^(tEtX5u%Ct#pUbl7 zIDK+qMI_?fJI)_EWKe>#NE$~s9}0l43(&eRpZh3B6BzwbD1Ma7YL2HssxU+H%Ela( zOJ5P`s40J=ppOx_;`a9Q9y#6GFjN0>$!S%k9P8T7S?acKzpW21aD89>LnO7)*we|!Nc)wdd-BfsMs^0Xf6rn%_p2~$Jprcap7TJ!eTeYOnQ%iB_8s(oAC zw?zrt^?G?fb#zAh(B4A{~BN~e0g?9*m z*@KbQ@a#<5DWi>4Eg-CKwVyVpt-wZE26Za)qHR|QNJ`oq(gI;e&}(0Eq-NvPn5t(B zSDL_NHF^*MSHxs}y0n?6+p_EOEEI@pHeVqQ>Ln8cm1* zJ)gOk9xxW4Ox5+szDW%KxTROPnaN{?e3BPSN)AjA!f1O^i z3I;WJzg+S6^`CDr;X){4*JVZj`<3MUeHra>H@Tc(CAPj4;4S9&1O*SO0siFpE%y%P zX8d*GA${Y#Y<;6b*8^+O9LIhB{Z<^;&Gz#+`c#;$Brm1dBW;x4@@^FP{88C`$o2Z= zy-uq)Yw2r>1)kgcHK`F09i~27+4ww*z3$QhmwF6W^1B&+m3~MKpUmTQ#nkTBG)HH% ziROelnkR4yV2HwhKI}c6zuo~-zIW#1Nrohs`nr=0uJt+Q+%a#Dx9z8`H3+l*MVIv1 z{xd&+nHwVj;tFs+s6v&u(bjhD7FKoRerlEE}EfW4HkeVIICDW(Bd z(5M6Tf=(-{Q3R<$Xjrx8;*+YW%5Vp%qi2WrnqBE^#rqlL(`|=kK=zNPBWx{js<;sV z!lX=YBGNE4r;OsAx7&{*8Pv$eC6)2K zzTXe}?aecO@BCFx$_TZlxRiA@C_%+iXRlYbi$O*~eg3(}Lg(|4T;8NLzF3pd@tF!N zFd#e5K4N&S2_3Vw-Q%3evzapXy(zBmU&~LsrpBxTt)1iixBSyCaJ+rHLRo44p7rzL z8FnaN>-EcT+jB1O1p+XY^2X~1^9Ut*j+ij&z}G-IS=)@3Jm{{~yeIWB!A7^W?N7H_ z>=WQ}tFPDbvPDgs%i_VHb3tHiXK0xH$_+Ya0))f^5aE)x+j7+UnW^MIc}7TrFSq}0 zwSr_$%OW=LfS2YJ8e9Fw)Xkl4kKNsn*z@NW zA2}+t0p;cs2={`e8do_73O)4ggfEWV%X+p8ezx_RoXs1d_2enWuwYaYbakrb=dyW9 z&5bloG~lqtgUg(#Dq}EH8b%saUKwe;a^Qg%Ms81^TT#QP)Q=I#Biz;e#Mx@}!HJ#r z*3J-5OUjAKyNCIpEM!=l##|!YED9QP0DE_8D@cuFxh~`J;N|Ae-by=3NuGSrWmvzj zW-&hA^U=@0G4_u17Q4>mV;$`62{MRh7dr-5hNE2B7LmYlm80?dJD5b3Q9-WtRWC)= z8GokR_L3sip=2#ZAN*E65Sd}p+w7yU!wQ!%C>f0+bGtszuLY0W{<6F-FLkV{JW~FB z8!wfZ2FpZb+dV_V+-cHw+rZZX>!QwO@zUM2nZ+wWIF zgPbn3?gj0YZ(mAYZtw4I`QOXgD259jnC)mp+R++MpUp)d`y%14b3|^YhS5H_&2Hzb z+U(5%Q}3J-lRk`|6QK2lkY+9?Ee)-GABlXI{|`BC1T+8)15F>CzCK3rbIZ&2I8p2G z)=&~O!rb28ynma|qk(oTB`vu%T|bByc*=4rXZbh#SeQT4ZhmdCY+#sPT{P|O-3z_W z{~#>q=k1E^`FBeH`6H!MCPNSLt@Fg$kKjY8x00WaH-2?-cPQ|Z+S@I;c^f4=7vDOd zWC2Wl#?(lrClDcKIJ-oLI12U?Yr*K<5iN_J_wi2DxnssN8`x-_n9A4{+?)q)q#2HJ z$&YcVG->Km`n+hrEYs6`dI%3$i@w-_(Ip&3x$?l2ZJM50k-y#gL6_CPYgaBdec%Cd z!4XQk(VQ;;ocnWIY|PAVU$61P-1ma6)^?p&>Bn>GzRO_6$89IlzCw>ooXgkCFz`!h zl>*Y1g*pJ0Xg8!abcyH5`g2jhvK;3?Y+BMDcfB&pR5ea3wk~~@GBiI@|O! zuQTZD*ZEW5|NFd_SAAcyBwwBieV^JPkW(y`+UNb_m3nZYy53fs!NW&uiiK|%r^5e< zZ~ycESeI{CH9!0!rQZ%{nz#2aDYO7x-WV3zy{CdNeLb3FOF&C%LmfjqbGRRYPb)?Z z0?%_hJ@7opb_dYcY?NX=`|IFhUD#(qNoT?{iP&eqM@t6VuScL#8X%yg9cH2bdQYz9 zCw)RHUrxfy^5>r4R{H~fTlRGZy!VGfStq6qT;6iQ&-Q-F1U@(L}v&Xm!|Ne18^8FZTY7z{Kr zM*sw8TyW=v*E8oah-neX#h=%egkcRx?j(iQm+QtN!2^_%YFiU@inFnQS#xZ?*HqTs z50~}y0le10$)o4D+x`606|Ik_fjGF2(d91H#X2MxB${bGOHfkMfGPa~`Lp{KO`Hi|5FF@~9>J)St*g zO*_mhv;ItzUEva;b^FF&j>+Q-{-C#2F-ySrJ+>|RXTVn5Ws|wWSu&)wSxV4P*K;>t z-sXLl<~=U-ExrH8Z@0_3gdepa;X5V2HeSE|21mUfGX@*<2HMZC$N567m(>5?UV0yQ zUqA@86ToY(t2rM|Zj)zB8DPxaL=YaK z!45O1{Q=~(@*dAcGHIX3w&Fos^|$SXnXz!DZP!|#Kj0;K*hxc{hXDrPgwSJUN2~a;L1@yBP3CX3G*^1znu_4*<6Tv6vDy1Lof)n*HCM$i}AzY#rBesbP_ zW?X0zPVhE};+1&5I`4BCcU_YlQpont!NiXW+ulm`yHq*|Q1ABRqyvlA8~Q!S*1+*e z+sazXL9^J{zrgJQbAl(|XP_IxJORFfT2 zbZ-!j-nelaq&8H$vlMr?I2~M0pV+q~m$hV6%d^f_CGL5}%<)Soz8N~A16Hs7{JP%3 z1jTElTEIa)NmD7zNhj>=EHMq4N(U@w zAOeWZ(syIR4)K{TO*cuUVj`X4;YeA>f}vzS8BnHAq515j>{Dyy-K@$$Y{1`>9MDsu zX+x4+3g>cwk2CbD6LgNT<8>`pZr@>Vt5(j-wh)Y`#)FGRE}yT&jx%-Z%lxE+x!vW& zIZyANRFjO)%h*4nj?Wr&K14KM658i+V|&=3!L`huM(a=$jE{5Z)T>HEc;Nbazy@&Y z3ncO-H5Iu+k29?~E(kG@s_r44(|o(_h@;5gI12_(%*$_ok9h}qkH`BLNzd~wuDM)j zsbTwqxX_jy02oqUou{th2QaGczRK~r&HD>l>&2Uhh6Rr!d1>c~Aghgm(ZxR`tl&Hk zJ2^!bw=+)5+-J9JT(=WTQ(&96BCM$_HkfVHtS=1FOi~?xYOzOkCa&=aQ7s16Yfhzm_M_iW82vvt+(24?f)vd%Jlo$Ay}rA$eC z5#w{pm(Tg5mrHz+x?RS+BdwUT4<>Qf@1Q?Zt%?8U4nsFxh)tmbkg?f_H$6{}Z)u2ZH| zmjh8F6PJR`hDSh>ddn5;#pGal=8Mmk%TgZg*E>K2APmR}R~`HB{OSsUtw?c2Q}N5(k9OsdYrp@=pJX`_MejD-moNmiR&TCjWV9I2F?lS~ z#VpX~LBZHc;W*nC!+iFUTVLX(OhEC}GL`goyUHO`eI~3)NprE$d?6TfGA0)48B;%M ze&BnXAd*ReOvwbzLjmh*U_|Th_W<{LVV#=M2Ap%&+^3zd)b$m2CF`*_->?rvI8p+9 zo}4xab*^te_>5~H=;(?QV)5p(rVg~G{>+mI;@o3M#iQT^voTtDAEkesU^CI&eY$su zafUrAF{U~a&KGYv0jEtnf;O29(WM_};Jb_?=>Y|gT6~i)w_V{FO~Y(1B?dSwZgBc7 zL?WCsaNfr(D+=zuZUe6)=rWH4v|Rx^eR;DEGecbQHHn#h28%P~=sT_H@Kn}f579l^ z-ur2nVLZ;yUR+?;?m5#O`-G!kz%6p93}Zs^$ix{AA3zewMiD56D;lEp z0K~jhL`ievR4s7f^baRl(iMKCM+dOr)&Y8l7r2&dzv6i$+fIHVdVr*WQpiYaf1#34 z;)C^dJVSn;)A--NKF*`w2#^2z z`foRw3r>bH-^8^|JTPDWlz9CpxW%Ob@35G*I;W2U2~fBnxx`$|gu=lPC%UmrPdv%z z&_F}1G6qh^sZ*}@Qg=OZPD-WF>FEWx3>w6x#~BzC(F#IdQe(~`IWUxSDv2-?3YZ`! z?ShG70n1tNIAM8vpL^A@#(u<3*OD)%jmhVk<67q4^Z>&{>ZJ5qc}$O>Xl5yWV;(

+^<9cZO(hbEF$>?B-f*L2z{-f?a;)foZ&h;KJhVrx4rpoJ&q4qXzl{dW*5i^ zm>3w)5e1PMBax@X84)U>8;n-+DftD72EIPdK4v4E`)4YgdkOw3kLsVVwg*g54}eZK z<7Zb-O)~?W^D*8SA#4~(VvdwwpCyU+9%AUST?{fL(wQSxM9K)^B~MR?IMM|K4FEW1 zR`hTPw!(RFd5vG&p#?}zV44VEY{zIs`pC(N((uq$T<(N$tN$I9MLNlYlVQHSxIav6 zkn*}`u?2ce2svu3|M>kk80WUUuJ6-r?w{x;Rc*i7p=-Xv`SZ`OmA96-U4svgU-5`iU7&8&}5OwB&0Jgx}%bwrwVo!5P3CTGeOUg7s3=SWR6Ij-4>oiK#ma_mKY1zqQKjA z>sCz5>65azxhzH&XgLC5oJhG-^yNx6o;US8;o$rMP?zgN^HpO13sY^cM~_-B<<)9> z<=gpa=-dsu=y=0`9`m%6_ycXd_|awdW}Q4WD#Z=rvj-C>^uMIE6Ax_Twf5QIWE$!8 zWyv`3Qsa4Qsy_B}wnw5ljx(~KJ?ZfFk9-Vl6?BBW`IGD9b0)5*t~lmQ*+ltr#Z44X6+e0zTC$V0j)&RF-_A z{3;6J!QxaJ0H!o6^;U9=mjlVGHhPNypO?80ink0%(e+v6!g}4J+VpKtHnKgEN?4B9 z9&34yqtxHmgfwuD{R=#^cuS{c8`iVIGi4aO{CBeNUpED7kLw2Nc+hR7ck78J%#_P- zH+z4ZuX97U+1thUwIPLa6wzSz$@9UsPTJRqmhxBLpN){7HG~{z+d2f6e0lcs4D}!#+F6}%rKEC z0T2P={@PD2tFUuwCeo$glFl-vluVG4(L4i^QtM;!-2$;(e!T-2cPlVGWrb?Nl-Bj1 zA*rtFb@AsDgEY(e(zRaVr?&aqm+>cu`ubEcfJpJ9m`1>ltWM-^0$3o>7>O$B%BJ&$08oyw#ImkviPa0x|o9nJj3P)oii`#NIJ-(=qD4;x4vg=O_#M9fSw31 zVq|)$ZL>|FIpF-6E%ft9d7H=F(;Dh7g7aLXA9q{cD}UbG5U2G#)ZE>Bpf=P=Pc13t zOmI+b&Bff1Gy=2uDU3ExwfnNni4cJd zK9j5Xnh#jAqb&YZbL==z$1KF=%X9wn0T6cpz^FL&3n%K9wr|%zVjpi;{W-T|-{N}} zPREIrP;da0+$L0;D;>Equ5UkYcUkP`^SW{WSiS_p$U32azRUmFJ1Q-g_VxWJ_`I$A z=MIlA@8y5N@0Wj43O&lgG}^HQ5cmX|e9R7!J-ODF^y7(`A1 z6M;bt5P${Ez$={EN{>k7k}UwIt*K`V$%myZ)+N9k5OVCV1Uov2KMAKCayo*5DOJfl zYe%4xSRfcZ!T`x@4FQo+^O-=Cn99xku^mS8=I8BA&Q}|FH(sb_z0X^nF=MoBPiG34 z@kq(|dM=8l3U>cXfKbLW#p8rLj-%xWXAMl-a#_wqXM%jA#`6fO@ocr+*2NHGxXwu- z47<%{a}`k25$tmkMrWKb@Dv|{O=28YyR_GWa~{4L7B|6glZv}%#L@VSS`9i0P^2a? zt9}gL=Hr3e^wS62kBkasJff04c0S{a%%9WAiLt9cj^l_*uC@p5#|jr60C!#c@lS%f zCGhkPlkBte2}l-%YJ0x0@AMFmfHajjFRH2w*es9};c)WT)0V(>r4RU#-weQM25=aXx7z3Gd}@v9LC%$SEq#hI4n54HQ3^=Fey8#x6A*`IZ@53jWBF)4*w z!r$s~Zfc~@k+M=<$~XH|jcvoAdegQP_1u%}oYLhn4oq9+rL-i!ZJ2+TJ2L3Hr26-f zmgT-=d~BryFe0?V=z1fbjj5dv+!t^N3Qp}cPYNBcO>}TO3!|*0P1c>qsS5>GHn(04 zLW3r-gxhtSyC)2B2S^ftiKZTcu4&0Ux{cnDt=Ncl0nN+zM4U`GNdd-SHE;(RVGhtY zn1k?x1{K5C^%+GP6D*Xp!n#wz>^&_^tm`@OB{}QU>mVt zuMlwF`)&?#jFQe4=2yzAXe6GavWSG)dGZoXh?jR7q%XY(IwhWZ9)zK%nc}bNfIx?A;ulMge}V{dM7!ktM{}5%WU;aLG<35$|>oo#?HjubAd;PL{FL z3k{*~)PZzO_L${-DWqXRb@@lbAz=uUAJ3_k9!tUTV#mI+bZhN{$IhR!Uwk{f-tkVEDBe+ML3w z9>1zc0zxwcfftNC8fPr2z3?I*aP*12{`R8_Af@$Pxf8?!ec?Y-hE$FZxNV_G(1TTi z9L|qxdHh-PiOTtBMo3IoJdkic-mR5(f4gvi5040g*KISU)P^MhHKvWsMW)6U6O*G( zuS;{^;s}@)%&++@=$IIic9pqf0f!<~0E}|<_H%;p}}D( zV)UMJ%}*%hvUFT8ZNvp#*W6;=T`N)qsRQ8HEo;jCW9(SfP|op3Njoi5r9y)-(^fT+}l2+AArW%`aIcZ!Ud7qY0!8?j8d!U z{Ye3}9zadwiS4j(WiSO03hAC10j3*9U#1}}=My#_DGZCnrGNP64nFiLfkD}KD=2d= zevrTFL@L{QI=clVcf*t}D>#TK2a*b-C=$xHr5`SD`K8nDxt zWtqhvOVJlB91(9KZ$DE31@r~v*=D}%?Op?CBKcxtxkSKgZ2tG3qZajTembYo$J`~a z4dw%v-HOgq(Tp-NgM%+ex~hJj=|BGMbW(-QtxBmoE%Z-Yc^qoHA9HSR1p%hN$#9ni z(4Zu41pZ1}0P8$mbRU833pKR!G^{mRV5t+GByRlTkx9&Z3O!m)rUPw|*SDc=I)hX2 zgCdMutr0{&OKWvM&70vl zgh)to%oBD)9H;Y5A197`qfY9;TFUdZR^`a+7HytSn!Ne6W<)XjfV5U>ojdbW$3uVy zTeBI1*$lFrz|kALn$LwI^%syG0@grchWAEEj|5ZPHc(L|(SB;HhzOEaHj_{f;L&5N zBsn@tt|(!Y!=wkAp~(ypO0m?v@Gz>l!{qo?6av50z0JvUgzm`it{IPr;NCzbCiJ3N1DW5dF2Kp<7 zE-(a2yVF{qM zeIt>Xa5R@RT7p5*?7=bn_WLSQqkoc(F@`YVm|f+3>g7@c1WouJWD@qcY2*@)RPqMiTcQ(mEBdJP7g}Es-eM|^r=uPE;{MdK|Y^Kf@3bue#&Ca zO7c!(FG4j49W??`iYpJJi38k#IZ9pELQ82Qe2PWca-6B8;jtjjQPBTYZ|@2@P46?O z#1V6;o!GB&O8(UYNHnp&wZ@2L;g1u18Hu9}Qs08;^9}A0u5FonhBu;Rvtj!hGwdw( z%#?rY>-{_#^h~eg+gG)uO;Yh+FQ=m0M0Jy3E5)E>ZYOA&@R@eW&2St!Nwd@ zp?9BY3kfANeglNuM=^%ur8IIKN}l4f>szu=XX{6fF0(b0bGQ;?itZzT#3@jw z1IX!&D&Zo+gvg5_0tLs3Og<@x4V)gD_ZATVozh3S#F^*$db^)jO8S71*FvCY^9$`5 zCI)1$l%}18FvmoJX}OPo{~yR(j4>vs?DGt7?k#XX>q|BpsRlPz&CN%V*)0Pj#TbTZ z|G6wOTp`$%GSAOxl*}SJ{-GL(gF|XBKBgfxl$A#YZ^PkJ|kGK8fiw*g!J#8W-Au{sp&g1IvRy|i_#6~lR!dXkT(TJGY%!Ah$ep&-o1D3Hlh)@rhY;(~ zNMF9P=ksg`lk3uAAFqT*@PwszCOve-^l5>vf$kK;$)D(K*k6?9i%8)KLWI1hnruMk z$~sknY67m-o;7!(frc7{u%t-Rh=51v-m_}jN}oVZKD{iWZcWjqz7DL(pCWC#vm`p* z4p_rxr=+L$I(roYo0`MS6tCN~z!W*}V{%M(Wv|%X7ncPV;bmJ(Vs{}J!i(0`A;&0U z1hYBJ2QEIb=+TAI+~ORG&F~DbJB?}f%PdeRV{0zaK_ejq0LIMb&Z{&tmL2G}oiPgF zl5N-~8nrx1#sFIXSYc)zEtjV!isC1Jl+1o!7d!Vg9WDa$+mb(U_V~u1@a`rv{0{U- z%7?zoCwxiunxcPx3NFdL#9a0$k5A9H&oB76%L*C^Cc|r7WT+4RGNvk7kQD@cyW!p8 z2j$ZUYV>)e--`SgsgGK4&p`lF6P+=kj90$+M{%XswP~?_dFPnVMyo69W%P zSQiZUDGodXV)|`e{G8M06cWTl<<<86^-!TPUUeA)ByI{Y*@sU%oe-k6EJui(eIdnm zBq6~gGFsKMH-V+3uG~@1bY&`9iYzr#un$ZZ#6*r6kwe*t_0&9K$RxL9t!3_7x92=> zE7tSjJoa>|!7oQ3Fb@R?2PEqgko^QLU;pqmFa3}CJ2o(41fp5Q=d06#vR-lda$gR~ zB}S|LF}G`K$LUM|k&amg%)5b3*}bl9UoH=L``?jsf+_Exvmo?5;C!uVo3p;+M*p@o zVt(A#&q>{?A8iTlt6`P-nE~MCWP`nXa_v9~+V}T2Ch!C`O_GYV-@GryeY7IVLFoE? zcSSSKio^o4rej%OnbD!mawRP(^vK@ZQDxeIS!KWz)1WlY#T){n=V~K3i)sS11Idd| z0X?)Q)aWT&L|{&?L7oawWTZ8hS^!GMbU7WQ6ArL_Ufy93Af#$1t{4O-FV-gLYgUiv zeQh46(!rT@YKw`O$#I`4UWvCdW0B^WDSTQ#BdN2ceZa)fM=N6%1sKPClXIr*11Fjw z#ME70Pg-LCG=Mp0kRkHh!*So(n$zfKUT?1yZ47e6xZ4>7eF>I;w1CrdhA;@h=*6h& zv4@#PayLRiy+5^6^p3ejKm_^_FcRD8^gz5+`oJnbVk08Zk=@n>F`pT5V(60zGkUN; z!C!Aixi((bbg2P^J}d_!v(_|>7oVuA=q-^j0(25!8d39O7?s?eZJa>vG3eJo4E*Z{ zJk;8r1|ah4e5`5%+WR$Ie^5;`8M6LDyUemm=#C?`vj5#o@4W#)UA!>^OH0 zIG70pY3oBuXynMr3|&j6d1i<7Tj|Jv?LL`P49?)Q;fyRYAP9vr&lcM?@8gQSQ1X|+ zAT)QBu#g41W@`7Vn@XJIPG}=+bfw~Y@O1_zH`FjSJw4n94@fbLBt;M+xHc-Rc`YDC zJ=61>pbbHSIs?EiE3SWNu1MG&eIE2?rk5M^Og|o)5{|Su7U;*kS}6uq}({ zjB#SL85q4|^XStjb>%p)aj4?ZhC|yZ?>V&R;l*Y*=%=B=Pfg89{-`+wW?2t6-C-IW zI;7rEtREQ|29Emx^GFd80EmEw5oFnNiKjwnU85hr-#dtiDK@WxYhZ{ifweB~YN<8!8GIGjqj|Lh(e-1X-aECo;c=@MU8lMV1J$`+FfSxC;vu4-!2a?rNvslh#paTp#j#q zQ6)6Vq0r`2?hcQ`D8^Ev}mRZo1UWBHRS!%&1lqN529wS)QQ~I0^S=NnB z0)v*|ThoklHn_?o0jp>)8Pf*$+Y*5T&a%9#b6*hGzv(n~n~9rh+#_P86M`fycOSn>v{gLvOuMriYA2E6MOxlB-FI z`?%}EZorke<`_wb+mvGW$!^C!gOKv(+?B|W4f+-q-WyhxaMfs1yL!crmDNVe7mGlb zDA@XQ)TQ_4-?rHkl`6`Vq(%svhpG^ughyKNfbcenJTwedbb>$(14Qu;HRb+E`#|6V z=qC05BMuGMmxGD)&JbA64pdh7QypF{DGQyDssV5qb~HiZh7jNLXm91OrsFGl^g-W2 zD6i)*=nd^W>UP54`hL|`dEk=&W4C=6t#vR2i$J$@hSc^6rQiBbG{U|qwpxv zATQ4neLnI#zkc$vzNXD%MW+kH5mhLrzqGT@DHDY9Xn8AW`Q{P;iY4Y&FfX6rywDLd zXWQ9~tqAu_;c;C>rt-S$ble9jVk6b zh4kP#g-*!}ffFz%5YHp_j=DsrfoWjR<;Px^bSeOdd!v*u`s|myT2FdzmCty*zz1qx zF?JhXP4EezN-Ot2-YVkoG2?jKB%!m0a)r<-+M(FP@BL?~h$wkU0$>L{z@GLVv&%AH znuboWtvKzWD<`54l$ATqB`o{cb?HR4gK4gndY{j=W<}8e;#&GqL z3GFa3R0(9k20~el$;K;J5;WEs3UiS-l?dzEf-o`cj%^d4Q_hoq^#BNFrZiJmFWN9H zAW4rlEbFH}lE2A$g7^=>rk8Zbvh>IPlo-83+a;xaUC0AWJNQ~*xpx>Jq#ZApU?+H# zwelw)S$gLJB^`OWpW&_i@!ut<1TnXD&d`tYn}0Zdf3ENPsQI65+pN!;t_5twtyW9z zyrteUyYQ#1i${Gho*O?)ARg3D?6hWF1|0kzgf=0Ylay@6d5lre4LkUz!`TI>r8+0c zIK4t(xuRx~CrZuWLy4v1LKz)R4H&z*x0n#-LUvFh0%vw_h-{E_MzUdfyb743D?z~o z{PYwh18so2N*eGc96lsv(d1xGZOry|86zjId?s;BYZ+_SKn~7o6997o$uN_nI}p_U z3>rQOZGyFa64&E(sbtxKET6T8KiiQr99*1KqeldfW7RBEpUWaNjc_j^=x#c5V9Idc z<3dCm$m=W)6Om7(RH6Y20p}c&J!2F;&&fJ*jD|XOqJ&S#I0TR6#uZ5R{D#iRaI*KV zhT~F(TU-{R+%P4^#R0TvqjYUg>$zSot2CHgB7-_(&1%zAg?C%o+i3 zG+K2Y01!t&fKKYdn7?Svd7uKUWxtFhmR~!1E(^8qlB?Hxa2mb?z*#&ee|vP=(L>LL z{Lwe`7ld)&^)tv;yDYV2kj;=t%C(+$16r z(KMJwC8lOA;laq&hLiwQO(#hNcFd3xrW{N>Aw9vsIOSHH#B-F)Hv3HqhSPFv?FiZ~ zsgIP0WD?+#YL1|Y_e~j)a%gPqZ|njy~f6+gdLYIz~sgY6ZuPv_1#C6j9kUQ{Z|W_iH%Xmde-l@M{aLZx2T0y*Ec zlm(&Lm1etV$D2<<%B0p951&Lt`~&NZfobV zzSLHZ;U^$O=?A56d0*MOZIC9wdYipt{`N!IqQm$9qwKeLk;&Z?0ipbN`nJ;~@c(}1lvKhF8j`%`-15_ z2+h*6KX6XGAjnXnM%$AHViZBsB(6LVqU~3n2}5vbg2$?3LMQ_egb@rU@u6mjH3ka0 zr-Ynw`h1n#2UC(!mQ?4%lLbJ)*BrLwo|w5_l${Nx2?k46Dulpu60Mi!4v^iFgn?}d zeN3JQ0j%kv8B9IlIe1HVze$<@;<3wpPsKe`iF?@)n1Z^t{UF+;hR*#>!aBjLSByD0 zvr`VrLMslcRm3r^765JAW&r3|xP7iXD%r0S7$LWryd~{6EwJ|H~Q!YpX)o-*T;(2_y;Dd zTc3TtaI;vh#{ac zKq4EnR@r45LE`90BV_}y#?c}n4UVP?--D@AD z3yr*Gg=9oW1aGfE?r>={>0lR}E1UQBrG(j(7$ri`!@(v|ml~Q<&D@2?m{Y|c)y6x|0qG6V)pOpIJx zyH=J;PIU}bS4DGsps@Sg5vF;xg$HnGXZLMcel(Y?F<4@4wu?Rq>#$^tV+^0xuS@cY$S}8v} zP}zTpMDhSocbN0-a@W#}8GvMv^(Qw?IM)1~2{cL1DP(iv$=gI7O7-BL?CZ73%dZ&s zt?o+m>v%;#E%!O-%Pkr_v5zJFoLB7I?`_kA-r)lQaI~AhO8@$I)&3vx|15gNwc6zx z-+2K;k|FPKxZDhE{P_Lt9M8w!7x0Nl8SV&UHmZX7*5>SQI$>F3C=N-h%u(V2xsXFm z>a?GQrDmGvxI{QlL|jj!`MPh{7y{lRVW7h3;?pARE|nZzk9T3tz?P@_AW6}{DZow{ zfkNoI3irHE*qy0B4lof(-U2NLKi^}!~(~Q+t zIAJ;Y&`(k8hPNZHUB1D&wAat&8y}h5&++d8@N~MYoa@g=M$g#B`St1_@aFUPGamI# zk~|sqat3?MzO<1~wJTII6qgRA(DWIaVrc4_%xEY}|D-ptX75+(IWp?>1;EEihEQi1 zFfcVM0?iBBAqZzA!f+f_nhmp@XiV;NBj@HlOiDXdZ6g9FXKLXp7`;aXx)NmQa}n3j zCSf)%YPqiZCVO^8#lkr+^AlJ}6ibYXML=b)SBoraPA&`>7E~~Z3Q{zk1vD?op+KY@ zX_>E**viHDQEE9yVFVZ0bz8)TjXXA8Di@(G8( zud_Jn^5Kr_-+j{frKS%p$io6odf``sBkRf-qNjKS|~ zlozniMGQ(jBNjGByZgD6u9Jb&)97*sfkucCSpUfN@s)MXaC+_@Uh@37SGP}JKPe@+ zrh9yQ?f=`KxJ%jXY3-d)$o28prlz#yJ}*k?$Jj3LWi`c?Hq~8FEm^W%7=4rqmX=tQq}|^|8~6IY9&YxyE{>K+Eas2>N;O9O{`pE~JVynadM-5)*Y>&~OU9jr z1%?VR`yLsiH5CBFVz7WZ#%Oa>Kup9uaM(z|Q<5PSfi}cmh;9LWR8mQ>{`OO;Qcg8t z3Nc&Dxq_o$@`F}QOU$WRJZMu_8o9-l0rS9V$NLMW%zW?U^q1t$p~y{f@qixvrS8;;DFOR!rZNkiFc*+um*BK!k(Lr zlYb?~0`Lal5v|8FBF6RYgY8cOH?v$$& z2c^!pWhP2q8lw&4k0F#1B;=c+N719A7TqmaGQJ1-A@=S{m)w* zOSgf?$HmK%xolf?6w_$|vkd{FJ`xRMWa5fIk}{26IQevnK=`Cojj{N0b6R_ZqjE4R z(&^6*nLI$V@N5dOUf0)57T-k7Xw4MkHO3@nQ<^PUC$jUGB;$B6Z_}-S10pmnS)xMtSE=@nTYn0>iJANk{dAf6JfOOKLV6S5Ze(AU@ONX>0)nhLeOBw$z z#A$?2S@7qFY=g@%#O$SE>{l@Fj!R6eg3;URQRHQqzb*TQ24gSt^u&_Yw)7uSQF{&* zJqRbnSxfc6{#>^SIYeH)0Pd5qSmf5P>wbtJq~S@2h6fSY8wY12zAMe`=!%_G4UL<7cf-mqEbHwV#Iz;B+3Ya(x z4O(p#eV32tJ8sZ>SE``!C&~0RV`;Ue0|j57y^nc)9n}&ZgB_1S||@9iU^fUMSK0Y-8^^q;97$1%laYd zic`J<^c~Cr)4AjPg7d5X^{V_|lt(TX#b=;Tche>EHfF_<{Jcm?!|SWw)>9@2%l-0Z zfDljw46iWFvgx+!|CMA(@?yT?u(#FsT>+XTG=Alf1Kw@U27*Qk9C_%f{%5b)h(-XK1L#8lOsFIeY zw#Nk-ork&}vz=ug7FJ|T2h!mPNSJ`1JJ3z$jl#@U#S;4Yb<^#25p)qa&0!M@c94#7e_^ zCzr|P=dWv0NulHe`UBgrEX!(y3doGw445Ms^Er{#hXYaHGloiyFi3RxF8F!z!GYgy z{|mPIr+!d~@YjFx+1?&O6rbI|UIPQ>Bi8AYHvUw|^K-~p={V^XTz;z`&;7X~;G!qr zpd>;u;8#Y}Ykq$EMNAtdvbHGXvgA&|kqoUm=eHgq85inv#X&iZ<5Fb(k~_A{Kg$<; zIEdqWgc$>JZb_KDM^2!R<&s`UWEh3#5ah8-DDa%Ltl`5k1u^*m+X)P4>@Y-t&6g1= z0~`=AgYO%0WLFdVu2+_NyyL_utqw4QHA47nzjq~kx>i-6NWj-->6WR2zB&CUm3w{9q6m)RXoJ#lAhmE{ zX6bV_$}~+wk5}a>fYU1tQzkrTHREipq+?Xm9(r2yUyeY?noFekBvOar*_!SFY5&fC z>?M~*GM-OZYl*Uh`W1E(P+!{tXm^-_IO5DXBoS#J5C&$sf*r;w5k4c9d{c&5S3svN zlE4>0fAV%A&`-`I28yONJ}o89v(NqDv;EzJCbPE@Lr|8Iy7_sqs$YBn>qO$h8IJBu zC?wriXHh?ku=a*!oH^0eSIFh^s1ByBmU;xq*H!eD#JwR=QM04-b*Au*iK zjDzapVCp&ye#eF>H1|Wm8mFp~*#Goclp!&q!!g@^CmBnB}$F<#cpO>2l3({jBFVV*$X!?BQULnKIr9YazYh7w>#~eGV`O6F;!>Hh5JN-Z~zF~PXz!j96AZi>0)fN>e$dOkAW%8UXzYvb0E+QKZd#q zk18*@PJRAswH`TTIRoLoZ9li=dA#2Q%%TI4_Kpr^c_~K8=K-kazrX$S6P5gNd@b_0 z!j$=OY4Oz|X|{^5Qu79%^m|dT9^=&B9=v#mrQpu$)y^O7jY^_8FJavW1zG>TbyJmj zZaR7##RWdUuEygaRuK*Gg>l`5c8W4I85z_#r)@Mivzf%~K^;b=b1q4-XaWNe7Fl@q zT-cdryQSB3cjSal!)XRQ$39?M-Y(!-4JF#J! zPX=eO%y>5Nk?J_9LtmzXPpe83B?6c{Aj9w?bv$`F8JutfXGk z$)nf!d9f0gY3F45dJ&c6jl4zS8RQ$i6bz_{j|}J?&WzyADrg_uHSOd`c~21@wOzfnk-dQ?130)P)J^)rF` z-er}4bwj$NC~RT~LlArkQ9KZu7z zfJkGMum2qAr_p6NZtIU$Sn3)D=ByH(Ai;K-Bj&U+tuvpJRD5 zu(umypMQo!$@i^1Z=mV@QBRw>eD=n69MJJ{)Vd;$i}T*CFB~z$>k@QAS;U@lR#ltR z+qAQBZA1cAE%F5Xs_oMrDwN06y;VdLv#+M4;G~$5F##xQGAkdcBkv6A8U+HRqa~ zCSPb6lTArcys-~pGqprT4Unk>5?HT!M$Ch#anYMnWZLf}KK9E31Sg=RB{8yx*gQKx zO=owPNThQzd&=!eNClb`PDbO@)UwYASqx8LGVe;$6RSg2<1E&xoGA?5!jRDEDB%#| z6^6h$R}7sRI$gOG{-qZPz%5sY2renrA3&^^`sc8cp?BbE-d?XESwF%4>7m*uDBB|als z`YP|~e7g4u{alvoI0_#X=+g`O8Dwz}k663v5$jbJezovpxmfR){BKY)-oYK6h%8id zkwB2-Kc#QoZ}Cq|yynCC;4Qso$~be9pP%am7MqX(;fO`=TL#5=bT($P!Nt6)2XspA zk}TXLcYt}YN45tg}gf@mrncef(MWp7K$zE({$RH}fq-Hi{CO`3X?VKRmffvCCEBlyF zAy7!x+91xQj>CqFh+B@J=zSEa{E~t|g8`YeM91~^(Z~J$4bPcq>@#cEntPkS4#Po& zu%&4OV+26Bu%j&TA{VCo36Q?k527J%&2~zimSnzW4lzs?krGyksW>eIEEm1>KT$tY znuxw$-n^BwJ?lFAo4wE;uxst-eZF7dQRtXyHQe&0G`=RHb7pprSPLfn@2e`ccttUl z$rIQz*rmLlP~YBMu%z%Lp*D~f*T6k10}r! zRa6x;<}TA!AZVIV7;Uv-O&9Du@jTY-uUNCJd3fd9NyQltPk@obZhM&|*QA>u7M*Fd zg1B~5Q{*$P7?QIJbHJKS2!bHMfzZgGdUdopIl%xEU4cdRR@5?L*CD0 zWZ(^D@spFLXaX9`%^LCRBYj!> zZ}h*~#`nvhGI_(z=<7e@Dl$W6824E16j~+O*m~pbOI6jOeJ9z{Kv>LuS=^B)4Ercs zN^8P7_a#B(iih!KYRc8eW`9+up4?L$>qpi++adXr1e-c^|y5l#RYQPP9D z!#ZP_!A1g@sEUfXb{m?oVCGj$CW>K6XdV{SR9Ji(QiLf&9B$YQazH{9&rWjCfRq;s zf274T^F)DBu6|$MIUXAi-cb7WlLXb9$uSqyFT9;-}Kuppfo z$Kau*W>C%2z94BIx)5LjLv!#sBN9%qaRr#>1k(}G0Oaib`RXPIp0k)j1sn^{-Yfil zLJR=UBQOAPS)M5QIghe#cwn{D(+dUtgZ?f356A@qQkqcYkhEBvOZAs0{^B@hWr%J? zg!`bV3u?|!;UhMkWBEpVA42p3FarR9={Nbqmwsp5cg8+8Uvi%dT7rR#*!)a@;O3CG zcYN9l6WrdnILEkqzi6#t12eaQwe4q4@JSza)_TS0X&OR;v-%D`->XZHY~JqgD;y-= z);E~)o8RHhUc}SW^HmP?4lrm!1aUG>?gRkd-6+qOZ0Rs&JWZJC)MV&h$n)u$$QWix zP02OP!w~w&p(S}mFVN*O00=FuOt6Pl+10J1VJ+TWYYJ;t-R2@`43DIo^01WLJ7)I5 z6gE%G3K&3fVhQiWId;U^ozyH_vmzEOB7PZ8zJ5z0ZV9M_NhK}9DvLC!;E=l=9WHNM zMih{wndjilK?!*>m=|$F2uGa#f*of;m^h;5sl4}25YwS+W^9fCqk?eAw}&Af3P>pt z8ZGGNu3+650O#57WdUDwXZv;FZG~f~S5JGQpoC$NrRjc?F@1Ohb@1S2%zG`TqI*U_ z%y>c~ojl396l&R%>~|KJ&r#qE*YkvS?MKb>`S$=IiYVMD*y%0YCOC?N-t)$%LoRM7 zoH8ji=XUa`3HQH@=>uRuT6RZ>!R&M3cheV0{Rf_L*~V@8AJ7l`E@N4npB_>!uLl4C z-mV3HZSVN?p8i$e7Wf$J&iZ2h+!8f&@knw27pOIfG{(cX8+LF7Sd#li_9Ng{9Pqq1 z$T;SDt#w`Ui>1K)q~&?P*&gCoD*b0wn2s7UXTXZMkbdc{u3CQNqjULkst za9jp3H$e3$Y3kyWX2)FsLx`Y1i@;!VQp>y7qTzNjg@>7eO>+yw=m{q1CyX{)gdir6P|(sopr|WWxRmOV1blyJZ~8T5RL&fa)!yB>~$2LddSij znuej_5}@9ub1*2xY#8U>+#&PE0HGqs4%AC2?8+J(CWT*`GI|d&MWq<$B@eeH8~8M5 zHYSXO>AxYt5lIZ3>BI}uBh7RvFPk=&RcHwE;Icm=kK-o3a9@fXF%Dkq+0!zFx37sM zmi2=gE$6cd=KgAg^et&lN5fk_!s6?wSl;;s0I*)QSKAQtf7*aR?49lDwLTZdl8^hz zkeJt9`+GS~TY#2t2k>)NvsSVLNBca$<~PN3PGS9o|4e5pm32>$as0gCXR6^FU}HWd z4FJozkBieA_5LjpM9na#9FcGuZTJf1B^|BM3FI_^P{?>`ta`niNAK(?DJ&BWG={`flVM2yO7%Ib(_Y%Zgf_JU+K~>^#E;3^ z2?-JyhXd)5&`}%{xS|?hh{YVqHToz-oSJ2JFpeHLiH%eNLs%e_9Vy9?jj?FGbQRoO zOHX@9N@XiKWqi@335lV@QmkVr5C{TB4;Tl;G@5}*J@vMn8FVV3dO$?tF~p}>oYrPh zRF+X!1v&wEmt4RiP|cEc_a@WWozPQ#0W$maiEH*Ttal)A#1oguKF7t0v;~Qx0Vj4LA8jPE;i^W2^%8@OW!W_x3VQ#0Z%}|B8dOgRnEOh#{y-LCKCF>h znpE%W)qY9=$|Gg-jC}oN=`8_N!bF<$fs4E^_oP{TATmQ=*3yFW8>eyHXZf{qpSYptFzOxC!1G6J|oWx5Q05uaI z7KW*&aRNi_N``Dq*u&7>N3>o5V))r#)dLzNPZ~s>F`KH+Zb(FPdJK{i1CYW|?CRcA zd6|JBoBA0mssp&#$U2ocqXDS50i3`oa6#+NpzMt>Kmx#>=rp%!M=NYroQxbKD`@VD zk=p+EYES?GPHQ(&qRBO6$eVL)7y&p1b#K|;@i1k@v#Fq4F}@Bv&GQ=d#6evWO) z>cxz`Eu{|!i?ttxLMXeT0rqg9C19Ekj6_B_ryL8NPQ(z%JPuh$VnZQ=(%ng71F_@{ zWhvtUg;*&X7%MnpjsVmKh`la-lDQLs4{{nOwv+$_z`}C4pK~^o)Tfl)$Z?!$gtzk> zr<^E5t1@4(F4lbYQ3W8i`IctPC6ugot!Q5NGauV>2!G`v!lNHaTtiV4>0sJu&IHbzXroPs*Sdec71sb{ z#@Vv59+75`xglkSho4T$g%rlznT3c{taC1OI@4$a~E_5lO zL5e&F$4ul1uBQQpkD5jbjlgIF3oei>JhKmKhMdwX6e;j5!5m z`TIr~@qljp0*sgq!`xqaIM-6oNNef4tP~*e1S()`=?#C(GU>?If0ZJ0yw3MG%AWdh zNsnHsOX_VX)_?3rzh0gIG+tl^Sm^b!E#-S1U$C8&Y@rGnZuaBfFaP82mtt-9k90}E z4skkH*nva0^8~p6v0m3Y2WBH-r|1l}Cq0TiA+C=15nFnkya{COdoZt@={RZ!n)K&h zR+`1>Xt8k5M_acR`$~SMHCX08OqV4qCzwyjq9=e04onga7U}~SZP03+$tDtp8dQ!L z%m+FFk>@lFDZBP149LL2VyZW&Wom>^vKe#^cf|y~^J24;r}RRG=m|ULf~_6UBel3B z^uebMRVZ{&35!6AHlS%DMOS7-G?Qu82PYR8h8!6t1uzp@FhpgFJ{J!6i8y*QJcy~< z4i)VaL6aM5mlEB)B$y%Ew6R!cKf(Z&{a$!UQ-^!d2%I!0jg#=~CfETHDQ^%HFi#)C z#qSc2%Qejw;L|&*-H{)C`OcDc#Kcf`Jlk<)oJo#@6EIW201SgIDW)c?A*6^*`|FzH zR6z=lrOkWX zLcSTt;&GNs-RFI$>F+;CAC$)P?1--kSmnNy7(~ef4ISpI{l|rQU|ds2*2coeD3ew? z{(XH`{J8Nr(pVxWKJIUCN0emqk96ey5`&gv@xW!r?4#<({(s+wdaKV#-ploZ_HVt9H<4#teM(u^RFc;!X4hgzod&?2ZoUSOZFRWeWNSwr1mIwT>HX-5?6$iaO= zW{d$x&l@zG(BsNGd(g2?Fo#?wDzgHdjMwy~MaBs-Mp#S9_S6*?^A<+pC*%-s8G)=t zGAA&i3a6ku6J{hd8pK2_Mv=DOOi>G<}w&HfzPi%xbmjF%pnqc_D=b69%{s0}rBP3E15xGA(?<^*ntX08ut_ zA*$ZoMeT3x(E*6uJ#s2XEf3tltPlXw{7U(+lEb-1l+}D%-f;WzfdDWZ_K7w*X_=?S z6%~H>DO)_EDDcKK%Qg4hFBL_v4EZrYXHEwmkw-KmSn!jQlu!HCo(>F8S@w@*-NRo% zf)P4_X2cnD)a9W5B!w@6T1hgl&;43nRArbfNC~Cz*IZYkG57W2y_yrfj<(3yOs0;05fU;$6(Jz>=iw28=VI)<9WNz?)B9uQs{_D z+nAxZ<%#U?ugy+~ZSGtz`vVXSgXq{&OI3m30c{w5TmPUWzzbdT&t0WF zq9kBFC+CEdD9e4ME|nKB%2`4taJ>2F4lmm-&m?C}%h=$AS(lS9Ua9q)^Ck`=%#1nZ z`1pZum0s&bA8T5Z%%5xeSZ7Xif{;Z+CQS@F3MV5}9U=^fXfqbBnS5s*6L{u0I2^!7 zf|n$@PFzU|(C5COmX5ud;F)H2b)U!P3sNu=!iYg~2I9QHG?)!|Gyo;@2|}u)3(u4o zsv3tzG@!7sXIaI=M@@>Mlaip%;S;EZ(n{vdhe>F{9@d4a0)heiE5V2e0&1$VEd5|Z zBM6DCXneJ4V5I%Ph2MiO~;ngRCHp19BTmjIBLXcTXMDEc*3WV-r zHoHehRPWuqlw;4qGU52!D-dx2V1h%bj()lHduJPn!#CMcUrR}aG7W6RnNrNhrS9li z4krgS9+!ma38p0e=!vZq>|Mh==3gVDuNi6d3ps-KAemP=0x9*@lZeQV`JUSjTY0St z`0ec5l~;{Syy#Yr-{Oc~Nxom)nE*_748?T=14QI}=YLsKv5Oo?g)YCC&e1 z`{Oc95ywx(`aRoOF=oDAo(UL0<+0bBQRouIK|a8 zQE2Bpku9*CBZpwevm}dXLrODVd{j0`Ik~zWWtC^JtU3uOzQOZjL4Xotr1z!tYZ|U_ zGRnj;N4wx2(|TFHUd!+csuF`x195Y3%<94~OpQu+LL@Vq_(B-XW55_`aMC`*B{ZJQ zv?WT;$8|iO@$OGl)zi2FqjQFk3&mz5F|vKB0k3n z2x$A0l6rvm@Cn26@`F~LJz*;)sH7>*$d!l=^(>^H%d&!W6WwEhCOwOUH;PHO^+Y^Z z@aPjO=VKnITyY*FtCM-E;(-HwzUoE5y|t1_qr)~DzhrxYEiGmI0wB1*Ht*_xHxGc! z2EdhGU@3~|7)2XqZi3o7`md5oVtUr)6T)7$P2?rcaG;C)f>0o66KKm%lpVM=e|lJ) zDIaD66L+T@9*bE4nR}52EB(A| zzK=@`Ugy^yH*4SEv?Yfp6rMDrih;QNBWc?^`{=eUts7cDH&B0W?idK#O81H&BpxxN z2`8fQS~K%vubB*(QKryo4ClP1z;JgdI^1%k+#mX0d>B;cFK4t&bCA%4zl?l{5W~(I z01+em$f`j?KFy_O8wr!dw1T8+FNmbyd9`<^-x?xz^UFwc@;yhu@J4#6q8&o+p`0CK=|nj|n?F@R3< zsm7RmmcZU!5(0*Xxh8zkmcymrfs{7ff26Gv@ly6K3H`7{RV@z7A)IstMEFZ@H`&c$ z3!)R^Je5`r>&l#9&M3%X>xL&TAq)P22tG%38rl9fCDI%~Ur0O$r}%J2UzQHu8bXxZ z`W0T7%hi8z$BDP!0+C>9$twY6O1U2jTsW&&-(bLwd01Eg;B-a@;Ph=iQQqq7agl#P z$bbCNbxU`#C?5}EaQkh$2T{4F+VJ!9+hxe`x;~fu!sSet`qD>Tp&xy@=qg8`m-t1? z_ps4Kh7KM9Gtme?Myw>(StwpJm@)Wrx`%dns4MzEzi+|i<%=<^gFOnHuNOQ=;BJooMCcX%`y(u+^etn$u)O7wm;Y5$J@Pr-Hja@ruxcrkf!m0Gu-0^Z0INR7WE~aFFbMI0;5? zUQ+5lz~r?cdV^HL$@)yz(NU>HD6lyK1ToCJGxL*D?0O1G#;E)P+8V%69-!A`a0tk1IYB*n=`y1JEjv|Av`@vG$9l=0T@p?)aMHDn{-aEep{Bf;Fmv+x(>e96dx%~FPO89s3-0& zvhM(<^TjOFDO}N_juRMG63|1IcVEkApO?b-z2XDYAur>3*o<0+{U^o#cnb40lI$VJ zpZM5r{@TL~b@t~4Z{pMW_dK@M*uz149?z0U2|dnKl3+9xZ0@~+^U7qMK{G)z9DN19 zFFNhP6%(2DIhAHO%OL2OY+%rw3009UaFp-TLk41%TOmU#U!D% z0Gl&H;(VC<*kDc-9-fD*rvYVpbjQF^Xc&Ni(lqy#l9@UU;?_r9m-Nt?3IM|hI3^+{ zd5*b|vjYWTz~DIf*n1@ljAhe4*&;JXCr4seMPc=rI%@|&-zuBM!{gbw0NW)>W{N)TIg02K% zAWZBzi97lbHb`Xxi9-wy9i|i0S=eOsHd4ccLqN}Yij9He@2fyW3dlB{QB8t@HAN$e zlse4)sED^yjyqU~0LJ-xEmVC(g0VGd(M}{3IBp1Oc?pv&cmQw$$Xi-mj7BS~?Q|ZO zb20+zPhHnip1X}NT1me3WgpryI_rKg%W+;wmu}&_KFVq|v?tojTJKHSvou=9vNh31 zqP6%Od5+BEeqXlvgktm}G{~0^T}@|%h7MlondvoCxh~J=H}&7oy+WYPN|DoZtonJ& z`^f+Bt}0{HOL7VrI86)&BOv*#fLjjHMkCQDGTy4hoR+dDnAT*CCJ1WKwX+PJ7ns=o za$t#9fzF#jndljq@6b$e|EEpm#J`BLk2|Pl|i+j^H78aOj%nhtb z)0gdW<*)j_TLl#zklNpBfdV)v7|bDeNo9HQj0aGjLjlIX-rkp!&PEEL?w@c(k3`e( zV!=KdKw4Y_qEw`ZU2858kL4SVmlU?AU#@fhBmS@_z|&V70OiK?=WiF>OMaAcWNqKi zbIf6|j! z@*d+>B4*)6nJ-^IeOdIBZSjX%V4#0q-hDieln(P*>?oK#ao+*r$^DXthqW-00*Qt) zG%HAMnNEYA^XIET&d_H`iysU7#9VZsGoY*FkdmJ+WKS*;Nk;;tNc}%wgXuytSt|B?9CIzzQq0B_d4vCr#A-lR)v1Xo| z&8EbJFJ#l9TGqIu4;P!6Q;c9Hu4;*mY&wQy%`wLQCVd1&9@fUqUMyzrhPe2fM%i~Edt@kRlG-xHFia4dU;d%Txb+lvUi zzQ%^c9{9LSM0-gI#0=p_$r#>A#N$AT32@#4mx51-9vLtX*KcX9fBfn|tbghDQ#yv(l;Hqi&W)Dc&Lx9QAzuc-w%B&=#5s}TS_{oR z=l9pR+!`DO%pLiddC_Q0HUg0M&-c{-xDvDm=ZV$^xl^gQ+J1dM1^~vi&TBDEp^FCI zYUekCz8r#lm=%zq%g@`Ey4m5|HmCwzf_bJYA5}h5C5Q2%t#&Lbz&bxGmn%H18e9=gzmx;NQF}$wAkFT zt6PAdTyObB31`R7x(WgRstjNGnyhWH_&J;V0CYrhP%(>>SD=*adDgaF z=<@_H?USn;MY!V$V+4ivvD&;KDWejZs!=%`%ocMRtU)tC=SF*tc~bVCnG-Ho1`*P9Ig2Y+ zz-BHql7UCU5C^V1{6jTgn@p5>7W`n=9vuK#&bH|&8VPVmcBj(V{WUYYN$(V+N(3N# zcnZxMjPA?eHQH-S2N&x*n(G3y2fTvQpt5s%N%>n63;+>J+F?+v`Ti85^gtZWe?3e~ z)Bq&_fRc}juxN*2F&_$^B~Jn-NJHj>qi5RXLpdyKW&JED=PmuO zAK(Au&wZ&4nfq4x@{HVTIyZlCoq)kI+}9<4_We6ILIE2=GdS8Zq#iNstTIOA=m`jf>fxM)W~tN-h`>y8!UkKQtLqetJY&Sl z*m|9(Nh1b$Qihk4R6JiTglQ_gi=A>@>0Y>}nQ`_rWKIoMOG9TM0n7m~q0bp6kPI2! z15JV{sYw@_1>@B?AZdaS?q)&0w{ykt87ND0n?8N-CA~ZyzD#xAQ>U8DeKHfxPJ~7= z4@?wAT~+cJY8H~AphZvGjoO#@Two>)9iFC<9*M}nj)^w_Q9!Q0*-x!LJPUYCK}!Q6 z5_rtnd~<`QzSNj?z;#iE9c%J)NeuFKavZO^RMn}ya`jUr$Xl}|BUDhWawI+;eEZ8I zqaDP8j`S?*^R&mzzqC= zasp?y(y6-8U999g@8Q|kdV!FEsl2=OMrJdhu68x^NJ2L&PBBy~DM1EdVk79+m|C zk#FKUY;4Q3r|ON+M2TZ!B(O2NCUyf}6E<_0>ShM4M@E2HF3%l-N(TJ3R>74<9LH}n zCD<7e^TNjaan`9hLR3L<9(+k=cU_<}q9cryjBrE(-3y0gO3WG#5D7`T*J^x#c5yTJAs;#4H*c#iLfS_MjmOR$khJB>Y^Zuo;kvv!~AAY z!hFVTk&Z{O8{gXFSllQS{dL)ygbZs@i^1uFW8$2K(b}*qMeS^B`(Mj8B0*izU^rQu zH|Pc8r8x(34WgWtDdIShn4lZ_KvA#k(?VG!(58^26w|e=C*;#vBF0>~xJ}@?+uzRv z1Vl6ksiLU>5;0;b>0l2?=>#WNltDx(B2DM{e>U<`%yi`1&hu7|X%JE2*w!x}18O9r?9q8pB5q7wRC~M#9rBWkjEMTUg+2!Wz?gBhUXLKpSzhN7`;zZ7z4ZdNLa%F)AZVms4FuqO@2Bhhe%`75bNh{B z@5hmkamLE?Mk>;S3NPw?=mHT4U}~A^GCSBRuN=d2J_^SMBrc7-h&SknJo{(&wJ_LB z2DlTtwX;*oOj48s!$-W?xo~THp=1<2aWw_PB~yIbjX_^e%xmS|OAQ7RNHTFCW#yE; zYeEUi?Z_g93L^%pHSY}PAry_` z_477U`C1YTjxn>rDvc0g-si%8EMhZY&Xb=|EEK`?#As0=e|xQhS-LgLD9QDd^?cN; zuyOR0^6y^ulcuM&_VnKB7W*f9DrP6>V(0rp5>trE^d=>c|5=6&wl63@AnQ6E;73b;<|(2 zbCEeF^mN%`>zu=E`GlEB6JDD}SaN1{FZ(7->Rf z+STK{;hg<5-cv8s5=2I0ZYR%CkIJ&b8H#h2q-@q0mqM^*^67S=DKXq983O^S`C)h`}ne150x?~BOvjZn^^AjOr zlWx7J4e35ndA+$hkExcdTZNL(w7Pku1!e#tqL@-B!%$iqCM6rW0{;;U+0=`~8QTTU z*r;>&f>1?Pp^yD$HVjF_pb@C9*S^T{;L5q=6@^a>+~-ybsT^;fw6mm z4s1IV9&%FTq(+1YHl%&hC5rDO5Te3)M2PDF31&6S&lH@Rh#r5QRF0qoMTEy(gdR^I zy#AhbkG=6&M9t-!(lS00h&|_LnSg+C_sn?$EbjeW7Ph8|cm}2>FiHEIlXorw!IBnh zV?;5fT$!o>aqenP&N~S(La@IwMaqfl+5E9xY~R{*PdSngv3^{Wmx&q11REm58!8{% zRc#78J7oz>(0j(=KEyG@5aX^e8&NVUV0xY$?8G=RkQ69E9Ivg6)3Dks+eFo&Nt_yN zOs(aN5`)gA>~oX0pEVfb$Yq>0hmy|8MA=+v(Ba8?s=eg=w8eW51g^h|gj_|eQ>1F{ z4HKt%^l#!}xc|1?LJ+M3wBy)F-6k3=5-P1+Ed*^o-);~mucgY%ilh#>&omlSXDhR1 zu1*7l+jQmZLEz?dO2VM;%MnuIfU3OEXtOWa(7WXExn$&k+Vtj9Bws#q>~>^U8Xp~s^HF1DX#IpLd~tqUeP&rA7*Z&&4eUi|^5XTIsn3?M9RKM$dK z@0W!ql)J8Ui_R_iUg?1l{+ck~*7SLj&s!|^FihYfVRJy(lWvrvs-~Vo8F-1sN5@pz_fLqxViQX z-(WbK-QUq}%LIpr2gq~0@hNSV^ZdAcTf@62m~ zs>;RM$aZ$LoQ%K~T?cAUv*pZQxUrTj3afqCfIPan2Zv8^)6vQ$?hxP8-Q!S9K9=g z*86I3?%PWHlE3JhOPb>~F2c4f{diT+q(UT#6C25p;&h>aCrUWYCTq-)IT$9EY>JtJ zl3N(m`sD=rTp%0;ejPicq=O5{`7^U6GLZka5k}Kjg)x>m7c@tZ)Ll|khLW#wC_)4r zr(rdp5jp_?+mfD;CI;8#Q0LhDQUIVVGkG3}4j!0~x!m>>Y_^3+_w+`zq!o?J%I$9b0i3q_VcZC@mwV)JdA{l!(>L`a~k2cBY|Vn5HGk z9H@l}q9>G8;x*wsDCRM7Tx$;R4)kI%p|28IlE%)IqcuoR0m^Br^#VpXXDNJ4dVGDK z{jB3Po24!x44hYMy-SI^E(yG9!~~dNC3+G;a1ZKB^Kp@>(psOxK(gg{Nz6LKriva0nRd9i zi5z>LQMk#j@_b8A1wp3LBk4W zBBGMx8BpEX!JoSVv?*kBH}yKExhUcx)S-q4FcR=dTeC$kM?&s~w5cceTf4l03i`bTcsnp|15ZiBd zD)D=I1s7c2wxIIqPsYTA`}g$EjelK?kn>4t&e<#nvrQ9-RuaLv#H-YB><(MFMsgUZ zhL0>0BNAgSVbesQ>bWf0zpPR}2-LKt*L1~l`T5&r2Pmm2c=G2ve12o;IUtIohA_j| ze=IYE##rkZZM;fRaEQq%@O1{&VHYx#Hh~=7`Q3Xo$&2~iVD{pm}lw5j+m% zV^S6O&(+pt3+(r;*<@3?O>^ThIow)T1d5N8_nZyiMpr!+gZIGsEY5niw4$1H7t$co zw03-TFir`W#!Sd_fW_E@1<*!q>2NcPlSI&2vj|SS=!nc5u6v%y(feBLrJHej*($PU znnc!TniDksa(W{5ZVV786icE7B*!PJn6Ws4wXZ>x=9>5#zh-8+>PGarKXG?2)!Eb9BeLIYw>%jET>&3NX zGeyep@&^&C;y%{r>BsfrbvY6FrpgF71eXPg_z?N3p;A+iA*X8#9$0jTm+ny~RxcX})iPZ;GcbUwv-%DJ`33eM*0A}Zk z;l@{Cgd3JdDg>2Bu!)gw4iX$!hLXHtgXeIN|m@Pr3mo5&g9Li>=P3k#YV`IP- z=k$!N2rP~ODA1h@53gnHHEPyk5pZF=nz zno?B;*t$o_7whIk;}wutxNsGI8L-e|ul#L(i6Bu){C$3&O~%+RA9E58S1JO%0YJ`o zf|Sg}ukX*y1P<#m%g%kNB?{{VY9v$3+;2x$OfPQ{rJb zi6zHjwup2t0e}%yC}EDW@6&T38W^XzWTD*6XdYHMP;de%bT-<`M>SvOED!qk;mkjd zZyhf4m~uD+gQQtt6i*q3rEmQguhC0s2+)DtA>whS4C)F=8p}ZN)@8T^SQz=y2s~bR zLBp=2go`ZGs`lNNs|aKRHY%@KHR)gu6RUcx5Dew3{4C>@7OCIh1$hu}m3trnn&Bju-0 zga1Yg1fapzCj}*N3f2J$Svv^1|8jOAKnBQ5e{}%xQhrSUT=G}r7?Koy$qOtXy(Y4C`P5E0|*P2p1QeFI3H%VoLz`dU*ZPkQQ7{CuCr0fmOm z;AD3BH2&=WhR)t?yr%2}E~!1FV2XBmKQt}UdCPZ?pMa zpnLvEX`abAjT!9ywGlmS=w)!jTWV+cOAuEZ|6V@%-}ACRCREl*y5Ka&&`7Skpmuw^ z+H*sFrmCslzJ$90itOJ8G;6v<$IRw9{DKXOik#(W?&nO}ro7eg56r!k?=YWhDT~i! zDb_WIny6TNIs*AIV5qonY?x$VqXm)L6PElR|I@|mrL-(W9_AgkKrj+HmB)wv{`Nfm z+l7yh?Lv-$7e=JXwKvMf^vxq=gcXY8ywpBj;`9O?ErKRgnlM)$#N5@F^He={SisX} zk4VsZ_c%-ujwMCEV_L!{%nAtQNOfXpO4iW$Iosl>fehUeOCB>#1gF0P0HOm#B=m$Z zQ~B~+{bfm>kj0VHG7PeRLUh2;(*OXq;dIx)%mWXFonYzn#M6;+_5oo>hu_yzkLCeL zc#xV)CWli-XS~txe#{cy=s3B zTq08P^CcZ!7cJ#Hn0pWVfL0 z^7y!npyrXwcwB&$)MjWqGzdfo^bXF zTzpXKW65foQ@fKRjbpu>c7I{v=-^Z3>_q-B32Jp;{~=%PTz=J}IhF~uEkKty>1nq! z-#oC@i)4#P+Dbf(7ZFpN)160ugY)ED&EpG~WqZ{mb2dRQx%blAkTX_Uf_hUvojZ)R z@hEsQDEqFd_F10Gzps7&x@0bWpWzoY{QC9IyAu2iQ)JNB*Ug(|OXBBDE9}->Ow6Gc zrTPT~kdD1YNJ1d@*+R@q0@^l^b|OQFeXi?<8>)3W*xe5p7wES@TCaTqQd`#KPP2Qo zz+28vEY%B(g2JfHPu&S9K+nQc2fhGXUIqLP{gFuCRY@mH!U zQfgRM)R#$zz%6!Un2?i&V!gop1mWK1L1`Lb7zy))T0Q{)8l|uEn(Z0#mfa&rC zJO@RsJ9=Mo?_2pwm-)oNsU=!j_|I9>S1cUcLm=TXIT|nsxf#&9wnwGNmd^B!sL*f= zZyQaF@pc`rLEc^t&*vIc#{ZPx`YN#ao%FCF%eh77d1qeNZzFS}G3QaN6*^}KdJEj= z{I&rASlhAg@G8wz7v`_|ZMmG5X`cp5&ckx18I7h8`Z%8>KU4P0FxSXb1lI9mzoP!i z591kwE{=#oC7kCRaglnvll=DdyjUBV#^HsrP;R>f%%ZACrBN>F0S@dqGIn*NZ)MDY zCW5DB0k4bUG4E^cbADvCY@^x`g%ha;_=$UsC~b^2_49sNXvr@vzTJ%E{^#3<2i490 z3^}$r2#!ONCzuXU_K2k)-Z@HH-u#n+K<6J>PhF{C?4A;3 zh{3lSl!@2$rhym*{+*B^)(FFuh=Obn-1 z7sc*fa4buDQLv9%aZ#9w6o#jP*m<*GrIMtfKn?);El*z1@<$=L zJ10d(>p3&(;BR^y*8$>3tEtl>40tkjE!c(6hHpPHDJ8HxfyYwztFR3cbT{2~E}^dv z5T1+cY-Jvi$+HDAr)Q;)noRVB3wSmKpV}iam)vj?lY$h?03#5PV~5ZgUDgaw@RLhv$gIMa zbR5J0;qWApy<5*rgE1X2B#+BF5aIe<%4ua5IDyt=^3PPG%p+%0aLmuB3_#50j#4^h z(7U+z0oE%(KHlV2Xb^;{ApoE?Yg;yhZ@pQc*ISfq7MK7@qKuKtC?F-lJZF^&0QPlU zCA8*o)j6x2;sd~`g8&+~fX${ml;=Vw>E}{$#Yt|MF!uI6r$B*_6+u(-x|T?V#5E!uf5HlxmhdyfZHqCi8DitebHWL z%rmhA%c4UCz+MGx8E8ydQ>$arvHZW?=PMY-r*DdJx$P*@^9v}Y+v_Wh0pD<}y;ewL6pUi6$OKx~DFX@5 zNvy^Y7HV>8S*yS+YE#3W%58VH=XudRLwGab4V0JhT6{d9ONNjmqO>zq{cSsjk}W=* zbBFX*HY)udiI;Sw{OAkIV!fGI<+fh?#5Agmyrkr~cB+Ty%otMxlbnAqg>WT7?(6{I z4ssn~$v8Jz_MweR%XO%ccSj5dqpNp}pcBFjF)$_#6IgGr;f!4Y6;g3HiX8#F=3~9| z4zSd|^pR^hP~i0o)2+_I;C;iaj>kZWSCRQiRyTU}1U^B^R$hMeu8tGPb9^yMIq&@n zA20-#5#`Q^V`eT_(+zk*?*Lt_871FUF~^YJL~ac zYWW@Rbios58086;+~ceYGq*xj{PEj@OlYa{xK%rOeA3%mJar~jv%DJ#+_IUTEf4uYS&)>?iNbd7Br;i?_fhJJe&nUMvJ3$Bj7Uyh(DaFg41Qfo zx=4!9oC788n(rK@;R}C zUGxR?R0zVCLQHw1!3JuWH{Uf_jYL>=IiD=`U843oSV|Ma>TmL=_gne#lnbIvlf1~2 zJV3p|j_Cx%%weC+_0w2BViQeHWvFsGE@$mt3%l*K|Ew_*N zEfx>VYmaij(h%i0HgM&#n1b$0j=5g;gixB6a1j{r_J~XLV;C)I;!(t>&PB6D5j}Km z(wIJFOp)?)Hz)>K|i)UA?}F**7eW9D{6|6E^U9W7e<>$-rOlyzbv4< z=$RIa#O#=s`;Wj=8;g3ReKoFSu;9b1A4>(<1z~HyZbbU?atz z=hFw!+|yfcy=F@N*s$%lOSVtSf}M-?Ztw6%smWj3DS{t!DJkM@lc0GZC*9I(K}-dv z0?qL)M%*uo*?Yf=^USMSk1k7TD3#&9@cMkm6Z1JGbj1VA1mRaJ-=KYM>#wl1tWx8V zVEr{X_5)oz@aS&1`yV0gKE7b}iEgh0#4|`CsP- zSS6HdlJa7m^O^PYfr3I>=Rwz72lDfjRbd5drzGu4tNoh~ofzW!+ygA)3<&2DGCT43 zSg1d)S;K!_F7{YU*Ff$gO9l{{|6LWNYFUAP-f&|$g2(Q*TlARaXv#!x4QQaS)|316`%sA&&igrtN!^J%~d%<}+u#oO}F zINFV~j2EzE$b}1+b=55l9RqDus+;3|R1%P8tRBKd*1gBl}Jt zx=^U85NggP?IArQ!GG>Ow(|kU3VoI-6;VAbj;?l}C9`sy{ zj<(LXmXQvrj>uat5`2twKYo2G$=QYPmOZW^p~xj(aY0?^(y!{aRlCy8d=PeFmWILM@q=vNNT| zR0Kf@fVgmj1SddG-k9W@!(=nwiVhYuJ$SKWrqy~WqlZDajn1)U9}cr}l2*s~O<+4| zm6v?4`zt4almtooTkcbML2pBBy?Zk1y zSy__KU1a@28^t?n;C~a4ft)4~X{eG8lH3hSdd5;lf|+t3x*GI;&Euvol5oSB(1a(S zlYDTGEkQGI0LbfXW+0*%d<^zO0YR+r%brIs`L#Fbf1ON-m%96x)%gX0!|}4|Oq50_ zz$G{D1QI;G_q0PyxUF)*Yq<>>cy zL4C@ryxrnSrQ-J=_41Hfl{n~r05(f`so|K61;ueM!$+ zGz!PkcszOZ4WTY?;)kX*R6DiDxAM zken8>#vtG}m#mKQTFU$R9Jlx6Y;#@^vUtkgr^->+xo5(IUl=3j)m}n$^nG0)WF=jUDEMJ|F-@8UU>2pO z1dlk1k33U3tIvad-E1!PKF&A0zr7KXN zUtt`>u+o6cW-lPvIVSVM6B9+ZtZ?)eq)F}eq3t#ZTg-P z`o43{ejcY>RoNu~)IGW@uAb-UgL-E29mQXEz4GgVm(h{yrZqZ1TJS(oEZqN|0|bRA zAUepF6m>VY;Q#?O%?e($HH3(<=6-?=F$f{43UvyYT=*dohLr))`wY3}QzehESYGuq z_X;oB%>f|E2~1NJ0Jh)Z6OIGyuap`@x!CR#%JrNB%9{hsuVtklBFa-C)=;yY1oa$g zMeD$+mKjcjMPWK>K-CLLRwkSYV7=^}pRLxfH33U~R*1`=;m2HQ&ar>ub9}=`mAYZ5 z(|~1tRS&&m{BnrmVg$6V6@!(Tyi@C0=liXnd1- zg13|GMo9wIW$k z{^-RazV#P1nrAAVJJq?$gSTb!$%^7o%1OAL!vTz9Z8O|viBz5@(_E9}F(XWd6&7uP z7p@O1M5C!4^R?d2s}|Xr@MINRF?E;s^gW@%zhv2kz=-%Ce75t*6Id*^(0n z;2WP7)CX!t@QEiZbyPjfuT8N#xn^h6Ap3XoHeY+^`2K>(00$-gjD)-Mnl%eCw$@v`*X*?a;rf1Pt6gq)b+VzE2yp4=MlK#$Z4eVU zdJFH@qV+3T*!d{9sz7@h_BA|QPFFkHRo+xR&KS?*8Zpb#F_MI{?GK~Jf3dnJr4KT1W`DI855aB7f*7o*~bOkOF5#EJqkse7Gn=mnvrPs2&2Ex2m^KC2|%Rt4k-Do6EFY{m1zc2 zVl1_n#Z^5!CGiPn9-$qViSy;;I&4I6&^0}2k!JJNjR3QpgM=XWl$rw=Rmw*CoBU7q z`#G-5Gg1vb0o42}eS@CnFiJQdD!->EwB$%mOpHEeN@%+h8{!;{e)2+y=t>tjAx2HM z?7iS9iqjBUW|Wf*vp%w(jRpc1;__=|JeVA6>2z%aQYtJ73TPH>L7Svf&No6CYW+LLmME?{Sonqr^hjHL(} zY?r+*2Qy(MIv@ekukgrV=l4tj5++^j9gdv-}U=-`Faw=qN?Xt zU>ZhLiR0ogTEOb0^?qDL(j-~h!xzjUK?EMO;)%D|@l-@x6MbN&4_OQS6tmm?W0F0` zET`1O78M6T=N;INp6f)7!qg|~e@BAdiy(MpoBm58#XgA?z}qGdfVG{;;{xdC@_jsd z1e*e=Ch~WgYui&DaJoavwTJqTd z5;p+bm+qkK0gPb^%i45E>b11_f*r}8+9z9nlTQGLc`^x2i;>>l@|(4vBf`C-_<2zCTT1DonfJPWg8G z^M6`dhtA)ZFT3ck>+LvmbePmjuOJJji1jc5KA)&E#vxFy5!7Lhg6XwU&^#z3-{49o z(UDoETfP84-?zEB1Q&eCMrr%%YfowI&9gn^wt!&FRO5oLp75U64g4G>FJDIaH~9)6 zGsd3BfzDLsV%0uZsVUTGZv@LyGI@`k@?DXmT5Rcrzb zS$WKv8Z1tjiopIz&!)hXCQ=Gy#2b2iLNCyKYAq3XA^^ zq`DLv+dF_xsE<0fU0q(cjV=!l#Ebttu9x$3cI@A<}gIU*(d!D-XSa&`UnRzINL-g8UP z_^b(uE62I&9)sd*Um z>8`4b2=~27n(0L@^Wa%CFPZ&7fCLDVfSFK5maL191>Sg-NBv)A_xT(9&u_cEuT?(u zh1UFCEUuVYw>NXAuuY^glh1A5Z_B?r$8+aiQVMxrEpF1D!;Y89dfmA!YjwSO;l5;h zqLP;SasTtN#SWXo+}|tKxK~rgKfJNU`%a>PmE}0Cay;a(5k*Ca7qyG@Jr0{9ztsqB zHyk<&*l%&Yr103vYVMEO`~4YTQZ|{VV{Gid-KmeZ&vJ{L*G>mb-Y?$vA74UO+p66K z%Wg3+DLrQmCJF!DFACM`k+i+@ZT_sQv@mU#OZ0Uc>g#qB zn$LaPBQu{CTo7I1NtN;kl}bUk{@j+cY?+Hsy1VtelwobpsQJmgTRX~r<9(JXiMSgDL%5_w&+@)Ta==7K%r{5nk-ZRT{8d7v zY;%SdQ5YeB`oIrhSq_p!+gIQvHGr7@qVLC_NPcV!qr&~n&)gDxZ}Ij`x( zFW0xnqsL2+Mj0SsGhofy#!0PG$DuB^TQ?v*<4W09%^V3Zo-FH~q|*ZfhPusHw)6eP z`y>7+By`cZ{=NOj>r}mw)_mE5rt*gE%fpFn{Ef)1ui&i^MRTV4mTkRDD;oPr1(eEj zOU0M-abMP3v9$K0=TU5=kGI_8l5C}JKecT7rjYISBj0B%6F;dvHbaD;QiH{r%N`@< zKtz*w*=Yp%Ji?M0S2W7kb+P1SWurDfRsPb>KKHzGgvYp*uc1opYt*^j&vNeZBXl2r zb&$Nb^+}_}8ToiD{JT@VwRLLp_5AmC!Jc1$p?q(;-rMz*8f%X;?xeAfK1F&Bua=%8 zOL$A5(6zVd*_ZO|M>;Vl3d`AXtBs6T#P$B2+_`+Ueg1^r>ZRpH>%H#&*XuWrwbo!N zk+MnpC2VuYJmo7TJ})dbq}qB?Zi^dRehdt9gE(Ak2;7nAISHbfS7qnvNA zFEYo!PKpOaFHZm&0U(K$ScoNLOpZ<}gPUwG&(^MK!Wy$@-DNmCiTw(j1nLJ~(%<++ z(w$VwScJf20PAPn^y-M%et+J6|B;>!0JrvY2<1k-iM1~WEbO`;u-FRY=OX&GI-9x| z2kDkh>L_XBLZKBWFWe6=V-Y*t7V&A-oNX*HXV}Oj`$|e{rLQCT`+AM{Cw%>0Mz7o> zX{r?&?lk=s#mg(;G-hI?ENX;F~qVV}u zea6v7|JJ-E^SANiR*JqyLFT@l^xO)OfBuEz{x18>+_Jt->^f){@0Iw<_|S1trMO1f zV@XN(ziz)tZ1j${F*JDzW5umKKUzasXDj`^_(kvOd4vJ(o83^S&MY{O$IioVMdK2zc5!jN@=X5#>UFWef zY?W`y+(&_!K9}`PB|X-6`wY%&u<&&=l2;8rkv7(=1plrd<&15Y&+pE!zN_L$2LY*CIcQbd*Y|<({OgHgzQ(oWF7JBx=g<9UVISXi z{?V%(1{TGCwc|E3{mZgv)%Te9hAB7wcn_ns?hijAE!g^42kv3GXg~6j-S5KwbqQ}I z^=|9-TbYGjw_LI8eaV9s$^ZU!E4j2jee)f8f4ql}<8Ie+yqPvX!!{_-TVuze4dH?z@NMD+YV2t9Lw+5 z+m2>0X&juheg86N8ng1ERvxc6rbv~S!7_yjc~L8PcEzGq!G&rqf1zNM?sT-v1GSXM z)clI$?aDT9MsKob4!J+hpZ7-t);vVl^U=yUDewD=_F$ntuNzC&`qyC;cUoa|x-6>s zrHz-5I#cWT?0a~05?{_pA94JTzobfA@1mAf?4yrC|J)oG0I1LaQ4l3Pj{ox)##0MQ zedcD10$S3#460*-)o7-J6bmOn7Okw+6CjE{9YD|yYvfsK`INHUi4{Pi)=q=Tajt*g z>t;oAzFT#l=Kgxz)=)^JK-hjP9@eE?RA;FJu-7DFn-~oxE=3W$KvZPHSpVQdYOs5u z!OVGDpzdbn;HT=KWBV_p0j0i@AElS$T2;=03Gy|6|MpXJd)PHrVm%+rn!2|2qQ&da zM`do6$JGK7>v(Upwl@CW4wtMo`YDjpO3V`XdQH+*wJpCWY`j}t1vX5KuW{awD;AUB zoBwgAMEiZ(>)WCJ_ti2s8d=*?MdLN^t;I`)_N?Har|5N(-)?KYWmoZ&+F~%f7abz+ zcyXgE7?10r|5M*CS8Xw!Iv|SfFSIEU0QGF6MJdLqTqUM zZJ%{tK+JkJDgD~A50)m!*Cm;M-b+V6?r-$zw0#gRpM`0|kB&#hpl_wW*6)flBTqT# z!f!o&bFcP)<8S`#TkE>Nv^Igp>5_Bf!duBj^p?<#=lQobuqwxB+I-ldquz$E`~CAR zQk{F1_J!O2(^g7}CZX2}OERzN#{4gWvH@)E31lLZc}?*Q?q$0sQ@U(hzPPBA?ta_; z=xbvhApq~y4S+ioahK14KNs!80WftKEp`PE4&<1C8KyM~y?|DJ`Zo`qgmf*j1~3Xx z7i{eEHWrF`*{mduk|DgXx-5V)3pubf1<710U*w%4cf^&GcHY{^ner{Qyit$5AN?7( z0K975EZc3Y`kAw6qWiKz0 z@Av~Vo{;6fZ5R@0$B$2~nko6S+_!;r?-Yd9S@76-oi_9P+lHO{=ex*?{KC43Kieyg=MA={!>`9CHtv!^w_x&;Z@Pch%Fgv?t6x>J z@B2G>$?bt_8d0!%h-u=f_SCSJZ zqE`Gz{|$syn5v)DYpCiTBuGnQ}RWn=#&{53>0d7UmQEjx0TX2V;T~iv`L@( zK0*A?Q6QqATKvCTp?IF+5DtHW`I5Z$hrgB57m|w*+BW4<2GXM&0G4G|_ZpwV19!Rr zP|n~a89yZ94pco8;Jf}6)CL9!(y!wwoNlz;?Wb`d-(PA$iFUkY<8i&H6j!18eOaZI z5m6*|z~?C-?wMBaa+dG$^>kiS?8;mein$zI{3T~C7k|{~Dn_^RW2wDvd>wqf+pT`l zgOfZS`^$b#&DrzYhGIXM%(!4-)tlBhc3E3|(!C~^VZBtpilx*SKZ`SXEJB65B*UODg4J!=4XtU)$&8M{@Ju}?LO=xjwmi-6GN>+b|ndv=riehe$pwFKo zk!jE&cv7Khr(a^#*Py8w(O=CwMFF*XS^CKhAq(D1E&7vg4df<=#OtZmqtF>`Zv>r* zo@?;UpNF1Q+W@XVwb(f6d%SQPpNnI%cw77t@=hfmgTZ(Hdh2LdkKK|{Ka^V*uaA74 zP@N>Pb|oomVNQiMU@Nz}3U~O$w>aC*dD6X3PA1EFe}P47yB+=9+mDoETgmM|_Ra1$ zzvTGAf&SJkVdn9Wm#kwecID21R9YUSdd{8r*`zdA zWY&IOS1tT_{77XH{jGj2C5hF2_TSgySasPdGik{1oloY%FIZlDF=xd}F3o#pR{s|;C9u%(uaj`x+ZN5Gdu~G_GYFRX|MJ^%J5L zXWU|u>;lViIq~k@&6vagxiumH6nzH;Km?*B0PbQ_W~r0mNkAr;ZGsb-q=f^_k=sfT zqYQXpFf4s?+Xi6gTIwhflF>`8=0u|Cpa@b2JaOF5!K^61|ExO( zcB_|{xavKCiEk)PnqS4~ap9O95+}_oo9JWyNwv;7+r2LjYTxyh8D+h1n;-+~f6X;zz{Cno`zij5AtMs_YRmGdo+P_1af!@8#W9>1BHSc9LjVm|Kukxw4HX zN#kwt&$8K)!03(qDhP{C=JnNwr~VwkfU zM*a&JG&3B?q>O-QUqG0*iR|U^gEK^X76Zzizyb+$O3CjMpcAa}$U{7Y3@?oW_Uz2tm9+MiRYw$jXyS%o7 zxMI7eL}a@xsHOQ)X`IB7k|6!PC5C)GB)P_6O>Im+Xg?dRFFpQ`?T5aw$luwWbi;Q2 z$Oli*7w3zn{;kkSo65DzSbj9gv*?$OERtDPQAA|YzA3Gkefpe37q$0@%0fI|a@f2+ zis`15Ha*Z_pL85~UE0R}8cZSHF@HN3S=x_1-}QNx`xaE(o@}%9YCLGYV@ts(o^QvT zwVb{iCM$JJ4!`y?-j`#i`LwpLp2Q<9m?(gMx(6V3z>)xvdi;_Ik*V6PHkH?XUYoRc#l#}5w)#Jq{W%GHqpw%q8fhygMPw!2cYZSwS%N_D)ltuEb=3WQm#8+n>F&W#>*c_k zeVrfsdprMJ$K`fw`()K451)O${eAp)j#^sxuWcK)+R>l!8~?aokAeLWHeWLtR02e@ z<$aqB@$00W7>C>F!=;zygu3*@7H~7SDLrV%4{hH`w&y2*r%}rF+Lie^2KD=VTi~1z zIq8BgT&WJGAo6>A_PvB-SWCm!`x9;j#3ddA!|9A(!C z>SPN?LWu%81qBE=zdb$EayA-TCZXYxE|_t-SEl>f2$*#-IOH zHtpo+hhWfd_HMCz`of-q)_7gMH=^8~tLUpaZ?CScylWvN8r^+Yj}DJPsro5Fl0KAT z4rxsMW6_Q`NiMgbN12lI_I>}nqLd#Y9V@7G&_=H?-yWAcwC};{KU}nN{1E43>rb#G zOD}wet4)@LLn!I@pO@S|_wBvO(R#9Ime)#~Wjgu3^_BaU!;E&W*VLZ83+vX*7BYr2 zo3me2nXf`1#f+6IV`(NFy|nWGdi@M4AJQMwSJB~r{Vl%kRomxY{{F6Nd+}F0%x{Gy z_B*Lu4rF<(KYC@=lQ#yxs&dJ{@0w$fpMJCu$!4sFJsXC@`Bk~d__)3Qyd5LflA5!n z)ujDL&&su|L;LwR`9CR4FD8^ju9#2eZ2t5w;m*8K4=+qfBsz1K*Y+vdn~K+?ol*C% z^A=U>y}Xv*xlS8%m*HlBL^;~3D_s8h43HpjVNE*Y(Oxjqjb}8DpgHkZ%@o#|3jz@3 z0ys83vEM}@G67^Pd|Xzio4|es0# z`DXyvw#~KEFaVT&l~z=Q%@-8`#Il)Z-Npn-&goE@EE;U@pkK6xM?MG9?AYZ(&jaAe zIb3Ob{#@mjBi_lazP21?_ddAQ?xoSGX_R@9PRI(p?@cxRel`q5#}pRY%wQrHkG-_a zVRDB6PrcddKaYLA2&ERub#f-6)Ei@dTbj{<;88yu{Fu7D8Hy23v+?PN9Phbpb4at(%5en>?nII-){b@wY`qp z^W)a<&A(Pz5B959|16Dlqec5E?d^BiQMr~^ZmG>>{V26$esVFAWbZ_rfBjaa(p~1N z>$L9MF+vwdt(D%QL)xsTRcc3z(+i(^+Q02%QWpPXlX3x=R2wf}DCB+3@{mKm#>NP1 z_4NhEzR@Z!>#J1)C|1g*SE3xwg%Tt_7Prfm4rkr7%4?oUxt`#uU|j6is_k=f{L3L2 zMNY5>7yxwZp5w)Al<1w(JrzV!jX(fvYQ0d)d9|YxMJ8v7%=>sF$1dg>MjXSJ9@B*I znpe4brx`k09i^`_uwK79u+rvA)**1BZ~){djAoEzuw?K=C0~>a3C1v#TYobPhah}8 zk;njTv*O7zQ}6d~r*FzzpWd)CX5Y3Z)VKDd-Twm_s5^KNOL=LfAs$ZcX}`7qqN?r8 z`!jWYIvw}Q4Ys$rEz@&R=v|`*-xk-e$PpPA{X6wkaYGV)_P57GAmCHuYG;!IK zX1V{>&viHqDzu%nF7ndLTomwr5(D9S+!^_^Eha`H>jU3C1r~uq*LkZg!F>};~ z300+^`uNc2`SNTqqCZOMswZ+3iD+$KehYVIS7oAF=+E`q8nSQ{Lt};$(6PhMEvt1m;#h8k=lF_0Q9c15~U6501>oY849Ug7Jw|; z_4r)xPrH`^fC^j#=?kE;g^iU-u4j<2uqfsNtx?JaV61x^nSY}fKw8G2{r)`XsxpxY z5WDI~$^=&stS!#zMOQ1vtT~sHGBf)$-Z+ArRKq=KZ;M1trEiCD_SVMITH+;z8MIoy z=-8(zus(s=)L-@X zj#_y5Y)tIit-tAz%X@tqIK5>3AAb&?O^KE2;g7q=U()88`{x7%F{b^hs*W z<6JlYL6K6)x)dELI=}9cX0)z4af5+1EecSqcfB*gS9TJZlch?y=d%x>#Q_qnz zo%;JYYW#VA9Q-wSQczeVT{Bd$m3-L};@d3#Ga}ACC1zJ!+x_YnITzDvdx%ai^VH@z ze)KvStoU;~>PN}QpT!x{1Ev<0#_9R3$KyH zw0dSlQh=Q9>Jtz8oO)@&%8cigmEt*5Zt*L{&N%aSWqz^zCjchaYYgaKPpMx<9U!1d zu117)u2~diCXvjG$zH){YhT1p1eMqAa46oLDlYtLgTXn!)i`eJVe`ud?Qlu#0!Qw7f3Xa+P|GfX-W!nb&H` zGR^*Et^TuBkkH<~qHXW@#RSSZQE$iR{K9wp`I2NcsSjCm+IL#-`h7fu+gBXhA8-UF zZSsDrtXADp3iT9;kMw#<5D6eTN?-xZBt{zK|Fi`nBoaQ0=H>%J^|pSRa751pAQGdC zaFCA?w(qaB8NJ{We`0dsIjsOtQO`k;TFQWW15Lj(x$N7D${(j4G1!Sv}*w+%eXtUD1ZhEcC zsh{>Dx>CSw_KOqz5=Gh?2hxC%;dAY-n@Hh#^-X!qljv>I<|&OL)-}53%HxjUKaV}} zx+HTmGc%9MzWv)@UsU|^wqDm^&r0#WGVV1#nc7tsCFrFaFR#bSac1&n&JEZq2alIv zwwQjUds7ry`}@TGsqZKEW`zqSUX0MyRm$CA@&~mZH zY960$$D*2A&$H0BFyG~l=YX)UmcP9(Z4#@mu6wmJW{qN6EU$KNGFG5kcx&7){{GzA zB^)2y^LWqWSjJ_GvE?Q`pAYBumG!!q$4aC~^5N$4P-NGp#^;{L{T%6&XsHy2-Q1S& zE*+#Y?Vsxb5&$ey^5SW%mFEQ9ML9c&`pBdpnR#A07{bw4E)sz|_QzVpVa)B9*@>SV z$gN$GOG_jNR@y~K-L5H>SoIAc!%no$rB%E5mU9`vLTsxqX>rL%U!FWtPA9;enKU3P z>s>C>ed&rKYfLUV-=1q4yU1KXtuK+qo3!)X5o~DXO7%4>ewV*mxnvTY4u1QWe&cr_ z#by6o;Nuok&bae+!KEbAJXIq+X~R{vR{yIsc<+tJ)sD#rpL$jY#GQc+5!gQ^;hwa{ zaePX94a+z?_yv-0>5*lfoY^N8TpR;eSyT7@#dFbd%cn&T4uF!R*rm*5Z|$M=h%cI( z{v{ux%{mE|?sf$;s*S^B!(T7sHgRw*=U(mgAzvp!!eI67t(|(?!nbpOFO#3NkFwFC zoP9RBFI$cLq~B_-z38Z`gs{r_FHRoD3jYF+P(n$_~+!ss(qCA;{~c6ANr z&o?_1RQhPmAQB>SBU{_DjO*3GYrESgH(F);oRGpKWlkpiKL}#n(K{$bV$nZX(}~t0 zI)XA2M5I`VzHR0Jrfj|v%qc)3tkqv;Du!BzmM?Io&+^;Xih%bn*6Vn`Ydr%1;`Pq& z$I#Qt3$FxfIkT4M=egGXVbO1g^uzXHrWuW&Nms0PwZ( zy6yPN9IR5qrH(VVb&aja_l9hL<*@tzz^m;2N8vyzCjgS|RxZ_)w@o0>TUcK8LLlRI%KXbU-4S_6r+I9xoe0-ZyzEPxVY% zd27etCye&DQP}Msl$ZWME$~a~*K}Qazwv)U1$fibo5#MFLa(31cac9qTiH##ef#r_ z;?L!c>T|2HYOF1^7zi>vd=N48kSDJ&i>330{QmfYNTsLB`{JhR>)MVN+??)Yxk3c9 zGE&Q*?c|2?1R|_eN(XtPZ~k%sA~SK(J>F8O)h__Lc|3u#bwrl?eBQKqQesaFq+4oO zNpOCq;ev*^53Y30Ss!HvG+mU*;I5=M?U&xuq2)!<7jg~6Ik=YGsp!?(k8@~;kq_DMAtwc1bTk%G?s5R+5={ zX3wpymugR`iyk?zsO7#a%ZhXS?c4e}?Ets%nAe*t8A794u-T|>u+Bw6yRGK)vBk}1 z*{-o#v$42+_{>-x4Cm$NiNj!Xr!WLg-31sdahgkC{o9=t-ZPZRepQR zZDkG9anz6e?CXAObna!|3OAR1i~U%Mvu~xbkG|}>k?-6`JA<6^`l0jV#{&6cirX=G zYx+ZDr$1)X`~5%aCW41adASj*#1*4%zJ%VRvBcB23U%b2Rd%Dm8hzGnKf&F(-swIT zmABLgvZPQLZuH5UdF7R3mezb07H$=aSg;8qi8XK&7AO6eFeoC3g2~|lfheJH$6SD= zE^T?+{x9CJP+P=QT_9B=2hObTy?!3s+ZOJ+bfzxBn#^X$vCxEZ6BMZt+tSOJ7l0!io@?YI_< z=?exTNU!aGUMBnvy{)YZ~K4Nd+T0BGTtr2O2l{l`>WOC z|JolM>!~urHe$c%qcDn`Cq$Nnu=Xrv*=YBN$N9N8bfGj-Ycc@Y<*koj5H^R#LrIGm zuMRr4s}k}#lD2ZS@0rdkS4!QVW;JV1-FYc+;``q(YOejU{jqA9X@bf{k+rN^FQs@c zv-VnB{o-{=;EVzp!_~ejRcOiZK;udE=2U~XJjK$7Y7&jx#oN|1vy{_h```to-u-?& zPwkgse{5I!{61dUo=+{U5xk#(VDR2rytQ;>X^G8W+c88EUg>M4)Rs;$z!ImBZZQ_v z9Z0MUgINA6Um&HG3DxTt3JKQyR{k&iV+LL0Gy6 z^%DS#Ee5n2Ij0693Gf$#f-0ZW=~n*$kQcx-3nz2+Q74GO<`g#EAzn9-tWv#Rt~V`s zt2#^BMw4YVNx1mejfhLe@&#H~ytv7FgGk$6esayJ1#_t_>>poOFk5i?6>Omzyk&<7 ze{e+#C)qr277(gC+>;M?UGeb)UD12fWhX!}}eU12>$ z(mKyF>ptm5@isb}kx{~N6W4{NDfQL&)&q-jlysG?_TJbQa@qHfA5&(sjGeAy_nZIO z=)w8^aiG3l8Dbz?CuloDxvh(wgHoEB3A`P$+e8v+zWVr z4^1x}C`W$q_ zEQAk8IIk%2JebZ}{&CrX_Zf!TS#h>Y07w(FAr{(Qj{G}k@FQYL@vCS#o{++& zY%k}`9MHR4ak@t*H#ZEF>N&2Gl8mGm8ohri6;jtK5oVjP58bl7xr{d{&OMV3{j=a^ z?fCNF&ab~cdbJ_i_hYFMpMC3Um-r@j>{n!e}5JxGe1Hvbe(&j}fgWy3(fDzT(@^ffC#Vs8oGdMsT zqAR{@8)DFS1LMEdX!Z_@S#&x8+GJS#yeV#1RM_)grm$*I0;IW$o)IDHgGdS`5NiQ| zeN|%iL;#WIwb6;Y-KhApJnA*({MGoaRSe^q`}W6WH5B70@$R~2JqFsi{8-B((sq5b z0qoI+I0t}s%o&bSvzPj^K@WOQHN@?B6YF-{^;%>#wAt#LyvoLUv-*9r_HW&MimQJe zEq^u{t^G;&yKiHgI@h*kd>!~Cme7G1a!`&img$($@FM5B#hGNOm1>+Ac~B(wbKQ6P zfksz(yTCk7J>oTW@wgvm!*+33_*FX9bt|(!+8<4>MOU7hS?v?3ADYYh%?HiCYgT>i zUgETDH3KrG@UqNRyemi9{rI@lBYo8th@unS7vD-}8{76XeeCo$a$ee!q;sX~+uwem z_3Qa)@3N3*^Y4##1IU zLxu%d1Hi9*ynj*v9>2ozj`q_X0J8xEcS0FH#N2s|MF++OSoo9I^fR#c(O2#OXtm|uS^$SvrH>U|um_~4Z z(yrGL?Q}k-k4Y`oTogp8dgcPa8B-#w8>lr>Pj?~DsQ?6{Pf89@oxHUR`t7B}S8W3s zF`+F<#;J4d@>eo}HQ_FJo%hG%88g?~k~0KG=TLTECKPXB@;&S^z;T`*HyZ0LLL0w{ z%8|CMEGyp?Gm>k`cCQ>deJzazhu9^Q$+vn9qHD=>JNg_2WIZ`FOwLysX-efO1%z}6 zd8h`AqH9woAF*yjx3}g?ktok8ZI!euG}KV9Zf&Nq%1IjQG;rB&OOA|N3e&u{{%l)2 z8y>6o$%TxUi&^hQ@R6?$%c8%%#>s8H$W3wJg`lceaH$R=2nNU6EC1ypq&(Sji>(u_ z=?Q>~iiy`+)($Q)@|Zn&sn zUS%5#7X0qm4~iA@4-U16(p~R$Y|BHdgYgAbV?~qUW81rOqwduBB217pO!!(s1igrz zn!nz^A01a&F6Odq=c_co|rH9Fa+O6!5Ek^d6S>IV=PF|;3U21j@W&LR9a`pDwQ(# zYhZCbxyT>2p`-nJFkvwfEHjYGz7_dm%ETMT|`{b_9@tPzyd zsAnQ3BdNe_SCNZK71WXeN2PJBS0ut72);d)+=)FX92v|m|AGsYOgwV{faqdDN?rSz022IuwQ{mC z2Qtjy!6cj!%-Gvkr7k+SQRb8~cb>})NZ#({&;Dpp0g?spd=(l1D90#ktb-Z1&BvSA z_xtlg*hXH5wAa4M{_|QePKG8NRVYnn_Kgj^^3r9#@@a-*-EHE`V-Y4e6d?DWBxmDvPD? zD~Vmy;-wEqA+oiRm$F6Y_mF6npgSUs9mz5>@3UIt<& zf|XJkuPY>eas=k0(q0T^Ncoa_Hnl}X>KSFeTjpUDYT;=YBJkdCZ)aYwi}vH$HF*q7 ztr^QxrIbP0@Cm5U%HAs6yw#zNedSW6SJe&#Q7um-C1N2`V^U$8$o2&-5L$# z8>fHp7HY!F$EHuN<>jd44O9GTl2S1|CX!+ey=lC!`z@oxxBJ`XQTp3fH1bE4YEQc0 zgDxS2sz)acS}I~%846&(nGT`*#~Qu2V!V68xe@Iri{iTpx}^!uib1V9NnOpERe>&* z=p?1m@Qykafd>V0ok6<>UbfxWCwRv@v=FZy?^8U_E6Qzp#-ozk@$Q&C^$lcK8MH@z z&FY{U-c1z@jLTMPnA&u$eNN(rR?=?AAE=oy&Y2wU3uW*HO8NKmm92IMkOo=*d=pF* z$qddUrTHtZXx%D_0btTSa$5i>L8Nu9V7Hkd_7R*`g**l$RHhBKCOv_)vm}FKaYtym z<^VFI)awg~UvwRc6%1s}ANSjzfGq@wV?piLXkuG?Yg|CCAoj(O4MdYL3Uu>jBvg2L zN~q-;{(|1i3kfY5^iDvb_j!U)q@Mu6k2(bdLwCQm_o8Ab?M#lTt+=7-=cr{+_$FB< z9ITmYx%8HMS!Kp(i!UmJ)gTgsf|>}hkSh*iJN}Kt?HDtKn2NtPPJ|KhHtR=rp2PJ` zIq^%Ba*TdO>9^nh?yTst?AR!aE)u%67&Yi4Ujpb-c4S{<#&Z#D@v#C@+vTR+D{&1@ zF049{S2!P;vEH)lB6O|hPX5xe1<&iLS9!>5F#HwT$X30}N~)Qecb8!)ce8q5L$WhX z6@DghbZNR&OM~s1MYgEhi+4TKa}IKnfwC6{i1}DYeQ}WJDgy{)g1j{e72W=h8TAB^ z>lEi>=zXSS%64V{HyjD;XINJ)DZBiZK_@C&XKnIg*_ zMCl{SXer2t<@w!J&o16Ff z9cPuQ@7Rl$V}5>Y@5eSykp(|C|GI6=W7HE{UlF2fX`b9d>WDH?epv@DE7jw4pv9Sl z1g)%j%puF?zqc3Dxbhc2V5=IZwvB3iBSOh%abH~ZYl&LYqI9L;%}=hy-ZMqAD^I6P z;^gR=oJ5_tE+FM5KR`48g*|!%kjP9zgcioNwRbbeqyC}c%iR~(D*)AQ!vQ4ya*;0e z(k^>#{Rl6W+!5j5K($GDzm1k7xGn@<>L=SZGViNNd^f4U_Oh^4y|?_H3&YLeG!4A@Z6Q_l6xP|klUWmp3og5 zN^1Hj!|I+{LEGhv!&_l-Uaxid*PsQ2p(yqRpKs}veCk!*FueRq$A)z|f{M!n7|gW4-{H6Bo$ zo`AhVxa^;k)F*IpBsa`bPG4;oe1_Vke_N-QqSsOWEFxvN$L`zq`iiZU9Ion93A6aM z71V9MYpFGKPA+p+UXDVOeqCVL1Z!N=d&6>3Pk}|wf4&C*fF!j6N~e8)yPCiqp)CV| zll=N*ke2n29!X`aD%zm@UaA@wI7jBnygx2c1JGxK3<9K{30xt7kRhUuHycaKYr807 zMXl$oRQJ(E29Q%oYfezQ!vG+egB3F|9LMc+cFZfPUfRN``(SC-UrjRy-;q6Hvm}sTWpi3=1P0*yRW}Jemsw0Nw_X7 zuIrHHNESs?ngP_Gi`q(0CDk7V3;T_uUP)^PxUjoKpXo)G*BwlRw4$_4ys`m!{VZ)S zbJzx6TxmiI|C~^X_$aGIq9rzH0RRt<55izmA+N+3Ilc!JoM0gy6e z&i(tVlQSnG$TP!VQl=S+?Z)DXZqvq*LG@_kC?-`JKnQ>;UxsyjE`v8zI1KgUK zLz=#k+xCf5+n1m79|vC%UZ)%ckksl{ns=);#SIwv!hs%m2RCS zR|?Xfrv)JN&T<=XM^UQJ@a?fJTEWCrTSqq9_bI2{-ld#*;TF%bo>IAB#Ux_hqHl+{ zH;^f`R3BHGWK6p27z;wG$5`o(RcUSQl%rnmuDJlo839--*b!&hI%R^D7-z0ZMd);D zWv;<**>+ev?bc?QrR}#^ud{Bqxk~BD#kbOA5MK-S4*h!Ai*buc$%VP3>$W=QV#B0D zGi%e8%f(dQUpB&^B9h#Z}6cxbhJfcGS%v`qB~$ zo6=3dJmxQ2C2uvNUc!^w{Q9<6K8AQKE=2We+hvFPp6mcJ5tcCGU$6h=319?bNV(f< z0783C#LrTCz(E2c0!lr>vRw-jW>EGxfr8GY1~@@<5cSA3O|RvhF{$|i|7!X(-K9j$ zo{-|55@4;+x<O;WB9(I`>h|S?73mX+#grj52>uJ~ z1Q0W-Sawu(Bv>81`PUd+a{yy(bxGi(@6D*2Y<0Lymr0Ve7D=oq#pW-W4@g|gNLY4D ziR?3CZHjGJV!Z_01$dWx>$aH13T4#Bw4SKN)Ge@cw(|b7@AqqE8~!>OS9qk<_M;qg zbk#GgmoNs?HR|9xXO7Bby=9Hm$`CgY(IS$)Jg*{SutcKBydt?sR#u!Mv(reZScJIU z^v$)>0t+s^bvN4cVxGAu+a1e=v{B=0M+P&Gxy!Zc+mECFII8a6O~9UK%aYR9>sp zI(1ilh6Y$xLeNU%ze>_v`Pkpi_n_F`nQ7t++x-e7<*Tg}cX12`n!Ga>{%Jk{aReMl z=Zy7o4)-Pw0Kbxb;TI7ll$SxFjoA>Ocuo3sXD~|u?x3Q!Sb;FoP2Q7an&}qPjS@%w ziBi8N1ITM26L_!NW?Fs#4AZt45e2bWa)k|mQlxN*7kNg=N|=_BA}ec}8NACa&mdHo zxF`NQhn~~Th?Zps(4hjZxM1LrZVa+dmbcSsYwlWNSQ8-5N5BLFaw zBviW6s)Z=Pd%e(3e+MMrb zyJoyrVUt4Z0;}lhF>g0LK?wNeS!zbswN41fVoP>Nu3WUGiL-Vn3{*o1)eG5AL)oAf zlx}Ww*C-#UGg*mFzXTwhkfKBKf7P2WS;WV9<0G$RSwHqTbCHS)w4L4GmUP3abzN2q zxQZ}5Ef&(3nG~_qB)EvNdTTKzKuhYSG8_p?yq_Ud!9;A73x@vhVG9NwMf%d`Xcj+vf1pg;GXqYmoZMoKuM+wMO6Mod;eH zq~V~8g({+0(G$dpUtSY~)I$9tWDoULlOB6~u0=>N*TY4z|`xI3VCoDP}6 z!Xr2*b4K0Az_eFFn+&SVRHh}duYuYK@FG2uXISi(ab4H3orBrX7XkQ+=#4#wV0wzT62?B4DGaVVof4&Ga zP_nuMj$aSvPSuUqf4_%8B9^RS>RFaTtK)7LF$>aQwF1BFMT?K_Oi*#!+D{OJFk;d7 zcux=}TD#uz|Nn3wc)1+EB3a!Lmk!-@0o(o>Z5!#AQ?gkl6bUd=5Gz3<$ysBLQgl0q z&PBoi6Lu?=2ROOP@xBsBhpV4GcRl7x01@1EcLtCaf?SJ`xmPQv-;v<}){BxVx%n(w6>CD885tNOdNf)`=qOYN^Lgi`15Zy#4G`c>l6`IRbJt_(!1VO;f9 z83@lH?ED6E+5gOFyFcGB+2|Ayc!MouW`aQb=%;Ci34fI7ojTRsmzFn!>l=?_jCxNm z!~CdM5FaGY@-e$(_9J+7$wgswjjGB%Clw>lDZn|T7Ieo75PtokIS2^+ivqwe5L5yR z&x`VV$JuzSdINDKRwuNRa#P3#pY_{BesOxGMB-7VVkO95ogj&;#hS1$F^)^=N>#sLUL z#INk(6y1GrvN)((2GZxyDLl8|-#SGOcll`n3C)dm9{+#01CNtJclg#-&>1(>aF^mOoc&^&Z~ z5$iGlADxZNo$D~ zYpHS|W$)Mg+Js;ApjhlViVog$5m8^YgwH;iy|CIv(!N#VJWbs2BlevEal8nuA~e{n2!Zv zx9dd|NW@wwhrL1UTm5u^3NQ0tt7f5$01V1;b?}@>KU&XJiJX3mPo|+_kr`C7=SZaU zAc>ijZUAXqv^oc&uzS`H03;i|RLdAQ-pN`wg7>SGbKlMv9W{UH$})-uGMOTC&f9G& zgpCsf=925IsbQE-dJSi=0P2SNAk2a30Pzf+79`MiHnm%yALtF2CWT4yBrVzS&Dlc$=_U*I5_wt7FFFV1Waeu5_amG8h3_>@I zAD8eL!R>ZsD^!9P*K*nz27?yMcdH}ZLu<()=B0Eqti z41izgJTYSeS@rTr<47$X(}}R{FY2r(O9q$eAoeTGScu#u3!RkAmPjl|5L9Qv2iC5i z>A;*ABar}+>;1((i=zFk+ou`yDCZlkylSPx&IK~spc6?905DPkBuok?HJusA#NZ=O zVcW^!&gRnS0svo=O)82VYAxp=65~+(-u|OW+G4pZkigM?Iu=vFjYI34;G^PaPGi~3 zf*9#8wY*T$mfY%Vjwr@7M2H;Dvc-Y}WrGcaRk@~t%S<1NWpE}brOrw}K$DQ)9?$XF zNc}C%7j$1vbq6r&KKf(V^`&fk;(n#ANnG^OVq?}4WxWYZqDfck1aF&8I8=m68q*@C zMuUF&447JU@=ke_vOiL9wq~+AGLa<~&E*4}qm>uJQnpPseKQ-?uYp=Q7uVFoI_gwE z8EZGpEyx+suTuSKzi)sL1onyqpBHBw{wp>`(_<=$7lzY!{ zQesi-PQ;~N?M82-!Znxsj0CXN&MN2n%k7HHs>`Ep>4=b=7m%t`BO?=LQm5?kZbG!&GgS#yc)PmJ z=`#4Yn`s@Ckz8E*+{7}Fg(}%#x+nt_=GmqBGIykN5Lnm3f_&9uF216$F2Liq{bwgt z&sZ33_w7a`@8z-PvGnL?!C0-S#2ObbP3+t2jk`{HyxFiRd07Uc#%Likvj}_m1ao&5 z`v>>+6lq!B=|H_Zr%^4)267IOSiv9X+9uJRWWc_Tc zJb?W;GYQMAf%fYwc8W3g`UXT6f>or7Fh;VK7WJ;9uYb_`gENW1P03%-LM~+iV9xv( z1pp2Mz^n-5_|=qECo}0Fp9&g%8HPzyHF1w6heaGK7{inUsli z6!)H?j4V~Q%d}QaJ8GxQWLobPQ8qfkC70fw8Kmz8rU_eUymHBLE_BLH!gb&NbiiJ7 zthsSd#~h7Ul4qz?f7aDgTaKBONkG_aw|Bs^PWnX+%E5aAoG$V;j{3Y6N3uy-fV3i; zggCansmE2z^HwY+E@~H?Kh%vMb{!mZwa7)~_Bu6x-DZ+XiL~a%>J3bnOqG&3Y}>c2 zWP$w!&?+scH#*a}?Uk=-5nEd?r00|ZqnNrqmO-*y(RnLGf%Don<@8?qT2W;by+lA% z&{^>=`#a6WLN+lVbByX^HsOS!s!^J1!~0kKMTwR9>x%L(8Q3^2NI7%>^e^0@o!PiPJ} zf%bJZ02-=U+~=P4{_)4>uQ_)5Q8+F+=X*2ePR;QJ#e8X9+J>K?P#TZ>rcwJm{Oe#c z)4j1Xjsm*lC}M`mKO%peYPMo|=e7pr3m&R-FaH}}F+TU?j-{AC5o4eJFwgn7tzTno zeXRF7o_$%o^H;_3_b=1@BmcQU%)ei!ORx4(SK}~mw{a}gv2C8qu3zsZNTAHr+uYZz zO*eOQ;yPX9$3rLa=YV49Z9F-i&uzB%^gOHQAz~-$<=3za&*N9FJs+`%m@hdVbsjai zef;sIg1bB}*ktbhs&x$R;biw|PyMSK*kSc7smwct&e=INGE`8{e|$Bd_Z#Pj!$ujo zxVP`0Hn#W-pX*EIUA6bXc3&l+H|qvW9v@zBPRnY**z}oOfEvAQ1MIaM9Y>O|{tFby z2ro1YL^rDe#6%w@vfF_wTDzy@u}<{H*z|F%LgRV-vhjl2{gD^>0v@Nl?C5Kb3qZ>_ ztZudC@%ZZPV-;Y0JYFdQTfi}Xy^rZWwoDZr`)#Vm&BLDDo|n6~2#`uE(@xO+Ojs9| zU+LZ?Km*!ryIZ^(pRYEDHXQW@_s1S@v$v_ns}A$x2xgIR-l=FOtgf|BE4Q`hjQ+fU zz8a7XfW7l<556&@JI%XPete07nPnmtKKe7$M>Jf|!!C@+**V5pD-K3^op$^(tCfwk z58GvroyfuGem(Y^keO;nZ1j%fOvJv-CTgYRe$4TUt1dwC)VaO(^T0OvW2M^*c{$E1 zK4$CF8Hn|I@#j3A0f*(Pv5r5(6Mrv^@q!Wd2Ui>}rP0j#Bp$j(eObJt+|0Vn>nonb zm}qYm>KcX4zdgR*wS?OwaE&>in+La!iwC>trfY-j%WVVXoIl5?2ap|z1svngvgap0 zET6}#f5fjH1h3Z|s~cA3R%F8l*J*z2`gx2s$2IoCqkE+pHp?Eib_38VQ*8YA5{QnZ ztI_WTjCc#6KjZ89j<&YAxiw~w+KH-9_dUk80He&Sv)KT$kkTt9*tY^-86Pj0{?ze2 z;XaOk0`bRs*q`Pl7qzCO0$^?n?Bz~WtH*9(mc zKYoE!Cr~~F*tzHS-6?>!zur$jL7ZxVwlv$+zPZ5vbr44B zuxld|9I;|SYu^}Vq1#~_32#^I1^7q@s3nZ_IJc?*G|+KeZ8lmPG=ki9N6^%3*+;wp z+dq%3Alk-1`k!qDIO!W(#Cc9s<6O@{g^C7Q`^dwE0#W7W(|o_~NyB097{}E+RL@}4 zY81tX;fsz^>oKpg%yU2D*XDzL0Ty>u1%U28!*lyJ+cVA9dxqu95v;`UGV8Kb_!2lQ zRe8h4esn$l+zkiIj;wb{K<)e30rSfad%cNKg``iyK6U2Dj{0X;Hsmo*tT5AqI}{FHwX7|!mrZl$>+LBu8vpD0 zXV$KH;PnDn1#>C5ct1smSkN{&qoWGd&?NP7iGiz+30;g$rj@T9duYm1%^wn*bp>N`Fl>j@ido#8k zUvqa`R0%&u^6d-2$MLU0dTdX8qgj3KUJd%g^7uk&@d9wfWxe}N8y^d?9CC9LxhkfW zKkD2VWB)OWXiZK3xs3pJ-kb8{vHv$PfAmirQNDqnKc9cw|F(usj2_RIHhZCfA6Hj$ zV4W2`&2}Ww$gADQ73F5t6<84;QLbHW1Gx4b*@xQOAh6ik?Qdr20(x0r>;cO!BA$Bf z$3OZKbHqQ6-4+zKIc)MGY}5ptA9Y;fSm<&EXqGU&-)s#Z!`XWT%`+@eVX^y$;*Eo{yEUyXgPkKKmM`Sucr@rsW6BmV`qYc z{5W^mWg{59Q5EAQv)dbF44eIhWssU?9sE+E!STcQ$A`bvW|z7zI4&M9)HRRTWLj_Z z)Ow9ZiTv?5)hh+}p0lo)zX)}cQf;^?hrLOtN597Im=gR1t92Y_cmnkL3m8=BRX$b& znK-PCaI1b~1L*SaZ)+5z4u9J&>jq$#Dl;B9+J3SMvv6 z7!Pvwo7fo>$c8z6MYSQ{!g0ZUgNeS8+xPYjFz2w#hoLV5glfclaX64oV;%7e0P2k4 z57X%hy@;}M&^jerH|ZaJ(E^?5C9_gBWrZTzeGPk;Ke-GV{!UAbW8>)Zr|tb1SDnuv zU+H9A-OsoN0czUrnzW+7fxh6Wv_su{d*q??dc!d;t$c5@&lF&D6vukacmZRsMYoBw zf6V`#?qRs9;>pt^>0U#71ZX^(ot{F(o}CaLRl zTAiqyNRI3I_v;hoMzvaSd&#|Q9*!^%URNBp3K)O2py8qzoP;LdUeuw`mm~q-0u)lyoNf8am+AME5 zjcd02=uZH>?4Cw(HEhG@zA$YaTD1kKM!a2FK-L1m7IV(i60~xwOOe&a&zFlB^E#*H z7d!n5;E12J-t))=svmjAK+76bzhc%J*02c~dlSzuu&?;IUZK$P?OqM!D+_r9*cGKL zh#lh%_cb2Zwhw&Tw!M#W;q3P@w)1v-qZEG8)$9G(0Ooj`!`_EKRt|?pW5EVT>rUUY z%Zyl@zU8(nYxq$MS|9}byRV6oH6q*1Ru4`o>GQBD>)MaG0sj%77_9^!tLl8=G3%H7 zLH0*_!gyX0IL}#!9q+bBS+RW&xM#i}u(7L*&P&B@cs^cl{OHE74U9;W)cb~d*oI=bc3>3z zs&4ZOfX$KbAp?&e^>xpJHXjRC9%~PrU$&)b3t;dB`?BW8Q*sO=0OrYb8BBTN&##E{ z@qA5ehF-&C#4b=|ifT0kD~#jk^cVKKVhcn$*gsKvuy*QjPr5>PUHgPd8nq@FIzsZYRq{u_O5box@G(L^Ep6^QEKbP zhJHN1mKxz#cT5Q88t43Ru0y(zW4=RG+aKfF1smnO`ouqyhyC-2WQ0ze`LDw4OJM>G zY&Y5{qWw)(9T?8FzZ_sfmcF@*MVJnH+cA_4fiwV$%W@b@)L0Y>jmRL zEf3nBaYj?fQs8O<7#{{ezus1&k zZjR+g;ylO4xCGQ2jM}VtWRFUhWfv$u@pYoV-W7gf{qkVLP;d7!u_Cq)cA{86>+t?E z#vaP2vS@pZLdoXrFKW!(&mkVMy!_+*bNGPq0sv(TP?n$q@xBr<-($vO;lcNaH(7=8 zp>uu?YYW9dH*E6t)j%y?e%J}wu@+#^K8G(pdX>8N=?6>P1t7F2aac}N0cYvTSs>L= znnv*WH-3v-{yP__F?~Zqs(@qs`<~yvUKry=i!Se`^+iH`MJPBM5Bn()Sdf|_nD;1! z6gp8GJ{Hs~9@M1T9*@t41=hmLZ#BNfF>((kyD1xn55CM772`@X$2JGq3pPLn?v+J*lGxRT5w^p?*V13oo-ybwx7E!d3%+u#MPmjZ3 zGz`6@npXxbF z7>W5BHd0HS6OfadrOo1HrTw4`m<&HzTW=I9^Dr}Ll0Zc zK}#S!@70v*GLR<#wg3eObZO411=L9Zw;6A3#ql~VZEB&8zx~^+v{c)zdyyY_YOf#l zQ-L^<`0=NwzGCVvjgN=@-?I^;Jg0LlhOq0-j(o(sjIDXG8D4;S%p{enw}ujjEdch^ z&(bl!60q4+o_on+{saKz=cG^te7$1&{9pUeKR*7Y=}25Y9&#Pnh&aiT9|^_yS`oCR z=n4*7^lelDHoDCN^RwCLmP2y(QUT` z5C(npl8dujF&#_OM*l=SrY=0^*Y48Jvn&g>l{PLP4#m-BDb+J}4F4hruVKgB8^H3% zuN#%{Od$U7e?8}qD|cLQ_hniP!$F3rE{pbPae?;uIL}Vbbak6Tuf&RR)EW#`4W(b@ zMgxPHf?#IP=_6ggx#PKMuFQ9S*JN>O2KtHcJ><|8OUyKLNjo~^A?)Kb?O_v%Z zeO}$P_Jfri#G_zFbykz)O%Zt3R-4~)tessxnE6+8008J+fasSwaOqpdMpIq)<r~~kF1c(ls3Bok|4?V$B&;avN>vVT#L*GuI;AxfnjgJ7@$kuf_&DGwE&ea zpr{@r1+XvsW?@8B+gR$6OgaGAP$u@k)f?eHOxlR!;42Zk3aI6iufr~=zGG`pc<2op ztS80Y576)KwR?2JCti9!(j(VL?1IHyZ)!Kn%EmG4<$fSbP&`*_XsA)!*$sd(_o9MF zo10Cz&T7=o=hNPmHIJY9tn-1hGcPovevJgi0b@MA_GWw>gO}keM)>wQw&bGCaZG!) z_Ae`rUBq&)F+7^sv`F}phx?`ys=+%elr4&oyI{WKKxZLO^S$TaT#xfTK6))jZ(VQL zw0QYpm5uq#+96%EBi2KgNeQbh>w)p3F0QmdT1XyqRi;4L4_hDeGwbF7(^_=m)eWe6 z0XDQA`x8l8o6CUytmyCy z)awWYJ*u}KW1rXbsuLq}m8`umj?U@?Fl_tOzTCSH@>$#L=yjTncrV_5fYQYyu(|E| zI_7H>W`E$^-Cq*$nE%F%9Xx6E9y&0%P=>f=$l_ zG+i@=&YGuRC7|u`-rFs!E8yqv0~PYvu+iUx*MirpKmPIR=XASx_6vOr8`mL$p`j)ny-Rv?DzR`{L4nCn*h{VA6}(~ z&9Ez<{j*81afhXzdc@9N6l`}n@~e)hEy~Mi=Q1@GNilT2*WtRt%N;N?Uv-fYSEF1> zuhZ&}E-lzDFtWPFu~zmxV6|XJoc-x-dWY?PJR;k59jng5-lFA(BR>uOnjc+2YKk}S zahGPT$&O9g(5^WwFFWuy1Wv0tpLm^cNA-v5v3or6PfY&%7#W z0UoCcNV{-#xG9*K*}ef-`@17M$3eZx1>o;=%%NaK&| z0$Bif3><4MA?Dqq)@sCu{h#bZoL{ayM`iHJ{lyxM%`c)XJW#t&xSOsK{;fx(2z?r@lz zE;_HaF*gif;8lArRj|kS8H3R9FP>r#$jRDqbkF#;L;Ip~*>g|RX{NA0 zo|PxU_RvZth&&po+OgUnw$X7G^jb4(gS8tSQ?nOoqfTG*PK+?^&H`5Zz}~{+(OHJ^ zuzgZBBVHYHx47QzLWHuKaeP`NC$!enr2RwJ=Y4wsKqM&U zPYeRxW7OgXdTsAIjpi_V63gbWi^IEljIX?@5i``*pbAvP^;eT%nkNaGw0Go-Zn1Yp z6x_Cr-8=lb$ep)z0DGD^kI&4gyRo|7 zOkm(o_FL!z-E6ThfYxNc_kk1W+JLcwVns`e3)py%^AwXQavlSa=t0H0nkJ^NY9>k~fe7vG=-cdu@(PIFyzpChoo z)zjla#_-yfXEaR9BSsEQ}c=TR`_B*8*KC&k(rcacy#_Y@H%XI>cc?cc} z^oiMfsS^ylh9#tXiOAjk>-~0L>qq_k4d`oFIwF><^qu`<7QTRzsgS^&Tc&5MYiUNW z+jO8y^e)$a_u*ewB~n2D)f}Jzv{?0cyf7kLz0#QpL~Ng^Z6nJqP)#coSzd_e`mV0R z-aeK&U}Nl-|8cfrUN!I%Q=lN2ciw>P-r-l3pNx$Vpfu}yayQ~KPY>6&;cr&<&s1RZ z`SD9k6*$o8hFX5C9_A-^avpwlXm4q!3_FGSSOw#Qg$;mF4JJqmKJyZn)xQncCvDSX z2{GvUBmU)*(5(uf-#BdNcsh$=KpWW=&-d;qbWdxPdui4_JdY>=vLG@UwR^)NF4dax zMjMD)c{~!(&daTUTCD}-i^1^gePY=oQC0w>ufEEv-U+x2dQfmbdF)uM{yL%sskYSH zEGuo5F5}`O-g?ZRjg~#eKM{BfoviH|7&BW5j))Tynk9K;Hfb=}jMK;v6RtpMWWU}S zLiD9IYDZok=m%b5akY-MT4QwRg=)YYt6BifEPx>;Y63DbRE-lzTS? zj}nlD7;p5-9-?={9G%0OI)}k-3oVb!<30U_T%m2=ZBTM*ol((c&4R@RAGHC$bL(SO z{cd=k$3H=1cX?cCuH0l~a}6(4dy16l4ZwXhv7sEX8q3AG?J=stmAN53;u8X@Eum1) z1+v9iPxN!$iQZw;_MD%?SHB}lw6WxmmD=L7dUZc`-C>zkm-AwMIyTvEMR#V_Ug4|n zDzi6%A(>wnBz8lfdNEofu3a5?!yl$gY4Mr<2Vc*m+T+4QyWj(Q!}@|T-&+O%&aXYJ zbOq@+xbZP_mAQ>budA(hHz=ZL3O?4mQOkAAKjCkn3jjTvjb3F0OGJn5-Q^>3nMKVZmk$@358X&-T-2puojjf@Fv-?UUjj}5^Yw~`vgl( z=4E+wp;1IWvSm1Qk$gzd5( zKlIsfzMJyhXd7DatR)J}UOqPaQgI%2)v4Mv!)m|}ynve1c5qyukPp-=!wlQJ=Z|sj zt=a(3$z)0pTL~IDrqzO%!`N0HAiO|jkNup_+N^{FOFn7P@2VT&4TrbSB z@s6>JAETzNXV{VPGv2gF3|o&L%^`p~ff&Bs-e}ZTBhZxG7tn82g#Pe<10MUHmbjhL zxmzeZ){C$k(Iq*;&jS3(Z56SFXX)zIXUcIwig(dy=$t?eG#j6nMc<5CIFDy27sqdNZ%fQ zxh?mYn-u0_o#tBrc3Lg&8XoU_9Lo%=%mJu!Fy=cO2R=coRkVq$kK_MQ6dNoM?GpRG zWzhcDlVHH3vii=^B8q?(3Xsi>V~I!uN)gKl0$~5;!t!e5=bM^Xc#I2@zc}PclPGpkc>R z*9$aUAS8p#S=LJ6dHg&APL>xR_IX5h*uV?7Jvh*65OXXiB#`wA>^bb@RuE-p0f1S) z%vbC2@$R!^RcCkuBF{6ug9*bf?AJbV_rXXTn?hiJaq4Tbj4yz5 z?Da;g_-X~;Gj@|va$guTE2~f~5IqX8ACL1_{5}4?04#e7K=?U6)+Yd{FPYVqgzs0i z;ezS*VP0uqUlt-c-&@w3UNKQp*%fmIldd*eQ@F_yf4Kov2>}VJn`ro~GBlo#f4O0; zVw-2{s4LCdbHiLC&CIL>JNQD0Sec*|=Q#a%kMSi)Z2^t(A{!iB4XgH%R)zfd@d-d_ zF;gj+H7=M5jp_U|fyeV}HN~PMYT~r!aD;v7@ZDiAy8ER zaoO;_RGc4kEt`0ocDiGIam2=v1G}SW`+SBqJe01r0S-$d5q1GmU?H$!yb@IUb8*(3 zy*fq!aNpekY8!*yOU^Aw=tZ~M{^&Pm^zCNkPkb`4U{*;#yFhJPGg;-%sRFVqL77zp zB)Dxvmb$}MVlyw0wgF?gp_f2j@6E@oOgzTr&wATf8*`*$SM~BfEPZvJY>f@<`M7>E zH(~Rt29Q@XxURvh_87iSa_7uk%gW8w-A;UA+2~DgR3B$+-P;C!*phF7vC)eFI^h@- z1ZZUrFRhKecoTOXd3J+#9(LA-3x?gsov3~QyKVCbrnj0Ev6n$b#sybF2^#SH_{D}` z{a1n*m?a6XHcP;nCQ%b7CB2T=1>4~_)noHNPFp54XbJe?nH}@m4XFJw@+u;~=LVK< zQILTBX$$bVsxarD=-szZVKa@E)h_euarBEyngctIv!aSpgB- z#(9+u+yq$(K19o)so;Jba%YUG6wMg2*dPF+%~uB8mc7qrp>4R+GpZ@<`1_6}cV z@dA*rF0WtBUqF?|YK-b1=k_2dM*p%g0W;clVcb*!2d4P~8sp{RaEh$FTvpel>pkfYf9B3N3G7 zfBdiir^mRe3jg8epjX_xso*6WD0Ft-{O=?i1Pe;xGmgvesIC860tup_3k&9b!&MEX z{J89dF_Xi#S$&HY8`B+cs>;ZlL4Y+oRomdU;Zdi#-{)6@3>QZM7B^|m&J&c|0?ct- zq(A#h^!tMJ0P;-UEIq{3Cc6NJ|7jG$PueulGN!#TAMbO6KsJOreRS2C7)HNPP2M8T ztci-p7nN`gzQ7=^4K==lpnzT;>AnD9=XYQw0I=%t{cY?nv9ka*y+J75%x)V}8arl} z+2}OVUIkJT+%IdSD>UYpRYAjF;E|1quZ*KUbyz0V0{|Y!=Pr;%H-1yvpp6=j3!a(Q zx|7DsBMZj!o@qDCLSQihwWTSA=h&|&HuH#rcYy%!PKXZ5r0?jpf>?GFSsAFrVku7eVt!sNUf4i=IMRBLuX@XAgY5APVT1 zZ}V-DHt&j^bL9}5kL4Z^<5p#yn$fiaUUxaA_$K=R4hr~-wZus*3Et(W_;C_uPwfk|b9 z&NOo^>ZY`2$;~TYtQv%*A;zOV;m3E19=%!`@ps?v(HKiq;4J~L(Q6)W;(YEmJyCDD z6@Z&Ne}5Ppde*-Z*&H)HMWzCD&Dxs@oh zVs}F~AN0S+q!ycz7;^)#dzupNI=4O^>+bvErYJ*)2xXB`1>^3B?cN++=q;k>^URK@ z`aV=u0MefGmn=pXKx|HXLkXa96eFrH2KG7t;*A4a@^OA>!K~M9kZ7(85UdKfL_tgt zz!;zKqrXiFfU2-~^lF&h;lu71e7t1Lbn~9K!a=-q&mZvy0~aNjC%S320ocQ;bIc3Q z^iso3MFC^{G#izwyUpvj2^PsGf68_emI(E?MukcM+lMc zh3^5-F<)Sy(2axHprA_tNz@^EzB=8XY z0LSs>JT=D0FXuJ@nNU7|ydYq({p!FkOKglMvd7rnJr|_u3pVSW00gC<7s&2~?`1;T z$jEV&d1wBXzR^+boj}59*2cczILAf;<;QzBXd~V?=e1XDbdLiUP+yA%Ggf0^N*gJ- ztM!EqJNhNK+wjrt>f7W@$j|S^WR%)%Jl@M~lY0w*&NnEt#QgjCI>(XQv*T&+yV}|$ z&`F2@@c5&CCMzM(E$O#SszVexYzK1KLKBkKLSBz&_AUMRp1&a9i(s~38)(>IySnbs zxi;&`6ZY_5=>B-T{9ORny6KMAfDb643a_s=Q3A~MpXI|&_^rQ60JGGn9x#i`EUkT3 z(h?BRg*(*8tTFAX1w%P}ArsW&xXux8m}J^yCxB|-dFj-BLxbO`M&2VaI|*&TfU8|& zUJ&EDrS9nF{Yvik;lJhtQ%&5o2cX)!SZLp4F6Qbu>I%QISYu$f!4l|9{)nGT=)0u6 z?8Yphb5+C=yDWGD@Q1~^*;?;=9F8RT+&j88;;kY)iVYZga?B&&kVkZ1n2)y^EFn%m z>wYZ&WZod$8CUHZy|w@`grb{h3@xDHK90T8>J*OgiF@n@wz>@aJ;!A)OJMuodLeMa z116s*RGFKhi*&oR0o;eCMdgTV2gYM>kTTmq@5b8&G@0+@5gWS&yA|6)%Q}Ym+(s;* z`kOcS{rDCD-Q$%O`UHvb$c$(W@>T@OH&(a0w%F- zTm^PRYS7`26CC3#LAieu=Q)lS-CGfzAh0==Fn%w=WKs8n49W{&LmML(x{=rdEUM@6 zrTFdLtlOo)H|G3_ruIhOVYmSB{M$O?nT^MDzm=Cpf5|}v?Oz>b#LIh|9nHDH{B0QP(WTl zOBiY^R)O6SEBW*jP$I70?{|A-6NpDG<*ygvaf-cfncgvfV!uX=rSOdty(Jsls(Zc~yl0n?m11y{snX zD#)}95M_tXw%LtFOu8@KNj>p94Yym@=nWgOp(+<(Cf+9lIK~SQMk#5<*ozLhaF_ig zgtdY3=wc^g?BB;F4SzKU0H6YeWBg(_3nq;5qApeSs9m`HZY;J)cp3nspRI3cR^5R0 zjF*B7G$D=`wiyW3&I^TYrQ=vvohNT67PNc38`N4Thc#9*vDf~5e4Mp5Gg;f|Ql!hR zLGtJ#ImTsBc-I?quVa|XER`hE0Pd|pw;?aVX|+4#dkxyDcCsAw!zI7jec1$>pPQ5suKX&f^|i-r89FG^1G3Ux4?LG z-bds8D@_TtFa)$_tcz0lzIU&9N20!_$|FTVu#2vO|3vMu(rGsT$^G#$@;# zfJ8PdlGbCrV!G$s=;?=VkCir-n#+!lPq<;=1d$%wrY;fo)S{09st7u7R`I>0%y-Rk znw=f1?n^B;Fy_k==vU9V05s>gtM&%Yj=lhBOcHJ8Z(p0@x%EdXOSs0~W&C4mkU)VB43*KaUgRH?OcY-`WHTU?AuG30;PWQ`u&+?Ov75eQ^U4#okOZpO4qM$D~!QNybhH zU8xcKEtob49+x2S8#Ac2R6r*mCrD}SyN?7k=g$UYbKQ%!8>n;Bn#L{~%MLq#r+bL@ zeK!D915(6prUmX|3GSEZ-$ThT#0$dET>}ZA6XBPtQP<&KfZfxFOaSw_0hHY9rn{#B z^ttm=VD<}uNGlnIit)R5=rxXRdUASNNe$+`IcUxcaX^Jy4Y}PUt}TG>S>s}W%ndAH z@p!KrN=}Nwkyo3Q^WD>vXpGurR>(cPYh}3us4M)pNo<1#U>B|IK0XArAPILTYsSg4 zp2yd3>hfJbKJyHVoa;8W``$I~8!<0HS%yVx^!2;z)17`^}s&fVKB)jAFI`-HWfjBbm2 zw2AND&0ZA^Nf-vx50!;qWqfZ1i6@!7x^lkc(eb)DoDqYHiUo{dMldTcbujZkxudjr$o z4O(}x2PsjQ$9dgXr>l@7x_E5?JKH-47j$P0-W%A=RvTKq0cqqdp6+hMqt3?afo6lE zlsbW1h(N3Ocme){{{ru-y8E6)`Rxo$2(At6WAp4WuKND?0)W~hD%MU! zMDiv90~R+zc>ON3SC3<*>ym^a9AZRo^wX-(G>BV@&f;_$Z+;dZ@A& z?Jk>*)fc>5w>GFNe%Kq;-+WKr1wxw|u8yKNik`nK4xx87I3g`^hG0e(Kz2I|wYU3C z(lEg(8(H53AC9z?9$(b4>m9);b?-T4E z?PUYbg&3Fns=l=aXqp5YS}{9ek-(U@A6i{a5UK*g7yskk9#sh2KZijzp0!_4nlZZ^ zg&Rfd#@f37?Y3_w3+gm_f9pM}B?~kK>k>Wq3mATSw3QL@P*NCkkF(JYM3hPNTMUHT z!XUWZ_V3n1=9UE@n*f{XMlXQ#{atqnP!)DlG@uvku(NJ8dX1Tb0EWE;nD<_dI{Ww0 zSp_BTyPr1|5U``GFh2w#BH@rQjs~XphMUl+SHURm`=@|HCjs=nGlSj&!0r+t4;^pc z*)3SZ%|Qh*83bSEE1|D9}K5Q*Dhg-!m2f z*yv5u*nr0yy|eD>zP4a2D9sb3yn7jBW`5pP`|V=o0eW6FpOBIbqG|Y-#NqFIMH>igIUo>}M`F_?n-_q=Wwy)WeLH!2RD#j4`k!0>H{z-#{E-8ri>B#!WqEAaQ z$&ndz!^bIpFW?fidU!RoI&j{*13<({A7f|vllcVzF~06y!x^U_aBcI$u2mR*0sHLc z+6~o+oc8udU-cgjErs#8hWA2=M3W76vVr;hmBot-fW_TPb-H;uA1m&ot<%Qu;vjjj zPX_k4A2_}1e$McyWwY0210vPcj;7t#h5_;L&zhu5UgllmZ-dSMzW%9%3|-W=$+5Sp z$X->`3*BV+u5JVg^m&sOvcE^zAeG0D>lbce8B+KrndydFl0a82t=}T}|9nN@ars;V zbkWib?QMfAQKIh0DfBG|ump(j@krXEH^y9$Vw6+@x}3`I{!{ur^t|mkVsE%_nd{=5 zE9H0cnD1pw5NmheZuvJ>t87S!qY@Ua`JdMN{(vq+OQaWWJd}h-uk5ZavJmt06P9<^ zavMInZ`HX$_t;7B*1jyTa*Q{Dco`z_ohfC`L*nT!)sAAcSA^E}*u9s;~u}X5(YMG~C}! z$T%N6M{kq+zU@AUagovPZ@D#)CG!hVHV`-C`Y$KJ5Zn{y<^5J=g6`LX+}c>O=!U)r ziq4yEb<++(E4W`$E!a1v*rJcR5e@+ezc9ugSa#^Ke=i{#yzMF%um34%Pr#%3jGr(o zYqe-a@9u_^)>~cHRB3vP$K!PCiq05_Gn;|4?isjx+WEZ~g6_`^@xh(@O$ zE0+>N{-$56_C8o{LILh;1KRrlBJ2Jh^986%oELq=98PU_yOLNPPDGsFs0+RY#}!bS zZ-4fySCNf76=WHJqD}zxZmg8S?tJrWSoyIR*}6?Y5OKDGM8A1+mOOR?hASgifzDP_ zqIHam@P6wi!2^BO4MaDT3B>F=-y_?ryO9Z%5>h4_?l*=>iQq#Jb{B%BIIgheaeW1OOzX^{DHw^%XqZumyLbpb$MKxQ0Q;$GLN>#nGw4eDFVhnB&z z8fJ~o0)g2VaEDGI4qpjK!%y_R`J0Y!b{7RWbWaMv#vC^_$?OLXW0NGWF_L$2?a|70S$ywdmFoP4e5OGpq9FHZaHac(r$ZxjY z$K!LuEWZf{C7|hRJo~)g9AQ+4E!?wdJI3n$&89$%djkL*xw*HIWs#`7 znFbN>&JnKyaLlh=(ag`s{9@EmH+>(SX3eA-vIb-irV`3xC?G2j}x6xn@Nnne_hrdZxp>vpa|ac2;UgJ`zB=h zeeP?U70kN;pY5^I8aJ!Ga5o4xAEyAgeu38G;}<_xVQ@HeDtuf&rp6 z+_NC`sWHBg6<%rzN|HXddz0lYgqZg2Px4Ke9(Mib^H&*xY6{;;f1unD`9C0!rl)l$ z$?=f@2&mHJMM5`h3EUJMcyL}5=8^EvDP8dX!M#1uvzWGNCl1k+c>%9e0`b9lYS1Ew}BS zxC;uJFe?va<78*eeC%iMiljBl^`rE@JAg3p*2^-ecRvbXfN3vc7MRwV+xP6zM z;sYn3JSOJ(ovcW98+x$X)jqS)ap-K(O&ur{#dzOrz(OXioEJ!;AhHwcc1r{W!DE5{ z-502JlM~D@RRRPppl{(DKz7(UKMd;O!J@apxr_H`yZ9}WYC-9QM|R)kS(I32TO|}C z%_<%*&?RnDh6)Isi^ysX%P+g*(jolX3t&qKa(6Y`U#6f6+$-j*6!F$O7yzPsAX_Vpc{`6 z9qSCw#<%rTjF;|Gp3bt7K=+tc#9N*%Sab<6D~W&^K9>NEx!XMx@NpH4r`ru@TSM{a zii8?Ik$|g7vdO~iJMCPZL5+l3q$+9h@!8ca6ihciup8x_alxW{zw9wCfLck<;s)aG zlDpa6L9@PhGy!1P>2-~be$K7n7Knr(89i?*T)}ML4CWRhw+Cl}e_@PuGagkYxG#c& zqm#Pfb&xb;UJFo{S*g@9JHG)4SABDNsry&@NZk5@%7A2rZd&m;`0mRiRc46wHI9;H zA6Z(_3#&Z|?ggNCY*8SsZW|CY^E{rTMx_KQjfeLF&YZT8HI6Ub)KLK*tu$FQ6(KIO zr2nR#r2p}*d;L*@5Vp)(#qr3?VAa}NF5{gJmp5)(w0>;>LUCZR(EPnk!Y=@vQQxk% zW_8a`F9T3`>>CD{hkP_;dlUCCEI_&y1f+-asB+tzCWwgGgUa0)+8ztFmZc!w6Jrz{ z-xC`Psf9aSosMMKSrkNz@(UKa)iCj}Kdk_pj_~VVc)s)bJPXairN`oK_Z#jZp@sT~3seF<6yIng)UMLmyo8=n(Uj5o$dW_qtGKrt?{B>o=90T}UOrrm4= zTJ8p?oj_-aQgN=0-*lMSAb5;=i)h8z0MzJi`A{!Nf7Jxv#6>llZj|zhfbfm9c6Y;S zrJ!uy>sdEt0YJ<5U6jUSU-!5ZWnL25rN;Qfz7i^APcO6$mI;~YGKKG7B)*?iCRE4x z1hma7X|&*uc!9*aRgoLF6GhTh-)Y7ZfTWU@6p!l!jGHPtH)tMpLO^ZYyV0D+L+9^N z>y4rhYwsDSoJ%OsSoeYInSp3q0B_bZ3BYdUa9jcbH-ju@*6?x)VAI{Ywnsw121!VH zU0VvT@8aVA=y$Fql>AaWUy9hOh_euLOJd##qXTQJE;l|-XfbIhfWZr>8(C20 zm~a)y?u`IE_C#5nn|H{-=wDQgi|jGJfcN$buwbhkc^%)h6ElW3Dy(iBUGKE%^a6dW ztBv^W1a}V`zW)OomeC8K4W8?wdmXJCr-@bg>d_C3?RzshcFj|Pnbm<8AQ zzPZX4p5Ia@>gL{spJ3NFT6pIv_(-tZ{Q|xhEkHw@W&e>hgkP|EB3KRVIu7YFONy}p zhNoLu6b$&yb%44g!CG<&7Ofg7pXe5qv?f8j6+BbbR~0Q(Sc!{n&z7zKeBPU{_Wciz zfo*XsAgDU4Tr{g)sJ`7&3t{0=!1xfa4z$g#%!n`G+kQL&xAhyW>nfLWZ$M-Gx`amf zE*Z8Ph9GNpCV)O6Zn)p$KY}cn>zi1U;1TcNoS);_*^p2+aE z0kiWMKf^m4wAwdwvd9LSR_KOCmmB9v76Hcw8x}>cdj=FpxF+fnb)-%o`-XjP4ia6A zys?zO=mE%zeTI2#C`Jf>7RgEn=LgPW+{TVqH!mHz1<2C z87ItQzS0Aq7FD``rOU!W_{?%&N-%~lgGy-L9UINDpehGoc8{rQ_$9Sl$Q!LWcH;K$ z)NN>^`=Z+LXi)vTiK((6@!gj`7w8u#>6+RT~j$ z^QsMigXgVhrzsO!?uoWBT3~b)Al}FVK$F=9ORnFQ?u2;EKD?>_gxZvYx}1NYWO z7{1chfr6Asy5Iukk5K2SRKA#-z2;vkp=jn zwOi#k`m4Beumhts5PQX#8$B3ZPo;Q5o|kN8T!vBj0e_YScDf1$u2G zi2ACbF)tzIOt}F-%qlQCO&5GpW8X0UrVzYroJ8~awm}N5F6ThV9BomwHiM~J7KvCz zD^yBFz^&H`ZjplHA^{s+n*L>Qzih|@o`9no9gnW^S!>51p8&0GR4Qzhxm!MNLMY5h zQzQH=|IU#R1iaU`;vIn6TCxq}nw(3!y**`sw<|$o%i==a!nVKc0h-?s)18J|h=p$# zYQRd}N*uO<;d_na_WqE^&BxUx2c!d+B!twiCDCbw;PC?NFng;w)(vw=WLN>2U_>TR zyXJV)VRlQCZ_PLZ1(YoO!Z=>AxH$o`X8+b3iP#b7P3Z9uV1In>ZYz9T8<1>V^-VaS z6)l2;U2!a`0rO@k>_h{)S$xeq_T1XKYfPnCfnH7XlwhcaaHB9BhgcO>L=?svaoX4l zt3vd&3nE5bmw;?E*Y`CBk4i%pA^{sWov5?Hu&%VW+wWiESQ@@1>>TR?I`2V4Zcw62+R#nJQtPhW8aN(b%Lf381sFT z(**dqZt3|dP*sGf!2_oeC`hf?wLj)B-0!+gDmW1--hB0YfcoDz06d^Hu^4`KfO@}g zTl+iJk1|w}$H)$g1%Tl<@ZC$BH(&r2Od?v042qLqyt!=l;2WSlj(-Dyb_i8}+nKao zMi>jn;{@w0z(;LDH$C#Qs_y5!@QoM(Di{%+{~-{lPrF}XWhmDGBrI}{mwF%0W|-Z4 z>Yc&WLL>0xFFH0Vr`_#S_mwJ=2^6h&0-a+Zcy-(O|1tKrTax6st{@74GLP(@kN1Df zyYB9)3^$3y{GenWb*8G%ts@8nL>+s#hg2Yh=<0W!>l&d|N;QUK7?U?*!I({RSv!jC*%kod)0q+9K%mRTG8s zordxCTTHP4gA1XFs*2>`8i~kUt8JNY8Vw=TL)X@Jx4&2rYL?9iWaAsF43r_wu8iYXOo%2*SXk&zH)~#*&3rNd2-VAL zPv?y+jZ1Ao1j8%8JT)>$+?IH~CA{9{=Fg!z>G&rU=qr|{n=vuw9b0FyTr?16?(x zWnSwhirggxsta?|8n;WyVSw}~0hJgPy=4AIf*WqkvEbvK}~$G(9tM>D{bzD)pKRa0VCD^3yWNoRmwE zw?=tnF7M?+Tf_Oc8-Q>wEE}+f?-^fPG>b&Cx%mjxB-Q`7{Qvf z+7zbX(7f0ag;2E?=R8C_p&eBC#sdVTrMHylzWkcpucBi$b4#%A}0Dv{qK z(qbmH01D;TZ(wz@jG8LI%N$qLf{j_K74yi14SeT#ts8KbfVK{Wk1iQF`sTCB=?{rgWNbSoyvq0P;NA{ShFU4O(V=kD*{h`6g%TMx4A zEU?eCVkz`m39Q6?MMcw4Kv`oZ1u)0B=j0f9lbPc+P2!%#uDA^+Ue|v*)kZ7ZvR%63 z<=;TQU;536kqed5(JCOchJD>w+dE*4H$%K$ORA-HBb1=D=#*!{m4oH7Yr5J>jzr7j z=HG4r1DM$c8&xcQWf?~`PLt&8H%Mf80?|zimkfp8T~1bIl{GSB z+_V+HLHdwYi3Cdj<{Ne_T6j0~x?q+}<$_YB2+nwK(W}6O6C-LR{0-6c?lR*IT2bW~kS}T!46kSA288m!Qu*YNdr(>)A^eN}~NE(68aV$hSuxEBmEWB45?RYd2DMZnAWFLdY~Ocns&1xC;y zmx~x)(kzYUpae4SMApXHY3LWGhbC#gW&zHvz**lCf%K??QytM?c>}J=xLz^-1b}r9 zj4xlA$?J6+pqhSbFVcfI3y4Tk;NT2pZP7u0Z*9fmD-iFrikT71X8QvhWBdUCXZCIu za$UnED)sU=h(x7qMB`5ruUB$)nKn#a7XSjyB)Er{mBgy{%jDo)m5jVD{~@gFx>dJ` zK&h;4!Y6-ojJH#3QJF;*3y6PT|AX#3aJ(lWRhCm^yK=^Ow-H%2A(q$3xw*fC@73fi ztVONa&Uju>&9;&vnBV8T@!TGtF@A$A+K?6$VSphp>P;_SW1@J~WEQA&G6`5;bFJn@ zwe5&2htt{PY_v8;Rwoyuthl#@7P$&G8DHHY)@nTCxVeq*n_g0v=FM@!m5aa|K4va-ZXXf8<0d2wC%?nZu0kTLE%ov*8{dTwi%K793P!V!2;!&h-& zWjDJ3kQiE}k*)-Fm%eIRuUddz3HtS_+5GiZC9M@Nzc~BE&3DMPER=4LV}HS_z-D{R z8rP=Y0*f&2E2Qf`xxK#8RLZ=8^lOZTs+OuSy-fQv(EKyfS99WHdE z+D7SW*F@sw2^C!Tl=2->%Vj#0t%=GJ)&4>~1@dyCHTwV~Wg=dfxx??)ZImRf>(`oY zd5xmvoElkS$?v4H={fwBzX@PO0!=aZx(n~?S0_9us$;2vuwyLLB1?-(WVAh67Q9d>UB{wak!^7C zH{svU8e#yoplkGj!5E-tB1^2L0Se$Cd0o&2G)p;WjaR1EU2F1%1ntfP;F{KvGWErj z2Q-A5_wQ`KQL-lHe^$HfBnZ^|1{eV}&3ZhIr;-yR7ZAfk(CEQ_nTr={zUQ3?R8@4o z5npoAYuj=32^NkmLU5$&mkhv1q%QJ&cB5N3~)QEw&oH=iJ4CvP{jMomLYeB!h z-X8zDkc;vnK;Ir;mE!G9K`QV0w*{ps_qM`-9Mrb7nru#X6{z5eywybssKeYu*fS) zuViFflF$f!Z`0xEaj{i50Kf4_ksFuk#9`}JT5UN-Iaq2KG+(ckxKgwzuZY1EMoYpB zzEGULu2ea$@AsQ>zW#mRFi`P-&ScD?c2F}4<26mQXqGPnMeio!j#>j1tvye>Fm#jY z(p8D^s#=BS^5)uEa7alibmRWR0u8{`@Z<{+LT_Cl^l9w=VmcZb020= zeU_rFq@s%Ps+(S`;7r9tG)IynQ^7H>u@*46gvT#if%fL;tZ45yWoUxiG+A7m*p+Pj zn^}gg;Fg`0$gviTksSOEaP?IB9S-27U-3s^4%+FXbXd#Wcy_+L#CP=B9@n{;Rwbzl zpr|4ekf0k(FpfB zg&6mOv}embw%BtH@pr)-k*K)9w-@6I7kNu&IkSpHdNjD$xxc5c*ZAFRx~>eG7q)7| z;($^Ar4!ua7@8pLC$z*pc(3&uZ(P@ZoQ3)Z+>y|x+vkuVOvjio=~r!C)ZLTEE-+S4 zXbkw40N+ZWP4tw0)_fbCbbd-=ye4VIYR|pB;uP$BfT zvS(4)5F-|QTpDFCi$*y)7Z8 zot3Ela;}&wnk9_7>*_*(LA)8BsMp8@FW#x~MqIn*L}tfU1EDEXWvk`fM#~pfRbZRL zSpe&L`K~bmV~pD?RnZx$?vkpP`I!`GdC8-@s7Ewf^9k)hp62DbDe=3Oa78F^jn zQV^`X7QaW^Cy-N|#}QUcC< zUIUoB5w)SDhB`L*%^LCUj#J#wcvY6OKn*O0{dIQ>kP*e86L18itnw!93daDYHN=xZ zj#t_V?g%BWshp+Kt80Mf5`|p2Cn$_@7hEoQO9dFpfpyCTIk1Lqi1%_-BC3pFPZco5 zvhOuX$7{Y9XSq;R&umuY(Bdm)kU1i${F8&LOyJ7+^6$Km$8#eSDV1sDI}9k9ookQ< zjwXqrP}V-Ykt7pTE*7#_vavih^m{TL`Cj#FyuZFd15%wtoUNCr1VzH5+$=I({I(Z{ z?oH4kT$Mne*Q8Ib@=tB{PIhZNVOFIKz_^Vhf+qP3!P(O8?!iLR>NvT!3MPfHMg zOXhITdv}4XWsqj4gPpdRXeeaA5iU3h#q=_pMEy@g@>(m<#*PJ??*{V74OBBqDpbW)HkY?@%{%(eD#=$(h_86~5o-w**MABV zu&%1O-i((f5-uiXElcg@UIzM9tOOvcK*<=o84LP%zCD3zN|u<=n2KAh=1zV6jeAdL~JfH7M%>n(|@0vI=_svG1bO+_ki zwDkzq`1-!kvysLh*ROkW*LQA;y9uxq3+49ur%PaFb^_nM7wvH7JxWDGaAnVPD2ll- z;yqzszm{{iPKIxWQ`d6E7{xYRe!ms8#&QSV)+NEde1l}%uFy&XQ4o}4Ghd5n{a z$g$@gGQ0Ds`ujdWXUa?-X&#-Fx)MfBj^zvQg{m?G*t6uoNC@kp9zX2(CSvF!Z zl_=;!QiXJhYkRqwLN-sfDU7odqY-reMvMjP*K1COSw$u%xK8FeE?2?)_gYtRyxn7m zP?O!f6lWsW=H~|PJ&aNVJt;(%YXYgkX(YTzm#=XHMbk?asRic*&VT~Ag0P>Ne%5%! zAB!?a(zvdhTs2lQf=D3rtvyr$0$;jILo{htJz70uf@ULw*|g4oEP?^}qaA=p3vYmk zmEUr?%${)q(sQa%cMfI4wNlQj7Deac>xRgHv1+@AP>GQ@nu^)2fa=!j4Isb2I=YZo z#yx@Er^yOentH7}V{mHJUEpY!DGD0DVNfFz1ow;^IW1dUjwk?oP7bVVLTSSCOMg0H zL~D#dt!;{eb~aWN(DS)*k79V)H&zwLUI%)6?=+$Ts759^dOZOtXLeboo&OQ7lMvlZS(+8 zLBA(|;Xf#ldDknx(Rg|}mW{*Z9I@P1lo9-b&5(OE-n%Fg<(xUkZC-Az=8 zw`(iPjhM?uL=1gU4{3kkf?Svu|n>0Nj?Nc1wJ@;-&2i zbG?3xm?$ga%lFXA;mUH)1M{l!$}*fxM$)XzUjr*W;2N>*tentL7S){pd0SdbDpdQy z4!!k~L0scc@Z!56m;tKLvN6Ryz5pbcMXi@A(S!3WM3>=x@*4najWH1S!-iz+Rd?=LS zOvE9lsKn+mRUVyH?dVobHxs|U{>afk<02u01CD$AYkC!sbxHq<_e@0O^=r>uP`!I9 z1F$kQ(exZYM&iaE&Y7KCcG$MxNYqNUa~ z8!*P*p8(iYRKKhWGFedF#3Ly8$`64d84ZQLOFkb)Tuj{>Pzwwkt;&uIxJr)>u z3azCt7L15Quxh>wth-Rt8lGjxD3~*i>vb1qjmUBRr;WV(Jj7TrvMM5O^L4Enncgio zVEu7v`Cr%nzX1&^7Oz@gZ%4bXC}w-IAa!LPJ8PH%&S@{91*~D&wdrLoK&DK^ zm@J@{JnkwZshFx;fJ2kNu6bkg2Z>ZnN6d(K4o@nbAQt;BETR^ntCm>0roDTbNDQUT zt(=By!=8fDLc-80a=tq~pSGOo?Gw~_xAH%m`cIdJQj4ktx<-Cs-& zAOybddqnp{ub1yMq+0{lo_1r$C?MfV6UZ zM^zi0-kZySVCC3cj3Ss1jcy-G4Q=kySg(NJ0+{!U0Oo?@?Qf1{z_{lADlJ=ItZbH9 zRiA)2uWqjt+a1LXe9={?O@^7QczqkZ`MM?xxL!R!k1gZLi1Kt@`CK7D)mpD>me#`S z^(SjVi{qPphz-vK>}|0-G;vjO3``W+_5^d;=n)ZzVd?%QlZNkct!iYJiRjPKCyAuH{AdA(yl3fyk@?|vLaJQIF zP=8JS^9g`G<%%pg$?TN|wM9`x?g3K-?V4^25VWkXcH7~6R{yO?yY3Oy_J6AayL11R zU7-oo%A#^`J>!o6!`-hjD&ctp8ihrrqY3aU;*H}85b+x*ieAPSd@YmFw1ub{U-f75 zwPsd#=5CzOi@EUim2}D8$NkhIXV0voo5>$OqcXm)Nz>#D@s)AcfhZ&Y~ zx?Y#7N1Y?aH_Lho|G%t z4DZ&)(A$%trdpniBv<0V96*-lc&#eG1L!tM*`QohzGHZBG^8+ACU&<0gzL7KQHt69 zDUECeQIw%=L|!Q>suf*;`C z8e{w>CnEazaTy$5?9ZUvxS_nsLNK@$7ymRN=1|^Po6Sl#a^5q7TaP*7y?}ZXZG%6q z@8*$sr)uG{+gpWlnKhRI%Hf#+x_fqU8qxMu27Jik+yoZ|uS0!<0S+#LRqP$8lPv}c ztqICvjC+inD1+s|b-j--5CJx6)p{bz24c*f~uk0a6v1% ziBE900B1KR-L0s6OMM=`a08f~m3xm+VfTrQNNE;4(CH|QG94Ev$X z?96EFR&OaPQM`;|9l=mf3aMZ-{l zDLU^qixkb$nbB#NrC4?K)CYEFqn`s7#@B5Y=OSemoFl#&oqNT2TT$s$5$Sdd#0rzp zn6`_xP|~Uk5z82>P&TD>b=7rdBdo8O-3$WkdM{0S0_(6&-o?0_-I0Jb+ykO(iWNcG z+sQU&JFNpwl*k2yX3`wU6=Aw%z-p=iqd>-7yNB8-IC?bd$!KkWSB^qlleJ_%4#E*PkV#`{@|_^1M3h2D2&WI|46 z?;aX)%_7HmqqS{|hbx_k?f@H5V&tr0M|jbJqucB(z4s&>mn#{;#immi`=lse zdn_ZehqpX`Xe>74gshueW-nkn>?kx>DMp{v1#eQu?!)Yo*0su*X6P^$G+p^cXa)Aoab3dWwK42;V2DUAnwrVGo1<&=|V9(i#l8S4B#Fz3(PLr>E zCz}iH<~L4w zBPs7^<`Uqjgkx1oKERry8)DLuT#E*y2`t0i_k(j89Cfp7DI&8VF~zqzlp+6a65I9l z8(7)C9T-{Ff~g+o1wbP29X}auK`o|jH3IJRAec=YaZzQ+Xszg)TqqpejkJ~DT7^sz55wBcu$*U9wiJH0Q z>sP;XF<_$DAEgV`9&>hFon6N;svWVC>90X2Ns&?)Q+Cdei-T(>w$Xl9F^n(51+OXj z=M5*(in{Q$d1>^$h$Bfu-495s4JQFWHs8`K8624dsFe$xrG&tN&Xj7E2;0|)>qQ^} zd6#u*-L7rv5JMOj8qpcQu2+1$kmKv+(iH%ii8zYag&=`inX|4Iii){FdF|W)gmFny zKV$RJ*s=iET5xuRbn$xO9-_Am54WYfdP(6UNL|IkbV4%J$J;fL*~RyjTps z>K)<>Q&F9?CH5$j2HcUj=IRPTx=FwAALaXs-vpH!6Zf495WPa>wtg1zT1lHwqDORV zQB?_!k%;}hC&ml9i&0g&+PLf9O9@V>ID9i#e2qT~Se7rZtK|z$vZ}_IZ3e2-igj^0 zL$)cwHh8rXfC|w9ko=2DndJ_@$8gD39rz` zSxIr(;o&MD!aT5P0>u$0HUbB9aW-|t9Ju~wMX z7P2h`w1BJ_;Ja8UM65ELzM^h`DAxo))MbvWLV*R+1;=YGxcV&F1#O>`grnX-nDjEK zW$rFJspWWe4@|7+=LrDG)lM|SD;u>Z+X%bII~g%iHJA&8Z%PI z6&?&OdUY2LRaDjX4+FzDuGk7;us~%tpchq&W%wRnZ>OUP4}uqW$u?KStcjuf#%tsO zip{{1GU84aU;)7!kyO^kj9OUHiBtMGIAY`QdW^bWcRdhPrSMOk+P#Z-kq7ul1z8?~ z5l{f@wn-`P{lRt<6k3>8`7XHDceYYIK}wC;!t0%tyjsxSNbU<>-*r*Q*~F<_F`CaR zV}uLV>qR1MxTKb(7bNQHtOn(%m0$ql1<(0L8|~yG;PJ1a5W(vrbODtHf%O(3Qkj*t zZbK1YIrm+20=2s7qA>)j<9iisH#L*&d+N$Q&-^i zivoO2V}c){aTMb%1JCp4mFmKR)s>)-gS`yY5F{;MR?+pMFC zjJorHF#9zLD6V#vK^Iz!cHaACq}Fe>(pH~eY*7uMO7t*FK)$>({}l}%CzMms2;W** zoqxKITol4pqd3rGt*ZB2Vf#)4KpIzMdMQ?`BJ3)Yk93wyKtrk?dSA&PTa5fK{h4~T zIbQ9U%VJHn_6!c>N+ZSsL$|XSdCQKqnIow%pbIyQjHX89SwN+0Wd?!knr4*f3k!uJ zXGG5^?JF(9v%Fd)4O2yJXtA*xZW&l{uxdJ-2H7%$0|BZPcdlk6@S^A9&|5FuRPoX` z9AoCX1k~*2zKKh3HrizZb%utzy=s*J6-o8;!&rgJ(F{Hf z&ct@4fCn@6r9VcjHDnBw7BsgbKtx&9Puj`Vd0wE+%Qbp_)@$~+5(^lw--NL(>{c=8 zSfa_;qxjDAG6<*O>T#h&HW{b`kcnC<69!laaEqF{cyd=LhM0LT6cZ&8&Q@yzvx!^# z=Ji*mr*i0?J?||R$auXGs2&%jLUaGSoD|@tk!d)#EP|C}5m6Ip#)KCdK5_iQT9ED0 zS$^CMY2+@d05d0+u2>7)U@c+A>Z1qUI9QA%mnjZrsmnAp0mBuLpwdO<_h-F=Drpa` zsyEQ6=!R?o=U}YNAxvlpZqx#v%~tQ8S0D)CkXilSKCS z1f;bsg@I0Tsj&)DuF4#sR6@Cu$8KR!#L-@Fr?U8Bh!Ow=AFS>;f0|n3-lrrPo2cHs^y(Hw7yO;q8rimHH8cU#tQ|)IK*+{Ct;^p#A&kf~#8rEY z)Ad@Nm_;c;Re@C+{oPE*$Q;>l6`A{~*dAQgqPq`eK(8C6NcV?8texmo0o6$Nnuamn zxV~1xn6-!)wFonupzYAyU%P*+c``dNbY)&Ox~gO}@6z>SF?KCapjO0Q8hc9U86Y>70AGvld6bZ1TKC*E3A$3H{cfWMzcRURoQil+%1)V zJ^}bSt57WTxs(JLFTGYzG9RnRp5TzUs^ZG(Ajsv>c@h@t+Q%?__gc!1l?rRAA5rg0 zXVYnng=&B|+`Ok*0A{NCHfO@73$BPN&kh1-yaxga-8qJ?bp8c<#H7?H+T%_Cel3QR_4-52j7DhcFwyLlCy zS?+mMxxQX+M)Awsuo4P_<`Y;f^R!X3GY9b!D=x;_D_%nXcN} zVUD6{DBfTPSyWx|4LC2Bt5MdoXQSsvjcpieVvNN|jImms(kW=Pn?G4QPs^Q0Uf1`o z+*=2+fF2gDaT|Diwk@r3y^D}+GS7SO7^16yMZ@N>lg-Aru^veFET?8?+nk~GOo&5S zQH}ZLJ#=H|buGrV6YQCffQnI$YYEx>3@UttcPFN)JvtD#U@-^{ zZ&U~PfvZ3lm&qJsLS&B;+xOF0ea#@doB&$AQCaAH=&li=Ou7B zYXQt028>!mnUJMKBeaTi#)aDo6kMplD3tpZm+q{6jAq1gFju>EngdBTR0!aDm9x&7NQdT{aI0cFzBEbYS?jw8gNoOp9#42eLR|O4 zLUYotvD)TkBZ~=`T?y9&g2&p{mFts^2&U44c*W${O_c*)iW%JSqEoN@lX4mhR4wh3 z@w1ia7_S0c?xhPI%E8W?yES97Gq4>=0QdKx%4zK3n=Hi3#V6$(E4aW&%iJ1dVApN! z3=;N()7a5vfI6`BB;i6vCF$ivEcnA2@b zw87q57E#C$OI)VCfbeQwWfJS6!(euKr8e2kJse!i0-(616yNbx6UYRSyTC-6Ld+WD z#;4U?5GydqdY?d~nAQTd(nk(qkIBf^Ih`->=DLgbX!j%zZQ{nJr57UFQh%56SQ4xR z+mnc<8No!19_3gOx3f15FE)z+8(i5iXLq?M#hP%wf<96ha=FyXJjC?|gvCtuSJo)2 zOWdZXCAC6TK?8YwSkY&=ROLuYp|AI9>}`KIv$MBo26AT8Y_{!0tU&RU0j)P2N{lqI zs!0*sOO2{cOX)i|^zOMc4^BRMf_)!GS&+aL$lJ8EVo{7l(p5MBzha@<3MBinR6~5) z-3PjM`wmn(Wi&8n#UxPM?u4#?>I7HQwsz;PckD8=G2J!-uosE#ud=^YO+;kw46bL@ zu)u4Vs|U+4iy?UJNbc0v5si;sL7~i9Gg9{&8@0;8*gO6 z42{W>mtsl4`3A8TD2+^r)fq0U__dt&QG#^^($q2SQua_1jRp|MG6^fP0xqs5)^VS& z0K|52v<(QJDIr^C%k~NQ46@$+BU5dHmQIMo$TT1onQqRdEj!Q}Ugw@pPs&Xrvb}%U zk#{>|A&r1HTGkJLfi&nX+EbW{aqng@Xf!K}HoMa3>&h6*61`n?#yY~b3%-Q^r&XUW}pp|?A5u;zSfu$V;kC}Tr z(6BIa3n@^Htb(qbfLkPRsz$W#@48dhVlmoc7YvB1pSD{yEuQVWJpi5XqDs0o+GEt? zYfXeJQ*6|~oC_C11QIQKwS z0AA|Zl*-cf{sq0fWp_O7A}pY=~EkQ=zNcpB=8 z3E0>5d&DB3K<@P1jmPTp>@QW=H=-Lf)*i>zY$iTyms`hlwwnR9NotMObA2h-? zo|8X>VW(Ra)CVl+7LK<4B~2ilV3LNT){akOW^T#sZik}jyH?$NRc5k3Z(QfIs&>Te zJQ%0NicGS(L%qj^NKljBI|DGs)|^LE2NH#AaJ9*K_940Rn^sjR(ZM1C4OGv?WD^Bi zRNN7LVXm*E$=l7a>n_kv$IN-HFKr@JY*8u_sOPY8u&x@ZmD_;%zq(dhLi= z3!Wt6450%6j+!hH4bbj_nptq3W*dN2a1Ji4cy+Cz3vU3pu0JbA)fl%9k(OYOg^x0d zLV6VORqrMx0t*z(61E*88cf+3{@#T1#9lza>-SjQMc>08`|6I>Cjh9erT}!D--@rI z3~<0@M&}L3d+L3Q6=L{@==-}`*dR0Qw#kBWk@&gW55jny6?0FY7_OP_qy!A z{}#0GGQd$lv~*L2Ur#%WWu zaMSJJj3`!jFN%NR|NK1_Vpo&fB|5Z}GgW|G!PXS5eB|UdDzw@&1kPwjs_jfvD4GbT zQFpQ{j9n;$$|8**#K@1oQC2Ei z!`KoHjt|BD>=ai5Zi486Gv-jyNXcXdm2K_~^!Ofwj5bLx&~3W2uihC$HPI*>)c?Y++-rjb=2SE*K`E;9By)MhX?p4N^Gjht4&(-^P!2ED!K zjbC|!V67Keh=J8nd*+MpM1s2->>EU8Tb$siPn{T?5qE2;gKWw zymr&Juq{od0jo|*bt1?~rEm-n8dN@{gGPzizz3>52Ml;9&F)+KxfMP+nU6-;44bBf zyb-Z#E!xQkd;p&+l`g|5WKRpdnG7?WHBKl1I*50ZW+e{BgC@MKy)886y&GFyEVB@+ zQ;d$@mR$}!%DHxj09cZ->{%kfJy1ci)#I9DwhFgIuv-7+9%hTui?ia@z!0%qL`w84GUv+)W%%*EO1+e`| zFvhgC4?>?rqS`I?^NeeA|4m0Vk;Ta@vK$WGWidKZMC@itJ%3SgqYq4!<(Wy{MZ&|WuKC~fN|YBQ)otH0?s&Fpc#eF4aTAArL?>!s}rEJG=Y(w!LYii9^JZ! zTk|k-vPMj#@#3U^qy|s_VEag+85O!pd(6D>=GESe`R+HpVlw+%{8^&A9Zs6jgxdx& zVYp5Fc7zx$dx@ezmFd+%I#A?YO=N^%4ouXNx6mH#_eJIAZD-cDFZ{%>bU+zM!-uh` zsMlIHP|#H~$&$9yPj-d|$@D6C4-AL2%6131y}mEp9+}YibkqQ*M>d-!$&EOPg~YbP z-Rx_7KjpF8yoMWDcIZ{o=(C(pZ9vA zShzfSz0a{HEgP9CgeI59P01Bwoh%6_lLC77DXKVHvPML#nxHlxEH+n5@!b$cm`y%{ z)D9!CdlWlcp#Tj}w3(<(_*BROysxAy4nEP+KWS#EFa zo@l-mRfnPtm;iP#opvbE7>mIonayNIjD&-J7)Hp2^i zeKU#!AkX^~1;<$KaXRsCUY#RvHwYDx=>{JyXyKvj^u9ySM$Lk%N%5$;TLMTxBSQt2 zqa6boyH@i;IhwJ&ydz`Am{hT9vgeg$Ip9*HQlmzt7dYy>48{V3+2tOr=vDz~J0(-& zT}MDdMw|k5k*?Av-gpsHkIX6t5=o8N-D*UMW zPd?cHlZ+l@qAPqnRsfu7K^@|o#~H)Z3#u`zZ97ROs^aG%+awF0|KPZ>^;-}A=RWcO z)*c-PqXB>_?q8M>IjKQ8%bz%9&%)S-3fPV0VCcv)rOJPL!;aO zh+Giwr#ahqV`yicNQS*9cfe@}mc8{b+26C%ygr6|2{*Srxpe@{-5mqT+Jk7T$f9g= zYd(r&x}NmCu8a8u8nzL7pHICp1!CvEMfO0&)TjcAVtQq8G*^iEGGYT%R zJ|n5h0JqxVyY=TLDh5UZ+YY^<;SaOwKtp{5$7|+K)6ai|L4l8QtfhjA3RF*8q4Stj zbceK!H4Ju5=Ja`me#~6M&N5iARRyv*+FYPRX5q&f)_z)KZLgFVH*gRaTVta8icK=K z&@JEn^{bi_WCtcb-Nsux;;8a^!+N*rhyoBYic4p)1A@A8g+% zidikZE|@*y7aCOyJ@1)WR2OP24b_^x37PDIsIhG)=$7o0ie|%X4?C7Ny4RdA)E&W% znjU#jLjpSy>*s$sD*G8=^(O&ns@Qdps$id7yrG@Ml)eQkC(B7kwN$xCm5VsKW|EU&o`c99bsiE=mWR*Q36 z_w%#nf{;dmu4N~cdx{2tf7}4iq&@(=Y8o-J;HG-l*(8CssotHBjsmUob-@|uQJ}~! znHfcmiDLBRA$3W9pvo>&qtLO`vGbt4=QuE*-WG=^SsQ|@h-{YA*`6cbAhYPs0NK?H zS+EA6%l8bIba{0rPFJVGcec8~oBL)UXaMvW?> z#lo>imRn549YED?Nh(XP%Gh#>Jx~HLt_Iq`sATuOQX7t!6pL}Cs|ODK<v0Zgj?BZdh5b>1f#mqK|8!190L*R* zpy~u^9%7FPMZDg-8;tH#f0z$GC&u|-|GWW!?Zw>SM!okZ4jV^w@?0OV`LyaB0+d|| zjoh@Uw##ck9fi?-l-vz3`oV4(nprB=a%W*3&cn5368&v=sVy>zBpqYc&UcGwT>>CX z0zO#%zJ(nO?QgduIT=@aa9hg*T8|ut-S0PJ&3u+Gs+w-~jHapa2jA%6rV_W|+{5RQYLAo%2Fm z3Z^x>Ao;ac6AQRw(3Xf6;0)Bs%c+FE^d~$ilFIJ0mUceA!)`B{b9>OaQzL-;-}|_% z>>+2}g#2KBN?3#MvrJn9vI>Ce4=5Ln1lu6PKPg#&f;_jgzi%k9x#v4SBMTw#RO@e6 zf1hYReTF={#a(;tEz&ee#l&`%X=+&yizs8u^?KY-Z^r|elvLWXL=-QT#;c6$4 zfqBpsNK0X#+ap(Zc1Gr2@>E6_v_1jFPv9#Ys11)dJa&k_I*sH;a4X_%7!jC#zSM|5 z{lvUHC9|NYZ2@!G#bl|lNHpPz1h+q^?R{8mKIUUl>3&)}A8YfP>H~*+d+Cr@IyRmF zzQ_Bi1Zs8eZfW-Y5QA+skHgRF5R*PF5z}_{-s9Xd^}avhA>2dv(Qwy!p{awsKl z263xH`^zOkf>qxh>4q)XiTYE7G-BJ4bgx$ctVz}<_+(?N2Ca6fp;5T>#;L&x3{2or zyPrE}j0smC9-XNrsI1z=;~sr8Zj*u)M=>cDtZc)o9WYL|y_ZenuK;)<(N(CQW>U`w zQ=uTDiE+)X=mc&jOuN!;BZ0GSq%0J)Cvf@1J+v;Nf5X=HyLJRItWfz?PyAZOG6%3p{J@QR@r0eCj>O=;b5HH_NL zA+m6dHd5@BSvx&^l)~|`phJtYIxOyb94_eh^3yAP+1-&u-IpkBRHd-3x;>qpptsx709{-^Ql;a# zRCNM805GD%+J21z=-Lk9KNg(A1Zw79&U~nDXwj%-+6Y5=lRFHe63E*C6;v?JBIHwv zt2xU%5P;f-bon&V8K)lo+}M3y^HH9dD+#-Y z+~hgF$qMJ5ISi?F>ND~cT=S6v*(DaA5jm0q0J+2 zjoD{qoMjC#Laq{A!EQjEaqahe zV43Qc)A@d(TYyG4t*H~r7;R{GRI+-yv8Ip4<$Tcp>yOzE7x?kq^xUU?SLnun+0~Fu zWe*yuf?!m;+jUO(yv=HB7D1zL*e*{DNIh4k0)X8Mtz3O(^&J9~E-81f>6kZR4-E58 zyZaL94t2SocdH+x@N*0Ff)&Ja!hC(>dDpFO`tcwADCZ_oXSD#OU(%KkpWD{pBF&%c zr(+gBQQB325^G6$T1k6_<*C6Kn@9NgB#mZTtiLSUrf9TKMf;2KFCnuVH_w-^&!>GN z{?BZeT>NYEG>;n3B`-UHri1t40W(;QR(HR93!>Z}tX>8p2t=$twR=zS+9UlwlgwcT z*Azjk#Oe&k`{}kFsFidXEL=Rw%W7*JEkC*QlNaOX*ZX@msDYw4RLov<+$gXCFuIZ7 z{gMSHjG*BRtzOP%S452!oj0~gnbfN8r0X#4z@d5jaW32o4S+SaK&ETgo)S<1V;$x_ zV7np>cMxrq2!~D9hbg!HG|8xD^6X5j;j98MCkjy4_4H@0>^HJIVc)SpKJ{G7^0adm z{{<@Om;O+q{$Mw@y*|)D%NX}3$SlWR?&&_`Xvanbm5l9ue10MJ=+D|&M>RA50M<+;V6_jbdu(jwLN4evuw8wDp3Xpx zS5CE&Tuz{k$9EH~NHx9=Y=EL~6wjXN=hDB%{@Q$EU^5n*uxwRo?BNA~-ERLoUTEl) z8C~OVn|nkUpUM&E_1Krvb8#sFid}5?Ma2t@olV<6vTDWW&G0k+wj^dWe$}Fsc7Q&& zv~_xePZ}dtqFcFcyt^|s01~J%_R^6)SJCxkOV{CbXL$O2^+M9dX3H&}aKmoPNnKNOB;0*-ysb{!UD_t6Z5y6_}WKnQJ1Grwh;IQS6 zYR#dey7`Gi4g=Kg57_&GfkS%-@Q3%pa~Shfi>c`5;z{v= zM?OCMV<5~^beV&*GR~`^YS1h#71E*;l&su9Qlr6u;bRBgCk6K7e7Nfb;HCXY^dYwx zP9u4>S$of)$DUv<{e@zKI5c2yCJZX11oE^hpEv!<^1{xgH{D5hi#(hHnmph-3B22b zfU+a+2~V;R!>T<{Yo9CKGwGvu*Lx>f+O3dHTR6$*rm*~@E5s?ab`QQ8AIPN87P(Cy z!ACXU^|`TaixClqtJ)xnX#dB3q(|&l7cbl{3{4|b>KV@jtd;>)0UiYqL$%F=`}X=s z;KAL`1x+o0P7^~_ip;}ag#$VG-PJ@ZsF$!u+L2HblgYSB2@R~x56y(=sCEeNMiZsR z{^f#VBg1V21Guhc+@N=g;o~d17e@Ug?LH0aQw6h;Fdu=awv3&-PuqOg-f){6=N{wI zqdE85AZ20p>S&)HKS23kYMb-u7eGa?yZvByz;qd+qvsrPjLdYM=HpiU#p7Ahx8tXL zwcoC!d_J;##xHoY;mB$sBBnMRYN^gsYW8~;0PQ5pZpT>w#0urkT!}(kTNKg91fGO@ zXZL@f0@uP{6_!#yc z!cV(wb>31jy2b&pMbQ8NwUBjVgd2Hmudt0nm8+#0nv zNkwJxeV$Rs1hqa>BA;SZop{c3ji1m59~L{ z_Dv4u-BZcWmEfch{pNA;z(Bop_o$@5r9$-E*7nxtq|ca;rYd3wZKw!o?aF3%I0_Nd zg(7%pRV2{!EDqfOqqsXZmNs{!hrqArH_%Q${a;%gzlnYw^Bew*iD(YVfqDu6@=F7XYSh!jdOd)%6L$8)1`sg6G_*dCv4O0%ybHr{5-UFuoJq+4wWfLuTir7Xo za1ph~GxIU->9DkAUf?ck_8fy%b!NO&)4^bOeZ>z(>A0Fyz8(IXo@UJIh8o&NY5$P9 zT7q4@r@QOecyxYbmrFdPf*;OZ|8^GIY#LM@5frcbY^FTs1^YMtLQOqy z)sG~YIDNcSB{aO43fInmIBJte_H*eVC}nY^byB^PscdC~(L|(jFr!X}1xl|>KMr93 z1cRDT!8(pUq)_A$745ImclV@L{eOD^aW4}zIY^;wg)Z7Vok4tDyk+Ri=CY#;K&)aK@)X&9on-}fn z$sevE_%HJTx>O1u@-cA6s$O~8n}ADSJOFk#@&It~%`;eYyxv{8 zjq}T$K%KW|JW=0IcHN2kgAf=lDaE;_UAqMW zD7-p+8?Z4v+XDSSkhu$!y)>xR-Pvbd4o*`*RpgFk+p(0~tyLS%-AZu$=<_~{M9n-U zYBJ6mXfSNUaX=?8TQh>^#PI=|H-JNTIaFW?g~;bTeU>0{=VXah9V}sNv(0WgbvEF0 z^#IJ#-a_YSLrap3e?ozHu%#UW3|Oa=PRXgwfZnr^`||e385+$D(7|U(IQBrlO&c%6 zTpfqJg@AiIQB~v*`dwe?p{jQi+FQok9dnfuqLZhw1)$GYs&w)X6~h@gBRtYkv|e@h znSYL{rNQ>0hYF}RMyWlAAo(!KbHEW4_m7H zeH+mI+3NF#UC|*&CA6^|0EQ7@<6vi)i11^>^lD9uvJ0*nLwknOkCnOkf{7gr!S=Op ztBU>7=ZxJ8rzWYAo33$OpSp(p2N;w-`}L_6O6&<2&15*!LDhYJ^;qx*;Wwq5MXheH z)V^;$6Q>DV&(YEz37THXUN3Dbo#OWRAfalUDYX;V?TP~^m{40CF*5$IgQr4jN(e{oMY4_dwsQ;H!?x+D z4ciEbNEU`&nRL&g-v?~l5H|J42EpSBy${+t^ene4YB|lWXx!zP0enK(v;7T~N3-Pp zi~{)F%?^YgGqdVKm9-}&pY2N^MrE7H!bvT~Z1`zMgXbarZ4rF3DOMf%FuBo&cFC@7 z`(rb(KxTH;3Ntb{khJj*1F8(UE#@B3#c29(KL<2%qne1M$W}lZFr!=gA)h;Ch8dfD z+mL=TVx1@`ZpCA7XBDitnY+xRUK`Ri~ioM-fR@2~c+|68*g@_qX5ul{zbeBrauHvRtLc4rgK2pW3`_v{YO^_ z&|7;HUGF&>TwefpZ_TtluqO^~IJeMt%{?r(m%5CiHmZcxEbm1FJ;A{!39@%*c!A2? z)fjNx$gOym05uQJ0-g4Nn{Tyy6Mf1kCU{cePgX8X2DZ?l07O1#I0)w$NtLbbI#}2e zgai6)Jnk<`R5&sxi=g6K>qC4q3^$KzH*Em|H6rcZKyshELPpsf3!!x&ksl6$+(LQw zQGq5p^;7SfaVKOPgXsZ}Sfo4mYRw%u-h ziY%ZbgEu?q91-XZW3s58sDV>>cZ$h< zWszVUNvx&0iOdfqvcZ);Xuz!|ZZ9Y>0`@0$0Di3D0_ad>p5`Ipi*aE``qHWRQ=`2**A*wx#^yIbQxHRN)b(IYvO+aMJJQ$RJW*dcm10-4<7L*aEddb@N>BW&wuP5!Urwb zBr0qlJY>SvRGLOvgJ4@~b}rvTj=)~p?Z|fS><)T8*l^o3pS>oCf3JZTpNwXl8$VwDiGJ*!DMGO)crut8~;Tjh+cr zJKFA$Lp8$@Jr<{p)?;n_O>i~{Yr#=T~b@)>)vH0IIYYU@6l><(|* z@>y^@fUvA6vrOb!pxS);kE2GHuKNX9U}^i%p@d~cdor{RzcG{S=iH?5A5=~4(eppJ zu=tU+{P<(|k;zdf^Gr5pw`Xykb(x*0dYf+dm+gl4 zkIK4_u-YHfwY{TGSNX@6Xo%w@OduaqDbu8K6EMK;r+ZguV7q-DAKBt|n=`=A_z`;Z ziQK(;l#V2!0qI^fJ3Bivh)sEYH1iyKn(3Qrz<;a(PLX24*z2nYSM0P8hmp14{3%UK zLLwm~#@yek?^57&BAb}L7x-V6V*%`_S(7vv_NfGS3jv)nFnVl>c(&S(vb*il9`MZx zjwaYuH@Nm@J9%Jtn6eCZGTmUS3JOhoX&68eS(MVKao7qxnG%7jAgys92s{br+Ke?E zQlVpC$7dQ5j@P!)-0iB*TAydGxq6PJ;U0O~OvKX%Xi-k?duX83haEus>6}v4jhWyx z-{ddF4A2zP%45F9)=>aJ)9#z8*8^tGqTiLhk2DESz%;GRhNjyl(y^zuvPtegKU`gT zKmQ`;xp&5)xUwe?L}nLO?Y4nNC222HT#AI(PGR%pkB0WB0Q$ew0JOb*-})dBaZW#` zK1_F@Df30zY8hAn`M=8Osdb>_MB91n-UZIaIz_>UH;Equ1>AQBouMX<mFO+|TfbP_WZwALSE>O46uCh*}`q+>xCjub#BLe>eQt5Q&Si$7c9RfSLhl^hnCh zDeu>J?o+EkwGOLEy0K?3HEcnpe1y6dTMPW8?ntUiQ9|xUdosANXWHP|qJPH*HF`@E z&G~AN)%;gA=Vb#e+yAZd-*XBXwITdS8N=6x#Thwe5wn#*Ak9Jja-%Pfl^x_L^)dmg=1F-S9vAlFS0y!3FP&l zg#Y9U@!ZPZ42FN?(N!ng?-z#?c3UMun>-xlZaePgdX-h|iGnx=j%CrcyGMUX)Kv#- z-B+r(0fp+g+sNlfMw9Vd2g)MB%JQa-0~LeQKmirp$o&SYJKI455boxcL}x8z9vx4h z=y1CBEV-RO(NMC#DQzFA=u@PrPibsl4z_)f(i8_*Ym0u~S%$!CyMpx!N&~rLxFH(i zs$*2p?E8)xeLn2+{Gq&`=&CUd@5Vd8_OaSuh68?h&ps(gUwOLg%D(oK;qOimZETKH zZ-8uvsGaka0VhKH+S}l8a=s$FV&k5V0>bcBq#@}yKO)Ki92*9<4Jccu*x!tY$TSbv0yA_*6 zsqY$TlG2`#&<$MLA!wPvgZ&kHt@cQ=&Gn&eu%2-g7L!f<_?ev`5AaY2!Bw_tTnZ>LNpPIW4RAVE zdkNS1hyMTbAjC6vuF);Hk=Q1w{b!T^0GKYX1}p;BS=9%K#nbJ&fz;WN%~ ztBPCHzN?fcK5pE))HZ+nSlW^3yaopq!?BUWb_d2$%+T49gprHK-%s`?z76m5w&|jK zITo5&k-H|`gM9XcH8R1*^7_gmXWn&M&Izp&te6p=!?O zAp-2d-t7i+B5aF^7`yb@Ly1n84g_iqs>(r7QW+Yf($&I@bAN$Om>Qc6Q|){4sd!og zfjqDn0FyB{v!I=CwPC(}P{zZV&eooMbU6D{307%jHDdb!!G56Y{!c}dN3{!a?rNaz z+zjr+8NJ?5XDzAhEXuG{ltxwC#^iPa#ijT2NYJef1A8D)hd=P}AAk+FZnx3r_gvhj z)Z9U}<(2|43EC_6aNHCVMD>2}xrGRG$3#bm^v;t`2dI}aIQloz=qcvYTiBn zRs;FTGEQuf(yrJA!fx>t$c*O``hjd#9N3d)KFB?QEgXlvL5oJ9CgZ8@GI>U-x^=uBq z?v&ziI&5ub+NQ*Cv;;DGUL4j%xks2{Q=e%es288L@=xs*4w@@aajlOtI{Fs%!hJr80@t2;d6K4G4SN1)-k$F11GZN$h@C8R zCt!6*O}i7#I$QQYi0(&QaJn2QlgixbW)tWPC&TyZ%CjrXw|8oF9^oMuJxt%dD1nUz zxx1EVc?!{EAkS-0$msRaxwZMTignjO$9>>zH4g6rUr1QZ%<0_wEZ|m*@3X<@zCL>? z&67*8{}+vqXBi+>w@v#yF`OOrDtz)fbJJQ3=a1axEaDyd`n{k2#Ip_l%L!23A$r2% zGd|W%P~|!RcWo0nz}dwvz_B$&-J|K515|stP}+9&r=Y{rIQ+CMH|Vg3{&d6Slv&$w zvLEz8pFY_p&LR=&U=}p#ABBau2(zDGo9I6=uJ74?^B-@^O?l}5whsE@U5T}t<%vFz z9{q=mqqyI67jo`sY#;3H^MPWbRi7KTOgv%MfC|!j96=ri0=?^mZfNZToa(`8Pu~tS zLguk+7k)+}9&OPlp}~(B(mRRIVf^FYmG%ajdX9|O_WFI?KY*XxuHT~bcy3FDohs-k z=)oonwv>xKgRNlhVeS3YexR4a$$_cWlsB!SuuAiQD@gr5-3nbWdnE zKki9wPcS!6uY(GKZk8KFJHY(){yo&#{VcXe=}twD9Q+gTw%gy{*f!$_Bki=$RXaK3 zM-$OUrHO6qi!(OpdCt#iX#k3>-Q9EFKb}MRIk5V7f65L|ezNnv9liVV4`W`sLFJFE zrY|&m>C4@&Jb7cktvfv0uzQO?j87ecEQma-*gMh6Go%J=lhkJkGPph@9&86hcDv<# zSARaDY~l1&o+Ggz%%_WiPwI3^W?I@z$@A~VzHMbVb6=ms3r_EbP%F{)xSBkP-+qsu z{=NO7+BT@Cslms#UcxhQ<-cx#eG8AN2=sHW^V0W&X*K@2Kl;hDd*5$v9OT-xm==fN z+=HKR+IjP54K_c_3@#ex4U!2LMF8_67Xl$F#fk2;K9CWl757ij;nL7zL)i2z-3eD1f9)!?dSHREb;U1b=tT5oF(-z=aGlq z`NUKIRq<3$zjKUjBJJpPKObm%jNOE&#MGT5|xOEl(u7o#8!{9;a66 zomObujNrqVq(;%ZChvKHy8_q+2C;_~pIgK;bqIdqPDPPE7>5vrK$&LLrjVjn!}%s1 zDo-|X9MzlVttSid!CARwQgxEBpUcSZW3g>U9I&1~F=;!PEsr@TU9*=Ce*TyD>Y~zY zYVju`Z2z|%5kJ(0Ejl>?_{XI+@NibZSy>0W;_h@Yest~qDdm2oV*eEe{d`D&em$uZ zSzAGPHUNAmeO<;pc9A$4z~c$hUus7%MVU{%B_-OV#{fe`$V7cw%J{h0Ziuf1@*S$X z>VmEiRYB+2NzXaE>Bb)>tk=8w1GCO*+=0)sNGwP=dpEvjXx-G=d63O zuM@4eB^vPHW=+|F#}6=#E|iaKvrXAgy85)aejL&VQf+@`_gpRPbMWN8f2lJzQhQG0 z=dkz@!|an^pPZHb9s2_zY1=XQhb)KxUpBz!&tBO)05%NN{o{gAhcU}@8&6HEriu0) zJg@kUN+ic-iiwj?2t9^fAkE0? zJ5dzOt;p8XvoAUuRNLVV2R-m}qMjo6=h?e|vVY#r^Dkr?#fg4q9EbP^a(D=S-N5>}`ksaSS^xTY4mGrPdT*yCj~~kH{%TT{bx<^xf>r= zU!L{z^HsYN|G5=yo*VL7fXL=t0MRW}=z8Hj@C@-FZG`ySsSn$spPr8z&1oG5MTJ zVuFGpm=KYa!Z94@GBf=B7pdtGYm6{+1I0efca1KQCB)rw@o5Y|U*)*y_} zHT7~>068-2^eLWj=hDF9voHG4-4xz^w=A#~!1AW7bm4!ZZ5c&WJyfdw&jjE!B;@nh z&MSV3cJ?IAzht22h0p7EMPtQd{KFz3`2~Jl z0)2Yf&y}j32nxr`%*`C@4Pk7%v(r%TJH&P=?YGa6*2B2pk5dnRvav~?mG?;h@S~tb zAiE3o{A_a{pPSp{=tdJa-g`P_Pa#U?6Br!YI12G#GdP_zb#2sJq@4x~AO7CQdjc%> zL@16`=!QI4@RT>U{Y0Mg_9v_YpUB-YP9U_YJ=~MCyuWQ@0Uu}pPvmIc#?OSR-8ylm z(13RG=>zRep(Du!HqiZer}WD{L!vr%OKeB|eM<6iRDFEt&WnZ0b}r-3hjxexd=8!T zN%Wr=b;F>|kJr9D>^<|pD}vcBz&c)6kKK&g?&3$Lc%mG3dfR19_0fE6kQ%)^F!Sk` z?u#joG^_oC32NP&AEp*rg zM>9Y%{Q+!G8NKgA9rU4ylF)KgKlGtfjGW0CCE!?Z08J76h{(8y20YS?6EP^e_JHei zq5@F;oDukGs`O{>D7EkBd8VIc4v+u?*+xeB&p|*ekKSyRfZc|TMzR@`eD2oJxG&Hd1bZt$GgcxmIYm+#Q z|IOvySGBFRNJs!j54(7h;vavEbB%kz$5u}|*Rk0(z%zwTaA9!2uK(IQwcMIY-~(b+ z&nE*3B9zjR@}0?KpR-dae5sKTc%w|ArOjq6B2DWxo`cZiA zy#=BroXxa4(y6i~a6EH%#-*nD5L=)6BWwNf`1YULVygYqF2e~0HR$rg`)4cE^w*|K z->kFd*kj;)2I=fqoKT7V_}Mo51;Fvw%H;F7Yk$M-nDUA6z$yO>ph};RZ}7j>0DX{{ zCNqyNyEQnECGH8d|I2UlZ0rsWZAw%7ui~ge`&H!877G^2PTE%sV;)%8pnh~mJ~==~ zlqdbd_6pvZ^X{!YkCG6pWbAIiU(BM;sjCbl&H)%0Rg1oTFz&9b#XjL(d*)^21rMPZiXe`+s4B0_JXC@Ac6;?h%wd zoTaBv4Z^hZ>3I={6LBO_M4@V9DL7LLm_%8z2(IH*``p0e`}JHGaHu?uDfv*1{Lupa z{BwjSk0r#9zn>Tnz=m1#{Ls&L0IZE2J$C|nET({_avoNG6M24gk|`LwTH1(re?@2W z^?Z7|r@QfxhyZYR@lWFLz}a0`JNct=20Xbp=ysXjUlZNSe^i$EF?eQ=KjdbfK6AVu zuo8{nzv4uw&$E0a>z!?$ zFt$OVCmGn|Q=gBm{gXPntH00_0Caa5t4RGnja}K6BsZ=DsPz2*@80PO@jd`tBD-x* zo?~}aWh@dUaRterC#>)_`4S1ZkH~YYzZrNKfv7rSS}o6P3m9n=K@ZxfU?i4eg;@)z zIf^mnty_Dhy{t;17u7&6U5nOHV+If0pC?a|1TA=he>(uk993Skwi!{+FUDWLUTG{6 z%SXxxnKq@h4u}t)eCvm*fp|W4nmEy6kE32PXGuG~^>WxD*(zpuXql<<0#6>}*jQ7K zt~t;T1wodo7$2rZol0R#N4;WWiun^rIiI@*$HRKFpZd~`wJ>J2k(cKHWE{ltiakYE z7c}}!%>;lrrl>ZPV#{?{Y!OXW#H@2vow57V`Eck+Hb8vit594+UHJw*#>3 z2cTr9Qa)fR+C5f8LODK`Afr{diZAA@KLBwnl9`Wf;V1KE99a|L&P>g)XN%iZjX&*< zQ7_?B_>2sFd~-Be1Jw*W807Q#KxMNw&-b8ss`3XcSykwLQd_^qQln=etoQSh$DLVk zak;7vG524F;e~k3li^O8qDcud%lU^v^%%bCW7us2%3kDDzbO!2ADq``^PFCVM{H&E z$YHFR&9{N#Oj>kOJD)ES(PlUz`kZ=PJZr%tRI*0?wH`d4pEiB%f5qiz3sB;DHlJ&k z%0Cg8Hh>WNjeTElv=%Q z)&%p%&A#tNcCDL4d``OmfVzl106&2)h7)AOl$1CzkIQu~+d)|Ihil*R(xYm6y}cZI zYXSgBet`Shn;^0dtzU~omvJdBHsF`F^JOtyl$aPm{cHC}@orQ*9)MC9tS7<+(d_h4 zAG2U_NNhz#$9ud8N=JLEkwb~UH-bY&3rfQ)NFfc+%YGHK)uR%Ir*MY19{kVlDw|VD z`4RY7q2co*idgw7r*;oYz+iphyo!86uIt^WfhbtH9H9bg$-{u+>LiRr<%3RvD$_Dm z7^B7uF!*bFi@3<5!~rk9zyoX3e;H=A=Pp$nsK^!ey=2?_hzs|KQ1GEjFsYU(?k~?! z?JHK$DdE3%Y^L(DRYhW8{c`X$%<(DB=%oN%rSfq(r#ca+d?V5Q#%BahU-L3X^$gpO zZnqnZ0DuZyS58|3LQWXZ|3lFILB$JO8TYVT>GaM~W0Ve2U99WzZ-KCcp$?fCa9omm zCSJeGO@OW+#&1U#uYn6{Qrd)00QVx~V|ug$tLQ+{Oe^2$M6o;5Cl`9ZtBWFTVv?~M zC!l{4gjhH;T|>qPSRPRE4@a!WFkw8&)5$hT68z+Y>I;`xH2yjl#Fau<$rG+Dj7ZWB&amzv;M6STBy`8nL2_pDh zl}g~GS)&7nEY(QO6Js6J-|2(JTXjn64!g57I%SX2O>IQLd*j0Yi8H{oze#)Z50pg3v`s5f9N z`%=qk&8)W$p*)9ps>qD8gI6uD{yEez!8ia|ZHiyW{M?^*6{rD~9gI zi9VUUeC1~Ay;+@0I9R(77_t0ZMUv>sIZ<87W#Guei`IY>E*3r%Q^>?fN>mnWm6)lc zz?)~9(MEKq3YjC03Y4qeNhA3F{M`ZQV_1m08m+&4tuIF5EtjIp7S3W@5HH@Cz`cxH zx=MMsIaGfY&J@qe2SF9?Gj8^GRN086Dq{eHbbz?Q&;hj!)os!uf*PC zROpC@zmhP@q1+L@eO?SL3nVn%V5^{yrrI$2!93#c;n4HwoS&&=RI=-t*upl1Bxunv(d34c{ym%t>trB>uSsFcU#>Q?K z;g&Ba9}+jjkje;CkUP@-5X=XGl#K~8`MGhX91Y@=x8und5J$NAwWxp~p2~l4kG_{e z0jPP*c)hksV?n^o1sQ6`dc%c@Y>c~XB**SwfUZp7&L$l6cY#x04k{^^)04eF{{n|@ ze$9jm1oyXVXJ`g@Zo$3{=%}U*3NzCx32~e5j%a6Os)X7Igqitr8=^AFE*EU}ZHz+c zajD&eeN`RBq-%P|U5;}lSFEs68myY_^&VV%YM-^-*aMiI|HR39vcK&5j6{OxdEMCr zP@e5x8=f?F*iFz+w>{CW_t>PEvh^b{Z|cY-%lyQDuL1rf)CZot**>y0qCx(~7oB@( zw|wHEj1SG&fVx6i%)M_Nxn`~Zs-}*_!dHaN6PlWpCDO5qo-v{D&5wiuUjXZWF@ndh zp;`abru3f*a=CyJUfIR|Ueg3{)l(Ope`>>xnd<&)KW~FcHak}%sLofJfxbNgBdvuHBv9hUuHx3fQR`E*4SdYgDBY zl7%8l0Qoa^?o2I9j7j>JB9a$3a?(-cp&JpC$mix#^7Dz)Ah$}4Y+n8OR%?pr6B&kgzi27rh_bVctSk6X*DLdVB;U1*kZG0rzJt zB~ga~@_=VHU4f$VCL>9nMH8+Ceq&vp7TUd;E+PaF7o&PK)HorIbFcl|F9fxmWbZc! zjWQ8QqSm6ElG=U9+M)gVX9@82=~4k$btN=_3s;WwdG2-k`n(SE1kxY0FqC?vvS?NS zebm>T>zBg^w;PNioj*ZABFP+=n>+IEx_JOHPGG@A^8wVh-38URB0O@OM`~If%?tNY zv*c(WM~NW^Vak4CrSIPHw55uoEJ~H)tTks=P(n;N?FhOT8RaeP3Qc;9z&#@7^eXkH z!OhE)B=YGX5l3aaB=4fVd8EyZ;`p`#{9+ea3~_WNb>`p6e&Q?xJ2Kv8Y+ zEc*sT6;P~2FpsW?YX{{300%s%@ z#5vvq3wZ~Iu??YizVv_N*T7%{4W?73g$8$g0r=_TO3dH{9}Ib3i=W(|>smIu7SXNU zNGwiNur#dyJxSbO3&J}?t;-%Xx<8*xL=4mQmE;@*`JxPBVbz&M7P}CZpfo7Tv|GBx z`C1aI&H%)oyK<|)Za@1x{CR|>;Q7={?nTP?Re_qIW4lM|agmuBXR*q8N2T|cNb=i0 z4HnkemCkpIb(b0J`}KP?cIS~5t-43|L8=!R00-K-a#I%6gG2I&^0kytJ@bwZ6km+} zPX}O7Mz2fRnk$2yp=3t{W>FVf$0`&J+mI6EJ^Hfgk=HF?q<(+|PpRiL+E4!jFbN27 zX{OBCYs%efivz`ba<*@)V+%6+hYX0-xTL7MnEMnbs-$ z`g`9xZE@5K;Cz&ww})6_(Z8rJYbGL+B&&B@E^^`8J#_y1GB59FcUu)Fpf-KJ29?id za}mS~oBf3%t9;LjDYrE()@>e>=nm31%Dn;9WzbGekt9y!4Yo&h= zj1Z_&vQFX3H3N19)pi#pu542)x?P2Gc_Q+0mF?04q&xx@owG}Pc^ID{fJa4B+tCC> zf>(LoAwQ5)7t$lmB+|uR#^=oHnzj0iYh%8orr}j6E(& z@ZW%#>*9Vw6>-tKf&?QfS>?!do}tS8Wt`tFkkNCZ^{dx38DPZcFTU>8ZRhhxQLs$C z&Oh+8=L;Cs-;SMq8%AKhpZvR3`~KH&KQpenM{vs1%EdP&oQU8T#OM46e2u8H3G|$x zu;Sb^nyJ;-0A5D$`q6)g*fXppI6?MrO4T43;9viVSUcgpxx527Fz*-DB4Ylg(c@2_ zzqJ93Z2`yxH~Y83o_9P!)_NBs0)-P(ZRL6PN4m?I3o9iC;7*7j!S`}!5m%DEUTd39 z5}9KEnVZ(B!hV^>y4Tc|T%eyuRbGNyI_a}@?;8ERgDlP>%X&P^?^;f1yZV;dRNkjn z01HFhcEHFOiME&4KI2R!d^kf#?RH24)TI3wDWSN zp_kdBp`BA-YGMy_E{2JPevRFYcB(cRWH#J(GUfL3nmU0=)Z2kyqEON%S&4Ebm+a3! z7{N0PY%gJrcP&_$nw)U`$5!w1(t<YPtb9@hTw(bJV!H&a!+f!wMzoUKCYwM=594 zhnJP4@&8CvJ|8Et_g2JhhuuSY50? zSn~7`vGN<i8+7%r{cJN zb{SUr80BckSHxNY zcV4SJQ{Xlfp|G7m=I8w1*Q$|sV&}mJt`2U_x8NF?xuQT*LVWytYwR1ak|PnOT34r~+d=GYB>r7^xYr6*D6VN%vaCI|KRd?5Y}4YU0BJ-mKNo8*`S9MWb*SC>u!4Km@J2G%Kjqi;NYYK~{~(wCwR) z=RYiyO9Y9w<93dIeDq}i{Oi;MHywCBT*CGBZZOWvaKgTBNL$)TUr`3ue%K_5D){+r zWD+L;r`pA76YZr&HxdH-STZ5>TK%!F*w6Ct_%-=#y)QEbrM&>-{56ls zn$=n0NXRW=@ z`9-TL%X~rpiVOe%zR1Z+ssjKp|BX=Bi2o^o^GL@W00jWZNs4Luoo4izaNuOui)|1&W zr=ga4yx0Kk0ar|X@6NSZVTh(usLR01VebD!f*B_p`$LmQ?L3mHlDESD0i$LU(;TL3jCwwGJgnxrlXYd_p z;VSs;Fc@$R$^`~`+HNMEe%?NR`rlpIQJELkz6Pf}^nCUK!r?>Q^ya}!AKzb2<_1|l zp4E*X#};fq=RRWYCw_wODzeeS8a~gwlggXHAKWSc@YT-8zt4v3k7ghDXXL7B8j{#k zmFLD_2iMmpQBP9fZuRBS73l{|O~+vFtAEfy$Z0U-dG|n}^^+2Fj8M<_o#!fuB=ghl z>63!#_SWV0v+HHxiamvTUSbq^U(Gz$e5j_HIpmaOX-}V!uKwO{-8n70P9KAS>qj0-3et`WNXf*Uys3q zr#1*_Lv?6<37L3%N)JE}X__Fd2sRyle{Osj9PD)rDui5E$o>?G!VQ@|KC}U-zNBlP zKA3$jh(a2@fJZZ^O?jOcdyCJEC^6ry#VtJ&(tN2t93}=wPkjM$uBEb2 zKo;sRA#lX#!BQfccVSSo=2a=S&?UG#Y1j1=;g4+W#MN;nEudyq>FJ?lYYzzM%IV9_ zcVC1g1n|O;9jA9}e5mNI9wY!RgYpL7_j-j2j6-=`gdNvlm?T zD1Z(b=)rWNwk2LMN`W^E3jjcGc!)Au!v&)GEi6Ur`CIwcA&3i*Wga~=z*X3Caqz7u zhNJEC7R9b3RXsGJZYTUEkWI(?MH0&4?i_6P2HUKp>YyV2^J*~1u7-{^{~6*WP*-W~ zS-11;@6^a+v2T{`-A4HI%-I9WXm$T*`FdVO|Jmq(pvhkq&TvjE2co3}|o=t(){&{>B`-yC9s0~-u6-gFrdX-xv$1Q^M>;@M9{GSNvQOEw`1)O^!bE? zA4&dC$a;(`{o`+L*(LM9t}O`l*7o50rHG;n*3fS;^RHl2s3N)uCj84RUfuDk_e;<- z?Uf=UE_kxGIG^8<^axzD+84a>Z#x;}36f_aKQ9bURTt`P7uY0Kpdq)%5xHjiL~ft~ ztP2?fRaDwKBnlaS)bYL`9qRr@<5e|Jw7N?#Yj@rW5=Ru3ubm=B+PVUghX1#RETxhS zi4-QWPL|pt_xY2NIM>yWhhEqlRJj|$aH57knRkL-%{2$tIz?4bgp5>*?S@@Wy*hjh}5{Q`B2X<5>hkc}hm0px54sVDDcu zla_JP6$Ujf+>v?@k53%{20{|G@I3c`_LFh&spU7z2{X-C~YhlIRxPpdz# zgH!0ky4OyGcDUKk5XC!y+r?FmC3zV}-vH`U!LywVkFsR6skf2Y(`cgdf~wG8DaRV& z$)u(!L}59=Miq4iXA~A)zB{t8Ai?9{5AaXd)cpJ_hO39&Oby7$h02@uC(qMz6iQg- zFzcE_An)IpOCbAsLnFeub0 z#ZpEwrWZMv>a}K0QHV>z)f388#2{;E{JH1!GI=*2JQ0-BzZg6n;pRkb18qRrA`h_*cY{f$Win%ldu z{~dH)(1hy=^!}GaogQcsFbbzH>23TO8>xC{;JkZjZVdRmb^Tp`#h204^*QP}0`E%qF3`3~~^ zgB`Mk74=460`{0$J`n_=Q%sYL2|-ksO=9v-_^;RdDjb8^cIJL^Z3%Rm@fUPy>wv|q zDAkYV{EXKomNFe-5B1R3NHzQ47-H;?|L#i%o0^{Q-%D?(JVREvclY{I_D4W^ zO$OZ{(&*cg9j^$NtEFIotg8t3$gRc8#$3@Oty?f@ZQb(WwGHdPr-Fg>vtTzslQ2y1 z#sK3=D$B96cnlzbuJKRdSCecA+(i;ynmOfYb4hjFs+SkTCtPqb0NC+ zjmn?Wx!qOi1VpjZ159(4Z#ed70~4358-8&IWMT70uTBnGgRLs@MN^`$EG()iz~5j$_+G`6{7&6aJFRxelw%n9e6z=4 z+ktddnDG#jiS{RaDdH$JL^{JiKj-a!hHUQ=NT!t=3M!;Scn02Gx- z-wr;;^qW$UhBMV{WoT#5(pq?%sMc5A{_o-j&?>1%1q{5m4p33#7%53rXswm^m!(9S z176MbZ5(Q?ZRgPnq(`LeVwF&m6O$Hq(!D-9?1`VPUCRGbrQ^t6I zeRy;#gi@|C>a^Jp{AzxL{<;@Ob|!!JQ)wa)8Fqc3y^uf(0`T|AKAJP%A#gd&_Nct- zMQV=cdk&&j%92FNC!68|L!wBgEFP5tWrQG#lzVBn>U~? zL6y&6?7sN&?q4_ky2!^hoqoLgeJItF2CQFwRkmL8AOe_`Lym1^Nj_q}1v?H*Vc2`O z4@y@1RWB@5^0ezYhv*GWP8CN+7H1v*m5#YUWZBkhtVxY=W5z^S!>dYJxc+=ULC#tqNT2_WtReZec#iFc6Ye5H0UAa8{0G*)NsbD)<83`!Bl9qdWQdK zppn2izdgnK5sjtjL98NgZ?b0Hl0wQ7=7=&gbu0A&GyS@0`EM6(D=|S`KxD3)yuL^A zB$aN4;thatD5d7~pOyO-Hm`1HqHFoSXylsYK*Xx*73`*@9wHi-TB?B-q*~-Ai=dlhNYhr?@A=vuD$GbDZ&=u=SB}tEGqVD;_^9aFz z(DzHDlIPAO2s0>9N@m5oa7Nv9;=Ra%oR-MebrZA7+^>3MCg&=P8L<&`V=6}IaP=S>Hx_pQvy_rd_@iXH5l@z?BS&#LtO zbp62(#*iR-@kAvS6eXn`UXhkU$ugXrn84s#scNC1$5kE+gtTwd{ zLz-Sq8leb&qDbOfC+!7b`j=?PYmqH0u9U>?b+{)4Eu6$Crr^|1`5;%LGE@%CZX~QW zo?fYZWS<+CZx*QYm)Fz7A8WJoySYqIRC~gr_rJ5)Wedfx7(Z#O1}JmFyRguv#Ur@3 z1Ec<)iMZT%^=~`Jjemz-au^`ICPrbJEuz?sK|j{T8H)8c>HQ+d?r_3ai@HDe2*gm3 zdo&q7jIH(%NQ{`)|~?C-LWf$zSn#)heYAg|<_xU3bC)`SivPPhd zO8I(j7&tocLC_#6j1AZ1)?cV$z?x@)WOW4Hteg69;x0jZ{5>)_IihXy@g4T}y?!~E ztKN{=L2fe<2=hXyw^fEOsHxMag`>hR)g*Ue@0lO)(ec`s>P*PVT$gkaAQT`|C?!qp z9ot{NU0!>yw*}L~TiIrO=+LOp@%dj8&p_k&TGe@sJKyy1eC3|Dnm(z*)TI|?C0rG=+6(Am zzU=jQBsme7WmEv!?FrWwe~INF0FWMO6Q61rfgi$p#`*gT|2(Z{ur8Ogr3jnxJx}*} zawpFbNABZ~()~Jfu6e8w$1(Q4#Q02Zs3AAYth{@uo6ga#!Msp5T?Is9+t zpvzgl?xq&*pNvUPkof2<(N&*?d7`DNH<1lY4O`7l%uDyeB=v(hTo^8+?`%iWj|eMF`$N~8cJ-GC$Y{#tbN9*S(7ojKdi=`oNO)k^$7rJ zKeW$j@x-YEak>YxF_5{xaG5}frk65{(j{AE*AfvG-nLw|_8;V`u|HyQ&@+~*>tv-f zc4IV|AOS*Q;9`YlY;hhY-PCL>pPRV2_o2#i!rL_+q_MwXF~~~Ug)=af=lMCf?Z6i! ze*RwViwQQM>l)iExhw#v%9j(+0S$O-h(u;#LetJf-GoBr>tz*7va+We>BDN*$)LUu zV2xK*l+sNfR?4sa6w{e$P|%ATYDqBxz4*KdWCS~@&}MHf)Ohp12=M@cUX3wluRnt1Wu!Ig zpI`U?D{MN+URyd=qTSO41hS_UJQRh1Sz7)FI2di28RYi|+{`xIcXn#=E(~;B;?fmr zgF+&%L2;f(U)5VO#vLOFG`%t2V!HR!86eJ~8M8&Pksdi|Ao%Ubm666vHA6v$DS}xDX1diEY=Q{wP&%GU1$NI{m1Y&y%L{n2Hn&N6k*O5 zDRPpZhni#+to|2)0X3t+9cM@5Yd%XN6ctb%%iuISsy_;m1&V_rQj9!l@}O}AaJ_sp zo68i#&dB@EV{niJLY`V5l|)Fpq)t;Ninwnm^A#>Op;nQc<|H#r2P%w5guA-<4(;Q! zLm2#Tyo2K|3Z9-euBt>vJ>thNPrj9G0-x_t$@;gzfjx!kC(cnd_CMo{$&O_KIl5{I zD?gapZzZ*&ADpZ%589YEh(#tEAOnm!jis^Xhq*ygfASWV?;sp>#4-T;Mwc!AVC(Ji zv<=9mCt{~stP&DH(FY|m(_Zjmdn6S6f}$Bzz&^ae{%|pu3)R@LO=2@%TOagw!d9tB zF+nK)pQmR%4&N^JEB~27^;tmk%3-3YF*~L#ybJa3@?IP5HJ*mAhGMhs>|{N_JSs*5 zV2q{&qOO?TYEZa|rb41$E-UL8gq3-0nGKQ+c7$SHKauf#e(n14qDaK%l`C(*ByE6} zH--XLx4M)Jpp6j;r4y0mV+Mk6pE-xWE=doF@fNWklBe1>1w%&#ok$o(vsiWCZWL_GgC>X@cxSc50P~3dM z=ArGQDtoIiLD^Ml3)iJvBrld-ZUu{cnYBqjW*i_(>_-}3MQ<4KOPmopetlZdr43Qtk=1g`uFk3qQz%#JxF{Q8dM}1~SI|ui+j`=ePTu z>5E_eyCoMRnm%mtPf9Z9H42p!BfNMlDX4$uQ#YcFV%(-*atjv^U!!Z8HeHv@IF9WL zq8a{oFJeXUCyBzV#SCp>qychDfxqni+ zaMA)3ISs!GcbBv~a`J`9BDWOKsX2-xljE&L&<*ig=2muGd9=>!4pJ4Q=iT&}VBZE3 zC_R#iIFj^W>MZ#*So2ub8WhHZ*`DD5CGqxJ!GUmP&p?F#u1zo$({j-`Is^Q{_~Qm< zE#nD|=;nBivzwf#np*VK@OZtdKkgFnDELXUIi^S4hket+%2aXWx;&oV{U&}=usSDY zz+wNI60ggap>T|@y7D*HxT)oqvMdM!OVV( zqa~S@q96WmvGS*9sA;@U!k~cT48&HQqfNQLJyFMb&{sDvBx(ybmuR_B~z>>d1QnJc2F_2C}QxcFoDR5dHG zFHG)6b=Pq(BLEvcQ#^g53u7T^#kbeDMedtUVZ2G=d60MQ?tAE?CTQ3?#Xpeuu-B=K z&E%8>Ad7*HrI+qB$V;TV6IVuh0Z~fruZ11A{Z+liq5$M$d>2bq6`sE1e=+Y=_11XN z<)UoM(MTajg~8AwEpSe!{q}>^~xP~~sod#NiVeZ?`yDS!_*>4uY^(!lT$P+z4kl%+Ux+MMMp zo0Zbf&bz#~9IKOr25)!sW$J6o>*~mP$B-N9B%;unf z`bBXbjf)jfP%zz@@Wc0c6y&qg9mOZaB8dyH)fhJntyLTI@C7VhN zmQ`zuDqkopzuvxHzNP>UF8F>g$X!S=3oqyII)_2rQzz0eNqNdkPfL>q5LV2fyK??( zvp4D45`BOscdgZ*Nk0SbP|QVliwk#f^Pg4=Gb+4Nb0+Etj#8jMjx5*cYI*-G-fOBa zJ(YE3${WrEaq?N^=KJKpzmaW&!D2L>@C7NeG6F8M_Oi`aObgJ8g{v5L*Dfby9@qx|SxspQ8 zl||l4at|EQP%*lXSdL2d;OCVzQ`Df7vK@Z`^W((7gkTgG^m;~>>v_m>S>I)H?c!rj zC5#@yZ9&x97M6~Bhm)A1XYY71^e*4$*u>3S6x!@W2NF#@)PSw#XLYSKf$KH0#Hq^k+xa%PSZ-kop1Z7qQ~S5BIYFN8&=#nXYzsonUxTIiOwJ2Gk-yp zLSn6U+M^|FBbUTeZd&(?7_cOe?9iRKAJ=iNgGi-kT3*}EjYH=?s(qF`jFw-P@!jVy zgPgq`gwmcG?{2*?a>jg*GD20o=~lm3yu##Oad4tjrDmAbEgXTy+%B3}7=&#aY%f`X2UM0;+Qzcu?B+tfl@GB#2h_@Io>5Wj-vLH16PNxouj#sLQOP>S<_dx-UT8RLs5Sr0H>-dr zmeGE^JnQ330nuQWPrhSde7O(o5BNQ3C!C=cN9qZxfJQNaG(7hhdT%;rQnRwrG}Rz3 zgu|*?RA*=%f)PXHxQV5+8hiRMS(!z|T^eM;k1Bj@liqyY1V*zhhWjmeOj%80DL^`R zurM|g#Fn05DObZJ|2xW;5XM||xd{DhU6>T=7BMx?w)$?n|vL3kqXI z5~GPbam+=xkxT;XwI&V;b`EN+Stc74ahtdkeKqEyO}8zEkjq$dqau{*(8f-EcMsu@|*Yu zj!YAUg%+PN3r6mnOiJL&9Pc-J#L#jV71b@WlYg3dltyRl{R?M7)2TMTGB8w-bP57l zZUz~wUujVEL=;-aoV{mEECGdu5#C-t1_)wV<&I)zFj*Mmz40;JQ^$A5sej_;;#lC~ z^HjNfCr2p+=+z3jxC9YG`U2o?tjS^fooD(@Bop{DxDsWn3<9T+X3l8wLmaV>d2y&; zu(B#rjBDvyU8@JMEpE)GlF47FU8WZP>2M(}nAbJ+X%L8IqlO zLKO7>u|Z&p7*x{_5|ENh_n9692q8mjbYA}i2Cq4-Hgs}swqnXQaUW&N=1k>S7M)>> za(IoS=7+IpW)>%*K*pi=lrJh^gNh&6y~M3s9Xxcgt~6nZ3RGu#2X^%o7`*qBrJLKD`C+}L~F%i|~`r6YOmi05aGh;2Txt;Z;i9kRcQ*P#sL}PVvO(YMY4AyXHqLPbK@9!|b1Tzif7Ju9HdZ7I4JQ=>t(+4}T{A@+F6n@cHaoJ_b z?5el$YL2=O%Kzf=DPPVib_^A?>Xs@yAlLa9C)nftnWE)5WCP|`%Q9aKmU>1IKyZfG zPg?uR<9otL2oIbP{)&n?_$)`mC{OO(5*Ljk)ois?7hyiA9Xk$DrHfLKe`Z>VL{?U^ zNx81F4Jl)XV%JtLl^%07;jaUkG!{cDdu-y$fu4Rf8Jnj();Ke@`Yh6Sqb_Pi?SUM} zZayfwjz+|N+M*QmLGn1t!On^t&;wji&ST)l7f-c00ERQ9IEN}E`tgs&-%bu48TtEy1r@|15Y93@0 znu^nV_aAW2UQHp~mJha9wJIfFbYyr*AN6#@gq>>?ugO@^dT*vZ{`#^Nj;J;Bi0Vci z`eFF3M^YQNa`%pgHJr8oUBqwZZ5N0w`5w;hEa{)P@J;>w8V6qIYJSEj3t1(~(@$fd zPk32|NZe#L^YX^&GX*T9VLw-koyv}48P8omoA1jVq^Z76Vn3CoiAcA+D|YTjy~O2`VLKM{+p2ld%@qzSUVP&3bRp48N&F;0 z6%$(}ugSn&MEba`m%Y<1NCNR|Cf#jv-N_p52y7p*7=T#dZ*6fH}C>K|n0D5|0&*|Vne+2Vo;@d5ovl9&7zvNUK0 z1CR9iN@U3<2lAgb=v_l9Q~JGXO6b2Dbrz>*c%j&m)cDJMBQY*}DiHEo$4>lu+FzzI z)pnr;OQ1wI9ve)0s?W>St%(cwEp|>~8gT!h=az0}`=&%ti_26_lJEY`b)Mv8S{}F$ z(L=UguypE~sg=+5Ljp7z0s$#M(qEj~1~xW4b3eB~Or7Htgy2+^T;FCmp#lOuE#E9_ zfhe?RPNQ{?%Zg`k-GO77ujC#|flrm;808^5bc>;^Dptrv_Dk)JoQ>L~Wdt?ft;QG$ zI@bi>wx=P};P#Zq6=%)BvXw0xJM{Dgm!bIg`PaMp%}4r*pCS)nnn@@#{l{=K;s{@o z+m~UnnmP8am4mT@(QVFLk(&5#%j~qdZkLTCx%DOB(Qj)P0Z7Cv8}HH8R{gJ;{CZK) zOJh>VgKgi0eBJcKuCsC=gJ#D_#XP==g9@T~) zSg6KyMN3)MC}jAVs5e|RHX=^)+WJmisN(}n>b#6)fuOoxWLQCx6q|Qg zP3+sd4>Q}C$k=M-T>k^qioo_F09B`Bj*O>kfNf5u5UqPhp^1k?g%0+Y>G}!rX-=q+ zSak1q`xvD`Ni#q8G8OJUiHr&f)3>db~L2p_orTZTh&|F1YWGFNwv~`6GUifQxurV0R)WaQ4iZdAzBjIzunZN{4ko zy5M0@m=KNgzxSkZd|v@WcLUB=?{~h|vrFF7dtw{CzLvfz^{zQhEUt{9DwRS{`VYZwr?x;=VrFCZVcBVD08g=wsrC7oxS?6(b_e%2YSZFL) zP`IC9e9=4x7yrDF1T7GKB5^0bmR=r6+PzMJn_3Z%h=|UnG;9C82P&ymBkti>{ zV*{RU+C=)l1`;}{+6fQc8+G0c z-uBxAdh?gz-WSPAW8Z#J37d-5&TOoF;6B!Q-)X(8f_igVs#E$Ro1@#q}^0BDyk+8nUtw4i-}-wFRUK z0@@PXW0I}u)7gKwSgt~@g4G)-S7vZo9q1dtFu{%7*@ZvmNT=^irBf;3LU2lhr3NxF zFQLB|WWnjBw#KWIG9_4iNN057=E(JbZu}M381e)Ob6gSG)6#_&Eam#-) zmrF=Rb5^dMH6#w>VVmi%oJBdgV37{0*#7;&vS!8|m)1S+YZ;sBVXRrPWbPTo^zsb` zT)TuM->o-8H}x6np|_uj8$JxGy8Es>E&iap_Qfgi7@m0^UOzqygnTf@P6-_z#yU!s zYKK0HN)5=OBos)0fU&X)ib}T>Gz_*CIY4GwDDSg!!H}yq5u>ZzpMw&3LZguRB3}3+|oPx?%3jSBNtvdYh`#njvc~h0DqG;1-Xw)(O@xQ+LI%*XG;GTA+f_lo? z<(&PMyv*96aP=^UdFkZwIzqpn1f0!W2AtH_N4AQR*F~$hlX6SId74@fd*X`BIE4+A z;b}r9yWy(8*ca-iGTr?Ww_1$AE4D?_hBN5m%<>)&?dP#ILL`^;?2Y2OaaXweY2G!M z&?kTS`L-G8ymhS)J8$EpTOY9om3u8o$Z0{I_ZhC zyc|~1drDWvfmmE1@9a~bSxfg9AJEgp6l+bbI>?SXjoi>SeZa7`fDoL}6v;aV;i5S*yZkXyi<~Fg_VZ>J@ zH4&AT&DnSRh8=Q$8K$U)5F!tuGAeETQ_6^5@?Flm_4t^#9fAFydmjR*c6YxTMQ(57 z{02Fn-Mo>Ls4uFeSS1W?43c9BlJaaEnRoL6N#+z`O8zdm_|*gu{#`lHEYaos`;J<) zS)EicFgxxPiFcu(dwj&~St6;NzEUG@Ht-rISuX4DfPN8Ta}jTb_#wlrC-ePz#98K*1RS!Fnb zZMrZQsFDllNoY7<#eH>_uSQ#oS|X(@`d&}3ESaGI(XG=E zO9@O-VIRcdZx~G+rRT-ZOn>QRaWIx+gF2LM$>!VpiROTiq{Q+5EPuB0wS$SmVt*je zyeB{2P?>BNO;_R{b${}x}stphG0{R|mYiY%M& z4QLIqXUj8obAayyZV4%TULxN1z`8w5(0YZH1QY9RjxV0%RE6)st3Q=^?Z!OeGy5&((FN$c)xHh+l9y6mLR22C;-sYgHR@yZs zg>AMFEkSnT<~MActx&9B`j%T+b>9V}LbNt4rK2rSb*q&&svsT$8BKSnIwpxEws%;@o)$8V9WV0>s|r}Of&sLB!>Ts(Sw=YT{ki!OV6XT z5>E)mA2hd&_HSG>UX6Fu7;qurY?GH%$EnaHuI;(nJFd@w#i`c~RUwYHl z(-4Bd=H5L*K!8+elcczm0Upda?%4qhhW7lVTZch>w{1&$f@}Yh*5f%8hVNitz050O z>aIG3Kf%Xwuiue7)feo^=A^lj(AX>tX%jm4bL&;Fdd%Q zdTggHT|%Hzs<0{}!%R)jfEukkM}-8iQm3nUvKVu&tUHr>4`yhr7v7sLaI+OHghZJqIL;1N3@oAd7cL z!YdM~ze8u!4ds-JQcS+3N)+3?9ssoo!a#s_*!i<)$EW&JrHd zi&4=Gv0kq6Rmj1e2K?j1ULoqUlo}}DfD4HzeL5;}V*$QN)l4_QvvNq{&6McRcRwq7 zrwhp;m!|fJFgQ6F&38kTiJU84yAQZp+XsvKK^3}_y(2w!50|GBzYp#w(X;}I>C*X? zvT{%r|P782d&jO zLBn+vO+O?ym~U zfOI(|#!K2(SNT1-S;MxY+e?d{U?7d68%HOX^GDRVF)_<*)R6Dj(+hCez-7wIa}Rmb z#~ehfJ+iQx(KtXV?BibndSAJ}{bXI7#2)Re!D#zllzrZvJE59dSZ}e~O-ynF z()qT$fVwIs0ZJ}h*(F2q-P&1dDAfS?zcvav33%eKDYhce&+W>t{}P$(&GU&Y$leWH@c~vrFWVx?ETBrC*p*a$R~f$FZ&G7j+49zVma~SBaN3<IaXEcCWkjH6p@Ma|@Zhla+uXR#iaw-^#5pF{@BYoczuNFGj3xJ12~BVq zQim=dr_x>gJ|UlFcB92kN~tb(YI<(38 zbCl`ABCbnpqC9=0ju5W<@tSw%NwYOEa;YpGv(}D!>o9fji2l9u zm0OkmxNo)99s852zn*9%zmxNmRU$pc*sbPHkj6WSgHEoEu3}5s)T&qGkkfY{^iaxr ztwPvvEAs6q(k*o3kBwp|3nN=-l@-$hCflhM`mkvMdHUqlinpZe5#GqV$Yq-HGLHY=UMB7@)=oVlljCC*c#66 zx%)bv12w(;=Hwhb|DBO-JCCH;*1 zcH~klr+l97TSZeNd*JlN_}r#Tje<^gWyknGvrM(Sj61hB`X)(4R23SHG{bKer8a*o zgG>pf7OhUsc&ncuU#q#T7$E79rl!j6(AwTAwGKO9%Z^K^nynEiwo?I)(=z+qm(#7$ z<^^MRv?k&GE0BQIc2dm*?&l%qj4xS7IqJ_hxRpYKr_$+eYEeTbC&XLub(CZ?=P=`j zpvHU;`FcD5(7`WhM}|&2$ZN>4T%fmRXpJnsO_394;GRIPUu%rO+0tW@<9dd%N%^cc zhI=HFF+w=R$h$j6z5#nuRL`^6-L$*RS}=pcJ#&CI6%b;U65SL%y*!$~L`k2sab~)- z9|p-wwJBx~N}jznEGIFKsH6hERJKK)HaKVsYlOeY~C&qO{Q2y=P`GcKid zzw0^QvBbaiydsKKwwBFkrj9M7K*)m4oCJn`YQY|=4rl>8QaT;h$J>uqka5r{>idyx zMt|)#gwebE*>gCzgGu<8aGd*t&A5Wd;ur&F5HQjXyX@V7ubRbTU8!*Oj%q|UK2 zCI4-5OAy}8KHhB}=CI5_PkZ8p9Yv*rZJzycJ9IKfn;V$&;ZN}yo*B=Po75Xs>azU~ zXI=y4eR$W?)A!*zeD)%>@}^rt`gN702ano>Q+0 zx0b&8ju2~kbV2Lx!aQoB zf0dh$U1m|uBWgEV&;3M+GVP>#$_xD^*xPIS6ZCwdzF6W*f3XBw{r#P;+xS^y4RaI_sid=ZGFrY-9EK$eFbCvHfd6Zo(D!q>_REVe%V zx_&91jt~2ia9d|y$tKhUJ~pTTlyc`@opdtJO4P-^g1fBMo{tYMsehR!0p< zF@T@WwVB=dmm{*h`i?4LA;RTrN9xbf7PZEI0QU|K!%1J^#Y-? zw;V?K-2ZZPLu{1Ho>|I%u!8v4VzOX%;VpBs- z1m3z?ZL?97<6_gH;{GbL6|ga@d&|eRonB>;nhtxly*+D} z8^Z7YjG{dndgNI>E_$nFp+VbF*>W>@?_m+sgB?jo$jet`^;t!za=wv}#RXG9uvHAu zcuhltWm2bPk+nj7AVEtD5VBqXQQOy{2PdRLq)^+hFxNt=LsH}t(_~ov)xFcNQsjor z^=bO8dLa6r)ctExf#+GX^p{;(W_@1sNi9YTphFoSXsnhvKYr!w&4VSkd{+4Zx>)iT zSsrNUd3Cmd?#-ll!f>~>tBe{ATGUQ2)>*6D@ z@87F}ByXIfE!jg=|HG>;r#hyE&;Wapv%0&jB;A%felE&fs$!&4#)s-PU5=nMmak+U zEE$<4+$E;x0}cmxl{<(Z6*DatJlb|WTFf{#ysPW246d^SMQ_nlqQlQ5fr3m zb6~vux9Csa6W#Mc_1`UX(;mu|V-7h=G2Z}pZFcCfETG(N`19Q|gp#u^))erbCE}}o z0ipAuAX1!IW+AwH^KrLHpos(5E1I|Q_7SnQeC4r-&Ry5X&6x(Vz83a~E$EF`g`lx1$Z%(F_K5q;HyRgGLDNh%9P?ZBjZ zRUjfu#BIf#YU=8F+XdS@0I+teuWBMnQGsYeL1MKHhO!|)R(!DE*T-gr1|Mdb{Rp&PjOzXjNROpduZ}s{G8{3SV&{ErQ7!s$Q*~8}XXwZ$2|_&l_o(Uu3aN zLRO;My?Sy}1(JKkQrwF_iyy?XS}?{<>`0*tGI3!i`9Pld512=_Zh1XrLDF5f6n#e1 zw)*3WCKwi%I7=oB!YY9X@em_iD(eH0vtw`gbQ$YD4n`rTGF&r#YFhW|XDrLGHH6r@ z4mQ&-Lmg6^eaET1xke*z$Jv2ULLWbQr1mjB$>_5DdPc3|woLs9lII_DkRi5y4CKw+ z3BIn8%Hld4Dg%olA+48^&v8jd;8!}q&r!eI-zZ2@Xea>+KA9j=`8K<4v;Ha1<6gSe zW#dNpk1Wp~NnvSDr)(aGW~C(l<<=%|NLr*s(lCEWpk^7m~W}z{L5J|915P=!u zJ8}k3=PS+U3tIp3+XwU380ey}fE!Sh)0-@zS25Mx^ji`8vz*H9k(;_O%I0?2mIv^R z?1;|q3gzaL%vaj}pzC$L%|@>P7_}YqU)ab19m6-aH1I$zIa#)aCgcZOX=;%3bugqulx)z$M<6Q`x?%lD)DZ zv##GX=02t5omQ%?#0sVu#*&~C-i74HnW)bs$(k<_b~7u$kh|WbyI};?Sv?L>WgFrN zyFCMd)I({g(zD4(`qcn%y#DX%HRQ!q4Vz?IsWSiSH<8}mA95=)*U@*$e9-q?FU6y4 z%54+_jXm`3xyXr(arflj=1byYalX=>^MVp0c{bUkn9P!)ic*>a7Lg)PYmiOwQTpMy zUsQRS9rvDVLDXF?`M9})RgEKEtV}hkcHra8PvZMNaY^D>-X9ybc*+To@B9XrLW1-r z3329n%SfC)qiDKSE_Qai5q8vNYAFjszh&pCeEHA2!!SW84@QGf*TbRQQs!yolim^z z3L#$r>sw-zUeh=-!R9GDPXrxG-tXQ~j4zw?^+d}QG0?}-eIH6MD|1>X5h?xxuvzDx z_BMk8k!}7SRFMf;c~OqJIHC$MUg2H1f)$yV)@Ihpu=2KcSEP~Me;W1W>)VK6yaABL zgy3;W+&>&h-TV_4b}eR7Hoeth>S&au8jIx!I?N@aQTY{i3^&lZK6|3{BvUbKl2^yf z<|H9wLa&rssFM8$2VNTpZcB2u_O+(xA?7 zD}J>GsNb|Xq% zBi4mE&-FsI=gE_hgz=Pknk5qmR7znQ0Ct;w7HZ5ZBk*)w8p0zGX8bsP)?0Fwe%n{J_aNmi<~En`8D+A( z2%6n68BKwu$5%Zn-h7#h&vMF(T{kWnSF6f>%-ZgJDaSruHH%9ONV@1Fi{*jX1t{8a zYe=7AR-ycfQqr#n6+k6%H>QlPudo(CoH=2Bq(v6$&mpMtU}-Gxl)t(C7a9(GYqIZu z!P*TNPPSTZ&-djzoZA?e&E~_BRkvUPE?rgQ$|!R@pB+$a7q2$O-#Rz0{m5-^!?j@P z697MgP|Qp$b|}fB=cxf8^gt8VF{qQzw75mUT-fFp0QO|fQ1g7YtDeUZMTN>Tl2uV& zL9`0?;@C97LAPfkG4Z0(aaMehb0==RYQD?>FM=_eQY_0Z`^-S7|Ca;s_PaFyVOOWX zVu1`czXjHA^ir@n(#))U>k{c=pau!4?q2@Iu z*tNL^ne*EMcMQc6n9C|w&ZDkBG`K8M2JNWGtMVrYVL6*;R0;FtPHnG5$v!JiW9jIZ z4OJ@zK_XPwer1iyJs{LXXzZ=x^BZo8;Bh+w#sFN}X{2oWYeE3;P;cG~<@`N8e=0Vq zdO=utW*7wR%h`V3hS3Aj2X|jzA^mbrTRvW}wp*vq`?Fu^N>`}r=r)@hmvc^mFb5L* z1TSFw!U@BKwv^>6+z67SB;}KxzJsfeGX;uWNBD9@yaCNaFcZx_^Sz;{Kc%9=%enwr z(jyv61Octa@D$JwSv`kuGn<-Qw=_pO-fbia+_1yY2FP#pfoA$8H(n zO^ln}jY%)^5KK^PtTtUKi|c}^OUul8c{pD*Yv!>h+)9;{`Rl>uI^VV*!n~5aJd6Z{ zWt*hPxxnv@^P6se_@ljUB=;m2uUWb4gtT?eUltO0SaMJiB4vZz zUWD0YE6Ul(YM|tZcXwX^Fp=#}ZUqehV~R=hD|3O`=G7icDZCi67_-{v(^_V1ugA;y zpbCPdqN$~Mxzr?@V@kKm3US>?D$x*U%+TfZglc^Lz73o>t`IyiAc=7Sz;iAg9c`Uf z3vR)R;Jp$8Mw3_+#?3sp%=O|cyQwiA@PK`0Q|Z4RT0go zE#=M+lZauh&3-;FMK*+6U>Ba6WQRFh>{i@g!g@L1=Q5=kv#ZIMP)*KZ*;Rkue9!#i zn{m?|hAcbJGkK`iWwkCl{pa6?Fk_2_fbc{DK-@*O1*jOaJ&e~ht6q=>lUob#yrG-1 zrGqObEQt4+TP9<6>O+Ah0aLMhQ{=nE?);?~*aAdPTK>Flwg)dZ_1JY~4Y$l-6hyX}nh$_blgL+B=U)Ld z+b>2o z+xu1Cv0|l6sJ_=tXPa!EOCy@U+(dR$LiUto8}X3_cve*)#C1aFdejKPOUB7))QB)h zfo!jz!(UfEDE>#NANY7X>X$>Y!k+gwF5F){mc}|&gUTYUo z$d+(s{-lyyc{927cm?Al1;94>7gc=*iq=xS%YbhF>u!w!d5AgvTz0a|UJ(sK$@zvK z7GbJJ1hHvQ%;9mr0Y;tgUYY)2Ik`IQgWVc*z2kvW|P=*a#Jlw z3($-iE&?14KOBSRXHw5eL`gSXS7-KDzcmoNUHo3u=du%Nm)J(RX!(>qM4;6E+vfg zhZm5+=CuX3Z-#bOBPD4Z(f5?$8;nKK!746E0Y3LwOEwR7f@lqmK%hu^fM4vPXyzZcIQ;JY0Ap?ab#L3 z#>DO{3u|t0a?EIqD;Da`@!~D z#UjdoIRNidIqGguv-4haMU*mroTB#?v~Y~lOqsSN^X~7Ru@`ToEWMy>m+M2tf?n-i zw4)MVzWY8~GH{+uC3kN0xq(c^-$tc-e2Q&nr^wx`Img_CL+0|VO;?bE)+OG8I2^< zF34^WWrij`OKo_)X}|I`4!wbzO1L0B2-X#FZj+~~Oa~(TM+iMM?Z+BMC(-*Z}u*X&WEB7&U#Ud2OuRb%i<4Ju2Q-I z(Xz-y<_0kk5}B^rkCl2^9xrdz;Sk$e-Y7Rypa1n=w|&eS+Y_vFVQ5Bf={L)PimVtV zIj$rJvepBXf;RbOVTBk;u$cugOfl`QUjb0!DeM%1V6+Si*dP%r5WhevMAQMq*<)VI8xKQVLMxn2RWsm`_#pf{-8lxAJqgGZz}717`b zp@&Jm0*QL$v(Q7BT9I9&%K8Za&uzW`I8Cj;HmAGY6~L%lcb!1zVG5fgn@+_|hb9H& z)uAt1&cw5#7gEUWBmvzXo4RQ9EP7HZ6!VV+na z^_~IhNs~3)J!KP*wmtyhyXHmkvJ0@bKC5c|%bWW&rj0B{R+xBbAT+zjt?QuLY$sFC!;1gFdE)__=6IT=?=`bN*n_+6ty0&@q zMdhHXEyz9L11n_@U1sw#OWdSZYcXfl44ucb-E`HKc1M*@!zrfH>u5(&W3W~g)=wuP z)}g4)_IDq|!*jFLd`3W?_kNxQ^EbFrXh`$7QETm;YVSlS&6Ga-4xPd6R9UDRO)zsHAT`P_XHf7 zRf&>lJr`CBg2+i5LzU3c=lwqXWmy#S^5GC973Wf9465wo`zl-&Kqz0WiPc~svcfo0 zi!22xs6W2KxF#E-5qz2J%sCJ(24IC3VMP0|Sd3X{Wsw|lwDUkwdT@#RWdtx2T~1{JQ0+|jlqgjb#$4=tey$6BWAc5enu9Ss%qa?1h%=U3 zjDm6dzL(!$QUW2&9o7-&Y8D0T*3|3T+%4iDOh*XC(x04|FQ#SmQ_$2+R=lyXq1u$t z<&DU^xNyNe;3t!iQ5&-oQgSs2t``Zd;>O%WC2UOe4vQrA0+2*VX$%FKIrqefa$wTT(;61Q zJhkm)iJt*M&S`;d>m>pFEx80yT!Iot*W!%6XqYBECZOE(P5S~mRP|RR8zqW8UR{=W z)_md8{L2Aw3uBlrMV&~KqG?wLwUi2sdT(N&Qa~=jfEC$P2*j^DnPDxjEllBUDg;7S zT|_&s3=$5kb{YgAmdB6y69s(MG+k;2;-PYMGjqD1k1e{ zT!VJ^*(Nir8o{f~k1K+re97?43NVFv&Y3rW*jJ%b=_!GM#>8SVE9wkD1ofNx~kn%g#_0A*U077?a!8KLIE< z*H;!~BUgcZDSghk=#+|eFe3oTR=&y4My9)SSFRV5{6*?=B%}~wGobGE8}+B)LdmhN z24FlIh$1c+7a0Qh8(g~PtCcIQueNz@W;$!+o6dE4Bd;$6$g&f=Fb(0Y|hjlRnNLEoE zCc9qtHSh2g5K2_@HvbvLsEc#4>+KXfy;2@@rNV&V+LDeCMO*`7vw6uji|c}J zkGH$B|Cpr#y6ik1`_?J_d_i>W<~_Wb;XOGB2SCYVwsEVDl~_%vZoCLtHR#(dV;gF^ zcbR$oXKDawJxg7t*HvWs+wAwZ=5*WaK2dg8yJ)tw7QHAGBp>&FGo5g=1BK29CXCR- zN`=Ytr`x-`Ysh)2hugMgi(l3n&S9Rm>4E&rbT+%FCtq@5PCPSYE(+Ps7MuOdnY3`RD0FMiBM7k;u>P`XCu81hX*Uz**Krge zqCD-!vu3MJPXG|@d<83(ZtE2>&e8f_KG~7D+W=%$6r2c9ZpS1HArp9BzrM#Lv#|Zb zq4N2^Ft=_-UH*5?^yOmSk~ zLTm&R^aef$p#msFy5A=AOWd;=W84(#aV@pCCQR>v1Ob%{YgaZotahD(>*fhTpWSm8Swrh00xcj=_1KC3Gy?i#tAM8 z*OTwy>SnfdseT9G#;tb%-l)Sblo%HM2hsgiZ!O8$q&GnFiClH8~MfCVlGjutdnH}P;4&KN8({Kk`5dezU9RMnNc~qPy&bsnc%;Bv_^w=kz>MMMH zx+a@?d9Bq261DH?1l_ZL9O5|X^Z1nT`NNB_H*A7hunYhYLk{P>GW?hUmqi>Uy4HA~ zBKh-IpgZ&c@>pE`Yu{XiEf=zvo z6Uq=;;8kLiJ*#)w|0@uE!S+A%-ws*a;P7^kvG5;0l;la&)PQH zm~EIr_rDqV6Z7W@)fg0l`|0?g>E2?7ZSR4KSnCE5?#;`vX?g{NtVQ&;v@6gnSirp8 z1JH)Ao*-ob6St$o>3*c&N@?|>$qX-)m+l@F!r{Q7qJqaMXTVaHh1BqmPZWkv26<6< zn;*{&SFdp8jcPA|$yvX~aQ&D5^?N6Qqp$EN=Ej9m=a=#ZPz#hIYZ?qx!51KLTS@Hm zn^e_GM@CyLIgfM^p>RI<)sOD^)Y-Sh^xd0KgmB@xtwSrLE zLWNm|R{q^(eMRX|hycKr@G5*cK~QK{>Hz>tSoH-~}B zPjV9FC?6R>9lT&!0XSQ_{a(bg`nnWPmD%xKYFHtJnb`xJMBQk|7!Z02kmq6;v}% zmK?Tr<~)nU+Ryf9TNe1~d5O^irc|Sfo=)DTv9Tu3Na#mR-H`-1nT>R7@v8xN;HZ-N zj#ytZ02u?@@f)W;L?A2^QUD+?XTG-OjnOMWO}IPUFfRQP1Q=CG1MVI^t53fOl~xZ* z|NY0|8-QO>=993);m+uw=2XT6kpm$F0GOiQ6PCC~Oj`$7!j;Zgl?o_W}q zqPIEBkVVGdvh zGgHw-j_(hkvJYLN%ktz8_Z-6ssh*9zi_$To3C)7 zYJTV6lzjg0e!`T6v30*6whI8nC>zTF;bt(%QGiw1I&cO;AHHTF`k*e3w>#+ZLK?a+ z>!0gC?<=|LGVL=!bqD|ehST-K{Ej<$F{tc_ln1V|yI>?7PAJo@0(A-^J^fXk)%*?t z9Xz)Ge>lbeRsc*uhtzHuLKyQzoInI{fr5EJQLDWX-O*N*NMSY*l2YuLcsejm@Vvj) zr+ZTQilU;I9!X^(ct1F{B29@2ki;Nz%BCZJ>oi18E2**;Tl7{}fv_h$W}T@dnv)nX zSNL$4uBS)es?C8uJOEHmbeH1_DFJMlz0vlA%0e=?DNvEF|K_*u2j&O;T(I3AM$*B03YeRHwv>rID)SLu*Jb5$r0m^ouh>$(Xb`C zc#jaWW|0aH0KtLDiXM_xV~Q0WJZmEWkz&|y4E-Gj7JG4$w}^+B(#il(xGG;_7GqDo zh!)(narX4X;~}OB0M%{vA%3X9B&6{8eq8t5GdV5TB5)t*6O78;ZA*R!^8TiY5Cccg zzM1+Xa$e$BcDg{qN89$3+u9O%W;|`rPmpE&;R6%@EyCFOE%$GY25j72%MXBSKEF}X zEHzu*UAC15egnx(pW^Qv4pXt8OMaM(o!NZS3_?WIPwkuJNm&; zJsHq|@d8|}C8X|`L4h7WT+PWs&HSmIYSSV>+R>;Yss&N5C%=f7aods;vEruJ!aZ#d zl)lP1i_=rx`?dqX;q}(&6-!ES&us$LE`TSH>*FvjZTl;r+y;n9y;qtNDt4ne0R*oC zMo9h3f2q-L51^UHhiDRs3f~q25GH&;1a>$+T?5=F$-GMAx?s_1_H?hf5ZKe_R;lao zssJFot|N*YMkUeh%NwoX`FA)n3wrzjghYMgd3SBL06CM8cGXF3dDEs~#r;4ZeQgcR zRrl}#>#EviUn?W)p}Pl${YM)OfM!?yJ@;HCxyD>+06Mn0y#3VpM$X$N9eX-WTb8~3QpS$Fwf)pq47n&3w!0LIdLI8B5Bm-X*OVhU_6=>}jeS=@GFStwFZ_{n;NYg#~$0dT5NiDd#YpZhvo8}9%}`byY0%)HUf zotz795l|LDb$9GCuBn?|u54QYfd2S=%exm41f{ne4k6yw_0zw7Y~`Kvh47MfKNo-o zf5=mQ>tN1cfJytXrwn6GsC-w1;=_Z#4F5qY<*dWM0@bZltPLfAzwv(f5^-}?mo4S0 zXWWcbC$fD6hiS79{ofs+!Veqi`22OorhU$B!gqEGZA~$B8ydP=;v)%+Ygr=zqS)h4 z>z?rnK)L(z{*Hv|{=cM}#{&q3JroGAnKUK5qK!IB%-|l9N%xHmWJu9B1cRs?Nzs zx(Erm)VW(z?OlACtLVBf5^V?pKni0=*LVlYV^4JV+8;{dqOV96JxfRT!x zBcX7*?FEVlM3Pb#knGvjY^@1yYg{*`*dFtok@lzaug&51(HwRURCE8*HDzP&0Dw}=FDkC

if;4wN>9uci%9p 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≀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

  • wFY9}uHNK}$%)1{n?sWS8x|JX4 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 literal 0 HcmV?d00001 diff --git a/models/retinalOCT_RPD_segmentation/sample_data/8c85a17e87eef485a975566dab6b54cafbabf1e4c558ab7b7637b88d962920af_oct_027.png b/models/retinalOCT_RPD_segmentation/sample_data/8c85a17e87eef485a975566dab6b54cafbabf1e4c558ab7b7637b88d962920af_oct_027.png new file mode 100644 index 0000000000000000000000000000000000000000..e0de9a3eb84402de43c61b4937018d8578893ecd GIT binary patch literal 217808 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�KnEhnv+{K@Ld)W>g+ci9GedcMyypGsTH?J`XW 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 Dv#@aT literal 0 HcmV?d00001 diff --git a/models/retinalOCT_RPD_segmentation/sample_data/8c85a17e87eef485a975566dab6b54cafbabf1e4c558ab7b7637b88d962920af_oct_033.png b/models/retinalOCT_RPD_segmentation/sample_data/8c85a17e87eef485a975566dab6b54cafbabf1e4c558ab7b7637b88d962920af_oct_033.png new file mode 100644 index 0000000000000000000000000000000000000000..79cbddce6cd19c3353994ff9b9977b69efac725a GIT binary patch literal 201337 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 z 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

    `;1>wlAzU? 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 LNkvXXu0mjfC&)7i literal 0 HcmV?d00001 diff --git a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py index d57a76e6..61118df7 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py +++ b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py @@ -1,12 +1,14 @@ -from pycocotools.coco import COCO +import json +import os + +import numpy as np import pandas as pd -from torchvision.ops.boxes import box_iou,box_convert import torch -import numpy as np -import os -import json +from pycocotools.coco import COCO +from torchvision.ops.boxes import box_convert, box_iou from tqdm import tqdm + class NpEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.integer): diff --git a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py index 961d2b09..7ba60fb5 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py +++ b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py @@ -5,36 +5,34 @@ Yelena Bagdasarova, Scott Song """ +import json import os import pickle -import numpy as np -import pandas as pd -import warnings -from tqdm import tqdm -import json import sys +import warnings -from pycocotools.coco import COCO -from pycocotools.cocoeval import COCOeval -from pycocotools.mask import decode - -import torch -from detectron2.data import ( - DatasetCatalog, - MetadataCatalog) +import cv2 import detectron2 import detectron2.utils.comm as comm +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import torch +from detectron2.data import DatasetCatalog, MetadataCatalog from detectron2.engine import DefaultPredictor -from detectron2.utils.visualizer import Visualizer from detectron2.evaluation import COCOEvaluator - -import cv2 +from detectron2.utils.visualizer import Visualizer from PIL import Image -import matplotlib.pyplot as plt +from pycocotools.coco import COCO +from pycocotools.cocoeval import COCOeval +from pycocotools.mask import decode +from tqdm import tqdm + plt.style.use('ybpres.mplstyle') +import seaborn as sns + #plt.style.use('/data/ssong/detectron2-rpd-yb/detectron2-rpd-pkg/src/detectron2-rpd/ybpres.mplstyle') from matplotlib.backends.backend_pdf import PdfPages -import seaborn as sns def grab_dataset(name): @@ -630,7 +628,9 @@ def count_instances(self): return dict(gt_instances=gt_inst,dt_instances=dt_inst,gt_neg_scans = gt_neg_scans) -from sklearn.metrics import precision_recall_curve,average_precision_score +from sklearn.metrics import average_precision_score, precision_recall_curve + + class CreatePlotsRPD(): def __init__(self,dfimg): self.dfimg = dfimg diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py index 31dbf260..6080184a 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -1,15 +1,16 @@ +import distutils.util +import glob import os import shutil + import cv2 +import pandas as pd from PIL import Image -from .volReader import volFile -from tqdm import tqdm -import glob -import distutils.util from pydicom import dcmread from pydicom.fileset import FileSet -import pandas as pd +from tqdm import tqdm +from .volReader import volFile script_dir = os.path.dirname(__file__) class Error(Exception): diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py index 92314063..c1cbbaab 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py @@ -9,10 +9,15 @@ # Kris Sheets, Retinal Cell Biology Lab, Neuroscience Center of Excellence, LSU Health Sciences Center, New Orleans -import struct, array, datetime, codecs -import numpy as np +import array +import codecs +import datetime +import struct from collections import OrderedDict +import numpy as np + + class volFile(): def __init__(self, filename): """ diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 055dddb0..1cb1fe5c 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -1,27 +1,28 @@ import os + os.chdir(os.path.dirname(os.path.abspath(__file__))) current_directory = os.getcwd() print(current_directory) -from .datasets import data -from .analysis_lib import grab_dataset,EvaluateClass,CreatePlotsRPD,OutputVis -from .Ensembler import Ensembler -from .table_styles import styles - +import logging import pickle -from detectron2.config import get_cfg -from detectron2.data import DatasetCatalog,MetadataCatalog -from detectron2.modeling import build_model -from detectron2.data import build_detection_test_loader -from detectron2.checkpoint import DetectionCheckpointer -from detectron2.evaluation import inference_on_dataset, COCOEvaluator +import urllib -import pandas as pd -import logging import configargparse +import pandas as pd import progressbar -import urllib +from detectron2.checkpoint import DetectionCheckpointer +from detectron2.config import get_cfg +from detectron2.data import DatasetCatalog, MetadataCatalog, build_detection_test_loader +from detectron2.evaluation import COCOEvaluator, inference_on_dataset +from detectron2.modeling import build_model + +from .analysis_lib import CreatePlotsRPD, EvaluateClass, OutputVis, grab_dataset +from .datasets import data +from .Ensembler import Ensembler +from .table_styles import styles + logging.basicConfig(level=logging.INFO) import json From 0676427d8decde316c57f813f78c6f2122cb8132 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Tue, 25 Mar 2025 11:44:29 -0700 Subject: [PATCH 04/28] Applied changes from isort, black, flake in runtests.sh. Ran pytype separately. --- .../test_retinalOCT_RPD_segmentation.py | 43 +- .../docs/README.md | 5 +- .../scripts/Ensembler.py | 97 +- .../scripts/__init__.py | 2 +- .../scripts/analysis_lib.py | 1077 +++++++++-------- .../scripts/datasets/data.py | 69 +- .../scripts/datasets/volReader.py | 149 ++- .../scripts/inference.py | 196 +-- .../scripts/table_styles.py | 65 +- 9 files changed, 922 insertions(+), 781 deletions(-) diff --git a/ci/unit_tests/test_retinalOCT_RPD_segmentation.py b/ci/unit_tests/test_retinalOCT_RPD_segmentation.py index 7f82570f..79c6c80d 100644 --- a/ci/unit_tests/test_retinalOCT_RPD_segmentation.py +++ b/ci/unit_tests/test_retinalOCT_RPD_segmentation.py @@ -7,24 +7,23 @@ import tempfile import unittest -import numpy as np import pandas as pd import yaml -from PIL import Image class TestRPDInference(unittest.TestCase): def setUp(self): print(os.getcwd()) # set the bundle root to the directory the test is being run from. - self.bundle_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..","..","models", "retinalOCT_RPD_segmentation")) + self.bundle_root = os.path.abspath( + os.path.join(os.path.dirname(__file__), "..", "..", "models", "retinalOCT_RPD_segmentation") + ) # Change the current working directory to bundle_root os.chdir(self.bundle_root) # Create a temporary directory for test data self.test_data_dir = tempfile.mkdtemp() self.extracted_dir = os.path.join(self.bundle_root, "sample_data") - # create a dummy metadata.json file. metadata_file = os.path.join(self.test_data_dir, "metadata.json") @@ -32,20 +31,17 @@ def setUp(self): "version": "0.0.1", "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", } - with open(metadata_file, 'w') as f: + with open(metadata_file, "w") as f: json.dump(metadata, f) # create output directory. self.output_dir = os.path.join(self.test_data_dir, "output") os.makedirs(self.output_dir) - - def tearDown(self): # Clean up the temporary directory shutil.rmtree(self.test_data_dir) - def test_inference_run(self): # Override configuration parameters override = { @@ -58,21 +54,21 @@ def test_inference_run(self): "binary_mask": True, "binary_mask_overlay": True, "instance_mask_overlay": True, - "dataset_name": "testDataset" - }, + "dataset_name": "testDataset", + } } # Load the original inference.yaml inference_yaml_path = "configs/inference.yaml" - with open(inference_yaml_path, 'r') as f: + with open(inference_yaml_path, "r") as f: inference_yaml = yaml.safe_load(f) # Modify inference.yaml with override parameters. - inference_yaml['args'].update(override['args']) + inference_yaml["args"].update(override["args"]) # Create a new inference.yaml in the test_data_dir test_inference_yaml_path = os.path.join(self.test_data_dir, "inference.yaml") - with open(test_inference_yaml_path, 'w') as f: + with open(test_inference_yaml_path, "w") as f: yaml.dump(inference_yaml, f) # Run the inference command using subprocess @@ -95,31 +91,28 @@ def test_inference_run(self): except subprocess.CalledProcessError as e: self.fail(f"Inference command failed: {e}") - # Add assertions to check the output # Check if output files were created output_files = os.listdir(self.output_dir) self.assertTrue(len(output_files) > 0) # Check for the COCO JSON file - coco_file_found = glob.glob(os.path.join(self.output_dir,'**','coco_instances_results.json'),recursive=True) + coco_file_found = glob.glob(os.path.join(self.output_dir, "**", "coco_instances_results.json"), recursive=True) print(coco_file_found) - self.assertTrue(len(coco_file_found)==6) + self.assertTrue(len(coco_file_found) == 6) # Check for the TIFF files. - tiff_files_found = glob.glob(os.path.join(self.output_dir,'**','*.tiff'),recursive=True) - self.assertTrue(len(tiff_files_found)==6) + tiff_files_found = glob.glob(os.path.join(self.output_dir, "**", "*.tiff"), recursive=True) + self.assertTrue(len(tiff_files_found) == 6) # Check for the html files. - html_files_found = glob.glob(os.path.join(self.output_dir,'*.html')) - self.assertTrue(len(html_files_found)==2) + html_files_found = glob.glob(os.path.join(self.output_dir, "*.html")) + self.assertTrue(len(html_files_found) == 2) # At least 10 RPD present in sample data - dfvol = pd.read_html(os.path.join(self.output_dir,'dfvol_testDataset.html'))[0] - self.assertTrue(dfvol['dt_instances'].sum()[0]>10) - - + dfvol = pd.read_html(os.path.join(self.output_dir, "dfvol_testDataset.html"))[0] + self.assertTrue(dfvol["dt_instances"].sum()[0] > 10) if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index e9695e33..11730193 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -89,7 +89,7 @@ Once you have the scans in PNG format, you can create a "dataset" in Detectron2 * set `create_dataset` to `True` * set `dataset_name` to the chosen name of your dataset -The dataset dictionary will be saved as pickle file in `////RPDBundle/datasets/.pk` +The summary tables and visual output is organized around OCT volumes, so please make sure that the basename of the PNG files looks like `_.` The dataset dictionary will be saved as pickle file in `////RPDBundle/datasets/.pk` ### INFERENCE To run inference on your dataset: @@ -108,6 +108,9 @@ The tables can be created by setting `create_tables` to `True`: The predicted segmentations can be output as multi-page TIFFs, where each TIFF file corresponds to an input volume of the dataset, and each page to an OCT slice from the volume in original order. The output images can be binary masks, binary masks overlaying the original B-scan, and instance masks overlaying the original B-scan. Set the `binary_mask`, `binary_mask_overlay` and `instance_mask_overlay` flags in the yaml file to `True` accordingly. +### SAMPLE DATA +As a reference, sample OCT-B scans are provided in PNG format under the `sample_data` directory. Set `extracted_dir` in `inference.yaml` to `sample_data` to run inference on these few set of images. + ## **System Configuration** Inference on one Nvidia A100 gpu takes about 0.041 s/batch of 14 images, about 3G of gpu memory, and 6G of RAM. diff --git a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py index 61118df7..b91d0771 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py +++ b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py @@ -20,16 +20,19 @@ def default(self, obj): else: return super(NpEncoder, self).default(obj) -class Ensembler(): - def __init__(self,output_dir,dataset_name,grplist,iou_thresh,coco_gt_path=None,coco_instances_results_fname=None): + +class Ensembler: + def __init__( + self, output_dir, dataset_name, grplist, iou_thresh, coco_gt_path=None, coco_instances_results_fname=None + ): self.output_dir = output_dir - self.dataset_name=dataset_name + self.dataset_name = dataset_name self.grplist = grplist - self.iou_thresh=iou_thresh + self.iou_thresh = iou_thresh self.n_detectors = len(grplist) - + if coco_gt_path is None: - fname_gt = os.path.join(output_dir,dataset_name +"_coco_format.json") + fname_gt = os.path.join(output_dir, dataset_name + "_coco_format.json") else: fname_gt = coco_gt_path @@ -38,21 +41,25 @@ def __init__(self,output_dir,dataset_name,grplist,iou_thresh,coco_gt_path=None,c else: fname_dt = coco_instances_results_fname - #load in ground truth (form image lists) + # load in ground truth (form image lists) coco_gt = COCO(fname_gt) - #populate detector truths + # populate detector truths dtlist = [] for grp in grplist: - fname = os.path.join(output_dir,grp,fname_dt) + fname = os.path.join(output_dir, grp, fname_dt) dtlist.append(coco_gt.loadRes(fname)) - print('Successfully loaded {} into memory. {} instance detected.\n'.format(fname,len(dtlist[-1].anns))) - + print("Successfully loaded {} into memory. {} instance detected.\n".format(fname, len(dtlist[-1].anns))) + self.coco_gt = coco_gt - self.cats = [cat['id'] for cat in self.coco_gt.dataset['categories']] + self.cats = [cat["id"] for cat in self.coco_gt.dataset["categories"]] self.dtlist = dtlist - self.results=[] + self.results = [] - print('Working with {} models, {} categories, and {} images.'.format(self.n_detectors,len(self.cats),len(self.coco_gt.imgs.keys()))) + print( + "Working with {} models, {} categories, and {} images.".format( + self.n_detectors, len(self.cats), len(self.coco_gt.imgs.keys()) + ) + ) def mean_score_nms(self): def nik_merge(lsts): @@ -74,46 +81,54 @@ def nik_merge(lsts): results.append(common) sets = results return sets + winning_list = [] - print('Computing mean score non-max suppression ensembling for {} images.'.format(len(self.coco_gt.imgs.keys()))) - for img in tqdm(self.coco_gt.imgs.keys()): - #print(img) - df = pd.DataFrame() #a dataframe of detections - obj_set = set() #a set of objects (frozensets) - for i,coco_dt in enumerate(self.dtlist): #for each detector append predictions to df - df = df.append(pd.DataFrame(coco_dt.imgToAnns[img]).assign(det=i),ignore_index=True) + print( + "Computing mean score non-max suppression ensembling for {} images.".format(len(self.coco_gt.imgs.keys())) + ) + for img in tqdm(self.coco_gt.imgs.keys()): + # print(img) + df = pd.DataFrame() # a dataframe of detections + obj_set = set() # a set of objects (frozensets) + for i, coco_dt in enumerate(self.dtlist): # for each detector append predictions to df + df = df.append(pd.DataFrame(coco_dt.imgToAnns[img]).assign(det=i), ignore_index=True) if not df.empty: - for cat in self.cats: #for each category - dfcat = df[df['category_id']==cat] - ts = box_convert(torch.tensor(dfcat['bbox']),in_fmt='xywh',out_fmt='xyxy') #list of tensor boxes for cateogory - iou_bool = np.array((box_iou(ts,ts)>self.iou_thresh)) #compute IoU matrix and threshold - for i in range(len(dfcat)): #for each detection in that category + for cat in self.cats: # for each category + dfcat = df[df["category_id"] == cat] + ts = box_convert( + torch.tensor(dfcat["bbox"]), in_fmt="xywh", out_fmt="xyxy" + ) # list of tensor boxes for cateogory + iou_bool = np.array((box_iou(ts, ts) > self.iou_thresh)) # compute IoU matrix and threshold + for i in range(len(dfcat)): # for each detection in that category fset = frozenset(dfcat.index[iou_bool[i]]) - obj_set.add(fset) #compute set of sets representing objects - #find overlapping sets + obj_set.add(fset) # compute set of sets representing objects + # find overlapping sets # for fs in obj_set: #for existing sets # if fs&fset: #check for # fsnew = fs.union(fset) # obj_set.remove(fs) - # obj_set.add(fsnew) - obj_set = nik_merge(obj_set) - for s in obj_set:#for each detected objects, find winning box and assign score as mean of scores + # obj_set.add(fsnew) + obj_set = nik_merge(obj_set) + for s in obj_set: # for each detected objects, find winning box and assign score as mean of scores dfset = dfcat.loc[list(s)] - mean_score = dfset['score'].sum()/max(self.n_detectors,len(s)) #allows for more detections than detectors - winning_box = dfset.iloc[dfset['score'].argmax()].to_dict() - winning_box['score']=mean_score + mean_score = dfset["score"].sum() / max( + self.n_detectors, len(s) + ) # allows for more detections than detectors + winning_box = dfset.iloc[dfset["score"].argmax()].to_dict() + winning_box["score"] = mean_score winning_list.append(winning_box) - print('{} resulting instances from NMS'.format(len(winning_list))) - self.results = winning_list + print("{} resulting instances from NMS".format(len(winning_list))) + self.results = winning_list return self - def save_coco_instances(self,fname = "coco_instances_results.json"): + def save_coco_instances(self, fname="coco_instances_results.json"): if self.results: - with open(os.path.join(self.output_dir,fname),'w') as f: - f.write(json.dumps(self.results,cls=NpEncoder)) + with open(os.path.join(self.output_dir, fname), "w") as f: + f.write(json.dumps(self.results, cls=NpEncoder)) f.flush() + if __name__ == "__main__": - ens = Ensembler('dev',["fold1", "fold2", "fold3", "fold4","fold5"],.2) - ens.mean_score_nms() \ No newline at end of file + ens = Ensembler("dev", ["fold1", "fold2", "fold3", "fold4", "fold5"], 0.2) + ens.mean_score_nms() diff --git a/models/retinalOCT_RPD_segmentation/scripts/__init__.py b/models/retinalOCT_RPD_segmentation/scripts/__init__.py index 29348081..79a1bc6b 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/__init__.py +++ b/models/retinalOCT_RPD_segmentation/scripts/__init__.py @@ -1 +1 @@ -from.inference import main # Import main from inference.py \ No newline at end of file +from .inference import main # Import main from inference.py diff --git a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py index 7ba60fb5..10241ba7 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py +++ b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py @@ -1,7 +1,7 @@ #!/usr/bin/env python """ -Utiltites for analyizing and visualizing model segmentations on dataset. +Utiltites for analyizing and visualizing model segmentations on dataset. Yelena Bagdasarova, Scott Song """ @@ -17,76 +17,86 @@ import matplotlib.pyplot as plt import numpy as np import pandas as pd +import seaborn as sns import torch from detectron2.data import DatasetCatalog, MetadataCatalog from detectron2.engine import DefaultPredictor from detectron2.evaluation import COCOEvaluator from detectron2.utils.visualizer import Visualizer +from matplotlib.backends.backend_pdf import PdfPages from PIL import Image from pycocotools.coco import COCO from pycocotools.cocoeval import COCOeval from pycocotools.mask import decode +from sklearn.metrics import average_precision_score, precision_recall_curve from tqdm import tqdm plt.style.use('ybpres.mplstyle') -import seaborn as sns -#plt.style.use('/data/ssong/detectron2-rpd-yb/detectron2-rpd-pkg/src/detectron2-rpd/ybpres.mplstyle') -from matplotlib.backends.backend_pdf import PdfPages +# plt.style.use('/data/ssong/detectron2-rpd-yb/detectron2-rpd-pkg/src/detectron2-rpd/ybpres.mplstyle') def grab_dataset(name): def f(): - return pickle.load( open( "datasets/"+name+".pk", "rb" ) ) - return f - - -class OutputVis(): - - def __init__(self,dataset_name,cfg=None,prob_thresh=0.5,pred_mode='model',pred_file=None,has_annotations=True, draw_mode = 'default'): + return pickle.load(open("datasets/" + name + ".pk", "rb")) + + return f + + +class OutputVis: + def __init__( + self, + dataset_name, + cfg=None, + prob_thresh=0.5, + pred_mode="model", + pred_file=None, + has_annotations=True, + draw_mode="default", + ): self.dataset_name = dataset_name self.cfg = cfg self.prob_thresh = prob_thresh self.data = DatasetCatalog.get(dataset_name) - if pred_mode =='model': + if pred_mode == "model": self.predictor = DefaultPredictor(cfg) - self._mode = 'model' - elif pred_mode =='file': - with open(pred_file,'r') as f: + self._mode = "model" + elif pred_mode == "file": + with open(pred_file, "r") as f: self.pred_instances = json.load(f) - self.instance_img_list = [p['image_id'] for p in self.pred_instances] - self._mode = 'file' + self.instance_img_list = [p["image_id"] for p in self.pred_instances] + self._mode = "file" else: sys.exit('Invalid mode. Only "model" or "file" permitted.') self.has_annotations = has_annotations - self.permitted_draw_modes = ['default','bw'] + self.permitted_draw_modes = ["default", "bw"] self.set_draw_mode(draw_mode) - self.font_size = 16 #28 for ARVO - self.annotation_color = 'r' + self.font_size = 16 # 28 for ARVO + self.annotation_color = "r" self.scale = 3.0 - def set_draw_mode(self,draw_mode): + def set_draw_mode(self, draw_mode): if draw_mode not in self.permitted_draw_modes: - sys.exit('draw_mode must be one of the following: {}'.format(self.permitted_draw_modes)) + sys.exit("draw_mode must be one of the following: {}".format(self.permitted_draw_modes)) self.draw_mode = draw_mode - def get_ori_image(self,ImgId): + def get_ori_image(self, ImgId): """[summary] Args: - ImgId (str): Value of image_id in image data structure. + ImgId (str): Value of image_id in image data structure. Returns: PIL.Image: Original image fed into the model scaled up by a factor of 3 for visualization. """ - dat = self.get_gt_image_data(ImgId) #gt - im = cv2.imread(dat['file_name']) #input to model + dat = self.get_gt_image_data(ImgId) # gt + im = cv2.imread(dat["file_name"]) # input to model v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) - result_image = v_gt.output.get_image() #get original image + result_image = v_gt.output.get_image() # get original image img = Image.fromarray(result_image) return img - def get_gt_image_data(self,ImgId): + def get_gt_image_data(self, ImgId): """Returns image ground truth image entry for corresponding to ImgId. Args: @@ -95,10 +105,10 @@ def get_gt_image_data(self,ImgId): Returns: dict: Dictionary for the image with corresponding ImgId. """ - gt_data = next(item for item in self.data if (item['image_id'] == ImgId)) - return gt_data + gt_data = next(item for item in self.data if (item["image_id"] == ImgId)) + return gt_data - def produce_gt_image(self,dat,im): + def produce_gt_image(self, dat, im): """Returns image im overlayed with ground truth instances found in dat if there are any. Depending on visualizer mode, the instances are separate colors or monochrome. Args: @@ -109,25 +119,29 @@ def produce_gt_image(self,dat,im): Returns: PIL.Image: The resulting original image overlayed with ground truth instances. """ - v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) - if (self.has_annotations): #ground truth boxes and masks - segs = [ddict['segmentation'] for ddict in dat['annotations']] - if self.draw_mode is 'bw': + v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) + if self.has_annotations: # ground truth boxes and masks + segs = [ddict["segmentation"] for ddict in dat["annotations"]] + if self.draw_mode == "bw": BBoxes = None - assigned_colors = [self.annotation_color]*len(segs) - else: #default behavior - bboxes = [ddict['bbox'] for ddict in dat['annotations']] + assigned_colors = [self.annotation_color] * len(segs) + else: # default behavior + bboxes = [ddict["bbox"] for ddict in dat["annotations"]] BBoxes = detectron2.structures.Boxes(bboxes) - BBoxes = detectron2.structures.BoxMode.convert(BBoxes.tensor,from_mode=1,to_mode=0) #0= XYXY, 1 = XYWH + BBoxes = detectron2.structures.BoxMode.convert( + BBoxes.tensor, from_mode=1, to_mode=0 + ) # 0= XYXY, 1 = XYWH assigned_colors = None - - result_image = v_gt.overlay_instances(boxes=BBoxes,masks=segs,assigned_colors=assigned_colors, alpha=1.0).get_image() + + result_image = v_gt.overlay_instances( + boxes=BBoxes, masks=segs, assigned_colors=assigned_colors, alpha=1.0 + ).get_image() else: - result_image = v_gt.output.get_image() #get original image if no annotations + result_image = v_gt.output.get_image() # get original image if no annotations img = Image.fromarray(result_image) return img - def produce_model_image(self,ImgId,dat,im): + def produce_model_image(self, ImgId, dat, im): """Returns image im overlayed with instances predicted by the model. Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on the given ImgId. Args: @@ -142,20 +156,22 @@ def produce_model_image(self,ImgId,dat,im): v_dt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) v_dt._default_font_size = self.font_size - #get predictions from model or file - if self._mode=='model': + # get predictions from model or file + if self._mode == "model": outputs = self.predictor(im)["instances"].to("cpu") - elif self._mode=='file': - outputs = self.get_outputs_from_file(ImgId,(dat['height'],dat['width'])) - outputs = outputs[outputs.scores>self.prob_thresh] #apply probability threshold to instances - if self.draw_mode is 'bw': - result_model = v_dt.overlay_instances(masks=outputs.pred_masks,assigned_colors=[self.annotation_color]*len(outputs), alpha=1.0).get_image() - else: #default behavior - result_model = v_dt.draw_instance_predictions(outputs).get_image() + elif self._mode == "file": + outputs = self.get_outputs_from_file(ImgId, (dat["height"], dat["width"])) + outputs = outputs[outputs.scores > self.prob_thresh] # apply probability threshold to instances + if self.draw_mode == "bw": + result_model = v_dt.overlay_instances( + masks=outputs.pred_masks, assigned_colors=[self.annotation_color] * len(outputs), alpha=1.0 + ).get_image() + else: # default behavior + result_model = v_dt.draw_instance_predictions(outputs).get_image() img_model = Image.fromarray(result_model) return img_model - def get_image(self,ImgId): + def get_image(self, ImgId): """Returns the ground truth and model prediction overlays for the image corresponding to ImgId. Args: @@ -164,13 +180,13 @@ def get_image(self,ImgId): Returns: (PIL.Image,PIL.Image): Tuple of PIL.images corresponding to ground truth and model prediction respectively. """ - dat = self.get_gt_image_data(ImgId) #gt - im = cv2.imread(dat['file_name']) #input to model - img = self.produce_gt_image(dat,im) - img_model = self.produce_model_image(ImgId,dat,im) + dat = self.get_gt_image_data(ImgId) # gt + im = cv2.imread(dat["file_name"]) # input to model + img = self.produce_gt_image(dat, im) + img_model = self.produce_model_image(ImgId, dat, im) return img, img_model - - def get_outputs_from_file(self,ImgId,imgsize): + + def get_outputs_from_file(self, ImgId, imgsize): """For image with image_id ImgId, reads in and converts instances from coco format in self.pred_file to a detectron2 Instances structure required for the visulizer utility. Args: @@ -185,22 +201,27 @@ def get_outputs_from_file(self,ImgId,imgsize): scores = [] pred_classes = [] pred_masks = [] - for i,img in enumerate(self.instance_img_list): - if img==ImgId: - pred_boxes.append(self.pred_instances[i]['bbox']) - scores.append(self.pred_instances[i]['score']) - pred_classes.append(int(self.pred_instances[i]['category_id'])) - #pred_masks_rle.append(self.pred_instances[i]['segmentation']) - pred_masks.append(decode(self.pred_instances[i]['segmentation'])) + for i, img in enumerate(self.instance_img_list): + if img == ImgId: + pred_boxes.append(self.pred_instances[i]["bbox"]) + scores.append(self.pred_instances[i]["score"]) + pred_classes.append(int(self.pred_instances[i]["category_id"])) + # pred_masks_rle.append(self.pred_instances[i]['segmentation']) + pred_masks.append(decode(self.pred_instances[i]["segmentation"])) BBoxes = detectron2.structures.Boxes(pred_boxes) - pred_boxes = detectron2.structures.BoxMode.convert(BBoxes.tensor,from_mode=1,to_mode=0) #0= XYXY, 1 = XYWH - inst_dict = dict(pred_boxes = pred_boxes,scores=torch.tensor(np.array(scores)),pred_classes=torch.tensor(np.array(pred_classes)),pred_masks = torch.tensor(np.array(pred_masks)).to(torch.bool))#pred_masks_rle=pred_masks_rle) - outputs = detectron2.structures.Instances(imgsize,**inst_dict) + pred_boxes = detectron2.structures.BoxMode.convert(BBoxes.tensor, from_mode=1, to_mode=0) # 0= XYXY, 1 = XYWH + inst_dict = dict( + pred_boxes=pred_boxes, + scores=torch.tensor(np.array(scores)), + pred_classes=torch.tensor(np.array(pred_classes)), + pred_masks=torch.tensor(np.array(pred_masks)).to(torch.bool), + ) # pred_masks_rle=pred_masks_rle) + outputs = detectron2.structures.Instances(imgsize, **inst_dict) return outputs @staticmethod - def height_crop_range(im,height_target=256): - """Find the range of pixels in the height dimension spanning the height height_target which contain the brightest regions of the image. + def height_crop_range(im, height_target=256): + """Find the range of pixels in the height dimension spanning the height height_target which contain the brightest regions of the image. Args: im (numpy array): a numpy array of shape (H, W, C) @@ -209,58 +230,58 @@ def height_crop_range(im,height_target=256): Returns: range: The starting and stopping pixels for cropping the image height. """ - yhist = im.sum(axis=1) #integrate over width of image - mu = np.average(np.arange(yhist.shape[0]),weights = yhist) - h1 = int(np.floor(mu-height_target/2)) #inclusive - h2 = int(np.ceil(mu+height_target/2)) #exclusive - if h1<0: + yhist = im.sum(axis=1) # integrate over width of image + mu = np.average(np.arange(yhist.shape[0]), weights=yhist) + h1 = int(np.floor(mu - height_target / 2)) # inclusive + h2 = int(np.ceil(mu + height_target / 2)) # exclusive + if h1 < 0: h1 = 0 h2 = height_target - if h2>yhist.shape[0]: + if h2 > yhist.shape[0]: h2 = yhist.shape[0] - h1 = h2-height_target - return range(h1,h2) + h1 = h2 - height_target + return range(h1, h2) - def output_to_pdf(self,ImgIds,outname,dfimg=None): + def output_to_pdf(self, ImgIds, outname, dfimg=None): """Create pdf with name outname displaying ground truth and model prediction overlays for image ids listed in ImgIds. Args: - ImgIds (list(str)): List of image_id values to output. - outname (str): path name for pdf + ImgIds (list(str)): List of image_id values to output. + outname (str): path name for pdf dfimg (pandas.DataFrame, optional): A dataframe of stats to display for each image. Defaults to None. """ - gtstr = '' - dtstr = '' - + gtstr = "" + dtstr = "" + if dfimg is not None: - gtcols = dfimg.columns[['gt_' in col for col in dfimg.columns]] - dtcols = dfimg.columns[['dt_' in col for col in dfimg.columns]] - + gtcols = dfimg.columns[["gt_" in col for col in dfimg.columns]] + dtcols = dfimg.columns[["dt_" in col for col in dfimg.columns]] + with PdfPages(outname) as pdf: for imgid in tqdm(ImgIds): img, img_model = self.get_image(imgid) - #pdb.set_trace() - crop_range = self.height_crop_range(np.array(img.convert('L')),height_target=256*self.scale) + # pdb.set_trace() + crop_range = self.height_crop_range(np.array(img.convert("L")), height_target=256 * self.scale) img = np.array(img)[crop_range] img_model = np.array(img_model)[crop_range] - - fig, ax = plt.subplots(2,1,figsize=[22,10],dpi=200) + + fig, ax = plt.subplots(2, 1, figsize=[22, 10], dpi=200) ax[0].imshow(img) - ax[0].set_title(imgid+' Ground Truth') + ax[0].set_title(imgid + " Ground Truth") ax[0].set_axis_off() ax[1].imshow(img_model) - ax[1].set_title(imgid+' Model Prediction') + ax[1].set_title(imgid + " Model Prediction") ax[1].set_axis_off() - if dfimg is not None: #annotate with provided stats - gtstr = ['{:s}={:.2f}'.format(col,dfimg.loc[imgid,col]) for col in gtcols] - ax[0].text(0,.05*(ax[0].get_ylim()[0]),gtstr,color='white',fontsize=14) - dtstr = ['{:s}={:.2f}'.format(col,dfimg.loc[imgid,col]) for col in dtcols] - ax[1].text(0,.05*(ax[1].get_ylim()[0]),dtstr,color='white',fontsize=14) + if dfimg is not None: # annotate with provided stats + gtstr = ["{:s}={:.2f}".format(col, dfimg.loc[imgid, col]) for col in gtcols] + ax[0].text(0, 0.05 * (ax[0].get_ylim()[0]), gtstr, color="white", fontsize=14) + dtstr = ["{:s}={:.2f}".format(col, dfimg.loc[imgid, col]) for col in dtcols] + ax[1].text(0, 0.05 * (ax[1].get_ylim()[0]), dtstr, color="white", fontsize=14) pdf.savefig(fig) plt.close(fig) - def save_imgarr_to_tiff(self,imgs,outname): + def save_imgarr_to_tiff(self, imgs, outname): """Save array of images in stacked tiff format (one image per page). Args: @@ -268,54 +289,56 @@ def save_imgarr_to_tiff(self,imgs,outname): outname (str): Path name to save to. """ if len(imgs) > 1: - imgs[0].save(outname,dpi=(400,400), tags = "", compression = None, save_all=True, append_images=imgs[1:]) + imgs[0].save(outname, dpi=(400, 400), tags="", compression=None, save_all=True, append_images=imgs[1:]) else: - imgs[0].save(outname) + imgs[0].save(outname) - def output_ori_to_tiff(self,ImgIds,outname): + def output_ori_to_tiff(self, ImgIds, outname): """Save list of original images corresponding to ImgIds in stacked tiff format. Args: ImgIds (list(str)): A list of image_ids for images to save. outname (str): Path name to save to. """ - imgs = [] + imgs = [] for imgid in tqdm(ImgIds): - img_ori = self.get_ori_image(imgid) #PIL Image + img_ori = self.get_ori_image(imgid) # PIL Image imgs.append(img_ori) - self.save_imgarr_to_tiff(imgs,outname) + self.save_imgarr_to_tiff(imgs, outname) - def output_pred_to_tiff(self,ImgIds,outname,pred_only=False): - """Save list of images overlayed with the model predictions in stacked tiff format. + def output_pred_to_tiff(self, ImgIds, outname, pred_only=False): + """Save list of images overlayed with the model predictions in stacked tiff format. Args: ImgIds (list(str)): A list of image_ids for images to save. outname (str): Path name to save to. """ - imgs = self.output_pred_to_list(ImgIds,pred_only) - self.save_imgarr_to_tiff(imgs,outname) + imgs = self.output_pred_to_list(ImgIds, pred_only) + self.save_imgarr_to_tiff(imgs, outname) - def output_pred_to_list(self,ImgIds,pred_only=False): - """Return list of images overlayed with the model predictions. + def output_pred_to_list(self, ImgIds, pred_only=False): + """Return list of images overlayed with the model predictions. Args: ImgIds (list(str)): A list of image_ids for images to save. outname (str): Path name to save to. """ - imgs = [] + imgs = [] for imgid in tqdm(ImgIds): - dat = self.get_gt_image_data(imgid) #gt + dat = self.get_gt_image_data(imgid) # gt if pred_only: - im = np.zeros((dat['height'],dat['width'],3)) #blank image for overlay - assert self._mode == 'file', 'pred_mode must be "file" when pred_only flage is set to True.' #fix this later - else: - im = cv2.imread(dat['file_name']) #input to model - img_dt = self.produce_model_image(imgid,dat,im) + im = np.zeros((dat["height"], dat["width"], 3)) # blank image for overlay + assert ( + self._mode == "file" + ), 'pred_mode must be "file" when pred_only flage is set to True.' # fix this later + else: + im = cv2.imread(dat["file_name"]) # input to model + img_dt = self.produce_model_image(imgid, dat, im) imgs.append(img_dt) return imgs - def output_all_to_tiff(self,ImgIds,outname): - """Save list of images (original, ground truth overlay, and model prediction overlay) to stacked tiff format. + def output_all_to_tiff(self, ImgIds, outname): + """Save list of images (original, ground truth overlay, and model prediction overlay) to stacked tiff format. Args: ImgIds (list(str)): A list of image_ids for images to save. @@ -325,12 +348,20 @@ def output_all_to_tiff(self,ImgIds,outname): for imgid in tqdm(ImgIds): img_gt, img_dt = self.get_image(imgid) img_ori = self.get_ori_image(imgid) - hcrange = list(self.height_crop_range(np.array(img_ori.convert('L')),height_target=256*self.scale)) - img_result = Image.fromarray(np.concatenate((np.array(img_ori.convert('RGB'))[hcrange,:],np.array(img_gt)[hcrange,:],np.array(img_dt)[hcrange]))) + hcrange = list(self.height_crop_range(np.array(img_ori.convert("L")), height_target=256 * self.scale)) + img_result = Image.fromarray( + np.concatenate( + ( + np.array(img_ori.convert("RGB"))[hcrange, :], + np.array(img_gt)[hcrange, :], + np.array(img_dt)[hcrange], + ) + ) + ) imgs.append(img_result) - self.save_imgarr_to_tiff(imgs,outname) + self.save_imgarr_to_tiff(imgs, outname) - def get_enface_dt(self,grp,scan_height,scan_width,scan_spacing): + def get_enface_dt(self, grp, scan_height, scan_width, scan_spacing): """Return enface perspective of model predictions for a single scan volume whose imgids are listed in the index of grp. Args: @@ -340,28 +371,29 @@ def get_enface_dt(self,grp,scan_height,scan_width,scan_spacing): scan_spacing (float): The spacing between scan centers in pixels. Returns: - np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. + np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. """ grp = grp.sort_index() nscans = len(grp) - enface_height = int(np.ceil((nscans-1)*scan_spacing)) - enface = np.zeros((enface_height,scan_width,3),dtype=int) - for i,imgid in enumerate(grp.index): - pos = int(np.clip(np.floor(scan_spacing*i),0,scan_width-1)) #vertical enface position + enface_height = int(np.ceil((nscans - 1) * scan_spacing)) + enface = np.zeros((enface_height, scan_width, 3), dtype=int) + for i, imgid in enumerate(grp.index): + pos = int(np.clip(np.floor(scan_spacing * i), 0, scan_width - 1)) # vertical enface position - - outputs = self.get_outputs_from_file(imgid,(scan_height,scan_width)) - outputs = outputs[outputs.scores>self.prob_thresh] - instances = outputs.pred_boxes[:,(0,2)].round().clip(0,scan_width-1).to(np.int) + outputs = self.get_outputs_from_file(imgid, (scan_height, scan_width)) + outputs = outputs[outputs.scores > self.prob_thresh] + instances = outputs.pred_boxes[:, (0, 2)].round().clip(0, scan_width - 1).to(np.int) for inst in instances: try: - enface[max(pos-4,0):min(pos+4,scan_width-1),inst[0]:inst[1]]=np.array([255,255,255])#random_color(rgb = True) - except(IndexError): - print( pos, inst[0],inst[1]) - return enface + enface[max(pos - 4, 0) : min(pos + 4, scan_width - 1), inst[0] : inst[1]] = np.array( + [255, 255, 255] + ) # random_color(rgb = True) + except IndexError: + print(pos, inst[0], inst[1]) + return enface - def get_enface_gt(self,grp,scan_height,scan_width,scan_spacing): + def get_enface_gt(self, grp, scan_height, scan_width, scan_spacing): """Return enface perspective of ground truth annotations for a single scan volume whose imgids are listed in the index of grp. Args: @@ -371,31 +403,33 @@ def get_enface_gt(self,grp,scan_height,scan_width,scan_spacing): scan_spacing (float): The spacing between scan centers in pixels. Returns: - np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. + np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. """ grp = grp.sort_index() nscans = len(grp) - enface_height = int(np.ceil((nscans-1)*scan_spacing)) - enface = np.zeros((enface_height,scan_width,3),dtype=int) + enface_height = int(np.ceil((nscans - 1) * scan_spacing)) + enface = np.zeros((enface_height, scan_width, 3), dtype=int) if not self.has_annotations: - enface[:,:] = np.array([100,100,100]) + enface[:, :] = np.array([100, 100, 100]) else: - #minx = scan_width - for i,imgid in enumerate(grp.index): - pos = int(np.clip(np.floor(scan_spacing*i),0,scan_width-1)) - instances = self.get_gt_image_data(imgid)['annotations'] + # minx = scan_width + for i, imgid in enumerate(grp.index): + pos = int(np.clip(np.floor(scan_spacing * i), 0, scan_width - 1)) + instances = self.get_gt_image_data(imgid)["annotations"] for inst in instances: - x1= inst['bbox'][0] - #minx = min(minx,x1) - x2 = x1 + inst['bbox'][2] + x1 = inst["bbox"][0] + # minx = min(minx,x1) + x2 = x1 + inst["bbox"][2] try: - enface[max(pos-4,0):min(pos+4,scan_width-1),x1:x2]=np.array([255,255,255])#random_color(rgb = True) - except(IndexError): - print( pos, x1,x2) + enface[max(pos - 4, 0) : min(pos + 4, scan_width - 1), x1:x2] = np.array( + [255, 255, 255] + ) # random_color(rgb = True) + except IndexError: + print(pos, x1, x2) return enface - def compare_enface(self,grp,name,scan_height,scan_width,scan_spacing): + def compare_enface(self, grp, name, scan_height, scan_width, scan_spacing): """Return figure comparing detector enface perspective of model prediction with ground truth. Args: @@ -408,323 +442,356 @@ def compare_enface(self,grp,name,scan_height,scan_width,scan_spacing): Returns: (matplotlib.figure.Figure, array(AxesSubplot)): Tuple of figure handle and array of subplot axes. """ - fig, ax = plt.subplots(1,2,figsize=[18,9],dpi=120) - - enface = self.get_enface_dt(grp,scan_height,scan_width,scan_spacing) - ax[0].imshow(enface) - ax[0].set_title(str(name) + ' DT') - ax[0].set_aspect('equal') + fig, ax = plt.subplots(1, 2, figsize=[18, 9], dpi=120) + enface = self.get_enface_dt(grp, scan_height, scan_width, scan_spacing) + ax[0].imshow(enface) + ax[0].set_title(str(name) + " DT") + ax[0].set_aspect("equal") - enface = self.get_enface_gt(grp,scan_height,scan_width,scan_spacing) + enface = self.get_enface_gt(grp, scan_height, scan_width, scan_spacing) ax[1].imshow(enface) - ax[1].set_title(str(name) + ' GT') - ax[1].set_aspect('equal') - return fig,ax - -def Wilson_CI(p,n,z): - if (p<0 or p>1 or n==0): - if (p<0 or p>1): - warnings.warn(f'The value of proportion {p} must be in the range [0,1]. Returning identity for CIs.') + ax[1].set_title(str(name) + " GT") + ax[1].set_aspect("equal") + return fig, ax + + +def Wilson_CI(p, n, z): + if p < 0 or p > 1 or n == 0: + if p < 0 or p > 1: + warnings.warn(f"The value of proportion {p} must be in the range [0,1]. Returning identity for CIs.") else: - warnings.warn(f'The number of counts {n} must be above zero. Returning identity for CIs.') - return (p,p) - sym = z*(p*(1-p)/n + z*z/4/n/n)**.5 - asym = p + z*z/2/n - fact = 1/(1+z*z/n) - upper = fact*(asym+sym) - lower = fact*(asym-sym) - return (lower,upper) - -class EvaluateClass(COCOEvaluator): - def __init__(self,dataset_name, output_dir,prob_thresh=0.5,iou_thresh = 0.1,evalsuper=True): - super().__init__(dataset_name,tasks={'bbox','segm'},output_dir = output_dir) + warnings.warn(f"The number of counts {n} must be above zero. Returning identity for CIs.") + return (p, p) + sym = z * (p * (1 - p) / n + z * z / 4 / n / n) ** 0.5 + asym = p + z * z / 2 / n + fact = 1 / (1 + z * z / n) + upper = fact * (asym + sym) + lower = fact * (asym - sym) + return (lower, upper) + + +class EvaluateClass(COCOEvaluator): + def __init__(self, dataset_name, output_dir, prob_thresh=0.5, iou_thresh=0.1, evalsuper=True): + super().__init__(dataset_name, tasks={"bbox", "segm"}, output_dir=output_dir) self.dataset_name = dataset_name - self.mycoco=None #pycocotools.cocoEval instance - self.cocoDt=None - self.cocoGt=None - self.evalsuper = evalsuper # if True, run COCOEvaluator.evaluate() when self.evaluate is run - self.prob_thresh = prob_thresh #instance probabilty threshold for scalars (precision,recall,fpr for scans) - self.iou_thresh = iou_thresh #iou threshold for defining precision,recall + self.mycoco = None # pycocotools.cocoEval instance + self.cocoDt = None + self.cocoGt = None + self.evalsuper = evalsuper # if True, run COCOEvaluator.evaluate() when self.evaluate is run + self.prob_thresh = prob_thresh # instance probabilty threshold for scalars (precision,recall,fpr for scans) + self.iou_thresh = iou_thresh # iou threshold for defining precision,recall self.pr = None self.rc = None self.fpr = None - def reset(self): + + def reset(self): super().reset() - self.mycoco=None + self.mycoco = None + def process(self, inputs, outputs): - super().process(inputs,outputs) + super().process(inputs, outputs) + def evaluate(self): - #with nostdout(): #suppress the coco summarize statment (the one with APs) + # with nostdout(): #suppress the coco summarize statment (the one with APs) if self.evalsuper: - _ = super().evaluate() #this call populates coco_instances_results.json + _ = super().evaluate() # this call populates coco_instances_results.json comm.synchronize() if not comm.is_main_process(): return () - self.cocoGt = COCO(os.path.join(self._output_dir,self.dataset_name +'_coco_format.json')) #produced when super is initialized - self.cocoDt = self.cocoGt.loadRes(os.path.join(self._output_dir,'coco_instances_results.json')) #load detector results - self.mycoco = COCOeval(self.cocoGt,self.cocoDt,iouType ='segm') + self.cocoGt = COCO( + os.path.join(self._output_dir, self.dataset_name + "_coco_format.json") + ) # produced when super is initialized + self.cocoDt = self.cocoGt.loadRes( + os.path.join(self._output_dir, "coco_instances_results.json") + ) # load detector results + self.mycoco = COCOeval(self.cocoGt, self.cocoDt, iouType="segm") self.num_images = len(self.mycoco.params.imgIds) - print('Calculated metrics for {} images'.format(self.num_images)) - self.mycoco.params.iouThrs = np.arange(.10,.6,.1) - #mycoco.params.recThrs = [0,.5,.75,1] + print("Calculated metrics for {} images".format(self.num_images)) + self.mycoco.params.iouThrs = np.arange(0.10, 0.6, 0.1) + # mycoco.params.recThrs = [0,.5,.75,1] self.mycoco.params.maxDets = [100] - #mycoco.params.imgIds=[imgId] + # mycoco.params.imgIds=[imgId] self.mycoco.params.areaRng = [[0, 10000000000.0]] self.mycoco.evaluate() self.mycoco.accumulate() - self.pr = self.mycoco.eval['precision'][:, #iouthresh - :, #recall level - 0, #catagory - 0, #area range - 0] #max detections per image + self.pr = self.mycoco.eval["precision"][ + :, :, 0, 0, 0 # iouthresh # recall level # catagory # area range + ] # max detections per image self.rc = self.mycoco.params.recThrs self.iou = self.mycoco.params.iouThrs - self.scores = self.mycoco.eval['scores'][:,:,0,0,0] #unreliable if GT has no instances - p,r = self.get_precision_recall() - return p,r + self.scores = self.mycoco.eval["scores"][:, :, 0, 0, 0] # unreliable if GT has no instances + p, r = self.get_precision_recall() + return p, r - def plot_PRcurve(self,ax=None): - if ax==None: - fig, ax = plt.subplots(1,1) + def plot_PRcurve(self, ax=None): + if ax is None: + fig, ax = plt.subplots(1, 1) for i in range(len(self.iou)): - ax.plot(self.rc,self.pr[i],label = '{:.2}'.format(self.iou[i])) - ax.set_xlabel('Recall') - ax.set_ylabel('Precision') - ax.set_title('') - ax.legend(title='IoU') - + ax.plot(self.rc, self.pr[i], label="{:.2}".format(self.iou[i])) + ax.set_xlabel("Recall") + ax.set_ylabel("Precision") + ax.set_title("") + ax.legend(title="IoU") + def plot_recall_vs_prob(self): plt.figure() for i in range(len(self.iou)): - plt.plot(self.rc,self.scores[i],label = '{:.2}'.format(self.iou[i])) - plt.ylabel('Model probability') - plt.xlabel('Recall') - plt.legend(title='IoU') - + plt.plot(self.rc, self.scores[i], label="{:.2}".format(self.iou[i])) + plt.ylabel("Model probability") + plt.xlabel("Recall") + plt.legend(title="IoU") + def get_precision_recall(self): - iou_idx,rc_idx = self._find_iou_rc_inds() - precision = self.pr[iou_idx,rc_idx] + iou_idx, rc_idx = self._find_iou_rc_inds() + precision = self.pr[iou_idx, rc_idx] recall = self.rc[rc_idx] - return precision,recall + return precision, recall def _calculate_fpr_matrix(self): - #FP rate, 1 RPD in image = FP - if (self.scores.min()==-1) and (self.scores.max()==-1): - print('WARNING: Scores for all iou thresholds and all recall levels are not defined. This can arise if ground truth annotations contain no instances. Leaving fpr matrix as None') + # FP rate, 1 RPD in image = FP + if (self.scores.min() == -1) and (self.scores.max() == -1): + print( + "WARNING: Scores for all iou thresholds and all recall levels are not defined. This can arise if ground truth annotations contain no instances. Leaving fpr matrix as None" + ) self.fpr = None return - fpr = np.zeros((len(self.iou),len(self.rc))) + fpr = np.zeros((len(self.iou), len(self.rc))) for i in range(len(self.iou)): - for j,s in enumerate(self.scores[i]): #j -> recall level, s -> corresponding score - ng = 0 #number of negative images - fp = 0 #number of false positives images + for j, s in enumerate(self.scores[i]): # j -> recall level, s -> corresponding score + ng = 0 # number of negative images + fp = 0 # number of false positives images for el in self.mycoco.evalImgs: - if el is None:#no predictions, no gts - ng=ng+1 - elif len(el['gtIds'])==0:# some predictions and no gts - ng=ng+1 - if (np.array(el['dtScores']) >s).sum() > 0: #if at least one score over threshold for recall level - fp=fp+1 #count as FP + if el is None: # no predictions, no gts + ng = ng + 1 + elif len(el["gtIds"]) == 0: # some predictions and no gts + ng = ng + 1 + if ( + np.array(el["dtScores"]) > s + ).sum() > 0: # if at least one score over threshold for recall level + fp = fp + 1 # count as FP else: continue - fpr[i,j] = fp/ng - self.fpr = fpr + fpr[i, j] = fp / ng + self.fpr = fpr def _calculate_fpr(self): - print('Using alternate calculation for fpr at instance score threshold of {}'.format(self.prob_thresh)) - ng = 0 #number of negative images - fp = 0 #number of false positives images + print("Using alternate calculation for fpr at instance score threshold of {}".format(self.prob_thresh)) + ng = 0 # number of negative images + fp = 0 # number of false positives images for el in self.mycoco.evalImgs: - if el is None:#no predictions, no gts - ng=ng+1 - elif len(el['gtIds'])==0:# some predictions and no gts - ng=ng+1 - if (np.array(el['dtScores']) >self.prob_thresh).sum() > 0: #if at least one score over threshold for recall level - fp=fp+1 #count as FP - else: #gt has instances + if el is None: # no predictions, no gts + ng = ng + 1 + elif len(el["gtIds"]) == 0: # some predictions and no gts + ng = ng + 1 + if ( + np.array(el["dtScores"]) > self.prob_thresh + ).sum() > 0: # if at least one score over threshold for recall level + fp = fp + 1 # count as FP + else: # gt has instances continue - return fp/(ng+1e-5) + return fp / (ng + 1e-5) def _find_iou_rc_inds(self): try: - iou_idx = np.argwhere(self.iou==self.iou_thresh)[0][0] #first instance of + iou_idx = np.argwhere(self.iou == self.iou_thresh)[0][0] # first instance of except IndexError: - print('iou threshold {} not found in mycoco.params.iouThrs {}'.format(self.iou_thresh,self.mycoco.params.iouThrs)) + print( + "iou threshold {} not found in mycoco.params.iouThrs {}".format( + self.iou_thresh, self.mycoco.params.iouThrs + ) + ) exit(1) - #test above for out of bounds - inds = np.argwhere(self.scores[iou_idx]>=self.prob_thresh) - if len(inds)>0: - rc_idx = inds[-1][0] #get recall index corresponding to prob_thresh + # test above for out of bounds + inds = np.argwhere(self.scores[iou_idx] >= self.prob_thresh) + if len(inds) > 0: + rc_idx = inds[-1][0] # get recall index corresponding to prob_thresh else: rc_idx = 0 - return iou_idx,rc_idx + return iou_idx, rc_idx def get_fpr(self): - if self.fpr is None: self._calculate_fpr_matrix() - if self.fpr is not None: - iou_idx,rc_idx = self._find_iou_rc_inds() - fpr = self.fpr[iou_idx,rc_idx] - elif len(self.mycoco.cocoGt.anns)==0: + if self.fpr is not None: + iou_idx, rc_idx = self._find_iou_rc_inds() + fpr = self.fpr[iou_idx, rc_idx] + elif len(self.mycoco.cocoGt.anns) == 0: fpr = self._calculate_fpr() else: - fpr=-1 + fpr = -1 return fpr - - def summarize_scalars(self): #for pretty printing - p,r = self.get_precision_recall() - f1 = 2*(p*r)/(p + r) + + def summarize_scalars(self): # for pretty printing + p, r = self.get_precision_recall() + f1 = 2 * (p * r) / (p + r) fpr = self.get_fpr() - #Confidence intervals - z=1.96 #95% Gaussian - #instance count + # Confidence intervals + z = 1.96 # 95% Gaussian + # instance count inst_cnt = self.count_instances() - n_r = inst_cnt['gt_instances'] - n_p = inst_cnt['dt_instances'] - n_fpr = inst_cnt['gt_neg_scans'] - - def stat_CI(p,n,z): - return z*np.sqrt(p*(1-p)/n) - - r_ci = Wilson_CI(r,n_r,z) - p_ci = Wilson_CI(p,n_p,z) - fpr_ci = Wilson_CI(fpr,n_fpr,z) - - #propogate errors for f1 - int_r = stat_CI(r,n_r,z) - int_p = stat_CI(p,n_p,z) - int_f1 =(f1)*np.sqrt(int_r**2 * (1/r - 1/(p+r))**2 + int_p**2 * (1/p - 1/(p+r))**2) - f1_ci = (f1-int_f1,f1+int_f1) - - dd = dict(dataset = self.dataset_name, precision = float(p),precision_ci = p_ci,recall=float(r), recall_ci = r_ci,f1 = float(f1),f1_ci = f1_ci, fpr=float(fpr),fpr_ci = fpr_ci, iou=self.iou_thresh,probability=self.prob_thresh) + n_r = inst_cnt["gt_instances"] + n_p = inst_cnt["dt_instances"] + n_fpr = inst_cnt["gt_neg_scans"] + + def stat_CI(p, n, z): + return z * np.sqrt(p * (1 - p) / n) + + r_ci = Wilson_CI(r, n_r, z) + p_ci = Wilson_CI(p, n_p, z) + fpr_ci = Wilson_CI(fpr, n_fpr, z) + + # propogate errors for f1 + int_r = stat_CI(r, n_r, z) + int_p = stat_CI(p, n_p, z) + int_f1 = (f1) * np.sqrt(int_r**2 * (1 / r - 1 / (p + r)) ** 2 + int_p**2 * (1 / p - 1 / (p + r)) ** 2) + f1_ci = (f1 - int_f1, f1 + int_f1) + + dd = dict( + dataset=self.dataset_name, + precision=float(p), + precision_ci=p_ci, + recall=float(r), + recall_ci=r_ci, + f1=float(f1), + f1_ci=f1_ci, + fpr=float(fpr), + fpr_ci=fpr_ci, + iou=self.iou_thresh, + probability=self.prob_thresh, + ) return dd def count_instances(self): gt_inst = 0 dt_inst = 0 gt_neg_scans = 0 - for key,val in self.cocoGt.imgs.items(): - imgid = val['id'] - #Gt instances + for key, val in self.cocoGt.imgs.items(): + imgid = val["id"] + # Gt instances annIdsGt = self.cocoGt.getAnnIds([imgid]) annsGt = self.cocoGt.loadAnns(annIdsGt) - gt_inst+=len(annsGt) - if len(annsGt)==0: - gt_neg_scans+=1 + gt_inst += len(annsGt) + if len(annsGt) == 0: + gt_neg_scans += 1 - #Dt instances + # Dt instances annIdsDt = self.cocoDt.getAnnIds([imgid]) annsDt = self.cocoDt.loadAnns(annIdsDt) - annsDt = [ann for ann in annsDt if ann['score']>self.prob_thresh] - dt_inst+=len(annsDt) + annsDt = [ann for ann in annsDt if ann["score"] > self.prob_thresh] + dt_inst += len(annsDt) - return dict(gt_instances=gt_inst,dt_instances=dt_inst,gt_neg_scans = gt_neg_scans) + return dict(gt_instances=gt_inst, dt_instances=dt_inst, gt_neg_scans=gt_neg_scans) -from sklearn.metrics import average_precision_score, precision_recall_curve - - -class CreatePlotsRPD(): - def __init__(self,dfimg): +class CreatePlotsRPD: + def __init__(self, dfimg): self.dfimg = dfimg - self.dfvol = self.dfimg.groupby(['volID'])[['gt_instances','gt_pxs','gt_xpxs','dt_instances','dt_pxs','dt_xpxs']].sum() - - @classmethod - def initfromcoco(cls,mycoco,prob_thresh): - df = pd.DataFrame(index = mycoco.cocoGt.imgs.keys(), columns=['gt_instances','gt_pxs','gt_xpxs','dt_instances','dt_pxs','dt_xpxs'],dtype=np.uint64) + self.dfvol = self.dfimg.groupby(["volID"])[ + ["gt_instances", "gt_pxs", "gt_xpxs", "dt_instances", "dt_pxs", "dt_xpxs"] + ].sum() - for key,val in mycoco.cocoGt.imgs.items(): - imgid = val['id'] - #Gt instances + @classmethod + def initfromcoco(cls, mycoco, prob_thresh): + df = pd.DataFrame( + index=mycoco.cocoGt.imgs.keys(), + columns=["gt_instances", "gt_pxs", "gt_xpxs", "dt_instances", "dt_pxs", "dt_xpxs"], + dtype=np.uint64, + ) + + for key, val in mycoco.cocoGt.imgs.items(): + imgid = val["id"] + # Gt instances annIdsGt = mycoco.cocoGt.getAnnIds([imgid]) annsGt = mycoco.cocoGt.loadAnns(annIdsGt) instGt = [mycoco.cocoGt.annToMask(ann).sum() for ann in annsGt] - xprojGt = [(mycoco.cocoGt.annToMask(ann).sum(axis=0)>0).astype('uint8').sum() for ann in annsGt] - #Dt instances + xprojGt = [(mycoco.cocoGt.annToMask(ann).sum(axis=0) > 0).astype("uint8").sum() for ann in annsGt] + # Dt instances annIdsDt = mycoco.cocoDt.getAnnIds([imgid]) annsDt = mycoco.cocoDt.loadAnns(annIdsDt) - annsDt = [ann for ann in annsDt if ann['score']>prob_thresh] + annsDt = [ann for ann in annsDt if ann["score"] > prob_thresh] instDt = [mycoco.cocoDt.annToMask(ann).sum() for ann in annsDt] - xprojDt = [(mycoco.cocoDt.annToMask(ann).sum(axis=0)>0).astype('uint8').sum() for ann in annsDt] - - dat = [len(instGt),np.array(instGt).sum(),np.array(xprojGt).sum(),len(instDt),np.array(instDt).sum(),np.array(xprojDt).sum()] + xprojDt = [(mycoco.cocoDt.annToMask(ann).sum(axis=0) > 0).astype("uint8").sum() for ann in annsDt] + + dat = [ + len(instGt), + np.array(instGt).sum(), + np.array(xprojGt).sum(), + len(instDt), + np.array(instDt).sum(), + np.array(xprojDt).sum(), + ] df.loc[key] = dat - - newdf = pd.DataFrame([idx.rsplit('.',1)[0].rsplit('_',1) for idx in df.index],columns=['volID','scan'],index = df.index) - df = df.merge(newdf,how='inner',left_index=True,right_index=True) + + newdf = pd.DataFrame( + [idx.rsplit(".", 1)[0].rsplit("_", 1) for idx in df.index], columns=["volID", "scan"], index=df.index + ) + df = df.merge(newdf, how="inner", left_index=True, right_index=True) return cls(df) - + @classmethod - def initfromcsv(cls,fname): + def initfromcsv(cls, fname): df = pd.read_csv(fname) return cls(df) - - def get_max_limits(self,df): - max_inst=np.max([df.gt_instances.max(),df.dt_instances.max()]) - max_xpxs = np.max([df.gt_xpxs.max(),df.dt_xpxs.max()]) - max_pxs = np.max([df.gt_pxs.max(),df.dt_pxs.max()]) -# print('Max instances:',max_inst) -# print('Max xpxs:',max_xpxs) -# print('Max pxs:',max_pxs) - return max_inst,max_xpxs,max_pxs - - def vol_level_prc(self,df,gt_thresh=5,ax=None): - - prc = precision_recall_curve(df.gt_instances>=gt_thresh,df.dt_instances) - if ax==None: - fig,ax = plt.subplots(1,1) - ax.plot(prc[1],prc[0]) - ax.set_xlabel('RPD Volume Recall') - ax.set_ylabel('RPD Volume Precision') - - - ap = average_precision_score(df.gt_instances>=gt_thresh,df.dt_instances) - return ap,prc - - def plot_img_level_instance_thresholding(self,df,inst): + def get_max_limits(self, df): + max_inst = np.max([df.gt_instances.max(), df.dt_instances.max()]) + max_xpxs = np.max([df.gt_xpxs.max(), df.dt_xpxs.max()]) + max_pxs = np.max([df.gt_pxs.max(), df.dt_pxs.max()]) + # print('Max instances:',max_inst) + # print('Max xpxs:',max_xpxs) + # print('Max pxs:',max_pxs) + return max_inst, max_xpxs, max_pxs + + def vol_level_prc(self, df, gt_thresh=5, ax=None): + prc = precision_recall_curve(df.gt_instances >= gt_thresh, df.dt_instances) + if ax is None: + fig, ax = plt.subplots(1, 1) + ax.plot(prc[1], prc[0]) + ax.set_xlabel("RPD Volume Recall") + ax.set_ylabel("RPD Volume Precision") + + ap = average_precision_score(df.gt_instances >= gt_thresh, df.dt_instances) + return ap, prc + + def plot_img_level_instance_thresholding(self, df, inst): rc = np.zeros((len(inst),)) pr = np.zeros((len(inst),)) fpr = np.zeros((len(inst),)) - fig, ax = plt.subplots(1,3,figsize = [15,5]) - for i,dt_thresh in enumerate(inst): - gt = df.gt_instances>dt_thresh - dt = df.dt_instances>dt_thresh - rc[i] = (gt&dt).sum()/gt.sum() - pr[i] = (gt&dt).sum()/dt.sum() - fpr[i] = ((~gt)&(dt)).sum()/((~gt).sum()) - - ax[1].plot(inst,pr) - ax[1].set_ylim(0.45,1.01) - ax[1].set_xlabel('instance threshold') - ax[1].set_ylabel('Precision') - - - ax[0].plot(inst,rc) - ax[0].set_ylim(0.45,1.01) - ax[0].set_ylabel('Recall') - ax[0].set_xlabel('instance threshold') - - - ax[2].plot(inst,fpr) - ax[2].set_ylim(0,0.80) - ax[2].set_xlabel('instance threshold') - ax[2].set_ylabel('FPR') + fig, ax = plt.subplots(1, 3, figsize=[15, 5]) + for i, dt_thresh in enumerate(inst): + gt = df.gt_instances > dt_thresh + dt = df.dt_instances > dt_thresh + rc[i] = (gt & dt).sum() / gt.sum() + pr[i] = (gt & dt).sum() / dt.sum() + fpr[i] = ((~gt) & (dt)).sum() / ((~gt).sum()) + + ax[1].plot(inst, pr) + ax[1].set_ylim(0.45, 1.01) + ax[1].set_xlabel("instance threshold") + ax[1].set_ylabel("Precision") + + ax[0].plot(inst, rc) + ax[0].set_ylim(0.45, 1.01) + ax[0].set_ylabel("Recall") + ax[0].set_xlabel("instance threshold") + + ax[2].plot(inst, fpr) + ax[2].set_ylim(0, 0.80) + ax[2].set_xlabel("instance threshold") + ax[2].set_ylabel("FPR") plt.tight_layout() - return pr,rc,fpr - - def plot_img_level_instance_thresholding2(self,df,inst,gt_thresh,plot=True): + return pr, rc, fpr - #should be using global function + def plot_img_level_instance_thresholding2(self, df, inst, gt_thresh, plot=True): + # should be using global function # def Wilson_CI(p,n,z): # sym = z*(p*(1-p)/n + z*z/4/n/n)**.5 @@ -737,210 +804,200 @@ def plot_img_level_instance_thresholding2(self,df,inst,gt_thresh,plot=True): rc = np.zeros((len(inst),)) pr = np.zeros((len(inst),)) fpr = np.zeros((len(inst),)) - rc_ci = np.zeros((len(inst),2)) - pr_ci = np.zeros((len(inst),2)) - fpr_ci = np.zeros((len(inst),2)) - - - for i,dt_thresh in enumerate(inst): - gt = df.gt_instances>=gt_thresh - dt = df.dt_instances>=dt_thresh - rc[i] = (gt&dt).sum()/gt.sum() - pr[i] = (gt&dt).sum()/dt.sum() - fpr[i] = ((~gt)&(dt)).sum()/((~gt).sum()) - rc_ci[i,:] = Wilson_CI(rc[i],gt.sum(),1.96) - pr_ci[i,:]= Wilson_CI(pr[i],dt.sum(),1.96) - fpr_ci[i,:] = Wilson_CI(fpr[i],((~gt).sum()),1.96) + rc_ci = np.zeros((len(inst), 2)) + pr_ci = np.zeros((len(inst), 2)) + fpr_ci = np.zeros((len(inst), 2)) + + for i, dt_thresh in enumerate(inst): + gt = df.gt_instances >= gt_thresh + dt = df.dt_instances >= dt_thresh + rc[i] = (gt & dt).sum() / gt.sum() + pr[i] = (gt & dt).sum() / dt.sum() + fpr[i] = ((~gt) & (dt)).sum() / ((~gt).sum()) + rc_ci[i, :] = Wilson_CI(rc[i], gt.sum(), 1.96) + pr_ci[i, :] = Wilson_CI(pr[i], dt.sum(), 1.96) + fpr_ci[i, :] = Wilson_CI(fpr[i], ((~gt).sum()), 1.96) if plot: - fig, ax = plt.subplots(1,3,figsize = [15,5]) + fig, ax = plt.subplots(1, 3, figsize=[15, 5]) # ax[0].plot(rc,pr) # ax[0].set_xlabel('Recall') # ax[0].set_ylabel('Precision') - ax[1].plot(inst,pr) - ax[1].fill_between(inst,pr_ci[:,0],pr_ci[:,1],alpha=.25) - #ax[1].set_ylim(0.45,1.01) - ax[1].set_xlabel('instance threshold') - ax[1].set_ylabel('Precision') - - - ax[0].plot(inst,rc) - ax[0].fill_between(inst,rc_ci[:,0],rc_ci[:,1],alpha=.25) - #ax[0].set_ylim(0.45,1.01) - ax[0].set_ylabel('Recall') - ax[0].set_xlabel('instance threshold') + ax[1].plot(inst, pr) + ax[1].fill_between(inst, pr_ci[:, 0], pr_ci[:, 1], alpha=0.25) + # ax[1].set_ylim(0.45,1.01) + ax[1].set_xlabel("instance threshold") + ax[1].set_ylabel("Precision") + ax[0].plot(inst, rc) + ax[0].fill_between(inst, rc_ci[:, 0], rc_ci[:, 1], alpha=0.25) + # ax[0].set_ylim(0.45,1.01) + ax[0].set_ylabel("Recall") + ax[0].set_xlabel("instance threshold") - ax[2].plot(inst,fpr) - ax[2].fill_between(inst,fpr_ci[:,0],fpr_ci[:,1],alpha=.25) - #ax[2].set_ylim(0,0.80) - ax[2].set_xlabel('instance threshold') - ax[2].set_ylabel('FPR') + ax[2].plot(inst, fpr) + ax[2].fill_between(inst, fpr_ci[:, 0], fpr_ci[:, 1], alpha=0.25) + # ax[2].set_ylim(0,0.80) + ax[2].set_xlabel("instance threshold") + ax[2].set_ylabel("FPR") plt.tight_layout() - return dict(precision=pr,precision_ci = pr_ci,recall=rc,recall_ci = rc_ci, fpr=fpr,fpr_ci = fpr_ci) + return dict(precision=pr, precision_ci=pr_ci, recall=rc, recall_ci=rc_ci, fpr=fpr, fpr_ci=fpr_ci) - def gt_vs_dt_instances(self,ax=None): + def gt_vs_dt_instances(self, ax=None): df = self.dfimg - max_inst,max_xpxs,max_pxs = self.get_max_limits(df) - idx = (df.gt_instances>0)&(df.dt_instances>0) - - if ax==None: + max_inst, max_xpxs, max_pxs = self.get_max_limits(df) + idx = (df.gt_instances > 0) & (df.dt_instances > 0) + + if ax is None: fig = plt.figure(dpi=100) ax = fig.add_subplot(111) - y = df[idx].groupby('gt_instances')['dt_instances'].mean() - yerr = df[idx].groupby('gt_instances')['dt_instances'].std() - ax.errorbar(y.index,y.values,yerr.values,fmt='*') - plt.plot([0,max_inst],[0,max_inst],alpha=.5) - plt.xlim(0,max_inst+1) - plt.ylim(0,max_inst+1) + y = df[idx].groupby("gt_instances")["dt_instances"].mean() + yerr = df[idx].groupby("gt_instances")["dt_instances"].std() + ax.errorbar(y.index, y.values, yerr.values, fmt="*") + plt.plot([0, max_inst], [0, max_inst], alpha=0.5) + plt.xlim(0, max_inst + 1) + plt.ylim(0, max_inst + 1) ax.set_aspect(1) - plt.xlabel('gt_instances') - plt.ylabel('dt_instances') + plt.xlabel("gt_instances") + plt.ylabel("dt_instances") plt.tight_layout() return ax - def gt_vs_dt_instances_boxplot(self,ax=None): + def gt_vs_dt_instances_boxplot(self, ax=None): df = self.dfimg - max_inst,max_xpxs,max_pxs = self.get_max_limits(df) + max_inst, max_xpxs, max_pxs = self.get_max_limits(df) max_inst = int(max_inst) - if ax==None: + if ax is None: fig = plt.figure(dpi=100) ax = fig.add_subplot(111) - - - - ax.plot([0,max_inst+1],[0,max_inst+1],alpha=.5) - x = df['gt_instances'].values.astype(int) - y = df['dt_instances'].values.astype(int) - sns.boxplot(x,y, ax=ax,width=.5) - ax.set_xbound(0,max_inst+1) - ax.set_ybound(0,max_inst+1) - ax.set_aspect('equal') - + ax.plot([0, max_inst + 1], [0, max_inst + 1], alpha=0.5) + x = df["gt_instances"].values.astype(int) + y = df["dt_instances"].values.astype(int) + sns.boxplot(x, y, ax=ax, width=0.5) + ax.set_xbound(0, max_inst + 1) + ax.set_ybound(0, max_inst + 1) + ax.set_aspect("equal") - ax.set_title('') - ax.set_xlabel('gt_instances') - ax.set_ylabel('dt_instances') + ax.set_title("") + ax.set_xlabel("gt_instances") + ax.set_ylabel("dt_instances") import matplotlib.ticker as pltticker + loc = pltticker.MultipleLocator(base=2.0) ax.xaxis.set_major_locator(loc) ax.yaxis.set_major_locator(loc) - return ax - - def gt_vs_dt_xpxs(self): df = self.dfimg - max_inst,max_xpxs,max_pxs = self.get_max_limits(df) - idx = (df.gt_instances>0)&(df.dt_instances>0) + max_inst, max_xpxs, max_pxs = self.get_max_limits(df) + idx = (df.gt_instances > 0) & (df.dt_instances > 0) dfsub = df[idx] - - fig1 = plt.figure(figsize = [10,10],dpi=100) + + fig1 = plt.figure(figsize=[10, 10], dpi=100) ax = fig1.add_subplot(111) - sc = ax.scatter(dfsub['gt_xpxs'],dfsub['dt_xpxs'],c =dfsub['gt_instances'] ,cmap='viridis') + sc = ax.scatter(dfsub["gt_xpxs"], dfsub["dt_xpxs"], c=dfsub["gt_instances"], cmap="viridis") ax.set_aspect(1) - #ax = dfsub.plot(kind = 'scatter',x=,y=,c='gt_instances') - plt.plot([0,max_xpxs],[0,max_xpxs],alpha=.5) - plt.xlim(0,max_xpxs) - plt.ylim(0,max_xpxs) - plt.xlabel('gt_xpxs') - plt.ylabel('dt_xpxs') + # ax = dfsub.plot(kind = 'scatter',x=,y=,c='gt_instances') + plt.plot([0, max_xpxs], [0, max_xpxs], alpha=0.5) + plt.xlim(0, max_xpxs) + plt.ylim(0, max_xpxs) + plt.xlabel("gt_xpxs") + plt.ylabel("dt_xpxs") cbar = plt.colorbar(sc) - cbar.ax.set_ylabel('gt_instances') + cbar.ax.set_ylabel("gt_instances") plt.tight_layout() - - fig2 = plt.figure(figsize = [10,10],dpi=100) + + fig2 = plt.figure(figsize=[10, 10], dpi=100) ax = fig2.add_subplot(111) - sc = ax.scatter(dfsub['gt_xpxs'],dfsub['gt_xpxs']-dfsub['dt_xpxs'],c =dfsub['gt_instances'] ,cmap='viridis') - #ax = dfsub.plot(kind = 'scatter',x=,y=,c='gt_instances') - plt.plot([0,max_xpxs],[0,0],alpha=.5) - plt.xlabel('gt_xpxs') - plt.ylabel('gt_xpxs-dt_xpxs') + sc = ax.scatter(dfsub["gt_xpxs"], dfsub["gt_xpxs"] - dfsub["dt_xpxs"], c=dfsub["gt_instances"], cmap="viridis") + # ax = dfsub.plot(kind = 'scatter',x=,y=,c='gt_instances') + plt.plot([0, max_xpxs], [0, 0], alpha=0.5) + plt.xlabel("gt_xpxs") + plt.ylabel("gt_xpxs-dt_xpxs") cbar = plt.colorbar(sc) - cbar.ax.set_ylabel('gt_instances') + cbar.ax.set_ylabel("gt_instances") plt.tight_layout() - + fig3 = plt.figure(dpi=100) - plt.hist(dfsub['gt_xpxs']-dfsub['dt_xpxs']) - plt.xlabel('gt_xpxs - dt_xpxs') - plt.ylabel('B-scans') - - return fig1,fig2,fig3 - + plt.hist(dfsub["gt_xpxs"] - dfsub["dt_xpxs"]) + plt.xlabel("gt_xpxs - dt_xpxs") + plt.ylabel("B-scans") + + return fig1, fig2, fig3 + def gt_vs_dt_xpxs_mu(self): df = self.dfimg - max_inst,max_xpxs,max_pxs = self.get_max_limits(df) - idx = (df.gt_instances>0)&(df.dt_instances>0) + max_inst, max_xpxs, max_pxs = self.get_max_limits(df) + idx = (df.gt_instances > 0) & (df.dt_instances > 0) dfsub = df[idx] - + from scipy import stats - mu_dt,bins,bnum = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['dt_xpxs'],statistic = 'mean',bins=10) - std_dt,_,_ = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['dt_xpxs'],statistic = 'std',bins = bins) - mu_gt,_,_ = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['gt_xpxs'],statistic='mean',bins=bins) - std_gt,_,_ = stats.binned_statistic(dfsub['gt_xpxs'],dfsub['gt_xpxs'],statistic = 'std',bins = bins) + + mu_dt, bins, bnum = stats.binned_statistic(dfsub["gt_xpxs"], dfsub["dt_xpxs"], statistic="mean", bins=10) + std_dt, _, _ = stats.binned_statistic(dfsub["gt_xpxs"], dfsub["dt_xpxs"], statistic="std", bins=bins) + mu_gt, _, _ = stats.binned_statistic(dfsub["gt_xpxs"], dfsub["gt_xpxs"], statistic="mean", bins=bins) + std_gt, _, _ = stats.binned_statistic(dfsub["gt_xpxs"], dfsub["gt_xpxs"], statistic="std", bins=bins) fig = plt.figure(dpi=100) - plt.errorbar(mu_gt,mu_dt,yerr = std_dt,xerr=std_gt,fmt='*') - plt.xlabel('gt_xpxs') - plt.ylabel('dt_xpxs') - plt.plot([0,max_xpxs],[0,max_xpxs],alpha=.5) - plt.xlim(0,max_xpxs) - plt.ylim(0,max_xpxs) + plt.errorbar(mu_gt, mu_dt, yerr=std_dt, xerr=std_gt, fmt="*") + plt.xlabel("gt_xpxs") + plt.ylabel("dt_xpxs") + plt.plot([0, max_xpxs], [0, max_xpxs], alpha=0.5) + plt.xlim(0, max_xpxs) + plt.ylim(0, max_xpxs) plt.gca().set_aspect(1) plt.tight_layout() return fig def gt_dt_FP_FN_count(self): df = self.dfimg - fig,ax =plt.subplots(1,2,figsize=[10,5]) + fig, ax = plt.subplots(1, 2, figsize=[10, 5]) - idx = (df.gt_instances==0)&(df.dt_instances>0) - ax[0].hist(df[idx]['dt_instances'],bins = range(1,10)) - ax[0].set_xlabel('dt instances') - ax[0].set_ylabel('B-scans') - ax[0].set_title('FP dt instance count per B-scan') + idx = (df.gt_instances == 0) & (df.dt_instances > 0) + ax[0].hist(df[idx]["dt_instances"], bins=range(1, 10)) + ax[0].set_xlabel("dt instances") + ax[0].set_ylabel("B-scans") + ax[0].set_title("FP dt instance count per B-scan") - idx = (df.gt_instances>0)&(df.dt_instances==0) - ax[1].hist(df[idx]['gt_instances'],bins = range(1,10)) - ax[1].set_xlabel('gt instances') - ax[1].set_ylabel('B-scans') - ax[1].set_title('FN gt instance count per B-scan') + idx = (df.gt_instances > 0) & (df.dt_instances == 0) + ax[1].hist(df[idx]["gt_instances"], bins=range(1, 10)) + ax[1].set_xlabel("gt instances") + ax[1].set_ylabel("B-scans") + ax[1].set_title("FN gt instance count per B-scan") plt.tight_layout() return fig - + def avg_inst_size(self): df = self.dfimg - max_inst,max_xpxs,max_pxs = self.get_max_limits(df) - idx = (df.gt_instances>0)&(df.dt_instances>0) + max_inst, max_xpxs, max_pxs = self.get_max_limits(df) + idx = (df.gt_instances > 0) & (df.dt_instances > 0) dfsub = df[idx] - - fig = plt.figure(figsize=[10,5]) + + fig = plt.figure(figsize=[10, 5]) plt.subplot(121) - bins = np.arange(0,120,10) - ax = (dfsub.gt_xpxs/dfsub.gt_instances).hist(bins = bins,alpha=.5,label='gt') - ax = (dfsub.dt_xpxs/dfsub.dt_instances).hist(bins=bins,alpha=.5,label='dt') - ax.set_xlabel('xpxs') - ax.set_ylabel('B-scans') - ax.set_title('Average size of instance') + bins = np.arange(0, 120, 10) + ax = (dfsub.gt_xpxs / dfsub.gt_instances).hist(bins=bins, alpha=0.5, label="gt") + ax = (dfsub.dt_xpxs / dfsub.dt_instances).hist(bins=bins, alpha=0.5, label="dt") + ax.set_xlabel("xpxs") + ax.set_ylabel("B-scans") + ax.set_title("Average size of instance") ax.legend() plt.subplot(122) - bins = np.arange(0,600,40) - ax = (dfsub.gt_pxs/dfsub.gt_instances).hist(bins=bins,alpha=.5,label='gt') - ax = (dfsub.dt_pxs/dfsub.dt_instances).hist(bins=bins,alpha=.5,label='dt') - ax.set_xlabel('pxs') - ax.set_ylabel('B-scans') - ax.set_title('Average size of instance') + bins = np.arange(0, 600, 40) + ax = (dfsub.gt_pxs / dfsub.gt_instances).hist(bins=bins, alpha=0.5, label="gt") + ax = (dfsub.dt_pxs / dfsub.dt_instances).hist(bins=bins, alpha=0.5, label="dt") + ax.set_xlabel("pxs") + ax.set_ylabel("B-scans") + ax.set_title("Average size of instance") ax.legend() plt.tight_layout() return fig - - diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py index 6080184a..efb2075e 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -13,10 +13,12 @@ from .volReader import volFile script_dir = os.path.dirname(__file__) + + class Error(Exception): """Base class for exceptions in this module.""" - pass + pass # def extract_files(dirtoextract, extracted_path): @@ -39,75 +41,76 @@ class Error(Exception): # else: # pass + def extract_files(dirtoextract, extracted_path, input_format): - assert input_format in ['vol','dicom'], 'Error: input_format must be "vol" or "dicom".' + assert input_format in ["vol", "dicom"], 'Error: input_format must be "vol" or "dicom".' proceed = True - if ((os.path.isdir(extracted_path)) and (len(os.listdir(extracted_path))!=0)): - val = input(f'{extracted_path} exists and is not empty. Files may be overwritten. Proceed with extraction? (Y/N)') + if (os.path.isdir(extracted_path)) and (len(os.listdir(extracted_path)) != 0): + val = input( + f"{extracted_path} exists and is not empty. Files may be overwritten. Proceed with extraction? (Y/N)" + ) proceed = bool(distutils.util.strtobool(val)) if proceed: print(f"Extracting files from {dirtoextract} into {extracted_path}...") - if input_format == 'vol': - files_to_extract = glob.glob(os.path.join(dirtoextract,'**/*.vol'),recursive=True) - for i,line in enumerate(tqdm(files_to_extract)): - fpath = line.strip('\n') + if input_format == "vol": + files_to_extract = glob.glob(os.path.join(dirtoextract, "**/*.vol"), recursive=True) + for i, line in enumerate(tqdm(files_to_extract)): + fpath = line.strip("\n") vol = volFile(fpath) - fpath = fpath.replace('\\','/') - path, scan_str = fpath.strip('.vol').rsplit('/',1) - extractpath = os.path.join(extracted_path,scan_str.replace('_','/')) - os.makedirs(extractpath,exist_ok=True) - preffix = os.path.join(extractpath, scan_str+'_oct') + fpath = fpath.replace("\\", "/") + path, scan_str = fpath.strip(".vol").rsplit("/", 1) + extractpath = os.path.join(extracted_path, scan_str.replace("_", "/")) + os.makedirs(extractpath, exist_ok=True) + preffix = os.path.join(extractpath, scan_str + "_oct") vol.renderOCTscans(preffix) - elif input_format =='dicom': - keywords = ['SOPInstanceUID', - 'PatientID', - 'ImageLaterality', - 'SeriesDate' - ] + elif input_format == "dicom": + keywords = ["SOPInstanceUID", "PatientID", "ImageLaterality", "SeriesDate"] list_of_dicts = [] - dirgen = glob.iglob(os.path.join(dirtoextract,'**/DICOMDIR'),recursive=True) + dirgen = glob.iglob(os.path.join(dirtoextract, "**/DICOMDIR"), recursive=True) for dsstr in dirgen: fs = FileSet(dcmread(dsstr)) fsgenOPT = genOPTfs(fs) for fi in tqdm(fsgenOPT): - dd=dict() - #top level keywords + dd = dict() + # top level keywords for key in keywords: dd[key] = fi.get(key) - volpath = os.path.join(extracted_path, f'{fi.SOPInstanceUID}') - #volpath = os.path.join(extracted_path, f'{fi.PatientID}_{fi.ImageLaterality}_{fi.SeriesDate}') #path for volume - shutil.rmtree(volpath,ignore_errors=True) + volpath = os.path.join(extracted_path, f"{fi.SOPInstanceUID}") + # volpath = os.path.join(extracted_path, f'{fi.PatientID}_{fi.ImageLaterality}_{fi.SeriesDate}') #path for volume + shutil.rmtree(volpath, ignore_errors=True) os.mkdir(volpath) n = fi.NumberOfFrames for i in range(n): - fname = os.path.join(volpath,f'{fi.SOPInstanceUID}_oct_{i:03d}.png') + fname = os.path.join(volpath, f"{fi.SOPInstanceUID}_oct_{i:03d}.png") Image.fromarray(fi.pixel_array[i]).save(fname) list_of_dicts.append(dd.copy()) - dfoct = pd.DataFrame(list_of_dicts, columns = keywords) - dfoct.to_csv(os.path.join(extracted_path,'basic_meta.csv')) + dfoct = pd.DataFrame(list_of_dicts, columns=keywords) + dfoct.to_csv(os.path.join(extracted_path, "basic_meta.csv")) else: pass + def rpd_data(extracted_path): dataset = [] instances = 0 wrong_poly = 0 - extracted_files = glob.glob(os.path.join(extracted_path,'**/*.[Pp][Nn][Gg]'),recursive=True) + extracted_files = glob.glob(os.path.join(extracted_path, "**/*.[Pp][Nn][Gg]"), recursive=True) print("Generating dataset of images...") for fn in tqdm(extracted_files): - fn_adjusted = fn.replace('\\','/') + fn_adjusted = fn.replace("\\", "/") imageid = fn_adjusted.split("/")[-1] im = cv2.imread(fn) - dat = dict(file_name = fn_adjusted, height = im.shape[0], width = im.shape[1], image_id = imageid) + dat = dict(file_name=fn_adjusted, height=im.shape[0], width=im.shape[1], image_id=imageid) dataset.append(dat) print(f"Found {len(dataset)} images") print(f"Found {instances} instances") print(f"Found {wrong_poly} too few vertices") return dataset + def genOPTfs(fs): - for instance in fs.find(Modality='OPT'): + for instance in fs.find(Modality="OPT"): ds = instance.load() - yield ds \ No newline at end of file + yield ds diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py index c1cbbaab..0b366ff3 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py @@ -3,7 +3,7 @@ # Aaron Y. Lee MD MSCI (University of Washington) Copyright 2019 # # Code ported from Markus Mayer's excellent work (https://www5.cs.fau.de/research/software/octseg/) -# +# # Also thanks to who contributed to the original openVol.m in Markus's project # Radim Kolar, Brno University, Czech Republic # Kris Sheets, Retinal Cell Biology Lab, Neuroscience Center of Excellence, LSU Health Sciences Center, New Orleans @@ -18,7 +18,7 @@ import numpy as np -class volFile(): +class volFile: def __init__(self, filename): """ Parses Heyex Spectralis *.vol files. @@ -26,7 +26,7 @@ def __init__(self, filename): Args: filename (str): Path to vol file - Returns: + Returns: volFile class """ @@ -61,7 +61,7 @@ def grid(self): Returns: 2D numpy array with the number of b scan images in the first dimension - and x_0, y_0, x_1, y_1 defining the line of the B scan on the pixel + and x_0, y_0, x_1, y_1 defining the line of the B scan on the pixel coordinates of the IR SLO image. """ @@ -89,20 +89,21 @@ def renderIRslo(self, filename, renderGrid=False): """ from PIL import Image, ImageDraw + wf = self.wholefile a = np.copy(wf["sloImage"]) if renderGrid: - a = np.stack((a,)*3, axis=-1) + a = np.stack((a,) * 3, axis=-1) a = Image.fromarray(a) draw = ImageDraw.Draw(a) grid = self.grid - for (x_0, y_0, x_1, y_1) in grid: - draw.line((x_0,y_0, x_1, y_1), fill=(255,0,0), width=3) + for x_0, y_0, x_1, y_1 in grid: + draw.line((x_0, y_0, x_1, y_1), fill=(255, 0, 0), width=3) a.save(filename) else: - Image.fromarray(a).save(filepre) + Image.fromarray(a).save(filename) - def renderOCTscans(self, filepre = "oct", renderSeg=False): + def renderOCTscans(self, filepre="oct", renderSeg=False): """ Renders OCT images a PNG file and optionally overlays segmentation lines Also creates a CSV file of vol file features. @@ -116,14 +117,15 @@ def renderOCTscans(self, filepre = "oct", renderSeg=False): """ from PIL import Image + wf = self.wholefile for i in range(wf["cScan"].shape[0]): a = np.copy(wf["cScan"][i]) if renderSeg: - a = np.stack((a,)*3, axis=-1) + a = np.stack((a,) * 3, axis=-1) for li in range(wf["segmentations"].shape[0]): for x in range(wf["segmentations"].shape[2]): - a[int(wf["segmentations"][li,i,x]),x, li] = 255 + a[int(wf["segmentations"][li, i, x]), x, li] = 255 Image.fromarray(a).save("%s_%03d.png" % (filepre, i)) @@ -134,9 +136,9 @@ def __parseVolFile(self, fn, parseSeg=False): with open(fn, "rb") as fin: header = OrderedDict() header["version"] = fin.read(12) - header["octSizeX"] = struct.unpack("I", fin.read(4))[0] # lateral resolution + header["octSizeX"] = struct.unpack("I", fin.read(4))[0] # lateral resolution header["numBscan"] = struct.unpack("I", fin.read(4))[0] - header["octSizeZ"] = struct.unpack("I", fin.read(4))[0] # OCT depth + header["octSizeZ"] = struct.unpack("I", fin.read(4))[0] # OCT depth header["scaleX"] = struct.unpack("d", fin.read(8))[0] header["distance"] = struct.unpack("d", fin.read(8))[0] header["scaleZ"] = struct.unpack("d", fin.read(8))[0] @@ -144,24 +146,30 @@ def __parseVolFile(self, fn, parseSeg=False): header["sizeYSlo"] = struct.unpack("I", fin.read(4))[0] header["scaleXSlo"] = struct.unpack("d", fin.read(8))[0] header["scaleYSlo"] = struct.unpack("d", fin.read(8))[0] - header["fieldSizeSlo"] = struct.unpack("I", fin.read(4))[0] # FOV in degrees + header["fieldSizeSlo"] = struct.unpack("I", fin.read(4))[0] # FOV in degrees header["scanFocus"] = struct.unpack("d", fin.read(8))[0] header["scanPos"] = fin.read(4) header["examTime"] = struct.unpack("=q", fin.read(8))[0] / 1e7 - header["examTime"] = datetime.datetime.utcfromtimestamp(header["examTime"] - (369*365.25+4) * 24*60*60) # needs to be checked + header["examTime"] = datetime.datetime.utcfromtimestamp( + header["examTime"] - (369 * 365.25 + 4) * 24 * 60 * 60 + ) # needs to be checked header["scanPattern"] = struct.unpack("I", fin.read(4))[0] header["BscanHdrSize"] = struct.unpack("I", fin.read(4))[0] header["ID"] = fin.read(16) header["ReferenceID"] = fin.read(16) - header["PID"] = struct.unpack("I", fin.read(4))[0] + header["PID"] = struct.unpack("I", fin.read(4))[0] header["PatientID"] = fin.read(21) header["unknown2"] = fin.read(3) header["DOB"] = struct.unpack("d", fin.read(8))[0] - 25569 - header["DOB"] = datetime.datetime.utcfromtimestamp(0) + datetime.timedelta(seconds=header["DOB"] * 24 * 60 * 60 ) # needs to be checked + header["DOB"] = datetime.datetime.utcfromtimestamp(0) + datetime.timedelta( + seconds=header["DOB"] * 24 * 60 * 60 + ) # needs to be checked header["VID"] = struct.unpack("I", fin.read(4))[0] header["VisitID"] = fin.read(24) header["VisitDate"] = struct.unpack("d", fin.read(8))[0] - 25569 - header["VisitDate"] = datetime.datetime.utcfromtimestamp(0) + datetime.timedelta(seconds=header["VisitDate"] * 24 * 60 * 60) # needs to be checked + header["VisitDate"] = datetime.datetime.utcfromtimestamp(0) + datetime.timedelta( + seconds=header["VisitDate"] * 24 * 60 * 60 + ) # needs to be checked header["GridType"] = struct.unpack("I", fin.read(4))[0] header["GridOffset"] = struct.unpack("I", fin.read(4))[0] @@ -169,11 +177,11 @@ def __parseVolFile(self, fn, parseSeg=False): fin.seek(2048) U = array.array("B") U.frombytes(fin.read(header["sizeXSlo"] * header["sizeYSlo"])) - U = np.array(U).astype("uint8").reshape((header["sizeXSlo"],header["sizeYSlo"])) + U = np.array(U).astype("uint8").reshape((header["sizeXSlo"], header["sizeYSlo"])) wholefile["sloImage"] = U sloOffset = 2048 + header["sizeXSlo"] * header["sizeYSlo"] - octOffset = header["BscanHdrSize"] + header["octSizeX"] * header["octSizeZ"] * 4 + octOffset = header["BscanHdrSize"] + header["octSizeX"] * header["octSizeZ"] * 4 bscans = [] bscanheaders = [] bscanqualities = [] @@ -197,13 +205,13 @@ def __parseVolFile(self, fn, parseSeg=False): fin.seek(header["BscanHdrSize"] + sloOffset + i * octOffset) U = array.array("f") U.frombytes(fin.read(4 * header["octSizeX"] * header["octSizeZ"])) - U = np.array(U).reshape((header["octSizeZ"],header["octSizeX"])) - # remove out of boundary - v = struct.unpack("f", decode_hex('FFFF7F7F')[0]) + U = np.array(U).reshape((header["octSizeZ"], header["octSizeX"])) + # remove out of boundary + v = struct.unpack("f", decode_hex("FFFF7F7F")[0]) U[U == v] = 0 # log normalize U = np.log(10000 * U + 1) - U = (255. * (np.clip(U, 0, np.max(U)) / np.max(U))).astype("uint8") + U = (255.0 * (np.clip(U, 0, np.max(U)) / np.max(U))).astype("uint8") bscans.append(U) if parseSeg: # extract OCT segmentations data @@ -212,14 +220,14 @@ def __parseVolFile(self, fn, parseSeg=False): U.frombytes(fin.read(4 * header["octSizeX"] * bscanHead["numSeg"])) U = np.array(U) print(U.shape) - U[U == v] = 0. - if segmentations == None: + U[U == v] = 0.0 + if segmentations is None: segmentations = [] for j in range(bscanHead["numSeg"]): segmentations.append([]) for j in range(bscanHead["numSeg"]): - segmentations[j].append(U[j*header["octSizeX"]:(j+1) * header["octSizeX"]].tolist()) + segmentations[j].append(U[j * header["octSizeX"] : (j + 1) * header["octSizeX"]].tolist()) wholefile["cScan"] = np.array(bscans) if parseSeg: wholefile["segmentations"] = np.array(segmentations) @@ -228,35 +236,88 @@ def __parseVolFile(self, fn, parseSeg=False): self.wholefile = wholefile import csv from pathlib import Path, PurePath - volFeatures = [PurePath(fn).name, wholefile["header"]["version"].decode("utf-8").rstrip('\x00'), wholefile["header"]["numBscan"], wholefile["header"]["octSizeX"], wholefile["header"]["octSizeZ"], wholefile["header"]["distance"], wholefile["header"]["scaleX"], \ - wholefile["header"]["scaleZ"], wholefile["header"]["sizeXSlo"], wholefile["header"]["sizeYSlo"], wholefile["header"]["scaleXSlo"], wholefile["header"]["scaleYSlo"], wholefile["header"]["fieldSizeSlo"], \ - wholefile["header"]["scanFocus"], wholefile["header"]["scanPos"].decode("utf-8").rstrip('\x00'), wholefile["header"]["examTime"], wholefile["header"]["scanPattern"], wholefile["header"]["BscanHdrSize"], \ - wholefile["header"]["ID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["ReferenceID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["PID"], wholefile["header"]["PatientID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["DOB"], wholefile["header"]["VID"], wholefile["header"]["VisitID"].decode("utf-8").rstrip('\x00'), wholefile["header"]["VisitDate"], \ - wholefile["header"]["GridType"], wholefile["header"]["GridOffset"], wholefile["average-quality"]] + + volFeatures = [ + PurePath(fn).name, + wholefile["header"]["version"].decode("utf-8").rstrip("\x00"), + wholefile["header"]["numBscan"], + wholefile["header"]["octSizeX"], + wholefile["header"]["octSizeZ"], + wholefile["header"]["distance"], + wholefile["header"]["scaleX"], + wholefile["header"]["scaleZ"], + wholefile["header"]["sizeXSlo"], + wholefile["header"]["sizeYSlo"], + wholefile["header"]["scaleXSlo"], + wholefile["header"]["scaleYSlo"], + wholefile["header"]["fieldSizeSlo"], + wholefile["header"]["scanFocus"], + wholefile["header"]["scanPos"].decode("utf-8").rstrip("\x00"), + wholefile["header"]["examTime"], + wholefile["header"]["scanPattern"], + wholefile["header"]["BscanHdrSize"], + wholefile["header"]["ID"].decode("utf-8").rstrip("\x00"), + wholefile["header"]["ReferenceID"].decode("utf-8").rstrip("\x00"), + wholefile["header"]["PID"], + wholefile["header"]["PatientID"].decode("utf-8").rstrip("\x00"), + wholefile["header"]["DOB"], + wholefile["header"]["VID"], + wholefile["header"]["VisitID"].decode("utf-8").rstrip("\x00"), + wholefile["header"]["VisitDate"], + wholefile["header"]["GridType"], + wholefile["header"]["GridOffset"], + wholefile["average-quality"], + ] output_dir = PurePath(fn).parent - output_csv = output_dir.joinpath('vols.csv') + output_csv = output_dir.joinpath("vols.csv") if not Path(output_csv).exists(): print("Creating vols.csv as it does not exist.") - with open(output_csv, 'w', newline='') as file: + with open(output_csv, "w", newline="") as file: writer = csv.writer(file) - writer.writerow(["filename", "version", "numBscan", "octSizeX", "octSizeZ", "distance", "scaleX", \ - "scaleZ", "sizeXSlo", "sizeYSlo", "scaleXSlo", "scaleYSlo", "fieldSizeSlo", \ - "scanFocus", "scanPos", "examTime", "scanPattern", "BscanHdrSize", \ - "ID", "ReferenceID", "PID", "PatientID", "DOB", "VID", "VisitID", "VisitDate", \ - "GridType", "GridOffset", "Average Quality"]) - with open(output_csv, 'r', newline='') as file: + writer.writerow( + [ + "filename", + "version", + "numBscan", + "octSizeX", + "octSizeZ", + "distance", + "scaleX", + "scaleZ", + "sizeXSlo", + "sizeYSlo", + "scaleXSlo", + "scaleYSlo", + "fieldSizeSlo", + "scanFocus", + "scanPos", + "examTime", + "scanPattern", + "BscanHdrSize", + "ID", + "ReferenceID", + "PID", + "PatientID", + "DOB", + "VID", + "VisitID", + "VisitDate", + "GridType", + "GridOffset", + "Average Quality", + ] + ) + with open(output_csv, "r", newline="") as file: existing_vols = csv.reader(file) for vol in existing_vols: if vol[0] == PurePath(fn).name: print("Skipping,", PurePath(fn).name, "already present in vols.csv.") return - with open(output_csv, 'a', newline='') as file: + with open(output_csv, "a", newline="") as file: print("Adding", PurePath(fn).name, "to vols.csv.") writer = csv.writer(file) writer.writerow(volFeatures) - - @property def fileHeader(self): """ @@ -336,5 +397,3 @@ def saveGrid(self, outfn): r = [ri] + r fout.write("%s\n" % "\t".join(map(str, r))) ri += 1 - - diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 1cb1fe5c..272819a9 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -1,15 +1,8 @@ -import os - -os.chdir(os.path.dirname(os.path.abspath(__file__))) -current_directory = os.getcwd() -print(current_directory) - - +import json import logging +import os import pickle -import urllib -import configargparse import pandas as pd import progressbar from detectron2.checkpoint import DetectionCheckpointer @@ -18,22 +11,24 @@ from detectron2.evaluation import COCOEvaluator, inference_on_dataset from detectron2.modeling import build_model +os.chdir(os.path.dirname(os.path.abspath(__file__))) +current_directory = os.getcwd() +print(current_directory) from .analysis_lib import CreatePlotsRPD, EvaluateClass, OutputVis, grab_dataset from .datasets import data from .Ensembler import Ensembler from .table_styles import styles -logging.basicConfig(level=logging.INFO) -import json -import urllib.request -import zipfile +logging.basicConfig(level=logging.INFO) -os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" +os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" os.environ["CUDA_VISIBLE_DEVICES"] = "0" -dpi= 120 -class MyProgressBar(): +dpi = 120 + + +class MyProgressBar: # https://stackoverflow.com/a/53643011/3826929 # George C def __init__(self): @@ -41,7 +36,7 @@ def __init__(self): def __call__(self, block_num, block_size, total_size): if not self.pbar: - self.pbar=progressbar.ProgressBar(maxval=total_size) + self.pbar = progressbar.ProgressBar(maxval=total_size) self.pbar.start() downloaded = block_num * block_size @@ -50,100 +45,116 @@ def __call__(self, block_num, block_size, total_size): else: self.pbar.finish() -def create_dataset(dataset_name, extracted_path): # Creates dataset and pk file from extracted images. + +def create_dataset(dataset_name, extracted_path): # Creates dataset and pk file from extracted images. stored_data = data.rpd_data(extracted_path) - pickle.dump(stored_data, open(os.path.join(data.script_dir,f"{dataset_name}.pk"), "wb")) - + pickle.dump(stored_data, open(os.path.join(data.script_dir, f"{dataset_name}.pk"), "wb")) + + def configure_model(): cfg = get_cfg() moddir = os.path.dirname(os.path.realpath(__file__)) - name = 'working.yaml' + name = "working.yaml" cfg_path = os.path.join(moddir, name) cfg.merge_from_file(cfg_path) return cfg + def register_dataset(dataset_name): for name in [dataset_name]: try: DatasetCatalog.register(name, grab_dataset(name)) - except: - print('Already registered.') + except AssertionError as e: + print(f"Assertion failed: {e}. Already registered.") MetadataCatalog.get(name).thing_classes = ["rpd"] + def run_prediction(cfg, dataset_name, output_path): model = build_model(cfg) # returns a torch.nn.Module - myloader = build_detection_test_loader(cfg,dataset_name) - myeval = COCOEvaluator(dataset_name,tasks={'bbox','segm'},output_dir =output_path) #produces _coco_format.json when initialized - for mdl in ("fold1", "fold2", "fold3", "fold4","fold5"): - extract_directory = '../model' + myloader = build_detection_test_loader(cfg, dataset_name) + myeval = COCOEvaluator( + dataset_name, tasks={"bbox", "segm"}, output_dir=output_path + ) # produces _coco_format.json when initialized + for mdl in ("fold1", "fold2", "fold3", "fold4", "fold5"): + extract_directory = "../model" file_name = mdl + "_model_final.pth" model_weights_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), extract_directory, file_name) print(model_weights_path) - DetectionCheckpointer(model).load(model_weights_path) # load a file, usually from cfg.MODEL.WEIGHTS - model.eval() #set model in evaluation mode + DetectionCheckpointer(model).load(model_weights_path) # load a file, usually from cfg.MODEL.WEIGHTS + model.eval() # set model in evaluation mode myeval.reset() output_dir = os.path.join(output_path, mdl) myeval._output_dir = output_dir print("Running inference with model ", mdl) - results_i = inference_on_dataset(model, myloader, myeval) #produces coco_instance_results.json when myeval.evaluate is called + _ = inference_on_dataset( + model, myloader, myeval + ) # produces coco_instance_results.json when myeval.evaluate is called print("Done with predictions!") -def run_ensemble(dataset_name, output_path, iou_thresh = 0.2): - ens = Ensembler(output_path,dataset_name,["fold1", "fold2", "fold3", "fold4","fold5"], iou_thresh=iou_thresh) + +def run_ensemble(dataset_name, output_path, iou_thresh=0.2): + ens = Ensembler(output_path, dataset_name, ["fold1", "fold2", "fold3", "fold4", "fold5"], iou_thresh=iou_thresh) ens.mean_score_nms() ens.save_coco_instances() return ens -def evaluate_dataset(dataset_name, output_path,iou_thresh = 0.2,prob_thresh = 0.5): - myeval = EvaluateClass(dataset_name, output_path, iou_thresh = iou_thresh, prob_thresh=prob_thresh,evalsuper=False) + +def evaluate_dataset(dataset_name, output_path, iou_thresh=0.2, prob_thresh=0.5): + myeval = EvaluateClass(dataset_name, output_path, iou_thresh=iou_thresh, prob_thresh=prob_thresh, evalsuper=False) myeval.evaluate() - with open(os.path.join(output_path,'scalar_dict.json'),"w") as outfile: - json.dump(obj=myeval.summarize_scalars(),fp=outfile) + with open(os.path.join(output_path, "scalar_dict.json"), "w") as outfile: + json.dump(obj=myeval.summarize_scalars(), fp=outfile) return myeval + def create_table(myeval): - dataset_table = CreatePlotsRPD.initfromcoco(myeval.mycoco,myeval.prob_thresh) + dataset_table = CreatePlotsRPD.initfromcoco(myeval.mycoco, myeval.prob_thresh) dataset_table.dfimg.sort_index(inplace=True) return dataset_table - #dataset_table.dfimg['scan'] = dataset_table.dfimg['scan'].astype('int') #depends on what we want scan field to be + # dataset_table.dfimg['scan'] = dataset_table.dfimg['scan'].astype('int') #depends on what we want scan field to be + -def output_vol_predictions(dataset_table,vis,volID,output_path,output_mode='pred_overlay'): +def output_vol_predictions(dataset_table, vis, volID, output_path, output_mode="pred_overlay"): dfimg = dataset_table.dfimg - imgids = dfimg[dfimg.volID ==volID].sort_index().index.values - outname = os.path.join(output_path,f'{volID}.tiff') - if output_mode=='pred_overlay': - vis.output_pred_to_tiff(imgids,outname,pred_only=False) - elif output_mode == 'pred_only': - vis.output_pred_to_tiff(imgids,outname,pred_only=True) - elif output_mode == 'originals': - vis.output_ori_to_tiff(imgids,outname) - elif output_mode == 'all': - vis.output_all_to_tiff(imgids,outname) + imgids = dfimg[dfimg.volID == volID].sort_index().index.values + outname = os.path.join(output_path, f"{volID}.tiff") + if output_mode == "pred_overlay": + vis.output_pred_to_tiff(imgids, outname, pred_only=False) + elif output_mode == "pred_only": + vis.output_pred_to_tiff(imgids, outname, pred_only=True) + elif output_mode == "originals": + vis.output_ori_to_tiff(imgids, outname) + elif output_mode == "all": + vis.output_all_to_tiff(imgids, outname) else: - print(f'Invalid mode {output_mode} for function output_vol_predictions.') + print(f"Invalid mode {output_mode} for function output_vol_predictions.") -def output_dataset_predictions(dataset_table,vis,output_path,output_mode = 'pred_overlay',draw_mode='default'): + +def output_dataset_predictions(dataset_table, vis, output_path, output_mode="pred_overlay", draw_mode="default"): vis.set_draw_mode(draw_mode) - os.makedirs(output_path,exist_ok=True) ## should this be set to exist_ok=False? + os.makedirs(output_path, exist_ok=True) for volID in dataset_table.dfvol.index: - output_vol_predictions(dataset_table,vis,volID,output_path,output_mode) + output_vol_predictions(dataset_table, vis, volID, output_path, output_mode) + def create_dfvol(dataset_name, output_path, dataset_table): - dfvol = dataset_table.dfvol.sort_values(by=['dt_instances'],ascending=False) - with pd.option_context('styler.render.max_elements', int(dfvol.size)+1): - html_str = dfvol.style.format('{:.0f}').set_table_styles(styles).to_html() - html_file = open(os.path.join(output_path, 'dfvol_'+dataset_name+'.html'),'w') + dfvol = dataset_table.dfvol.sort_values(by=["dt_instances"], ascending=False) + with pd.option_context("styler.render.max_elements", int(dfvol.size) + 1): + html_str = dfvol.style.format("{:.0f}").set_table_styles(styles).to_html() + html_file = open(os.path.join(output_path, "dfvol_" + dataset_name + ".html"), "w") html_file.write(html_str) html_file.close() + def create_dfimg(dataset_name, output_path, dataset_table): dfimg = dataset_table.dfimg.sort_index() - with pd.option_context('styler.render.max_elements', int(dfimg.size)+1): + with pd.option_context("styler.render.max_elements", int(dfimg.size) + 1): html_str = dfimg.style.set_table_styles(styles).to_html() - html_file = open(os.path.join(output_path, 'dfimg_'+dataset_name+'.html'),'w') + html_file = open(os.path.join(output_path, "dfimg_" + dataset_name + ".html"), "w") html_file.write(html_str) html_file.close() + def main(args): dataset_name = None input_dir = None @@ -161,20 +172,20 @@ def main(args): print(args) - dataset_name = args.get('dataset_name') # Access values from the dictionary - input_dir = args.get('input_dir') - extracted = args.get('extracted_dir') - input_format = args.get('input_format') - output = args.get('output_dir') - run_ext = args.get('run_extract', True) # Provide default values - make_dataset = args.get('create_dataset',True) - run_inf = args.get('run_inference', True) - prob_thresh = args.get('prob_thresh',0.5) - make_table = args.get('create_tables', True) - bm = args.get('binary_mask', False) - bmo = args.get('binary_mask_overlay', False) - imo = args.get('instance_mask_overlay', False) - make_visuals = (bm | bmo | imo) + dataset_name = args.get("dataset_name") # Access values from the dictionary + input_dir = args.get("input_dir") + extracted = args.get("extracted_dir") + input_format = args.get("input_format") + output = args.get("output_dir") + run_ext = args.get("run_extract", True) # Provide default values + make_dataset = args.get("create_dataset", True) + run_inf = args.get("run_inference", True) + prob_thresh = args.get("prob_thresh", 0.5) + make_table = args.get("create_tables", True) + bm = args.get("binary_mask", False) + bmo = args.get("binary_mask_overlay", False) + imo = args.get("instance_mask_overlay", False) + make_visuals = bm | bmo | imo if run_ext: if not os.path.isdir(extracted): @@ -182,7 +193,7 @@ def main(args): os.mkdir(extracted) data.extract_files(input_dir, extracted, input_format) print("Image extraction complete!") - if make_dataset: + if make_dataset: print("Creating dataset from extracted images...") create_dataset(dataset_name, extracted) if run_inf: @@ -206,28 +217,37 @@ def main(args): print("Creating dataset table...") table = create_table(eval) if make_table: - create_dfvol(dataset_name, output, table) - create_dfimg(dataset_name, output, table) - print("Dataset htmls complete!") + create_dfvol(dataset_name, output, table) + create_dfimg(dataset_name, output, table) + print("Dataset htmls complete!") if make_visuals: - vis = OutputVis(dataset_name, - prob_thresh = eval.prob_thresh, - pred_mode = 'file', - pred_file = os.path.join(output, 'coco_instances_results.json'), - has_annotations=False) - vis.scale=1.0 + vis = OutputVis( + dataset_name, + prob_thresh=eval.prob_thresh, + pred_mode="file", + pred_file=os.path.join(output, "coco_instances_results.json"), + has_annotations=False, + ) + vis.scale = 1.0 if bm: print("Creating binary masks tif (no overlay)...") - vis.annotation_color='w' - output_dataset_predictions(table,vis,os.path.join(output,'predicted_binary_masks'),'pred_only','bw') + vis.annotation_color = "w" + output_dataset_predictions( + table, vis, os.path.join(output, "predicted_binary_masks"), "pred_only", "bw" + ) if bmo: print("Creating binary masks tif (with overlay)...") - output_dataset_predictions(table,vis,os.path.join(output,'predicted_binary_overlays'),'pred_overlay','bw') + output_dataset_predictions( + table, vis, os.path.join(output, "predicted_binary_overlays"), "pred_overlay", "bw" + ) if imo: print("Creating instances masks tif (with overlay)...") - output_dataset_predictions(table,vis,os.path.join(output,'predicted_instance_overlays'),'pred_overlay','default') + output_dataset_predictions( + table, vis, os.path.join(output, "predicted_instance_overlays"), "pred_overlay", "default" + ) print("Visualizations complete!") + # if __name__ == "__main__": # main(sys.argv[1:]) -# # main_alt() \ No newline at end of file +# # main_alt() diff --git a/models/retinalOCT_RPD_segmentation/scripts/table_styles.py b/models/retinalOCT_RPD_segmentation/scripts/table_styles.py index 148e76b6..eb32e97c 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/table_styles.py +++ b/models/retinalOCT_RPD_segmentation/scripts/table_styles.py @@ -1,41 +1,32 @@ def hover(hover_color="#add8e6"): - return dict(selector="tbody tr:hover", - props=[("background-color", "%s" % hover_color)]) + return dict(selector="tbody tr:hover", props=[("background-color", "%s" % hover_color)]) -styles = [ - #table properties - dict(selector=" ", - props=[("margin","0"), - ("font-family",'"Helvetica", "Arial", sans-serif'), - ("border-collapse", "collapse"), - ("border","none"), - ("border", "2px solid #ccf") - ]), - -# #header color - optional -# dict(selector="thead", -# props=[("background-color","#cc8484") -# ]), - - #background shading - dict(selector="tbody tr:nth-child(even)", - props=[("background-color", "#fff")]), - dict(selector="tbody tr:nth-child(odd)", - props=[("background-color", "#eee")]), - - #cell spacing - dict(selector="td", - props=[("padding", ".5em"),("text-align","center")]), - #header cell properties - dict(selector="th", - props=[("font-size", "125%"), - ("text-align", "center")]), - - #caption placement - dict(selector="caption", - props=[("caption-side", "bottom")]), - - #render hover last to override background-color - hover() +styles = [ + # table properties + dict( + selector=" ", + props=[ + ("margin", "0"), + ("font-family", '"Helvetica", "Arial", sans-serif'), + ("border-collapse", "collapse"), + ("border", "none"), + ("border", "2px solid #ccf"), + ], + ), + # #header color - optional + # dict(selector="thead", + # props=[("background-color","#cc8484") + # ]), + # background shading + dict(selector="tbody tr:nth-child(even)", props=[("background-color", "#fff")]), + dict(selector="tbody tr:nth-child(odd)", props=[("background-color", "#eee")]), + # cell spacing + dict(selector="td", props=[("padding", ".5em"), ("text-align", "center")]), + # header cell properties + dict(selector="th", props=[("font-size", "125%"), ("text-align", "center")]), + # caption placement + dict(selector="caption", props=[("caption-side", "bottom")]), + # render hover last to override background-color + hover(), ] From f7e9de6bbd862aed5a3b0d3ab68d8978bd96f33c Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Tue, 25 Mar 2025 13:17:36 -0700 Subject: [PATCH 05/28] Removed configargparser and added PNG naming instructions in readme. --- models/retinalOCT_RPD_segmentation/configs/metadata.json | 1 - models/retinalOCT_RPD_segmentation/docs/README.md | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 45e3101a..189e932f 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -12,7 +12,6 @@ "pandas": "1.3.5", "seaborn": "0.12.2", "scikit-learn": "1.0.2", - "configargparse": "1.7", "progressbar": "2.5", "pydicom": "2.4.4", "fire": "0.7.0", diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index 11730193..9f0f698d 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -28,11 +28,11 @@ In the external test datasets, the overall performance for detecting RPD in a vo For more details regarding evaluation results, please see Results section of paper. -## INSTALLATION + ## USAGE The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: @@ -109,7 +109,7 @@ The tables can be created by setting `create_tables` to `True`: The predicted segmentations can be output as multi-page TIFFs, where each TIFF file corresponds to an input volume of the dataset, and each page to an OCT slice from the volume in original order. The output images can be binary masks, binary masks overlaying the original B-scan, and instance masks overlaying the original B-scan. Set the `binary_mask`, `binary_mask_overlay` and `instance_mask_overlay` flags in the yaml file to `True` accordingly. ### SAMPLE DATA -As a reference, sample OCT-B scans are provided in PNG format under the `sample_data` directory. Set `extracted_dir` in `inference.yaml` to `sample_data` to run inference on these few set of images. +As a reference, sample OCT-B scans are provided in PNG format under the sample_data directory. Set `extracted_dir` in `inference.yaml` to `sample_data` to run inference on these few set of images. ## **System Configuration** Inference on one Nvidia A100 gpu takes about 0.041 s/batch of 14 images, about 3G of gpu memory, and 6G of RAM. From 30dabf9a9b51704563dfc8cdfb1bf9fa735ab850 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Tue, 1 Apr 2025 14:14:41 -0700 Subject: [PATCH 06/28] Moved large_files.yaml into retinalOCT_RPD_Segmentation into bundle root. --- models/retinalOCT_RPD_segmentation/{configs => }/large_files.yaml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename models/retinalOCT_RPD_segmentation/{configs => }/large_files.yaml (100%) diff --git a/models/retinalOCT_RPD_segmentation/configs/large_files.yaml b/models/retinalOCT_RPD_segmentation/large_files.yaml similarity index 100% rename from models/retinalOCT_RPD_segmentation/configs/large_files.yaml rename to models/retinalOCT_RPD_segmentation/large_files.yaml From efb5da88120321081feec58d1721a3644e7f8e32 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Tue, 29 Apr 2025 22:16:34 +0000 Subject: [PATCH 07/28] Updated dependencies. Updated depreciated pandas api. Updated install instructions in readme. --- ci/bundle_custom_data.py | 4 +++- ..._retinalOCT_RPD_segmentation_dependency.sh | 3 +++ .../test_retinalOCT_RPD_segmentation.py | 2 +- .../configs/metadata.json | 19 ++++++++++--------- .../docs/README.md | 11 +++++++++++ .../docs/requirements.txt | 7 +++++++ .../scripts/Ensembler.py | 5 +++-- .../scripts/inference.py | 2 +- 8 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh create mode 100644 models/retinalOCT_RPD_segmentation/docs/requirements.txt diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index 51cb50bf..2fcdd599 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -60,7 +60,9 @@ # This dict is used for our CI tests to install required dependencies that cannot be installed by `pip install` directly. # If a bundle has this kind of dependencies, please add the bundle name (key), and the path of the install script (value) # into the dict. -install_dependency_dict = {"maisi_ct_generative": "ci/install_scripts/install_maisi_ct_generative_dependency.sh"} +install_dependency_dict = { + "maisi_ct_generative": "ci/install_scripts/install_maisi_ct_generative_dependency.sh", + "retinalOCT_RPD_segmentation": "ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh"} # This list is used for our CI tests to determine whether a bundle supports TensorRT export. Related # test will be employed for bundles in the dict. diff --git a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh new file mode 100644 index 00000000..ca13eb69 --- /dev/null +++ b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh @@ -0,0 +1,3 @@ +# ensure that using evironment with python==3.9 +pip install -r ./docs/requirements.txt #includes monai +python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' diff --git a/ci/unit_tests/test_retinalOCT_RPD_segmentation.py b/ci/unit_tests/test_retinalOCT_RPD_segmentation.py index 79c6c80d..f245b0fe 100644 --- a/ci/unit_tests/test_retinalOCT_RPD_segmentation.py +++ b/ci/unit_tests/test_retinalOCT_RPD_segmentation.py @@ -111,7 +111,7 @@ def test_inference_run(self): # At least 10 RPD present in sample data dfvol = pd.read_html(os.path.join(self.output_dir, "dfvol_testDataset.html"))[0] - self.assertTrue(dfvol["dt_instances"].sum()[0] > 10) + self.assertTrue(dfvol["dt_instances"].sum().iloc[0] > 10) if __name__ == "__main__": diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 189e932f..4078d7c9 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -4,19 +4,20 @@ "changelog": { "0.0.1": "Initial version" }, - "monai_version": "1.1.0", - "pytorch_version": "1.10.0", - "numpy_version": "1.21.2", - "optional_packages_version": { + "monai_version": "1.4.0", + "pytorch_version": "2.7.0", + "numpy_version": "1.26.4", + "optional_packages_version": {}, + "required_packages_version": { "opencv-python-headless": "4.11.0.86", - "pandas": "1.3.5", - "seaborn": "0.12.2", - "scikit-learn": "1.0.2", + "pandas": "2.2.3", + "seaborn": "0.13.2", + "scikit-learn": "1.6.1", "progressbar": "2.5", "pydicom": "2.4.4", "fire": "0.7.0", - "jinja2": "3.1.5", - "detectron2": "0.6+cu113" + "detectron2": "0.6", + "lxml": "5.4.0" }, "name": "retinalOCT_RPD_segmentation", "task": "Reticular Pseudodrusen (RPD) instance segmentation.", diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index 9f0f698d..2ae275de 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -33,6 +33,17 @@ This bundle can be installed using docker by navigating to the RPDBundle directo ``` docker build -t : . ``` --> +## INSTALL +The following installation order works when installing into an environment with python==3.9. + +From the bundle directory, install the required packages using +``` +pip install -r ./docs/requirements.txt +``` +Install detectron2 using +``` +python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' +``` ## USAGE The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: diff --git a/models/retinalOCT_RPD_segmentation/docs/requirements.txt b/models/retinalOCT_RPD_segmentation/docs/requirements.txt new file mode 100644 index 00000000..c80d6e8a --- /dev/null +++ b/models/retinalOCT_RPD_segmentation/docs/requirements.txt @@ -0,0 +1,7 @@ +monai[fire,ninja,torchvision,pandas,pydicom] + +opencv-python-headless +seaborn +scikit-learn +progressbar +lxml diff --git a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py index b91d0771..28d47b51 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py +++ b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py @@ -88,10 +88,11 @@ def nik_merge(lsts): ) for img in tqdm(self.coco_gt.imgs.keys()): # print(img) - df = pd.DataFrame() # a dataframe of detections + dflist = [] # a dataframe of detections obj_set = set() # a set of objects (frozensets) for i, coco_dt in enumerate(self.dtlist): # for each detector append predictions to df - df = df.append(pd.DataFrame(coco_dt.imgToAnns[img]).assign(det=i), ignore_index=True) + dflist.append(pd.DataFrame(coco_dt.imgToAnns[img]).assign(det=i)) + df = pd.concat(dflist,ignore_index=True) if not df.empty: for cat in self.cats: # for each category dfcat = df[df["category_id"] == cat] diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 272819a9..45b8afe4 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -76,7 +76,7 @@ def run_prediction(cfg, dataset_name, output_path): dataset_name, tasks={"bbox", "segm"}, output_dir=output_path ) # produces _coco_format.json when initialized for mdl in ("fold1", "fold2", "fold3", "fold4", "fold5"): - extract_directory = "../model" + extract_directory = "../models" file_name = mdl + "_model_final.pth" model_weights_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), extract_directory, file_name) print(model_weights_path) From 7cd1394cc02316100550379a19f29dc07ce382ab Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Fri, 16 May 2025 04:22:58 +0000 Subject: [PATCH 08/28] fix isort and update cit for detectron2 Signed-off-by: Yiheng Wang --- ci/get_bundle_requirements.py | 3 + ..._retinalOCT_RPD_segmentation_dependency.sh | 1 - .../configs/inference.yaml | 2 +- .../configs/metadata.json | 240 ++++++++++-------- .../docs/README.md | 32 +-- .../docs/requirements.txt | 6 +- .../large_files.yaml | 10 +- .../scripts/inference.py | 1 - .../scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml | 6 +- .../scripts/working.yaml | 6 +- 10 files changed, 168 insertions(+), 139 deletions(-) diff --git a/ci/get_bundle_requirements.py b/ci/get_bundle_requirements.py index 9262b112..fbf0c56c 100644 --- a/ci/get_bundle_requirements.py +++ b/ci/get_bundle_requirements.py @@ -19,6 +19,7 @@ ALLOW_MONAI_RC = os.environ.get("ALLOW_MONAI_RC", "false").lower() in ("true", "1", "t", "y", "yes") +special_dependencies_list = ["detectron2"] def increment_version(version): """ @@ -79,6 +80,8 @@ def get_requirements(bundle, models_path, requirements_file): if package_key in metadata.keys(): optional_dict = metadata[package_key] for name, version in optional_dict.items(): + if name in special_dependencies_list: + continue libs.append(f"{name}=={version}") if len(libs) > 0: diff --git a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh index ca13eb69..ccf94ba5 100644 --- a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh +++ b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh @@ -1,3 +1,2 @@ # ensure that using evironment with python==3.9 -pip install -r ./docs/requirements.txt #includes monai python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' diff --git a/models/retinalOCT_RPD_segmentation/configs/inference.yaml b/models/retinalOCT_RPD_segmentation/configs/inference.yaml index 35336773..fd148017 100644 --- a/models/retinalOCT_RPD_segmentation/configs/inference.yaml +++ b/models/retinalOCT_RPD_segmentation/configs/inference.yaml @@ -20,4 +20,4 @@ args: instance_mask_overlay : False inference: -- $scripts.inference.main(@args) \ No newline at end of file +- $scripts.inference.main(@args) diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 4078d7c9..fe37a74b 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -1,105 +1,143 @@ { - "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", - "version": "0.0.1", - "changelog": { - "0.0.1": "Initial version" - }, - "monai_version": "1.4.0", - "pytorch_version": "2.7.0", - "numpy_version": "1.26.4", - "optional_packages_version": {}, - "required_packages_version": { - "opencv-python-headless": "4.11.0.86", - "pandas": "2.2.3", - "seaborn": "0.13.2", - "scikit-learn": "1.6.1", - "progressbar": "2.5", - "pydicom": "2.4.4", - "fire": "0.7.0", - "detectron2": "0.6", - "lxml": "5.4.0" - }, - "name": "retinalOCT_RPD_segmentation", - "task": "Reticular Pseudodrusen (RPD) instance segmentation.", - "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", - "authors": "Yelena Bagdasarova, Scott Song", - "copyright": "Copyright (c) 2022, uw-biomedical-ml", - "network_data_format": { - "inputs": { - "image": { - "type": "image", - "format": "PNG", - "modality": "OCT", - "num_channels": 1, - "spatial_shape":[496,1024], - "dtype": "int16", - "value_range": [0,256], - "is_patch_data": false, - "channel_def": {"0": "image"} - } + "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", + "version": "0.0.1", + "changelog": { + "0.0.1": "Initial version" }, - "preprocessed_data_sources": { - "vol_file": { - "type": "image", - "format": "VOL", - "modality": "OCT", - "num_channels": 1, - "spatial_shape":[496,1024,"D"], - "dtype": "int16", - "value_range": [0,256], - "description": "The pixel array of each OCT slice is extracted with volreader and the png files saved to ////_oct_.png on disk, where is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " - - }, - "dicom_series": { - "type": "image", - "format": "DICOM", - "modality": "OCT", - "SOP class UID" : "1.2.840.10008.5.1.4.1.1.77.1.5.4", - "num_channels": 1, - "spatial_shape":[496,1024,"D"], - "dtype": "int16", - "value_range": [0,256], - "description": "The pixel array of each OCT slice is extracted with pydicom and the png files saved to //_oct_.png on disk, where is the slice number. " - } + "monai_version": "1.4.0", + "pytorch_version": "2.7.0", + "numpy_version": "1.26.4", + "optional_packages_version": {}, + "required_packages_version": { + "opencv-python-headless": "4.11.0.86", + "pandas": "2.2.3", + "seaborn": "0.13.2", + "scikit-learn": "1.6.1", + "progressbar": "2.5", + "pydicom": "2.4.4", + "fire": "0.7.0", + "detectron2": "0.6", + "lxml": "5.4.0" }, - "outputs": { - "pred": { - "dtype": "dictionary", - "type": "dictionary", - "format": "COCO", - "modality": "n/a", - "value_range": [0,1], - "num_channels": 1, - "spatial_shape": [496,1024], - "channel_def": {"0": "RPD"}, - "description": "This output is a JSON file in COCO Instance Segmentation format, containing bounding boxes, segmentation masks, and output probabilities for detected instances." - } - }, - "post_processed_outputs": { - "binary segmentation": { - "type": "image", - "format": "TIFF", - "modality": "OCT", - "num_channels": 3, - "spatial_shape": [496,1024], - "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a binary segmentation mask for a single OCT slice from the input volume. The segmentation masks are stacked in the same order as the original OCT slices." - }, - "binary segmentation overlay": { - "type": "image", - "format": "TIFF", - "modality": "OCT", - "num_channels": 3, - "spatial_shape": [496,1024], - "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." - }, - "instance segmentation overlay": { - "type": "image", - "format": "TIFF", - "modality": "OCT", - "num_channels": 3, - "spatial_shape": [496,1024], - "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." - } + "name": "retinalOCT_RPD_segmentation", + "task": "Reticular Pseudodrusen (RPD) instance segmentation.", + "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", + "authors": "Yelena Bagdasarova, Scott Song", + "copyright": "Copyright (c) 2022, uw-biomedical-ml", + "network_data_format": { + "inputs": { + "image": { + "type": "image", + "format": "PNG", + "modality": "OCT", + "num_channels": 1, + "spatial_shape": [ + 496, + 1024 + ], + "dtype": "int16", + "value_range": [ + 0, + 256 + ], + "is_patch_data": false, + "channel_def": { + "0": "image" + } + } + }, + "preprocessed_data_sources": { + "vol_file": { + "type": "image", + "format": "VOL", + "modality": "OCT", + "num_channels": 1, + "spatial_shape": [ + 496, + 1024, + "D" + ], + "dtype": "int16", + "value_range": [ + 0, + 256 + ], + "description": "The pixel array of each OCT slice is extracted with volreader and the png files saved to ////_oct_.png on disk, where is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " + }, + "dicom_series": { + "type": "image", + "format": "DICOM", + "modality": "OCT", + "SOP class UID": "1.2.840.10008.5.1.4.1.1.77.1.5.4", + "num_channels": 1, + "spatial_shape": [ + 496, + 1024, + "D" + ], + "dtype": "int16", + "value_range": [ + 0, + 256 + ], + "description": "The pixel array of each OCT slice is extracted with pydicom and the png files saved to //_oct_.png on disk, where is the slice number. " + } + }, + "outputs": { + "pred": { + "dtype": "dictionary", + "type": "dictionary", + "format": "COCO", + "modality": "n/a", + "value_range": [ + 0, + 1 + ], + "num_channels": 1, + "spatial_shape": [ + 496, + 1024 + ], + "channel_def": { + "0": "RPD" + }, + "description": "This output is a JSON file in COCO Instance Segmentation format, containing bounding boxes, segmentation masks, and output probabilities for detected instances." + } + }, + "post_processed_outputs": { + "binary segmentation": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [ + 496, + 1024 + ], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a binary segmentation mask for a single OCT slice from the input volume. The segmentation masks are stacked in the same order as the original OCT slices." + }, + "binary segmentation overlay": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [ + 496, + 1024 + ], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." + }, + "instance segmentation overlay": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [ + 496, + 1024 + ], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." + } + } } - } -} \ No newline at end of file +} diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index 2ae275de..c8802d63 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -7,20 +7,20 @@ Himeesh Kumar, Yelena Bagdasarova, Scott Song, Doron G. Hickey, Amy C. Cohn, Mal Reticular Pseudodrusen, AMD, OCT, Segmentation ## **Model Description** -This model detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans. The instance segmentation model used a Mask-RCNN [1] head with the ResNeXt-101-32x8d-FPN [2] backbone (pretrained on ImageNet) implemented via the Detectron2 framework [3]. The model produces outputs that consist of bounding boxes and segmentation masks that delineate the coordinates and pixels of each instance detected, which are assigned a corresponding output probability. A tuneable probability threshold can then be applied to finalise the binary detection of an RPD instance. +This model detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans. The instance segmentation model used a Mask-RCNN [1] head with the ResNeXt-101-32x8d-FPN [2] backbone (pretrained on ImageNet) implemented via the Detectron2 framework [3]. The model produces outputs that consist of bounding boxes and segmentation masks that delineate the coordinates and pixels of each instance detected, which are assigned a corresponding output probability. A tuneable probability threshold can then be applied to finalise the binary detection of an RPD instance. Five segmentation models using these RPD instance labels on the OCT B-scans were trained based on five-fold cross-validation which were used to form a final ensemble model using soft voting (see supplementary material of paper for more information on model training.) ## **Data** The model was trained using the prospectively-collected, baseline OCT scans (prior to any treatments) of individuals enrolled in the LEAD study [4] imaged using Heidelberg Spectralis HRA+OCT. OCT B-scans from 200 eyes from 100 individuals in the LEAD study were randomly selected to undergo manual annotations of RPD by a single grader (HK) at the pixel level, following training from two senior investigators (RHG and ZW). Only definite RPD lesions, defined as subretinal hyperreflective accumulations that altered the contour of, or broke through, the overlying photoreceptor ellipsoid zone on the OCT B-scans were annotated. -The model was then internally tested in a different set of OCT scans from 125 eyes from 92 individuals from the LEAD study, and externally tested on five independent datasets: the MACUSTAR study [5], the Northern Ireland Cohort for Longitudinal Study of Ageing (NICOLA) study [6], the Montrachet study [7], AMD observational studies at the University of Bonn, Germany (UB), and a routine clinical care cohort seen at the University of Washington (UW). The presence of RPD was graded either as part of each study (MACUSTAR and UB datasets) or graded by one of the study investigators (HK; in the NICOLA, UW, and Montrachet datasets). All these studies defined RPD based on the presence of five or more definite lesions on more than one OCT B-scan that corresponded to hyporeflective lesions seen on near-infrared reflectance imaging. +The model was then internally tested in a different set of OCT scans from 125 eyes from 92 individuals from the LEAD study, and externally tested on five independent datasets: the MACUSTAR study [5], the Northern Ireland Cohort for Longitudinal Study of Ageing (NICOLA) study [6], the Montrachet study [7], AMD observational studies at the University of Bonn, Germany (UB), and a routine clinical care cohort seen at the University of Washington (UW). The presence of RPD was graded either as part of each study (MACUSTAR and UB datasets) or graded by one of the study investigators (HK; in the NICOLA, UW, and Montrachet datasets). All these studies defined RPD based on the presence of five or more definite lesions on more than one OCT B-scan that corresponded to hyporeflective lesions seen on near-infrared reflectance imaging. #### **Preprocessing** Scans were kept at native resolution (1024 x 496 pixels). ## **Performance** -In the external test datasets, the overall performance for detecting RPD in a volume scan was (AUC = 0·94; 95% CI = 0·92–0·97). In the internal test dataset, the Dice coefficient (DSC) between the model and manual annotations by retinal specialists for each B-scan was caculated and the average over the dataset is listed in the table below. Note that the DSC was assigned a value of 1·0 to all pairwise comparisons where no pixels on a B-scan were labelled as having RPD. +In the external test datasets, the overall performance for detecting RPD in a volume scan was (AUC = 0·94; 95% CI = 0·92–0·97). In the internal test dataset, the Dice coefficient (DSC) between the model and manual annotations by retinal specialists for each B-scan was caculated and the average over the dataset is listed in the table below. Note that the DSC was assigned a value of 1·0 to all pairwise comparisons where no pixels on a B-scan were labelled as having RPD. ![](Table2.gif) @@ -29,7 +29,7 @@ In the external test datasets, the overall performance for detecting RPD in a vo For more details regarding evaluation results, please see Results section of paper. @@ -46,7 +46,7 @@ python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' ``` ## USAGE -The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: +The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: ``` imports: @@ -73,7 +73,7 @@ args: inference: - $scripts.inference.main(@args) ``` -Then in your bash shell run +Then in your bash shell run ``` BUNDLE="/path/to/budle/RPDBundle" @@ -87,7 +87,7 @@ If extracting DICOM or VOL files: * set `run_extract` to `True` * specify `input_dir`, the path to the directory that contains the VOL or DICOM files * specify `extracted_dir`, the path to the directory where extracted images will be stored -* set `input_format` to "dicom" or "vol" +* set `input_format` to "dicom" or "vol" The VOL or DICOM files can be in a nested hierarchy of folders, and all files in that directory with a VOL or DICOM extension will be extracted. @@ -95,7 +95,7 @@ For DICOM files, each OCT slice will be saved as a png file to `/ For VOL files, each OCT slice will be saved as a png file to `////_oct_.png` on disk, where `` is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " -### DATASET PACKAGING +### DATASET PACKAGING Once you have the scans in PNG format, you can create a "dataset" in Detectron2 dictionary format for model consumption: * set `create_dataset` to `True` * set `dataset_name` to the chosen name of your dataset @@ -104,7 +104,7 @@ The summary tables and visual output is organized around OCT volumes, so please ### INFERENCE To run inference on your dataset: -* set `dataset_name` to the name of your dataset which you create with the previous step and resides in `////RPDBundle/datasets/.pk` +* set `dataset_name` to the name of your dataset which you create with the previous step and resides in `////RPDBundle/datasets/.pk` * set `output_dir`, the path to the directory where model predictions and other data will be stored. * set `run_inference` to `True` @@ -128,7 +128,7 @@ Inference on one Nvidia A100 gpu takes about 0.041 s/batch of 14 images, about 3 ## **Limitations** This model has not been tested for robustness of performance on OCTs imaged with other devices and with different scan parameters. -## **Citation Info** +## **Citation Info** ``` @article {Kumar2024.09.11.24312817, @@ -144,7 +144,7 @@ This model has not been tested for robustness of performance on OCTs imaged with } ``` -## **References** +## **References** [1]: He, Kaiming, Georgia Gkioxari, Piotr Dollár, and Ross Girshick. "Mask R-CNN." In Proceedings of the IEEE international conference on computer vision (ICCV), pp. 2961-2969. 2017. [2]: Xie, Saining, Ross Girshick, Piotr Dollár, Zhuowen Tu, and Kaiming He. "Aggregated residual transformations for deep neural networks." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1492-1500. 2017. @@ -158,13 +158,3 @@ This model has not been tested for robustness of performance on OCTs imaged with [6]: Hogg RE, Wright DM, Quinn NB, et al. Prevalence and risk factors for age-related macular degeneration in a population-based cohort study of older adults in Northern Ireland using multimodal imaging: NICOLA Study. Br J Ophthalmol. 2022:bjophthalmol-2021-320469. [7]: Gabrielle P-H, Seydou A, Arnould L, et al. Subretinal Drusenoid Deposits in the Elderly in a Population-Based Study (the Montrachet Study). Invest Ophthalmol Vis Sci. 2019;60(14):4838–48. - - - - - - - - - - diff --git a/models/retinalOCT_RPD_segmentation/docs/requirements.txt b/models/retinalOCT_RPD_segmentation/docs/requirements.txt index c80d6e8a..e7f75e99 100644 --- a/models/retinalOCT_RPD_segmentation/docs/requirements.txt +++ b/models/retinalOCT_RPD_segmentation/docs/requirements.txt @@ -1,7 +1,7 @@ monai[fire,ninja,torchvision,pandas,pydicom] -opencv-python-headless -seaborn -scikit-learn +opencv-python-headless +seaborn +scikit-learn progressbar lxml diff --git a/models/retinalOCT_RPD_segmentation/large_files.yaml b/models/retinalOCT_RPD_segmentation/large_files.yaml index 72728060..35eb4c99 100644 --- a/models/retinalOCT_RPD_segmentation/large_files.yaml +++ b/models/retinalOCT_RPD_segmentation/large_files.yaml @@ -3,23 +3,23 @@ large_files: url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold1_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold2_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold2_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold3_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold3_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold4_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold4_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold5_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold5_model_final.pth" hash_val: "" - hash_type: "" \ No newline at end of file + hash_type: "" diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 45b8afe4..e4c4d412 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -19,7 +19,6 @@ from .Ensembler import Ensembler from .table_styles import styles - logging.basicConfig(level=logging.INFO) os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" diff --git a/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml b/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml index 47d3aa24..2664d88d 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml +++ b/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml @@ -19,10 +19,10 @@ SOLVER: BASE_LR: 0.02 #GAMMA: 0.05 #STEPS: (3000, 7000, 11000, 15000) - #MAX_ITER: 18000 + #MAX_ITER: 18000 GAMMA: 0.1 STEPS: (3000, 4500) - MAX_ITER: 6000 + MAX_ITER: 6000 CHECKPOINT_PERIOD: 300 IMS_PER_BATCH: 14 TEST: @@ -53,4 +53,4 @@ DATALOADER: # TEST: ("fold4",) # OUTPUT_DIR: "./output_valid_fold4" -#modifiying to commit again \ No newline at end of file +#modifiying to commit again diff --git a/models/retinalOCT_RPD_segmentation/scripts/working.yaml b/models/retinalOCT_RPD_segmentation/scripts/working.yaml index 47d3aa24..2664d88d 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/working.yaml +++ b/models/retinalOCT_RPD_segmentation/scripts/working.yaml @@ -19,10 +19,10 @@ SOLVER: BASE_LR: 0.02 #GAMMA: 0.05 #STEPS: (3000, 7000, 11000, 15000) - #MAX_ITER: 18000 + #MAX_ITER: 18000 GAMMA: 0.1 STEPS: (3000, 4500) - MAX_ITER: 6000 + MAX_ITER: 6000 CHECKPOINT_PERIOD: 300 IMS_PER_BATCH: 14 TEST: @@ -53,4 +53,4 @@ DATALOADER: # TEST: ("fold4",) # OUTPUT_DIR: "./output_valid_fold4" -#modifiying to commit again \ No newline at end of file +#modifiying to commit again From d1715425371366cd1f710e8637c63e475ff4276e Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Fri, 16 May 2025 18:02:00 +0000 Subject: [PATCH 09/28] Fixed pre-commit and flake8 errors. Added torchvision to metadata.json. --- ci/bundle_custom_data.py | 3 +- .../configs/inference.yaml | 2 +- .../configs/metadata.json | 241 ++++++++++-------- .../docs/README.md | 32 +-- .../docs/requirements.txt | 6 +- .../large_files.yaml | 10 +- .../scripts/Ensembler.py | 2 +- .../scripts/analysis_lib.py | 15 +- .../scripts/datasets/data.py | 2 +- .../scripts/inference.py | 1 - .../scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml | 6 +- .../scripts/working.yaml | 6 +- 12 files changed, 178 insertions(+), 148 deletions(-) diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index b0211cd9..c5ab7783 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -61,7 +61,8 @@ # If a bundle has this kind of dependencies, please add the bundle name (key), and the path of the install script (value) # into the dict. install_dependency_dict = { - "retinalOCT_RPD_segmentation": "ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh"} + "retinalOCT_RPD_segmentation": "ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh" +} # This list is used for our CI tests to determine whether a bundle supports TensorRT export. Related # test will be employed for bundles in the dict. diff --git a/models/retinalOCT_RPD_segmentation/configs/inference.yaml b/models/retinalOCT_RPD_segmentation/configs/inference.yaml index 35336773..fd148017 100644 --- a/models/retinalOCT_RPD_segmentation/configs/inference.yaml +++ b/models/retinalOCT_RPD_segmentation/configs/inference.yaml @@ -20,4 +20,4 @@ args: instance_mask_overlay : False inference: -- $scripts.inference.main(@args) \ No newline at end of file +- $scripts.inference.main(@args) diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 4078d7c9..7319a073 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -1,105 +1,144 @@ { - "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", - "version": "0.0.1", - "changelog": { - "0.0.1": "Initial version" - }, - "monai_version": "1.4.0", - "pytorch_version": "2.7.0", - "numpy_version": "1.26.4", - "optional_packages_version": {}, - "required_packages_version": { - "opencv-python-headless": "4.11.0.86", - "pandas": "2.2.3", - "seaborn": "0.13.2", - "scikit-learn": "1.6.1", - "progressbar": "2.5", - "pydicom": "2.4.4", - "fire": "0.7.0", - "detectron2": "0.6", - "lxml": "5.4.0" - }, - "name": "retinalOCT_RPD_segmentation", - "task": "Reticular Pseudodrusen (RPD) instance segmentation.", - "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", - "authors": "Yelena Bagdasarova, Scott Song", - "copyright": "Copyright (c) 2022, uw-biomedical-ml", - "network_data_format": { - "inputs": { - "image": { - "type": "image", - "format": "PNG", - "modality": "OCT", - "num_channels": 1, - "spatial_shape":[496,1024], - "dtype": "int16", - "value_range": [0,256], - "is_patch_data": false, - "channel_def": {"0": "image"} - } + "schema": "https://github.com/Project-MONAI/MONAI-extra-test-data/releases/download/0.8.1/meta_schema_20220324.json", + "version": "0.0.1", + "changelog": { + "0.0.1": "Initial version" }, - "preprocessed_data_sources": { - "vol_file": { - "type": "image", - "format": "VOL", - "modality": "OCT", - "num_channels": 1, - "spatial_shape":[496,1024,"D"], - "dtype": "int16", - "value_range": [0,256], - "description": "The pixel array of each OCT slice is extracted with volreader and the png files saved to ////_oct_.png on disk, where is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " - - }, - "dicom_series": { - "type": "image", - "format": "DICOM", - "modality": "OCT", - "SOP class UID" : "1.2.840.10008.5.1.4.1.1.77.1.5.4", - "num_channels": 1, - "spatial_shape":[496,1024,"D"], - "dtype": "int16", - "value_range": [0,256], - "description": "The pixel array of each OCT slice is extracted with pydicom and the png files saved to //_oct_.png on disk, where is the slice number. " - } + "monai_version": "1.4.0", + "pytorch_version": "2.7.0", + "numpy_version": "1.26.4", + "optional_packages_version": {}, + "required_packages_version": { + "opencv-python-headless": "4.11.0.86", + "pandas": "2.2.3", + "seaborn": "0.13.2", + "scikit-learn": "1.6.1", + "progressbar": "2.5", + "pydicom": "2.4.4", + "fire": "0.7.0", + "torchvision" :"0.22.0", + "detectron2": "0.6", + "lxml": "5.4.0" }, - "outputs": { - "pred": { - "dtype": "dictionary", - "type": "dictionary", - "format": "COCO", - "modality": "n/a", - "value_range": [0,1], - "num_channels": 1, - "spatial_shape": [496,1024], - "channel_def": {"0": "RPD"}, - "description": "This output is a JSON file in COCO Instance Segmentation format, containing bounding boxes, segmentation masks, and output probabilities for detected instances." - } - }, - "post_processed_outputs": { - "binary segmentation": { - "type": "image", - "format": "TIFF", - "modality": "OCT", - "num_channels": 3, - "spatial_shape": [496,1024], - "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a binary segmentation mask for a single OCT slice from the input volume. The segmentation masks are stacked in the same order as the original OCT slices." - }, - "binary segmentation overlay": { - "type": "image", - "format": "TIFF", - "modality": "OCT", - "num_channels": 3, - "spatial_shape": [496,1024], - "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." - }, - "instance segmentation overlay": { - "type": "image", - "format": "TIFF", - "modality": "OCT", - "num_channels": 3, - "spatial_shape": [496,1024], - "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." - } + "name": "retinalOCT_RPD_segmentation", + "task": "Reticular Pseudodrusen (RPD) instance segmentation.", + "description": "This network detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans which can be presented in a vol or dicom format.", + "authors": "Yelena Bagdasarova, Scott Song", + "copyright": "Copyright (c) 2022, uw-biomedical-ml", + "network_data_format": { + "inputs": { + "image": { + "type": "image", + "format": "PNG", + "modality": "OCT", + "num_channels": 1, + "spatial_shape": [ + 496, + 1024 + ], + "dtype": "int16", + "value_range": [ + 0, + 256 + ], + "is_patch_data": false, + "channel_def": { + "0": "image" + } + } + }, + "preprocessed_data_sources": { + "vol_file": { + "type": "image", + "format": "VOL", + "modality": "OCT", + "num_channels": 1, + "spatial_shape": [ + 496, + 1024, + "D" + ], + "dtype": "int16", + "value_range": [ + 0, + 256 + ], + "description": "The pixel array of each OCT slice is extracted with volreader and the png files saved to ////_oct_.png on disk, where is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " + }, + "dicom_series": { + "type": "image", + "format": "DICOM", + "modality": "OCT", + "SOP class UID": "1.2.840.10008.5.1.4.1.1.77.1.5.4", + "num_channels": 1, + "spatial_shape": [ + 496, + 1024, + "D" + ], + "dtype": "int16", + "value_range": [ + 0, + 256 + ], + "description": "The pixel array of each OCT slice is extracted with pydicom and the png files saved to //_oct_.png on disk, where is the slice number. " + } + }, + "outputs": { + "pred": { + "dtype": "dictionary", + "type": "dictionary", + "format": "COCO", + "modality": "n/a", + "value_range": [ + 0, + 1 + ], + "num_channels": 1, + "spatial_shape": [ + 496, + 1024 + ], + "channel_def": { + "0": "RPD" + }, + "description": "This output is a JSON file in COCO Instance Segmentation format, containing bounding boxes, segmentation masks, and output probabilities for detected instances." + } + }, + "post_processed_outputs": { + "binary segmentation": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [ + 496, + 1024 + ], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a binary segmentation mask for a single OCT slice from the input volume. The segmentation masks are stacked in the same order as the original OCT slices." + }, + "binary segmentation overlay": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [ + 496, + 1024 + ], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." + }, + "instance segmentation overlay": { + "type": "image", + "format": "TIFF", + "modality": "OCT", + "num_channels": 3, + "spatial_shape": [ + 496, + 1024 + ], + "description": "This output is a multi-page TIFF file. Each page of the TIFF image corresponds to a single OCT slice from the input volume overlayed with the detected binary segmentation mask." + } + } } - } -} \ No newline at end of file +} diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index 2ae275de..c8802d63 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -7,20 +7,20 @@ Himeesh Kumar, Yelena Bagdasarova, Scott Song, Doron G. Hickey, Amy C. Cohn, Mal Reticular Pseudodrusen, AMD, OCT, Segmentation ## **Model Description** -This model detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans. The instance segmentation model used a Mask-RCNN [1] head with the ResNeXt-101-32x8d-FPN [2] backbone (pretrained on ImageNet) implemented via the Detectron2 framework [3]. The model produces outputs that consist of bounding boxes and segmentation masks that delineate the coordinates and pixels of each instance detected, which are assigned a corresponding output probability. A tuneable probability threshold can then be applied to finalise the binary detection of an RPD instance. +This model detects and segments Reticular Pseudodrusen (RPD) instances in Optical Coherence Tomography (OCT) B-scans. The instance segmentation model used a Mask-RCNN [1] head with the ResNeXt-101-32x8d-FPN [2] backbone (pretrained on ImageNet) implemented via the Detectron2 framework [3]. The model produces outputs that consist of bounding boxes and segmentation masks that delineate the coordinates and pixels of each instance detected, which are assigned a corresponding output probability. A tuneable probability threshold can then be applied to finalise the binary detection of an RPD instance. Five segmentation models using these RPD instance labels on the OCT B-scans were trained based on five-fold cross-validation which were used to form a final ensemble model using soft voting (see supplementary material of paper for more information on model training.) ## **Data** The model was trained using the prospectively-collected, baseline OCT scans (prior to any treatments) of individuals enrolled in the LEAD study [4] imaged using Heidelberg Spectralis HRA+OCT. OCT B-scans from 200 eyes from 100 individuals in the LEAD study were randomly selected to undergo manual annotations of RPD by a single grader (HK) at the pixel level, following training from two senior investigators (RHG and ZW). Only definite RPD lesions, defined as subretinal hyperreflective accumulations that altered the contour of, or broke through, the overlying photoreceptor ellipsoid zone on the OCT B-scans were annotated. -The model was then internally tested in a different set of OCT scans from 125 eyes from 92 individuals from the LEAD study, and externally tested on five independent datasets: the MACUSTAR study [5], the Northern Ireland Cohort for Longitudinal Study of Ageing (NICOLA) study [6], the Montrachet study [7], AMD observational studies at the University of Bonn, Germany (UB), and a routine clinical care cohort seen at the University of Washington (UW). The presence of RPD was graded either as part of each study (MACUSTAR and UB datasets) or graded by one of the study investigators (HK; in the NICOLA, UW, and Montrachet datasets). All these studies defined RPD based on the presence of five or more definite lesions on more than one OCT B-scan that corresponded to hyporeflective lesions seen on near-infrared reflectance imaging. +The model was then internally tested in a different set of OCT scans from 125 eyes from 92 individuals from the LEAD study, and externally tested on five independent datasets: the MACUSTAR study [5], the Northern Ireland Cohort for Longitudinal Study of Ageing (NICOLA) study [6], the Montrachet study [7], AMD observational studies at the University of Bonn, Germany (UB), and a routine clinical care cohort seen at the University of Washington (UW). The presence of RPD was graded either as part of each study (MACUSTAR and UB datasets) or graded by one of the study investigators (HK; in the NICOLA, UW, and Montrachet datasets). All these studies defined RPD based on the presence of five or more definite lesions on more than one OCT B-scan that corresponded to hyporeflective lesions seen on near-infrared reflectance imaging. #### **Preprocessing** Scans were kept at native resolution (1024 x 496 pixels). ## **Performance** -In the external test datasets, the overall performance for detecting RPD in a volume scan was (AUC = 0·94; 95% CI = 0·92–0·97). In the internal test dataset, the Dice coefficient (DSC) between the model and manual annotations by retinal specialists for each B-scan was caculated and the average over the dataset is listed in the table below. Note that the DSC was assigned a value of 1·0 to all pairwise comparisons where no pixels on a B-scan were labelled as having RPD. +In the external test datasets, the overall performance for detecting RPD in a volume scan was (AUC = 0·94; 95% CI = 0·92–0·97). In the internal test dataset, the Dice coefficient (DSC) between the model and manual annotations by retinal specialists for each B-scan was caculated and the average over the dataset is listed in the table below. Note that the DSC was assigned a value of 1·0 to all pairwise comparisons where no pixels on a B-scan were labelled as having RPD. ![](Table2.gif) @@ -29,7 +29,7 @@ In the external test datasets, the overall performance for detecting RPD in a vo For more details regarding evaluation results, please see Results section of paper. @@ -46,7 +46,7 @@ python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' ``` ## USAGE -The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: +The expected image data is in PNG format at the scan level, VOL format at the volume level, or DICOM format at the volume level. To run inference, modify the parameters of the inference.yaml config file in the configs folder which looks like: ``` imports: @@ -73,7 +73,7 @@ args: inference: - $scripts.inference.main(@args) ``` -Then in your bash shell run +Then in your bash shell run ``` BUNDLE="/path/to/budle/RPDBundle" @@ -87,7 +87,7 @@ If extracting DICOM or VOL files: * set `run_extract` to `True` * specify `input_dir`, the path to the directory that contains the VOL or DICOM files * specify `extracted_dir`, the path to the directory where extracted images will be stored -* set `input_format` to "dicom" or "vol" +* set `input_format` to "dicom" or "vol" The VOL or DICOM files can be in a nested hierarchy of folders, and all files in that directory with a VOL or DICOM extension will be extracted. @@ -95,7 +95,7 @@ For DICOM files, each OCT slice will be saved as a png file to `/ For VOL files, each OCT slice will be saved as a png file to `////_oct_.png` on disk, where `` is the slice number and a nested hierarchy of folders is created using the underscores in the original filename. " -### DATASET PACKAGING +### DATASET PACKAGING Once you have the scans in PNG format, you can create a "dataset" in Detectron2 dictionary format for model consumption: * set `create_dataset` to `True` * set `dataset_name` to the chosen name of your dataset @@ -104,7 +104,7 @@ The summary tables and visual output is organized around OCT volumes, so please ### INFERENCE To run inference on your dataset: -* set `dataset_name` to the name of your dataset which you create with the previous step and resides in `////RPDBundle/datasets/.pk` +* set `dataset_name` to the name of your dataset which you create with the previous step and resides in `////RPDBundle/datasets/.pk` * set `output_dir`, the path to the directory where model predictions and other data will be stored. * set `run_inference` to `True` @@ -128,7 +128,7 @@ Inference on one Nvidia A100 gpu takes about 0.041 s/batch of 14 images, about 3 ## **Limitations** This model has not been tested for robustness of performance on OCTs imaged with other devices and with different scan parameters. -## **Citation Info** +## **Citation Info** ``` @article {Kumar2024.09.11.24312817, @@ -144,7 +144,7 @@ This model has not been tested for robustness of performance on OCTs imaged with } ``` -## **References** +## **References** [1]: He, Kaiming, Georgia Gkioxari, Piotr Dollár, and Ross Girshick. "Mask R-CNN." In Proceedings of the IEEE international conference on computer vision (ICCV), pp. 2961-2969. 2017. [2]: Xie, Saining, Ross Girshick, Piotr Dollár, Zhuowen Tu, and Kaiming He. "Aggregated residual transformations for deep neural networks." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1492-1500. 2017. @@ -158,13 +158,3 @@ This model has not been tested for robustness of performance on OCTs imaged with [6]: Hogg RE, Wright DM, Quinn NB, et al. Prevalence and risk factors for age-related macular degeneration in a population-based cohort study of older adults in Northern Ireland using multimodal imaging: NICOLA Study. Br J Ophthalmol. 2022:bjophthalmol-2021-320469. [7]: Gabrielle P-H, Seydou A, Arnould L, et al. Subretinal Drusenoid Deposits in the Elderly in a Population-Based Study (the Montrachet Study). Invest Ophthalmol Vis Sci. 2019;60(14):4838–48. - - - - - - - - - - diff --git a/models/retinalOCT_RPD_segmentation/docs/requirements.txt b/models/retinalOCT_RPD_segmentation/docs/requirements.txt index c80d6e8a..e7f75e99 100644 --- a/models/retinalOCT_RPD_segmentation/docs/requirements.txt +++ b/models/retinalOCT_RPD_segmentation/docs/requirements.txt @@ -1,7 +1,7 @@ monai[fire,ninja,torchvision,pandas,pydicom] -opencv-python-headless -seaborn -scikit-learn +opencv-python-headless +seaborn +scikit-learn progressbar lxml diff --git a/models/retinalOCT_RPD_segmentation/large_files.yaml b/models/retinalOCT_RPD_segmentation/large_files.yaml index 72728060..35eb4c99 100644 --- a/models/retinalOCT_RPD_segmentation/large_files.yaml +++ b/models/retinalOCT_RPD_segmentation/large_files.yaml @@ -3,23 +3,23 @@ large_files: url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold1_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold2_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold2_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold3_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold3_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold4_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold4_model_final.pth" hash_val: "" hash_type: "" - + - path: "models/fold5_model_final.pth" url: "https://s3.us-west-2.amazonaws.com/comp.ophthalmology.uw.edu/fold5_model_final.pth" hash_val: "" - hash_type: "" \ No newline at end of file + hash_type: "" diff --git a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py index 28d47b51..52939515 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py +++ b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py @@ -92,7 +92,7 @@ def nik_merge(lsts): obj_set = set() # a set of objects (frozensets) for i, coco_dt in enumerate(self.dtlist): # for each detector append predictions to df dflist.append(pd.DataFrame(coco_dt.imgToAnns[img]).assign(det=i)) - df = pd.concat(dflist,ignore_index=True) + df = pd.concat(dflist, ignore_index=True) if not df.empty: for cat in self.cats: # for each category dfcat = df[df["category_id"] == cat] diff --git a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py index 10241ba7..09d302ca 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py +++ b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - """ Utiltites for analyizing and visualizing model segmentations on dataset. Yelena Bagdasarova, Scott Song @@ -31,7 +29,7 @@ from sklearn.metrics import average_precision_score, precision_recall_curve from tqdm import tqdm -plt.style.use('ybpres.mplstyle') +plt.style.use("ybpres.mplstyle") # plt.style.use('/data/ssong/detectron2-rpd-yb/detectron2-rpd-pkg/src/detectron2-rpd/ybpres.mplstyle') @@ -114,7 +112,8 @@ def produce_gt_image(self, dat, im): Args: dat (dict): Dictionary for the image im containing ground truth annotations. im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to - the height and width of the image respectively. C is the number of color channels. The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. + the height and width of the image respectively. C is the number of color channels. + The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. Returns: PIL.Image: The resulting original image overlayed with ground truth instances. @@ -142,13 +141,15 @@ def produce_gt_image(self, dat, im): return img def produce_model_image(self, ImgId, dat, im): - """Returns image im overlayed with instances predicted by the model. Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on the given ImgId. + """Returns image im overlayed with instances predicted by the model. + Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on the given ImgId. Args: ImgId (str): Value of image_id in image data structure. dat (dict): Dictionary for the image im. Used for height and width parameters. im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to - the height and width of the image respectively. C is the number of color channels. The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. + the height and width of the image respectively. C is the number of color channels. + The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. Returns: PIL.Image: The resulting original image overlayed with model-predicted instances. @@ -671,7 +672,7 @@ def count_instances(self): gt_inst = 0 dt_inst = 0 gt_neg_scans = 0 - for key, val in self.cocoGt.imgs.items(): + for _, val in self.cocoGt.imgs.items(): imgid = val["id"] # Gt instances annIdsGt = self.cocoGt.getAnnIds([imgid]) diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py index efb2075e..1c4131c0 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -54,7 +54,7 @@ def extract_files(dirtoextract, extracted_path, input_format): print(f"Extracting files from {dirtoextract} into {extracted_path}...") if input_format == "vol": files_to_extract = glob.glob(os.path.join(dirtoextract, "**/*.vol"), recursive=True) - for i, line in enumerate(tqdm(files_to_extract)): + for _, line in enumerate(tqdm(files_to_extract)): fpath = line.strip("\n") vol = volFile(fpath) fpath = fpath.replace("\\", "/") diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 45b8afe4..e4c4d412 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -19,7 +19,6 @@ from .Ensembler import Ensembler from .table_styles import styles - logging.basicConfig(level=logging.INFO) os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" diff --git a/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml b/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml index 47d3aa24..2664d88d 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml +++ b/models/retinalOCT_RPD_segmentation/scripts/mask_rcnn_X_101_32x8d_FPN_1x.yaml @@ -19,10 +19,10 @@ SOLVER: BASE_LR: 0.02 #GAMMA: 0.05 #STEPS: (3000, 7000, 11000, 15000) - #MAX_ITER: 18000 + #MAX_ITER: 18000 GAMMA: 0.1 STEPS: (3000, 4500) - MAX_ITER: 6000 + MAX_ITER: 6000 CHECKPOINT_PERIOD: 300 IMS_PER_BATCH: 14 TEST: @@ -53,4 +53,4 @@ DATALOADER: # TEST: ("fold4",) # OUTPUT_DIR: "./output_valid_fold4" -#modifiying to commit again \ No newline at end of file +#modifiying to commit again diff --git a/models/retinalOCT_RPD_segmentation/scripts/working.yaml b/models/retinalOCT_RPD_segmentation/scripts/working.yaml index 47d3aa24..2664d88d 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/working.yaml +++ b/models/retinalOCT_RPD_segmentation/scripts/working.yaml @@ -19,10 +19,10 @@ SOLVER: BASE_LR: 0.02 #GAMMA: 0.05 #STEPS: (3000, 7000, 11000, 15000) - #MAX_ITER: 18000 + #MAX_ITER: 18000 GAMMA: 0.1 STEPS: (3000, 4500) - MAX_ITER: 6000 + MAX_ITER: 6000 CHECKPOINT_PERIOD: 300 IMS_PER_BATCH: 14 TEST: @@ -53,4 +53,4 @@ DATALOADER: # TEST: ("fold4",) # OUTPUT_DIR: "./output_valid_fold4" -#modifiying to commit again \ No newline at end of file +#modifiying to commit again From e2718848b1c99141edc589a9a6976cf19a699af3 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Mon, 19 May 2025 06:28:21 +0000 Subject: [PATCH 10/28] fix pre-commit and black checks Signed-off-by: Yiheng Wang --- ci/get_bundle_requirements.py | 1 + .../scripts/networks/nest_transformer_3D.py | 2 +- models/retinalOCT_RPD_segmentation/configs/metadata.json | 3 +-- .../scripts/networks/nest_transformer_3D.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ci/get_bundle_requirements.py b/ci/get_bundle_requirements.py index fbf0c56c..d70d3bf0 100644 --- a/ci/get_bundle_requirements.py +++ b/ci/get_bundle_requirements.py @@ -21,6 +21,7 @@ special_dependencies_list = ["detectron2"] + def increment_version(version): """ Split the version into components, assume missing parts are '0'. diff --git a/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py b/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py index 73f11ec3..36020f50 100755 --- a/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py +++ b/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py @@ -33,7 +33,7 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" Nested Transformer (NesT) in PyTorch +"""Nested Transformer (NesT) in PyTorch A PyTorch implement of Aggregating Nested Transformers as described in: 'Aggregating Nested Transformers' - https://arxiv.org/abs/2105.12723 diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 3e1c52c9..43bf6eec 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -16,7 +16,7 @@ "progressbar": "2.5", "pydicom": "2.4.4", "fire": "0.7.0", - "torchvision" :"0.22.0", + "torchvision": "0.22.0", "detectron2": "0.6", "lxml": "5.4.0" }, @@ -142,4 +142,3 @@ } } } - diff --git a/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py b/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py index 73f11ec3..36020f50 100755 --- a/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py +++ b/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py @@ -33,7 +33,7 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" Nested Transformer (NesT) in PyTorch +"""Nested Transformer (NesT) in PyTorch A PyTorch implement of Aggregating Nested Transformers as described in: 'Aggregating Nested Transformers' - https://arxiv.org/abs/2105.12723 From db0d0d631b721b3645b401f2f7e8133c1b1ec005 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Mon, 19 May 2025 07:17:01 +0000 Subject: [PATCH 11/28] skip part of tests and rrevert changes in UNEST bundles Signed-off-by: Yiheng Wang --- .../scripts/networks/nest_transformer_3D.py | 2 +- .../scripts/networks/nest_transformer_3D.py | 2 +- setup.cfg | 10 +++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py b/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py index 36020f50..73f11ec3 100755 --- a/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py +++ b/models/renalStructures_UNEST_segmentation/scripts/networks/nest_transformer_3D.py @@ -33,7 +33,7 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""Nested Transformer (NesT) in PyTorch +""" Nested Transformer (NesT) in PyTorch A PyTorch implement of Aggregating Nested Transformers as described in: 'Aggregating Nested Transformers' - https://arxiv.org/abs/2105.12723 diff --git a/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py b/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py index 36020f50..73f11ec3 100755 --- a/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py +++ b/models/wholeBrainSeg_Large_UNEST_segmentation/scripts/networks/nest_transformer_3D.py @@ -33,7 +33,7 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"""Nested Transformer (NesT) in PyTorch +""" Nested Transformer (NesT) in PyTorch A PyTorch implement of Aggregating Nested Transformers as described in: 'Aggregating Nested Transformers' - https://arxiv.org/abs/2105.12723 diff --git a/setup.cfg b/setup.cfg index 53aed841..cace76d7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -20,7 +20,15 @@ ignore = B028 B907 C419 -per_file_ignores = __init__.py: F401, __main__.py: F401 +# lowercase checks are not needed for the following files in the retinalOCT_RPD_segmentation model +# https://github.com/Project-MONAI/model-zoo/pull/748#issuecomment-2877638507 +per_file_ignores = + __init__.py: F401 + __main__.py: F401 + models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py: N802, N803, N806 + models/retinalOCT_RPD_segmentation/scripts/datasets/data.py: N802, N803, N806 + models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py: N801, N802, N803, N806 + models/retinalOCT_RPD_segmentation/scripts/inference.py: N802, N803, N806 exclude = *.pyi,.git,.eggs,monai/_version.py,versioneer.py,venv,.venv,_version.py [isort] From ea0ef49a937a79521f4ddc87098435b3da00ade8 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Mon, 19 May 2025 22:56:18 +0000 Subject: [PATCH 12/28] Fixed flake8 errors. runtests.sh failing at ptype. --- .../scripts/analysis_lib.py | 40 ++++++++++++------- .../scripts/datasets/data.py | 22 ---------- .../scripts/datasets/volReader.py | 4 +- .../scripts/inference.py | 7 ++-- 4 files changed, 31 insertions(+), 42 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py index 09d302ca..3ca1eddf 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py +++ b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py @@ -29,9 +29,10 @@ from sklearn.metrics import average_precision_score, precision_recall_curve from tqdm import tqdm -plt.style.use("ybpres.mplstyle") - -# plt.style.use('/data/ssong/detectron2-rpd-yb/detectron2-rpd-pkg/src/detectron2-rpd/ybpres.mplstyle') +# current_directory = os.getcwd() +# print(current_directory) +plt.style.use("./scripts/ybpres.mplstyle") +# plt.style.use("ybpres.mplstyle") def grab_dataset(name): @@ -107,13 +108,15 @@ def get_gt_image_data(self, ImgId): return gt_data def produce_gt_image(self, dat, im): - """Returns image im overlayed with ground truth instances found in dat if there are any. Depending on visualizer mode, the instances are separate colors or monochrome. + """Returns image im overlayed with ground truth instances found in dat if there are any. + Depending on visualizer mode, the instances are separate colors or monochrome. Args: dat (dict): Dictionary for the image im containing ground truth annotations. im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to the height and width of the image respectively. C is the number of color channels. - The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. + The image is required to be in RGB format since that is a requirement of the Matplotlib library. + The image is also expected to be in the range [0, 255]. Returns: PIL.Image: The resulting original image overlayed with ground truth instances. @@ -142,14 +145,16 @@ def produce_gt_image(self, dat, im): def produce_model_image(self, ImgId, dat, im): """Returns image im overlayed with instances predicted by the model. - Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on the given ImgId. + Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on + the given ImgId. Args: ImgId (str): Value of image_id in image data structure. dat (dict): Dictionary for the image im. Used for height and width parameters. im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to the height and width of the image respectively. C is the number of color channels. - The image is required to be in RGB format since that is a requirement of the Matplotlib library. The image is also expected to be in the range [0, 255]. + The image is required to be in RGB format since that is a requirement of the Matplotlib library. + The image is also expected to be in the range [0, 255]. Returns: PIL.Image: The resulting original image overlayed with model-predicted instances. @@ -188,14 +193,16 @@ def get_image(self, ImgId): return img, img_model def get_outputs_from_file(self, ImgId, imgsize): - """For image with image_id ImgId, reads in and converts instances from coco format in self.pred_file to a detectron2 Instances structure required for the visulizer utility. + """For image with image_id ImgId, reads in and converts instances from coco format in self.pred_file to a + detectron2 Instances structure required for the visulizer utility. Args: ImgId (str): Value of image_id in image data structure. imgsize (tuple): Height and width of the image in pixels. Returns: - detectron2.structures.Instances: The correctly formated data structure to be used to the detectron2 visualizer utility. + detectron2.structures.Instances: The correctly formated data structure to be used to the detectron2 + visualizer utility. """ pred_boxes = [] @@ -222,7 +229,8 @@ def get_outputs_from_file(self, ImgId, imgsize): @staticmethod def height_crop_range(im, height_target=256): - """Find the range of pixels in the height dimension spanning the height height_target which contain the brightest regions of the image. + """Find the range of pixels in the height dimension spanning the height height_target which contain the + brightest regions of the image. Args: im (numpy array): a numpy array of shape (H, W, C) @@ -244,7 +252,8 @@ def height_crop_range(im, height_target=256): return range(h1, h2) def output_to_pdf(self, ImgIds, outname, dfimg=None): - """Create pdf with name outname displaying ground truth and model prediction overlays for image ids listed in ImgIds. + """Create pdf with name outname displaying ground truth and model prediction overlays for + image ids listed in ImgIds. Args: ImgIds (list(str)): List of image_id values to output. @@ -363,7 +372,8 @@ def output_all_to_tiff(self, ImgIds, outname): self.save_imgarr_to_tiff(imgs, outname) def get_enface_dt(self, grp, scan_height, scan_width, scan_spacing): - """Return enface perspective of model predictions for a single scan volume whose imgids are listed in the index of grp. + """Return enface perspective of model predictions for a single scan volume whose imgids are + listed in the index of grp. Args: grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. @@ -395,7 +405,8 @@ def get_enface_dt(self, grp, scan_height, scan_width, scan_spacing): return enface def get_enface_gt(self, grp, scan_height, scan_width, scan_spacing): - """Return enface perspective of ground truth annotations for a single scan volume whose imgids are listed in the index of grp. + """Return enface perspective of ground truth annotations for a single scan volume whose imgids are + listed in the index of grp. Args: grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. @@ -555,7 +566,8 @@ def _calculate_fpr_matrix(self): # FP rate, 1 RPD in image = FP if (self.scores.min() == -1) and (self.scores.max() == -1): print( - "WARNING: Scores for all iou thresholds and all recall levels are not defined. This can arise if ground truth annotations contain no instances. Leaving fpr matrix as None" + "WARNING: Scores for all iou thresholds and all recall levels are not defined. " + "This can arise if ground truth annotations contain no instances. Leaving fpr matrix as None" ) self.fpr = None return diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py index 1c4131c0..b17081cb 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -21,27 +21,6 @@ class Error(Exception): pass -# def extract_files(dirtoextract, extracted_path): -# proceed = True -# if ((os.path.isdir(extracted_path)) and (len(os.listdir(extracted_path))!=0)): -# val = input(f'{extracted_path} exists and is not empty. Files may be overwritten. Proceed with extraction? (Y/N)') -# proceed = bool(distutils.util.strtobool(val)) -# if proceed: -# print(f"Extracting files from {dirtoextract} into {extracted_path}...") -# files_to_extract = glob.glob(os.path.join(dirtoextract,'**/*.vol'),recursive=True) -# for i,line in enumerate(tqdm(files_to_extract)): -# fpath = line.strip('\n') -# vol = volFile(fpath) -# fpath = fpath.replace('\\','/') -# path, scan_str = fpath.strip('.vol').rsplit('/',1) -# extractpath = os.path.join(extracted_path,scan_str.replace('_','/')) -# os.makedirs(extractpath,exist_ok=True) -# preffix = os.path.join(extractpath, scan_str+'_oct') -# vol.renderOCTscans(preffix) -# else: -# pass - - def extract_files(dirtoextract, extracted_path, input_format): assert input_format in ["vol", "dicom"], 'Error: input_format must be "vol" or "dicom".' proceed = True @@ -78,7 +57,6 @@ def extract_files(dirtoextract, extracted_path, input_format): dd[key] = fi.get(key) volpath = os.path.join(extracted_path, f"{fi.SOPInstanceUID}") - # volpath = os.path.join(extracted_path, f'{fi.PatientID}_{fi.ImageLaterality}_{fi.SeriesDate}') #path for volume shutil.rmtree(volpath, ignore_errors=True) os.mkdir(volpath) n = fi.NumberOfFrames diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py index 0b366ff3..2bfa6273 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python -# # Aaron Y. Lee MD MSCI (University of Washington) Copyright 2019 # # Code ported from Markus Mayer's excellent work (https://www5.cs.fau.de/research/software/octseg/) @@ -223,7 +221,7 @@ def __parseVolFile(self, fn, parseSeg=False): U[U == v] = 0.0 if segmentations is None: segmentations = [] - for j in range(bscanHead["numSeg"]): + for _ in range(bscanHead["numSeg"]): segmentations.append([]) for j in range(bscanHead["numSeg"]): diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index e4c4d412..8585a65c 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -11,14 +11,15 @@ from detectron2.evaluation import COCOEvaluator, inference_on_dataset from detectron2.modeling import build_model -os.chdir(os.path.dirname(os.path.abspath(__file__))) -current_directory = os.getcwd() -print(current_directory) from .analysis_lib import CreatePlotsRPD, EvaluateClass, OutputVis, grab_dataset from .datasets import data from .Ensembler import Ensembler from .table_styles import styles +os.chdir(os.path.dirname(os.path.abspath(__file__))) +# current_directory = os.getcwd() +# print(current_directory) + logging.basicConfig(level=logging.INFO) os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" From 992391ee44359018ee25a13bf00eec79885b813f Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 10:58:05 +0000 Subject: [PATCH 13/28] enable different py env for ci tests Signed-off-by: Yiheng Wang --- .github/workflows/premerge-cpu.yml | 71 +++++- ci/bundle_custom_data.py | 6 +- ..._retinalOCT_RPD_segmentation_dependency.sh | 2 +- ci/run_premerge_cpu.sh | 241 +++++++++++------- ci/run_premerge_gpu.sh | 217 +++++++++++----- ci/run_regular_tests_cpu.sh | 3 +- .../configs/metadata.json | 3 +- 7 files changed, 376 insertions(+), 167 deletions(-) diff --git a/.github/workflows/premerge-cpu.yml b/.github/workflows/premerge-cpu.yml index d365d9bb..6187ebec 100644 --- a/.github/workflows/premerge-cpu.yml +++ b/.github/workflows/premerge-cpu.yml @@ -16,29 +16,76 @@ jobs: premerge-cpu: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up Python 3.10 uses: actions/setup-python@v4 with: - python-version: 3.10.14 + python-version: 3.10.14 # This will be the default Python + + - name: Set up Miniconda + uses: conda-incubator/setup-miniconda@v3 + with: + auto-update-conda: true + # The python-version here is for Conda's base, if activated. + # We set auto-activate-base to false, so actions/setup-python's version remains default. + python-version: 3.10.14 + auto-activate-base: false # Crucial: ensures the Python 3.10 from actions/setup-python is the default + - name: cache weekly timestamp - id: pip-cache + id: pip-cache-ts run: | - echo "::set-output name=datew::$(date '+%Y-%V')" - - name: cache for pip + echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT + + - name: Get pip cache directory + id: pip-cache-dir + # This runs using the default Python (3.10) + shell: bash + run: echo "dir=$(python -m pip cache dir)" >> $GITHUB_OUTPUT + + - name: Cache pip dependencies (for Python 3.10 global env) + uses: actions/cache@v4 + id: cache-pip + with: + path: ${{ steps.pip-cache-dir.outputs.dir }} + key: ${{ runner.os }}-pip-3.10-${{ steps.pip-cache-ts.outputs.datew }}-${{ hashFiles('**/requirements.txt', '**/setup.py') }} + restore-keys: | + ${{ runner.os }}-pip-3.10-${{ steps.pip-cache-ts.outputs.datew }}- + + # Cache Conda packages (for environments your bash script might create) + # setup-miniconda action sets MINICONDA_PATH_0 environment variable + - name: Cache Conda packages uses: actions/cache@v4 - id: cache + id: cache-conda with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ steps.pip-cache.outputs.datew }} - - name: Install dependencies + path: ${{ env.MINICONDA_PATH_0 }}/pkgs + key: ${{ runner.os }}-conda-pkgs-${{ steps.pip-cache-ts.outputs.datew }}-${{ hashFiles('**/environment*.yml', '**/requirements*.txt') }} # Adjust hashFiles as needed + restore-keys: | + ${{ runner.os }}-conda-pkgs-${{ steps.pip-cache-ts.outputs.datew }}- + + - name: Install global Python dependencies (using Python 3.10) + shell: bash run: | python -m pip install --upgrade pip wheel python -m pip install --upgrade setuptools - - name: check + + - name: Check environment + shell: bash + run: | + echo "Default Python version:" + python --version + echo "Conda executable path:" + command -v conda + conda info + # This ensures conda command is available, but the default python is still 3.10 + + - name: Run check script + # The shell: bash -el {0} can be helpful if conda init modified shell profiles + # and your script needs to `conda activate` sub-environments. + shell: bash -el {0} run: | # clean up temporary files $(pwd)/runtests.sh --clean df -h - bash $(pwd)/ci/run_premerge_cpu.sh changed - shell: bash + bash $(pwd)/ci/run_premerge_cpu.sh diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index c5ab7783..4d7d58f8 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -28,7 +28,11 @@ # This list is used for our CI tests to determine whether a bundle contains the preferred files. # If a bundle does not have any of the preferred files, please add the bundle name into the list. -exclude_verify_preferred_files_list = ["pediatric_abdominal_ct_segmentation", "maisi_ct_generative"] +exclude_verify_preferred_files_list = [ + "pediatric_abdominal_ct_segmentation", + "maisi_ct_generative", + "retinalOCT_RPD_segmentation", +] # This list is used for our CI tests to determine whether a bundle needs to be tested with # the `verify_export_torchscript` function in `verify_bundle.py`. diff --git a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh index ccf94ba5..74fae23c 100644 --- a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh +++ b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh @@ -1,2 +1,2 @@ # ensure that using evironment with python==3.9 -python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' +python -m pip install 'git+https://github.com/facebookresearch/detectron2.git@65184fc057d4fab080a98564f6b60fae0b94edc4' diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index 000424c3..697c193b 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -15,25 +15,27 @@ # limitations under the License. # -# Argument(s): -# BUILD_TYPE: all/specific_test_name, tests to execute set -ex -BUILD_TYPE=all export ALLOW_MONAI_RC=true +declare -A bundle_python_versions=( + ["retinalOCT_RPD_segmentation"]="3.9" +) +DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" -if [[ $# -eq 1 ]]; then - BUILD_TYPE=$1 - -elif [[ $# -gt 1 ]]; then - echo "ERROR: too many parameters are provided" +echo "CI Job starting..." +echo "Global Python (expected ${DEFAULT_PYTHON_VERSION_FOR_VENV} from YAML): $(python -V)" +if ! command -v conda &> /dev/null; then + echo "ERROR: conda command not found. Ensure Miniconda was installed by the YAML." exit 1 +else + echo "Conda executable found: $(command -v conda)" fi # Usually, CPU test is required, but for some bundles that are too large to run in Github Actions, we can exclude them. exclude_test_list=("maisi_ct_generative") is_excluded() { - for item in "${exclude_test_list[@]}"; do # Use exclude_test_list here + for item in "${exclude_test_list[@]}"; do if [ "$1" == "$item" ]; then return 0 # Return true (0) if excluded fi @@ -41,35 +43,82 @@ is_excluded() { return 1 # Return false (1) if not excluded } +# Common dependencies to install in any activated environment +install_common_deps_in_activated_env() { + # These are typically needed by MONAI bundles or verification tools + echo "Installing common dependencies in activated environment..." >&2 + python -m pip install --upgrade pip wheel >&2 + python -m pip install --upgrade setuptools >&2 + python -m pip install jsonschema gdown pyyaml parameterized fire >&2 + export PYTHONPATH=$PWD +} + init_venv() { - if [ ! -d "model_zoo_venv" ]; then # Check if the venv directory does not exist - echo "initializing pip environment" - python -m venv model_zoo_venv + if [ ! -d "model_zoo_venv" ]; then + echo "Initializing pip environment (model_zoo_venv for Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" + python -m venv model_zoo_venv # Uses global python (expected to be DEFAULT_PYTHON_VERSION_FOR_VENV) source model_zoo_venv/bin/activate - pip install --upgrade pip wheel - pip install --upgrade setuptools - pip install jsonschema gdown pyyaml parameterized fire - export PYTHONPATH=$PWD + install_common_deps_in_activated_env else echo "Virtual environment model_zoo_venv already exists. Activating..." source model_zoo_venv/bin/activate - pip install --upgrade pip wheel - pip install --upgrade setuptools - pip install jsonschema gdown pyyaml parameterized fire - export PYTHONPATH=$PWD + install_common_deps_in_activated_env fi } remove_venv() { - if [ -d "model_zoo_venv" ]; then # Check if the venv directory exists - echo "Removing virtual environment..." - deactivate 2>/dev/null || true # Deactivate venv, ignore errors if not activated - rm -rf model_zoo_venv # Remove the venv directory + if [ -d "model_zoo_venv" ]; then + echo "Removing virtual environment model_zoo_venv..." + deactivate 2>/dev/null || true + rm -rf model_zoo_venv else - echo "Virtual environment not found. Skipping removal." + echo "Virtual environment model_zoo_venv not found. Skipping removal." + fi +} + +# Conda environment functions +init_conda_env() { + local python_version_to_create="$1" + local bundle_identifier="$2" + local conda_env_name="conda_env_${bundle_identifier}" + + echo "Initializing Conda environment with Python $python_version_to_create for GPU bundle '$bundle_identifier'..." >&2 + + if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then + if [ -n "$CONDA_EXE" ]; then + source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" + elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then + source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" + else + echo "Warning: Could not reliably source conda.sh for Conda activation." >&2 + fi + fi + + if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then + echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." >&2 + conda env remove -n "$conda_env_name" -y >&2 + fi + + conda create -n "$conda_env_name" python="$python_version_to_create" -y >&2 + conda activate "$conda_env_name" + install_common_deps_in_activated_env + conda deactivate 2>/dev/null || true + + echo "$conda_env_name" +} + +remove_conda_env() { + local conda_env_name_to_remove="$1" + if [ -z "$conda_env_name_to_remove" ]; then + echo "Warning: No Conda env name provided to remove_conda_env." >&2 + return fi + echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" >&2 + conda deactivate 2>/dev/null || true + conda env remove -n "$conda_env_name_to_remove" -y >&2 } + verify_bundle() { for dir in /opt/hostedtoolcache/*; do if [[ $dir != "/opt/hostedtoolcache/Python" ]]; then @@ -77,88 +126,100 @@ verify_bundle() { fi done echo 'Run verify bundle...' - pip install -r requirements.txt - # install extra dependencies for get changed bundle - pip install jsonschema gdown pyyaml + + if [ -f "requirements.txt" ]; then + echo "Installing global requirements.txt (using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" + python -m pip install -r requirements.txt + fi + echo "Installing global dependencies for CI scripts (jsonschema, gdown, pyyaml using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" + python -m pip install jsonschema gdown pyyaml + head_ref=$(git rev-parse HEAD) git fetch origin dev $head_ref - # achieve all changed files in 'models' + changes=$(git diff --name-only $head_ref origin/dev -- models) - if [ ! -z "$changes" ] - then - # get all changed bundles - bundle_list=$(python $(pwd)/ci/get_changed_bundle.py --f "$changes") - if [ ! -z "$bundle_list" ] - then - python $(pwd)/ci/prepare_schema.py --l "$bundle_list" - echo $bundle_list - for bundle in $bundle_list; - do + + if [ ! -z "$changes" ]; then + echo "Detected changes in 'models': $changes" + bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") + if [ ! -z "$bundle_list" ]; then + python "$(pwd)/ci/prepare_schema.py" --l "$bundle_list" + echo "Bundles to process: $bundle_list" + for bundle in $bundle_list; do + echo "Processing bundle: $bundle" if is_excluded "$bundle"; then - echo "skip '$bundle' cpu premerge tests." + echo "Skipping excluded bundle: $bundle" + continue + fi + + requirements_file="requirements_$bundle.txt" + python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" + + # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command + if [ $ALLOW_MONAI_RC = true ]; then + include_pre_release="--pre" + else + include_pre_release="" + fi + + # determine if conda should be used for the bundle + active_conda_env_for_bundle="" + required_python_version="${bundle_python_versions[$bundle]}" + use_conda_for_bundle=false + if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]]; then + use_conda_for_bundle=true + fi + if $use_conda_for_bundle; then + echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." >&2 + init_conda_env "$required_python_version" "$bundle" + active_conda_env_for_bundle="conda_env_${bundle}" + conda activate "$active_conda_env_for_bundle" + else + echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv." + init_venv + fi + + if [ -s "$requirements_file" ]; then + echo "Installing requirements from $requirements_file for $bundle" + python -m pip install $include_pre_release -r "$requirements_file" + fi + + echo "Verifying bundle (min tests): $bundle" + python "$(pwd)/ci/verify_bundle.py" -b "$bundle" -m "min" + + # cleanup + if $use_conda_for_bundle; then + remove_conda_env "$active_conda_env_for_bundle" else - # get required libraries according to the bundle's metadata file - requirements_file="requirements_$bundle.txt" - python $(pwd)/ci/get_bundle_requirements.py --b "$bundle" --requirements_file "$requirements_file" - # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command - if [ $ALLOW_MONAI_RC = true ]; then - include_pre_release="--pre" - else - include_pre_release="" - fi - init_venv - # Check if the requirements file exists and is not empty - if [ -s "$requirements_file" ]; then - echo "install required libraries for bundle: $bundle" - pip install $include_pre_release -r "$requirements_file" - fi - # verify bundle - python $(pwd)/ci/verify_bundle.py -b "$bundle" -m "min" # min tests on cpu remove_venv fi + echo "Finished processing bundle: $bundle" done else - echo "this pull request does not change any bundles, skip verify." + echo "No bundles found by get_changed_bundle.py." fi else - echo "this pull request does not change any files in 'models', skip verify." + echo "No changes in 'models' directory." fi - # check hf models + + echo "Processing Hugging Face models..." hf_model_changes=$(git diff --name-only $head_ref origin/dev -- hf_models) - if [ ! -z "$hf_model_changes" ] - then - # get all changed hf models - hf_model_list=$(python $(pwd)/ci/get_changed_bundle.py --f "$hf_model_changes" --hf_model True) - if [ ! -z "$hf_model_list" ] - then - python $(pwd)/ci/prepare_schema.py --l "$hf_model_list" --p "hf_models" - echo $hf_model_list - for hf_model in $hf_model_list; - do - echo "verify hf model: $hf_model" - # verify hf model - python $(pwd)/ci/verify_hf_model.py -b "$hf_model" + if [ ! -z "$hf_model_changes" ]; then + echo "Detected changes in 'hf_models': $hf_model_changes" + hf_model_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$hf_model_changes" --hf_model True) + if [ ! -z "$hf_model_list" ]; then + python "$(pwd)/ci/prepare_schema.py" --l "$hf_model_list" --p "hf_models" + echo "HF Models to process: $hf_model_list" + for hf_model in $hf_model_list; do + echo "Verifying HF model: $hf_model (using global Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" + python "$(pwd)/ci/verify_hf_model.py" -b "$hf_model" done else - echo "this pull request does not change any hf models, skip verify." + echo "No HF models found by get_changed_bundle.py." fi else - echo "this pull request does not change any hf models, skip verify." + echo "No changes in 'hf_models' directory." fi } - -case $BUILD_TYPE in - - all) - echo "Run all tests..." - verify_bundle - ;; - changed) - echo "Run changed tests..." - verify_bundle - ;; - *) - echo "ERROR: unknown parameter: $BUILD_TYPE" - ;; -esac +verify_bundle diff --git a/ci/run_premerge_gpu.sh b/ci/run_premerge_gpu.sh index 6aa745b6..0cad50c9 100755 --- a/ci/run_premerge_gpu.sh +++ b/ci/run_premerge_gpu.sh @@ -23,91 +23,188 @@ dist_flag=$1 set -ex export ALLOW_MONAI_RC=true +declare -A bundle_python_versions=( + ["retinalOCT_RPD_segmentation"]="3.9" +) +DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" if [[ $# -gt 1 ]]; then - echo "ERROR: too many parameters are provided" + echo "ERROR: too many parameters are provided" >&2 exit 1 fi +echo "CI GPU Job starting... Dist flag: $dist_flag" +echo "Global Python (expected ${DEFAULT_PYTHON_VERSION_FOR_VENV} from YAML): $(python -V)" +if ! command -v conda &> /dev/null; then + echo "ERROR: conda command not found. Ensure Miniconda was installed by the YAML." >&2 + exit 1 +else + echo "Conda executable found: $(command -v conda)" >&2 +fi + +# Common dependencies to install in any activated environment +install_common_deps_in_activated_env() { + echo "Installing common dependencies in activated environment..." >&2 + python -m pip install --upgrade pip wheel >&2 + python -m pip install --upgrade setuptools >&2 + python -m pip install jsonschema gdown pyyaml parameterized fire >&2 + export PYTHONPATH=$PWD +} + + init_venv() { - if [ ! -d "model_zoo_venv" ]; then # Check if the venv directory does not exist - echo "initializing pip environment" + if [ ! -d "model_zoo_venv" ]; then + echo "Initializing pip environment (model_zoo_venv for Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" >&2 python -m venv model_zoo_venv source model_zoo_venv/bin/activate - pip install --upgrade pip wheel - pip install --upgrade setuptools - pip install jsonschema gdown pyyaml parameterized fire - export PYTHONPATH=$PWD + install_common_deps_in_activated_env else - echo "Virtual environment model_zoo_venv already exists. Activating..." + echo "Virtual environment model_zoo_venv already exists. Activating..." >&2 source model_zoo_venv/bin/activate - pip install --upgrade pip wheel - pip install --upgrade setuptools - pip install jsonschema gdown pyyaml parameterized fire - export PYTHONPATH=$PWD + install_common_deps_in_activated_env fi } remove_venv() { - if [ -d "model_zoo_venv" ]; then # Check if the venv directory exists - echo "Removing virtual environment..." - deactivate 2>/dev/null || true # Deactivate venv, ignore errors if not activated - rm -rf model_zoo_venv # Remove the venv directory + if [ -d "model_zoo_venv" ]; then + echo "Removing virtual environment model_zoo_venv..." >&2 + deactivate 2>/dev/null || true + rm -rf model_zoo_venv else - echo "Virtual environment not found. Skipping removal." + echo "Virtual environment model_zoo_venv not found. Skipping removal." >&2 + fi +} + +# Conda environment functions +init_conda_env() { + local python_version_to_create="$1" + local bundle_identifier="$2" + local conda_env_name="conda_env_${bundle_identifier}" + + echo "Initializing Conda environment with Python $python_version_to_create for GPU bundle '$bundle_identifier'..." >&2 + + if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then + if [ -n "$CONDA_EXE" ]; then + source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" + elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then + source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" + else + echo "Warning: Could not reliably source conda.sh for Conda activation." >&2 + fi + fi + + if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then + echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." >&2 + conda env remove -n "$conda_env_name" -y >&2 fi + + conda create -n "$conda_env_name" python="$python_version_to_create" -y >&2 + conda activate "$conda_env_name" + install_common_deps_in_activated_env + conda deactivate 2>/dev/null || true + + echo "$conda_env_name" +} + +remove_conda_env() { + local conda_env_name_to_remove="$1" + if [ -z "$conda_env_name_to_remove" ]; then + echo "Warning: No Conda env name provided to remove_conda_env." >&2 + return + fi + echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" >&2 + conda deactivate 2>/dev/null || true + conda env remove -n "$conda_env_name_to_remove" -y >&2 } verify_bundle() { - echo 'Run verify bundle...' + echo 'Run verify GPU bundle...' >&2 + + # Source conda.sh to initialize Conda for the main script shell + if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then + if [ -n "$CONDA_EXE" ]; then + echo "Sourcing conda.sh from CONDA_EXE path ($(dirname "$CONDA_EXE")) for main shell..." >&2 + source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" + else + echo "Error: CONDA_EXE is not set. Cannot reliably source conda.sh for main shell. Exiting." >&2 + exit 1 + fi + else + echo "Conda shell already initialized at level: $CONDA_SHLVL" >&2 + fi + head_ref=$(git rev-parse HEAD) git fetch origin dev $head_ref - # achieve all changed files in 'models' + changes=$(git diff --name-only $head_ref origin/dev -- models) - if [ ! -z "$changes" ] - then - # get all changed bundles - bundle_list=$(python $(pwd)/ci/get_changed_bundle.py --f "$changes") - if [ ! -z "$bundle_list" ] - then - python $(pwd)/ci/prepare_schema.py --l "$bundle_list" - for bundle in $bundle_list; - do - # get required libraries according to the bundle's metadata file - requirements_file="requirements_$bundle.txt" - python $(pwd)/ci/get_bundle_requirements.py --b "$bundle" --requirements_file "$requirements_file" - # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command - if [ $ALLOW_MONAI_RC = true ]; then - include_pre_release="--pre" - else - include_pre_release="" - fi - init_venv - # Check if the requirements file exists and is not empty - if [ -s "$requirements_file" ]; then - echo "install required libraries for bundle: $bundle" - pip install $include_pre_release -r "$requirements_file" - fi - # get extra install script if exists - extra_script=$(python $(pwd)/ci/get_bundle_requirements.py --b "$bundle" --get_script True) - if [ ! -z "$extra_script" ]; then - echo "install extra libraries with script: $extra_script" - bash $extra_script - fi - # verify bundle - python $(pwd)/ci/verify_bundle.py --b "$bundle" - test_cmd="python $(pwd)/ci/unit_tests/runner.py --b \"$bundle\"" - if [ "$dist_flag" = "True" ]; then - test_cmd="torchrun $(pwd)/ci/unit_tests/runner.py --b \"$bundle\" --dist True" - fi - eval $test_cmd - remove_venv - done + + if [ ! -z "$changes" ]; then + echo "Detected changes in 'models': $changes" >&2 + bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") + if [ ! -z "$bundle_list" ]; then + python "$(pwd)/ci/prepare_schema.py" --l "$bundle_list" + echo "GPU Bundles to process: $bundle_list" >&2 + for bundle in $bundle_list; do + echo "Processing GPU bundle: $bundle" >&2 + requirements_file="requirements_$bundle.txt" + python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" + + # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command + if [ "$ALLOW_MONAI_RC" = true ]; then + include_pre_release="--pre" + else + include_pre_release="" + fi + + # determine if conda should be used for the bundle + required_python_version="${bundle_python_versions[$bundle]}" + use_conda_for_bundle=false + if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]]; then + use_conda_for_bundle=true + fi + + if $use_conda_for_bundle; then + echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." >&2 + init_conda_env "$required_python_version" "$bundle" + active_conda_env_for_bundle="conda_env_${bundle}" + conda activate "$active_conda_env_for_bundle" + else + echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv for GPU." >&2 + init_venv + fi + if [ -s "$requirements_file" ]; then + echo "Installing requirements from $requirements_file for $bundle" >&2 + python -m pip install $include_pre_release -r "$requirements_file" >&2 + fi + + extra_script=$(python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --get_script True) + if [ ! -z "$extra_script" ]; then + echo "Installing extra libraries for GPU with script: $extra_script" >&2 + bash "$extra_script" + fi + + echo "Verifying GPU bundle: $bundle" >&2 + python "$(pwd)/ci/verify_bundle.py" --b "$bundle" + + test_cmd="python $(pwd)/ci/unit_tests/runner.py --b \"$bundle\"" + if [ "$dist_flag" = "True" ]; then + test_cmd="torchrun $(pwd)/ci/unit_tests/runner.py --b \"$bundle\" --dist True" + fi + echo "Executing GPU test command: $test_cmd" >&2 + eval $test_cmd + + if $use_conda_for_bundle; then + remove_conda_env "$active_conda_env_for_bundle" + else + remove_venv + fi + echo "Finished processing GPU bundle: $bundle" >&2 + done else - echo "this pull request does not change any bundles, skip verify." + echo "No bundles found by get_changed_bundle.py for GPU processing." >&2 fi else - echo "this pull request does not change any files in 'models', skip verify." + echo "No changes in 'models' directory. Skipping GPU bundle verification." >&2 remove_venv fi } diff --git a/ci/run_regular_tests_cpu.sh b/ci/run_regular_tests_cpu.sh index 253cc86c..52936c0e 100755 --- a/ci/run_regular_tests_cpu.sh +++ b/ci/run_regular_tests_cpu.sh @@ -30,8 +30,7 @@ elif [[ $# -gt 1 ]]; then exit 1 fi -# Usually, CPU test is required, but for some bundles that are too large to run in Github Actions, we can exclude them. -exclude_test_list=("maisi_ct_generative") +exclude_test_list=("maisi_ct_generative" "retinalOCT_RPD_segmentation") is_excluded() { for item in "${exclude_test_list[@]}"; do # Use exclude_test_list here if [ "$1" == "$item" ]; then diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 43bf6eec..5e5cc2a1 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -18,7 +18,8 @@ "fire": "0.7.0", "torchvision": "0.22.0", "detectron2": "0.6", - "lxml": "5.4.0" + "lxml": "5.4.0", + "pillow": "9.5.0" }, "name": "retinalOCT_RPD_segmentation", "task": "Reticular Pseudodrusen (RPD) instance segmentation.", From 52cce7719b511b40255111433e20329ac02245a2 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 11:45:45 +0000 Subject: [PATCH 14/28] fix precommit Signed-off-by: Yiheng Wang --- .github/workflows/premerge-cpu.yml | 8 ++++---- ci/run_premerge_cpu.sh | 18 +++++++++--------- ci/run_premerge_gpu.sh | 16 ++++++++-------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/premerge-cpu.yml b/.github/workflows/premerge-cpu.yml index 6187ebec..eb69a0aa 100644 --- a/.github/workflows/premerge-cpu.yml +++ b/.github/workflows/premerge-cpu.yml @@ -30,18 +30,18 @@ jobs: auto-update-conda: true # The python-version here is for Conda's base, if activated. # We set auto-activate-base to false, so actions/setup-python's version remains default. - python-version: 3.10.14 + python-version: 3.10.14 auto-activate-base: false # Crucial: ensures the Python 3.10 from actions/setup-python is the default - name: cache weekly timestamp id: pip-cache-ts run: | echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT - + - name: Get pip cache directory id: pip-cache-dir # This runs using the default Python (3.10) - shell: bash + shell: bash run: echo "dir=$(python -m pip cache dir)" >> $GITHUB_OUTPUT - name: Cache pip dependencies (for Python 3.10 global env) @@ -83,7 +83,7 @@ jobs: - name: Run check script # The shell: bash -el {0} can be helpful if conda init modified shell profiles # and your script needs to `conda activate` sub-environments. - shell: bash -el {0} + shell: bash -el {0} run: | # clean up temporary files $(pwd)/runtests.sh --clean diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index 697c193b..c495d5cb 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -94,7 +94,7 @@ init_conda_env() { fi fi - if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then + if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." >&2 conda env remove -n "$conda_env_name" -y >&2 fi @@ -103,7 +103,7 @@ init_conda_env() { conda activate "$conda_env_name" install_common_deps_in_activated_env conda deactivate 2>/dev/null || true - + echo "$conda_env_name" } @@ -138,7 +138,7 @@ verify_bundle() { git fetch origin dev $head_ref changes=$(git diff --name-only $head_ref origin/dev -- models) - + if [ ! -z "$changes" ]; then echo "Detected changes in 'models': $changes" bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") @@ -154,7 +154,7 @@ verify_bundle() { requirements_file="requirements_$bundle.txt" python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" - + # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command if [ $ALLOW_MONAI_RC = true ]; then include_pre_release="--pre" @@ -176,17 +176,17 @@ verify_bundle() { conda activate "$active_conda_env_for_bundle" else echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv." - init_venv + init_venv fi - + if [ -s "$requirements_file" ]; then echo "Installing requirements from $requirements_file for $bundle" python -m pip install $include_pre_release -r "$requirements_file" fi - + echo "Verifying bundle (min tests): $bundle" python "$(pwd)/ci/verify_bundle.py" -b "$bundle" -m "min" - + # cleanup if $use_conda_for_bundle; then remove_conda_env "$active_conda_env_for_bundle" @@ -201,7 +201,7 @@ verify_bundle() { else echo "No changes in 'models' directory." fi - + echo "Processing Hugging Face models..." hf_model_changes=$(git diff --name-only $head_ref origin/dev -- hf_models) if [ ! -z "$hf_model_changes" ]; then diff --git a/ci/run_premerge_gpu.sh b/ci/run_premerge_gpu.sh index 0cad50c9..209ed8a8 100755 --- a/ci/run_premerge_gpu.sh +++ b/ci/run_premerge_gpu.sh @@ -53,7 +53,7 @@ install_common_deps_in_activated_env() { init_venv() { - if [ ! -d "model_zoo_venv" ]; then + if [ ! -d "model_zoo_venv" ]; then echo "Initializing pip environment (model_zoo_venv for Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" >&2 python -m venv model_zoo_venv source model_zoo_venv/bin/activate @@ -93,7 +93,7 @@ init_conda_env() { fi fi - if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then + if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." >&2 conda env remove -n "$conda_env_name" -y >&2 fi @@ -102,7 +102,7 @@ init_conda_env() { conda activate "$conda_env_name" install_common_deps_in_activated_env conda deactivate 2>/dev/null || true - + echo "$conda_env_name" } @@ -147,7 +147,7 @@ verify_bundle() { for bundle in $bundle_list; do echo "Processing GPU bundle: $bundle" >&2 requirements_file="requirements_$bundle.txt" - python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" + python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command if [ "$ALLOW_MONAI_RC" = true ]; then @@ -176,23 +176,23 @@ verify_bundle() { echo "Installing requirements from $requirements_file for $bundle" >&2 python -m pip install $include_pre_release -r "$requirements_file" >&2 fi - + extra_script=$(python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --get_script True) if [ ! -z "$extra_script" ]; then echo "Installing extra libraries for GPU with script: $extra_script" >&2 bash "$extra_script" fi - + echo "Verifying GPU bundle: $bundle" >&2 python "$(pwd)/ci/verify_bundle.py" --b "$bundle" - + test_cmd="python $(pwd)/ci/unit_tests/runner.py --b \"$bundle\"" if [ "$dist_flag" = "True" ]; then test_cmd="torchrun $(pwd)/ci/unit_tests/runner.py --b \"$bundle\" --dist True" fi echo "Executing GPU test command: $test_cmd" >&2 eval $test_cmd - + if $use_conda_for_bundle; then remove_conda_env "$active_conda_env_for_bundle" else From 03525b8d5c29cf0ea970e1160d016101ededc9c8 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 12:00:32 +0000 Subject: [PATCH 15/28] add conda init for cpu test Signed-off-by: Yiheng Wang --- ci/run_premerge_cpu.sh | 58 +++++++++++++++++++++++++++++------------- ci/run_premerge_gpu.sh | 29 +++++++++++++-------- 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index c495d5cb..e6d7add2 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -125,29 +125,43 @@ verify_bundle() { rm -rf "$dir" fi done - echo 'Run verify bundle...' + echo 'Run verify bundle...' >&2 - if [ -f "requirements.txt" ]; then - echo "Installing global requirements.txt (using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" - python -m pip install -r requirements.txt + # Source conda.sh to initialize Conda for the main script shell + if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then + if [ -n "$CONDA_EXE" ]; then + echo "Sourcing conda.sh from CONDA_EXE path ($(dirname "$CONDA_EXE")) for main shell..." >&2 + source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" + else + echo "Error: CONDA_EXE is not set. Cannot reliably source conda.sh for main shell. Exiting." >&2 + exit 1 + fi + else + echo "Conda shell already initialized at level: $CONDA_SHLVL" >&2 fi - echo "Installing global dependencies for CI scripts (jsonschema, gdown, pyyaml using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" - python -m pip install jsonschema gdown pyyaml + + pip install -r requirements.txt + # install extra dependencies for get changed bundle + pip install jsonschema gdown pyyaml head_ref=$(git rev-parse HEAD) git fetch origin dev $head_ref changes=$(git diff --name-only $head_ref origin/dev -- models) - if [ ! -z "$changes" ]; then + if [ ! -z "$changes" ] + then echo "Detected changes in 'models': $changes" bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") - if [ ! -z "$bundle_list" ]; then + if [ ! -z "$bundle_list" ] + then python "$(pwd)/ci/prepare_schema.py" --l "$bundle_list" echo "Bundles to process: $bundle_list" - for bundle in $bundle_list; do + for bundle in $bundle_list + do echo "Processing bundle: $bundle" - if is_excluded "$bundle"; then + if is_excluded "$bundle" + then echo "Skipping excluded bundle: $bundle" continue fi @@ -156,7 +170,8 @@ verify_bundle() { python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command - if [ $ALLOW_MONAI_RC = true ]; then + if [ $ALLOW_MONAI_RC = true ] + then include_pre_release="--pre" else include_pre_release="" @@ -166,10 +181,12 @@ verify_bundle() { active_conda_env_for_bundle="" required_python_version="${bundle_python_versions[$bundle]}" use_conda_for_bundle=false - if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]]; then + if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] + then use_conda_for_bundle=true fi - if $use_conda_for_bundle; then + if $use_conda_for_bundle + then echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." >&2 init_conda_env "$required_python_version" "$bundle" active_conda_env_for_bundle="conda_env_${bundle}" @@ -179,7 +196,8 @@ verify_bundle() { init_venv fi - if [ -s "$requirements_file" ]; then + if [ -s "$requirements_file" ] + then echo "Installing requirements from $requirements_file for $bundle" python -m pip install $include_pre_release -r "$requirements_file" fi @@ -188,7 +206,8 @@ verify_bundle() { python "$(pwd)/ci/verify_bundle.py" -b "$bundle" -m "min" # cleanup - if $use_conda_for_bundle; then + if $use_conda_for_bundle + then remove_conda_env "$active_conda_env_for_bundle" else remove_venv @@ -204,13 +223,16 @@ verify_bundle() { echo "Processing Hugging Face models..." hf_model_changes=$(git diff --name-only $head_ref origin/dev -- hf_models) - if [ ! -z "$hf_model_changes" ]; then + if [ ! -z "$hf_model_changes" ] + then echo "Detected changes in 'hf_models': $hf_model_changes" hf_model_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$hf_model_changes" --hf_model True) - if [ ! -z "$hf_model_list" ]; then + if [ ! -z "$hf_model_list" ] + then python "$(pwd)/ci/prepare_schema.py" --l "$hf_model_list" --p "hf_models" echo "HF Models to process: $hf_model_list" - for hf_model in $hf_model_list; do + for hf_model in $hf_model_list + do echo "Verifying HF model: $hf_model (using global Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" python "$(pwd)/ci/verify_hf_model.py" -b "$hf_model" done diff --git a/ci/run_premerge_gpu.sh b/ci/run_premerge_gpu.sh index 209ed8a8..600fe3d6 100755 --- a/ci/run_premerge_gpu.sh +++ b/ci/run_premerge_gpu.sh @@ -118,7 +118,7 @@ remove_conda_env() { } verify_bundle() { - echo 'Run verify GPU bundle...' >&2 + echo 'Run verify bundle...' >&2 # Source conda.sh to initialize Conda for the main script shell if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then @@ -138,19 +138,23 @@ verify_bundle() { changes=$(git diff --name-only $head_ref origin/dev -- models) - if [ ! -z "$changes" ]; then + if [ ! -z "$changes" ] + then echo "Detected changes in 'models': $changes" >&2 bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") - if [ ! -z "$bundle_list" ]; then + if [ ! -z "$bundle_list" ] + then python "$(pwd)/ci/prepare_schema.py" --l "$bundle_list" echo "GPU Bundles to process: $bundle_list" >&2 - for bundle in $bundle_list; do + for bundle in $bundle_list + do echo "Processing GPU bundle: $bundle" >&2 requirements_file="requirements_$bundle.txt" python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command - if [ "$ALLOW_MONAI_RC" = true ]; then + if [ "$ALLOW_MONAI_RC" = true ] + then include_pre_release="--pre" else include_pre_release="" @@ -159,11 +163,13 @@ verify_bundle() { # determine if conda should be used for the bundle required_python_version="${bundle_python_versions[$bundle]}" use_conda_for_bundle=false - if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]]; then + if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] + then use_conda_for_bundle=true fi - if $use_conda_for_bundle; then + if $use_conda_for_bundle + then echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." >&2 init_conda_env "$required_python_version" "$bundle" active_conda_env_for_bundle="conda_env_${bundle}" @@ -172,13 +178,15 @@ verify_bundle() { echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv for GPU." >&2 init_venv fi - if [ -s "$requirements_file" ]; then + if [ -s "$requirements_file" ] + then echo "Installing requirements from $requirements_file for $bundle" >&2 python -m pip install $include_pre_release -r "$requirements_file" >&2 fi extra_script=$(python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --get_script True) - if [ ! -z "$extra_script" ]; then + if [ ! -z "$extra_script" ] + then echo "Installing extra libraries for GPU with script: $extra_script" >&2 bash "$extra_script" fi @@ -193,7 +201,8 @@ verify_bundle() { echo "Executing GPU test command: $test_cmd" >&2 eval $test_cmd - if $use_conda_for_bundle; then + if $use_conda_for_bundle + then remove_conda_env "$active_conda_env_for_bundle" else remove_venv From ee659664b10dfdba897c20080aef6d20258b14fb Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 12:21:51 +0000 Subject: [PATCH 16/28] update premerge cpu script Signed-off-by: Yiheng Wang --- ci/run_premerge_cpu.sh | 236 +++++++++++++++++++---------------------- 1 file changed, 110 insertions(+), 126 deletions(-) diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index e6d7add2..2bcc7664 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -15,27 +15,31 @@ # limitations under the License. # +# Argument(s): +# BUILD_TYPE: all/specific_test_name, tests to execute set -ex +BUILD_TYPE=all export ALLOW_MONAI_RC=true + +if [[ $# -eq 1 ]]; then + BUILD_TYPE=$1 + +elif [[ $# -gt 1 ]]; then + echo "ERROR: too many parameters are provided" + exit 1 +fi + +# Bunles that requires special python version declare -A bundle_python_versions=( ["retinalOCT_RPD_segmentation"]="3.9" ) DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" -echo "CI Job starting..." -echo "Global Python (expected ${DEFAULT_PYTHON_VERSION_FOR_VENV} from YAML): $(python -V)" -if ! command -v conda &> /dev/null; then - echo "ERROR: conda command not found. Ensure Miniconda was installed by the YAML." - exit 1 -else - echo "Conda executable found: $(command -v conda)" -fi - # Usually, CPU test is required, but for some bundles that are too large to run in Github Actions, we can exclude them. exclude_test_list=("maisi_ct_generative") is_excluded() { - for item in "${exclude_test_list[@]}"; do + for item in "${exclude_test_list[@]}"; do # Use exclude_test_list here if [ "$1" == "$item" ]; then return 0 # Return true (0) if excluded fi @@ -43,20 +47,17 @@ is_excluded() { return 1 # Return false (1) if not excluded } -# Common dependencies to install in any activated environment install_common_deps_in_activated_env() { - # These are typically needed by MONAI bundles or verification tools - echo "Installing common dependencies in activated environment..." >&2 - python -m pip install --upgrade pip wheel >&2 - python -m pip install --upgrade setuptools >&2 - python -m pip install jsonschema gdown pyyaml parameterized fire >&2 + python -m pip install --upgrade pip wheel + python -m pip install --upgrade setuptools + python -m pip install jsonschema gdown pyyaml parameterized fire export PYTHONPATH=$PWD } init_venv() { - if [ ! -d "model_zoo_venv" ]; then - echo "Initializing pip environment (model_zoo_venv for Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" - python -m venv model_zoo_venv # Uses global python (expected to be DEFAULT_PYTHON_VERSION_FOR_VENV) + if [ ! -d "model_zoo_venv" ]; then # Check if the venv directory does not exist + echo "initializing pip environment" + python -m venv model_zoo_venv source model_zoo_venv/bin/activate install_common_deps_in_activated_env else @@ -67,181 +68,164 @@ init_venv() { } remove_venv() { - if [ -d "model_zoo_venv" ]; then - echo "Removing virtual environment model_zoo_venv..." - deactivate 2>/dev/null || true - rm -rf model_zoo_venv + if [ -d "model_zoo_venv" ]; then # Check if the venv directory exists + echo "Removing virtual environment..." + deactivate 2>/dev/null || true # Deactivate venv, ignore errors if not activated + rm -rf model_zoo_venv # Remove the venv directory else - echo "Virtual environment model_zoo_venv not found. Skipping removal." + echo "Virtual environment not found. Skipping removal." fi } -# Conda environment functions init_conda_env() { local python_version_to_create="$1" local bundle_identifier="$2" local conda_env_name="conda_env_${bundle_identifier}" - echo "Initializing Conda environment with Python $python_version_to_create for GPU bundle '$bundle_identifier'..." >&2 - if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then if [ -n "$CONDA_EXE" ]; then source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" else - echo "Warning: Could not reliably source conda.sh for Conda activation." >&2 + echo "Warning: Could not reliably source conda.sh for Conda activation." fi fi if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then - echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." >&2 - conda env remove -n "$conda_env_name" -y >&2 + echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." + conda env remove -n "$conda_env_name" -y fi - conda create -n "$conda_env_name" python="$python_version_to_create" -y >&2 + conda create -n "$conda_env_name" python="$python_version_to_create" -y conda activate "$conda_env_name" install_common_deps_in_activated_env conda deactivate 2>/dev/null || true - - echo "$conda_env_name" } remove_conda_env() { local conda_env_name_to_remove="$1" if [ -z "$conda_env_name_to_remove" ]; then - echo "Warning: No Conda env name provided to remove_conda_env." >&2 + echo "Warning: No Conda env name provided to remove_conda_env." return fi - echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" >&2 + echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" conda deactivate 2>/dev/null || true - conda env remove -n "$conda_env_name_to_remove" -y >&2 + conda env remove -n "$conda_env_name_to_remove" -y } - verify_bundle() { for dir in /opt/hostedtoolcache/*; do if [[ $dir != "/opt/hostedtoolcache/Python" ]]; then rm -rf "$dir" fi done - echo 'Run verify bundle...' >&2 - - # Source conda.sh to initialize Conda for the main script shell - if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then - if [ -n "$CONDA_EXE" ]; then - echo "Sourcing conda.sh from CONDA_EXE path ($(dirname "$CONDA_EXE")) for main shell..." >&2 - source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" - else - echo "Error: CONDA_EXE is not set. Cannot reliably source conda.sh for main shell. Exiting." >&2 - exit 1 - fi - else - echo "Conda shell already initialized at level: $CONDA_SHLVL" >&2 - fi - + echo 'Run verify bundle...' pip install -r requirements.txt # install extra dependencies for get changed bundle pip install jsonschema gdown pyyaml - head_ref=$(git rev-parse HEAD) git fetch origin dev $head_ref - + # achieve all changed files in 'models' changes=$(git diff --name-only $head_ref origin/dev -- models) - if [ ! -z "$changes" ] then - echo "Detected changes in 'models': $changes" - bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") + # get all changed bundles + bundle_list=$(python $(pwd)/ci/get_changed_bundle.py --f "$changes") if [ ! -z "$bundle_list" ] then - python "$(pwd)/ci/prepare_schema.py" --l "$bundle_list" - echo "Bundles to process: $bundle_list" - for bundle in $bundle_list + python $(pwd)/ci/prepare_schema.py --l "$bundle_list" + echo $bundle_list + for bundle in $bundle_list; do - echo "Processing bundle: $bundle" - if is_excluded "$bundle" - then - echo "Skipping excluded bundle: $bundle" - continue - fi - - requirements_file="requirements_$bundle.txt" - python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" - - # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command - if [ $ALLOW_MONAI_RC = true ] - then - include_pre_release="--pre" + if is_excluded "$bundle"; then + echo "skip '$bundle' cpu premerge tests." else - include_pre_release="" + # get required libraries according to the bundle's metadata file + requirements_file="requirements_$bundle.txt" + python $(pwd)/ci/get_bundle_requirements.py --b "$bundle" --requirements_file "$requirements_file" + # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command + if [ $ALLOW_MONAI_RC = true ]; then + include_pre_release="--pre" + else + include_pre_release="" + fi + # determine if conda env should be used for the bundle + active_conda_env_for_bundle="" + required_python_version="${bundle_python_versions[$bundle]}" + use_conda_for_bundle=false + if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] + then + use_conda_for_bundle=true + fi + if $use_conda_for_bundle + then + echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." + init_conda_env "$required_python_version" "$bundle" + active_conda_env_for_bundle="conda_env_${bundle}" + conda activate "$active_conda_env_for_bundle" + else + echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv." + init_venv + fi + # Check if the requirements file exists and is not empty + if [ -s "$requirements_file" ]; then + echo "install required libraries for bundle: $bundle" + pip install $include_pre_release -r "$requirements_file" + fi + # verify bundle + python $(pwd)/ci/verify_bundle.py -b "$bundle" -m "min" # min tests on cpu + # cleanup + if $use_conda_for_bundle + then + remove_conda_env "$active_conda_env_for_bundle" + else + remove_venv + fi fi - - # determine if conda should be used for the bundle - active_conda_env_for_bundle="" - required_python_version="${bundle_python_versions[$bundle]}" - use_conda_for_bundle=false - if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] - then - use_conda_for_bundle=true - fi - if $use_conda_for_bundle - then - echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." >&2 - init_conda_env "$required_python_version" "$bundle" - active_conda_env_for_bundle="conda_env_${bundle}" - conda activate "$active_conda_env_for_bundle" - else - echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv." - init_venv - fi - - if [ -s "$requirements_file" ] - then - echo "Installing requirements from $requirements_file for $bundle" - python -m pip install $include_pre_release -r "$requirements_file" - fi - - echo "Verifying bundle (min tests): $bundle" - python "$(pwd)/ci/verify_bundle.py" -b "$bundle" -m "min" - - # cleanup - if $use_conda_for_bundle - then - remove_conda_env "$active_conda_env_for_bundle" - else - remove_venv - fi - echo "Finished processing bundle: $bundle" done else - echo "No bundles found by get_changed_bundle.py." + echo "this pull request does not change any bundles, skip verify." fi else - echo "No changes in 'models' directory." + echo "this pull request does not change any files in 'models', skip verify." fi - - echo "Processing Hugging Face models..." + # check hf models hf_model_changes=$(git diff --name-only $head_ref origin/dev -- hf_models) if [ ! -z "$hf_model_changes" ] then - echo "Detected changes in 'hf_models': $hf_model_changes" - hf_model_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$hf_model_changes" --hf_model True) + # get all changed hf models + hf_model_list=$(python $(pwd)/ci/get_changed_bundle.py --f "$hf_model_changes" --hf_model True) if [ ! -z "$hf_model_list" ] then - python "$(pwd)/ci/prepare_schema.py" --l "$hf_model_list" --p "hf_models" - echo "HF Models to process: $hf_model_list" - for hf_model in $hf_model_list + python $(pwd)/ci/prepare_schema.py --l "$hf_model_list" --p "hf_models" + echo $hf_model_list + for hf_model in $hf_model_list; do - echo "Verifying HF model: $hf_model (using global Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" - python "$(pwd)/ci/verify_hf_model.py" -b "$hf_model" + echo "verify hf model: $hf_model" + # verify hf model + python $(pwd)/ci/verify_hf_model.py -b "$hf_model" done else - echo "No HF models found by get_changed_bundle.py." + echo "this pull request does not change any hf models, skip verify." fi else - echo "No changes in 'hf_models' directory." + echo "this pull request does not change any hf models, skip verify." fi } -verify_bundle + +case $BUILD_TYPE in + + all) + echo "Run all tests..." + verify_bundle + ;; + changed) + echo "Run changed tests..." + verify_bundle + ;; + *) + echo "ERROR: unknown parameter: $BUILD_TYPE" + ;; +esac From 33cc537897ac367fd035c73c190b53a919d5ac49 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 12:41:53 +0000 Subject: [PATCH 17/28] add conda init Signed-off-by: Yiheng Wang --- .github/workflows/premerge-cpu.yml | 18 +-- ci/run_premerge_cpu.sh | 2 - ci/run_premerge_gpu.sh | 208 ++++++++++++----------------- 3 files changed, 89 insertions(+), 139 deletions(-) diff --git a/.github/workflows/premerge-cpu.yml b/.github/workflows/premerge-cpu.yml index eb69a0aa..0e7bda96 100644 --- a/.github/workflows/premerge-cpu.yml +++ b/.github/workflows/premerge-cpu.yml @@ -33,6 +33,12 @@ jobs: python-version: 3.10.14 auto-activate-base: false # Crucial: ensures the Python 3.10 from actions/setup-python is the default + - name: Initialize Conda for shell integration + shell: bash + run: | + conda init bash + source ~/.bashrc || echo "Sourcing ~/.bashrc failed or file not found, relying on next login shell." + - name: cache weekly timestamp id: pip-cache-ts run: | @@ -70,19 +76,7 @@ jobs: python -m pip install --upgrade pip wheel python -m pip install --upgrade setuptools - - name: Check environment - shell: bash - run: | - echo "Default Python version:" - python --version - echo "Conda executable path:" - command -v conda - conda info - # This ensures conda command is available, but the default python is still 3.10 - - name: Run check script - # The shell: bash -el {0} can be helpful if conda init modified shell profiles - # and your script needs to `conda activate` sub-environments. shell: bash -el {0} run: | # clean up temporary files diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index 2bcc7664..79c76b24 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -160,12 +160,10 @@ verify_bundle() { fi if $use_conda_for_bundle then - echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." init_conda_env "$required_python_version" "$bundle" active_conda_env_for_bundle="conda_env_${bundle}" conda activate "$active_conda_env_for_bundle" else - echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv." init_venv fi # Check if the requirements file exists and is not empty diff --git a/ci/run_premerge_gpu.sh b/ci/run_premerge_gpu.sh index 600fe3d6..5244400a 100755 --- a/ci/run_premerge_gpu.sh +++ b/ci/run_premerge_gpu.sh @@ -23,197 +23,155 @@ dist_flag=$1 set -ex export ALLOW_MONAI_RC=true -declare -A bundle_python_versions=( - ["retinalOCT_RPD_segmentation"]="3.9" -) -DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" if [[ $# -gt 1 ]]; then - echo "ERROR: too many parameters are provided" >&2 + echo "ERROR: too many parameters are provided" exit 1 fi -echo "CI GPU Job starting... Dist flag: $dist_flag" -echo "Global Python (expected ${DEFAULT_PYTHON_VERSION_FOR_VENV} from YAML): $(python -V)" -if ! command -v conda &> /dev/null; then - echo "ERROR: conda command not found. Ensure Miniconda was installed by the YAML." >&2 - exit 1 -else - echo "Conda executable found: $(command -v conda)" >&2 -fi +declare -A bundle_python_versions=( + ["retinalOCT_RPD_segmentation"]="3.9" +) +DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" -# Common dependencies to install in any activated environment install_common_deps_in_activated_env() { - echo "Installing common dependencies in activated environment..." >&2 - python -m pip install --upgrade pip wheel >&2 - python -m pip install --upgrade setuptools >&2 - python -m pip install jsonschema gdown pyyaml parameterized fire >&2 + python -m pip install --upgrade pip wheel + python -m pip install --upgrade setuptools + python -m pip install jsonschema gdown pyyaml parameterized fire export PYTHONPATH=$PWD } - init_venv() { - if [ ! -d "model_zoo_venv" ]; then - echo "Initializing pip environment (model_zoo_venv for Python ${DEFAULT_PYTHON_VERSION_FOR_VENV})" >&2 + if [ ! -d "model_zoo_venv" ]; then # Check if the venv directory does not exist + echo "initializing pip environment" python -m venv model_zoo_venv source model_zoo_venv/bin/activate install_common_deps_in_activated_env else - echo "Virtual environment model_zoo_venv already exists. Activating..." >&2 + echo "Virtual environment model_zoo_venv already exists. Activating..." source model_zoo_venv/bin/activate install_common_deps_in_activated_env fi } remove_venv() { - if [ -d "model_zoo_venv" ]; then - echo "Removing virtual environment model_zoo_venv..." >&2 - deactivate 2>/dev/null || true - rm -rf model_zoo_venv + if [ -d "model_zoo_venv" ]; then # Check if the venv directory exists + echo "Removing virtual environment..." + deactivate 2>/dev/null || true # Deactivate venv, ignore errors if not activated + rm -rf model_zoo_venv # Remove the venv directory else - echo "Virtual environment model_zoo_venv not found. Skipping removal." >&2 + echo "Virtual environment not found. Skipping removal." fi } -# Conda environment functions init_conda_env() { local python_version_to_create="$1" local bundle_identifier="$2" local conda_env_name="conda_env_${bundle_identifier}" - echo "Initializing Conda environment with Python $python_version_to_create for GPU bundle '$bundle_identifier'..." >&2 - if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then if [ -n "$CONDA_EXE" ]; then source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" else - echo "Warning: Could not reliably source conda.sh for Conda activation." >&2 + echo "Warning: Could not reliably source conda.sh for Conda activation." fi fi if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then - echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." >&2 - conda env remove -n "$conda_env_name" -y >&2 + echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." + conda env remove -n "$conda_env_name" -y fi - conda create -n "$conda_env_name" python="$python_version_to_create" -y >&2 + conda create -n "$conda_env_name" python="$python_version_to_create" -y conda activate "$conda_env_name" install_common_deps_in_activated_env conda deactivate 2>/dev/null || true - - echo "$conda_env_name" } remove_conda_env() { local conda_env_name_to_remove="$1" if [ -z "$conda_env_name_to_remove" ]; then - echo "Warning: No Conda env name provided to remove_conda_env." >&2 + echo "Warning: No Conda env name provided to remove_conda_env." return fi - echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" >&2 + echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" conda deactivate 2>/dev/null || true - conda env remove -n "$conda_env_name_to_remove" -y >&2 + conda env remove -n "$conda_env_name_to_remove" -y } verify_bundle() { - echo 'Run verify bundle...' >&2 - - # Source conda.sh to initialize Conda for the main script shell - if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then - if [ -n "$CONDA_EXE" ]; then - echo "Sourcing conda.sh from CONDA_EXE path ($(dirname "$CONDA_EXE")) for main shell..." >&2 - source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" - else - echo "Error: CONDA_EXE is not set. Cannot reliably source conda.sh for main shell. Exiting." >&2 - exit 1 - fi - else - echo "Conda shell already initialized at level: $CONDA_SHLVL" >&2 - fi - + echo 'Run verify bundle...' head_ref=$(git rev-parse HEAD) git fetch origin dev $head_ref - + # achieve all changed files in 'models' changes=$(git diff --name-only $head_ref origin/dev -- models) - if [ ! -z "$changes" ] then - echo "Detected changes in 'models': $changes" >&2 - bundle_list=$(python "$(pwd)/ci/get_changed_bundle.py" --f "$changes") + # get all changed bundles + bundle_list=$(python $(pwd)/ci/get_changed_bundle.py --f "$changes") if [ ! -z "$bundle_list" ] then - python "$(pwd)/ci/prepare_schema.py" --l "$bundle_list" - echo "GPU Bundles to process: $bundle_list" >&2 - for bundle in $bundle_list - do - echo "Processing GPU bundle: $bundle" >&2 - requirements_file="requirements_$bundle.txt" - python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --requirements_file "$requirements_file" - - # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command - if [ "$ALLOW_MONAI_RC" = true ] - then - include_pre_release="--pre" - else - include_pre_release="" - fi - - # determine if conda should be used for the bundle - required_python_version="${bundle_python_versions[$bundle]}" - use_conda_for_bundle=false - if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] - then - use_conda_for_bundle=true - fi - - if $use_conda_for_bundle - then - echo "Bundle '$bundle' requires Python $required_python_version (specified) for GPU. Using Conda." >&2 - init_conda_env "$required_python_version" "$bundle" - active_conda_env_for_bundle="conda_env_${bundle}" - conda activate "$active_conda_env_for_bundle" - else - echo "Bundle '$bundle' using default Python ${DEFAULT_PYTHON_VERSION_FOR_VENV} venv for GPU." >&2 - init_venv - fi - if [ -s "$requirements_file" ] - then - echo "Installing requirements from $requirements_file for $bundle" >&2 - python -m pip install $include_pre_release -r "$requirements_file" >&2 - fi - - extra_script=$(python "$(pwd)/ci/get_bundle_requirements.py" --b "$bundle" --get_script True) - if [ ! -z "$extra_script" ] - then - echo "Installing extra libraries for GPU with script: $extra_script" >&2 - bash "$extra_script" - fi - - echo "Verifying GPU bundle: $bundle" >&2 - python "$(pwd)/ci/verify_bundle.py" --b "$bundle" - - test_cmd="python $(pwd)/ci/unit_tests/runner.py --b \"$bundle\"" - if [ "$dist_flag" = "True" ]; then - test_cmd="torchrun $(pwd)/ci/unit_tests/runner.py --b \"$bundle\" --dist True" - fi - echo "Executing GPU test command: $test_cmd" >&2 - eval $test_cmd - - if $use_conda_for_bundle - then - remove_conda_env "$active_conda_env_for_bundle" - else - remove_venv - fi - echo "Finished processing GPU bundle: $bundle" >&2 - done + python $(pwd)/ci/prepare_schema.py --l "$bundle_list" + for bundle in $bundle_list; + do + # get required libraries according to the bundle's metadata file + requirements_file="requirements_$bundle.txt" + python $(pwd)/ci/get_bundle_requirements.py --b "$bundle" --requirements_file "$requirements_file" + # check if ALLOW_MONAI_RC is set to 1, if so, append --pre to the pip install command + if [ $ALLOW_MONAI_RC = true ]; then + include_pre_release="--pre" + else + include_pre_release="" + fi + # determine if conda env should be used for the bundle + active_conda_env_for_bundle="" + required_python_version="${bundle_python_versions[$bundle]}" + use_conda_for_bundle=false + if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] + then + use_conda_for_bundle=true + fi + if $use_conda_for_bundle + then + init_conda_env "$required_python_version" "$bundle" + active_conda_env_for_bundle="conda_env_${bundle}" + conda activate "$active_conda_env_for_bundle" + else + init_venv + fi + # Check if the requirements file exists and is not empty + if [ -s "$requirements_file" ]; then + echo "install required libraries for bundle: $bundle" + pip install $include_pre_release -r "$requirements_file" + fi + # get extra install script if exists + extra_script=$(python $(pwd)/ci/get_bundle_requirements.py --b "$bundle" --get_script True) + if [ ! -z "$extra_script" ]; then + echo "install extra libraries with script: $extra_script" + bash $extra_script + fi + # verify bundle + python $(pwd)/ci/verify_bundle.py --b "$bundle" + test_cmd="python $(pwd)/ci/unit_tests/runner.py --b \"$bundle\"" + if [ "$dist_flag" = "True" ]; then + test_cmd="torchrun $(pwd)/ci/unit_tests/runner.py --b \"$bundle\" --dist True" + fi + eval $test_cmd + # cleanup + if $use_conda_for_bundle + then + remove_conda_env "$active_conda_env_for_bundle" + else + remove_venv + fi + done else - echo "No bundles found by get_changed_bundle.py for GPU processing." >&2 + echo "this pull request does not change any bundles, skip verify." fi else - echo "No changes in 'models' directory. Skipping GPU bundle verification." >&2 + echo "this pull request does not change any files in 'models', skip verify." remove_venv fi } From f767da8ad61f5a6ed578db00f5adf347234b7e47 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 12:48:59 +0000 Subject: [PATCH 18/28] adjust conda init way Signed-off-by: Yiheng Wang --- .github/workflows/premerge-cpu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/premerge-cpu.yml b/.github/workflows/premerge-cpu.yml index 0e7bda96..5d204dcb 100644 --- a/.github/workflows/premerge-cpu.yml +++ b/.github/workflows/premerge-cpu.yml @@ -37,7 +37,7 @@ jobs: shell: bash run: | conda init bash - source ~/.bashrc || echo "Sourcing ~/.bashrc failed or file not found, relying on next login shell." + eval "$(conda shell.bash hook)" - name: cache weekly timestamp id: pip-cache-ts From a07021cf63fe69bddae0bb3605d0c7c94cd5619f Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Thu, 29 May 2025 12:55:07 +0000 Subject: [PATCH 19/28] update init conda env Signed-off-by: Yiheng Wang --- ci/run_premerge_cpu.sh | 15 +++++++-------- ci/run_premerge_gpu.sh | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index 79c76b24..1e6ddad8 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -82,14 +82,13 @@ init_conda_env() { local bundle_identifier="$2" local conda_env_name="conda_env_${bundle_identifier}" - if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then - if [ -n "$CONDA_EXE" ]; then - source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" - elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then - source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" - else - echo "Warning: Could not reliably source conda.sh for Conda activation." - fi + # Always source conda.sh to ensure conda activate is available + if [ -n "$CONDA_EXE" ] && [ -f "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" ]; then + source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" + elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then + source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" + else + echo "Warning: Could not reliably source conda.sh for Conda activation." fi if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then diff --git a/ci/run_premerge_gpu.sh b/ci/run_premerge_gpu.sh index 5244400a..5fc85f7c 100755 --- a/ci/run_premerge_gpu.sh +++ b/ci/run_premerge_gpu.sh @@ -69,14 +69,13 @@ init_conda_env() { local bundle_identifier="$2" local conda_env_name="conda_env_${bundle_identifier}" - if [[ -z "$CONDA_SHLVL" || "$CONDA_SHLVL" -eq 0 ]]; then - if [ -n "$CONDA_EXE" ]; then - source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" - elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then - source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" - else - echo "Warning: Could not reliably source conda.sh for Conda activation." - fi + # Always source conda.sh to ensure conda activate is available + if [ -n "$CONDA_EXE" ] && [ -f "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" ]; then + source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" + elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then + source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" + else + echo "Warning: Could not reliably source conda.sh for Conda activation." fi if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then From e74f97155e81168cf60ffaa7f146627ba5684623 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Fri, 6 Jun 2025 21:09:53 +0000 Subject: [PATCH 20/28] Added docstrings and fixed all flake8 errors. --- .../scripts/Ensembler.py | 63 +++ .../scripts/analysis_lib.py | 529 +++++++++++++----- .../scripts/datasets/data.py | 58 +- .../scripts/datasets/volReader.py | 110 ++-- .../scripts/inference.py | 234 +++++--- setup.cfg | 4 - 6 files changed, 712 insertions(+), 286 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py index 52939515..1c225083 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py +++ b/models/retinalOCT_RPD_segmentation/scripts/Ensembler.py @@ -10,7 +10,21 @@ class NpEncoder(json.JSONEncoder): + """Custom JSON encoder for NumPy data types. + + This encoder handles NumPy-specific types that are not serializable by + the default JSON library by converting them into standard Python types. + """ + def default(self, obj): + """Converts NumPy objects to their native Python equivalents. + + Args: + obj (any): The object to encode. + + Returns: + any: The JSON-serializable representation of the object. + """ if isinstance(obj, np.integer): return int(obj) elif isinstance(obj, np.floating): @@ -22,9 +36,33 @@ def default(self, obj): class Ensembler: + """A class to ensemble predictions from multiple object detection models. + + This class loads ground truth data and predictions from several models, + performs non-maximum suppression (NMS) to merge overlapping detections, + and saves the final ensembled results in COCO format. + """ + def __init__( self, output_dir, dataset_name, grplist, iou_thresh, coco_gt_path=None, coco_instances_results_fname=None ): + """Initializes the Ensembler. + + Args: + output_dir (str): The base directory where model outputs and + ensembled results are stored. + dataset_name (str): The name of the dataset being evaluated. + grplist (list[str]): A list of subdirectory names, where each + subdirectory contains the prediction file from one model. + iou_thresh (float): The IoU threshold for considering two bounding + boxes as overlapping during NMS. + coco_gt_path (str, optional): The full path to the ground truth + COCO JSON file. If None, it's assumed to be in `output_dir`. + Defaults to None. + coco_instances_results_fname (str, optional): The filename for the + COCO prediction files within each model's subdirectory. + Defaults to "coco_instances_results.json". + """ self.output_dir = output_dir self.dataset_name = dataset_name self.grplist = grplist @@ -62,6 +100,19 @@ def __init__( ) def mean_score_nms(self): + """Performs non-maximum suppression by merging overlapping boxes. + + This method iterates through all images and categories, merging sets of + overlapping bounding boxes from different detectors based on the IoU + threshold. For each merged set, it calculates a mean score and selects + the single box with the highest original score as the representative + detection for the ensembled output. + + Returns: + Ensembler: The instance itself, with the `self.results` attribute + populated with the ensembled predictions. + """ + def nik_merge(lsts): """Niklas B. https://github.com/rikpg/IntersectionMerge/blob/master/core.py""" sets = [set(lst) for lst in lsts if lst] @@ -124,6 +175,15 @@ def nik_merge(lsts): return self def save_coco_instances(self, fname="coco_instances_results.json"): + """Saves the ensembled prediction results to a JSON file. + + The output file follows the COCO instance format and can be used for + further evaluation. + + Args: + fname (str, optional): The filename for the output JSON file. + Defaults to "coco_instances_results.json". + """ if self.results: with open(os.path.join(self.output_dir, fname), "w") as f: f.write(json.dumps(self.results, cls=NpEncoder)) @@ -131,5 +191,8 @@ def save_coco_instances(self, fname="coco_instances_results.json"): if __name__ == "__main__": + # Example usage: + # This assumes an 'output' directory with subdirectories 'fold1', 'fold2', etc., + # each containing a 'coco_instances_results.json' file. ens = Ensembler("dev", ["fold1", "fold2", "fold3", "fold4", "fold5"], 0.2) ens.mean_score_nms() diff --git a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py index 3ca1eddf..8e5e622c 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py +++ b/models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py @@ -32,10 +32,21 @@ # current_directory = os.getcwd() # print(current_directory) plt.style.use("./scripts/ybpres.mplstyle") -# plt.style.use("ybpres.mplstyle") def grab_dataset(name): + """Creates a function to load a pickled dataset by name. + + This function returns another function that, when called, loads a dataset + from a pickle file located in the "datasets/" directory. + + Args: + name (str): The base name of the dataset file (without extension). + + Returns: + function: A zero-argument function that loads and returns the dataset. + """ + def f(): return pickle.load(open("datasets/" + name + ".pk", "rb")) @@ -43,6 +54,8 @@ def f(): class OutputVis: + """A class to visualize model outputs and ground truth annotations.""" + def __init__( self, dataset_name, @@ -53,6 +66,24 @@ def __init__( has_annotations=True, draw_mode="default", ): + """Initializes the OutputVis class. + + Args: + dataset_name (str): The name of the registered Detectron2 dataset. + cfg (CfgNode, optional): The Detectron2 configuration object. + Required if `pred_mode` is "model". Defaults to None. + prob_thresh (float, optional): The probability threshold to apply + to model predictions for visualization. Defaults to 0.5. + pred_mode (str, optional): The mode for getting predictions. Must be + either "model" (to use a live predictor) or "file" (to load + from a COCO results file). Defaults to "model". + pred_file (str, optional): The path to the COCO JSON results file. + Required if `pred_mode` is "file". Defaults to None. + has_annotations (bool, optional): Whether the dataset has ground + truth annotations to visualize. Defaults to True. + draw_mode (str, optional): The drawing style for visualizations. + Can be "default" (color) or "bw" (monochrome). Defaults to "default". + """ self.dataset_name = dataset_name self.cfg = cfg self.prob_thresh = prob_thresh @@ -75,89 +106,93 @@ def __init__( self.scale = 3.0 def set_draw_mode(self, draw_mode): + """Sets the drawing mode for visualizations. + + Args: + draw_mode (str): The drawing style. Must be one of the permitted + modes (e.g., "default", "bw"). + """ if draw_mode not in self.permitted_draw_modes: sys.exit("draw_mode must be one of the following: {}".format(self.permitted_draw_modes)) self.draw_mode = draw_mode - def get_ori_image(self, ImgId): - """[summary] + def get_ori_image(self, imgid): + """Retrieves the original image for a given image ID. + + The image is scaled up by a factor of 3 for better visualization. Args: - ImgId (str): Value of image_id in image data structure. + imgid (str): The 'image_id' from the dataset dictionary. Returns: - PIL.Image: Original image fed into the model scaled up by a factor of 3 for visualization. + PIL.Image: The original image. """ - dat = self.get_gt_image_data(ImgId) # gt + dat = self.get_gt_image_data(imgid) # gt im = cv2.imread(dat["file_name"]) # input to model v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) result_image = v_gt.output.get_image() # get original image img = Image.fromarray(result_image) return img - def get_gt_image_data(self, ImgId): - """Returns image ground truth image entry for corresponding to ImgId. + def get_gt_image_data(self, imgid): + """Returns the ground truth data dictionary for a given image ID. Args: - ImgId (str): Value of image_id in image data structure. + imgid (str): The 'image_id' from the dataset dictionary. Returns: - dict: Dictionary for the image with corresponding ImgId. + dict: The dataset dictionary for the specified image. """ - gt_data = next(item for item in self.data if (item["image_id"] == ImgId)) + gt_data = next(item for item in self.data if (item["image_id"] == imgid)) return gt_data def produce_gt_image(self, dat, im): - """Returns image im overlayed with ground truth instances found in dat if there are any. - Depending on visualizer mode, the instances are separate colors or monochrome. + """Creates an image with ground truth annotations overlaid. + + The visualization can be in color or monochrome depending on the draw mode. Args: - dat (dict): Dictionary for the image im containing ground truth annotations. - im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to - the height and width of the image respectively. C is the number of color channels. - The image is required to be in RGB format since that is a requirement of the Matplotlib library. - The image is also expected to be in the range [0, 255]. + dat (dict): The dataset dictionary containing ground truth annotations. + im (np.ndarray): The input image in RGB format (H, W, C) as a NumPy array. Returns: - PIL.Image: The resulting original image overlayed with ground truth instances. + PIL.Image: The image with ground truth instances overlaid. """ v_gt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) if self.has_annotations: # ground truth boxes and masks segs = [ddict["segmentation"] for ddict in dat["annotations"]] if self.draw_mode == "bw": - BBoxes = None + _bboxes = None assigned_colors = [self.annotation_color] * len(segs) else: # default behavior bboxes = [ddict["bbox"] for ddict in dat["annotations"]] - BBoxes = detectron2.structures.Boxes(bboxes) - BBoxes = detectron2.structures.BoxMode.convert( - BBoxes.tensor, from_mode=1, to_mode=0 + _bboxes = detectron2.structures.Boxes(bboxes) + _bboxes = detectron2.structures.BoxMode.convert( + _bboxes.tensor, from_mode=1, to_mode=0 ) # 0= XYXY, 1 = XYWH assigned_colors = None result_image = v_gt.overlay_instances( - boxes=BBoxes, masks=segs, assigned_colors=assigned_colors, alpha=1.0 + boxes=_bboxes, masks=segs, assigned_colors=assigned_colors, alpha=1.0 ).get_image() else: result_image = v_gt.output.get_image() # get original image if no annotations img = Image.fromarray(result_image) return img - def produce_model_image(self, ImgId, dat, im): - """Returns image im overlayed with instances predicted by the model. - Depending on visualizer mode the model predicts on the image im or reads the predictions from file based on - the given ImgId. + def produce_model_image(self, imgid, dat, im): + """Creates an image with model-predicted instances overlaid. + + Predictions are either generated by the model or loaded from a file, + based on the configured `pred_mode`. Args: - ImgId (str): Value of image_id in image data structure. - dat (dict): Dictionary for the image im. Used for height and width parameters. - im (numpy array): a numpy array of shape (H, W, C), where H and W correspond to - the height and width of the image respectively. C is the number of color channels. - The image is required to be in RGB format since that is a requirement of the Matplotlib library. - The image is also expected to be in the range [0, 255]. + imgid (str): The 'image_id' from the dataset dictionary. + dat (dict): The dataset dictionary for the image (used for height/width). + im (np.ndarray): The input image in RGB format (H, W, C) as a NumPy array. Returns: - PIL.Image: The resulting original image overlayed with model-predicted instances. + PIL.Image: The image with model-predicted instances overlaid. """ v_dt = Visualizer(im, MetadataCatalog.get(self.dataset_name), scale=self.scale) v_dt._default_font_size = self.font_size @@ -166,7 +201,7 @@ def produce_model_image(self, ImgId, dat, im): if self._mode == "model": outputs = self.predictor(im)["instances"].to("cpu") elif self._mode == "file": - outputs = self.get_outputs_from_file(ImgId, (dat["height"], dat["width"])) + outputs = self.get_outputs_from_file(imgid, (dat["height"], dat["width"])) outputs = outputs[outputs.scores > self.prob_thresh] # apply probability threshold to instances if self.draw_mode == "bw": result_model = v_dt.overlay_instances( @@ -177,32 +212,35 @@ def produce_model_image(self, ImgId, dat, im): img_model = Image.fromarray(result_model) return img_model - def get_image(self, ImgId): - """Returns the ground truth and model prediction overlays for the image corresponding to ImgId. + def get_image(self, imgid): + """Generates both ground truth and model prediction overlay images. Args: - ImgId (str): Value of image_id in image data structure. + imgid (str): The 'image_id' from the dataset dictionary. Returns: - (PIL.Image,PIL.Image): Tuple of PIL.images corresponding to ground truth and model prediction respectively. + tuple[PIL.Image, PIL.Image]: A tuple containing the ground truth + image and the model prediction image. """ - dat = self.get_gt_image_data(ImgId) # gt + dat = self.get_gt_image_data(imgid) # gt im = cv2.imread(dat["file_name"]) # input to model img = self.produce_gt_image(dat, im) - img_model = self.produce_model_image(ImgId, dat, im) + img_model = self.produce_model_image(imgid, dat, im) return img, img_model - def get_outputs_from_file(self, ImgId, imgsize): - """For image with image_id ImgId, reads in and converts instances from coco format in self.pred_file to a - detectron2 Instances structure required for the visulizer utility. + def get_outputs_from_file(self, imgid, imgsize): + """Loads and formats model predictions from a COCO results file. + + Converts COCO-formatted instances into a Detectron2 `Instances` object + suitable for the visualizer. Args: - ImgId (str): Value of image_id in image data structure. - imgsize (tuple): Height and width of the image in pixels. + imgid (str): The 'image_id' of the desired image. + imgsize (tuple[int, int]): The (height, width) of the image. Returns: - detectron2.structures.Instances: The correctly formated data structure to be used to the detectron2 - visualizer utility. + detectron2.structures.Instances: An `Instances` object containing + the predictions. """ pred_boxes = [] @@ -210,14 +248,14 @@ def get_outputs_from_file(self, ImgId, imgsize): pred_classes = [] pred_masks = [] for i, img in enumerate(self.instance_img_list): - if img == ImgId: + if img == imgid: pred_boxes.append(self.pred_instances[i]["bbox"]) scores.append(self.pred_instances[i]["score"]) pred_classes.append(int(self.pred_instances[i]["category_id"])) # pred_masks_rle.append(self.pred_instances[i]['segmentation']) pred_masks.append(decode(self.pred_instances[i]["segmentation"])) - BBoxes = detectron2.structures.Boxes(pred_boxes) - pred_boxes = detectron2.structures.BoxMode.convert(BBoxes.tensor, from_mode=1, to_mode=0) # 0= XYXY, 1 = XYWH + _bboxes = detectron2.structures.Boxes(pred_boxes) + pred_boxes = detectron2.structures.BoxMode.convert(_bboxes.tensor, from_mode=1, to_mode=0) # 0= XYXY, 1 = XYWH inst_dict = dict( pred_boxes=pred_boxes, scores=torch.tensor(np.array(scores)), @@ -229,15 +267,15 @@ def get_outputs_from_file(self, ImgId, imgsize): @staticmethod def height_crop_range(im, height_target=256): - """Find the range of pixels in the height dimension spanning the height height_target which contain the - brightest regions of the image. + """Calculates a vertical crop range centered on the brightest part of an image. Args: - im (numpy array): a numpy array of shape (H, W, C) - height_target (int, optional): The desired span of the image height. Defaults to 256. + im (np.ndarray): The input image as a NumPy array (H, W, C). + height_target (int, optional): The desired height of the crop. + Defaults to 256. Returns: - range: The starting and stopping pixels for cropping the image height. + range: A range object representing the start and end pixel rows for the crop. """ yhist = im.sum(axis=1) # integrate over width of image mu = np.average(np.arange(yhist.shape[0]), weights=yhist) @@ -251,14 +289,16 @@ def height_crop_range(im, height_target=256): h1 = h2 - height_target return range(h1, h2) - def output_to_pdf(self, ImgIds, outname, dfimg=None): - """Create pdf with name outname displaying ground truth and model prediction overlays for - image ids listed in ImgIds. + def output_to_pdf(self, imgids, outname, dfimg=None): + """Exports visualizations of ground truth and model predictions to a PDF file. + + Each page of the PDF contains the ground truth and model prediction for one image. Args: - ImgIds (list(str)): List of image_id values to output. - outname (str): path name for pdf - dfimg (pandas.DataFrame, optional): A dataframe of stats to display for each image. Defaults to None. + imgids (list[str]): A list of 'image_id' values to include in the PDF. + outname (str): The path and filename for the output PDF. + dfimg (pd.DataFrame, optional): A DataFrame with image statistics + to display on each page. Index should be `imgid`. Defaults to None. """ gtstr = "" @@ -269,7 +309,7 @@ def output_to_pdf(self, ImgIds, outname, dfimg=None): dtcols = dfimg.columns[["dt_" in col for col in dfimg.columns]] with PdfPages(outname) as pdf: - for imgid in tqdm(ImgIds): + for imgid in tqdm(imgids): img, img_model = self.get_image(imgid) # pdb.set_trace() crop_range = self.height_crop_range(np.array(img.convert("L")), height_target=256 * self.scale) @@ -292,49 +332,55 @@ def output_to_pdf(self, ImgIds, outname, dfimg=None): plt.close(fig) def save_imgarr_to_tiff(self, imgs, outname): - """Save array of images in stacked tiff format (one image per page). + """Saves a list of PIL images to a multi-page TIFF file. Args: - imgs (array(PIL.Images)): An array of PIL.Images to save. - outname (str): Path name to save to. + imgs (list[PIL.Image]): A list of images to save. + outname (str): The path and filename for the output TIFF. """ if len(imgs) > 1: imgs[0].save(outname, dpi=(400, 400), tags="", compression=None, save_all=True, append_images=imgs[1:]) else: imgs[0].save(outname) - def output_ori_to_tiff(self, ImgIds, outname): - """Save list of original images corresponding to ImgIds in stacked tiff format. + def output_ori_to_tiff(self, imgids, outname): + """Saves the original images for a list of IDs to a multi-page TIFF. Args: - ImgIds (list(str)): A list of image_ids for images to save. - outname (str): Path name to save to. + imgids (list[str]): A list of 'image_id' values. + outname (str): The path and filename for the output TIFF. """ imgs = [] - for imgid in tqdm(ImgIds): + for imgid in tqdm(imgids): img_ori = self.get_ori_image(imgid) # PIL Image imgs.append(img_ori) self.save_imgarr_to_tiff(imgs, outname) - def output_pred_to_tiff(self, ImgIds, outname, pred_only=False): - """Save list of images overlayed with the model predictions in stacked tiff format. + def output_pred_to_tiff(self, imgids, outname, pred_only=False): + """Saves model prediction overlays for a list of IDs to a multi-page TIFF. Args: - ImgIds (list(str)): A list of image_ids for images to save. - outname (str): Path name to save to. + imgids (list[str]): A list of 'image_id' values. + outname (str): The path and filename for the output TIFF. + pred_only (bool, optional): If True, overlays predictions on a + black background instead of the original image. Defaults to False. """ - imgs = self.output_pred_to_list(ImgIds, pred_only) + imgs = self.output_pred_to_list(imgids, pred_only) self.save_imgarr_to_tiff(imgs, outname) - def output_pred_to_list(self, ImgIds, pred_only=False): - """Return list of images overlayed with the model predictions. + def output_pred_to_list(self, imgids, pred_only=False): + """Generates a list of images with model predictions overlaid. Args: - ImgIds (list(str)): A list of image_ids for images to save. - outname (str): Path name to save to. + imgids (list[str]): A list of 'image_id' values. + pred_only (bool, optional): If True, overlays predictions on a + black background. Defaults to False. + + Returns: + list[PIL.Image]: A list of the generated visualization images. """ imgs = [] - for imgid in tqdm(ImgIds): + for imgid in tqdm(imgids): dat = self.get_gt_image_data(imgid) # gt if pred_only: im = np.zeros((dat["height"], dat["width"], 3)) # blank image for overlay @@ -347,15 +393,19 @@ def output_pred_to_list(self, ImgIds, pred_only=False): imgs.append(img_dt) return imgs - def output_all_to_tiff(self, ImgIds, outname): - """Save list of images (original, ground truth overlay, and model prediction overlay) to stacked tiff format. + def output_all_to_tiff(self, imgids, outname): + """Saves a combined visualization (original, GT, prediction) to a TIFF. + + For each image ID, it creates a single composite image by concatenating + the original, ground truth overlay, and model prediction overlay, then + saves them to a multi-page TIFF. Args: - ImgIds (list(str)): A list of image_ids for images to save. - outname (str): Path name to save to. + imgids (list[str]): A list of 'image_id' values. + outname (str): The path and filename for the output TIFF. """ imgs = [] - for imgid in tqdm(ImgIds): + for imgid in tqdm(imgids): img_gt, img_dt = self.get_image(imgid) img_ori = self.get_ori_image(imgid) hcrange = list(self.height_crop_range(np.array(img_ori.convert("L")), height_target=256 * self.scale)) @@ -372,17 +422,16 @@ def output_all_to_tiff(self, ImgIds, outname): self.save_imgarr_to_tiff(imgs, outname) def get_enface_dt(self, grp, scan_height, scan_width, scan_spacing): - """Return enface perspective of model predictions for a single scan volume whose imgids are - listed in the index of grp. + """Generates an en-face view of model predictions for a scan volume. Args: - grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. - scan_height (int): Image height in pixels. - scan_width (int): Image width in pixels. + grp (pd.DataFrame): DataFrame for a single scan volume, indexed by imgid. + scan_height (int): The height of a single scan image in pixels. + scan_width (int): The width of a single scan image in pixels. scan_spacing (float): The spacing between scan centers in pixels. Returns: - np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. + np.ndarray: An en-face image of the model predictions. """ grp = grp.sort_index() nscans = len(grp) @@ -405,17 +454,16 @@ def get_enface_dt(self, grp, scan_height, scan_width, scan_spacing): return enface def get_enface_gt(self, grp, scan_height, scan_width, scan_spacing): - """Return enface perspective of ground truth annotations for a single scan volume whose imgids are - listed in the index of grp. + """Generates an en-face view of ground truth annotations for a scan volume. Args: - grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. - scan_height (int): Image height in pixels. - scan_width (int): Image width in pixels. + grp (pd.DataFrame): DataFrame for a single scan volume, indexed by imgid. + scan_height (int): The height of a single scan image in pixels. + scan_width (int): The width of a single scan image in pixels. scan_spacing (float): The spacing between scan centers in pixels. Returns: - np.array: Numpy array of dimension [scan_spacing*number of scans,scan_width,3]. + np.ndarray: An en-face image of the ground truth annotations. """ grp = grp.sort_index() nscans = len(grp) @@ -442,17 +490,17 @@ def get_enface_gt(self, grp, scan_height, scan_width, scan_spacing): return enface def compare_enface(self, grp, name, scan_height, scan_width, scan_spacing): - """Return figure comparing detector enface perspective of model prediction with ground truth. + """Creates a figure comparing the en-face views of predictions and ground truth. Args: - grp (pandas.DataFrame): Dataframe containing images from a single scan volume indexed by ImageId. - name (str): The name of the group identified by scan volume ID. - scan_height (int): Image height in pixels. - scan_width (int): Image width in pixels. + grp (pd.DataFrame): DataFrame for a single scan volume, indexed by imgid. + name (str): The name/ID of the scan volume for the plot title. + scan_height (int): The height of a single scan image in pixels. + scan_width (int): The width of a single scan image in pixels. scan_spacing (float): The spacing between scan centers in pixels. Returns: - (matplotlib.figure.Figure, array(AxesSubplot)): Tuple of figure handle and array of subplot axes. + tuple[plt.Figure, np.ndarray]: A tuple containing the figure and axes objects. """ fig, ax = plt.subplots(1, 2, figsize=[18, 9], dpi=120) @@ -468,7 +516,17 @@ def compare_enface(self, grp, name, scan_height, scan_width, scan_spacing): return fig, ax -def Wilson_CI(p, n, z): +def wilson_ci(p, n, z): + """Calculates the Wilson score interval for a binomial proportion. + + Args: + p (float): The observed proportion of successes. + n (int): The total number of trials. + z (float): The z-score for the desired confidence level (e.g., 1.96 for 95%). + + Returns: + tuple[float, float]: A tuple containing the lower and upper bounds of the confidence interval. + """ if p < 0 or p > 1 or n == 0: if p < 0 or p > 1: warnings.warn(f"The value of proportion {p} must be in the range [0,1]. Returning identity for CIs.") @@ -484,7 +542,21 @@ def Wilson_CI(p, n, z): class EvaluateClass(COCOEvaluator): + """A custom evaluation class extending COCOEvaluator for detailed analysis.""" + def __init__(self, dataset_name, output_dir, prob_thresh=0.5, iou_thresh=0.1, evalsuper=True): + """Initializes the custom evaluator. + + Args: + dataset_name (str): The name of the registered Detectron2 dataset. + output_dir (str): Directory to store temporary evaluation files. + prob_thresh (float, optional): Probability threshold for calculating + precision, recall, and FPR. Defaults to 0.5. + iou_thresh (float, optional): IoU threshold for defining a true positive. + Defaults to 0.1. + evalsuper (bool, optional): If True, run the parent COCOEvaluator's + evaluate method to generate standard COCO metrics. Defaults to True. + """ super().__init__(dataset_name, tasks={"bbox", "segm"}, output_dir=output_dir) self.dataset_name = dataset_name self.mycoco = None # pycocotools.cocoEval instance @@ -498,14 +570,31 @@ def __init__(self, dataset_name, output_dir, prob_thresh=0.5, iou_thresh=0.1, ev self.fpr = None def reset(self): + """Resets the evaluator's state for a new evaluation run.""" super().reset() self.mycoco = None def process(self, inputs, outputs): + """Processes a batch of inputs and outputs from the model. + + This method is called by the evaluation loop for each batch. + + Args: + inputs (list[dict]): A list of dataset dictionaries. + outputs (list[dict]): A list of model output dictionaries. + """ super().process(inputs, outputs) def evaluate(self): - # with nostdout(): #suppress the coco summarize statment (the one with APs) + """Runs the evaluation and calculates detailed performance metrics. + + This method orchestrates the COCO evaluation, calculates precision-recall + curves, and other custom metrics. + + Returns: + tuple[float, float]: The precision and recall at the specified + `prob_thresh` and `iou_thresh`. + """ if self.evalsuper: _ = super().evaluate() # this call populates coco_instances_results.json comm.synchronize() @@ -521,9 +610,7 @@ def evaluate(self): self.num_images = len(self.mycoco.params.imgIds) print("Calculated metrics for {} images".format(self.num_images)) self.mycoco.params.iouThrs = np.arange(0.10, 0.6, 0.1) - # mycoco.params.recThrs = [0,.5,.75,1] self.mycoco.params.maxDets = [100] - # mycoco.params.imgIds=[imgId] self.mycoco.params.areaRng = [[0, 10000000000.0]] self.mycoco.evaluate() @@ -538,7 +625,13 @@ def evaluate(self): p, r = self.get_precision_recall() return p, r - def plot_PRcurve(self, ax=None): + def plot_pr_curve(self, ax=None): + """Plots precision-recall curves for various IoU thresholds. + + Args: + ax (plt.Axes, optional): A matplotlib axes object to plot on. If None, + a new figure and axes are created. + """ if ax is None: fig, ax = plt.subplots(1, 1) for i in range(len(self.iou)): @@ -549,6 +642,7 @@ def plot_PRcurve(self, ax=None): ax.legend(title="IoU") def plot_recall_vs_prob(self): + """Plots model score thresholds versus recall for various IoU thresholds.""" plt.figure() for i in range(len(self.iou)): plt.plot(self.rc, self.scores[i], label="{:.2}".format(self.iou[i])) @@ -557,12 +651,19 @@ def plot_recall_vs_prob(self): plt.legend(title="IoU") def get_precision_recall(self): + """Gets the precision and recall for the configured IoU and probability thresholds. + + Returns: + tuple[float, float]: The calculated precision and recall. + """ iou_idx, rc_idx = self._find_iou_rc_inds() precision = self.pr[iou_idx, rc_idx] recall = self.rc[rc_idx] return precision, recall def _calculate_fpr_matrix(self): + """(Private) Calculates the false positive rate matrix across all IoU and recall thresholds.""" + # FP rate, 1 RPD in image = FP if (self.scores.min() == -1) and (self.scores.max() == -1): print( @@ -592,6 +693,14 @@ def _calculate_fpr_matrix(self): self.fpr = fpr def _calculate_fpr(self): + """(Private) Calculates FPR for a single probability threshold. + + This is an alternate calculation used when the main FPR matrix cannot + be computed (e.g., no positive ground truth instances). + + Returns: + float: The calculated false positive rate. + """ print("Using alternate calculation for fpr at instance score threshold of {}".format(self.prob_thresh)) ng = 0 # number of negative images fp = 0 # number of false positives images @@ -609,6 +718,11 @@ def _calculate_fpr(self): return fp / (ng + 1e-5) def _find_iou_rc_inds(self): + """(Private) Finds the indices corresponding to the configured IoU and probability thresholds. + + Returns: + tuple[int, int]: The index for the IoU threshold and the index for the recall level. + """ try: iou_idx = np.argwhere(self.iou == self.iou_thresh)[0][0] # first instance of except IndexError: @@ -627,6 +741,11 @@ def _find_iou_rc_inds(self): return iou_idx, rc_idx def get_fpr(self): + """Gets the false positive rate for the configured thresholds. + + Returns: + float: The calculated false positive rate. Returns -1 if it cannot be computed. + """ if self.fpr is None: self._calculate_fpr_matrix() @@ -640,6 +759,12 @@ def get_fpr(self): return fpr def summarize_scalars(self): # for pretty printing + """Generates a dictionary summarizing key performance metrics with confidence intervals. + + Returns: + dict: A dictionary containing precision, recall, F1-score, FPR, + and their confidence intervals. + """ p, r = self.get_precision_recall() f1 = 2 * (p * r) / (p + r) fpr = self.get_fpr() @@ -652,16 +777,16 @@ def summarize_scalars(self): # for pretty printing n_p = inst_cnt["dt_instances"] n_fpr = inst_cnt["gt_neg_scans"] - def stat_CI(p, n, z): + def stat_ci(p, n, z): return z * np.sqrt(p * (1 - p) / n) - r_ci = Wilson_CI(r, n_r, z) - p_ci = Wilson_CI(p, n_p, z) - fpr_ci = Wilson_CI(fpr, n_fpr, z) + r_ci = wilson_ci(r, n_r, z) + p_ci = wilson_ci(p, n_p, z) + fpr_ci = wilson_ci(fpr, n_fpr, z) # propogate errors for f1 - int_r = stat_CI(r, n_r, z) - int_p = stat_CI(p, n_p, z) + int_r = stat_ci(r, n_r, z) + int_p = stat_ci(p, n_p, z) int_f1 = (f1) * np.sqrt(int_r**2 * (1 / r - 1 / (p + r)) ** 2 + int_p**2 * (1 / p - 1 / (p + r)) ** 2) f1_ci = (f1 - int_f1, f1 + int_f1) @@ -681,29 +806,44 @@ def stat_CI(p, n, z): return dd def count_instances(self): + """Counts ground truth and detected instances across the dataset. + + Returns: + dict: A dictionary with counts for 'gt_instances', 'dt_instances', + and 'gt_neg_scans' (images with no GT instances). + """ gt_inst = 0 dt_inst = 0 gt_neg_scans = 0 for _, val in self.cocoGt.imgs.items(): imgid = val["id"] # Gt instances - annIdsGt = self.cocoGt.getAnnIds([imgid]) - annsGt = self.cocoGt.loadAnns(annIdsGt) - gt_inst += len(annsGt) - if len(annsGt) == 0: + annids_gt = self.cocoGt.getAnnIds([imgid]) + anns_gt = self.cocoGt.loadAnns(annids_gt) + gt_inst += len(anns_gt) + if len(anns_gt) == 0: gt_neg_scans += 1 # Dt instances - annIdsDt = self.cocoDt.getAnnIds([imgid]) - annsDt = self.cocoDt.loadAnns(annIdsDt) - annsDt = [ann for ann in annsDt if ann["score"] > self.prob_thresh] - dt_inst += len(annsDt) + annids_dt = self.cocoDt.getAnnIds([imgid]) + anns_dt = self.cocoDt.loadAnns(annids_dt) + anns_dt = [ann for ann in anns_dt if ann["score"] > self.prob_thresh] + dt_inst += len(anns_dt) return dict(gt_instances=gt_inst, dt_instances=dt_inst, gt_neg_scans=gt_neg_scans) class CreatePlotsRPD: + """A class to create various plots for analyzing RPD (Reticular Pseudodrusen) data.""" + def __init__(self, dfimg): + """Initializes the plotting class with image-level data. + + Args: + dfimg (pd.DataFrame): A DataFrame where each row corresponds to an + image, containing counts for ground truth and detected instances + and pixels. Must include a 'volID' column. + """ self.dfimg = dfimg self.dfvol = self.dfimg.groupby(["volID"])[ ["gt_instances", "gt_pxs", "gt_xpxs", "dt_instances", "dt_pxs", "dt_xpxs"] @@ -711,6 +851,15 @@ def __init__(self, dfimg): @classmethod def initfromcoco(cls, mycoco, prob_thresh): + """Initializes the class from a COCOeval object. + + Args: + mycoco (COCOeval): An evaluated COCOeval object. + prob_thresh (float): The probability threshold to apply to detections. + + Returns: + CreatePlotsRPD: An instance of the class. + """ df = pd.DataFrame( index=mycoco.cocoGt.imgs.keys(), columns=["gt_instances", "gt_pxs", "gt_xpxs", "dt_instances", "dt_pxs", "dt_xpxs"], @@ -720,24 +869,24 @@ def initfromcoco(cls, mycoco, prob_thresh): for key, val in mycoco.cocoGt.imgs.items(): imgid = val["id"] # Gt instances - annIdsGt = mycoco.cocoGt.getAnnIds([imgid]) - annsGt = mycoco.cocoGt.loadAnns(annIdsGt) - instGt = [mycoco.cocoGt.annToMask(ann).sum() for ann in annsGt] - xprojGt = [(mycoco.cocoGt.annToMask(ann).sum(axis=0) > 0).astype("uint8").sum() for ann in annsGt] + annids_gt = mycoco.cocoGt.getAnnIds([imgid]) + anns_gt = mycoco.cocoGt.loadAnns(annids_gt) + inst_gt = [mycoco.cocoGt.annToMask(ann).sum() for ann in anns_gt] + xproj_gt = [(mycoco.cocoGt.annToMask(ann).sum(axis=0) > 0).astype("uint8").sum() for ann in anns_gt] # Dt instances - annIdsDt = mycoco.cocoDt.getAnnIds([imgid]) - annsDt = mycoco.cocoDt.loadAnns(annIdsDt) - annsDt = [ann for ann in annsDt if ann["score"] > prob_thresh] - instDt = [mycoco.cocoDt.annToMask(ann).sum() for ann in annsDt] - xprojDt = [(mycoco.cocoDt.annToMask(ann).sum(axis=0) > 0).astype("uint8").sum() for ann in annsDt] + annids_dt = mycoco.cocoDt.getAnnIds([imgid]) + anns_dt = mycoco.cocoDt.loadAnns(annids_dt) + anns_dt = [ann for ann in anns_dt if ann["score"] > prob_thresh] + inst_dt = [mycoco.cocoDt.annToMask(ann).sum() for ann in anns_dt] + xproj_dt = [(mycoco.cocoDt.annToMask(ann).sum(axis=0) > 0).astype("uint8").sum() for ann in anns_dt] dat = [ - len(instGt), - np.array(instGt).sum(), - np.array(xprojGt).sum(), - len(instDt), - np.array(instDt).sum(), - np.array(xprojDt).sum(), + len(inst_gt), + np.array(inst_gt).sum(), + np.array(xproj_gt).sum(), + len(inst_dt), + np.array(inst_dt).sum(), + np.array(xproj_dt).sum(), ] df.loc[key] = dat @@ -749,10 +898,26 @@ def initfromcoco(cls, mycoco, prob_thresh): @classmethod def initfromcsv(cls, fname): + """Initializes the class from a CSV file. + + Args: + fname (str): The path to the CSV file. + + Returns: + CreatePlotsRPD: An instance of the class. + """ df = pd.read_csv(fname) return cls(df) def get_max_limits(self, df): + """Calculates the maximum values for plotting limits. + + Args: + df (pd.DataFrame): The DataFrame to analyze. + + Returns: + tuple[int, int, int]: Max values for instances, x-pixels, and total pixels. + """ max_inst = np.max([df.gt_instances.max(), df.dt_instances.max()]) max_xpxs = np.max([df.gt_xpxs.max(), df.dt_xpxs.max()]) max_pxs = np.max([df.gt_pxs.max(), df.dt_pxs.max()]) @@ -762,6 +927,17 @@ def get_max_limits(self, df): return max_inst, max_xpxs, max_pxs def vol_level_prc(self, df, gt_thresh=5, ax=None): + """Plots a volume-level precision-recall curve. + + Args: + df (pd.DataFrame): DataFrame with volume-level statistics. + gt_thresh (int, optional): The minimum number of ground truth + instances for a volume to be considered positive. Defaults to 5. + ax (plt.Axes, optional): Axes to plot on. Defaults to None. + + Returns: + tuple[float, tuple]: The average precision and the PR curve data. + """ prc = precision_recall_curve(df.gt_instances >= gt_thresh, df.dt_instances) if ax is None: fig, ax = plt.subplots(1, 1) @@ -773,6 +949,16 @@ def vol_level_prc(self, df, gt_thresh=5, ax=None): return ap, prc def plot_img_level_instance_thresholding(self, df, inst): + """Plots P/R/FPR as a function of the instance count threshold. + + Args: + df (pd.DataFrame): DataFrame with image-level statistics. + inst (list[int]): A list of instance count thresholds to evaluate. + + Returns: + tuple[np.ndarray, np.ndarray, np.ndarray]: Arrays for precision, + recall, and FPR at each threshold. + """ rc = np.zeros((len(inst),)) pr = np.zeros((len(inst),)) fpr = np.zeros((len(inst),)) @@ -804,15 +990,17 @@ def plot_img_level_instance_thresholding(self, df, inst): return pr, rc, fpr def plot_img_level_instance_thresholding2(self, df, inst, gt_thresh, plot=True): - # should be using global function - # def Wilson_CI(p,n,z): + """Plots P/R/FPR vs. instance threshold with confidence intervals. - # sym = z*(p*(1-p)/n + z*z/4/n/n)**.5 - # asym = p + z*z/2/n - # fact = 1/(1+z*z/n) - # upper = fact*(asym+sym) - # lower = fact*(asym-sym) - # return (lower,upper) + Args: + df (pd.DataFrame): DataFrame with image-level statistics. + inst (list[int]): A list of instance count thresholds to evaluate. + gt_thresh (int): The ground truth instance threshold. + plot (bool, optional): Whether to generate a plot. Defaults to True. + + Returns: + dict: A dictionary containing arrays for P/R/FPR and their CIs. + """ rc = np.zeros((len(inst),)) pr = np.zeros((len(inst),)) @@ -827,9 +1015,9 @@ def plot_img_level_instance_thresholding2(self, df, inst, gt_thresh, plot=True): rc[i] = (gt & dt).sum() / gt.sum() pr[i] = (gt & dt).sum() / dt.sum() fpr[i] = ((~gt) & (dt)).sum() / ((~gt).sum()) - rc_ci[i, :] = Wilson_CI(rc[i], gt.sum(), 1.96) - pr_ci[i, :] = Wilson_CI(pr[i], dt.sum(), 1.96) - fpr_ci[i, :] = Wilson_CI(fpr[i], ((~gt).sum()), 1.96) + rc_ci[i, :] = wilson_ci(rc[i], gt.sum(), 1.96) + pr_ci[i, :] = wilson_ci(pr[i], dt.sum(), 1.96) + fpr_ci[i, :] = wilson_ci(fpr[i], ((~gt).sum()), 1.96) if plot: fig, ax = plt.subplots(1, 3, figsize=[15, 5]) @@ -859,6 +1047,14 @@ def plot_img_level_instance_thresholding2(self, df, inst, gt_thresh, plot=True): return dict(precision=pr, precision_ci=pr_ci, recall=rc, recall_ci=rc_ci, fpr=fpr, fpr_ci=fpr_ci) def gt_vs_dt_instances(self, ax=None): + """Plots mean detected instances vs. ground truth instances with error bars. + + Args: + ax (plt.Axes, optional): Axes to plot on. Defaults to None. + + Returns: + plt.Axes: The axes object with the plot. + """ df = self.dfimg max_inst, max_xpxs, max_pxs = self.get_max_limits(df) idx = (df.gt_instances > 0) & (df.dt_instances > 0) @@ -880,6 +1076,14 @@ def gt_vs_dt_instances(self, ax=None): return ax def gt_vs_dt_instances_boxplot(self, ax=None): + """Creates a boxplot of detected instances for each ground truth instance count. + + Args: + ax (plt.Axes, optional): Axes to plot on. Defaults to None. + + Returns: + plt.Axes: The axes object with the plot. + """ df = self.dfimg max_inst, max_xpxs, max_pxs = self.get_max_limits(df) max_inst = int(max_inst) @@ -908,6 +1112,11 @@ def gt_vs_dt_instances_boxplot(self, ax=None): return ax def gt_vs_dt_xpxs(self): + """Creates scatter plots comparing ground truth and detected x-pixels. + + Returns: + tuple[plt.Figure, plt.Figure, plt.Figure]: Figure handles for the three generated plots. + """ df = self.dfimg max_inst, max_xpxs, max_pxs = self.get_max_limits(df) idx = (df.gt_instances > 0) & (df.dt_instances > 0) @@ -946,6 +1155,11 @@ def gt_vs_dt_xpxs(self): return fig1, fig2, fig3 def gt_vs_dt_xpxs_mu(self): + """Plots binned means of detected vs. ground truth x-pixels. + + Returns: + plt.Figure: The figure handle for the plot. + """ df = self.dfimg max_inst, max_xpxs, max_pxs = self.get_max_limits(df) idx = (df.gt_instances > 0) & (df.dt_instances > 0) @@ -968,7 +1182,12 @@ def gt_vs_dt_xpxs_mu(self): plt.tight_layout() return fig - def gt_dt_FP_FN_count(self): + def gt_dt_fp_fn_count(self): + """Plots histograms of false positive and false negative instance counts. + + Returns: + plt.Figure: The figure handle for the plot. + """ df = self.dfimg fig, ax = plt.subplots(1, 2, figsize=[10, 5]) @@ -988,6 +1207,14 @@ def gt_dt_FP_FN_count(self): return fig def avg_inst_size(self): + """Plots histograms of the average instance size in pixels. + + Compares the average size (in both total pixels and x-axis projection) + between ground truth and detected instances. + + Returns: + plt.Figure: The figure handle for the plot. + """ df = self.dfimg max_inst, max_xpxs, max_pxs = self.get_max_limits(df) idx = (df.gt_instances > 0) & (df.dt_instances > 0) diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py index b17081cb..77ff2552 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/data.py @@ -10,7 +10,7 @@ from pydicom.fileset import FileSet from tqdm import tqdm -from .volReader import volFile +from .volReader import VolFile script_dir = os.path.dirname(__file__) @@ -22,6 +22,21 @@ class Error(Exception): def extract_files(dirtoextract, extracted_path, input_format): + """Extracts individual image frames from .vol or DICOM files. + + This function scans a directory for source files of a specified format + and extracts them into a structured output directory as PNG images. + It handles both .vol files and standard DICOM files. If the + output directory already contains files, it will prompt the user + before proceeding to overwrite them. + + Args: + dirtoextract (str): The root directory to search for source files. + extracted_path (str): The destination directory where the extracted + PNG images will be saved. + input_format (str): The format of the input files. Must be either + "vol" or "dicom". + """ assert input_format in ["vol", "dicom"], 'Error: input_format must be "vol" or "dicom".' proceed = True if (os.path.isdir(extracted_path)) and (len(os.listdir(extracted_path)) != 0): @@ -35,13 +50,13 @@ def extract_files(dirtoextract, extracted_path, input_format): files_to_extract = glob.glob(os.path.join(dirtoextract, "**/*.vol"), recursive=True) for _, line in enumerate(tqdm(files_to_extract)): fpath = line.strip("\n") - vol = volFile(fpath) + vol = VolFile(fpath) fpath = fpath.replace("\\", "/") path, scan_str = fpath.strip(".vol").rsplit("/", 1) extractpath = os.path.join(extracted_path, scan_str.replace("_", "/")) os.makedirs(extractpath, exist_ok=True) preffix = os.path.join(extractpath, scan_str + "_oct") - vol.renderOCTscans(preffix) + vol.render_oct_scans(preffix) elif input_format == "dicom": keywords = ["SOPInstanceUID", "PatientID", "ImageLaterality", "SeriesDate"] list_of_dicts = [] @@ -49,8 +64,8 @@ def extract_files(dirtoextract, extracted_path, input_format): for dsstr in dirgen: fs = FileSet(dcmread(dsstr)) - fsgenOPT = genOPTfs(fs) - for fi in tqdm(fsgenOPT): + fsgenopt = gen_opt_fs(fs) + for fi in tqdm(fsgenopt): dd = dict() # top level keywords for key in keywords: @@ -71,9 +86,21 @@ def extract_files(dirtoextract, extracted_path, input_format): def rpd_data(extracted_path): + """Generates a dataset list from a directory of extracted image files. + + Scans a directory recursively for PNG images and creates a list of + dictionaries, one for each image. This format is designed to be compatible + with Detectron2's `DatasetCatalog` and can be adapted to hold ground truth instances for evaluation. + + Args: + extracted_path (str): The root directory containing the extracted + .png image files to be included in the dataset. + + Returns: + list[dict]: A list where each dictionary represents an image and + contains its file path, dimensions, and a unique ID. + """ dataset = [] - instances = 0 - wrong_poly = 0 extracted_files = glob.glob(os.path.join(extracted_path, "**/*.[Pp][Nn][Gg]"), recursive=True) print("Generating dataset of images...") for fn in tqdm(extracted_files): @@ -83,12 +110,23 @@ def rpd_data(extracted_path): dat = dict(file_name=fn_adjusted, height=im.shape[0], width=im.shape[1], image_id=imageid) dataset.append(dat) print(f"Found {len(dataset)} images") - print(f"Found {instances} instances") - print(f"Found {wrong_poly} too few vertices") return dataset -def genOPTfs(fs): +def gen_opt_fs(fs): + """A generator for finding and loading OPT modality DICOM datasets. + + This function filters a pydicom `FileSet` object for instances that have + the modality set to "OPT" (Ophthalmic Tomography) and yields each one + as a fully loaded pydicom dataset. + + Args: + fs (pydicom.fileset.FileSet): The pydicom FileSet to search through. + + Yields: + pydicom.dataset.FileDataset: A loaded DICOM dataset for each instance + with the "OPT" modality found in the FileSet. + """ for instance in fs.find(Modality="OPT"): ds = instance.load() yield ds diff --git a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py index 2bfa6273..d8b8bc5d 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py +++ b/models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py @@ -16,7 +16,7 @@ import numpy as np -class volFile: +class VolFile: def __init__(self, filename): """ Parses Heyex Spectralis *.vol files. @@ -28,7 +28,7 @@ def __init__(self, filename): volFile class """ - self.__parseVolFile(filename) + self.__parse_volfile(filename) @property def oct(self): @@ -66,15 +66,15 @@ def grid(self): wf = self.wholefile grid = [] for bi in range(len(wf["slice-headers"])): - bscanHead = wf["slice-headers"][bi] - x_0 = int(bscanHead["startX"] / wf["header"]["scaleXSlo"]) - x_1 = int(bscanHead["endX"] / wf["header"]["scaleXSlo"]) - y_0 = int(bscanHead["startY"] / wf["header"]["scaleYSlo"]) - y_1 = int(bscanHead["endY"] / wf["header"]["scaleYSlo"]) + bscan_head = wf["slice-headers"][bi] + x_0 = int(bscan_head["startX"] / wf["header"]["scaleXSlo"]) + x_1 = int(bscan_head["endX"] / wf["header"]["scaleXSlo"]) + y_0 = int(bscan_head["startY"] / wf["header"]["scaleYSlo"]) + y_1 = int(bscan_head["endY"] / wf["header"]["scaleYSlo"]) grid.append([x_0, y_0, x_1, y_1]) return grid - def renderIRslo(self, filename, renderGrid=False): + def render_ir_slo(self, filename, render_grid=False): """ Renders IR SLO image as a PNG file and optionally overlays grid of B scans @@ -90,7 +90,7 @@ def renderIRslo(self, filename, renderGrid=False): wf = self.wholefile a = np.copy(wf["sloImage"]) - if renderGrid: + if render_grid: a = np.stack((a,) * 3, axis=-1) a = Image.fromarray(a) draw = ImageDraw.Draw(a) @@ -101,7 +101,7 @@ def renderIRslo(self, filename, renderGrid=False): else: Image.fromarray(a).save(filename) - def renderOCTscans(self, filepre="oct", renderSeg=False): + def render_oct_scans(self, filepre="oct", render_seg=False): """ Renders OCT images a PNG file and optionally overlays segmentation lines Also creates a CSV file of vol file features. @@ -119,7 +119,7 @@ def renderOCTscans(self, filepre="oct", renderSeg=False): wf = self.wholefile for i in range(wf["cScan"].shape[0]): a = np.copy(wf["cScan"][i]) - if renderSeg: + if render_seg: a = np.stack((a,) * 3, axis=-1) for li in range(wf["segmentations"].shape[0]): for x in range(wf["segmentations"].shape[2]): @@ -127,7 +127,7 @@ def renderOCTscans(self, filepre="oct", renderSeg=False): Image.fromarray(a).save("%s_%03d.png" % (filepre, i)) - def __parseVolFile(self, fn, parseSeg=False): + def __parse_volfile(self, fn, parse_seg=False): print(fn) wholefile = OrderedDict() decode_hex = codecs.getdecoder("hex_codec") @@ -173,61 +173,61 @@ def __parseVolFile(self, fn, parseSeg=False): wholefile["header"] = header fin.seek(2048) - U = array.array("B") - U.frombytes(fin.read(header["sizeXSlo"] * header["sizeYSlo"])) - U = np.array(U).astype("uint8").reshape((header["sizeXSlo"], header["sizeYSlo"])) - wholefile["sloImage"] = U + u = array.array("B") + u.frombytes(fin.read(header["sizeXSlo"] * header["sizeYSlo"])) + u = np.array(u).astype("uint8").reshape((header["sizeXSlo"], header["sizeYSlo"])) + wholefile["sloImage"] = u - sloOffset = 2048 + header["sizeXSlo"] * header["sizeYSlo"] - octOffset = header["BscanHdrSize"] + header["octSizeX"] * header["octSizeZ"] * 4 + slo_offset = 2048 + header["sizeXSlo"] * header["sizeYSlo"] + oct_offset = header["BscanHdrSize"] + header["octSizeX"] * header["octSizeZ"] * 4 bscans = [] bscanheaders = [] bscanqualities = [] - if parseSeg: + if parse_seg: segmentations = None for i in range(header["numBscan"]): - fin.seek(16 + sloOffset + i * octOffset) - bscanHead = OrderedDict() - bscanHead["startX"] = struct.unpack("d", fin.read(8))[0] - bscanHead["startY"] = struct.unpack("d", fin.read(8))[0] - bscanHead["endX"] = struct.unpack("d", fin.read(8))[0] - bscanHead["endY"] = struct.unpack("d", fin.read(8))[0] - bscanHead["numSeg"] = struct.unpack("I", fin.read(4))[0] - bscanHead["offSeg"] = struct.unpack("I", fin.read(4))[0] - bscanHead["quality"] = struct.unpack("f", fin.read(4))[0] - bscanHead["shift"] = struct.unpack("I", fin.read(4))[0] - bscanheaders.append(bscanHead) - bscanqualities.append(bscanHead["quality"]) + fin.seek(16 + slo_offset + i * oct_offset) + bscan_head = OrderedDict() + bscan_head["startX"] = struct.unpack("d", fin.read(8))[0] + bscan_head["startY"] = struct.unpack("d", fin.read(8))[0] + bscan_head["endX"] = struct.unpack("d", fin.read(8))[0] + bscan_head["endY"] = struct.unpack("d", fin.read(8))[0] + bscan_head["numSeg"] = struct.unpack("I", fin.read(4))[0] + bscan_head["offSeg"] = struct.unpack("I", fin.read(4))[0] + bscan_head["quality"] = struct.unpack("f", fin.read(4))[0] + bscan_head["shift"] = struct.unpack("I", fin.read(4))[0] + bscanheaders.append(bscan_head) + bscanqualities.append(bscan_head["quality"]) # extract OCT B scan data - fin.seek(header["BscanHdrSize"] + sloOffset + i * octOffset) - U = array.array("f") - U.frombytes(fin.read(4 * header["octSizeX"] * header["octSizeZ"])) - U = np.array(U).reshape((header["octSizeZ"], header["octSizeX"])) + fin.seek(header["BscanHdrSize"] + slo_offset + i * oct_offset) + u = array.array("f") + u.frombytes(fin.read(4 * header["octSizeX"] * header["octSizeZ"])) + u = np.array(u).reshape((header["octSizeZ"], header["octSizeX"])) # remove out of boundary v = struct.unpack("f", decode_hex("FFFF7F7F")[0]) - U[U == v] = 0 + u[u == v] = 0 # log normalize - U = np.log(10000 * U + 1) - U = (255.0 * (np.clip(U, 0, np.max(U)) / np.max(U))).astype("uint8") - bscans.append(U) - if parseSeg: + u = np.log(10000 * u + 1) + u = (255.0 * (np.clip(u, 0, np.max(u)) / np.max(u))).astype("uint8") + bscans.append(u) + if parse_seg: # extract OCT segmentations data - fin.seek(256 + sloOffset + i * octOffset) - U = array.array("f") - U.frombytes(fin.read(4 * header["octSizeX"] * bscanHead["numSeg"])) - U = np.array(U) - print(U.shape) - U[U == v] = 0.0 + fin.seek(256 + slo_offset + i * oct_offset) + u = array.array("f") + u.frombytes(fin.read(4 * header["octSizeX"] * bscan_head["numSeg"])) + u = np.array(u) + print(u.shape) + u[u == v] = 0.0 if segmentations is None: segmentations = [] - for _ in range(bscanHead["numSeg"]): + for _ in range(bscan_head["numSeg"]): segmentations.append([]) - for j in range(bscanHead["numSeg"]): - segmentations[j].append(U[j * header["octSizeX"] : (j + 1) * header["octSizeX"]].tolist()) + for j in range(bscan_head["numSeg"]): + segmentations[j].append(u[j * header["octSizeX"] : (j + 1) * header["octSizeX"]].tolist()) wholefile["cScan"] = np.array(bscans) - if parseSeg: + if parse_seg: wholefile["segmentations"] = np.array(segmentations) wholefile["slice-headers"] = bscanheaders wholefile["average-quality"] = np.mean(bscanqualities) @@ -235,7 +235,7 @@ def __parseVolFile(self, fn, parseSeg=False): import csv from pathlib import Path, PurePath - volFeatures = [ + vol_features = [ PurePath(fn).name, wholefile["header"]["version"].decode("utf-8").rstrip("\x00"), wholefile["header"]["numBscan"], @@ -314,10 +314,10 @@ def __parseVolFile(self, fn, parseSeg=False): with open(output_csv, "a", newline="") as file: print("Adding", PurePath(fn).name, "to vols.csv.") writer = csv.writer(file) - writer.writerow(volFeatures) + writer.writerow(vol_features) @property - def fileHeader(self): + def file_header(self): """ Retrieve vol header fields @@ -354,7 +354,7 @@ def fileHeader(self): """ return self.wholefile["header"] - def bScanHeader(self, slicei): + def bscan_header(self, slicei): """ Retrieve the B Scan header information per slice. @@ -374,7 +374,7 @@ def bScanHeader(self, slicei): """ return self.wholefile["slice-headers"][slicei] - def saveGrid(self, outfn): + def save_grid(self, outfn): """ Saves the grid coordinates mapping OCT Bscans to the IR SLO image to a text file. The text file will be a tab-delimited file with 5 columns: The bscan number, x_0, y_0, x_1, y_1 in pixel space diff --git a/models/retinalOCT_RPD_segmentation/scripts/inference.py b/models/retinalOCT_RPD_segmentation/scripts/inference.py index 8585a65c..8eaf9846 100644 --- a/models/retinalOCT_RPD_segmentation/scripts/inference.py +++ b/models/retinalOCT_RPD_segmentation/scripts/inference.py @@ -16,9 +16,9 @@ from .Ensembler import Ensembler from .table_styles import styles +# Change directory to the script's location to ensure relative paths work correctly. os.chdir(os.path.dirname(os.path.abspath(__file__))) -# current_directory = os.getcwd() -# print(current_directory) + logging.basicConfig(level=logging.INFO) @@ -46,12 +46,30 @@ def __call__(self, block_num, block_size, total_size): self.pbar.finish() -def create_dataset(dataset_name, extracted_path): # Creates dataset and pk file from extracted images. +def create_dataset(dataset_name, extracted_path): + """Creates a pickled dataset file from a directory of extracted images. + + This function scans the `extracted_path` for images, formats them into a + list of dictionaries compatible with Detectron2, and saves the list as a + pickle file. + + Args: + dataset_name (str): The name for the dataset, used for the output .pk file. + extracted_path (str): The directory containing the extracted image files. + """ stored_data = data.rpd_data(extracted_path) pickle.dump(stored_data, open(os.path.join(data.script_dir, f"{dataset_name}.pk"), "wb")) def configure_model(): + """Loads and returns the model configuration from a YAML file. + + It reads a 'working.yaml' file located in the same directory as the script + to set up the Detectron2 configuration. + + Returns: + detectron2.config.CfgNode: The configuration object for the model. + """ cfg = get_cfg() moddir = os.path.dirname(os.path.realpath(__file__)) name = "working.yaml" @@ -61,6 +79,14 @@ def configure_model(): def register_dataset(dataset_name): + """Registers a dataset with Detectron2's DatasetCatalog. + + This makes the dataset available to be loaded by Detectron2's data loaders. + It sets the class metadata to 'rpd'. + + Args: + dataset_name (str): The name under which to register the dataset. + """ for name in [dataset_name]: try: DatasetCatalog.register(name, grab_dataset(name)) @@ -70,6 +96,17 @@ def register_dataset(dataset_name): def run_prediction(cfg, dataset_name, output_path): + """Runs inference on a dataset using a cross-validation ensemble of models. + + It loads five different model weight files (fold1 to fold5), runs inference + for each model on the specified dataset, and saves the predictions in + separate subdirectories within `output_path`. + + Args: + cfg (CfgNode): The model configuration object. + dataset_name (str): The name of the registered dataset to run inference on. + output_path (str): The base directory to save prediction outputs. + """ model = build_model(cfg) # returns a torch.nn.Module myloader = build_detection_test_loader(cfg, dataset_name) myeval = COCOEvaluator( @@ -93,6 +130,20 @@ def run_prediction(cfg, dataset_name, output_path): def run_ensemble(dataset_name, output_path, iou_thresh=0.2): + """Ensembles predictions from multiple models using NMS. + + It initializes an `Ensembler`, runs the non-maximum suppression logic, and + saves the final combined predictions to a single COCO results file. + + Args: + dataset_name (str): The name of the dataset. + output_path (str): The base directory containing the individual model + prediction subdirectories. + iou_thresh (float, optional): The IoU threshold for ensembling. Defaults to 0.2. + + Returns: + Ensembler: The ensembler instance after running NMS. + """ ens = Ensembler(output_path, dataset_name, ["fold1", "fold2", "fold3", "fold4", "fold5"], iou_thresh=iou_thresh) ens.mean_score_nms() ens.save_coco_instances() @@ -100,6 +151,20 @@ def run_ensemble(dataset_name, output_path, iou_thresh=0.2): def evaluate_dataset(dataset_name, output_path, iou_thresh=0.2, prob_thresh=0.5): + """Evaluates the final ensembled predictions against ground truth. + + It uses the custom `EvaluateClass` to calculate performance metrics and saves + a summary to a JSON file. + + Args: + dataset_name (str): The name of the dataset. + output_path (str): The directory containing the ensembled predictions file. + iou_thresh (float, optional): The IoU threshold for evaluation. Defaults to 0.2. + prob_thresh (float, optional): The probability threshold for evaluation. Defaults to 0.5. + + Returns: + EvaluateClass: The evaluation object containing detailed metrics. + """ myeval = EvaluateClass(dataset_name, output_path, iou_thresh=iou_thresh, prob_thresh=prob_thresh, evalsuper=False) myeval.evaluate() with open(os.path.join(output_path, "scalar_dict.json"), "w") as outfile: @@ -108,16 +173,35 @@ def evaluate_dataset(dataset_name, output_path, iou_thresh=0.2, prob_thresh=0.5) def create_table(myeval): + """Creates a DataFrame of per-image statistics from evaluation results. + + Args: + myeval (EvaluateClass): The evaluation object containing COCO results. + + Returns: + CreatePlotsRPD: An object containing DataFrames for image and volume stats. + """ dataset_table = CreatePlotsRPD.initfromcoco(myeval.mycoco, myeval.prob_thresh) dataset_table.dfimg.sort_index(inplace=True) return dataset_table # dataset_table.dfimg['scan'] = dataset_table.dfimg['scan'].astype('int') #depends on what we want scan field to be -def output_vol_predictions(dataset_table, vis, volID, output_path, output_mode="pred_overlay"): +def output_vol_predictions(dataset_table, vis, volid, output_path, output_mode="pred_overlay"): + """Generates and saves visualization TIFFs for a single scan volume. + + Args: + dataset_table (CreatePlotsRPD): Object containing the image/volume stats. + vis (OutputVis): The visualization object. + volid (str): The ID of the volume to visualize. + output_path (str): The directory to save the output TIFF file. + output_mode (str, optional): The type of visualization to create. + Options: "pred_overlay", "pred_only", "originals", "all". + Defaults to "pred_overlay". + """ dfimg = dataset_table.dfimg - imgids = dfimg[dfimg.volID == volID].sort_index().index.values - outname = os.path.join(output_path, f"{volID}.tiff") + imgids = dfimg[dfimg["volID"] == volid].sort_index().index.values + outname = os.path.join(output_path, f"{volid}.tiff") if output_mode == "pred_overlay": vis.output_pred_to_tiff(imgids, outname, pred_only=False) elif output_mode == "pred_only": @@ -131,13 +215,31 @@ def output_vol_predictions(dataset_table, vis, volID, output_path, output_mode=" def output_dataset_predictions(dataset_table, vis, output_path, output_mode="pred_overlay", draw_mode="default"): + """Generates and saves visualization TIFFs for all volumes in a dataset. + + Args: + dataset_table (CreatePlotsRPD): Object containing the image/volume stats. + vis (OutputVis): The visualization object. + output_path (str): The base directory to save the output TIFF files. + output_mode (str, optional): The type of visualization to create. + Defaults to "pred_overlay". + draw_mode (str, optional): The drawing style ("default" or "bw"). + Defaults to "default". + """ vis.set_draw_mode(draw_mode) os.makedirs(output_path, exist_ok=True) - for volID in dataset_table.dfvol.index: - output_vol_predictions(dataset_table, vis, volID, output_path, output_mode) + for volid in dataset_table.dfvol.index: + output_vol_predictions(dataset_table, vis, volid, output_path, output_mode) def create_dfvol(dataset_name, output_path, dataset_table): + """Creates and saves a styled HTML table of volume-level statistics. + + Args: + dataset_name (str): The name of the dataset. + output_path (str): The directory to save the HTML file. + dataset_table (CreatePlotsRPD): Object containing the volume DataFrame. + """ dfvol = dataset_table.dfvol.sort_values(by=["dt_instances"], ascending=False) with pd.option_context("styler.render.max_elements", int(dfvol.size) + 1): html_str = dfvol.style.format("{:.0f}").set_table_styles(styles).to_html() @@ -147,6 +249,13 @@ def create_dfvol(dataset_name, output_path, dataset_table): def create_dfimg(dataset_name, output_path, dataset_table): + """Creates and saves a styled HTML table of image-level statistics. + + Args: + dataset_name (str): The name of the dataset. + output_path (str): The directory to save the HTML file. + dataset_table (CreatePlotsRPD): Object containing the image DataFrame. + """ dfimg = dataset_table.dfimg.sort_index() with pd.option_context("styler.render.max_elements", int(dfimg.size) + 1): html_str = dfimg.style.set_table_styles(styles).to_html() @@ -156,98 +265,91 @@ def create_dfimg(dataset_name, output_path, dataset_table): def main(args): - dataset_name = None - input_dir = None - extracted = None - output = None - run_ext = True - run_inf = True - prob_thresh = 0.5 - iou_thresh = 0.2 - make_table = True - make_visuals = False - bm = False - bmo = False - imo = False - - print(args) - - dataset_name = args.get("dataset_name") # Access values from the dictionary + """Main function to orchestrate the end-to-end analysis pipeline. + + This function controls the flow from data extraction to evaluation and + visualization based on the provided arguments. + + Args: + args (dict): A dictionary of command-line arguments and flags + controlling the pipeline execution. + """ + print(f"Received arguments: {args}") + + # Unpack arguments from the dictionary with default values + dataset_name = args.get("dataset_name") input_dir = args.get("input_dir") - extracted = args.get("extracted_dir") + extracted_dir = args.get("extracted_dir") input_format = args.get("input_format") - output = args.get("output_dir") - run_ext = args.get("run_extract", True) # Provide default values + output_dir = args.get("output_dir") + run_extract = args.get("run_extract", True) make_dataset = args.get("create_dataset", True) - run_inf = args.get("run_inference", True) + run_inference = args.get("run_inference", True) prob_thresh = args.get("prob_thresh", 0.5) - make_table = args.get("create_tables", True) + iou_thresh = args.get("iou_thresh", 0.2) + create_tables = args.get("create_tables", True) + + # Visualization flags bm = args.get("binary_mask", False) bmo = args.get("binary_mask_overlay", False) imo = args.get("instance_mask_overlay", False) - make_visuals = bm | bmo | imo + make_visuals = bm or bmo or imo - if run_ext: - if not os.path.isdir(extracted): - print("Extracted dir does not exist! Making extracted dir...") - os.mkdir(extracted) - data.extract_files(input_dir, extracted, input_format) + # --- Pipeline Steps --- + if run_extract: + os.makedirs(extracted_dir, exist_ok=True) + print("Starting file extraction...") + data.extract_files(input_dir, extracted_dir, input_format) print("Image extraction complete!") if make_dataset: print("Creating dataset from extracted images...") - create_dataset(dataset_name, extracted) - if run_inf: + create_dataset(dataset_name, extracted_dir) + if run_inference: print("Configuring model...") cfg = configure_model() print("Registering dataset...") register_dataset(dataset_name) - if not os.path.isdir(output): - print("Output dir does not exist! Making output dir...") - os.makedirs(output) + os.makedirs(output_dir, exist_ok=True) print("Running inference...") - run_prediction(cfg, dataset_name, output) + run_prediction(cfg, dataset_name, output_dir) print("Inference complete, running ensemble...") - run_ensemble(dataset_name, output) + run_ensemble(dataset_name, output_dir, iou_thresh) print("Ensemble complete!") - if make_table or make_visuals: - print("Registering dataset...") + if create_tables or make_visuals: + print("Registering dataset for evaluation...") register_dataset(dataset_name) print("Evaluating dataset...") - eval = evaluate_dataset(dataset_name, output, iou_thresh, prob_thresh) + eval_obj = evaluate_dataset(dataset_name, output_dir, iou_thresh, prob_thresh) print("Creating dataset table...") - table = create_table(eval) - if make_table: - create_dfvol(dataset_name, output, table) - create_dfimg(dataset_name, output, table) - print("Dataset htmls complete!") + table = create_table(eval_obj) + if create_tables: + create_dfvol(dataset_name, output_dir, table) + create_dfimg(dataset_name, output_dir, table) + print("Dataset HTML tables complete!") if make_visuals: + print("Initializing visualizer...") vis = OutputVis( dataset_name, - prob_thresh=eval.prob_thresh, + prob_thresh=eval_obj.prob_thresh, pred_mode="file", - pred_file=os.path.join(output, "coco_instances_results.json"), - has_annotations=False, + pred_file=os.path.join(output_dir, "coco_instances_results.json"), + has_annotations=False, # Assuming we are visualizing on test data without GT ) - vis.scale = 1.0 + vis.scale = 1.0 # Use original scale for output visuals if bm: - print("Creating binary masks tif (no overlay)...") + print("Creating binary masks TIFF (no overlay)...") vis.annotation_color = "w" output_dataset_predictions( - table, vis, os.path.join(output, "predicted_binary_masks"), "pred_only", "bw" + table, vis, os.path.join(output_dir, "predicted_binary_masks"), "pred_only", "bw" ) if bmo: - print("Creating binary masks tif (with overlay)...") + print("Creating binary masks TIFF (with overlay)...") output_dataset_predictions( - table, vis, os.path.join(output, "predicted_binary_overlays"), "pred_overlay", "bw" + table, vis, os.path.join(output_dir, "predicted_binary_overlays"), "pred_overlay", "bw" ) if imo: - print("Creating instances masks tif (with overlay)...") + print("Creating instance masks TIFF (with overlay)...") output_dataset_predictions( - table, vis, os.path.join(output, "predicted_instance_overlays"), "pred_overlay", "default" + table, vis, os.path.join(output_dir, "predicted_instance_overlays"), "pred_overlay", "default" ) print("Visualizations complete!") - - -# if __name__ == "__main__": -# main(sys.argv[1:]) -# # main_alt() diff --git a/setup.cfg b/setup.cfg index cace76d7..06fa1478 100644 --- a/setup.cfg +++ b/setup.cfg @@ -25,10 +25,6 @@ ignore = per_file_ignores = __init__.py: F401 __main__.py: F401 - models/retinalOCT_RPD_segmentation/scripts/analysis_lib.py: N802, N803, N806 - models/retinalOCT_RPD_segmentation/scripts/datasets/data.py: N802, N803, N806 - models/retinalOCT_RPD_segmentation/scripts/datasets/volReader.py: N801, N802, N803, N806 - models/retinalOCT_RPD_segmentation/scripts/inference.py: N802, N803, N806 exclude = *.pyi,.git,.eggs,monai/_version.py,versioneer.py,venv,.venv,_version.py [isort] From d260ea2b50244d14cebe5bf44418689c778e3731 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Fri, 6 Jun 2025 21:45:43 +0000 Subject: [PATCH 21/28] Added setuptools==75.8.0 to dependencies to build detectron2 with python 3.10. Modified metadata.json, README.md, and ./docs/requirements.txt files accordingly. --- models/retinalOCT_RPD_segmentation/configs/metadata.json | 1 + models/retinalOCT_RPD_segmentation/docs/README.md | 2 -- models/retinalOCT_RPD_segmentation/docs/requirements.txt | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index 5e5cc2a1..d8e53492 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -9,6 +9,7 @@ "numpy_version": "1.26.4", "optional_packages_version": {}, "required_packages_version": { + "setuptools": "75.8.0", "opencv-python-headless": "4.11.0.86", "pandas": "2.2.3", "seaborn": "0.13.2", diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index c8802d63..15522d7d 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -34,8 +34,6 @@ This bundle can be installed using docker by navigating to the RPDBundle directo docker build -t : . ``` --> ## INSTALL -The following installation order works when installing into an environment with python==3.9. - From the bundle directory, install the required packages using ``` pip install -r ./docs/requirements.txt diff --git a/models/retinalOCT_RPD_segmentation/docs/requirements.txt b/models/retinalOCT_RPD_segmentation/docs/requirements.txt index e7f75e99..e33de840 100644 --- a/models/retinalOCT_RPD_segmentation/docs/requirements.txt +++ b/models/retinalOCT_RPD_segmentation/docs/requirements.txt @@ -5,3 +5,4 @@ seaborn scikit-learn progressbar lxml +setuptools == 75.8.0 From 6160e069e329574e8491ef5b8076c16b5d148e08 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Fri, 20 Jun 2025 17:10:06 +0000 Subject: [PATCH 22/28] Changed "format" in metadata.json to "magnitude" --- models/retinalOCT_RPD_segmentation/configs/metadata.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index d8e53492..edf74e2a 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -31,7 +31,7 @@ "inputs": { "image": { "type": "image", - "format": "PNG", + "format": "magnitude", "modality": "OCT", "num_channels": 1, "spatial_shape": [ @@ -52,7 +52,7 @@ "preprocessed_data_sources": { "vol_file": { "type": "image", - "format": "VOL", + "format": "magnitude", "modality": "OCT", "num_channels": 1, "spatial_shape": [ @@ -69,7 +69,7 @@ }, "dicom_series": { "type": "image", - "format": "DICOM", + "format": "magnitude", "modality": "OCT", "SOP class UID": "1.2.840.10008.5.1.4.1.1.77.1.5.4", "num_channels": 1, From bb88574b4bd2f6f4f0cc99dfac7eba1baf026a1f Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Fri, 20 Jun 2025 10:51:45 -0700 Subject: [PATCH 23/28] Updated required packages in metadata.json. --- .../configs/metadata.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/configs/metadata.json b/models/retinalOCT_RPD_segmentation/configs/metadata.json index edf74e2a..8b1c0f19 100644 --- a/models/retinalOCT_RPD_segmentation/configs/metadata.json +++ b/models/retinalOCT_RPD_segmentation/configs/metadata.json @@ -4,23 +4,23 @@ "changelog": { "0.0.1": "Initial version" }, - "monai_version": "1.4.0", - "pytorch_version": "2.7.0", + "monai_version": "1.5.0", + "pytorch_version": "2.6.0", "numpy_version": "1.26.4", "optional_packages_version": {}, "required_packages_version": { "setuptools": "75.8.0", "opencv-python-headless": "4.11.0.86", - "pandas": "2.2.3", + "pandas": "2.3.0", "seaborn": "0.13.2", "scikit-learn": "1.6.1", "progressbar": "2.5", - "pydicom": "2.4.4", + "pydicom": "3.0.1", "fire": "0.7.0", - "torchvision": "0.22.0", + "torchvision": "0.21.0", "detectron2": "0.6", "lxml": "5.4.0", - "pillow": "9.5.0" + "pillow": "11.2.1" }, "name": "retinalOCT_RPD_segmentation", "task": "Reticular Pseudodrusen (RPD) instance segmentation.", From a707723ce76f251b76fbc07f67ab66d153a7a4e2 Mon Sep 17 00:00:00 2001 From: ybagdasa Date: Mon, 7 Jul 2025 09:55:23 -0700 Subject: [PATCH 24/28] Updated README and bundle requirements. --- .../docs/README.md | 3 ++- .../docs/requirements.txt | 22 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/models/retinalOCT_RPD_segmentation/docs/README.md b/models/retinalOCT_RPD_segmentation/docs/README.md index 15522d7d..39b78ce0 100644 --- a/models/retinalOCT_RPD_segmentation/docs/README.md +++ b/models/retinalOCT_RPD_segmentation/docs/README.md @@ -34,7 +34,7 @@ This bundle can be installed using docker by navigating to the RPDBundle directo docker build -t : . ``` --> ## INSTALL -From the bundle directory, install the required packages using +This bundle has been installed and tested using python 3.10. From the bundle directory, install the required packages using ``` pip install -r ./docs/requirements.txt ``` @@ -95,6 +95,7 @@ For VOL files, each OCT slice will be saved as a png file to `/ Date: Wed, 23 Jul 2025 17:35:36 +0000 Subject: [PATCH 25/28] Fixed pre-commit eof line. --- models/retinalOCT_RPD_segmentation/docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/retinalOCT_RPD_segmentation/docs/requirements.txt b/models/retinalOCT_RPD_segmentation/docs/requirements.txt index 1520ff54..b4e9390f 100644 --- a/models/retinalOCT_RPD_segmentation/docs/requirements.txt +++ b/models/retinalOCT_RPD_segmentation/docs/requirements.txt @@ -11,4 +11,4 @@ pydicom==3.0.1 fire==0.7.0 torchvision==0.21.0 lxml==5.4.0 -pillow==11.2.1 \ No newline at end of file +pillow==11.2.1 From 9ba81071a451ef17522dd5f6333feb70fcd9536a Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Mon, 11 Aug 2025 04:15:47 +0000 Subject: [PATCH 26/28] revert py39 changes Signed-off-by: Yiheng Wang --- .github/workflows/premerge-cpu.yml | 63 ++-------- ci/bundle_custom_data.py | 4 +- ci/get_changed_bundle.py | 108 ++++++++++++++---- ..._retinalOCT_RPD_segmentation_dependency.sh | 2 - ci/run_premerge_cpu.sh | 84 ++------------ ci/run_premerge_gpu.sh | 83 ++------------ ci/run_regular_tests_cpu.sh | 3 +- 7 files changed, 117 insertions(+), 230 deletions(-) delete mode 100644 ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh diff --git a/.github/workflows/premerge-cpu.yml b/.github/workflows/premerge-cpu.yml index 5d204dcb..d365d9bb 100644 --- a/.github/workflows/premerge-cpu.yml +++ b/.github/workflows/premerge-cpu.yml @@ -16,70 +16,29 @@ jobs: premerge-cpu: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v4 - + - uses: actions/checkout@v4 - name: Set up Python 3.10 uses: actions/setup-python@v4 with: - python-version: 3.10.14 # This will be the default Python - - - name: Set up Miniconda - uses: conda-incubator/setup-miniconda@v3 - with: - auto-update-conda: true - # The python-version here is for Conda's base, if activated. - # We set auto-activate-base to false, so actions/setup-python's version remains default. python-version: 3.10.14 - auto-activate-base: false # Crucial: ensures the Python 3.10 from actions/setup-python is the default - - - name: Initialize Conda for shell integration - shell: bash - run: | - conda init bash - eval "$(conda shell.bash hook)" - - name: cache weekly timestamp - id: pip-cache-ts + id: pip-cache run: | - echo "datew=$(date '+%Y-%V')" >> $GITHUB_OUTPUT - - - name: Get pip cache directory - id: pip-cache-dir - # This runs using the default Python (3.10) - shell: bash - run: echo "dir=$(python -m pip cache dir)" >> $GITHUB_OUTPUT - - - name: Cache pip dependencies (for Python 3.10 global env) - uses: actions/cache@v4 - id: cache-pip - with: - path: ${{ steps.pip-cache-dir.outputs.dir }} - key: ${{ runner.os }}-pip-3.10-${{ steps.pip-cache-ts.outputs.datew }}-${{ hashFiles('**/requirements.txt', '**/setup.py') }} - restore-keys: | - ${{ runner.os }}-pip-3.10-${{ steps.pip-cache-ts.outputs.datew }}- - - # Cache Conda packages (for environments your bash script might create) - # setup-miniconda action sets MINICONDA_PATH_0 environment variable - - name: Cache Conda packages + echo "::set-output name=datew::$(date '+%Y-%V')" + - name: cache for pip uses: actions/cache@v4 - id: cache-conda + id: cache with: - path: ${{ env.MINICONDA_PATH_0 }}/pkgs - key: ${{ runner.os }}-conda-pkgs-${{ steps.pip-cache-ts.outputs.datew }}-${{ hashFiles('**/environment*.yml', '**/requirements*.txt') }} # Adjust hashFiles as needed - restore-keys: | - ${{ runner.os }}-conda-pkgs-${{ steps.pip-cache-ts.outputs.datew }}- - - - name: Install global Python dependencies (using Python 3.10) - shell: bash + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ steps.pip-cache.outputs.datew }} + - name: Install dependencies run: | python -m pip install --upgrade pip wheel python -m pip install --upgrade setuptools - - - name: Run check script - shell: bash -el {0} + - name: check run: | # clean up temporary files $(pwd)/runtests.sh --clean df -h - bash $(pwd)/ci/run_premerge_cpu.sh + bash $(pwd)/ci/run_premerge_cpu.sh changed + shell: bash diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index 4d7d58f8..1a951437 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -64,9 +64,7 @@ # This dict is used for our CI tests to install required dependencies that cannot be installed by `pip install` directly. # If a bundle has this kind of dependencies, please add the bundle name (key), and the path of the install script (value) # into the dict. -install_dependency_dict = { - "retinalOCT_RPD_segmentation": "ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh" -} +install_dependency_dict = {} # This list is used for our CI tests to determine whether a bundle supports TensorRT export. Related # test will be employed for bundles in the dict. diff --git a/ci/get_changed_bundle.py b/ci/get_changed_bundle.py index a177ea86..9262b112 100644 --- a/ci/get_changed_bundle.py +++ b/ci/get_changed_bundle.py @@ -11,44 +11,102 @@ import argparse +import os +import sys -from utils import get_changed_bundle_list +from bundle_custom_data import install_dependency_dict +from utils import get_json_dict +ALLOW_MONAI_RC = os.environ.get("ALLOW_MONAI_RC", "false").lower() in ("true", "1", "t", "y", "yes") -def get_changed_bundle(changed_dirs): + +def increment_version(version): """ - This function is used to get all changed bundles, a string which - contains all bundle names will be printed, and can be used in shell scripts. + Split the version into components, assume missing parts are '0'. + + Args: + version (str): The version string to increment. + + Examples: + print(increment_version("1.3.2")) # Expected output: 1.3.3 + print(increment_version("1.4")) # Expected output: 1.4.1 + print(increment_version("1")) # Expected output: 1.0.1 """ - bundle_names = "" - root_path = "models" - bundle_list = get_changed_bundle_list(changed_dirs, root_path=root_path) + version = str(version) + parts = version.split(".") + # Extend the list with zeros to handle cases like "1" or "1.4". + while len(parts) < 3: + parts.append("0") + + # Convert all parts to integers. + parts = list(map(int, parts)) + + # Increment the last part. + parts[-1] += 1 - for bundle in bundle_list: - bundle_names += f"{bundle} " - print(bundle_names) + # Join the parts back into a version string. + # This trims trailing '.0's, returning the version in its original format + result_version = ".".join(map(str, parts)).rstrip(".0") + return result_version -def get_changed_hf_model(changed_dirs): + +def get_requirements(bundle, models_path, requirements_file): """ - This function is used to get all changed hf models, a string which - contains all hf model names will be printed, and can be used in shell scripts. + This function is used to produce a requirements txt file, and print a string + which shows the filename. The printed string can be used in shell scripts. """ - hf_model_names = "" - root_path = "hf_models" - hf_model_list = get_changed_bundle_list(changed_dirs, root_path=root_path) - for hf_model in hf_model_list: - hf_model_names += f"{hf_model} " - print(hf_model_names) + bundle_path = os.path.join(models_path, bundle) + meta_file_path = os.path.join(bundle_path, "configs/metadata.json") + if os.path.exists(meta_file_path): + metadata = get_json_dict(meta_file_path) + libs = [] + if "monai_version" in metadata.keys(): + monai_version = metadata["monai_version"] + if not ALLOW_MONAI_RC: + lib_monai_req = f"monai=={monai_version}" + else: + lib_monai_req = f"monai>={monai_version}rc1,<{increment_version(monai_version)}" + print(f"ALLOW_MONAI_RC is set to true, the version range is {lib_monai_req}", file=sys.stderr) + libs.append(lib_monai_req) + if "pytorch_version" in metadata.keys(): + pytorch_version = metadata["pytorch_version"] + libs.append(f"torch=={pytorch_version}") + if "numpy_version" in metadata.keys(): + numpy_version = metadata["numpy_version"] + libs.append(f"numpy=={numpy_version}") + for package_key in ["optional_packages_version", "required_packages_version"]: + if package_key in metadata.keys(): + optional_dict = metadata[package_key] + for name, version in optional_dict.items(): + libs.append(f"{name}=={version}") + + if len(libs) > 0: + with open(requirements_file, "w") as f: + for line in libs: + f.write(f"{line}\n") + + +def get_install_script(bundle): + # install extra dependencies if needed + script_path = "" + if bundle in install_dependency_dict.keys(): + script_path = install_dependency_dict[bundle] + print(script_path) if __name__ == "__main__": parser = argparse.ArgumentParser(description="") - parser.add_argument("-f", "--f", type=str, help="changed files.") - parser.add_argument("--hf_model", type=bool, default=False, help="if true, get changed hf models.") + parser.add_argument("-b", "--b", type=str, help="bundle name.") + parser.add_argument("-p", "--p", type=str, default="models", help="models path.") + parser.add_argument("--get_script", type=bool, default=False, help="whether to get the install script.") + parser.add_argument("--requirements_file", type=str, help="output filename for requirements.") args = parser.parse_args() - changed_dirs = args.f.splitlines() - if args.hf_model: - get_changed_hf_model(changed_dirs) + bundle = args.b + models_path = args.p + get_script = args.get_script + if get_script is True: + get_install_script(bundle) else: - get_changed_bundle(changed_dirs) + requirements_file = args.requirements_file + get_requirements(bundle, models_path, requirements_file) diff --git a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh deleted file mode 100644 index 74fae23c..00000000 --- a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh +++ /dev/null @@ -1,2 +0,0 @@ -# ensure that using evironment with python==3.9 -python -m pip install 'git+https://github.com/facebookresearch/detectron2.git@65184fc057d4fab080a98564f6b60fae0b94edc4' diff --git a/ci/run_premerge_cpu.sh b/ci/run_premerge_cpu.sh index 1e6ddad8..000424c3 100755 --- a/ci/run_premerge_cpu.sh +++ b/ci/run_premerge_cpu.sh @@ -30,12 +30,6 @@ elif [[ $# -gt 1 ]]; then exit 1 fi -# Bunles that requires special python version -declare -A bundle_python_versions=( - ["retinalOCT_RPD_segmentation"]="3.9" -) -DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" - # Usually, CPU test is required, but for some bundles that are too large to run in Github Actions, we can exclude them. exclude_test_list=("maisi_ct_generative") is_excluded() { @@ -47,23 +41,22 @@ is_excluded() { return 1 # Return false (1) if not excluded } -install_common_deps_in_activated_env() { - python -m pip install --upgrade pip wheel - python -m pip install --upgrade setuptools - python -m pip install jsonschema gdown pyyaml parameterized fire - export PYTHONPATH=$PWD -} - init_venv() { if [ ! -d "model_zoo_venv" ]; then # Check if the venv directory does not exist echo "initializing pip environment" python -m venv model_zoo_venv source model_zoo_venv/bin/activate - install_common_deps_in_activated_env + pip install --upgrade pip wheel + pip install --upgrade setuptools + pip install jsonschema gdown pyyaml parameterized fire + export PYTHONPATH=$PWD else echo "Virtual environment model_zoo_venv already exists. Activating..." source model_zoo_venv/bin/activate - install_common_deps_in_activated_env + pip install --upgrade pip wheel + pip install --upgrade setuptools + pip install jsonschema gdown pyyaml parameterized fire + export PYTHONPATH=$PWD fi } @@ -77,42 +70,6 @@ remove_venv() { fi } -init_conda_env() { - local python_version_to_create="$1" - local bundle_identifier="$2" - local conda_env_name="conda_env_${bundle_identifier}" - - # Always source conda.sh to ensure conda activate is available - if [ -n "$CONDA_EXE" ] && [ -f "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" ]; then - source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" - elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then - source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" - else - echo "Warning: Could not reliably source conda.sh for Conda activation." - fi - - if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then - echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." - conda env remove -n "$conda_env_name" -y - fi - - conda create -n "$conda_env_name" python="$python_version_to_create" -y - conda activate "$conda_env_name" - install_common_deps_in_activated_env - conda deactivate 2>/dev/null || true -} - -remove_conda_env() { - local conda_env_name_to_remove="$1" - if [ -z "$conda_env_name_to_remove" ]; then - echo "Warning: No Conda env name provided to remove_conda_env." - return - fi - echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" - conda deactivate 2>/dev/null || true - conda env remove -n "$conda_env_name_to_remove" -y -} - verify_bundle() { for dir in /opt/hostedtoolcache/*; do if [[ $dir != "/opt/hostedtoolcache/Python" ]]; then @@ -149,22 +106,7 @@ verify_bundle() { else include_pre_release="" fi - # determine if conda env should be used for the bundle - active_conda_env_for_bundle="" - required_python_version="${bundle_python_versions[$bundle]}" - use_conda_for_bundle=false - if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] - then - use_conda_for_bundle=true - fi - if $use_conda_for_bundle - then - init_conda_env "$required_python_version" "$bundle" - active_conda_env_for_bundle="conda_env_${bundle}" - conda activate "$active_conda_env_for_bundle" - else - init_venv - fi + init_venv # Check if the requirements file exists and is not empty if [ -s "$requirements_file" ]; then echo "install required libraries for bundle: $bundle" @@ -172,13 +114,7 @@ verify_bundle() { fi # verify bundle python $(pwd)/ci/verify_bundle.py -b "$bundle" -m "min" # min tests on cpu - # cleanup - if $use_conda_for_bundle - then - remove_conda_env "$active_conda_env_for_bundle" - else - remove_venv - fi + remove_venv fi done else diff --git a/ci/run_premerge_gpu.sh b/ci/run_premerge_gpu.sh index 5fc85f7c..6aa745b6 100755 --- a/ci/run_premerge_gpu.sh +++ b/ci/run_premerge_gpu.sh @@ -29,28 +29,22 @@ if [[ $# -gt 1 ]]; then exit 1 fi -declare -A bundle_python_versions=( - ["retinalOCT_RPD_segmentation"]="3.9" -) -DEFAULT_PYTHON_VERSION_FOR_VENV="3.10" - -install_common_deps_in_activated_env() { - python -m pip install --upgrade pip wheel - python -m pip install --upgrade setuptools - python -m pip install jsonschema gdown pyyaml parameterized fire - export PYTHONPATH=$PWD -} - init_venv() { if [ ! -d "model_zoo_venv" ]; then # Check if the venv directory does not exist echo "initializing pip environment" python -m venv model_zoo_venv source model_zoo_venv/bin/activate - install_common_deps_in_activated_env + pip install --upgrade pip wheel + pip install --upgrade setuptools + pip install jsonschema gdown pyyaml parameterized fire + export PYTHONPATH=$PWD else echo "Virtual environment model_zoo_venv already exists. Activating..." source model_zoo_venv/bin/activate - install_common_deps_in_activated_env + pip install --upgrade pip wheel + pip install --upgrade setuptools + pip install jsonschema gdown pyyaml parameterized fire + export PYTHONPATH=$PWD fi } @@ -64,42 +58,6 @@ remove_venv() { fi } -init_conda_env() { - local python_version_to_create="$1" - local bundle_identifier="$2" - local conda_env_name="conda_env_${bundle_identifier}" - - # Always source conda.sh to ensure conda activate is available - if [ -n "$CONDA_EXE" ] && [ -f "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" ]; then - source "$(dirname "$CONDA_EXE")/../etc/profile.d/conda.sh" - elif [ -n "$MINICONDA_PATH_0" ] && [ -f "$MINICONDA_PATH_0/etc/profile.d/conda.sh" ]; then - source "$MINICONDA_PATH_0/etc/profile.d/conda.sh" - else - echo "Warning: Could not reliably source conda.sh for Conda activation." - fi - - if conda env list | grep -q "^${conda_env_name}[[:space:]]"; then - echo "Conda env '$conda_env_name' already exists. Removing for a clean start..." - conda env remove -n "$conda_env_name" -y - fi - - conda create -n "$conda_env_name" python="$python_version_to_create" -y - conda activate "$conda_env_name" - install_common_deps_in_activated_env - conda deactivate 2>/dev/null || true -} - -remove_conda_env() { - local conda_env_name_to_remove="$1" - if [ -z "$conda_env_name_to_remove" ]; then - echo "Warning: No Conda env name provided to remove_conda_env." - return - fi - echo "Deactivating and removing Conda environment: $conda_env_name_to_remove" - conda deactivate 2>/dev/null || true - conda env remove -n "$conda_env_name_to_remove" -y -} - verify_bundle() { echo 'Run verify bundle...' head_ref=$(git rev-parse HEAD) @@ -124,22 +82,7 @@ verify_bundle() { else include_pre_release="" fi - # determine if conda env should be used for the bundle - active_conda_env_for_bundle="" - required_python_version="${bundle_python_versions[$bundle]}" - use_conda_for_bundle=false - if [[ -n "$required_python_version" && "$required_python_version" != "$DEFAULT_PYTHON_VERSION_FOR_VENV" ]] - then - use_conda_for_bundle=true - fi - if $use_conda_for_bundle - then - init_conda_env "$required_python_version" "$bundle" - active_conda_env_for_bundle="conda_env_${bundle}" - conda activate "$active_conda_env_for_bundle" - else - init_venv - fi + init_venv # Check if the requirements file exists and is not empty if [ -s "$requirements_file" ]; then echo "install required libraries for bundle: $bundle" @@ -158,13 +101,7 @@ verify_bundle() { test_cmd="torchrun $(pwd)/ci/unit_tests/runner.py --b \"$bundle\" --dist True" fi eval $test_cmd - # cleanup - if $use_conda_for_bundle - then - remove_conda_env "$active_conda_env_for_bundle" - else - remove_venv - fi + remove_venv done else echo "this pull request does not change any bundles, skip verify." diff --git a/ci/run_regular_tests_cpu.sh b/ci/run_regular_tests_cpu.sh index 52936c0e..253cc86c 100755 --- a/ci/run_regular_tests_cpu.sh +++ b/ci/run_regular_tests_cpu.sh @@ -30,7 +30,8 @@ elif [[ $# -gt 1 ]]; then exit 1 fi -exclude_test_list=("maisi_ct_generative" "retinalOCT_RPD_segmentation") +# Usually, CPU test is required, but for some bundles that are too large to run in Github Actions, we can exclude them. +exclude_test_list=("maisi_ct_generative") is_excluded() { for item in "${exclude_test_list[@]}"; do # Use exclude_test_list here if [ "$1" == "$item" ]; then From 5faa761c65d8f01f6c5a08d45753f8d4f68d8c35 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Mon, 11 Aug 2025 04:19:18 +0000 Subject: [PATCH 27/28] revert py39 changes Signed-off-by: Yiheng Wang --- ci/get_bundle_requirements.py | 4 -- ci/get_changed_bundle.py | 108 ++++++++-------------------------- 2 files changed, 25 insertions(+), 87 deletions(-) diff --git a/ci/get_bundle_requirements.py b/ci/get_bundle_requirements.py index d70d3bf0..9262b112 100644 --- a/ci/get_bundle_requirements.py +++ b/ci/get_bundle_requirements.py @@ -19,8 +19,6 @@ ALLOW_MONAI_RC = os.environ.get("ALLOW_MONAI_RC", "false").lower() in ("true", "1", "t", "y", "yes") -special_dependencies_list = ["detectron2"] - def increment_version(version): """ @@ -81,8 +79,6 @@ def get_requirements(bundle, models_path, requirements_file): if package_key in metadata.keys(): optional_dict = metadata[package_key] for name, version in optional_dict.items(): - if name in special_dependencies_list: - continue libs.append(f"{name}=={version}") if len(libs) > 0: diff --git a/ci/get_changed_bundle.py b/ci/get_changed_bundle.py index 9262b112..a177ea86 100644 --- a/ci/get_changed_bundle.py +++ b/ci/get_changed_bundle.py @@ -11,102 +11,44 @@ import argparse -import os -import sys -from bundle_custom_data import install_dependency_dict -from utils import get_json_dict +from utils import get_changed_bundle_list -ALLOW_MONAI_RC = os.environ.get("ALLOW_MONAI_RC", "false").lower() in ("true", "1", "t", "y", "yes") - -def increment_version(version): +def get_changed_bundle(changed_dirs): """ - Split the version into components, assume missing parts are '0'. - - Args: - version (str): The version string to increment. - - Examples: - print(increment_version("1.3.2")) # Expected output: 1.3.3 - print(increment_version("1.4")) # Expected output: 1.4.1 - print(increment_version("1")) # Expected output: 1.0.1 + This function is used to get all changed bundles, a string which + contains all bundle names will be printed, and can be used in shell scripts. """ - version = str(version) - parts = version.split(".") - # Extend the list with zeros to handle cases like "1" or "1.4". - while len(parts) < 3: - parts.append("0") - - # Convert all parts to integers. - parts = list(map(int, parts)) - - # Increment the last part. - parts[-1] += 1 + bundle_names = "" + root_path = "models" + bundle_list = get_changed_bundle_list(changed_dirs, root_path=root_path) - # Join the parts back into a version string. - # This trims trailing '.0's, returning the version in its original format - result_version = ".".join(map(str, parts)).rstrip(".0") + for bundle in bundle_list: + bundle_names += f"{bundle} " + print(bundle_names) - return result_version - -def get_requirements(bundle, models_path, requirements_file): +def get_changed_hf_model(changed_dirs): """ - This function is used to produce a requirements txt file, and print a string - which shows the filename. The printed string can be used in shell scripts. + This function is used to get all changed hf models, a string which + contains all hf model names will be printed, and can be used in shell scripts. """ - bundle_path = os.path.join(models_path, bundle) - meta_file_path = os.path.join(bundle_path, "configs/metadata.json") - if os.path.exists(meta_file_path): - metadata = get_json_dict(meta_file_path) - libs = [] - if "monai_version" in metadata.keys(): - monai_version = metadata["monai_version"] - if not ALLOW_MONAI_RC: - lib_monai_req = f"monai=={monai_version}" - else: - lib_monai_req = f"monai>={monai_version}rc1,<{increment_version(monai_version)}" - print(f"ALLOW_MONAI_RC is set to true, the version range is {lib_monai_req}", file=sys.stderr) - libs.append(lib_monai_req) - if "pytorch_version" in metadata.keys(): - pytorch_version = metadata["pytorch_version"] - libs.append(f"torch=={pytorch_version}") - if "numpy_version" in metadata.keys(): - numpy_version = metadata["numpy_version"] - libs.append(f"numpy=={numpy_version}") - for package_key in ["optional_packages_version", "required_packages_version"]: - if package_key in metadata.keys(): - optional_dict = metadata[package_key] - for name, version in optional_dict.items(): - libs.append(f"{name}=={version}") - - if len(libs) > 0: - with open(requirements_file, "w") as f: - for line in libs: - f.write(f"{line}\n") - - -def get_install_script(bundle): - # install extra dependencies if needed - script_path = "" - if bundle in install_dependency_dict.keys(): - script_path = install_dependency_dict[bundle] - print(script_path) + hf_model_names = "" + root_path = "hf_models" + hf_model_list = get_changed_bundle_list(changed_dirs, root_path=root_path) + for hf_model in hf_model_list: + hf_model_names += f"{hf_model} " + print(hf_model_names) if __name__ == "__main__": parser = argparse.ArgumentParser(description="") - parser.add_argument("-b", "--b", type=str, help="bundle name.") - parser.add_argument("-p", "--p", type=str, default="models", help="models path.") - parser.add_argument("--get_script", type=bool, default=False, help="whether to get the install script.") - parser.add_argument("--requirements_file", type=str, help="output filename for requirements.") + parser.add_argument("-f", "--f", type=str, help="changed files.") + parser.add_argument("--hf_model", type=bool, default=False, help="if true, get changed hf models.") args = parser.parse_args() - bundle = args.b - models_path = args.p - get_script = args.get_script - if get_script is True: - get_install_script(bundle) + changed_dirs = args.f.splitlines() + if args.hf_model: + get_changed_hf_model(changed_dirs) else: - requirements_file = args.requirements_file - get_requirements(bundle, models_path, requirements_file) + get_changed_bundle(changed_dirs) From accbffcd52d586cab0f2b26cf68ebd98826c6fc9 Mon Sep 17 00:00:00 2001 From: Yiheng Wang Date: Mon, 11 Aug 2025 05:34:26 +0000 Subject: [PATCH 28/28] add customized detectron2 Signed-off-by: Yiheng Wang --- ci/bundle_custom_data.py | 4 +++- ci/get_bundle_requirements.py | 4 ++++ .../install_retinalOCT_RPD_segmentation_dependency.sh | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh diff --git a/ci/bundle_custom_data.py b/ci/bundle_custom_data.py index 1a951437..4d7d58f8 100644 --- a/ci/bundle_custom_data.py +++ b/ci/bundle_custom_data.py @@ -64,7 +64,9 @@ # This dict is used for our CI tests to install required dependencies that cannot be installed by `pip install` directly. # If a bundle has this kind of dependencies, please add the bundle name (key), and the path of the install script (value) # into the dict. -install_dependency_dict = {} +install_dependency_dict = { + "retinalOCT_RPD_segmentation": "ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh" +} # This list is used for our CI tests to determine whether a bundle supports TensorRT export. Related # test will be employed for bundles in the dict. diff --git a/ci/get_bundle_requirements.py b/ci/get_bundle_requirements.py index 9262b112..d70d3bf0 100644 --- a/ci/get_bundle_requirements.py +++ b/ci/get_bundle_requirements.py @@ -19,6 +19,8 @@ ALLOW_MONAI_RC = os.environ.get("ALLOW_MONAI_RC", "false").lower() in ("true", "1", "t", "y", "yes") +special_dependencies_list = ["detectron2"] + def increment_version(version): """ @@ -79,6 +81,8 @@ def get_requirements(bundle, models_path, requirements_file): if package_key in metadata.keys(): optional_dict = metadata[package_key] for name, version in optional_dict.items(): + if name in special_dependencies_list: + continue libs.append(f"{name}=={version}") if len(libs) > 0: diff --git a/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh new file mode 100644 index 00000000..a1022d26 --- /dev/null +++ b/ci/install_scripts/install_retinalOCT_RPD_segmentation_dependency.sh @@ -0,0 +1 @@ +python -m pip install 'git+https://github.com/facebookresearch/detectron2.git@65184fc057d4fab080a98564f6b60fae0b94edc4'

    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