From c977640639b96c44276913ec52efdc95babdb8d3 Mon Sep 17 00:00:00 2001 From: Rupal jain Date: Mon, 21 Aug 2023 21:31:26 +0530 Subject: [PATCH] Vision foundation model (#2580) * Migrate existing notebooks to the azureml-examples repo from azureml-foundation-models (#2432) Co-authored-by: grajguru * vision batch deployment cli and sdk notebook (#2433) * vision batch deployment cli and sdk notebook * black formatting * Comments * comments * updated to take latest version in FT notebooks --------- Co-authored-by: grajguru * port docs folder to azureml-examples from foundational repo (#2440) * port docs folder to azureml-examples from foundational repo * repair relative path --------- Co-authored-by: grajguru * Image notebook/cli param update (#2435) * notebook/cli param update * notebook param update * cli param update * notebooks updated to foundational model * vision batch deployment cli and sdk notebook (#2433) * vision batch deployment cli and sdk notebook * black formatting * Comments * comments * updated to take latest version in FT notebooks --------- Co-authored-by: grajguru * notebook/cli param update * notebook param update * notebook/cli param update * notebook param update * cli param update * notebooks updated to foundational model * notebook/cli param update * notebook param update * notebooks updated to foundational model * notebook/cli param update * notebook param update * notebook/cli param update * notebooks updated to foundational model * cli update * doc update * addressing comments --------- Co-authored-by: Gaurav Rajguru Co-authored-by: grajguru * MMD OD/IS sdk, cli examples; Update HuggingFace Classification examples (#2477) * MMD OD/IS sdk, cli examples; Update HuggingFace Classification examples * update examples * instance segmentation infer notebooks * typo * update mmd docs * CLI inference examples for OD and IS * example updates; resolving review comments * update compute name; dataets version * update compute name * update remove image_min_size and image_max_size from OD and IS * Using yolof_r50_c5_8x8_1x_coco in OD example notebook * update reistry for inference --------- Co-authored-by: grajguru * updates for sdk/cli inference examples (#2525) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * Solved bugs in finetuning vision yamls. (#2528) Co-authored-by: grajguru * Rjaincc/vision foundation model (#2529) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * updates to sdk, cli examples * Create MLConfig from passed argument (#2532) * Create MLConfig from passed argument * use default cred --------- Co-authored-by: grajguru * Updating col names for batch scoring (#2533) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * updates to sdk, cli examples * updating score col names while fetching batch scoring output * Reverting updating col names for classification batch scoring (#2534) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * updates to sdk, cli examples * updating score col names while fetching batch scoring output * updating score col names while fetching batch scoring output for classification * Nvijayrania/fix steam job issue (#2530) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * Solved bugs in finetuning vision yamls. * updates to sdk, cli examples * Removing datasets and fixing az ml job stream issue * Fix the capitalization * Added space at the end * Added a linux formatted shell script * Added Linux styled shell scripts * Added linux style CRLF --------- Co-authored-by: Rupal Jain Co-authored-by: grajguru * Doc related changes (#2536) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * updates to sdk, cli examples * updating score col names while fetching batch scoring output * updating score col names while fetching batch scoring output for classification * fixing bash issues * fix broken links in mmdetection-fridgeobjects-object-detection.ipynb (#2535) fixed broken links to [Model Import Component] & [Finetune Component] in Section 5.2 in OD vision notebook * [Vision sdk] ObjectDetection Notebook: update url, remove redundant params (#2538) * update base_url to have forward slashes * Remove redundant custom_pipeline_component_args from od notebook * Revert "Remove redundant custom_pipeline_component_args from od notebook" This reverts commit 8ba4de3aa0891a436e7e95b1c666cddd0356b376. * remove extra custom_pipeline_component_args variable * Vidani/update deployment settings (#2541) * Update the livenedd probe, request_timeout_ms for online deployment of vision foundational models * Update the livenedd probe, request_timeout_ms for online deployment of vision foundational models for cli * corrected request_timeout_ms param's value * Update request_timeout_ms and liveness probe's values in inference for vision foundation models (#2544) * Improving visualization in FT notebooks images (#2554) * Improving visualization in FT notebooks images * not needed * Update sdk/python/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb Co-authored-by: Rupal jain * Update sdk/python/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb Co-authored-by: Rupal jain * Update sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.ipynb Co-authored-by: Rupal jain --------- Co-authored-by: shubham soni Co-authored-by: Rupal jain * Adding the retry logic for csv (#2567) * Adding the retry logic for csv * Name correction for CLI notebooks * Moved streaming out of try-catch * Removing metadata * revert model name change * removing cat statement * Adding image tasks evaluation examples (#2566) * adding image classification evaluation examples * updates for ME image task examples * OD/IS eval sdk example updates * comments addressed --------- Co-authored-by: Rupal Jain * Convert IS data using voc convertor (#2572) Co-authored-by: grajguru * ME OD example data conversion fix (#2574) * ME OD example data conversion fix * lib installations * [Image Foundation Models] Update HF model import notebook (#2545) * updates for sdk/cli inference examples * deploying from azureml-staging erroring out * updates to sdk, cli examples * updating score col names while fetching batch scoring output * updating score col names while fetching batch scoring output for classification * fixing bash issues * revert merge to main * reverting kernel spec changes * update sdk/cli examples for image od/is * Update registry from azureml-staging/azureml-preview to azureml (#2575) * Update registry from azureml-staging/azureml-preview to azureml * remove tenant id; update model version number * renaming yml to yaml; correcting version numbers * Main to vision foundation model (#2579) * Automation test for spark CLI samples (#2377) * Enable test for submit_spark_standalone_jobs * Generate workflow yaml * update spark job files for automation test * Add workflow for serverless spark with user identity job * Add scripts to upload input data * Update workflow to refer the script * Update source file path * Update workflow with correct file path * Update working directory * Update workflow * Update the path * Update the script to upload data * Update the overwrite mode * Update destination blob name * Use blob upload batch * Add spark pipeline tests * Update spark component extension * Add script to attache uai * Update property name in workflow * Update script parameters * Update assign uai script * Format the script * Update setup identities script * Update path to infra bootstraping * Enable automation test for attached spark job * Update resource path * Update setup attached resource script * Update script of setup resources * Update setup attached resource script2 * Add logic to assign identity role * Format the empty check * Check if identity is empty * Update to get compute properties * update readme * Reformat the script * Update schema location and revert sdk notebook changes * Attach pool first * Rename resources and merge main * Update format in yml * Add role assigment to uid * Enable sdk spark batch samples automation test (#2394) * Initial update to enable sdk spark samples automation test * Add script to setup spark resources * Update the script path * replace attached pool name with value * Assign sai permission to spark pool * Update component name * Add two additional spark notebooks to cover with automation test * Update spark version and use managedidentityconfiguration * Format the samples * Update uai compute name and remove vnet notebook test temporarily * Update condition check * Condition format * Assign uai synapse role * Update compute name to be valid * Add readme changes * Substituate variables * Rename the synapse workspace * Substitue synapse ws name in notebook * Create unique file syanpse per rg * replace synapse pool name * bump RAI text and vision component versions to 0.0.8 (#2437) * Pmanoj/read model specific defaults (#2442) * reading the model specific defaults from model card * updating the metric defaults for the tasks * updating the defaults from bool -> string * fixing formatting issues * add llama acs notebook (#2430) * copy acs notebook * add docker * add ncd score.py * remove monitoring * add acs * add safety * update score to support chunk * update input and fix score.py * move asc client to init * clear output * support chat bot * make notebook compatible to chat model * remove unused * use 7b as default * format * update per comments * pin model version, use studio to check env status * add uai creation * update folder structure * handle -chat input * format json * rename nb * fix input * remove junk * Add compute name and instance type param in sdk and cli (#2446) * added compute_name in cli * add serverless code cell * removed extra cell & add MD * changed device type to auto * adding truncation for summarization data * chged device type to auto * remove custom environment (#2445) * Clean up (#2449) * Clean up * Delete llama-safe-online-deployment.ipynb * Delete prepare_uai.ipynb * Update deploy-and-run.sh (#2443) * Update deploy-and-run.sh (#2413) * Update deploy-and-run.sh * Update deploy-and-run.sh * Update sdk-deploy-and-test.ipynb (#2412) * add incremental embedding with table notebook (#2428) * add incremental embedding with table notebook * fix comments --------- Co-authored-by: Lucas Pickup * Update RAG notebooks to use generate_embedding component. (#2450) * Update RAG notebooks to use generate_embedding component. * Rebase and fixup formatting. * Missed testgen notebook --------- Co-authored-by: Lucas Pickup * Add online_enabled flag (#2405) * Add online_enabled falg * Add support for network isolation scenario * Modifying file * minor update * update the descriptions * reformat --------- Co-authored-by: Shail Paragbhai Shah Co-authored-by: Qianjun Xu Co-authored-by: rsethur Co-authored-by: Sethu Raman * Changed to Standard_NC6s_v3 because Standard_NC6 is deprecated. (#2456) * Changed to Standard_NC6s_v3 because Standard_NC6 is deprecated * Updated SDK Version to 1.52.0 in automl_env files * Updated credentials for V1 notebooks * Fix typo (#2459) * [Notebook] Add dbcopilot notebook (#2427) * [Notebook] Add dbcopilot notebook * fix * fix format * fix format --------- Co-authored-by: Xia Xiao * Add Hugging Face inference text-classification streaming example notebook (#2458) * Added Hugging Face inference text-classification streaming example * Update sdk/python/foundation-models/huggingface/inference/text-generation-streaming/text-generation-streaming-online-endpoint.ipynb Co-authored-by: Manoj Bableshwar --------- Co-authored-by: Manoj Bableshwar * Fixed missing comma (#2461) * Automation test for spark job with managed vnet and interactive session notebook (#2436) * Automation test for spark job with managed vnet * Update to keyword arguments in provision vnet * Add test for data wrangling interactive notebook * Add permanent delete to worksapce cleanup * Rename the vnet workspace * Support interactive session test * rename run session file notebook * Update to use ipython * Add py file for notebook session * Update relative path to py file * Update continaer value * Update expiry time * upload wrangling data to gen2 storage * Remove gen2 using service principal * Remove session mount script * Move test file into folder and updae variables * Update to new workflow * Update blob storage name * Add test files (#2464) * Add test files * checkin all * checkin all * checkin all * Switched to new GPU SKU because NC6 is deprecated (#2462) * Switched to new GPU SKU because NC6 is deprecated * Updated credentials for remaining V1 notebooks * Updated gpu-cluster in bootstrap.sh * compute update and viz error fix (#2454) * compute update and viz error fix * v1 notebooks compute update * format updates * format updates * format updates * compute name update * cluster name update * cluster update * use nc6_v2 instead of nc6 (#2469) Co-authored-by: Hannah Westra (SHE/HER) * Update Standard_NC6 compute for v2 notebooks. (#2465) * Change NC6 to NC6s_v3 * Update endpoint compute * modified the register output path (#2474) Co-authored-by: bhavanatumma * chore(pr_template): Add a checklist item for file deletion (#2466) * Changed gpu-K80-2 to gpu-V100-2 because NC is deprecated (#2472) * Changed gpu-K80-2 to gpu-V100-2 because NC is deprecated * Added python-sdk-tutorial prefix to V1 automl actions * Update quickstart.ipynb (#2457) * Update quickstart.ipynb * Update quickstart.ipynb * Update quickstart.ipynb * Update quickstart.ipynb * Update quickstart.ipynb * Update train-model.ipynb * Update train-model.ipynb * Update train-model.ipynb * Update train-model.ipynb * Update quickstart.ipynb * Update train-model.ipynb * Update pipeline.ipynb * Update pipeline.ipynb * Update pipeline.ipynb * Update quickstart.ipynb * Update train-model.ipynb * Update quickstart.ipynb * Update pipeline.ipynb * Update train-model.ipynb * Update train-model.ipynb * Update quickstart.ipynb * Update train-model.ipynb * Update quickstart.ipynb * Update train-model.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update pipeline.ipynb * Update sklearn-diabetes.ipynb * Update sklearn-diabetes.ipynb * Update sklearn-diabetes.ipynb * Update iris-scikit-learn.ipynb * Update iris-scikit-learn.ipynb * Update sklearn-diabetes.ipynb * Update sklearn-mnist.ipynb * Update debug-and-monitor.ipynb * Update distributed-cifar10.ipynb * Update distributed-cifar10.ipynb * Update distributed-cifar10.ipynb * Update distributed-cifar10.ipynb * Update distributed-cifar10.ipynb * Update objectdetectionAzureML.ipynb * Update distributed-cifar10.ipynb * Update pytorch-iris.ipynb * Update tensorflow-mnist.ipynb * Update tensorflow-mnist.ipynb * Update tensorflow-mnist.ipynb * Update debug-and-monitor.ipynb * Update objectdetectionAzureML.ipynb * Update distributed-cifar10.ipynb * Update pytorch-iris.ipynb * Update sklearn-diabetes.ipynb * Update iris-scikit-learn.ipynb * Update sklearn-mnist.ipynb * Update tensorflow-mnist.ipynb * Update distributed-cifar10.ipynb * Update objectdetectionAzureML.ipynb * Update tensorflow-mnist.ipynb * Update tensorflow-mnist.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update distributed-cifar10.ipynb * Update objectdetectionAzureML.ipynb * Update tensorflow-mnist.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update automl-forecasting-recipe-univariate-run.ipynb * Update tensorflow-mnist.ipynb * Update e2e-object-classification-distributed-pytorch.ipynb * Update auto-ml-forecasting-bike-share.ipynb * Update auto-ml-forecasting-github-dau.ipynb * Update auto-ml-forecasting-github-dau.ipynb * Update automl-classification-task-bankmarketing-serverless.ipynb * Update automl-forecasting-orange-juice-sales-mlflow.ipynb * Update azureml-getting-started-studio.ipynb * Update automl-regression-task-hardware-performance.ipynb * Update automl-regression-task-hardware-performance.ipynb * Update automl-nlp-text-ner-task.ipynb * Update automl-nlp-text-ner-task.ipynb * Update automl-nlp-text-ner-task.ipynb * Update automl-nlp-text-ner-task.ipynb * Update automl-nlp-multiclass-sentiment-mlflow.ipynb * Update automl-nlp-multiclass-sentiment-mlflow.ipynb * Update automl-nlp-multiclass-sentiment-mlflow.ipynb * Update automl-nlp-multiclass-sentiment-mlflow.ipynb * Update automl-nlp-multiclass-sentiment.ipynb * Update automl-nlp-multilabel-paper-cat.ipynb * Update automl-forecasting-task-energy-demand-advanced.ipynb * Update automl-nlp-multiclass-sentiment-mlflow.ipynb * Update automl-nlp-multilabel-paper-cat.ipynb * Update automl-nlp-text-ner-task.ipynb * Update automl-nlp-multiclass-sentiment-mlflow.ipynb * Update automl-nlp-multiclass-sentiment.ipynb * Update automl-nlp-multilabel-paper-cat.ipynb * Update automl-nlp-text-ner-task.ipynb * Updated asr inference sample score, online and batch endpoint notebooks (#2441) * Updated asr inference sample score, online and batch endpoint notebooks * Updated openai whisper model from 8 to 10 in the batch deployment notebook * Add UAI to llama deployment (#2473) * add uai * fix typo * fix typo * reformat * Update feature store example (#2480) * update sdk version * add sdk version update * update retrieval component version * Add component-based demand forecasting notebooks (#2470) * added notebooks * linter * added exceptions, readme and workflow files * changed registries from dev to preview and prod * fixed compute creation step * deleted redundant file. Added try-exccept to avoid the http connection timeout issues * changed gpu compute type due to availability in the test region * added forece rerun setting to pipeline definition * removed forced re-run setting since in the test environment is it triggered by default. * removed repeated experiement name from the HTS nb * added pipeline description to mm and hts nb * removing single model nb and associated files * Removed local data files from the mm nb. Will use data from the public datastore. * modified mm nb to download data from public blob and save as parquet * linter * changed parameter names to be consistent with components' input names in HTS nb * changed parameter names to be consistent with components' input names in MM nb * removed code that enables private features * fixed section reference hyperlinks and removed unused impots from helper scripts * pre-formatted section headers; minor code reformat * added experiment and timout restictions to the MM and HTS nb * added check to make sure all job child runs are posted before downloading forecast results * workround for the PipelinJob bug which is stuck in the preparing state * fix llama for empty request/response * Excluded yolov5/tutorial (#2487) * update code to fix pipeline test by updating the outbound rule (#2488) * fix: Update cli/setup.sh to ensure that release candidates are actually installed during sample validation (#2492) * fix: Update instructructions in cli/setup.sh for validating a release candidate * [skip ci] Remove dead code * Add preview label to HTS and MM notebooks and update data sources (#2490) * Addedd preview label to HTS and MM notebooks, removed data folder from the HTS nb, changed data URIs in the MM nb. * fixed section reference links * dropped pre-formatting * Batch inference sample scripts for foundation models (#2367) * fill-mask, qna, summarization * Add all tasks * black formatting * Make delete compute step optional * Fix wording --------- Co-authored-by: Sumadhva Sridhar <109793745+susridhar@users.noreply.github.com> * [RAG] Move from text-davinci-003 to gpt-3.5 turbo (#2493) * mdc/monitoring cli samples (#2479) * add data collector cli samples * add custom monitoring signal samples * add relvant supporting files and additional samples * remove data from this PR, update custom samples * remove model from this PR * update email: * chore: Run black on monitoring cli samples (#2499) * chore: Update cron schedule for automated-cleanup-resources (#2498) Will go at about 1am PST * fix: updating deployments schemas (#2497) * replace the public data source to a public Azure blob one (#2500) * replace the public data source to a public Azure blob one, to solve mount/download issue * update pipeline registered data asset name to resolve conflict * update e2e flow with same data asset register meta * update file name to csv, which is the actual exist one * update code and environment * bump custom env version --------- Co-authored-by: Anthony Hu * Sdg pipeline (#2496) * revise pipeline & data notebooks * wording * fix error when data version exists * reformat * fix cli files to pass smoke test * many models and HTS cli (#2505) * Update LlaMa notebooks to use HF TGI container (#2475) * first draft * llama hf tgi (#2476) * Update notebook * update * update response format, input format, use env vars * default sharding to true * update scoring changes and notebook * udpate * update scoring script to use AACS (#2481) * update scoring script to use AACS * Add mlflow * update * fixes to scoring script * remove /n * update scoring script to have system prompt --------- Co-authored-by: Gaurav Singh * black + minor fixes * update default * add gen params validation (#2489) * add top_p in text-gen examples * score.py changes * update * fix * update scoring to include new aacs key * add checking for empty string --------- Co-authored-by: Gaurav Singh Co-authored-by: Ayush Mishra <61145377+novaturient95@users.noreply.github.com> Co-authored-by: Ayush Mishra Co-authored-by: Ke Xu Co-authored-by: xuke444 <40614413+xuke444@users.noreply.github.com> * switch from building inf env to using train env (#2508) * fix iris download error by adding iris_data.csv (#2502) * fix iris download error by adding iris_data.csv * fix precompilation issue * added valid sink argument * fix BoundsError * fix bounds error * fix distributed tf notebook (#2509) * update mscoco RAI object detection notebook to increase num masks and reduce images in dataset (#2514) * register model under outputs/mlflow-model (#2407) * register model under outputs/mlflow-model * update SDK register.py * [LLM] RAG Examples - Remove link to old registry (#2519) Co-authored-by: Gerard * Update client registry to public for AutoML forecasting components (#2522) * update client registry to public * update registries for cli components * add falcon model safe deployment notebook (#2512) * add falcon model notebook * update md cell * rename * rename registry * Add distributed TCN (v2) notebook (#2516) * distributed tcn notebook * Added cluster name to notebooks_config.ini. Increased experiment timeout to 1 hour * modified readme.py to add mlflow to requirements without explicitly calling import mlflow * re-ran readmy.py to reflect changes in the workflwo file * removed best run line from artifacts download * added logging of the best child run ID to file an ICM for the service team. * changed to public client registry * print format * add tracking URI for mlflow * replaced mlflowclient due to deprecation * added disclaimer and increase experiment limit to 60 min * added sleep import * update code to fix pipeline test by updating the outbound rule (#2542) * Update resources name (#2521) * Update keyvault name * Update attached compute name * Fix if condition * Update compute name * Update joblib import so that new scikit-learn versions can be used (#2546) * Update Llamav2 to default to hf-tgi (#2548) * default to hf_tgi * remove docker env * remove hf env vars --------- Co-authored-by: svaruag * pin compute metrics component to 0.0.10. The later versions of this component break the pipelines due to the latest changes by the component owners (#2549) * Update V2 sample joblib import so that new scikit-learn can be used (#2547) * Update V2 sample joblib import so that new scikit-learn can be used * Removed stderr check for orange juice sales because of download messages and blank lines * Add default score file for non hftgi (#2552) * add default score file for non hftgi * rev * black * add excount --------- Co-authored-by: svaruag Co-authored-by: Srujan Saggam <41802116+srsaggam@users.noreply.github.com> * Add warning message with links to the v1 forecasting notebooks (#2553) * added warning message with links to v1 forecasting notebooks * fixed default kernels; fixed link rendering; add warning to the output check * link rendering * added comma to the output check * changed the compute type due to quota issues. This notebook has been failing since 7/18/23 because of this. * changed many models v1 compute name * added warning to the notebook check * Add random numbers at the end of endpoint name in workflows (#2558) * Add random numbers at the end of endpoint name * Fix bootstrapping directory * Improve getting environment in helper script. (#2560) * Fix environment * Fix regression-explanation-featurization * Fix loading of environments * Fix linting * pin version of scikit-learn (#2540) Co-authored-by: Aishani Bhalla Co-authored-by: Vivian Li * New embedding step should use instance_count==1 (#2562) * New embedding step should use instance_count==1 * Revert registry change. --------- Co-authored-by: Lucas Pickup * Pin version of scikit-learn for inference-schema sample (#2564) Co-authored-by: Aishani Bhalla * Ignore Downloading artifact messages to stderr (#2568) * Fix multilabel notebook to work with the new scikit-learn (#2563) * Fix notebook * Fix notbook gate * Fix notebook runs * Fix workspaces * Fix multiclass/multilabel runs. * Remove v1 samples from repository (#2559) * Remove v1 samples from v2 repo * Remove v1 from table of contents * Remove v1 test files * Remove v1 test files * Remove v1 workflows * [RAG] Remove local testing raise exception (#2561) * [RAG] Match document_path_replacement_regex with AzureML-Assets Components * Remove regex changes --------- Co-authored-by: Gerard * [LLM] RAG Examples - Remove link to old registry (#2569) Co-authored-by: Gerard * Revert "Remove v1 samples from repository" (#2577) * Revert "Remove v1 samples from repository (#2559)" This reverts commit 81175f62f56bb8400a2f9c42c0dffcd1b4f5e876. * Increase size limit to allow revert * Add/update for managed online endpoint examples for vnet (#2570) * Create deploy-managed-online-endpoint-workspacevnet.sh * Rename deploy-moe-vnet-mlflow.sh to deploy-moe-vnet-mlflow-legacy.sh * Rename deploy-moe-vnet.sh to deploy-moe-vnet-legacy.sh * rename legacy vnet folder * rerun readme.py to reflect folder changes * Revert "rerun readme.py to reflect folder changes" This reverts commit cf9eedbd0034bef0d4ae5fe1ca875960fc0f5a59. * Revert "rename legacy vnet folder" This reverts commit 6ede0bfab93582426be55eee200faf202c8ba139. * clarify legacy without changing folder name * add code for possible combinations * fix: Reset PR size limit to 2MB (#2578) --------- Co-authored-by: Fred Li <51424245+fredms@users.noreply.github.com> Co-authored-by: Ilya Matiach Co-authored-by: pmanoj Co-authored-by: xuke444 <40614413+xuke444@users.noreply.github.com> Co-authored-by: Aditi Singh <114134940+s-aditi@users.noreply.github.com> Co-authored-by: Man <43016276+Man-MSFT@users.noreply.github.com> Co-authored-by: Facundo Santiago Co-authored-by: Sachin Paryani Co-authored-by: Lucas Pickup Co-authored-by: Lucas Pickup Co-authored-by: shail2208 <59747407+shail2208@users.noreply.github.com> Co-authored-by: Shail Paragbhai Shah Co-authored-by: Qianjun Xu Co-authored-by: rsethur Co-authored-by: Sethu Raman Co-authored-by: jeff-shepherd <39775772+jeff-shepherd@users.noreply.github.com> Co-authored-by: arun-rajora <108084827+arun-rajora@users.noreply.github.com> Co-authored-by: xia-xiao <87464698+xia-xiao@users.noreply.github.com> Co-authored-by: Xia Xiao Co-authored-by: erjms <90470932+erjms@users.noreply.github.com> Co-authored-by: Manoj Bableshwar Co-authored-by: Ramu Vadthyavath Co-authored-by: Hannah Westra (SHE/HER) Co-authored-by: Bhavana Co-authored-by: bhavanatumma Co-authored-by: kdestin <101366538+kdestin@users.noreply.github.com> Co-authored-by: vijetajo <40418529+vijetajo@users.noreply.github.com> Co-authored-by: tanmaybansal104 <137794577+tanmaybansal104@users.noreply.github.com> Co-authored-by: qjxu <74025864+qjxu@users.noreply.github.com> Co-authored-by: vbejan-msft <65432549+vlbejan@users.noreply.github.com> Co-authored-by: shreeyaharma <129339198+shreeyaharma@users.noreply.github.com> Co-authored-by: Sumadhva Sridhar <109793745+sumadhva30@users.noreply.github.com> Co-authored-by: Sumadhva Sridhar <109793745+susridhar@users.noreply.github.com> Co-authored-by: Gerard Woods <99283778+gjwoods@users.noreply.github.com> Co-authored-by: Alexander Hughes <108831604+ahughes-msft@users.noreply.github.com> Co-authored-by: eniac871 Co-authored-by: Anthony Hu Co-authored-by: Sheri Gilley Co-authored-by: Gaurav Singh Co-authored-by: Gaurav Singh Co-authored-by: Ayush Mishra <61145377+novaturient95@users.noreply.github.com> Co-authored-by: Ayush Mishra Co-authored-by: Ke Xu Co-authored-by: Rahul Kumar <74648335+iamrk04@users.noreply.github.com> Co-authored-by: Gerard Co-authored-by: Srujan Saggam <41802116+srsaggam@users.noreply.github.com> Co-authored-by: Vivian Li Co-authored-by: nick863 <30440255+nick863@users.noreply.github.com> Co-authored-by: Aishani Bhalla Co-authored-by: Aishani Bhalla Co-authored-by: Diondra <16376603+diondrapeck@users.noreply.github.com> Co-authored-by: SeokJin Han <4353157+dem108@users.noreply.github.com> * remove non-image docs; update image docs * reformat code to black * update checkin size to 4MB * reformat code to black * add import workflow for image classification model * docs update * docs update * update image classification github workflow * update MMD doc links * update docs --------- Co-authored-by: Gaurav Rajguru Co-authored-by: grajguru Co-authored-by: MadhuM02 <107707128+MadhuM02@users.noreply.github.com> Co-authored-by: nvijayrania <107195344+nvijayrania@users.noreply.github.com> Co-authored-by: Vivek Dani <110168656+vivek-dani@users.noreply.github.com> Co-authored-by: shubhamiit <41925087+shubhamiit@users.noreply.github.com> Co-authored-by: shubham soni Co-authored-by: Fred Li <51424245+fredms@users.noreply.github.com> Co-authored-by: Ilya Matiach Co-authored-by: pmanoj Co-authored-by: xuke444 <40614413+xuke444@users.noreply.github.com> Co-authored-by: Aditi Singh <114134940+s-aditi@users.noreply.github.com> Co-authored-by: Man <43016276+Man-MSFT@users.noreply.github.com> Co-authored-by: Facundo Santiago Co-authored-by: Sachin Paryani Co-authored-by: Lucas Pickup Co-authored-by: Lucas Pickup Co-authored-by: shail2208 <59747407+shail2208@users.noreply.github.com> Co-authored-by: Shail Paragbhai Shah Co-authored-by: Qianjun Xu Co-authored-by: rsethur Co-authored-by: Sethu Raman Co-authored-by: jeff-shepherd <39775772+jeff-shepherd@users.noreply.github.com> Co-authored-by: arun-rajora <108084827+arun-rajora@users.noreply.github.com> Co-authored-by: xia-xiao <87464698+xia-xiao@users.noreply.github.com> Co-authored-by: Xia Xiao Co-authored-by: erjms <90470932+erjms@users.noreply.github.com> Co-authored-by: Manoj Bableshwar Co-authored-by: Ramu Vadthyavath Co-authored-by: Hannah Westra (SHE/HER) Co-authored-by: Bhavana Co-authored-by: bhavanatumma Co-authored-by: kdestin <101366538+kdestin@users.noreply.github.com> Co-authored-by: vijetajo <40418529+vijetajo@users.noreply.github.com> Co-authored-by: tanmaybansal104 <137794577+tanmaybansal104@users.noreply.github.com> Co-authored-by: qjxu <74025864+qjxu@users.noreply.github.com> Co-authored-by: vbejan-msft <65432549+vlbejan@users.noreply.github.com> Co-authored-by: shreeyaharma <129339198+shreeyaharma@users.noreply.github.com> Co-authored-by: Sumadhva Sridhar <109793745+sumadhva30@users.noreply.github.com> Co-authored-by: Sumadhva Sridhar <109793745+susridhar@users.noreply.github.com> Co-authored-by: Gerard Woods <99283778+gjwoods@users.noreply.github.com> Co-authored-by: Alexander Hughes <108831604+ahughes-msft@users.noreply.github.com> Co-authored-by: eniac871 Co-authored-by: Anthony Hu Co-authored-by: Sheri Gilley Co-authored-by: Gaurav Singh Co-authored-by: Gaurav Singh Co-authored-by: Ayush Mishra <61145377+novaturient95@users.noreply.github.com> Co-authored-by: Ayush Mishra Co-authored-by: Ke Xu Co-authored-by: Rahul Kumar <74648335+iamrk04@users.noreply.github.com> Co-authored-by: Gerard Co-authored-by: Srujan Saggam <41802116+srsaggam@users.noreply.github.com> Co-authored-by: Vivian Li Co-authored-by: nick863 <30440255+nick863@users.noreply.github.com> Co-authored-by: Aishani Bhalla Co-authored-by: Aishani Bhalla Co-authored-by: Diondra <16376603+diondrapeck@users.noreply.github.com> Co-authored-by: SeokJin Han <4353157+dem108@users.noreply.github.com> --- .github/workflows/code-quality.yml | 2 +- ...egistry_new_model_image_classification.yml | 73 + .../deepspeed_configs/zero1.json | 42 + .../multiclass-classification/deploy.yaml | 11 + ...ts-multiclass-classification-pipeline.yaml | 98 + ...fridgeobjects-multiclass-classification.sh | 174 + .../multiclass-classification/prepare_data.py | 191 + .../multiclass-classification/readme.md | 14 + .../deepspeed_configs/zero1.json | 42 + .../multilabel-classification/deploy.yaml | 11 + ...ts-multilabel-classification-pipeline.yaml | 99 + ...fridgeobjects-multilabel-classification.sh | 175 + .../multilabel-classification/prepare_data.py | 194 + .../multilabel-classification/readme.md | 14 + .../deepspeed_configs/zero1.json | 42 + .../image-instance-segmentation/deploy.yaml | 11 + .../jsonl_converter.py | 227 + ...bjects-instance-segmentation-pipeline.yaml | 100 + ...ion-fridgeobjects-instance-segmentation.sh | 179 + .../prepare_data.py | 284 + .../image-instance-segmentation/readme.md | 11 + .../deepspeed_configs/zero1.json | 42 + .../image-object-detection/deploy.yaml | 11 + ...tion-fridgeobjects-detection-pipeline.yaml | 101 + .../mmdetection-fridgeobjects-detection.sh | 178 + .../image-object-detection/prepare_data.py | 246 + .../finetune/image-object-detection/readme.md | 16 + .../image-classification/deploy-batch.yaml | 9 + .../image-classification/deploy-online.yaml | 12 + .../image-classification-batch-endpoint.sh | 137 + .../image-classification-online-endpoint.sh | 79 + .../image-classification/prepare_data.py | 163 + .../deploy-batch.yaml | 8 + .../deploy-online.yaml | 11 + ...ge-instance-segmentation-batch-endpoint.sh | 138 + ...e-instance-segmentation-online-endpoint.sh | 80 + .../prepare_data.py | 129 + .../image-object-detection/deploy-batch.yaml | 8 + .../image-object-detection/deploy-online.yaml | 11 + .../image-object-detection-batch-endpoint.sh | 137 + .../image-object-detection-online-endpoint.sh | 82 + .../image-object-detection/prepare_data.py | 129 + .../image_finetune/mmd_finetune_component.md | 260 + .../mmd_model_import_component.md | 71 + .../transformers_finetune_component.md | 239 + .../transformers_model_import_component.md | 71 + .../images/default_compute_from_settings.png | Bin 0 -> 28973 bytes ...ute_from_settings_for_image_components.png | Bin 0 -> 81121 bytes ...age_classification_finetune_components.png | Bin 0 -> 443405 bytes .../image_classification_output_settings.png | Bin 0 -> 147456 bytes .../image_mmd_od_is_finetune_components.png | Bin 0 -> 301510 bytes .../system/docs/images/instance_count.png | Bin 0 -> 5442 bytes .../system/docs/images/maximum_num_nodes.png | Bin 0 -> 30095 bytes ...lflow_model_tree_for_hf_image_cls_comp.png | Bin 0 -> 158525 bytes .../system/docs/images/mmd_mlflow_model.png | Bin 0 -> 148098 bytes .../docs/images/od_is_output_settings.png | Bin 0 -> 33091 bytes ...er_compute_target_for_image_components.png | Bin 0 -> 81290 bytes .../docs/images/output_settings_mount.png | Bin 0 -> 57709 bytes .../images/process_count_per_instance.png | Bin 0 -> 3245 bytes .../docs/sample_files/HfImageMLmodel.yaml | 26 + .../multiclass-classification/README.md | 40 + .../fridge-eval-config.json | 3 + .../image-multiclass-classification.ipynb | 700 + .../multilabel-classification/README.md | 45 + .../fridge-eval-config.json | 4 + .../image-multilabel-classification.ipynb | 698 + .../image-instance-segmentation/README.md | 20 + .../fridge-eval-config.json | 5 + .../image-instance-segmentation.ipynb | 745 + .../odFridgeObjectsMask_coco.json | 32635 ++++++++++++++++ .../odFridgeObjectsMask_coco_rle.json | 7853 ++++ .../image-object-detection/README.md | 19 + .../fridge-eval-config.json | 5 + .../image-object-detection.ipynb | 730 + .../odFridgeObjects_coco.json | 5837 +++ .../deepspeed_configs/zero1.json | 42 + ...dgeobjects-multiclass-classification.ipynb | 1135 + .../deepspeed_configs/zero1.json | 42 + ...dgeobjects-multilabel-classification.ipynb | 1149 + .../deepspeed_configs/zero1.json | 42 + .../jsonl_converter.py | 227 + ...-fridgeobjects-instance-segmentation.ipynb | 1162 + .../image-object-detection/coco2jsonl.py | 127 + .../deepspeed_configs/zero1.json | 42 + ...ction-fridgeobjects-object-detection.ipynb | 1242 + .../odFridgeObjects_coco.json | 5837 +++ .../import/import_model_into_registry.ipynb | 1 + .../image-classification-batch-endpoint.ipynb | 540 + ...image-classification-online-endpoint.ipynb | 376 + ...instance-segmentation-batch-endpoint.ipynb | 525 + ...nstance-segmentation-online-endpoint.ipynb | 363 + ...mage-object-detection-batch-endpoint.ipynb | 525 + ...age-object-detection-online-endpoint.ipynb | 364 + 93 files changed, 67467 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/sdk-foundation-models-system-import-import_model_into_registry_new_model_image_classification.yml create mode 100644 cli/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json create mode 100644 cli/foundation-models/system/finetune/image-classification/multiclass-classification/deploy.yaml create mode 100644 cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification-pipeline.yaml create mode 100644 cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.sh create mode 100644 cli/foundation-models/system/finetune/image-classification/multiclass-classification/prepare_data.py create mode 100644 cli/foundation-models/system/finetune/image-classification/multiclass-classification/readme.md create mode 100644 cli/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json create mode 100644 cli/foundation-models/system/finetune/image-classification/multilabel-classification/deploy.yaml create mode 100644 cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification-pipeline.yaml create mode 100644 cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.sh create mode 100644 cli/foundation-models/system/finetune/image-classification/multilabel-classification/prepare_data.py create mode 100644 cli/foundation-models/system/finetune/image-classification/multilabel-classification/readme.md create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/deploy.yaml create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation-pipeline.yaml create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.sh create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/prepare_data.py create mode 100644 cli/foundation-models/system/finetune/image-instance-segmentation/readme.md create mode 100644 cli/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json create mode 100644 cli/foundation-models/system/finetune/image-object-detection/deploy.yaml create mode 100644 cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection-pipeline.yaml create mode 100644 cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection.sh create mode 100644 cli/foundation-models/system/finetune/image-object-detection/prepare_data.py create mode 100644 cli/foundation-models/system/finetune/image-object-detection/readme.md create mode 100644 cli/foundation-models/system/inference/image-classification/deploy-batch.yaml create mode 100644 cli/foundation-models/system/inference/image-classification/deploy-online.yaml create mode 100644 cli/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.sh create mode 100644 cli/foundation-models/system/inference/image-classification/image-classification-online-endpoint.sh create mode 100644 cli/foundation-models/system/inference/image-classification/prepare_data.py create mode 100644 cli/foundation-models/system/inference/image-instance-segmentation/deploy-batch.yaml create mode 100644 cli/foundation-models/system/inference/image-instance-segmentation/deploy-online.yaml create mode 100644 cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.sh create mode 100644 cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.sh create mode 100644 cli/foundation-models/system/inference/image-instance-segmentation/prepare_data.py create mode 100644 cli/foundation-models/system/inference/image-object-detection/deploy-batch.yaml create mode 100644 cli/foundation-models/system/inference/image-object-detection/deploy-online.yaml create mode 100644 cli/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.sh create mode 100644 cli/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.sh create mode 100644 cli/foundation-models/system/inference/image-object-detection/prepare_data.py create mode 100644 sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_finetune_component.md create mode 100644 sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_model_import_component.md create mode 100644 sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_finetune_component.md create mode 100644 sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_model_import_component.md create mode 100644 sdk/python/foundation-models/system/docs/images/default_compute_from_settings.png create mode 100644 sdk/python/foundation-models/system/docs/images/default_compute_from_settings_for_image_components.png create mode 100644 sdk/python/foundation-models/system/docs/images/image_classification_finetune_components.png create mode 100644 sdk/python/foundation-models/system/docs/images/image_classification_output_settings.png create mode 100644 sdk/python/foundation-models/system/docs/images/image_mmd_od_is_finetune_components.png create mode 100644 sdk/python/foundation-models/system/docs/images/instance_count.png create mode 100644 sdk/python/foundation-models/system/docs/images/maximum_num_nodes.png create mode 100644 sdk/python/foundation-models/system/docs/images/mlflow_model_tree_for_hf_image_cls_comp.png create mode 100644 sdk/python/foundation-models/system/docs/images/mmd_mlflow_model.png create mode 100644 sdk/python/foundation-models/system/docs/images/od_is_output_settings.png create mode 100644 sdk/python/foundation-models/system/docs/images/other_compute_target_for_image_components.png create mode 100644 sdk/python/foundation-models/system/docs/images/output_settings_mount.png create mode 100644 sdk/python/foundation-models/system/docs/images/process_count_per_instance.png create mode 100644 sdk/python/foundation-models/system/docs/sample_files/HfImageMLmodel.yaml create mode 100644 sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/README.md create mode 100644 sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/fridge-eval-config.json create mode 100644 sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/image-multiclass-classification.ipynb create mode 100644 sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/README.md create mode 100644 sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/fridge-eval-config.json create mode 100644 sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/image-multilabel-classification.ipynb create mode 100644 sdk/python/foundation-models/system/evaluation/image-instance-segmentation/README.md create mode 100644 sdk/python/foundation-models/system/evaluation/image-instance-segmentation/fridge-eval-config.json create mode 100644 sdk/python/foundation-models/system/evaluation/image-instance-segmentation/image-instance-segmentation.ipynb create mode 100644 sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco.json create mode 100644 sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco_rle.json create mode 100644 sdk/python/foundation-models/system/evaluation/image-object-detection/README.md create mode 100644 sdk/python/foundation-models/system/evaluation/image-object-detection/fridge-eval-config.json create mode 100644 sdk/python/foundation-models/system/evaluation/image-object-detection/image-object-detection.ipynb create mode 100644 sdk/python/foundation-models/system/evaluation/image-object-detection/odFridgeObjects_coco.json create mode 100644 sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json create mode 100644 sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb create mode 100644 sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json create mode 100644 sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.ipynb create mode 100644 sdk/python/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json create mode 100644 sdk/python/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py create mode 100644 sdk/python/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb create mode 100644 sdk/python/foundation-models/system/finetune/image-object-detection/coco2jsonl.py create mode 100644 sdk/python/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json create mode 100644 sdk/python/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb create mode 100644 sdk/python/foundation-models/system/finetune/image-object-detection/odFridgeObjects_coco.json create mode 100644 sdk/python/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.ipynb create mode 100644 sdk/python/foundation-models/system/inference/image-classification/image-classification-online-endpoint.ipynb create mode 100644 sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.ipynb create mode 100644 sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.ipynb create mode 100644 sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.ipynb create mode 100644 sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.ipynb diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 156d4d7642..502b496c06 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -18,4 +18,4 @@ jobs: - name: Check Pull Request Size run: | git fetch origin ${{ github.event.pull_request.base.ref }} --quiet # Need to manually fetch base branch in CI - python ./.github/scripts/commit-filesize-diff-summary.py --limit 2MB origin/${{ github.event.pull_request.base.ref }}..HEAD + python ./.github/scripts/commit-filesize-diff-summary.py --limit 4MB origin/${{ github.event.pull_request.base.ref }}..HEAD diff --git a/.github/workflows/sdk-foundation-models-system-import-import_model_into_registry_new_model_image_classification.yml b/.github/workflows/sdk-foundation-models-system-import-import_model_into_registry_new_model_image_classification.yml new file mode 100644 index 0000000000..41eba4d334 --- /dev/null +++ b/.github/workflows/sdk-foundation-models-system-import-import_model_into_registry_new_model_image_classification.yml @@ -0,0 +1,73 @@ +name: sdk-foundation-models-system-import-import_model_into_registry_new_model_image_classification +# This file is created by sdk/python/readme.py. +# Please do not edit directly. +on: + workflow_dispatch: + schedule: + - cron: "33 10/12 * * *" + pull_request: + branches: + - main + paths: + - sdk/python/foundation-models/system/import/** + - .github/workflows/sdk-foundation-models-system-import-import_model_into_registry_new_model_image_classification.yml + - sdk/python/dev-requirements.txt + - infra/bootstrapping/** + - sdk/python/setup.sh +env: + MODEL_ID: microsoft/resnet-18 + TASK_NAME: image-classification +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: check out repo + uses: actions/checkout@v2 + - name: setup python + uses: actions/setup-python@v2 + with: + python-version: "3.8" + - name: pip install notebook reqs + run: pip install -r sdk/python/dev-requirements.txt + - name: azure login + uses: azure/login@v1 + with: + creds: ${{secrets.AZUREML_CREDENTIALS}} + - name: bootstrap resources + run: | + echo '${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}'; + bash bootstrap.sh + working-directory: infra/bootstrapping + continue-on-error: false + - name: setup SDK + run: | + source "${{ github.workspace }}/infra/bootstrapping/sdk_helpers.sh"; + source "${{ github.workspace }}/infra/bootstrapping/init_environment.sh"; + bash setup.sh + working-directory: sdk/python + continue-on-error: true + - name: setup-cli + run: | + source "${{ github.workspace }}/infra/bootstrapping/sdk_helpers.sh"; + source "${{ github.workspace }}/infra/bootstrapping/init_environment.sh"; + bash setup.sh + working-directory: cli + continue-on-error: true + - name: run foundation-models/system/import/import_model_into_registry.ipynb + run: | + source "${{ github.workspace }}/infra/bootstrapping/sdk_helpers.sh"; + source "${{ github.workspace }}/infra/bootstrapping/init_environment.sh"; + bash "${{ github.workspace }}/infra/bootstrapping/sdk_helpers.sh" generate_workspace_config "../../.azureml/config.json"; + bash "${{ github.workspace }}/infra/bootstrapping/sdk_helpers.sh" replace_template_values "import_model_into_registry.ipynb"; + [ -f "../../.azureml/config" ] && cat "../../.azureml/config"; + papermill -k python import_model_into_registry.ipynb import_model_into_registry.output.ipynb -p MODEL_ID "${{ env.MODEL_ID }}" -p TASK_NAME "${{ env.TASK_NAME }}" + working-directory: sdk/python/foundation-models/system/import + - name: upload notebook's working folder as an artifact + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: import_model_into_registry + path: sdk/python/foundation-models/system/import diff --git a/cli/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/cli/foundation-models/system/finetune/image-classification/multiclass-classification/deploy.yaml b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/deploy.yaml new file mode 100644 index 0000000000..6553e7943e --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/deploy.yaml @@ -0,0 +1,11 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 \ No newline at end of file diff --git a/cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification-pipeline.yaml b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification-pipeline.yaml new file mode 100644 index 0000000000..9bc31a2a53 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification-pipeline.yaml @@ -0,0 +1,98 @@ +$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json +type: pipeline + +experiment_name: AzureML-Cli-Train-Finetune-Vision-MultiClass-Samples + +inputs: + # # Model - specify the foundation model available in the azureml system registry + mlflow_model_path: + path: azureml://registries/azureml/models/google-vit-base-patch16-224/versions/5 + type: mlflow_model + # model_name: microsoft/beit-base-patch16-224-pt22k-ft22k + # dataset files + training_data: + path: ./data/training-mltable-folder + type: mltable + validation_data: + path: ./data/validation-mltable-folder + type: mltable + # deepspeed config file + ds_finetune: + path: ./deepspeed_configs/zero1.json + type: uri_file + # compute + compute_model_import: sample-model-import-cluster + compute_finetune: sample-finetune-cluster-gpu + +outputs: + # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint + trained_model: + type: mlflow_model + +settings: + force_rerun: true + default_compute: azureml:sample-finetune-cluster-gpu + +jobs: + huggingface_transformers_model_finetune_job: + type: pipeline + component: azureml://registries/azureml/components/image_classification_pipeline/labels/latest + inputs: + + # Compute + compute_model_import: ${{parent.inputs.compute_model_import}} + compute_finetune: ${{parent.inputs.compute_finetune}} + process_count_per_instance: 1 + instance_count: 1 + + # Model import args + task_name: image-classification + model_family: HuggingFaceImage + # # Specify the model_name instead of mlflow_model if you want to use a model from the huggingface hub + mlflow_model: ${{parent.inputs.mlflow_model_path}} + # model_name: ${{parent.inputs.model_name}} + + # data + training_data: ${{parent.inputs.training_data}} + validation_data: ${{parent.inputs.validation_data}} + + # Finetuning args + image_width: -1 + image_height: -1 + apply_augmentations: True + number_of_workers: 8 + apply_deepspeed: False + deepspeed_config: ${{parent.inputs.ds_finetune}} + apply_ort: False + auto_find_batch_size: False + extra_optim_args: "" + precision: 32 + random_seed: 42 + evaluation_strategy: epoch + evaluation_steps: 500 + logging_strategy: epoch + logging_steps: 500 + save_strategy: epoch + save_steps: 500 + save_total_limit: -1 + early_stopping: False + early_stopping_patience: 1 + resume_from_checkpoint: False + save_as_mlflow_model: True + # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values. + # metric_for_best_model: accuracy + # number_of_epochs: 15 + # max_steps: -1 + # training_batch_size: 4 + # validation_batch_size: 4 + # learning_rate: 5e-5 + # learning_rate_scheduler: warmup_linear + # warmup_steps: 0 + # optimizer: adamw_hf + # weight_decay: 0.0 + # gradient_accumulation_step: 1 + # label_smoothing_factor: 0.0 + # max_grad_norm: 1.0 + + outputs: + mlflow_model_folder: ${{parent.outputs.trained_model}} diff --git a/cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.sh b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.sh new file mode 100644 index 0000000000..25cae922c6 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.sh @@ -0,0 +1,174 @@ +#!/bin/bash +set -x + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +compute_cluster_model_import="sample-model-import-cluster" +compute_cluster_finetune="sample-finetune-cluster-gpu" +# If above compute cluster does not exist, create it with the following vm size +compute_model_import_sku="Standard_D12" +compute_finetune_sku="STANDARD_NC6s_v3" + +# This is the number of GPUs in a single node of the selected 'vm_size' compute. +# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train. +# Setting this to more than the number of GPUs will result in an error. +gpus_per_node=1 + +# huggingFace model +huggingface_model_name="microsoft/beit-base-patch16-224-pt22k-ft22k" +# This is the foundation model for finetuning from azureml system registry +aml_registry_model_name="microsoft-beit-base-patch16-224-pt22k-ft22k" +model_label="latest" + +version=$(date +%s) +finetuned_huggingface_model_name="microsoft-beit-base-patch16-224-pt22k-ft22k-fridge-objects-multiclass-classification" +huggingface_endpoint_name="hf-mc-fridge-items-$version" +deployment_sku="Standard_DS3_V2" + +# Deepspeed config +ds_finetune="./deepspeed_configs/zero1.json" + +# Scoring file +huggingface_sample_request_data="./huggingface_sample_request_data.json" + +# finetuning job parameters +finetuning_pipeline_component="transformers_image_classification_pipeline" +# Training settings +process_count_per_instance=$gpus_per_node # set to the number of GPUs available in the compute + +# 1. Install dependencies +pip install azure-ai-ml==1.8.0 +pip install azure-identity==1.13.0 + +# 2. Setup pre-requisites +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# Check if $compute_cluster_model_import exists, else create it +if az ml compute show --name $compute_cluster_model_import $workspace_info +then + echo "Compute cluster $compute_cluster_model_import already exists" +else + echo "Creating compute cluster $compute_cluster_model_import" + az ml compute create --name $compute_cluster_model_import --type amlcompute --min-instances 0 --max-instances 2 --size $compute_model_import_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_model_import" + exit 1 + } +fi + +# Check if $compute_cluster_finetune exists, else create it +if az ml compute show --name $compute_cluster_finetune $workspace_info +then + echo "Compute cluster $compute_cluster_finetune already exists" +else + echo "Creating compute cluster $compute_cluster_finetune" + az ml compute create --name $compute_cluster_finetune --type amlcompute --min-instances 0 --max-instances 2 --size $compute_finetune_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_finetune" + exit 1 + } +fi + +# Check if the finetuning pipeline component exists +if ! az ml component show --name $finetuning_pipeline_component --label latest --registry-name $registry_name +then + echo "Finetuning pipeline component $finetuning_pipeline_component does not exist" + exit 1 +fi + +# 3. Check if the model exists in the registry +# need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $aml_registry_model_name --label $model_label --registry-name $registry_name +then + echo "Model $aml_registry_model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi + +# Get the latest model version +model_version=$(az ml model show --name $aml_registry_model_name --label $model_label --registry-name $registry_name --query version --output tsv) + +# 4. Prepare data +python prepare_data.py --subscription $subscription_id --group $resource_group_name --workspace $workspace_name +# training data +train_data="./data/training-mltable-folder" +# validation data +validation_data="./data/validation-mltable-folder" + +# Check if training data, validation data exist +if [ ! -d $train_data ]; then + echo "Training data $train_data does not exist" + exit 1 +fi +if [ ! -d $validation_data ]; then + echo "Validation data $validation_data does not exist" + exit 1 +fi + +# 5. Submit finetuning job using pipeline.yaml for a HuggingFace Transformers model + +# # If you want to use a HuggingFace model, specify the inputs.model_name instead of inputs.mlflow_model_path.path like below +# inputs.model_name=$huggingface_model_name + +huggingface_parent_job_name=$( az ml job create \ + --file "./hftransformers-fridgeobjects-multiclass-classification-pipeline.yaml" \ + $workspace_info \ + --query name -o tsv \ + --set jobs.huggingface_transformers_model_finetune_job.component="azureml://registries/$registry_name/components/$finetuning_pipeline_component/labels/latest" \ + inputs.mlflow_model_path.path="azureml://registries/$registry_name/models/$aml_registry_model_name/versions/$model_version" \ + inputs.training_data.path=$train_data \ + inputs.validation_data.path=$validation_data \ + inputs.compute_model_import=$compute_cluster_model_import \ + inputs.compute_finetune=$compute_cluster_finetune + ) || { + echo "Failed to submit finetuning job" + exit 1 + } + +az ml job stream --name $huggingface_parent_job_name $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Create model in workspace from train job output for fine-tuned HuggingFace Transformers model +az ml model create --name $finetuned_huggingface_model_name --version $version --type mlflow_model \ + --path azureml://jobs/$huggingface_parent_job_name/outputs/trained_model $workspace_info || { + echo "model create in workspace failed"; exit 1; +} + +# 7. Deploy the fine-tuned HuggingFace Transformers model to an endpoint +# Create online endpoint +az ml online-endpoint create --name $huggingface_endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml online-deployment create --file ./deploy.yaml $workspace_info --all-traffic --set \ + endpoint_name=$huggingface_endpoint_name model=azureml:$finetuned_huggingface_model_name:$version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 8. Try a sample scoring request on the deployed HuggingFace Transformers model + +# Check if scoring data file exists +if [ -f $huggingface_sample_request_data ]; then + echo "Invoking endpoint $huggingface_endpoint_name with $huggingface_sample_request_data\n\n" +else + echo "Scoring file $huggingface_sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $huggingface_endpoint_name --request-file $huggingface_sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 9. Delete the endpoint +az ml online-endpoint delete --name $huggingface_endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +# 10. Delete the request data file + +rm $huggingface_sample_request_data diff --git a/cli/foundation-models/system/finetune/image-classification/multiclass-classification/prepare_data.py b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/prepare_data.py new file mode 100644 index 0000000000..b2728d73f3 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/prepare_data.py @@ -0,0 +1,191 @@ +import argparse +import base64 +import json +import os +import urllib +from zipfile import ZipFile + +from azure.identity import DefaultAzureCredential +from azure.ai.ml import MLClient +from azure.ai.ml.entities import Data +from azure.ai.ml.constants import AssetTypes + + +def create_ml_table_file(filename): + """Create ML Table definition""" + + return ( + "paths:\n" + " - file: ./{0}\n" + "transformations:\n" + " - read_json_lines:\n" + " encoding: utf8\n" + " invalid_lines: error\n" + " include_path_column: false\n" + " - convert_column_types:\n" + " - columns: image_url\n" + " column_type: stream_info" + ).format(filename) + + +def save_ml_table_file(output_path, mltable_file_contents): + with open(os.path.join(output_path, "MLTable"), "w") as f: + f.write(mltable_file_contents) + + +def create_jsonl_and_mltable_files(uri_folder_data_path, dataset_dir): + print("Creating jsonl files") + + dataset_parent_dir = os.path.dirname(dataset_dir) + + # We will copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # Create MLTable folders, if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + train_validation_ratio = 5 + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Baseline of json line dictionary + json_line_sample = {"image_url": uri_folder_data_path, "label": ""} + + index = 0 + # Scan each sub directary and generate a jsonl line per image, distributed on train and valid JSONL files + with open(train_annotations_file, "w") as train_f: + with open(validation_annotations_file, "w") as validation_f: + for class_name in os.listdir(dataset_dir): + sub_dir = os.path.join(dataset_dir, class_name) + if not os.path.isdir(sub_dir): + continue + + # Scan each sub directary + print(f"Parsing {sub_dir}") + for image in os.listdir(sub_dir): + json_line = dict(json_line_sample) + json_line["image_url"] += f"{class_name}/{image}" + json_line["label"] = class_name + + if index % train_validation_ratio == 0: + # Validation annotation + validation_f.write(json.dumps(json_line) + "\n") + else: + # Train annotation + train_f.write(json.dumps(json_line) + "\n") + index += 1 + print("done") + + # Create and save train mltable + train_mltable_file_contents = create_ml_table_file( + os.path.basename(train_annotations_file) + ) + save_ml_table_file(training_mltable_path, train_mltable_file_contents) + + # Create and save validation mltable + validation_mltable_file_contents = create_ml_table_file( + os.path.basename(validation_annotations_file) + ) + save_ml_table_file(validation_mltable_path, validation_mltable_file_contents) + + +def upload_data_and_create_jsonl_mltable_files(ml_client, dataset_parent_dir): + # Create directory, if it does not exist + os.makedirs(dataset_parent_dir, exist_ok=True) + + # Download data + print("Downloading data.") + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip" + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + # Get the name of zip file + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download data from public url + urllib.request.urlretrieve(download_url, filename=data_file) + + # Extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # Delete zip file + os.remove(data_file) + + # Upload data and create a data asset URI folder + print("Uploading data to blob storage") + my_data = Data( + path=dataset_dir, + type=AssetTypes.URI_FOLDER, + description="Fridge-items images", + name="fridge-items-images-2", + ) + + uri_folder_data_asset = ml_client.data.create_or_update(my_data) + + print(uri_folder_data_asset) + print("") + print("Path to folder in Blob Storage:") + print(uri_folder_data_asset.path) + create_jsonl_and_mltable_files( + uri_folder_data_path=uri_folder_data_asset.path, dataset_dir=dataset_dir + ) + + +def read_image(image_path): + with open(image_path, "rb") as f: + return f.read() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Prepare data for image classification" + ) + + parser.add_argument("--subscription", type=str, help="Subscription ID") + parser.add_argument("--group", type=str, help="Resource group name") + parser.add_argument("--workspace", type=str, help="Workspace name") + parser.add_argument( + "--data_path", type=str, default="./data", help="Dataset location" + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + credential = DefaultAzureCredential() + ml_client = None + subscription_id = args.subscription + resource_group = args.group + workspace = args.workspace + ml_client = MLClient(credential, subscription_id, resource_group, workspace) + + upload_data_and_create_jsonl_mltable_files( + ml_client=ml_client, dataset_parent_dir=args.data_path + ) + + sample_image = os.path.join( + args.data_path, "fridgeObjects", "milk_bottle", "99.jpg" + ) + huggingface_request_json = { + "input_data": { + "columns": ["image"], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + huggingface_request_file_name = "huggingface_sample_request_data.json" + with open(huggingface_request_file_name, "w") as huggingface_request_file: + json.dump(huggingface_request_json, huggingface_request_file) diff --git a/cli/foundation-models/system/finetune/image-classification/multiclass-classification/readme.md b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/readme.md new file mode 100644 index 0000000000..b14e0b8e69 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multiclass-classification/readme.md @@ -0,0 +1,14 @@ +# Fine-tuning a model for Image Multi-class Classification task + +You can launch a sample pipeline for image multi-class classification using `transformers_image_classification_pipeline` component. + +For using this component, run the shell script file `bash ./hftransformers-fridgeobjects-multiclass-classification.sh`. + +Currently following models are supported: +| Model Name | Source | +| ------ | ---------- | +| [microsoft-beit-base-patch16-224-pt22k-ft22k](https://ml.azure.com/registries/azureml/models/microsoft-beit-base-patch16-224-pt22k-ft22k/version/5) | azureml registry | +| [microsoft-swinv2-base-patch4-window12-192-22k](https://ml.azure.com/registries/azureml/models/microsoft-swinv2-base-patch4-window12-192-22k/version/5) | azureml registry | +| [facebook-deit-base-patch16-224](https://ml.azure.com/registries/azureml/models/facebook-deit-base-patch16-224/version/5) | azureml registry | +| [google-vit-base-patch16-224](https://ml.azure.com/registries/azureml/models/google-vit-base-patch16-224/version/5) | azureml registry | +| [Image classification models from Huggingface's Transformer library](https://huggingface.co/models?pipeline_tag=image-classification&library=transformers)| HuggingFace | diff --git a/cli/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/cli/foundation-models/system/finetune/image-classification/multilabel-classification/deploy.yaml b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/deploy.yaml new file mode 100644 index 0000000000..6553e7943e --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/deploy.yaml @@ -0,0 +1,11 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 \ No newline at end of file diff --git a/cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification-pipeline.yaml b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification-pipeline.yaml new file mode 100644 index 0000000000..f93760e612 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification-pipeline.yaml @@ -0,0 +1,99 @@ +$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json +type: pipeline + +experiment_name: AzureML-Cli-Train-Finetune-Vision-MultiLabel-Samples + +inputs: + # # Model - specify the foundation model available in the azureml system registry + mlflow_model_path: + path: azureml://registries/azureml/models/google-vit-base-patch16-224/versions/5 + type: mlflow_model + # model_name: microsoft/beit-base-patch16-224-pt22k-ft22k + # dataset files + training_data: + path: ./data/training-mltable-folder + type: mltable + validation_data: + path: ./data/validation-mltable-folder + type: mltable + # deepspeed config file + ds_finetune: + path: ./deepspeed_configs/zero1.json + type: uri_file + # compute + compute_model_import: sample-model-import-cluster + compute_finetune: sample-finetune-cluster-gpu + + +outputs: + # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint + trained_model: + type: mlflow_model + +settings: + force_rerun: true + default_compute: azureml:sample-finetune-cluster-gpu + +jobs: + huggingface_transformers_model_finetune_job: + type: pipeline + component: azureml://registries/azureml/components/image_classification_pipeline/labels/latest + inputs: + + # Compute + compute_model_import: ${{parent.inputs.compute_model_import}} + compute_finetune: ${{parent.inputs.compute_finetune}} + process_count_per_instance: 1 + instance_count: 1 + + # model + task_name: image-classification-multilabel + model_family: HuggingFaceImage + # # Specify the model_name instead of mlflow_model if you want to use a model from the huggingface hub + mlflow_model: ${{parent.inputs.mlflow_model_path}} + # model_name: ${{parent.inputs.model_name}} + + # data + training_data: ${{parent.inputs.training_data}} + validation_data: ${{parent.inputs.validation_data}} + + # Finetuning args + image_width: -1 + image_height: -1 + apply_augmentations: True + number_of_workers: 8 + apply_deepspeed: False + deepspeed_config: ${{parent.inputs.ds_finetune}} + apply_ort: False + auto_find_batch_size: False + extra_optim_args: "" + precision: 32 + random_seed: 42 + evaluation_strategy: epoch + evaluation_steps: 500 + logging_strategy: epoch + logging_steps: 500 + save_strategy: epoch + save_steps: 500 + save_total_limit: -1 + early_stopping: False + early_stopping_patience: 1 + resume_from_checkpoint: False + save_as_mlflow_model: True + # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values. + # metric_for_best_model: iou + # number_of_epochs: 15 + # max_steps: -1 + # training_batch_size: 4 + # validation_batch_size: 4 + # learning_rate: 5e-5 + # learning_rate_scheduler: warmup_linear + # warmup_steps: 0 + # optimizer: adamw_hf + # weight_decay: 0.0 + # gradient_accumulation_step: 1 + # label_smoothing_factor: 0.0 + # max_grad_norm: 1.0 + + outputs: + mlflow_model_folder: ${{parent.outputs.trained_model}} \ No newline at end of file diff --git a/cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.sh b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.sh new file mode 100644 index 0000000000..6437aaf971 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.sh @@ -0,0 +1,175 @@ +#!/bin/bash +set -x + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +compute_cluster_model_import="sample-model-import-cluster" +compute_cluster_finetune="sample-finetune-cluster-gpu" +# If above compute cluster does not exist, create it with the following vm size +compute_model_import_sku="Standard_D12" +compute_finetune_sku="STANDARD_NC6s_v3" + +# This is the number of GPUs in a single node of the selected 'vm_size' compute. +# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train. +# Setting this to more than the number of GPUs will result in an error. +gpus_per_node=1 + +# HuggingFace model +huggingface_model_name="microsoft/beit-base-patch16-224-pt22k-ft22k" +# This is the foundation model for finetuning from azureml system registry +aml_registry_model_name="microsoft-beit-base-patch16-224-pt22k-ft22k" +model_label="latest" + +version=$(date +%s) +finetuned_huggingface_model_name="microsoft-beit-base-patch16-224-pt22k-ft22k-fridge-objects-multilabel-classification" +huggingface_endpoint_name="hf-ml-fridge-items-$version" +deployment_sku="Standard_DS3_V2" + +# Deepspeed config +ds_finetune="./deepspeed_configs/zero1.json" + +# Scoring file +huggingface_sample_request_data="./huggingface_sample_request_data.json" + +# finetuning job parameters +finetuning_pipeline_component="transformers_image_classification_pipeline" + +# Training settings +process_count_per_instance=$gpus_per_node # set to the number of GPUs available in the compute + +# 1. Install dependencies +pip install azure-ai-ml==1.8.0 +pip install azure-identity==1.13.0 + +# 2. Setup pre-requisites +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# Check if $compute_cluster_model_import exists, else create it +if az ml compute show --name $compute_cluster_model_import $workspace_info +then + echo "Compute cluster $compute_cluster_model_import already exists" +else + echo "Creating compute cluster $compute_cluster_model_import" + az ml compute create --name $compute_cluster_model_import --type amlcompute --min-instances 0 --max-instances 2 --size $compute_model_import_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_model_import" + exit 1 + } +fi + +# Check if $compute_cluster_finetune exists, else create it +if az ml compute show --name $compute_cluster_finetune $workspace_info +then + echo "Compute cluster $compute_cluster_finetune already exists" +else + echo "Creating compute cluster $compute_cluster_finetune" + az ml compute create --name $compute_cluster_finetune --type amlcompute --min-instances 0 --max-instances 2 --size $compute_finetune_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_finetune" + exit 1 + } +fi + +# Check if the finetuning pipeline component exists +if ! az ml component show --name $finetuning_pipeline_component --label latest --registry-name $registry_name +then + echo "Finetuning pipeline component $finetuning_pipeline_component does not exist" + exit 1 +fi + +# 3. Check if the model exists in the registry +# Need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $aml_registry_model_name --label $model_label --registry-name $registry_name +then + echo "Model $aml_registry_model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi + +# Get the latest model version +model_version=$(az ml model show --name $aml_registry_model_name --label $model_label --registry-name $registry_name --query version --output tsv) + +# 4. Prepare data +python prepare_data.py --subscription $subscription_id --group $resource_group_name --workspace $workspace_name +# training data +train_data="./data/training-mltable-folder" +# validation data +validation_data="./data/validation-mltable-folder" + +# Check if training data, validation data exist +if [ ! -d $train_data ]; then + echo "Training data $train_data does not exist" + exit 1 +fi +if [ ! -d $validation_data ]; then + echo "Validation data $validation_data does not exist" + exit 1 +fi + +# 5. Submit finetuning job using pipeline.yaml for a HuggingFace Transformers model + +# # If you want to use a HuggingFace model, specify the inputs.model_name instead of inputs.mlflow_model_path.path like below +# inputs.model_name=$huggingface_model_name + +huggingface_parent_job_name=$( az ml job create \ + --file "./hftransformers-fridgeobjects-multilabel-classification-pipeline.yaml" \ + $workspace_info \ + --query name -o tsv \ + --set jobs.huggingface_transformers_model_finetune_job.component="azureml://registries/$registry_name/components/$finetuning_pipeline_component/labels/latest" \ + inputs.mlflow_model_path.path="azureml://registries/$registry_name/models/$aml_registry_model_name/versions/$model_version" \ + inputs.training_data.path=$train_data \ + inputs.validation_data.path=$validation_data \ + inputs.compute_model_import=$compute_cluster_model_import \ + inputs.compute_finetune=$compute_cluster_finetune + ) || { + echo "Failed to submit finetuning job" + exit 1 + } + +az ml job stream --name $huggingface_parent_job_name $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Create model in workspace from train job output for fine-tuned HuggingFace Transformers model +az ml model create --name $finetuned_huggingface_model_name --version $version --type mlflow_model \ + --path azureml://jobs/$huggingface_parent_job_name/outputs/trained_model $workspace_info || { + echo "model create in workspace failed"; exit 1; +} + +# 7. Deploy the fine-tuned HuggingFace Transformers model to an endpoint +# Create online endpoint +az ml online-endpoint create --name $huggingface_endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml online-deployment create --file ./deploy.yaml $workspace_info --all-traffic --set \ + endpoint_name=$huggingface_endpoint_name model=azureml:$finetuned_huggingface_model_name:$version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 8. Try a sample scoring request on the deployed HuggingFace Transformers model + +# Check if scoring data file exists +if [ -f $huggingface_sample_request_data ]; then + echo "Invoking endpoint $huggingface_endpoint_name with $huggingface_sample_request_data\n\n" +else + echo "Scoring file $huggingface_sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $huggingface_endpoint_name --request-file $huggingface_sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 9. Delete the endpoint +az ml online-endpoint delete --name $huggingface_endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +# 10. Delete the request data file + +rm $huggingface_sample_request_data diff --git a/cli/foundation-models/system/finetune/image-classification/multilabel-classification/prepare_data.py b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/prepare_data.py new file mode 100644 index 0000000000..074a7a3aae --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/prepare_data.py @@ -0,0 +1,194 @@ +import argparse +import base64 +import json +import os +import urllib +from zipfile import ZipFile + +from azure.identity import DefaultAzureCredential +from azure.ai.ml import MLClient +from azure.ai.ml.entities import Data +from azure.ai.ml.constants import AssetTypes + + +def create_ml_table_file(filename): + """Create ML Table definition""" + + return ( + "paths:\n" + " - file: ./{0}\n" + "transformations:\n" + " - read_json_lines:\n" + " encoding: utf8\n" + " invalid_lines: error\n" + " include_path_column: false\n" + " - convert_column_types:\n" + " - columns: image_url\n" + " column_type: stream_info" + ).format(filename) + + +def save_ml_table_file(output_path, mltable_file_contents): + with open(os.path.join(output_path, "MLTable"), "w") as f: + f.write(mltable_file_contents) + + +def create_jsonl_and_mltable_files(uri_folder_data_path, dataset_dir): + print("Creating jsonl files") + + dataset_parent_dir = os.path.dirname(dataset_dir) + + # We will copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # Create MLTable folders, if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + train_validation_ratio = 5 + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Path to the labels file. + label_file = os.path.join(dataset_dir, "labels.csv") + + # Baseline of json line dictionary + json_line_sample = {"image_url": uri_folder_data_path, "label": ""} + + index = 0 + # Read each annotation and convert it to jsonl line + with open(train_annotations_file, "w") as train_f: + with open(validation_annotations_file, "w") as validation_f: + with open(label_file, "r") as labels: + for i, line in enumerate(labels): + # Skipping the title line and any empty lines. + if i == 0 or len(line.strip()) == 0: + continue + line_split = line.strip().split(",") + if len(line_split) != 2: + print("Skipping the invalid line: {}".format(line)) + continue + json_line = dict(json_line_sample) + json_line["image_url"] += f"images/{line_split[0]}" + json_line["label"] = line_split[1].strip().split(" ") + + if i % train_validation_ratio == 0: + # Validation annotation + validation_f.write(json.dumps(json_line) + "\n") + else: + # Train annotation + train_f.write(json.dumps(json_line) + "\n") + print("done") + + # Create and save train mltable + train_mltable_file_contents = create_ml_table_file( + os.path.basename(train_annotations_file) + ) + save_ml_table_file(training_mltable_path, train_mltable_file_contents) + + # Create and save validation mltable + validation_mltable_file_contents = create_ml_table_file( + os.path.basename(validation_annotations_file) + ) + save_ml_table_file(validation_mltable_path, validation_mltable_file_contents) + + +def upload_data_and_create_jsonl_mltable_files(ml_client, dataset_parent_dir): + # Create directory, if it does not exist + os.makedirs(dataset_parent_dir, exist_ok=True) + + # Download data + print("Downloading data.") + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip" + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + # Get the name of zip file + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download data from public url + urllib.request.urlretrieve(download_url, filename=data_file) + + # Extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # Delete zip file + os.remove(data_file) + + # Upload data and create a data asset URI folder + print("Uploading data to blob storage") + my_data = Data( + path=dataset_dir, + type=AssetTypes.URI_FOLDER, + description="Fridge-items images", + name="fridge-items-images-2", + ) + + uri_folder_data_asset = ml_client.data.create_or_update(my_data) + + print(uri_folder_data_asset) + print("") + print("Path to folder in Blob Storage:") + print(uri_folder_data_asset.path) + create_jsonl_and_mltable_files( + uri_folder_data_path=uri_folder_data_asset.path, dataset_dir=dataset_dir + ) + + +def read_image(image_path): + with open(image_path, "rb") as f: + return f.read() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Prepare data for image classification" + ) + + parser.add_argument("--subscription", type=str, help="Subscription ID") + parser.add_argument("--group", type=str, help="Resource group name") + parser.add_argument("--workspace", type=str, help="Workspace name") + parser.add_argument( + "--data_path", type=str, default="./data", help="Dataset location" + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + credential = DefaultAzureCredential() + ml_client = None + subscription_id = args.subscription + resource_group = args.group + workspace = args.workspace + ml_client = MLClient(credential, subscription_id, resource_group, workspace) + + upload_data_and_create_jsonl_mltable_files( + ml_client=ml_client, dataset_parent_dir=args.data_path + ) + + sample_image = os.path.join( + args.data_path, "multilabelFridgeObjects", "images", "56.jpg" + ) + huggingface_request_json = { + "input_data": { + "columns": ["image"], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + huggingface_request_file_name = "huggingface_sample_request_data.json" + with open(huggingface_request_file_name, "w") as huggingface_request_file: + json.dump(huggingface_request_json, huggingface_request_file) diff --git a/cli/foundation-models/system/finetune/image-classification/multilabel-classification/readme.md b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/readme.md new file mode 100644 index 0000000000..c37ad831ef --- /dev/null +++ b/cli/foundation-models/system/finetune/image-classification/multilabel-classification/readme.md @@ -0,0 +1,14 @@ +# Fine-tuning a model for Image Multi-label Classification task + +You can launch a sample pipeline for image multi-label classification using `transformers_image_classification_pipeline` component. + +For using this component, run the shell script file `bash ./hftransformers-fridgeobjects-multilabel-classification.sh`. + +Currently following models are supported: +| Model Name | Source | +| ------ | ---------- | +| [microsoft-beit-base-patch16-224-pt22k-ft22k](https://ml.azure.com/registries/azureml/models/microsoft-beit-base-patch16-224-pt22k-ft22k/version/5) | azureml registry | +| [microsoft-swinv2-base-patch4-window12-192-22k](https://ml.azure.com/registries/azureml/models/microsoft-swinv2-base-patch4-window12-192-22k/version/5) | azureml registry | +| [facebook-deit-base-patch16-224](https://ml.azure.com/registries/azureml/models/facebook-deit-base-patch16-224/version/5) | azureml registry | +| [google-vit-base-patch16-224](https://ml.azure.com/registries/azureml/models/google-vit-base-patch16-224/version/5) | azureml registry | +| [Image classification models from Huggingface's Transformer library](https://huggingface.co/models?pipeline_tag=image-classification&library=transformers)| HuggingFace | diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json b/cli/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/deploy.yaml b/cli/foundation-models/system/finetune/image-instance-segmentation/deploy.yaml new file mode 100644 index 0000000000..6553e7943e --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/deploy.yaml @@ -0,0 +1,11 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 \ No newline at end of file diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py b/cli/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py new file mode 100644 index 0000000000..d48579ff64 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py @@ -0,0 +1,227 @@ +import argparse +import os +import json +import numpy as np +import PIL.Image as Image +import xml.etree.ElementTree as ET + +from simplification.cutil import simplify_coords +from skimage import measure + + +def convert_mask_to_polygon( + mask, + max_polygon_points=100, + score_threshold=0.5, + max_refinement_iterations=25, + edge_safety_padding=1, +): + """Convert a numpy mask to a polygon outline in normalized coordinates. + + :param mask: Pixel mask, where each pixel has an object (float) score in [0, 1], in size ([1, height, width]) + :type: mask: + :param max_polygon_points: Maximum number of (x, y) coordinate pairs in polygon + :type: max_polygon_points: Int + :param score_threshold: Score cutoff for considering a pixel as in object. + :type: score_threshold: Float + :param max_refinement_iterations: Maximum number of times to refine the polygon + trying to reduce the number of pixels to meet max polygon points. + :type: max_refinement_iterations: Int + :param edge_safety_padding: Number of pixels to pad the mask with + :type edge_safety_padding: Int + :return: normalized polygon coordinates + :rtype: list of list + """ + # Convert to numpy bitmask + mask = mask[0] + mask_array = np.array((mask > score_threshold), dtype=np.uint8) + image_shape = mask_array.shape + + # Pad the mask to avoid errors at the edge of the mask + embedded_mask = np.zeros( + ( + image_shape[0] + 2 * edge_safety_padding, + image_shape[1] + 2 * edge_safety_padding, + ), + dtype=np.uint8, + ) + embedded_mask[ + edge_safety_padding : image_shape[0] + edge_safety_padding, + edge_safety_padding : image_shape[1] + edge_safety_padding, + ] = mask_array + + # Find Image Contours + contours = measure.find_contours(embedded_mask, 0.5) + simplified_contours = [] + + for contour in contours: + + # Iteratively reduce polygon points, if necessary + if max_polygon_points is not None: + simplify_factor = 0 + while ( + len(contour) > max_polygon_points + and simplify_factor < max_refinement_iterations + ): + contour = simplify_coords(contour, simplify_factor) + simplify_factor += 1 + + # Convert to [x, y, x, y, ....] coordinates and correct for padding + unwrapped_contour = [0] * (2 * len(contour)) + unwrapped_contour[::2] = np.ceil(contour[:, 1]) - edge_safety_padding + unwrapped_contour[1::2] = np.ceil(contour[:, 0]) - edge_safety_padding + + simplified_contours.append(unwrapped_contour) + + return _normalize_contour(simplified_contours, image_shape) + + +def _normalize_contour(contours, image_shape): + + height, width = image_shape[0], image_shape[1] + + for contour in contours: + contour[::2] = [x * 1.0 / width for x in contour[::2]] + contour[1::2] = [y * 1.0 / height for y in contour[1::2]] + + return contours + + +def binarise_mask(mask_fname): + + mask = Image.open(mask_fname) + mask = np.array(mask) + # instances are encoded as different colors + obj_ids = np.unique(mask) + # first id is the background, so remove it + obj_ids = obj_ids[1:] + + # split the color-encoded mask into a set of binary masks + binary_masks = mask == obj_ids[:, None, None] + return binary_masks + + +def parsing_mask(mask_fname): + + # For this particular dataset, initially each mask was merged (based on binary mask of each object) + # in the order of the bounding boxes described in the corresponding PASCAL VOC annotation file. + # Therefore, we have to extract each binary mask which is in the order of objects in the annotation file. + # https://github.com/microsoft/computervision-recipes/blob/master/utils_cv/detection/dataset.py + binary_masks = binarise_mask(mask_fname) + polygons = [] + for bi_mask in binary_masks: + + if len(bi_mask.shape) == 2: + bi_mask = bi_mask[np.newaxis, :] + polygon = convert_mask_to_polygon(bi_mask) + polygons.append(polygon) + + return polygons + + +def convert_mask_in_VOC_to_jsonl(dataset_dir: str, remote_path: str) -> None: + """ + :param dataset_dir: Path to dataset directory, where user has images and anotations + :type: dataset_dir: String + :param remote_path: Remote path for dataset + :type: remote_path: String + """ + + dataset_parent_dir = os.path.dirname(dataset_dir) + print(dataset_dir, dataset_parent_dir) + + # We will copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # Create the folders if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + train_validation_ratio = 5 + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Path to the annotations + annotations_folder = os.path.join(dataset_dir, "annotations") + mask_folder = os.path.join(dataset_dir, "segmentation-masks") + + # Sample json line dictionary + json_line_sample = { + "image_url": remote_path, + "image_details": {"format": None, "width": None, "height": None}, + "label": [], + } + + # Read each annotation and convert it to jsonl line + with open(train_annotations_file, "w") as train_f: + with open(validation_annotations_file, "w") as validation_f: + for i, filename in enumerate(os.listdir(annotations_folder)): + if not filename.endswith(".xml"): + print(f"Skipping unknown file: {filename}") + continue + + annotation_file_path = os.path.join(annotations_folder, filename) + print(f"Parsing {annotation_file_path}") + + root = ET.parse(annotation_file_path).getroot() + width = int(root.find("size/width").text) + height = int(root.find("size/height").text) + + # Convert mask into polygon + mask_fname = os.path.join(mask_folder, filename[:-4] + ".png") + polygons = parsing_mask(mask_fname) + + labels = [] + for index, object in enumerate(root.findall("object")): + name = object.find("name").text + isCrowd = int(object.find("difficult").text) + labels.append( + { + "label": name, + "bbox": "null", + "isCrowd": isCrowd, + "polygon": polygons[index], + } + ) + + # Build the jsonl file + image_filename = root.find("filename").text + _, file_extension = os.path.splitext(image_filename) + json_line = dict(json_line_sample) + json_line["image_url"] = ( + json_line["image_url"] + "images/" + image_filename + ) + json_line["image_details"]["format"] = file_extension[1:] + json_line["image_details"]["width"] = width + json_line["image_details"]["height"] = height + json_line["label"] = labels + + if i % train_validation_ratio == 0: + # Validation annotation + validation_f.write(json.dumps(json_line) + "\n") + else: + # Train annotation + train_f.write(json.dumps(json_line) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(allow_abbrev=False) + parser.add_argument( + "--data_path", + type=str, + help="The directory contains images, annotations, and masks.", + ) + + args, remaining_args = parser.parse_known_args() + data_path = args.data_path + + convert_mask_in_VOC_to_jsonl(data_path, None) diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation-pipeline.yaml b/cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation-pipeline.yaml new file mode 100644 index 0000000000..d4d1adbb47 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation-pipeline.yaml @@ -0,0 +1,100 @@ +$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json +type: pipeline + +experiment_name: AzureML-Cli-Train-Finetune-Vision-IS-Samples + +inputs: + # dataset files + training_data: + type: mltable + + validation_data: + type: mltable + + # deepspeed config file + ds_finetune: + path: deepspeed_configs/zero1.json + type: uri_file + # compute + compute_model_import: sample-model-import-cluster + compute_finetune: sample-finetune-cluster-gpu + # model_name: microsoft/beit-base-patch16-224 + # # Model - specify the foundation model available in the azureml system registry + mlflow_model: + path: azureml://registries/azureml/models/mask_rcnn_swin-t-p4-w7_fpn_1x_coco/versions/3 + type: mlflow_model + +outputs: + # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint + trained_model: + type: mlflow_model + +settings: + force_rerun: true + default_compute: azureml:sample-finetune-cluster-gpu + +jobs: + mmdetection_model_finetune_job: + type: pipeline + component: azureml://registries/azureml/components/mmdetection_image_objectdetection_instancesegmentation_pipeline/labels/latest + + inputs: + + # Compute + compute_model_import: ${{parent.inputs.compute_model_import}} + compute_finetune: ${{parent.inputs.compute_finetune}} + instance_count: 1 + process_count_per_instance: 1 + + # Model import args + task_name: image-instance-segmentation + # model_name: ${{parent.inputs.model_name}} + # pytorch_model: ${{parent.inputs.pytorch_model}} + mlflow_model: ${{parent.inputs.mlflow_model}} + model_family: MmDetectionImage + + # Data + training_data: ${{parent.inputs.training_data}} + validation_data: ${{parent.inputs.validation_data}} + + # Finetuning parameters + apply_augmentations: True + number_of_workers: 8 + apply_deepspeed: False + deepspeed_config: ${{parent.inputs.ds_finetune}} + apply_ort: False + auto_find_batch_size: False + extra_optim_args: "" + precision: 32 + random_seed: 42 + evaluation_strategy: epoch + evaluation_steps: 500 + logging_strategy: epoch + logging_steps: 500 + save_strategy: epoch + save_steps: 500 + save_total_limit: -1 + early_stopping: False + early_stopping_patience: 1 + resume_from_checkpoint: False + save_as_mlflow_model: True + # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values. + # image_min_size: -1 + # image_max_size: -1 + # metric_for_best_model: mean_average_precision + # number_of_epochs: 15 + # max_steps: -1 + # training_batch_size: 4 + # validation_batch_size: 4 + # learning_rate: 5e-5 + # learning_rate_scheduler: warmup_linear + # warmup_steps: 0 + # optimizer: adamw_hf + # weight_decay: 0.0 + # gradient_accumulation_step: 1 + # max_grad_norm: 1.0 + # iou_threshold: 0.5 + # box_score_threshold: 0.3 + + outputs: + mlflow_model_folder: ${{parent.outputs.trained_model}} diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.sh b/cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.sh new file mode 100644 index 0000000000..6c7814c383 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.sh @@ -0,0 +1,179 @@ +set -x +# the commands in this file map to steps in this notebook: https://aka.ms/azureml-ft-sdk-mmd-image-instance-segmentation +# the data files are available in the same folder as the above notebook + +# script inputs +registry_name="azureml" + +subscription_id="" +resource_group_name="" +workspace_name="" + +compute_cluster_model_import="sample-model-import-cluster" +compute_cluster_finetune="sample-finetune-cluster-gpu" +# If above compute cluster does not exist, create it with the following vm size +compute_model_import_sku="Standard_D12" +compute_finetune_sku="Standard_NC6s_v3" + +# This is the number of GPUs in a single node of the selected 'vm_size' compute. +# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train. +# Setting this to more than the number of GPUs will result in an error. +gpus_per_node=1 + +# This is the foundation model for finetuning +mmdetection_model_name="mask_rcnn_swin-t-p4-w7_fpn_1x_coco" +model_label="latest" + +version=$(date +%s) +finetuned_mmdetection_model_name="$mmdetection_model_name-fridge-is" +mmdetection_endpoint_name="mmd-is-fridge-items-$version" +deployment_sku="Standard_DS3_V2" + +# Deepspeed config +ds_finetune="./deepspeed_configs/zero1.json" + +# Scoring file +mmdetection_sample_request_data="./mmdetection_sample_request_data.json" + +# Finetuning job parameters +finetuning_pipeline_component="mmdetection_image_objectdetection_instancesegmentation_pipeline" + +# Training settings +process_count_per_instance=$gpus_per_node # set to the number of GPUs available in the compute + +# 1. Install dependencies +pip install azure-ai-ml==1.8.0 +pip install azure-identity==1.13.0 + +# 2. Setup pre-requisites +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# Check if $compute_cluster_model_import exists, else create it +if az ml compute show --name $compute_cluster_model_import $workspace_info +then + echo "Compute cluster $compute_cluster_model_import already exists" +else + echo "Creating compute cluster $compute_cluster_model_import" + az ml compute create --name $compute_cluster_model_import --type amlcompute --min-instances 0 --max-instances 2 --size $compute_model_import_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_model_import" + exit 1 + } +fi + +# Check if $compute_cluster_finetune exists, else create it +if az ml compute show --name $compute_cluster_finetune $workspace_info +then + echo "Compute cluster $compute_cluster_finetune already exists" +else + echo "Creating compute cluster $compute_cluster_finetune" + az ml compute create --name $compute_cluster_finetune --type amlcompute --min-instances 0 --max-instances 2 --size $compute_finetune_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_finetune" + exit 1 + } +fi + +# Check if the finetuning pipeline component exists +if ! az ml component show --name $finetuning_pipeline_component --label latest --registry-name $registry_name +then + echo "Finetuning pipeline component $finetuning_pipeline_component does not exist" + exit 1 +fi + +# # 3. Check if the model exists in the registry +# # need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $mmdetection_model_name --label $model_label --registry-name $registry_name +then + echo "Model $mmdetection_model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi +# get the latest model version +model_version=$(az ml model show --name $mmdetection_model_name --label $model_label --registry-name $registry_name --query version --output tsv) +# 4. Prepare data +python prepare_data.py --subscription $subscription_id --group $resource_group_name --workspace $workspace_name + +# training data +train_data="./data/training-mltable-folder" +# validation data +validation_data="./data/validation-mltable-folder" + +# Check if training data, validation data +if [ ! -d $train_data ] +then + echo "Training data $train_data does not exist" + exit 1 +fi + +if [ ! -d $validation_data ] +then + echo "Validation data $validation_data does not exist" + exit 1 +fi + +# 5. Submit finetuning job using pipeline.yaml for a open-mmlab mmdetection model + +# If you want to use a MMDetection model, specify the inputs.model_name instead of inputs.mlflow_model_path.path like below +# inputs.model_name="mask_rcnn_swin-t-p4-w7_fpn_1x_coco" + +mmdetection_parent_job_name=$( az ml job create \ + --file ./mmdetection-fridgeobjects-instance-segmentation-pipeline.yaml \ + $workspace_info \ + --query name -o tsv \ + --set \ + jobs.mmdetection_model_finetune_job.component="azureml://registries/$registry_name/components/$finetuning_pipeline_component/labels/latest" \ + inputs.compute_model_import=$compute_cluster_model_import \ + inputs.compute_finetune=$compute_cluster_finetune \ + inputs.mlflow_model.path="azureml://registries/$registry_name/models/$mmdetection_model_name/versions/$model_version" \ + inputs.training_data.path=$train_data \ + inputs.validation_data.path=$validation_data + ) || { + echo "Failed to submit finetuning job" + exit 1 + } + +az ml job stream --name $mmdetection_parent_job_name $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Create model in workspace from train job output for fine-tuned mmdetection model +az ml model create --name $finetuned_mmdetection_model_name --version $version --type mlflow_model \ + --path azureml://jobs/$mmdetection_parent_job_name/outputs/trained_model $workspace_info || { + echo "model create in workspace failed"; exit 1; +} + +# 7. Deploy the fine-tuned mmdetection model to an endpoint +# Create online endpoint +az ml online-endpoint create --name $mmdetection_endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy registered model to endpoint in workspace +az ml online-deployment create --file ./deploy.yaml $workspace_info --all-traffic --set \ + endpoint_name=$mmdetection_endpoint_name model=azureml:$finetuned_mmdetection_model_name:$version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 8. Try a sample scoring request on the deployed MMDetection model + +# Check if scoring data file exists +if [ -f $mmdetection_sample_request_data ] +then + echo "Invoking endpoint $mmdetection_endpoint_name with $mmdetection_sample_request_data\n\n" +else + echo "Scoring file $mmdetection_sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $mmdetection_endpoint_name --request-file $mmdetection_sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 9. Delete the endpoint +az ml online-endpoint delete --name $mmdetection_endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +# 10. Delete the request data file + +rm $mmdetection_sample_request_data diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/prepare_data.py b/cli/foundation-models/system/finetune/image-instance-segmentation/prepare_data.py new file mode 100644 index 0000000000..a0ca0b8a39 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/prepare_data.py @@ -0,0 +1,284 @@ +import argparse +import base64 +import json +import os +import subprocess +import sys +import urllib +import xml.etree.ElementTree as ET + +from zipfile import ZipFile + +from azure.identity import DefaultAzureCredential +from azure.ai.ml import MLClient +from azure.ai.ml.entities import Data +from azure.ai.ml.constants import AssetTypes + + +def create_ml_table_file(filename): + """Create ML Table definition + :param filename: Name of the jsonl file + """ + + return ( + "paths:\n" + " - file: ./{0}\n" + "transformations:\n" + " - read_json_lines:\n" + " encoding: utf8\n" + " invalid_lines: error\n" + " include_path_column: false\n" + " - convert_column_types:\n" + " - columns: image_url\n" + " column_type: stream_info" + ).format(filename) + + +def save_ml_table_file(output_path, mltable_file_contents): + """Save ML Table file + :param output_path: Path to save the MLTable file + :param mltable_file_contents: Contents of the MLTable file + """ + with open(os.path.join(output_path, "MLTable"), "w") as f: + f.write(mltable_file_contents) + + +def create_jsonl_and_mltable_files(uri_folder_data_path, dataset_dir): + """Create jsonl and mltable files + + :param uri_folder_data_path: Path to the data folder + :param dataset_dir: Path to the dataset folder + """ + print("Creating jsonl files") + + dataset_parent_dir = os.path.dirname(dataset_dir) + + # We will copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # Create MLTable folders, if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + train_validation_ratio = 5 + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Baseline of json line dictionary + json_line_sample = { + "image_url": uri_folder_data_path, + "image_details": {"format": None, "width": None, "height": None}, + "label": [], + } + + # Path to the annotations + annotations_folder = os.path.join(dataset_dir, "annotations") + + # Read each annotation and convert it to jsonl line + with open(train_annotations_file, "w") as train_f: + with open(validation_annotations_file, "w") as validation_f: + for i, filename in enumerate(os.listdir(annotations_folder)): + if not filename.endswith(".xml"): + print("Skipping unknown file: {}".format(filename)) + continue + + annotations_file_path = os.path.join(annotations_folder, filename) + print(f"Parsing {os.path.join(annotations_folder, filename)}") + + root = ET.parse(annotations_file_path).getroot() + + width = int(root.find("size/width").text) + height = int(root.find("size/height").text) + + labels = [] + for object in root.findall("object"): + name = object.find("name").text + xmin = object.find("bndbox/xmin").text + ymin = object.find("bndbox/ymin").text + xmax = object.find("bndbox/xmax").text + ymax = object.find("bndbox/ymax").text + isCrowd = int(object.find("difficult").text) + labels.append( + { + "label": name, + "topX": float(xmin) / width, + "topY": float(ymin) / height, + "bottomX": float(xmax) / width, + "bottomY": float(ymax) / height, + "isCrowd": isCrowd, + } + ) + # Build the jsonl file + image_filename = root.find("filename").text + _, file_extension = os.path.splitext(image_filename) + json_line = dict(json_line_sample) + json_line["image_url"] = ( + json_line["image_url"] + "images/" + image_filename + ) + json_line["image_details"]["format"] = file_extension[1:] + json_line["image_details"]["width"] = width + json_line["image_details"]["height"] = height + json_line["label"] = labels + + if i % train_validation_ratio == 0: + # Validation annotation + validation_f.write(json.dumps(json_line) + "\n") + else: + # Train annotation + train_f.write(json.dumps(json_line) + "\n") + print("done") + + # Create and save train mltable + train_mltable_file_contents = create_ml_table_file( + os.path.basename(train_annotations_file) + ) + save_ml_table_file(training_mltable_path, train_mltable_file_contents) + + # Create and save validation mltable + validation_mltable_file_contents = create_ml_table_file( + os.path.basename(validation_annotations_file) + ) + save_ml_table_file(validation_mltable_path, validation_mltable_file_contents) + + +def upload_data_and_create_jsonl_mltable_files(ml_client, dataset_parent_dir): + # Download data from public url + + # Create data folder if it doesnt exist. + os.makedirs(dataset_parent_dir, exist_ok=True) + + # Download data + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip" + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + # Get the data zip file path + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download the dataset + urllib.request.urlretrieve(download_url, filename=data_file) + + # Extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # Delete zip file + os.remove(data_file) + + # Upload data and create a data asset URI folder + print("Uploading data to blob storage") + my_data = Data( + path=dataset_dir, + type=AssetTypes.URI_FOLDER, + description="Fridge-items images instance segmentation", + name="fridge-items-images-instance-segmentation", + ) + + uri_folder_data_asset = ml_client.data.create_or_update(my_data) + + print(uri_folder_data_asset) + print("") + print("Path to folder in Blob Storage:") + print(uri_folder_data_asset.path) + + print("Installing scikit-image and simplification package") + subprocess.check_call( + [sys.executable, "-m", "pip", "install", "scikit-image==0.19.3"] + ) + subprocess.check_call([sys.executable, "-m", "pip", "install", "simplification"]) + print("done") + + print("Creating jsonl files") + from jsonl_converter import convert_mask_in_VOC_to_jsonl + + convert_mask_in_VOC_to_jsonl(dataset_dir, uri_folder_data_asset.path) + print("done") + + # We will copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # Create the folders if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Create and save train mltable + train_mltable_file_contents = create_ml_table_file( + os.path.basename(train_annotations_file) + ) + save_ml_table_file(training_mltable_path, train_mltable_file_contents) + + # Create and save validation mltable + validation_mltable_file_contents = create_ml_table_file( + os.path.basename(validation_annotations_file) + ) + save_ml_table_file(validation_mltable_path, validation_mltable_file_contents) + + +def read_image(image_path: str): + """Read image from path""" + with open(image_path, "rb") as f: + return f.read() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Prepare data for object detection") + + parser.add_argument("--subscription", type=str, help="Subscription ID") + parser.add_argument("--group", type=str, help="Resource group name") + parser.add_argument("--workspace", type=str, help="Workspace name") + parser.add_argument( + "--data_path", type=str, default="./data", help="Dataset location" + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + credential = DefaultAzureCredential() + ml_client = None + subscription_id = args.subscription + resource_group = args.group + workspace = args.workspace + ml_client = MLClient(credential, subscription_id, resource_group, workspace) + + upload_data_and_create_jsonl_mltable_files( + ml_client=ml_client, dataset_parent_dir=args.data_path + ) + + sample_image = os.path.join( + args.data_path, "odFridgeObjectsMask", "images", "1.jpg" + ) + + mmd_request_json = { + "input_data": { + "columns": ["image"], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + mmd_request_file_name = "mmdetection_sample_request_data.json" + + with open(mmd_request_file_name, "w") as mmd_request_file: + json.dump(mmd_request_json, mmd_request_file) diff --git a/cli/foundation-models/system/finetune/image-instance-segmentation/readme.md b/cli/foundation-models/system/finetune/image-instance-segmentation/readme.md new file mode 100644 index 0000000000..41aa2951d9 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-instance-segmentation/readme.md @@ -0,0 +1,11 @@ +# Fine-tuning a model for Image Instance Segmentation task + +You can launch a sample pipeline for image instance segmentation using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component. + +For using this component for instance segmentation, run the shell script file `bash ./mmdetection-fridgeobjects-instance-segmentation.sh`. + +Currently following models are supported: +| Model Name | Source | +| :------------: | :-------: | +| [mask_rcnn_swin-t-p4-w7_fpn_1x_coco](https://ml.azure.com/registries/azureml/models/mask_rcnn_swin-t-p4-w7_fpn_1x_coco/version/3) | azureml registry | +| [Image instance-segmentation models from MMDetection](https://github.com/open-mmlab/mmdetection/blob/v2.28.2/docs/en/model_zoo.md) | MMDetection | diff --git a/cli/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json b/cli/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/cli/foundation-models/system/finetune/image-object-detection/deploy.yaml b/cli/foundation-models/system/finetune/image-object-detection/deploy.yaml new file mode 100644 index 0000000000..6553e7943e --- /dev/null +++ b/cli/foundation-models/system/finetune/image-object-detection/deploy.yaml @@ -0,0 +1,11 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 \ No newline at end of file diff --git a/cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection-pipeline.yaml b/cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection-pipeline.yaml new file mode 100644 index 0000000000..eb11dcc988 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection-pipeline.yaml @@ -0,0 +1,101 @@ +$schema: https://azuremlschemas.azureedge.net/latest/pipelineJob.schema.json +type: pipeline + +experiment_name: AzureML-Cli-Train-Finetune-Vision-OD-Samples + +inputs: + # dataset files + training_data: + type: mltable + + validation_data: + type: mltable + + # deepspeed config file + ds_finetune: + path: deepspeed_configs/zero1.json + type: uri_file + + # compute + compute_model_import: sample-model-import-cluster + compute_finetune: sample-finetune-cluster-gpu + + # model_name: yolof_r50_c5_8x8_1x_coco + # # model - specify the foundation model available in the azureml system registry + mlflow_model: + path: azureml://registries/azureml/models/yolof_r50_c5_8x8_1x_coco/versions/3 + type: mlflow_model + +outputs: + # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint + trained_model: + type: mlflow_model + +settings: + force_rerun: true + default_compute: azureml:sample-finetune-cluster-gpu + +jobs: + mmdetection_model_finetune_job: + type: pipeline + component: azureml://registries/azureml/components/mmdetection_image_objectdetection_instancesegmentation_pipeline/labels/latest + inputs: + + # # Compute + compute_model_import: ${{parent.inputs.compute_model_import}} + compute_finetune: ${{parent.inputs.compute_finetune}} + instance_count: 1 + process_count_per_instance: 1 + + # # Model import args + task_name: image-object-detection + # model_name: ${{parent.inputs.model_name}} + # pytorch_model: ${{parent.inputs.pytorch_model}} + mlflow_model: ${{parent.inputs.mlflow_model}} + model_family: MmDetectionImage + + # # Data + training_data: ${{parent.inputs.training_data}} + validation_data: ${{parent.inputs.validation_data}} + + # # Finetuning parameters + apply_augmentations: True + number_of_workers: 8 + apply_deepspeed: False + deepspeed_config: ${{parent.inputs.ds_finetune}} + apply_ort: False + auto_find_batch_size: False + extra_optim_args: "" + precision: 32 + random_seed: 42 + evaluation_strategy: epoch + evaluation_steps: 500 + logging_strategy: epoch + logging_steps: 500 + save_strategy: epoch + save_steps: 500 + save_total_limit: -1 + early_stopping: False + early_stopping_patience: 1 + resume_from_checkpoint: False + save_as_mlflow_model: True + # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values. + # image_min_size: -1 + # image_max_size: -1 + # metric_for_best_model: mean_average_precision + # number_of_epochs: 15 + # max_steps: -1 + # training_batch_size: 4 + # validation_batch_size: 4 + # learning_rate: 5e-5 + # learning_rate_scheduler: warmup_linear + # warmup_steps: 0 + # optimizer: adamw_hf + # weight_decay: 0.0 + # gradient_accumulation_step: 1 + # max_grad_norm: 1.0 + # iou_threshold: 0.5 + # box_score_threshold: 0.3 + + outputs: + mlflow_model_folder: ${{parent.outputs.trained_model}} diff --git a/cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection.sh b/cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection.sh new file mode 100644 index 0000000000..77ac621e3f --- /dev/null +++ b/cli/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-detection.sh @@ -0,0 +1,178 @@ +set -x +# the commands in this file map to steps in this notebook: https://aka.ms/azureml-ft-sdk-mmd-image-object-detection +# the data files are available in the same folder as the above notebook + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +compute_cluster_model_import="sample-model-import-cluster" +compute_cluster_finetune="sample-finetune-cluster-gpu" +# if above compute cluster does not exist, create it with the following vm size +compute_model_import_sku="Standard_D12" +compute_finetune_sku="Standard_NC6s_v3" + +# This is the number of GPUs in a single node of the selected 'vm_size' compute. +# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train. +# Setting this to more than the number of GPUs will result in an error. +gpus_per_node=1 + +# This is the foundation model for finetuning +mmdetection_model_name="yolof_r50_c5_8x8_1x_coco" +model_label="latest" + +version=$(date +%s) +finetuned_mmdetection_model_name="$mmdetection_model_name-fridge-od" +mmdetection_endpoint_name="mmd-od-fridge-items-$version" +deployment_sku="Standard_DS3_V2" + +# Deepspeed config +ds_finetune="./deepspeed_configs/zero1.json" + +# Scoring file +mmdetection_sample_request_data="./mmdetection_sample_request_data.json" + +# finetuning job parameters +finetuning_pipeline_component="mmdetection_image_objectdetection_instancesegmentation_pipeline" + +# Training settings +process_count_per_instance=$gpus_per_node # set to the number of GPUs available in the compute + +# 1. Install dependencies +pip install azure-ai-ml==1.8.0 +pip install azure-identity==1.13.0 + +# 2. Setup pre-requisites +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# Check if $compute_cluster_model_import exists, else create it +if az ml compute show --name $compute_cluster_model_import $workspace_info +then + echo "Compute cluster $compute_cluster_model_import already exists" +else + echo "Creating compute cluster $compute_cluster_model_import" + az ml compute create --name $compute_cluster_model_import --type amlcompute --min-instances 0 --max-instances 2 --size $compute_model_import_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_model_import" + exit 1 + } +fi + +# Check if $compute_cluster_finetune exists, else create it +if az ml compute show --name $compute_cluster_finetune $workspace_info +then + echo "Compute cluster $compute_cluster_finetune already exists" +else + echo "Creating compute cluster $compute_cluster_finetune" + az ml compute create --name $compute_cluster_finetune --type amlcompute --min-instances 0 --max-instances 2 --size $compute_finetune_sku $workspace_info || { + echo "Failed to create compute cluster $compute_cluster_finetune" + exit 1 + } +fi + +# Check if the finetuning pipeline component exists +if ! az ml component show --name $finetuning_pipeline_component --label latest --registry-name $registry_name +then + echo "Finetuning pipeline component $finetuning_pipeline_component does not exist" + exit 1 +fi + +# # 3. Check if the model exists in the registry +# # need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $mmdetection_model_name --label $model_label --registry-name $registry_name +then + echo "Model $mmdetection_model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi +# get the latest model version +model_version=$(az ml model show --name $mmdetection_model_name --label $model_label --registry-name $registry_name --query version --output tsv) +# 4. Prepare data +python prepare_data.py --subscription $subscription_id --group $resource_group_name --workspace $workspace_name + +# training data +train_data="./data/training-mltable-folder" +# validation data +validation_data="./data/validation-mltable-folder" + +# Check if training data, validation data +if [ ! -d $train_data ] +then + echo "Training data $train_data does not exist" + exit 1 +fi + +if [ ! -d $validation_data ] +then + echo "Validation data $validation_data does not exist" + exit 1 +fi + +# 5. Submit finetuning job using pipeline.yaml for a open-mmlab mmdetection model + +# If you want to use a MMDetection model, specify the inputs.model_name instead of inputs.mlflow_model_path.path like below +# inputs.model_name="conditional_detr_r50_8xb2-50e_coco" + +mmdetection_parent_job_name=$( az ml job create \ + --file ./mmdetection-fridgeobjects-detection-pipeline.yaml \ + $workspace_info \ + --query name -o tsv \ + --set \ + jobs.mmdetection_model_finetune_job.component="azureml://registries/$registry_name/components/$finetuning_pipeline_component/labels/latest" \ + inputs.compute_model_import=$compute_cluster_model_import \ + inputs.compute_finetune=$compute_cluster_finetune \ + inputs.mlflow_model.path="azureml://registries/$registry_name/models/$mmdetection_model_name/versions/$model_version" \ + inputs.training_data.path=$train_data \ + inputs.validation_data.path=$validation_data + ) || { + echo "Failed to submit finetuning job" + exit 1 + } + +az ml job stream --name $mmdetection_parent_job_name $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Create model in workspace from train job output for fine-tuned mmdetection model +az ml model create --name $finetuned_mmdetection_model_name --version $version --type mlflow_model \ + --path azureml://jobs/$mmdetection_parent_job_name/outputs/trained_model $workspace_info || { + echo "model create in workspace failed"; exit 1; +} + +# 7. Deploy the fine-tuned mmdetection model to an endpoint +# Create online endpoint +az ml online-endpoint create --name $mmdetection_endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy registered model to endpoint in workspace +az ml online-deployment create --file ./deploy.yaml $workspace_info --all-traffic --set \ + endpoint_name=$mmdetection_endpoint_name model=azureml:$finetuned_mmdetection_model_name:$version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 8. Try a sample scoring request on the deployed MMDetection model + +# Check if scoring data file exists +if [ -f $mmdetection_sample_request_data ] +then + echo "Invoking endpoint $mmdetection_endpoint_name with $mmdetection_sample_request_data\n\n" +else + echo "Scoring file $mmdetection_sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $mmdetection_endpoint_name --request-file $mmdetection_sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 9. Delete the endpoint +az ml online-endpoint delete --name $mmdetection_endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +# 10. Delete the request data file + +rm $mmdetection_sample_request_data diff --git a/cli/foundation-models/system/finetune/image-object-detection/prepare_data.py b/cli/foundation-models/system/finetune/image-object-detection/prepare_data.py new file mode 100644 index 0000000000..468ed94233 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-object-detection/prepare_data.py @@ -0,0 +1,246 @@ +import argparse +import base64 +import json +import os +import urllib +import xml.etree.ElementTree as ET + +from zipfile import ZipFile + +from azure.identity import DefaultAzureCredential +from azure.ai.ml import MLClient +from azure.ai.ml.entities import Data +from azure.ai.ml.constants import AssetTypes + + +def create_ml_table_file(filename): + """Create ML Table definition + :param filename: Name of the jsonl file + """ + + return ( + "paths:\n" + " - file: ./{0}\n" + "transformations:\n" + " - read_json_lines:\n" + " encoding: utf8\n" + " invalid_lines: error\n" + " include_path_column: false\n" + " - convert_column_types:\n" + " - columns: image_url\n" + " column_type: stream_info" + ).format(filename) + + +def save_ml_table_file(output_path, mltable_file_contents): + """Save ML Table file + :param output_path: Path to save the MLTable file + :param mltable_file_contents: Contents of the MLTable file + """ + with open(os.path.join(output_path, "MLTable"), "w") as f: + f.write(mltable_file_contents) + + +def create_jsonl_and_mltable_files(uri_folder_data_path, dataset_dir): + """Create jsonl and mltable files + + :param uri_folder_data_path: Path to the data folder + :param dataset_dir: Path to the dataset folder + """ + print("Creating jsonl files") + + dataset_parent_dir = os.path.dirname(dataset_dir) + + # We'll copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # Create MLTable folders, if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + train_validation_ratio = 5 + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Baseline of json line dictionary + json_line_sample = { + "image_url": uri_folder_data_path, + "image_details": {"format": None, "width": None, "height": None}, + "label": [], + } + + # Path to the annotations + annotations_folder = os.path.join(dataset_dir, "annotations") + + # Read each annotation and convert it to jsonl line + with open(train_annotations_file, "w") as train_f: + with open(validation_annotations_file, "w") as validation_f: + for i, filename in enumerate(os.listdir(annotations_folder)): + if not filename.endswith(".xml"): + print("Skipping unknown file: {}".format(filename)) + continue + + annotations_file_path = os.path.join(annotations_folder, filename) + print(f"Parsing {os.path.join(annotations_folder, filename)}") + + root = ET.parse(annotations_file_path).getroot() + + width = int(root.find("size/width").text) + height = int(root.find("size/height").text) + + labels = [] + for object in root.findall("object"): + name = object.find("name").text + xmin = object.find("bndbox/xmin").text + ymin = object.find("bndbox/ymin").text + xmax = object.find("bndbox/xmax").text + ymax = object.find("bndbox/ymax").text + isCrowd = int(object.find("difficult").text) + labels.append( + { + "label": name, + "topX": float(xmin) / width, + "topY": float(ymin) / height, + "bottomX": float(xmax) / width, + "bottomY": float(ymax) / height, + "isCrowd": isCrowd, + } + ) + # build the jsonl file + image_filename = root.find("filename").text + _, file_extension = os.path.splitext(image_filename) + json_line = dict(json_line_sample) + json_line["image_url"] = ( + json_line["image_url"] + "images/" + image_filename + ) + json_line["image_details"]["format"] = file_extension[1:] + json_line["image_details"]["width"] = width + json_line["image_details"]["height"] = height + json_line["label"] = labels + + if i % train_validation_ratio == 0: + # validation annotation + validation_f.write(json.dumps(json_line) + "\n") + else: + # train annotation + train_f.write(json.dumps(json_line) + "\n") + print("done") + + # Create and save train mltable + train_mltable_file_contents = create_ml_table_file( + os.path.basename(train_annotations_file) + ) + save_ml_table_file(training_mltable_path, train_mltable_file_contents) + + # Create and save validation mltable + validation_mltable_file_contents = create_ml_table_file( + os.path.basename(validation_annotations_file) + ) + save_ml_table_file(validation_mltable_path, validation_mltable_file_contents) + + +def upload_data_and_create_jsonl_mltable_files(ml_client, dataset_parent_dir): + """upload data to blob storage and create jsonl and mltable files + + :param ml_client: Azure ML client + :param dataset_parent_dir: Path to the dataset folder + """ + # Download data from public url + + # create data folder if it doesnt exist. + os.makedirs(dataset_parent_dir, exist_ok=True) + + # download data + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip" + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + # Get the data zip file path + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download the dataset + urllib.request.urlretrieve(download_url, filename=data_file) + + # extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # delete zip file + os.remove(data_file) + + # Upload data and create a data asset URI folder + print("Uploading data to blob storage") + my_data = Data( + path=dataset_dir, + type=AssetTypes.URI_FOLDER, + description="Fridge-items images Object detection", + name="fridge-items-images-object-detection", + ) + + uri_folder_data_asset = ml_client.data.create_or_update(my_data) + + print(uri_folder_data_asset) + print("") + print("Path to folder in Blob Storage:") + print(uri_folder_data_asset.path) + + create_jsonl_and_mltable_files( + uri_folder_data_path=uri_folder_data_asset.path, dataset_dir=dataset_dir + ) + + +def read_image(image_path: str): + """Read image from path""" + with open(image_path, "rb") as f: + return f.read() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Prepare data for object detection") + + parser.add_argument("--subscription", type=str, help="Subscription ID") + parser.add_argument("--group", type=str, help="Resource group name") + parser.add_argument("--workspace", type=str, help="Workspace name") + parser.add_argument( + "--data_path", type=str, default="./data", help="Dataset location" + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + credential = DefaultAzureCredential() + ml_client = None + subscription_id = args.subscription + resource_group = args.group + workspace = args.workspace + ml_client = MLClient(credential, subscription_id, resource_group, workspace) + + upload_data_and_create_jsonl_mltable_files( + ml_client=ml_client, dataset_parent_dir=args.data_path + ) + + sample_image = os.path.join(args.data_path, "odFridgeObjects", "images", "99.jpg") + + mmd_request_json = { + "input_data": { + "columns": ["image"], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + mmd_request_file_name = "mmdetection_sample_request_data.json" + + with open(mmd_request_file_name, "w") as mmd_request_file: + json.dump(mmd_request_json, mmd_request_file) diff --git a/cli/foundation-models/system/finetune/image-object-detection/readme.md b/cli/foundation-models/system/finetune/image-object-detection/readme.md new file mode 100644 index 0000000000..716a6ebf16 --- /dev/null +++ b/cli/foundation-models/system/finetune/image-object-detection/readme.md @@ -0,0 +1,16 @@ +# Fine-tuning a model for Image Object Detection task + +You can launch a sample pipeline for image object detection using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component. + +For using this component for object detection, run the shell script file `bash ./mmdetection-fridgeobjects-detection.sh`. + +Currently following models are supported: +| Model Name | Source | +| :------------: | :-------: | +| [deformable_detr_twostage_refine_r50_16x2_50e_coco](https://ml.azure.com/registries/azureml/models/deformable_detr_twostage_refine_r50_16x2_50e_coco/version/3) | azureml registry | +| [sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco](https://ml.azure.com/registries/azureml/models/sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco/version/3) | azureml registry | +| [sparse_rcnn_r101_fpn_300_proposals_crop_mstrain_480-800_3x_coco](https://ml.azure.com/registries/azureml/models/sparse_rcnn_r101_fpn_300_proposals_crop_mstrain_480-800_3x_coco/version/3) | azureml registry | +| [vfnet_r50_fpn_mdconv_c3-c5_mstrain_2x_coco](https://ml.azure.com/registries/azureml/models/vfnet_r50_fpn_mdconv_c3-c5_mstrain_2x_coco/version/3) | azureml registry | +| [vfnet_x101_64x4d_fpn_mdconv_c3-c5_mstrain_2x_coco](https://ml.azure.com/registries/azureml/models/vfnet_x101_64x4d_fpn_mdconv_c3-c5_mstrain_2x_coco/version/3) | azureml registry | +| [yolof_r50_c5_8x8_1x_coco](https://ml.azure.com/registries/azureml/models/yolof_r50_c5_8x8_1x_coco/version/3) | azureml registry | +| [Image object detection models from MMDetection](https://github.com/open-mmlab/mmdetection/blob/v2.28.2/docs/en/model_zoo.md) | MMDetection | diff --git a/cli/foundation-models/system/inference/image-classification/deploy-batch.yaml b/cli/foundation-models/system/inference/image-classification/deploy-batch.yaml new file mode 100644 index 0000000000..6428d4a2c4 --- /dev/null +++ b/cli/foundation-models/system/inference/image-classification/deploy-batch.yaml @@ -0,0 +1,9 @@ +$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json +name: demo +description: "Batch endpoint for for image-classification task" +type: model +resources: + instance_count: 1 +settings: + mini_batch_size: 1 + diff --git a/cli/foundation-models/system/inference/image-classification/deploy-online.yaml b/cli/foundation-models/system/inference/image-classification/deploy-online.yaml new file mode 100644 index 0000000000..590d7027b9 --- /dev/null +++ b/cli/foundation-models/system/inference/image-classification/deploy-online.yaml @@ -0,0 +1,12 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 + diff --git a/cli/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.sh b/cli/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.sh new file mode 100644 index 0000000000..27b806de3b --- /dev/null +++ b/cli/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.sh @@ -0,0 +1,137 @@ + + +set -x +# The commands in this file map to steps in this notebook: https://aka.ms/azureml-infer-batch-sdk-image-classification +# The sample scoring file available in the same folder as the above notebook. + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +# This is the model from system registry that needs to be deployed +model_name="microsoft-beit-base-patch16-224-pt22k-ft22k" +model_label="latest" + +deployment_compute="cpu-cluster" +# todo: fetch deployment_sku from the min_inference_sku tag of the model +deployment_sku="Standard_DS3_v2" + + +version=$(date +%s) +endpoint_name="image-classification-$version" +deployment_name="demo-$version" + +# Prepare data for deployment +data_path="data_batch" +python ./prepare_data.py --is_multilabel 0 --mode "batch" --data_path $data_path +# sample request data in csv format with image column +sample_request_csv="./data_batch/image_classification_multiclass_list.csv" +sample_request_folder="./data_batch/fridgeObjects" + +# 1. Setup pre-requisites +if [ "$subscription_id" = "" ] || \ + ["$resource_group_name" = "" ] || \ + [ "$workspace_name" = "" ]; then + echo "Please update the script with the subscription_id, resource_group_name and workspace_name" + exit 1 +fi + +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# 2. Check if the model exists in the registry +# Need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $model_name --label $model_label --registry-name $registry_name +then + echo "Model $model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi + +# Get the latest model version +model_version=$(az ml model show --name $model_name --label $model_label --registry-name $registry_name --query version --output tsv) + +# 3. Check if compute $deployment_compute exists, else create it +if az ml compute show --name $deployment_compute $workspace_info +then + echo "Compute cluster $deployment_compute already exists" +else + echo "Creating compute cluster $deployment_compute" + az ml compute create --name $deployment_compute --type amlcompute --min-instances 0 --max-instances 2 --size $deployment_sku $workspace_info || { + echo "Failed to create compute cluster $deployment_compute" + exit 1 + } +fi + +# 4. Deploy the model to an endpoint +# Create online endpoint +az ml batch-endpoint create --name $endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml batch-deployment create --file ./deploy-batch.yaml $workspace_info --set \ + endpoint_name=$endpoint_name model=azureml://registries/$registry_name/models/$model_name/versions/$model_version \ + compute=$deployment_compute \ + name=$deployment_name || { + echo "deployment create failed"; exit 1; +} + +# 5.2 Try a scoring request with image folder + +# Check if scoring folder exists +if [ -d $data_path ]; then + echo "Invoking endpoint $endpoint_name with following input:\n\n" + ls $data_path + echo "\n\n" +else + echo "Scoring folder $data_path does not exist" + exit 1 +fi + +# Invoke the endpoint +folder_inference_job=$(az ml batch-endpoint invoke --name $endpoint_name \ + --deployment-name $deployment_name --input $sample_request_folder --input-type \ + uri_folder $workspace_info --query name --output tsv) || { + echo "endpoint invoke failed"; exit 1; +} + +# Wait for the job to complete +az ml job stream --name $folder_inference_job $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 5.2 Try a scoring request with csv file +# Note: If job failed with error Assertion Error (The actual length exceeded max length 100 MB) then +# please try with less number of input images or use ImageFolder Input mode. + +# Check if scoring data file exists +if [ -f $sample_request_csv ]; then + echo "Invoking endpoint $endpoint_name with following input:\n\n" + echo "\n\n" +else + echo "Scoring file $sample_request_csv does not exist" + exit 1 +fi + +# Invoke the endpoint +csv_inference_job=$(az ml batch-endpoint invoke --name $endpoint_name \ + --deployment-name $deployment_name --input $sample_request_csv --input-type \ + uri_file $workspace_info --query name --output tsv) || { + echo "endpoint invoke failed"; exit 1; +} + +# wait for the job to complete +az ml job stream --name $csv_inference_job $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Delete the endpoint +# Batch endpoints use compute resources only when jobs are submitted. You can keep the +# batch endpoint for your reference without worrying about compute bills, or choose to delete the endpoint. +# If you created your compute cluster to have zero minimum instances and scale down soon after being idle, +# you won't be charged for an unused compute. +az ml batch-endpoint delete --name $endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} diff --git a/cli/foundation-models/system/inference/image-classification/image-classification-online-endpoint.sh b/cli/foundation-models/system/inference/image-classification/image-classification-online-endpoint.sh new file mode 100644 index 0000000000..3c7fcc631a --- /dev/null +++ b/cli/foundation-models/system/inference/image-classification/image-classification-online-endpoint.sh @@ -0,0 +1,79 @@ +set -x +# The commands in this file map to steps in this notebook: https://aka.ms/azureml-infer-sdk-image-classification +# The sample scoring file available in the same folder as the above notebook + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +# This is the model from system registry that needs to be deployed +model_name="microsoft-beit-base-patch16-224-pt22k-ft22k" +model_label="latest" + +version=$(date +%s) +endpoint_name="image-classification-$version" + +# Todo: fetch deployment_sku from the min_inference_sku tag of the model +deployment_sku="Standard_DS3_v2" + +# Prepare data for deployment +python ./prepare_data.py --is_multilabel 0 --data_path "data_online" --mode "online" +# sample_request_data +sample_request_data="./data_online/fridgeObjects/sample_request_data.json" +# 1. Setup pre-requisites +if [ "$subscription_id" = "" ] || \ + ["$resource_group_name" = "" ] || \ + [ "$workspace_name" = "" ]; then + echo "Please update the script with the subscription_id, resource_group_name and workspace_name" + exit 1 +fi + +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# 2. Check if the model exists in the registry +# Need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $model_name --label $model_label --registry-name $registry_name +then + echo "Model $model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi + +# Get the latest model version +model_version=$(az ml model show --name $model_name --label $model_label --registry-name $registry_name --query version --output tsv) + +# 3. Deploy the model to an endpoint +# Create online endpoint +az ml online-endpoint create --name $endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml online-deployment create --file deploy-online.yaml $workspace_info --all-traffic --set \ + endpoint_name=$endpoint_name model=azureml://registries/$registry_name/models/$model_name/versions/$model_version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 4. Try a sample scoring request + +# Check if scoring data file exists +if [ -f $sample_request_data ]; then + echo "Invoking endpoint $endpoint_name with $sample_request_data\n\n" +else + echo "Scoring file $sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $endpoint_name --request-file $sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 6. Delete the endpoint and sample_request_data.json +az ml online-endpoint delete --name $endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +rm $sample_request_data diff --git a/cli/foundation-models/system/inference/image-classification/prepare_data.py b/cli/foundation-models/system/inference/image-classification/prepare_data.py new file mode 100644 index 0000000000..2a7b803ee7 --- /dev/null +++ b/cli/foundation-models/system/inference/image-classification/prepare_data.py @@ -0,0 +1,163 @@ +import argparse +import base64 +import json +import os +import shutil +import urllib.request +import pandas as pd +from zipfile import ZipFile + + +def download_and_unzip(dataset_parent_dir: str, is_multilabel_dataset: int) -> None: + """Download image dataset and unzip it. + + :param dataset_parent_dir: dataset parent directory to which dataset will be downloaded + :type dataset_parent_dir: str + :param is_multilabel_dataset: flag to indicate if dataset is multi-label or not + :type is_multilabel_dataset: int + """ + # Create directory, if it does not exist + os.makedirs(dataset_parent_dir, exist_ok=True) + + # download data + if is_multilabel_dataset == 0: + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip" + else: + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip" + print(f"Downloading data from {download_url}") + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + if os.path.exists(dataset_dir): + shutil.rmtree(dataset_dir) + + # Get the name of zip file + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download data from public url + urllib.request.urlretrieve(download_url, filename=data_file) + + # extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # delete zip file + os.remove(data_file) + return dataset_dir + + +def read_image(image_path: str) -> bytes: + """Read image from path. + + :param image_path: image path + :type image_path: str + :return: image in bytes format + :rtype: bytes + """ + with open(image_path, "rb") as f: + return f.read() + + +def prepare_data_for_online_inference(dataset_dir: str, is_multilabel: int = 0) -> None: + """Prepare request json for online inference. + + :param dataset_dir: dataset directory + :type dataset_dir: str + :param is_multilabel: flag to indicate if dataset is multi-label or not + :type is_multilabel: int + """ + if is_multilabel == 0: + sample_image = os.path.join(dataset_dir, "milk_bottle", "99.jpg") + else: + sample_image = os.path.join(dataset_dir, "images", "56.jpg") + + request_json = { + "input_data": { + "columns": ["image"], + "index": [0], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + + request_file_name = os.path.join(dataset_dir, "sample_request_data.json") + + with open(request_file_name, "w") as request_file: + json.dump(request_json, request_file) + + +def prepare_data_for_batch_inference(dataset_dir: str, is_multilabel: int = 0) -> None: + """Prepare image folder and csv file for batch inference. + + This function will move all images to a single image folder and also create a csv + file with images in base64 format. + :param dataset_dir: dataset directory + :type dataset_dir: str + :param is_multilabel: flag to indicate if dataset is multi-label or not + :type is_multilabel: int + """ + image_list = [] + + csv_file_name = ( + "image_classification_multilabel_lis.csv" + if is_multilabel == 1 + else "image_classification_multiclass_list.csv" + ) + + for dir_name in os.listdir(dataset_dir): + dir_path = os.path.join(dataset_dir, dir_name) + for path, _, files in os.walk(dir_path): + for file in files: + image = read_image(os.path.join(path, file)) + image_list.append(base64.encodebytes(image).decode("utf-8")) + shutil.move(os.path.join(path, file), dataset_dir) + if os.path.isdir(dir_path): + shutil.rmtree(dir_path) + else: + os.remove(dir_path) + df = pd.DataFrame(image_list, columns=["image"]).sample(10) + df.to_csv( + os.path.join(os.path.dirname(dataset_dir), csv_file_name), + index=False, + header=True, + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Prepare data for image classification" + ) + parser.add_argument( + "--data_path", type=str, default="data", help="Dataset location" + ) + parser.add_argument( + "--is_multilabel", type=int, default=0, help="Is multilabel dataset" + ) + parser.add_argument( + "--mode", + type=str, + default="online", + help="prepare data for online or batch inference", + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + dataset_dir = download_and_unzip( + dataset_parent_dir=os.path.join( + os.path.dirname(os.path.abspath(__file__)), args.data_path + ), + is_multilabel_dataset=args.is_multilabel, + ) + + if args.mode == "online": + prepare_data_for_online_inference( + dataset_dir=dataset_dir, is_multilabel=args.is_multilabel + ) + else: + prepare_data_for_batch_inference( + dataset_dir=dataset_dir, is_multilabel=args.is_multilabel + ) diff --git a/cli/foundation-models/system/inference/image-instance-segmentation/deploy-batch.yaml b/cli/foundation-models/system/inference/image-instance-segmentation/deploy-batch.yaml new file mode 100644 index 0000000000..76f7e7c48e --- /dev/null +++ b/cli/foundation-models/system/inference/image-instance-segmentation/deploy-batch.yaml @@ -0,0 +1,8 @@ +$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json +name: demo +description: "Batch endpoint for for image-instance-segmentation task" +type: model +resources: + instance_count: 1 +settings: + mini_batch_size: 1 diff --git a/cli/foundation-models/system/inference/image-instance-segmentation/deploy-online.yaml b/cli/foundation-models/system/inference/image-instance-segmentation/deploy-online.yaml new file mode 100644 index 0000000000..c14f46c6bb --- /dev/null +++ b/cli/foundation-models/system/inference/image-instance-segmentation/deploy-online.yaml @@ -0,0 +1,11 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 diff --git a/cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.sh b/cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.sh new file mode 100644 index 0000000000..076bb96d97 --- /dev/null +++ b/cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.sh @@ -0,0 +1,138 @@ +set -x +# The commands in this file map to steps in this notebook: https://aka.ms/azureml-infer-batch-sdk-image-instance-segmentation + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +# This is the model from system registry that needs to be deployed +model_name="mask_rcnn_swin-t-p4-w7_fpn_1x_coco" +model_label="latest" + +deployment_compute="cpu-cluster" +# Todo: fetch deployment_sku from the min_inference_sku tag of the model +deployment_sku="Standard_DS3_v2" + + +version=$(date +%s) +endpoint_name="image-is-$version" +deployment_name="demo-$version" + +# Prepare data for deployment +data_path="data_batch" +python ./prepare_data.py --data_path $data_path --mode "batch" + +# Sample request data in csv format with image column +sample_request_csv="./data_batch/odFridgeObjectsMask/image_instance_segmentation_list.csv" + +# Sample request data in image folder format +sample_request_folder="./data_batch/odFridgeObjectsMask/images" + +# 1. Setup pre-requisites +if [ "$subscription_id" = "" ] || \ + ["$resource_group_name" = "" ] || \ + [ "$workspace_name" = "" ]; then + echo "Please update the script with the subscription_id, resource_group_name and workspace_name" + exit 1 +fi + +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# 2. Check if the model exists in the registry +# Need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $model_name --label $model_label --registry-name $registry_name +then + echo "Model $model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi + +model_version=$(az ml model show --name $model_name --label $model_label --registry-name $registry_name --query version --output tsv) + + +# 3. Check if compute $deployment_compute exists, else create it +if az ml compute show --name $deployment_compute $workspace_info +then + echo "Compute cluster $deployment_compute already exists" +else + echo "Creating compute cluster $deployment_compute" + az ml compute create --name $deployment_compute --type amlcompute --min-instances 0 --max-instances 2 --size $deployment_sku $workspace_info || { + echo "Failed to create compute cluster $deployment_compute" + exit 1 + } +fi + +# 4. Deploy the model to an endpoint +# Create batch endpoint +az ml batch-endpoint create --name $endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml batch-deployment create --file ./deploy-batch.yaml $workspace_info --set \ + endpoint_name=$endpoint_name \ + model=azureml://registries/$registry_name/models/$model_name/versions/$model_version \ + compute=$deployment_compute \ + name=$deployment_name || { + echo "deployment create failed"; exit 1; +} + +# 5.2 Try a scoring request with image folder + +# Check if scoring folder exists +if [ -d $data_path ]; then + echo "Invoking endpoint $endpoint_name with following input:\n\n" + ls $data_path + echo "\n\n" +else + echo "Scoring folder $data_path does not exist" + exit 1 +fi + +# Invoke the endpoint +folder_inference_job=$(az ml batch-endpoint invoke --name $endpoint_name \ + --deployment-name $deployment_name --input $sample_request_folder --input-type \ + uri_folder $workspace_info --query name --output tsv) || { + echo "endpoint invoke failed"; exit 1; +} + +# Wait for the job to complete +az ml job stream --name $folder_inference_job $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 5.2 Try a scoring request with csv file +# Note: If job failed with error Assertion Error (The actual length exceeded max length 100 MB) then +# please try with less number of input images or use ImageFolder Input mode. + +# Check if scoring data file exists +if [ -f $sample_request_csv ]; then + echo "Invoking endpoint $endpoint_name with following input:\n\n" + echo "\n\n" +else + echo "Scoring file $sample_request_csv does not exist" + exit 1 +fi + +# Invoke the endpoint +csv_inference_job=$(az ml batch-endpoint invoke --name $endpoint_name \ + --deployment-name $deployment_name --input $sample_request_csv --input-type \ + uri_file $workspace_info --query name --output tsv) || { + echo "endpoint invoke failed"; exit 1; +} + +# Wait for the job to complete +az ml job stream --name $csv_inference_job $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Delete the endpoint +# Batch endpoints use compute resources only when jobs are submitted. You can keep the +# batch endpoint for your reference without worrying about compute bills, or choose to delete the endpoint. +# If you created your compute cluster to have zero minimum instances and scale down soon after being idle, +# you won't be charged for an unused compute. +az ml batch-endpoint delete --name $endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} diff --git a/cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.sh b/cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.sh new file mode 100644 index 0000000000..aae0299b24 --- /dev/null +++ b/cli/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.sh @@ -0,0 +1,80 @@ +set -x +# The commands in this file map to steps in this notebook: https://aka.ms/azureml-infer-sdk-image-instance-segmentation +# The sample scoring file available in the same folder as the above notebook + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +# This is the model from system registry that needs to be deployed +model_name="mask_rcnn_swin-t-p4-w7_fpn_1x_coco" +model_label="latest" + +version=$(date +%s) +endpoint_name="image-is-$version" + +# Todo: fetch deployment_sku from the min_inference_sku tag of the model +deployment_sku="Standard_DS3_v2" + +# Prepare data for deployment +python ./prepare_data.py --data_path "data_online" +# sample_request_data +sample_request_data="./data_online/odFridgeObjectsMask/sample_request_data.json" + + +# 1. Setup pre-requisites +if [ "$subscription_id" = "" ] || \ + ["$resource_group_name" = "" ] || \ + [ "$workspace_name" = "" ]; then + echo "Please update the script with the subscription_id, resource_group_name and workspace_name" + exit 1 +fi + +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# 2. Check if the model exists in the registry +# Need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $model_name --label $model_label --registry-name $registry_name +then + echo "Model $model_name:$model_version does not exist in registry $registry_name" + exit 1 +fi + +model_version=$(az ml model show --name $model_name --label $model_label --registry-name $registry_name --query version --output tsv) + +# 3. Deploy the model to an endpoint +# Create online endpoint +az ml online-endpoint create --name $endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml online-deployment create --file deploy-online.yaml $workspace_info --all-traffic --set \ + endpoint_name=$endpoint_name model=azureml://registries/$registry_name/models/$model_name/versions/$model_version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 4. Try a sample scoring request + +# Check if scoring data file exists +if [ -f $sample_request_data ]; then + echo "Invoking endpoint $endpoint_name with $sample_request_data\n\n" +else + echo "Scoring file $sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $endpoint_name --request-file $sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 6. Delete the endpoint and sample_request_data.json +az ml online-endpoint delete --name $endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +rm $sample_request_data diff --git a/cli/foundation-models/system/inference/image-instance-segmentation/prepare_data.py b/cli/foundation-models/system/inference/image-instance-segmentation/prepare_data.py new file mode 100644 index 0000000000..b1a235c36e --- /dev/null +++ b/cli/foundation-models/system/inference/image-instance-segmentation/prepare_data.py @@ -0,0 +1,129 @@ +import argparse +import base64 +import json +import os +import shutil +import urllib.request +import pandas as pd +from zipfile import ZipFile + + +def download_and_unzip(dataset_parent_dir: str) -> None: + """Download image dataset and unzip it. + + :param dataset_parent_dir: dataset parent directory to which dataset will be downloaded + :type dataset_parent_dir: str + """ + # Create directory, if it does not exist + os.makedirs(dataset_parent_dir, exist_ok=True) + + # download data + + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip" + print(f"Downloading data from {download_url}") + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + if os.path.exists(dataset_dir): + shutil.rmtree(dataset_dir) + + # Get the name of zip file + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download data from public url + urllib.request.urlretrieve(download_url, filename=data_file) + + # extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # delete zip file + os.remove(data_file) + return dataset_dir + + +def read_image(image_path: str) -> bytes: + """Read image from path. + + :param image_path: image path + :type image_path: str + :return: image in bytes format + :rtype: bytes + """ + with open(image_path, "rb") as f: + return f.read() + + +def prepare_data_for_batch_inference(dataset_dir: str) -> None: + """Prepare image folder and csv file for batch inference. + + This function will move all images to a single image folder and also create a csv + file with images in base64 format. + :param dataset_dir: dataset directory + :type dataset_dir: str + """ + image_list = [] + + csv_file_name = "image_instance_segmentation_list.csv" + dir_path = os.path.join(dataset_dir, "images") + + for path, _, files in os.walk(dir_path): + for file in files: + image = read_image(os.path.join(path, file)) + image_list.append(base64.encodebytes(image).decode("utf-8")) + + df = pd.DataFrame(image_list, columns=["image"]).sample(10) + df.to_csv(os.path.join(dataset_dir, csv_file_name), index=False, header=True) + + +def prepare_data_for_online_inference(dataset_dir: str) -> None: + """Prepare request json for online inference. + + :param dataset_dir: dataset directory + :type dataset_dir: str + """ + sample_image = os.path.join(dataset_dir, "images", "56.jpg") + request_json = { + "input_data": { + "columns": ["image"], + "index": [0], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + + request_file_name = os.path.join(dataset_dir, "sample_request_data.json") + + with open(request_file_name, "w") as request_file: + json.dump(request_json, request_file) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Prepare data for image instance segmentation" + ) + parser.add_argument( + "--data_path", type=str, default="data", help="Dataset location" + ) + parser.add_argument( + "--mode", + type=str, + default="online", + help="Prepare data for online or batch inference", + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + dataset_dir = download_and_unzip( + dataset_parent_dir=os.path.join( + os.path.dirname(os.path.abspath(__file__)), args.data_path + ), + ) + if args.mode == "batch": + prepare_data_for_batch_inference(dataset_dir=dataset_dir) + elif args.mode == "online": + prepare_data_for_online_inference(dataset_dir=dataset_dir) diff --git a/cli/foundation-models/system/inference/image-object-detection/deploy-batch.yaml b/cli/foundation-models/system/inference/image-object-detection/deploy-batch.yaml new file mode 100644 index 0000000000..e847ef4356 --- /dev/null +++ b/cli/foundation-models/system/inference/image-object-detection/deploy-batch.yaml @@ -0,0 +1,8 @@ +$schema: https://azuremlschemas.azureedge.net/latest/batchDeployment.schema.json +name: demo +description: "Batch endpoint for for image-object-detection task" +type: model +resources: + instance_count: 1 +settings: + mini_batch_size: 1 diff --git a/cli/foundation-models/system/inference/image-object-detection/deploy-online.yaml b/cli/foundation-models/system/inference/image-object-detection/deploy-online.yaml new file mode 100644 index 0000000000..c14f46c6bb --- /dev/null +++ b/cli/foundation-models/system/inference/image-object-detection/deploy-online.yaml @@ -0,0 +1,11 @@ +$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json +name: demo +instance_type: Standard_DS3_v2 +instance_count: 1 +liveness_probe: + initial_delay: 180 + period: 180 + failure_threshold: 49 + timeout: 299 +request_settings: + request_timeout_ms: 90000 diff --git a/cli/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.sh b/cli/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.sh new file mode 100644 index 0000000000..6cfb6a367b --- /dev/null +++ b/cli/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.sh @@ -0,0 +1,137 @@ +set -x +# The commands in this file map to steps in this notebook: https://aka.ms/azureml-infer-batch-sdk-image-object-detection + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +# This is the model from system registry that needs to be deployed +model_name="yolof_r50_c5_8x8_1x_coco" +model_label="latest" + +deployment_compute="cpu-cluster" +# Todo: fetch deployment_sku from the min_inference_sku tag of the model +deployment_sku="Standard_DS3_v2" + +version=$(date +%s) +endpoint_name="image-od-$version" +deployment_name="demo-$version" + +# Prepare data for deployment +data_path="data_batch" +python ./prepare_data.py --data_path $data_path --mode "batch" + +# Sample request data in csv format with image column +sample_request_csv="./data_batch/odFridgeObjects/image_object_detection_list.csv" + +# Sample request data in image folder format +sample_request_folder="./data_batch/odFridgeObjects/images" + +# 1. Setup pre-requisites +if [ "$subscription_id" = "" ] || \ + ["$resource_group_name" = "" ] || \ + [ "$workspace_name" = "" ]; then + echo "Please update the script with the subscription_id, resource_group_name and workspace_name" + exit 1 +fi + +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# 2. Check if the model exists in the registry +# Need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $model_name --label $model_label --registry-name $registry_name +then + echo "Model $model_name:$model_label does not exist in registry $registry_name" + exit 1 +fi + +model_version=$(az ml model show --name $model_name --label $model_label --registry-name $registry_name --query version --output tsv) + + +# 3. Check if compute $deployment_compute exists, else create it +if az ml compute show --name $deployment_compute $workspace_info +then + echo "Compute cluster $deployment_compute already exists" +else + echo "Creating compute cluster $deployment_compute" + az ml compute create --name $deployment_compute --type amlcompute --min-instances 0 --max-instances 2 --size $deployment_sku $workspace_info || { + echo "Failed to create compute cluster $deployment_compute" + exit 1 + } +fi + +# 4. Deploy the model to an endpoint +# Create batch endpoint +az ml batch-endpoint create --name $endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# Deploy model from registry to endpoint in workspace +az ml batch-deployment create --file ./deploy-batch.yaml $workspace_info --set \ + endpoint_name=$endpoint_name \ + model=azureml://registries/$registry_name/models/$model_name/versions/$model_version \ + compute=$deployment_compute \ + name=$deployment_name || { + echo "deployment create failed"; exit 1; +} + +# 5.2 Try a scoring request with image folder + +# Check if scoring folder exists +if [ -d $data_path ]; then + echo "Invoking endpoint $endpoint_name with following input:\n\n" + ls $data_path + echo "\n\n" +else + echo "Scoring folder $data_path does not exist" + exit 1 +fi + +# Invoke the endpoint +folder_inference_job=$(az ml batch-endpoint invoke --name $endpoint_name \ + --deployment-name $deployment_name --input $sample_request_folder --input-type \ + uri_folder $workspace_info --query name --output tsv) || { + echo "endpoint invoke failed"; exit 1; +} + +# Wait for the job to complete +az ml job stream --name $folder_inference_job $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 5.2 Try a scoring request with csv file +# Note: If job failed with error Assertion Error (The actual length exceeded max length 100 MB) then +# please try with less number of input images or use ImageFolder Input mode. + +# Check if scoring data file exists +if [ -f $sample_request_csv ]; then + echo "Invoking endpoint $endpoint_name with following input:\n\n" + echo "\n\n" +else + echo "Scoring file $sample_request_csv does not exist" + exit 1 +fi + +# Invoke the endpoint +csv_inference_job=$(az ml batch-endpoint invoke --name $endpoint_name \ + --deployment-name $deployment_name --input $sample_request_csv --input-type \ + uri_file $workspace_info --query name --output tsv) || { + echo "endpoint invoke failed"; exit 1; +} + +# Wait for the job to complete +az ml job stream --name $csv_inference_job $workspace_info || { + echo "job stream failed"; exit 1; +} + +# 6. Delete the endpoint +# Batch endpoints use compute resources only when jobs are submitted. You can keep the +# batch endpoint for your reference without worrying about compute bills, or choose to delete the endpoint. +# If you created your compute cluster to have zero minimum instances and scale down soon after being idle, +# you won't be charged for an unused compute. +az ml batch-endpoint delete --name $endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} diff --git a/cli/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.sh b/cli/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.sh new file mode 100644 index 0000000000..aab8b499e5 --- /dev/null +++ b/cli/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.sh @@ -0,0 +1,82 @@ +set -x +# the commands in this file map to steps in this notebook: https://aka.ms/azureml-infer-sdk-image-object-detection +# the sample scoring file available in the same folder as the above notebook + +# script inputs +registry_name="azureml" +subscription_id="" +resource_group_name="" +workspace_name="" + +# This is the model from system registry that needs to be deployed +model_name="yolof_r50_c5_8x8_1x_coco" +model_label="latest" + +version=$(date +%s) +endpoint_name="image-od-$version" + +# todo: fetch deployment_sku from the min_inference_sku tag of the model +deployment_sku="Standard_DS3_v2" + +# Prepare data for deployment +python ./prepare_data.py --data_path "data_online" +# sample_request_data + +sample_request_data="./data_online/odFridgeObjects/sample_request_data.json" + + +# 1. Setup pre-requisites +if [ "$subscription_id" = "" ] || \ + ["$resource_group_name" = "" ] || \ + [ "$workspace_name" = "" ]; then + echo "Please update the script with the subscription_id, resource_group_name and workspace_name" + exit 1 +fi + +az account set -s $subscription_id +workspace_info="--resource-group $resource_group_name --workspace-name $workspace_name" + +# 2. Check if the model exists in the registry +# need to confirm model show command works for registries outside the tenant (aka system registry) +if ! az ml model show --name $model_name --label $model_label --registry-name $registry_name +then + echo "Model $model_name:$model_version does not exist in registry $registry_name" + exit 1 +fi + +model_version=$(az ml model show --name $model_name --label $model_label --registry-name $registry_name --query version --output tsv) + +# 3. Deploy the model to an endpoint +# create online endpoint +az ml online-endpoint create --name $endpoint_name $workspace_info || { + echo "endpoint create failed"; exit 1; +} + +# deploy model from registry to endpoint in workspace +az ml online-deployment create --file deploy-online.yaml $workspace_info --all-traffic --set \ + endpoint_name=$endpoint_name \ + model=azureml://registries/$registry_name/models/$model_name/versions/$model_version \ + instance_type=$deployment_sku || { + echo "deployment create failed"; exit 1; +} + +# 4. Try a sample scoring request + +# Check if scoring data file exists +if [ -f $sample_request_data ]; then + echo "Invoking endpoint $endpoint_name with $sample_request_data\n\n" +else + echo "Scoring file $sample_request_data does not exist" + exit 1 +fi + +az ml online-endpoint invoke --name $endpoint_name --request-file $sample_request_data $workspace_info || { + echo "endpoint invoke failed"; exit 1; +} + +# 6. Delete the endpoint and sample_request_data.json +az ml online-endpoint delete --name $endpoint_name $workspace_info --yes || { + echo "endpoint delete failed"; exit 1; +} + +rm $sample_request_data diff --git a/cli/foundation-models/system/inference/image-object-detection/prepare_data.py b/cli/foundation-models/system/inference/image-object-detection/prepare_data.py new file mode 100644 index 0000000000..6335aaf623 --- /dev/null +++ b/cli/foundation-models/system/inference/image-object-detection/prepare_data.py @@ -0,0 +1,129 @@ +import argparse +import base64 +import json +import os +import shutil +import urllib.request +import pandas as pd +from zipfile import ZipFile + + +def download_and_unzip(dataset_parent_dir: str) -> None: + """Download image dataset and unzip it. + + :param dataset_parent_dir: dataset parent directory to which dataset will be downloaded + :type dataset_parent_dir: str + """ + # Create directory, if it does not exist + os.makedirs(dataset_parent_dir, exist_ok=True) + + # download data + + download_url = "https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip" + print(f"Downloading data from {download_url}") + + # Extract current dataset name from dataset url + dataset_name = os.path.basename(download_url).split(".")[0] + # Get dataset path for later use + dataset_dir = os.path.join(dataset_parent_dir, dataset_name) + + if os.path.exists(dataset_dir): + shutil.rmtree(dataset_dir) + + # Get the name of zip file + data_file = os.path.join(dataset_parent_dir, f"{dataset_name}.zip") + + # Download data from public url + urllib.request.urlretrieve(download_url, filename=data_file) + + # extract files + with ZipFile(data_file, "r") as zip: + print("extracting files...") + zip.extractall(path=dataset_parent_dir) + print("done") + # delete zip file + os.remove(data_file) + return dataset_dir + + +def read_image(image_path: str) -> bytes: + """Read image from path. + + :param image_path: image path + :type image_path: str + :return: image in bytes format + :rtype: bytes + """ + with open(image_path, "rb") as f: + return f.read() + + +def prepare_data_for_batch_inference(dataset_dir: str) -> None: + """Prepare image folder and csv file for batch inference. + + This function will move all images to a single image folder and also create a csv + file with images in base64 format. + :param dataset_dir: dataset directory + :type dataset_dir: str + """ + image_list = [] + + csv_file_name = "image_object_detection_list.csv" + dir_path = os.path.join(dataset_dir, "images") + + for path, _, files in os.walk(dir_path): + for file in files: + image = read_image(os.path.join(path, file)) + image_list.append(base64.encodebytes(image).decode("utf-8")) + + df = pd.DataFrame(image_list, columns=["image"]).sample(10) + df.to_csv(os.path.join(dataset_dir, csv_file_name), index=False, header=True) + + +def prepare_data_for_online_inference(dataset_dir: str) -> None: + """Prepare request json for online inference. + + :param dataset_dir: dataset directory + :type dataset_dir: str + """ + sample_image = os.path.join(dataset_dir, "images", "56.jpg") + request_json = { + "input_data": { + "columns": ["image"], + "index": [0], + "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")], + } + } + + request_file_name = os.path.join(dataset_dir, "sample_request_data.json") + + with open(request_file_name, "w") as request_file: + json.dump(request_json, request_file) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Prepare data for image object detection" + ) + parser.add_argument( + "--data_path", type=str, default="data", help="Dataset location" + ) + parser.add_argument( + "--mode", + type=str, + default="online", + help="Prepare data for online or batch inference", + ) + + args, unknown = parser.parse_known_args() + args_dict = vars(args) + + dataset_dir = download_and_unzip( + dataset_parent_dir=os.path.join( + os.path.dirname(os.path.abspath(__file__)), args.data_path + ), + ) + if args.mode == "batch": + prepare_data_for_batch_inference(dataset_dir=dataset_dir) + elif args.mode == "online": + prepare_data_for_online_inference(dataset_dir=dataset_dir) diff --git a/sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_finetune_component.md b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_finetune_component.md new file mode 100644 index 0000000000..e84368bd46 --- /dev/null +++ b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_finetune_component.md @@ -0,0 +1,260 @@ +# MMDetection Model Finetune Component +This component enables finetuning of pretrained models on custom or pre-available datasets. The component supports Deepspeed and ONNXRuntime configurations for performance enhancement. +The components can be seen in your workspace component page as below: +- [mmdetection_image_objectdetection_instancesegmentation_model_import](https://ml.azure.com/registries/azureml/components/mmdetection_image_objectdetection_instancesegmentation_model_import) +- [mmdetection_image_objectdetection_instancesegmentation_finetune](https://ml.azure.com/registries/azureml/components/mmdetection_image_objectdetection_instancesegmentation_finetune) +- [mmdetection_image_objectdetection_instancesegmentation_pipeline](https://ml.azure.com/registries/azureml/components/mmdetection_image_objectdetection_instancesegmentation_pipeline) + +# 1. Inputs +1. _model_path_ (URI_FOLDER, required) + + Path to the output directory of [model import component](mmd_model_import_component.md/#2-outputs). + +2. _training_data_ (MLTABLE, required) + + Path to the mltable folder of training dataset. + +3. _validation_data_ (MLTABLE, optional) + + Path to the mltable folder of validation dataset. + +4. _image_min_size_ (int, optional) + + Minimum image size after augmentation that is input to the network. If left empty, it would either be overwritten by image_scale in model config or would be chosen based on the task type and model selected. The image will be rescaled as large as possible within the range [image_min_size, image_max_size]. The image size will be constraint so that the max edge is no longer than image_max_size and short edge is no longer than image_min_size. + +5. _image_max_size_ (int, optional) + + Maximum image size after augmentation that is input to the network. If left empty, it would either be overwritten by image_scale in model config or would be chosen based on the task type and model selected. The image will be rescaled as large as possible within the range [image_min_size, image_max_size]. The image size will be constraint so that the max edge is no longer than image_max_size and short edge is no longer than image_min_size. + +6. _task_name_ (string, required) + + Which task the model is solving. + It could be one of [`image-object-detection`, `image-instance-segmentation`]. + +7. _metric_for_best_model_ (string, optional) + + Specify the metric to use to compare two different models. It could be one of [`mean_average_precision`, `precision`, `recall`]. + + If left empty, will be chosen automatically based on the task type and model selected. + +8. _apply_augmentations_ (bool, optional) + + If set to true, will enable data augmentations for training and validation. Please note, if it is set to false, normalization and resize augmentation would still be applied to pre-process the image. + + The default value is true. + +9. _number_of_workers_ (int, optional) + + Number of subprocesses to use for data loading (PyTorch only). 0 means that the data will be loaded in the main process. The default value is 8. + +10. _apply_deepspeed_ (bool, optional) + + If true enables deepspeed. If no `deepspeed_config` is provided, the default config in the component will be used else the user passed config will be used. The default value is false. + + Please note that to enable deepspeed, `apply_deepspeed` must be set to true. + + Please note deepspeed is not yet supported for MMDetection, will be enabled in future. + +11. _deepspeed_config_ (URI_FILE, optional) + + Path to the deepspeed config file. + + Please note deepspeed is not yet supported for MMDetection models, will be enabled in future. + +12. _apply_ort_ (bool, optional) + + If true, apply ORT optimization. The default value is false. + + Please note ORT is not yet supported for MMDetection models, will be enabled in future. + +13. _number_of_epochs_ (int, optional) + + Number of training epochs. + + If left empty, will be chosen automatically based on the task type and model selected. + +14. _max_steps_ (int, optional) + + If set to a positive number, the total number of training steps to perform. Overrides 'number_of_epochs'. In case of using a finite iterable dataset the training may stop before reaching the set number of steps when all data is exhausted. + + If left empty, will be chosen automatically based on the task type and model selected. + +15. _training_batch_size_ (int, optional) + + Batch size used for training. + + If left empty, will be chosen automatically based on the task type and model selected. + +16. _validation_batch_size_ (int, optional) + + Batch size used for validation. + + If left empty, will be chosen automatically based on the task type and model selected. + +17. _auto_find_batch_size_ (bool, optional) + + If set to true, the train batch size will be automatically downscaled recursively till if finds a valid batch size that fits into memory. If the provided 'per_device_train_batch_size' goes into Out Of Memory (OOM) enabling auto_find_batch_size will find the correct batch size by iteratively reducing 'per_device_train_batch_size' by a factor of 2 till the OOM is fixed. The default value is false. + +18. _learning_rate_ (float, optional) + + Start learning rate used for training. + + If left empty, will be chosen automatically based on the task type and model selected. + +19. _learning_rate_scheduler_ (string, optional) + + The learning rate scheduler to use. The default value is warmup_linear. + It could be one of [`warmup_linear`, `warmup_cosine`, `warmup_cosine_with_restarts`, `warmup_polynomial`, `constant`, `warmup_constant`]. + + If left empty, will be chosen automatically based on the task type and model selected. + +20. _warmup_steps_ (int, optional) + + The number of steps used for the learning rate scheduler warmup phase. It is the number of steps used for a linear warmup from 0 to learning_rate. + + If left empty, will be chosen automatically based on the task type and model selected. + +21. _optimizer_ (string, optional) + + Optimizer to be used while training. The default value is adamw_hf. + It could be one of [`adamw_hf`, `adamw`, `sgd`, `adafactor`, `adagrad`]. + + If left empty, will be chosen automatically based on the task type and model selected. + +22. _weight_decay_ (float, optional) + + The weight decay to apply (if not zero) to all layers except all bias and LayerNorm weights in AdamW optimizer. + + If left empty, will be chosen automatically based on the task type and model selected. + +23. _extra_optim_args_: (string, optional) + + Optional additional arguments that are supplied to SGD Optimizer. The arguments should be semi-colon separated key value pairs and should be enclosed in double quotes. For example, "momentum=0.5; nesterov=True" for sgd. Please make sure to use a valid parameter names for the chosen optimizer. For exact parameter names, please refer to https://pytorch.org/docs/1.13/generated/torch.optim.SGD.html#torch.optim.SGD for SGD. Parameters supplied in extra_optim_args will take precedence over the parameter supplied via other arguments such as weight_decay. If weight_decay is provided via "weight_decay" parameter and via extra_optim_args both, values specified in extra_optim_args will be used. + +24. _gradient_accumulation_step_ (int, optional) + + Number of updates steps to accumulate the gradients for, before performing a backward/update pass. + + If left empty, will be chosen automatically based on the task type and model selected. + +25. _precision_ (int, optional) + + Apply mixed precision training. This can reduce memory footprint by performing operations in half-precision. It could one of [`16`, `32`]. + + The default value is "32". + +26. _iou_threshold_ (float, optional) + + This is the IOU threshold used during inference for non-maximum suppression while post processing the predictions. + + If left empty, will be chosen automatically based on the task type and model selected. + +27. _box_score_threshold_ (float, optional) + + During inference, only return proposals with a score greater than `box_score_threshold`. + The score is the multiplication of the objectness score and classification probability. + + If left empty, will be chosen automatically based on the task type and model selected. + +28. _random_seed_ (int, optional) + + Random seed that will be set at the beginning of training. The default value is 42. + +29. _evaluation_strategy_ (string, optional) + + The evaluation strategy to adopt during training. If set to "steps", either the `evaluation_steps_interval` or `evaluation_steps` needs to be specified, which helps to determine the step at which the model evaluation needs to be computed else evaluation happens at end of each epoch. The default value is "epoch". + It could be one of [`epoch`, `steps`]. + +30. _evaluation_steps_ (int, optional) + + Number of update steps between two evals if evaluation_strategy='steps'. The default value is 500. + +31. _logging_strategy_ (string, optional) + + The logging strategy to adopt during training. If set to "steps", the `logging_steps` will decide the frequency of logging else logging happens at the end of epoch. The default value is "epoch". It could be one of [`epoch`, `steps`]. + +32. _logging_steps_ (int, optional) + + Number of update steps between two logs if logging_strategy='steps'. The default value is 500. + +33. _save_strategy_ (string, optional) + + The checkpoint save strategy to adopt during training. + The default value is "epoch". + It could be one of [`epoch`, `steps`]. + Please note that the save_strategy and evaluation_strategy should match. + +34. _save_steps_ (int, optional) + + Number of updates steps before two checkpoint saves if save_strategy="steps". + The default value is 500. + Please note that the saving steps should be a multiple of the evaluation steps. + +35. _save_total_limit_ (int, optional) + + If a value is passed, will limit the total amount of checkpoints. Deletes the older checkpoints in output_dir. If the value is -1 saves all checkpoints". The default value is -1. + +36. _early_stopping_ (bool, optional) + + If set to true, early stopping is enabled. The default value is false. + +37. _early_stopping_patience_ (int, optional) + + Stop training when the specified metric worsens for early_stopping_patience evaluation calls. The default value is 1. + +38. _max_grad_norm_ (float, optional) + + Maximum gradient norm (for gradient clipping). + + If left empty, will be chosen automatically based on the task type and model selected. + +39. _resume_from_checkpoint_ (bool, optional) + + If set to true, resumes the training from last saved checkpoint. Along with loading the saved weights, saved optimizer, scheduler and random states will be loaded if exists. The default value is false. + +40. _save_as_mlflow_model_ (bool, optional) + + Save as mlflow model with pyfunc as flavour. The default value is true. + + +# 2. Outputs +1. _output_dir_pytorch_ (custom_model, required) + + The folder containing finetuned model output with checkpoints, model config, optimzer and scheduler states and random number states in case of distributed training. + +2. _output_dir_mlflow_ (URI_FOLDER, optional) + + Output dir to save the finetuned model as mlflow model. + + +# 4. Run Settings + +This setting helps to choose the compute for running the component code. **For the purpose of finetune, gpu compute should be used**. We recommend using Standard_NC6s or Standard_NC6s_v3 compute. + +> Select *Use other compute target* + +- Under this option, you can select either `compute_cluster` or `compute_instance` as the compute type and the corresponding instance / cluster created in your workspace. +- If you have not created the compute, you can create the compute by clicking the `Create Azure ML compute cluster` link that's available while selecting the compute. See the figure below +![other compute target](../../images/other_compute_target_for_image_components.png) + +## 4.1. Settings for Distributed Training + +> When creating the compute, set the `Maximum number of nodes` to the desired value for multi-node training as shown in the figure below + +![set maximum nodes](../../images/maximum_num_nodes.png) + +> In case of distributed training, also known as multi-node training, the mode must be set to `Mount` ( not `Upload`) as shown in the figure below + +![Output settings finetune](../../images/od_is_output_settings.png) + +> Set the number of processes under Distribution subsection to use all the gpus in a node + +To use all the gpus within a node, set the `Process count per instance` to number of gpus in that node as shown below + +![process count per instance](../../images/process_count_per_instance.png) + +> Set the number of nodes under the Resources subsection + +In case of distributed training, you can configure `instance count` under this subsection to increase the number of nodes as shown below + +![instance count](../../images/instance_count.png) diff --git a/sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_model_import_component.md b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_model_import_component.md new file mode 100644 index 0000000000..8c2dfd81b0 --- /dev/null +++ b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/mmd_model_import_component.md @@ -0,0 +1,71 @@ +# MMDetection Model Import Component +The component copies the input model folder to the component output directory when the model is passed as an input to the `pytorch_model` or `mlflow_model` nodes. If `model_name `is selected, the component will download the config for the model from [MMDetection model zoo](https://github.com/open-mmlab/mmdetection/blob/v2.28.2/docs/en/model_zoo.md). The component can be seen in your workspace component page - [mmdetection_image_objectdetection_instancesegmentation_model_import](https://ml.azure.com/registries/azureml/components/mmdetection_image_objectdetection_instancesegmentation_model_import). + +# 1. Inputs + +1. _pytorch_model_ (custom_model, optional) + + Pytorch Model registered in AzureML Asset. + + The continual finetune flag will be set to true in this case. If you want to resume from previous training state, set *resume_from_checkpoint* flag to True in [finetune component](mmd_finetune_component.md/#39-resume-from-checkpoint). + +2. _mlflow_model_ (mlflow_model, optional) + + MlFlow Model registered in AzureML Asset. Some MMDetection models are registered in azureml registry and can be used directly. The user can also register MMDetection models into their workspace or organisation's registry, and use them. + + Following models are registered in azureml registry, and can be used directly. + | Model Name | Source | + | :------------: | :-------: | + | [deformable_detr_twostage_refine_r50_16x2_50e_coco](https://ml.azure.com/registries/azureml/models/deformable_detr_twostage_refine_r50_16x2_50e_coco/version/3) | azureml registry | + | [sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco](https://ml.azure.com/registries/azureml/models/sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco/version/3) | azureml registry | + | [sparse_rcnn_r101_fpn_300_proposals_crop_mstrain_480-800_3x_coco](https://ml.azure.com/registries/azureml/models/sparse_rcnn_r101_fpn_300_proposals_crop_mstrain_480-800_3x_coco/version/3) | azureml registry | + | [vfnet_r50_fpn_mdconv_c3-c5_mstrain_2x_coco](https://ml.azure.com/registries/azureml/models/vfnet_r50_fpn_mdconv_c3-c5_mstrain_2x_coco/version/3) | azureml registry | + | [vfnet_x101_64x4d_fpn_mdconv_c3-c5_mstrain_2x_coco](https://ml.azure.com/registries/azureml/models/vfnet_x101_64x4d_fpn_mdconv_c3-c5_mstrain_2x_coco/version/3) | azureml registry | + | [yolof_r50_c5_8x8_1x_coco](https://ml.azure.com/registries/azureml/models/yolof_r50_c5_8x8_1x_coco/version/3) | azureml registry | + | [mask_rcnn_swin-t-p4-w7_fpn_1x_coco](https://ml.azure.com/registries/azureml/models/mask_rcnn_swin-t-p4-w7_fpn_1x_coco/version/3) | azureml registry | + + Below is the folder structure of a registered MLFlow model. + + ![Mlflow Model Tree](../../images/mmd_mlflow_model.png) + + - In the finetuned model, all the augmentations should be specified in artifacts/augmentations.yaml file. + - All the model files should be stored in artifacts/*.pth or artifacts/*.py file. + - **`MLmodel`** is a yaml file and this should contain relavant information. See the sample MLmodel file [here](../../sample_files/MMDMLmodel). Please note that the + is kept as a placeholder only and in the your MLmodel file, you should see an absolute path to the artifact. + + > Currently _resume_from_checkpoint_ is **NOT** fully enabled with _mlflow_model_. Only the saved model weights can be reloaded but not the optimizer, scheduler and random states + +**NOTE** The _pytorch_model_ take priority over _mlflow_model_, in case both inputs are passed + + +# 2. Outputs +1. _output_dir_ (URI_FOLDER): + + Path to output directory which contains the component metadata and the copied model data. + + +# 3. Parameters +1. _model_family_ (string, required) + + Which framework the model belongs to. + It could be one of [`MmDetectionImage`] + +2. _model_name_ (string, optional) + + Please select models from AzureML Model Assets for all supported models. For MMDetection models, which are not supported in AzureML model registry, the model's config name is required, same as it's specified in MMDetection Model Zoo. For e.g. fast_rcnn_r101_fpn_1x_coco for [this config file](https://github.com/open-mmlab/mmdetection/blob/master/configs/fast_rcnn/fast_rcnn_r101_fpn_1x_coco.py). You can see the comprehensive list of model configs [here](https://github.com/open-mmlab/mmdetection/tree/v2.28.2/configs) and the documentation of model zoo [here](https://github.com/open-mmlab/mmdetection/blob/v2.28.2/docs/en/model_zoo.md). + Please note that it is the user responsibility to comply with the model's license terms. + +# 4. Run Settings + +This setting helps to choose the compute for running the component code. For the purpose of model selector, cpu compute should work. We recommend using D12 compute. + +1. Option1: *Use default compute target* + + If this option is selected, it will identify the compute from setting tab on top right as shown in the below figure + ![default compute target](../../images/default_compute_from_settings_for_image_components.png) + +2. Option2: *Use other compute target* + + - Under this option, you can select either `compute_cluster` or `compute_instance` as the compute type and select any of the already created compute in your workspace. + - If you have not created the compute, you can create the compute by clicking the `Create Azure ML compute cluster` link that's available while selecting the compute. See the figure below. + ![other compute target](../../images/other_compute_target_for_image_components.png) diff --git a/sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_finetune_component.md b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_finetune_component.md new file mode 100644 index 0000000000..a989095c33 --- /dev/null +++ b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_finetune_component.md @@ -0,0 +1,239 @@ +# Transformers Model Finetune Component +This component enables finetuning of pretrained models on custom or pre-available datasets. The component supports Deepspeed and ONNXRuntime configurations for performance enhancement. The components can be seen in your workspace component page as below: +- [transformers_image_classification_model_import](https://ml.azure.com/registries/azureml/components/transformers_image_classification_model_import) +- [transformers_image_classification_finetune](https://ml.azure.com/registries/azureml/components/transformers_image_classification_finetune) +- [transformers_image_classification_pipeline](https://ml.azure.com/registries/azureml/components/transformers_image_classification_pipeline) + +# 1. Inputs +1. _model_path_ (URI_FOLDER, required) + + Path to the output directory of [model import component](transformers_model_import_component.md/#2-outputs). + +2. _training_data_ (MLTABLE, required) + + Path to the mltable folder of training dataset. + +3. _validation_data_ (MLTABLE, optional) + + Path to the mltable folder of validation dataset. + +4. _image_height_ (int, optional) + + Final Image height after augmentation that is input to the network. Default value is -1 which means it would be overwritten by default image height in Hugging Face feature extractor. If either image_width or image_height is set to -1, default value would be used for both width and height. + +5. _image_width_ (int, optional) + + Final Image width after augmentation that is input to the network. Default value is -1 which means it would be overwritten by default image width in Hugging Face feature extractor. If either image_width or image_height is set to -1, default value would be used for both width and height. + +6. _task_name_ (string, required) + + Which task the model is solving. + It could be one of [`image-classification`, `image-classification-multilabel`]. + +7. _metric_for_best_model_ (string, optional) + + Specify the metric to use to compare two different models. If left empty, will be chosen automatically based on the task type and model selected. It could be one of [`loss`, `f1_score_macro`, `accuracy`, `precision_score_macro`, `recall_score_macro`, `iou`, `iou_macro`, `iou_micro`, `iou_weighted`]. + + If selecting by yourself, use iou_* metrics in case of multi-label classification task. + +8. _apply_augmentations_ (bool, optional) + + If set to true, will enable data augmentations for training. + The default value is true. + +9. _number_of_workers_ (int, optional) + + Number of subprocesses to use for data loading (PyTorch only). 0 means that the data will be loaded in the main process. The default value is 8. + +10. _apply_deepspeed_ (bool, optional) + + If true enables deepspeed. If no `deepspeed_config` is provided, the default config in the component will be used else the user passed config will be used. The default value is false. + + Please note that to enable deepspeed, `apply_deepspeed` must be set to true. + +11. _deepspeed_config_ (URI_FILE, optional) + + Path to the deepspeed config file. + +12. _apply_ort_ (bool, optional) + + If true apply ORT optimization. The default value is false. + +13. _number_of_epochs_ (int, optional) + + Number of epochs to run for finetune. + + If left empty, will be chosen automatically based on the task type and model selected. + +14. _max_steps_ (int, optional) + + If set to a positive number, it's the total number of training steps to perform. It overrides `number_of_epochs`. In case of using a finite iterable dataset the training may stop before reaching the set number of steps when all data is exhausted. + + If left empty, will be chosen automatically based on the task type and model selected. + +15. _training_batch_size_ (int, optional) + + Batch size used for training. + + If left empty, will be chosen automatically based on the task type and model selected. + +16. _validation_batch_size_ (int, optional) + + Batch size used for validation. + + If left empty, will be chosen automatically based on the task type and model selected. + +17. _auto_find_batch_size_ (bool, optional) + + If set to true, the train batch size will be automatically downscaled recursively till if finds a valid batch size that fits into memory. If the provided 'per_device_train_batch_size' goes into Out Of Memory (OOM) enabling auto_find_batch_size will find the correct batch size by iteratively reducing 'per_device_train_batch_size' by a factor of 2 till the OOM is fixed. The default value is false. + +18. _learning_rate_ (float, optional) + + Start learning rate used for training. + + If left empty, will be chosen automatically based on the task type and model selected. + +19. _learning_rate_scheduler_ (string, optional) + + The learning rate scheduler to use. It could be one of [`warmup_linear`, `warmup_cosine`, `warmup_cosine_with_restarts`, `warmup_polynomial`, `constant`, `warmup_constant`]. + + If left empty, will be chosen automatically based on the task type and model selected. + +20. _warmup_steps_ (int, optional) + + The number of steps for the learning rate scheduler warmup phase. + + If left empty, will be chosen automatically based on the task type and model selected. + +21. _optimizer_ (string, optional) + + Optimizer to be used while training. 'adamw_ort_fused' optimizer is only supported for ORT training. It could be one of [`adamw_hf`, `adamw`, `sgd`, `adafactor`, `adagrad`, `adamw_ort_fused`] + + If left empty, will be chosen automatically based on the task type and model selected. + +22. _weight_decay_ (float, optional) + + The weight decay to apply (if not zero) to all layers except all bias and LayerNorm weights in AdamW optimizer. + + If left empty, will be chosen automatically based on the task type and model selected. + +23. _extra_optim_args_: (string, optional) + + Optional additional arguments that are supplied to SGD Optimizer. The arguments should be semi-colon separated key value pairs and should be enclosed in double quotes. For example, "momentum=0.5; nesterov=True" for sgd. Please make sure to use a valid parameter names for the chosen optimizer. For exact parameter names, please refer to https://pytorch.org/docs/1.13/generated/torch.optim.SGD.html#torch.optim.SGD for SGD. Parameters supplied in extra_optim_args will take precedence over the parameter supplied via other arguments such as weight_decay. If weight_decay is provided via "weight_decay" parameter and via extra_optim_args both, values specified in extra_optim_args will be used. + +24. _gradient_accumulation_step_ (int, optional) + + Number of updates steps to accumulate the gradients for, before performing a backward/update pass. + + If left empty, will be chosen automatically based on the task type and model selected. + +25. _precision_ (int, optional) + + Apply mixed precision training. This can reduce memory footprint by performing operations in half-precision. It could one of [`16`, `32`]. + + The default value is "32". + +26. _label_smoothing_factor_ (float, optional) + + The label smoothing factor to use in range `[0.0, 1,0)`. Zero means no label smoothing, otherwise the underlying onehot-encoded labels are changed from 0s and 1s to label_smoothing_factor/num_labels and 1 - label_smoothing_factor + label_smoothing_factor/num_labels respectively. Not applicable to multi-label classification. + + If left empty, will be chosen automatically based on the task type and model selected. + +27. _random_seed_ (int, optional) + + Random seed that will be set at the beginning of training. The default value is 42. + +28. _evaluation_strategy_ (string, optional) + + The evaluation strategy to adopt during training. If set to "steps", either the `evaluation_steps_interval` or `evaluation_steps` needs to be specified, which helps to determine the step at which the model evaluation needs to be computed else evaluation happens at end of each epoch. The default value is "epoch". + It could be one of [`epoch`, `steps`]. + +29. _evaluation_steps_ (int, optional) + + Number of update steps between two evals if evaluation_strategy='steps'. The default value is 500. + +30. _logging_strategy_ (string, optional) + + The logging strategy to adopt during training. If set to "steps", the `logging_steps` will decide the frequency of logging else logging happens at the end of epoch. The default value is "epoch". It could be one of [`epoch`, `steps`]. + +31. _logging_steps_ (int, optional) + + Number of update steps between two logs if logging_strategy='steps'. The default value is 500. + +32. _save_strategy_ (string, optional) + + The checkpoint save strategy to adopt during training. + The default value is "epoch". + It could be one of [`epoch`, `steps`]. + +33. _save_steps_ (int, optional) + + Number of updates steps before two checkpoint saves if save_strategy="steps". + The default value is 500. + +34. _save_total_limit_ (int, optional) + + If a value is passed, will limit the total amount of checkpoints. Deletes the older checkpoints in output_dir. If the value is -1 saves all checkpoints". The default value is -1. + +35. _early_stopping_ (bool, optional) + + If set to true, early stopping is enabled. The default value is false. + +36. _early_stopping_patience_ (int, optional) + + Stop training when the specified metric worsens for early_stopping_patience evaluation calls. The default value is 1. + +37. _max_grad_norm_ (float, optional) + + Maximum gradient norm (for gradient clipping). + + If left empty, will be chosen automatically based on the task type and model selected. + +38. _resume_from_checkpoint_ (bool, optional) + + If set to true, resumes the training from last saved checkpoint. Along with loading the saved weights, saved optimizer, scheduler and random states will be loaded if exists. The default value is false. + +39. _save_as_mlflow_model_ (bool, optional) + + Save as mlflow model with pyfunc as flavour. The default value is true. + +# 2. Outputs +1. _output_dir_pytorch_ (custom_model, required) + + The folder containing finetuned model output with checkpoints, model config, tokenizer, optimzer and scheduler states and random number states in case of distributed training. + +2. _output_dir_mlflow_ (URI_FOLDER, optional) + + Output dir to save the finetuned model as mlflow model. + +# 4. Run Settings + +This setting helps to choose the compute for running the component code. **For the purpose of finetune, gpu compute should be used**. We recommend using Standard_NC6s or Standard_NC6s_v3 compute. + +> Select *Use other compute target* + +- Under this option, you can select either `compute_cluster` or `compute_instance` as the compute type and the corresponding instance / cluster created in your workspace. +- If you have not created the compute, you can create the compute by clicking the `Create Azure ML compute cluster` link that's available while selecting the compute. See the figure below +![other compute target](../../images/other_compute_target_for_image_components.png) + +## 4.1. Settings for Distributed Training + +> When creating the compute, set the `Maximum number of nodes` to the desired value for multi-node training as shown in the figure below + +![set maximum nodes](../../images/maximum_num_nodes.png) + +> In case of distributed training, a.k.a multi-node training, the mode must be set to `Mount` (not `Upload`) as shown in the figure below + +![Output settings finetune](../../images/image_classification_output_settings.png) + +> Set the number of processes under Distribution subsection to use all the gpus in a node + +To use all the gpus within a node, set the `Process count per instance` to number of gpus in that node as shown below + +![process count per instance](../../images/process_count_per_instance.png) + +> Set the number of nodes under the Resources subsection + +In case of distributed training, you can configure `instance count` under this subsection to increase the number of nodes as shown below + +![instance count](../../images/instance_count.png) \ No newline at end of file diff --git a/sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_model_import_component.md b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_model_import_component.md new file mode 100644 index 0000000000..bd6b0c1e11 --- /dev/null +++ b/sdk/python/foundation-models/system/docs/component_docs/image_finetune/transformers_model_import_component.md @@ -0,0 +1,71 @@ +# Transformers Model Import Component +The component copies the input model folder to the component output directory when the model is passed as an input to the `pytorch_model` or `mlflow_model` nodes. If `model_name `is selected, the component is just a pass through. The component can be seen in your workspace component page - [transformers_image_classification_model_import](https://ml.azure.com/registries/azureml/components/transformers_image_classification_model_import). + + +# 1. Inputs + +1. _pytorch_model_ (custom_model, optional) + + Pytorch Model registered in AzureML Asset. + + The continual finetune flag will be set to true in this case. If you want to resume from previous training state, set *resume_from_checkpoint* flag to True in [finetune component](transformers_finetune_component.md/#38-resume-from-checkpoint). + +2. _mlflow_model_ (mlflow_model, optional) + + MlFlow Model registered in AzureML Asset. Some HuggingFace models are registered in azureml registry and can be used directly. The user can also register HuggingFace models into their workspace or organisation's registry, and use them. + + Following models are registered in azureml registry, and can be used directly. + | Model Name | Source | + | ------ | ---------- | + | [microsoft-beit-base-patch16-224-pt22k-ft22k](https://ml.azure.com/registries/azureml/models/microsoft-beit-base-patch16-224-pt22k-ft22k/version/5) | azureml registry | + | [microsoft-swinv2-base-patch4-window12-192-22k](https://ml.azure.com/registries/azureml/models/microsoft-swinv2-base-patch4-window12-192-22k/version/5) | azureml registry | + | [facebook-deit-base-patch16-224](https://ml.azure.com/registries/azureml/models/facebook-deit-base-patch16-224/version/5) | azureml registry | + | [google-vit-base-patch16-224](https://ml.azure.com/registries/azureml/models/google-vit-base-patch16-224/version/5) | azureml registry | + + Here is the folder structure of a registered MLFlow model. + ![Mlflow Model Tree](../../images/mlflow_model_tree_for_hf_image_cls_comp.png) + + - All the configuration files should be stored in _data/config_ + - All the model files should be stored in _data/model_ + - All the tokenizer files should be kept in _data/tokenizer_ + - **`MLmodel`** is a yaml file and this should contain relavant information. See the sample MLmodel file [here](../../sample_files/HfImageMLmodel.yaml) + + > Currently _resume_from_checkpoint_ is **NOT** fully enabled with _mlflow_model_. Only the saved model weights can be reloaded but not the optimizer, scheduler and random states + +**NOTE** The _pytorch_model_ take priority over _mlflow_model_, in case both inputs are passed + + +# 2. Outputs +1. _output_dir_ (URI_FOLDER): + + Path to output directory which contains the component metadata and the copied model data. + + +# 3. Parameters +1. _model_family_ (string, required) + + Which framework the model belongs to. + It could be one of [`HuggingFaceImage`] + +2. _model_name_ (string, optional) + + Please select models from AzureML Model Assets for all supported models. + For HuggingFace models, which are not supported in AzureML model registry, input HuggingFace model name here. You can see supported image-classification models [here](https://huggingface.co/models?pipeline_tag=image-classification&library=transformers). + The model will be downloaded from HuggingFace hub using this model_name and + is subject to third party license terms available on the HuggingFace model details page. + It is the user's responsibility to comply with the model's license terms. + +# 4. Run Settings + +This setting helps to choose the compute for running the component code. For the purpose of model selector, cpu compute should work. We recommend using D12 compute. + +1. Option1: *Use default compute target* + + If this option is selected, it will identify the compute from setting tab on top right as shown in the below figure + ![default compute target](../../images/default_compute_from_settings_for_image_components.png) + +2. Option2: *Use other compute target* + + - Under this option, you can select either `compute_cluster` or `compute_instance` as the compute type and select any of the already created compute in your workspace. + - If you have not created the compute, you can create the compute by clicking the `Create Azure ML compute cluster` link that's available while selecting the compute. See the figure below. + ![other compute target](../../images/other_compute_target_for_image_components.png) diff --git a/sdk/python/foundation-models/system/docs/images/default_compute_from_settings.png b/sdk/python/foundation-models/system/docs/images/default_compute_from_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..248943b414a9e34338e75d6554a5a19d44d92444 GIT binary patch literal 28973 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%0AXE%qF{>8XNjm)wujryg`4_ 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 m-7M#!;*=>)(SBZ@p5|P^^-FAM#&@k|yH- literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/default_compute_from_settings_for_image_components.png b/sdk/python/foundation-models/system/docs/images/default_compute_from_settings_for_image_components.png new file mode 100644 index 0000000000000000000000000000000000000000..3e837445dc135d608f92bc3d7d796d0e5667f382 GIT binary patch literal 81121 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%0An+=%Da03nA`Xv)W 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 literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/image_classification_finetune_components.png b/sdk/python/foundation-models/system/docs/images/image_classification_finetune_components.png new file mode 100644 index 0000000000000000000000000000000000000000..df67f9950dd7cabb593c18c346b246bcf64a0136 GIT binary patch literal 443405 zcmeEvcT`hfwB|)XKv1N2q5`5IpweqZrHK?ldWq7Dfb;-?017BoKtSmVh)9zXkQzDy z0@8a4AU%>$LLebbe($|`vu6H!Z`PZ&W@d3$PFO3s;oiNo&)Iu_``ag{lc$ToHr1#xI%FS08VFs2LR={bN@WZ2Nn52O-oHpMMZsqhUPpi!vzKg`U~{*7cVhizIci0 z58PpcSTE9FWc^Pcr!4>zE%nQb z5|k9zfOAX~luQ(-9RLUbD5(FrTM7!`-wuj%UowY&uOlCvfd3#{6s5ozoM1RU=MN1CeDyjaGV0CS=%nQL zDXD26KBj-p%P;s+__gR;WmPqzruIi&eOr4+XIJ;np5Eb+(XsJ~$*F17((=lm)wT7F zP3-R8{sHa~e{}qhToeH1zl!zmlKn4oF_GmuM@2Xv{|03CcOtA3(Ey?~}u>T>~G{8Vf zLH_b6nE)_==RuF30($OetikmQq@d1IAUJwuJ@-=8 z*%i*TbY@Fu^WkjOI9prK{KJ_SJ&QHY;-#~w@+>kw%OB3Ntg}q z`KA$^#3_)pW_t=)n}Cn01G$3b#yW>zkBubNb;o8Fp}y&g_h0uyf|{8NTTcPLnl$HI zhvsU(=)CPcU#j{)Xl1wuyldH~j5SH07|m8V1!6`pJWuKY?InqGn=ER={y}%Ub8_{; zJ459nCz;Lsg&lg)+%OIoaHSM+lVf|qzc=<(bq+3ra$U!F>H8zoAMKZ#rc*t4o3~c} zdZVzqasiL3#<{_1M|q7{kL{iUyetmRf4jMHR3n<5^Lpwa%!ZaY#Y!z&<#)gKus(Wk zhw&6>L!1H;vSp`$%SkbbohDnQwYGnzN;KB?5K5Su+Y2;lz%MUR!XA^gb7RY;W2&Z( zRmKG#Np)K!_^ygaG52l`4N(DuDpqST3oz%;+t+=N^=6 zutnt;3%!mF2+jyRKpdO`>}eWo7smLmW10QewDlC7H_8g5pIA3xAd9OhOHGU>*o0VV zE}xw9PHQj9&ns232MyZ|Dz@nZJf`Ab?|ngd#dmRHfjX}WjPZY>M*4F{H;+(M7{zxMo| z9Je%_+FuG<4u%aY-Hkrx(ZvU02q?$4Q{W=LxSLxyZ>jhcV7i(*-8=3VPRl|Oxn@x4 zNBcK$e_47phXtW`&UJ#@0?*QZ92wqe<&JhQlq{APt?IMc*26l=q0Nk2AH9|@loJuBBMpB%5C>tkY2z4+BWPyAe$^4F7t_jd!uf*Ccat)bC( zGM61D7Bp^8C;-)iD7xPuzrP0#V5LL z-S@*4!;f8a6=}UzBIEW#Gi@3jnv+i6?`JgmqYgVu724Q;G}VtVb3Qkq@VEOwG02;K z;8pKg91|ylQJ=}LHe`5~MyZ<5yay0pAtKEx4kwaD&-XM{D>9NnM@Hag-LQw!!; z5(R}rXnpnY>e5z}PqEGAF85uy-}@(c@Os&q!Plh+iWkLDJP{stY{> zABX)Ymo9h3(_psR=cO?k9a#^|Mo3fs`OZkE%H)A0@J-w!?}%qSDb_p!(d8Inly%rr z7ELGrZLEd04(b%R)WNUK2Yy?|8Sa_g3v6px=U#}2D7I!5U}O80zf)D|{#UQBFcEHA zsP1bw*Cf2sbbAs zE9?I96^G{Fyj!IWHwTrN%u#obja(JHi`nZehEH-11I>5(Y?ajS7AQRO{4!E+K2yK9 zHS!BT5Pb-aQjiT*5rx5qq~>JXMw~-9vZvKDbh2?Kj)}I3wMSuxjHpHav8Lq&1|mD& zX`Ni?fyP+C9^-D#56g%%$(~RyRj{Q#5zKjLo>9MK=nq zBP+YQB%js^{Tf5tlN>XlgCw?cq6m_n91AGp%JDi?rvQtGWdF>e?)Kj!6`agAdLn(# z9JlZ`=Mqejtn4WQ>hP`433&T>yjVc&&qR(uK(1&`z3I1oKA?D>5AV2`6NzN>Dd!++ zMedn2j7OeGw&M&w#HfYBdN?m@Q1R1tp<0FGM4xSr6+7gy=CMx?-;^p@$k=k5V#P{r zjMT5DtPES!?2Pp7D=|kOGw+bE*}fCAz<7Z6K>hs~j4BPf7lW2HR~u`$)KHQWtdx}G zUF7wW=OlXxS(Hb+1nneIbTmW|KR-_}8F^k$;Hyb4tV;;8yErU&B`kR|*0%Xx39`zi z?rWD;XQ8<3hJC~Iu^*yer9nrnCf#{@&KNCPhbnb; zXKm1d9$s!#)K#~>|G?2hb*n!h<>mO7BJC6{?SAWpXbmfc`22uO^IbSbob`#?GZ!{A zl71gf1GB}zRH*90``YHgHU7aYmcn)l#dij$#NR5(D+%ncBO%NM#v-ln-?gkTjq0C| zdef*_gx9ug8ajx%S&i21HN4navV~ZFK6wfx+?Qv|g6O!qsECpJtDxOWSGYCaNEusz z81YHEj@WattK*ua{fIjqa}8@3b3Qu#Tbi&Bj^qGetZty++Tk_Ztnc6aS>#+W2~OcD zqDo8L&40G|a%$~U>DLil)t}WTdqG^IIaLYL8T(4R(Z`0`7>Rbqcz#B#C{$E+R7rSA znSFHrmZVivhY2mkk?yL;W6y9pzCe=?L`kehdlsWseN2}%Lp@e(Z?Ku?jl@bVQ+M^n ze9_PVsqVsREppG*BLQ2kL{ zsDmjrW`!Qf0Qhk|(^GbJ{^Kj)`ZT7|vbwo%OzfCT14L(yap~9ivNN>52@PhOB64AH zIZK1lAzVWT7I1{~L|P0hX2)*6P@d;~IGECEth_zvQV+pM_Em=7U=$d^KeKHO%h_yW z<_JNbXjn~^Ju+2D`NY*({OA!__Lxul&h0|s^EC;wKd~aBn_wQO;$lKu4wI|73eqw7 zt4pn(!1Tdlmqw5itK%D4X5h5HV-FIwZSUr1)Txt@rRX6UXjHTf+7RSiG$?9B*dqD?qCyEjaBzG!v4B{6=S6)Ww|nc|ugH ztR6kFs}lUVITi1pM`Xkokz>m?K3mkBqxzV*fN$k^nS|NAiIMQFFr4URx~^e4Wx0|$ z?e=ba&PBg+*tV|#J z>D5dids`3I_Y^_~EN7;BaXU>&mbLoBQ((HPT>%{RB80CdrNDF}&NuI^`^Buv`wlRT zJ(b_G{CdLU-@#7E*T=H$bJ`EaV0WY{@g5!QNY`quw+=CXlj@WbBMl@6Et9Ph&~HzH zE2lst1V;txRalSbHifB(WIe3Q>%li?f9;$wDt^93lebE&&yjti7AU-Zgi;pm260I7 zaabS-?jL=I-#**pSDt)33Hzza8}@r5M*V&9Slo@B>uK|WDJ~-VDOxX51{FUy$6!;F zF|H`a7=#t*>2F^U2P7uVp|-XODpn$J>(Rp!Ud0~ALrUHgN{+o%%TxYo(QJ{LodH{{autg8lF|ij;hx)!dvLp1oG;4-`ACmd1N6| z4Nq8y+Or)nMyfCnl`Jh~PoIX<{NHI&ejc@8I+-ehinBsDjtSF@C^A<+1ssz*ARaG&dA}0r;=O5oG%W}6 z8AF2>6Cz-21XVM9rN|RRM4;N=_$C77?{63 zABPSGv-vRcaenzjC&pu<{j|0Q`Kn6At(1|R&^p3BoEN4^jyRKP0RklXkXYItvH)|a zCI&2S<($XwnPQd&l*awzJUF|>>y8+g3iOt(5m*SS{56rfgeZr3ukaFn*^)lMcP6L$ z(c^5}Z`(5sE^BLqTwV&xQA`R*DJxAtYoWof_TcwC^o_V_akJfYt*iA~Hq7x9c+Ep% zaR#HTkC2#z0H)>sJ29J!rUw$3JjET&^nU)z$iJ@T= z$%jb{!D|k3JqJtmaAqic@vxQWYoq*<7>_=7;;rq&;QLMz{L}Of&n|V)_9cg3x)gZ8 zM`LBlrZxU;b(xyO;ou3NEsdFYg!f+Faw00faNFm5)GONX zkXb3z@oK1pV77VyxYP3BJDXFRVX}_;jIY5|xqu6_*H?%$|L@LW>Byc^bo8;s(qRi9 zP3tLeZoeO*i&D>&(WWc+8n zXh>BlGNCaf<`cea;9Q9PlDi*H&+-|G&5)7}(L5%_UM z7IN^!jppQY(8QV*5R`^i#!R3%!meZb$qO;#8(Dt2A%s(*>l=?TgU!z68?2fQ0?&~_ zwmzoNC$s9FJ$N^x*_IBOti{>lEwIVt=d7i2 zepMX(3HyFY$Tbebq7if|=SpI#kSEV~YHX85lA=CM`%{y3y_N-P(obad+8gm^ZfH=; zyf7x=ts~<7Mu=e3m|d!Nq-s_dSUT^LMt^NzE3kV>G;2Z$L=X$f0%C?qmJtoH zaX%iExlH>KYid%NZ`1Tf%dN&Xk6p={QaK5wX=gPVh1V8t_oK=~Rm3q}rHif^Z;32R zTa;g&v6k|Qr9Y?5D6`EpeFXfK-f4BYu9N+cEbhh02l5)E18&Whz^X)i3l1mfsKvAe zihok<|2B7-TdN?+OetuDq$$g6-9`7%mw@Z3l1Qs`OHc-71jV+%f;B-+Xc?s&G}#h+7u_x6O@K&)JDC7u z=GXG!h3T|KiR~(aD84~sl&FSsgFKBgs4%L;I3yHVQu`UJxQ%t}>NJ_WH+uT~rxL&C z8kiI5h5Yb|mEc$?_s z1)S5#$Hwy^mo^u8o29KG8jJK?{bgBs&Iy&v#+fq14VAQ3Q~GT0lQ>iL8_6yn9*L}C zM8};}EtW@xFiwQ95${D0X!nb(?ir--&hI#4ek7UEc&1S3(p`RySYwpewkUrMxxSECS=lI}`XxV}XTHAy=XP`uM2Dn^HS9&Nce; zO{HBz;0DJe+53-J6ZPbjcumIP7<~{3Mvpq1`?`dE1^yHvS;N*(&t zUQ1tvhenWhDHMGDMmd7SKpM=U3*ja8r6PGrcbvHg*9_XqrpB`RN1=x{Id-jP`aCKs5ZR83wQk#T z2f2(?XJx6gvfTd(8z}cVi8%#U>d3k8M9Ls3%$mar(hhp7kkgjH*12@?8ohSRQ$4Rn8H!VoLDG=Rj~>^-iVux1Zd8FRC_EPCULuU`*X(KG3` z9Pfqw8>^QKqcXV<$Bsbu5;2&W{!F8nURh2(VBeXK{(ojjbeqj&3?^9;J9rX#jr7te zA?g&^b%0+6Z(q+Dm~Twb#upbmgBcDWln*@YrgaOvY7HN+ulhdI4=v$w0$tfGYyxZG z5hYGJ3W>4*qI*b ztRGMNYSx|)_0~)xU5{Kk)Ens?ymq_&+^=nUDqM-k({`Jp5nsFI8)X*ehc)A47Qe<> zw@_=+v_ifmzz!9*eEZ5o)52yFyY!3dpfvVnRTwdtM*R68;`8s zop)%^TTY_uyO9tvS8hlfTD!&5!n7t4?j>IEaoPJNC##(CLhZlk%=2ZxP-D+6-63tB z^BVUb+@!hkYI5k-3tJOLV{U>}`DVs*-dhE_2>FeHg{35g!5C|2L#FuLTx3VaVMX~Cf8TQbSz0O_<+55^|XrZ19&V3t_f&fxo^IhP@HHm|PD4^T0+ z0?K}0cm8?>Z>d?(MWs9%wOd(9*DAKiXlSn4osH6FGP|E;nxCvweOPPnUg*4-lVH9U z3R8ANLD-<~6P^4Vc4mtszHeme)feto>pmqG3WlrVuGNN!;%VAcSYl9z9bkrb&oArd z{lC1m^XFu6QLds%`AMFk&>nRBB~kizB*G-R8gy~vSg0!*HRm;<7iUuwY~1n_`#F^L zTv=Wyjoe_VCx}@^6q>M9Q*?0^=~r1=|Gowheuww=%}pka-(Fr&UW~|EOx{6=hOBI% z*iv%BNmCGFcqWjAR~h2=>vJxmDLd)NBBWMX8~6M7j^UDz%GC=a>(iz0#hjsecWTC3 z^#dLAg1JjbT{4mz*&H#8#kLO zptLMEC|9b2cx_rdHrkXNUu9xVsfjS@QA3nR=S35g@LR$0{h%Plj3Tk@(SlvYFXJLwZIzkC zye2O%OT}5K#qD>^#BxsgLAF&rCc5WEh8CSY$SmZ~zj0h52f{=7&0D9y$G?!8_b+mI z%ckCkk}=u*Lmth+RmMNoEY_W6q|tdXtn6!{-@X=n%t!gvt^(h*9Tr~fPCoxmz=dnP zL@ZbDald!95i*a>Fz_EUpV(OClzUpBF7-{+YoqBe8K(@0dTCNh%VYaT z(}mkh#dWH5Gxdrd%d^+CoUAF&e2yjYYZ>Q{NjQuweoxv(ZC~+A5;abVebQj-EwTn= zG9*r%3sr>2f;l~!MP0_frdF&sa}6&OWD;_xJ*nRd^-Fc;@7O79>~y@sBf{IoiD!~l{EDcXj!ktEHbJWH2q^EZ*SFab|* zzP@^L>15sd4`)(klF90Qa#`ci52~PlH8~acf(99MIyu+x(nx= z<2I<-eb?q zAd^G}BNa=fr?b4Q2yKTM*KbGJvETPrOOBqtPakUjc_6yOhzBiqw=J+iYc(*F7?U?d zFh`CjU&brPmolj>mH^#_Ip9iS(wO05rklieA2#5L_H8B^np`g7-Sa;nppc<#Q7kTW znx&h(a*Jm6J^ws?#MG<$b1v0JgHJNyi5ciZvm`WT@#J7-`YIxuzJts}31&*7^UP$X zpb-%M#1~MOQ-(^tF1gV=nxACiCLLlleF{i2ew*+S0!a>+~YcyAQ49UTCp`vmP)|1n}4 zg-$Q{){iqgC-HapDSCjB|C{To1Pjb^T*-(G2DOtI8)_;N9uILM8ozffIsOz_6Z#2; z?msclVIb!@66{2=5r^UZ4KZmxZUeLGIRh3ciUb4TYGg1)>wdYhe3p=bmdyJ+wjg0g z)_UckwLZ!xZDPfUn~K&GI)_%eJ9;Ny?V@zXpZ#+w5To<;)d9`2GN}who?8!}RlR?* z8?Iq38NJlZ3A4j$wCM<;xL+ugM@Tz(Na~G=^;uXlMR>)JFV|x z<_5xR0>#4$tQah3*2h)!Gacn@eszE4yQ5E3I>}SgCYMWT+Q)GUG8K78aU$lMI0qwj z+a&dIgMfp6Z*9&3bFqn#O+Q$X%dwfV;nopPiR9D#rsy&BuZ4k=Q=m92t;2&FFVUTI zUI?Fovf|gHo3pSML;Ou!^{7pZxp7_PL)U?T6J@x}TKdsu6aA7&w+Aaszp{4ZfTQ~R z5PAk?Zk|Q$9ADg5nTy({+T)7;~XCCMB?Wu{HzpK@Op9SBCN4_@=J-;4rlx{ab zzCKZ7TjTp=-GfO(i6=5fL6&4Y982D9zzrl>h~bck(^_vc~Sx z+B1EM7V>}B(uYT0*48E&JE3O1W>_=D^@RC!0N(}nW-*sjfJ5nF+TjLUe3mn3&4^Tx zYR!yZEy(Z2#QJ$XgMfX?H=m<{8{{EM#%Sm^>OpOgsY4y?5vD6=sr>ThM5%j{OGN+< z_lT?INWt+i7%K1ngR?wSbVP+aJS5L@eO#+>vtDZ3a^o0Lm(FH88p@?P_|FV4 zOdBsy&(E?FPuHEO+Odt|dQ@O4q-UXQg!Y|Y8-`SMlP3zyV2Ehz`EAN{%85NasM|d~ zI5%8Eu1JtFNte}Ukc%I&2Wpjwkc1gyUm{ZVD%Sl(aajgOZ;ZkzdR8!;i(&Ze&IDF6N=eO1|xH-L+UW)Z6i(!#t|q&vDu2V zxDXPNswFI3m3V`SqJ?wAy6Les3-h{qlZMbG*P7Zfv%rw3EIr0Ix!-zYnY|E6LHvF17VDXzCNzsy{eIa&U5dVBhyWjSHDlPZH+q%jm zeSbLa zJ#Fe_{!rhtbhM`4H(8Burl|L*JHUZ!jUvKRpJ+LL6<-1isTmhGlhyHG;au1z^d`nN z9NN+lMnAo2Lv4%{(#d;`8n};-^cl-P=`hY*lPiGA6$EWMg$%h5!(L(&ZA?#^qEtcw znm>^H_?+(XdC*BViFYdzDyoLf{&+EcTK71s^4G0=BO|%qtlY})!twVG*mgZ)i6;Kb zIczS0C&ZWS0bd_GrihJ}JWsHvN=_(}9wkcP(M!nJ6|)vjdo!~eX;jtq?w>d^+<&Rd zKD$h&g>dbp$Ev8XRd zH^!}S-I~9mSv`KkCy4Rpm;1M$raEkG-VWYM!Q^!I+qO2-V1*-Il$O|!9Q>j87V2=f z*S)iQd6BV$d(Po_K5C)kF<*K!t`+$xw2*%Cmf4@5$(x z&iU*0*qpZrWj~ypO~a_L>sy04%~(m^cezQP2iF^OJQ#~aK(6VhfT-!d^8024I?!td zTekzMt|cZSUqNsT;A0VP|Nptzx2wksGapw9M&&T92Sy-bWwJr9wsGZdJSFiBMqYn1 z!(YD2y^u=#7NydMRskwgsjStCnIbdHg`r{)aw&w^tDNI zhyiXn^Y?$Wkdem^=4{MSVibJ<3o;lZc5@QZIPdy73Nae}U|Wb7*2ZOgi-=%;U8l zDab4szR=~5yQOSq7_OJH-53j>rhm}MC=LF*Q=S;7;JelK-XSUW#ZEA~CUxW&P6E^*v2DA^#&Eyp z%MsVso~0q!MogU(=CP!G?p~6jZyLHapzrd%(Z(I$AEHiPou|joa2)4n=V$>c~k3z9eG<%o`w5L!geF1leo_yeCZ*n#lD9 z?|7f!lrAsz(_HRxG@U&F)E!j@O_bto+xoD}sD(DZ`>Lxwxtn5zE|0tA!lf7Xf{kx< z6E8If;Ipt99dLI3e%~}i!W~<&Gg{Y2$)x=aZ(y(p}Y7OV|6qJzLur*tW@&+G#o* z+FB3N2!p*qa;jW|Sz%U&-D|KynO|C1c8e|k*a(m)U!4LJWnf$+9RDDMk0^^dM@%+1 zJq4T>G&ZE_x`JEphWM^nQ(|lKFk7AJ@Hal6=pknEcG?kQJob-Lp3w?k*1InPf3t8I zp%=}6s{wnd?7PsPw$C5XMyY~E`nfl3GM76=dKLEddYVXWEbP0Q$ej0c{-&yg z-4M!jRLD)D;drwcKIhmJ2&V_ z{h1TJlxl1rp>@lMLQY>xn6ggVJoKOH?>_^q8A7){M4HUO=qWBl)Qfc@iNd4{4Fs!# z*m$9JNqZp;JGc6 zJGl>n;Q0ggaPLagQ_$xy^gVt_g5WPQt_pYBc|Cs}%a$^bfg;2`r{Xx&zpE;%VrJ)c zyVd+*4_BAEYvm~ro&*C=H1ZKlph&|pF$XI}NUGwA!hX^2T1>B+Na^qQB2QznVVj}@ zV5gkv&4#`?o6P@ zix0LPXB9>^1{X|yE2t$3O?%JvFn?`}+q%Zy@|Td%1Oy_9EX`fZC}ayLflLmEsZvhi z4VKl|W%eEy7;oBZg*_ddUwvvV*=LiCdwdGKcP9-Y59UsR{fE+f3Eew0qDy*cuEJ?& z6@jM85hZz-2kp7*eyh_xram?WA3wy;d0YMDY=+6Mi@&zM^lz za;{y}O8t>Y$VRHslQzc2xcN}Bq2Prf#BBd|@bPi|DKIR*m3&fR=L~j%L^J#%+qQ>g zY{j5@OPTf}vNH>^2{hslNSQCq>k)kS;A>tZgSBw%&Ql-T_Uu^sPDhv)_U|XG zc6a?@48qi{^gztvulCHFlCe}afBCDFl9yHTPn;pOLIxpo*B-29;4TN32X)m=6M5rny)6e*ctciL3wFl%qfVh!}Q z86)i~l64}VCOw>d`%$}hF;iV--TF&2;iMky0_G<5H($j+gGouvX=slT#aZ-+5Dk#( zsadrBE;X)(D(R8vz$nFj;U(Ev(sf8w1tv8t*V1Bkp;xADSYAW)2gWbo z{tY?>SC)tKlfc&EcuqbkiK66U=Y^Ba(oDEtTnQLyS(Rs{=1qF2n>XhPQ6RdWG^+>` z-7uz@h~D*VW=s`>UOwKur}XL%uAe5i{?2$4uY?A@vev^yErVlKsPJu!EKpI?G|e#q zh*)nZc93g}_sx`vVf^c$*vl6IZv{xyfwHSr?a+%`;^GHEZ#%1v@2Ed6zbQw{QRdwx zx-*Esf!OC3M-UY7+^d?aSpKkr7GDM#Yq3=-Bc;PT@pR6jN*%{ zw?+k`L5Eqd#)mMI?q?A4O#=ZdUy^u}eH9xOFNF0&7U`6dV}sJs3IEa`KQ~o@Wln3L zr3H9q6RJXH6NWd#$w)=vNlYSqeM$sA8wTYv|}ge5{VW+h;q+(p07v7AKA3m ztY_yQh+1{|eI{+B-phSXGq1jL4-`mlV)*Fz3EnD26eu@?$^8xyF~|GiOr@=OEUGQu zpgnJW%z3Wfs=uyn8{tJJ#m5uDM!@C>${}Om%WwxP^WCl1^w?_y1kj6NU)shk#Y~@DAE}r!-3cyk3;il0DRponPu>_N~1+qt3aUTM29W$PAA~rx(hiKKM@~P&9&fj=fy`i17 z4&1di%;xXDtMRva9mr+-_7Kd$tQ@b&d*@m*J{VWJt!i!&U|?rLRV1Ry)$M+Ra+^G% zMd8FuT;eHUgGeLA|0w7$loZ#Ix8Z0Oah9Ibg4Dkz`d};Le zSQ=zCbN1toWoL5kV^3sFY_pBadY>p5@9*#++p}e<$-f|NphWJacD6bH?nGlGMFfNrvslbAY2Xp6+s#*GSi-Z_}Wbgf@!xlsf&7m z<@?BfNNf6*d)^@bvZ)uX@6UBc=>^g#gers`-;J~TjdYTT3}l-K9VQXY7NG9VvMmEv z@2cg&;#|5is7E>VKgw0`8m9m?Ej|X5fEvhIgjVa(;tSi4Jv}NPEGgeyb5gbGpyVye zHr;K>4xC^k+#^juE+d^es|jG1In&8?^MD2CPwO=c4pk8qajjmzx@joAdA(!pe$&JZ z{TpEZ4`_Zi&UEm9kquCw>-EUs6g?kzpKkMTqhh&Grp*n9F{#~Mkx&36@O7QWWu;jd z=7aU&*hN2c8}+uFWK@Z%7X66MTI8DuFT^IhBX zjlS&LS`n;IENM*tE95m%!yI;-kh|a-t)4H5-Q@|`dC|wY++gf9@JGap?ft&(eBHDN zO5QLjlP`UYj&OmPdJ(2&_EI;TKa!gd@Bi5wmrT|WhuO?~vw zui@0mq1yY$Fn&3EEzdVz0MNNv$XmQL^y*?&Ty$S6z&XjJVRK|@Z|sB(Q|T>8gMqw zbZ}+^|CKgi#nFz8I$r1m^Ei=MF@HWak0Z>+=jVAB?RL!)>;ZP+@8?71r$ur8E$}Lu z7QIPHR0+R0K7QK0s=SM%e;ncZ{AIsq?2(_}iprxZtAYQfrsV3-@;7Q5Be%z>3?4_5Y>I}R!e)|a4b}1@?$SXnK)?=U+&XzEvlq1_S z@7dt+XD;D!LTNAy!8fFn#D9_`1*d}BZ5?MLzq+1Bd0cPQT#h+>e%m%q-DHQqZ0;-N zip#$-O#jpM{Ik#fJ3IGGcmK*#{{KP`C)8x>q8y%o&>Y{itjA*cP_S-D>PK#k1L^z^ zKZf>&7Y`k0k0;i~Lc&jhR$iE={b!;zwlLCNh-r2!-O_O8JV~b3?^fQzi~QxuV||(& z@>zz>A};)LCxr;mCFS-k;kI$C+02al5xYj5eF}Ed|10<}1%%IJItOEv@G3AZjNGnS zoWL1lb}3@%hfTWT_x#+tcAD5}KD<+pbIXK+^oYMZ=riNSRb;&THzgZvD~) zDC@2xO`91>?a1>;d*mxmq8c8{_ob@1*ck zW@;x143oEd{Ix>mN(HmWz{0^sEWwfOSdYx}OAS^HVZt*#-vd|aB7~=9*4$44p~j{K zJW28%9cE;?cH4?@5Bd#EsfNkZ!pyDalXo+$`Z1~`>1b0c4yEVCZClGI$FOdm_ws~@ z!dvgdZHgtP;2qr7O(-+Rv{vqwQij`>bxGPhp|SyrgSQG)MfAWosWR<|c__(1r6+k= zvfyd(i>U1x?;Kg^)JRTKdQF7yr{?mLBx`(?pL=3ja zywb)<$Jc%3B2!hDvEVn=+Ch^NWmVN-N(Gtj?i92|$=#gf9rTkuzKp;Z(<|m?kZDQ^ z=Zml1-fkICE$=Rm^pXNIE8VqmD3+ zv0YhasBlzCno=&>wP{hk0<9P>10TEj=lgk%Yqca`KBOn7=6YHgo=gnCAQddK*~PRr zW9=j}F59fl_t|tUw95A{?`^rCs};z_@5d?q<=beK1+>5}a;M{o;JShw``&FDEHKfF z#Ar5re17t+%*N!JJWSb-&%3qbUE)1{I)W*T2{N^{-2JwZ!{b&Ow_8cE^y?8Xw8yn5 zo%wvq>g+$>kdg(CQ@{=qP7=U#6j*MC@L-T(QW;X!qX%(8I>T;g@#a2mj})pN&S#b= zJ!QI0PsllVt0{8juLOAeqCGLanarCHkDIkpC7hR?%6_P!V4zpkXrKHF-QWfUEVO|W z;1$9#N@lhgf({;1Fe$i8uPA2Qp~8!RmRV-rAUvr0Mb961#agq64FxANUng_!<7vdx zmUGUTHzh>)Y9~}$Z3Lx1to$KjX2$jQD)0HlY}%H^P!-Z?}Jm#&Ni6{lyGB-M4wRmdbgiS86Y4ZfWxZ%-3Z zfYn#Z=CVN-I-fTVm(PpMI%N5AwZ`r;E7LnV!B^4yGstNq4m1QaJOyY+;TNhi<`iUi zc{-S&Dgzd(@$?=Z3*X7p_v+x2Y{Zs|;2a~7d4hB^X$FjgF_n%aC9Po(b8j&l=Wk7Nrs)-8gxB3%o)n0?p7FF192xNJG|;-2R{&8Oz` zSxZ;=@;>jpGW{7~;qhB`qU6kF7@VfT>EIs_v_b|9VRm@F{0FEL_3?4-_QJ_F zv86iGs9WGhX{nCUKc{yl%| z*6<_F+(ZlKD-6qJ)ImscW6Ml3P7g1O*?EGA3QIE^+IJ0;%CQYnYzVbWl&P4LYye)$ z4T$!^7h`gE<%myCfpU7#370hBNB-@J7v$~d7|D%{OJ5qimmxH&%OKXRwClSPjL!9s zS*F%;ZeiSFjj`{(-2c07A-G5}QHAdz+$1uc6d@gYh`yM@_H^~IqTp}~w8)`ar8bj5 z7hO;QDwbMU`AluYU9aw6=A7iso3;)asK?#73!>v&!|HZ;H?sN{wL9Y zjXtDkpFF&w97#bU)4O}X7#+RXg$po_@+rJtXET*mP`AQ3l5WU%q`=&ghvBmb=~$gv zBZ|8DUf^13@EXAd=7U$nSWD2$b|yr{EO#QEJ44<0$(>ExfBeXl`h-ZUy55udAFIf# zNZW-Y1-*z<0LPCw1%7u1w~{@?XYwf!@@qQ_@Ecz#2TuXpov9#le*^k0wr@!y-hIDL zYA|v-BoC>FnX50&-n;3bnR(xn`&vQ+*UCG|Q14B03l+J)EMamFMU&tQI%f&HR58Y* z`9nrFFajB|Eu@yH%X3kb4n$L=lIhT_bn+JdqHkwPqBA|l(mAdSYG}$-_Q{t1bru)h z%&mtQ({nBVjlDOGhdK`XMn^;;W8WD?QMP0&+bG$Rr3KlVBH2Pj24hBqtYayPLP?Zm zvW(q~U6N$q!px9;nX!z)%yjuSS}NQc0uUx6J3eVy&Q+W$39`(Go)|78RJY#;~%ZVE4>t5QCp zNf@3P%@k~*vvOy3d#Y$KTgc4|$2N`&^$!?ADxoJ({+P&FETnyxjPI96iirK@w->u5Cl>Fp)J;-I?Mh2vb;nL(hPW~rFmc+2eUJ;sy4oW zLZFp>qJ3DkL{(2r-G#>v-4Nd5u}$Z?4VLAZioO>ake0o#PCZ~$XHknOR_{K+ku%{C z)+N7n&)RdsPCc*h{apPykRlWoX|DGcoKc()9^IVip7U>S1~ZS(FeQeY!imYy4%oQk zN9crzV_&s>`0u_7z0AjlIkK!`mxT6V1c}#==pn@3#Q2-XP7RlROm`4H_aXjvrW_e0 zwaT6VVweNru$=Bn7U_UJWAc6_7bVj#k;0es3^Ocz3cN@60=pp-MJ{U<^(O-jd*$Qy)*7(AXlB{>nvHq6?FU6n{bZbmsyjxVd|(>V1(S) z1xn2vtM2EfT`Dp-HsJ0R^ZT2dPE3ykq9yK?v2)CHR0zKz33mZl{RRH@J;>ByI}}Xk zH4sABqh#AZ_=#Iq74Iua?cYgI$< z=+s}z^!pELaD`V=J#2x@{-SJtC-OF6GzGJ@^6R^VX*Xgt9YWI*w&XOs`F+neO5jAL z<0p=Z^^r(9seIuswU(cO07Fug8T~dH)*kNvqP=rQ^%p|PFZah(vd^uk{-2Ylr>lOr zPbVeKeKJNq0VtwN4sCrLQ7`boX6cK`+*c94pO=ZuGM^}Y{SiZZ5G;4zAb)JB zXib+=MO=LT7j*wp^@%6lIMD&@5KlRKRLR^kEy0CT16` zdcAwCiV_ClGxtBud=?=xj`g|tVuqZ4ET~`NS5ngMd`KTMihh@jUkg2a=e1jvLe!M_zM=p}uOauvmE zaB}7G$EPBjPqQFssf7m=Ww^MfI>HJ0{kLLywGz>{^Mul=Wp6FR#S~@sm z>2o8t@1cA8%~tND#uscJQWq2n;tH&jcwbdsFXTDKXPoTHq)MSj$+ErUoAjB3wxHbO zS*|C(tz7#`*g6q$2vm%7v@!BFuryhzKZ+(nrQsg!2aPaT-O#S3>&#?eDf`f$#@N>N zZq0o)V^HwF&E3$yAWl4~=sDeKJ||`Xdr|eS(8^K@m%^Ux#XZazK1FZ?$V}~#wX7cs?g<9k}SY`bJFKW_Cj6o68WFunU+UGfIeuOs!RYv7cV7>!V`67Xd79F)2c@1=~1tM0WO+M(9DR9QWH zlWhlSuYXMp2dVeS0MzdPwFURTVk_*w{*V9f+L65n36`A4OZUi626ss7Qw$nEL_POv z$gBtmc*Gge{-^QPT&<+N*#D}Qipvv(G-ZWmMk}VtcDS{3LEZ)zeEc2p;!Hr}&xtCr z&9^ojvc`foEdTi<^b6id+)QW!QO!xH6F$-sKI2WRwj*n&vFhE7oozwCyQZ=!o~(KQ zNvm9~2PIBBbvE>sr@dbe$^Kau)Tz7{bQqEw`ud2O*)L(YNNd)Lk7G^HFL3)i4THgD zTH9tLzOdf93j8xdu5j1WhV$G-X{~}RR}vKRkNgjRev$uz;)4B!R{_%4xWXA99qf=` zZN<>~Oz6VB<0oYe9a32Ic)Bv~l9`_Y`My>2(dwx_Sz9bhh1A95h=MzbO)j-u$TelN zIr{$y_Es#fr9tPW`j7XJUh4^vE;Xr1KJ*wZ81xhGag%cXA#m@;>RWr+|4FuPf0?uy zhdW1Rosf^GYnH-&F|ONX_V!;hhx;LWLqBfRhf1bg%I87;4-evhc2NK4-z$2wA-O1E zG&Z0R?sj>YZu;edMpU2lhP>3Etv7kO+ zqy?Kd@e!fVMDYqyOnWw*Yhoeyxj=xi{XMhZuo~qFRlyc~MXa#ARYXh<3~H zD_QzoY5$4!(i*4oU2TE$^|=lqtP8sSvR~(9QWRJT;)=UaY6tBd5ju|Pcq)C0c8ky~ z+~1AULm%FZu%ZsQTW|&6K6(!=BWu=CVOjlS2qh~PDGhYLRD$sQv;xDpPOZs@ zwR+Sr{qer$zQxIR_XW70h*$Z`;(pk3kQJGn#w1icieJP32;v5LF=iLf0#8`bKj(BT zs8xJ&zm)&N7l&tt9Y;h3qEk%(fNUkUe6rdnc?rl5r-&k%r`@|f@&zOfnJ#ek}l z4$8f|5Z$$YmoK6Hnvf1_+S%@erlWI;vpn>ZFl8;^ILYvI$r@iu(u7TKD0SzO%bZe;WhJ%4-gCFxXESG znqoC7lM(4NqRfNo?o1!}pp~%KEn1rjl`Aci zH8m6j$rQ9-kzadrcw+@xYfwnSJco%?D+}0GG!33^s;IB3+;W^w{qh#k&F0Ttdj9gQ zo<2BgP2}+W(p_y@8ilpPKxt5(V)u;9c%Zg4N)}5g3KBO=+c)H&C1gaE^eC zCyOvS%LtYt?Wqj(mEn)#&1J8bA62$K7FSz(Kk!xe2!}U_zWf0XFoAgcPi5IM-T@5{ ze^FXE5f-~6rM0Yzm=19qe$;f>d~Nxq+RdrhQ-)W*917(6s8dHrG|-}SLE6c~Yo3#* zQ=;cwt}x|rPM-K+je)o{3-lb99NUr5bK~*}AhKfKM50j@KlqJ`7ClW{D+~wnE0o&UwN`95%PmTGv|EWn0V{>1h{JdipTZP z(A5~p#WFYm9!rJ#92z6;(dsGc9S3%aBvit$@zd1!k26>KM>e#CwuO$%%5?KDe%X+h zy_65`=TuyWpdq#L-E;Z0EaF%vVVps+G_NlX-!t?_N_q7g*T1{Uo(%+B*QY)XR5OGmYuGQz(*^olztZ&p zkN6w_H?;a1#>}xJrG(S*29C}qpVPzFSq*k`D2voNEO{E!0gf_YB^#vUxEq}MPR-ra z9c6Cqj+fSkLR2sK?O#hbF}VK=gpe>s7W>QyQL@(5$@n&LaI5w6y_pNNn9>R54g8#F z6V%|tNqI<}NwU=?fPNly;j(h}d(tKkt(Mxzc%_Fb1&-4_fPjzB<%+@VG(U|H_Ep2Y zzpXOB+%+M_xZgYO{7U9*KDc*90W+{kJH72WK@>=dr=>OZfoT1%^lLd9XdkP|R=`dI>G(ulB^)Fj}>^9lfw zq%1tXsO0&*ca6QFclx^m(df9%x+E)*zXH7iEN1;IK%!wm(SnGe+LV2W*5|r(RV!Nq zsBszh-J0jebI^T}T4a#qSc3g5gnZMVZ5mnXfB8!5*W zT7!rnOexw_ljb3&1oJ2K=&nVwqBS;t7b>h8v*AB`tM1%!#>$z|mX*NAR_wp3S@x}s zk%`DL1C9pTz@f|p!kdC_-#3r~NOptSzK#$hw47LruWTv#oJ=tkO=>tVFNc_uyFE$8 z)Cz^c4NNE|aKY;7VWwe+~>^Di@Zp7FaQiZ&kjK7bG!wHZv zE&b0Y;}Q|RpB#uoWBEs0c$kgcVFTT$cwZPGe` z+Au&|Sk*Q8@dv{EGZ(aG)+rJeDCcd&TPpN4i6FUtNeKj1Eye^h3ZXt=N#?-lq{+Lv zW_k0f;hjsL0Ev&v%5b09=}5Pi>W~KeNKm&X@%I1wk(<)LRz+CXCUL9_k@wmUI=G$` z&ie44{=t2rQpUFvTmf+EVLspq?_pSx4qF;=ZZr0&&i3*QTXl+*l4mBlbH3^BZ9ntx z9;eYZa1e`AUKK2%$^P&(b4om`RhegN6veZWE0-|1<&^Vy+Z=RrKJWKi+M=j7T4{5gUg%_~VsJaf_Q#vW1%r1AtVBoPD)xoj|AG>7P;3b9 z1CdybvhX?6#L~Z@Y8B0QuHZ{Sv==vfMZd`$X*E0=c=_Q^P(Jvl4$xOlg4JrL0F5#0 zIAsD_bSe8xL4-10V0>lNZq}nN=9x@)QmWAd9<4dtKee#LJl<+F?F>GO4*4flB{6_O z%6m@+dW(<6?^?igZnMpK2l8;SPu5Q!*^yg_glaBf1~(_hs8O|mdyD?<13ku6hliLn zjVufmHVhz4izbix`F=FizBj*q|6NNt3n+@m2cS)N#ZTl*2ahF`%U`xr!G+o z`bYE0BP1tnN;RdSRwA2peT{=1LD5hdi=J!C$9B6~DGC zN+!L1JNAJ&{1;SvrsPl;`D;dvyw`?5v83ZWd3V2IqqcY=bT91Hkb-MrE%(*P7}oKf z4VHbpal~KHA+j5A%89`AjenbJ3U%`Ir#MnF(*LWskB9Wgo2Giv4Sgq{wpR0=b~imc z)wNE_++1!JdCG*m+0q}agNPc|@itI!kt#}O`pz#{L|1CIoP1j0)_r3z(m)(jz~n&w z2!nKNPUMkhJJv1ihLtzz5K&<}Eu3Sg;>!~aSH7D|&T#=#lc>YH2px(?$Lx6KVt1Yh zUEmYkiPRtG?=}_e>N*|ZJ@^IDrH$mQ*X4TL^Ok!Qvo?08hg3q2sNT!1fp=Md zdKOiFkIYWkGp%kB^B76Or~^$;*6&N0Vb!TbYI6?Nhmo%t4vsUB92n{f8Kv%t_s3(M zE(bj3$Se_Rx+Lp*)TX=KBD)1gc?jfUM~^bnnouMdKP|*!2zQRgu8Qq0@k-q{S>Y|D zzD8vhj917fYgV?9uo^5~*4o0ajRhqr2IQFqU_NT-j+nJBx zoRdI~PMB2O+)RRyZ&-Q|@MulzBM3fne{7RH0S|V@<>paTz^CWaDjcNhS&u&JmO$U^ z)^nmYL*k&m;PGuc+B8R8&|eTY!kQdGh<3;@M}JS)Ww~Az0+mZxF+Y9n)o)`EGW-TC zABKHiK+R;tF+~t=F?JECc4bC%IoTROSZnt7epnUOx@$c8E~rBH@l?u}boLMNBwp8-P0#&@PjGdfOC^*fsUiZqG${qfTqwS^riU=C-xj6|Y z;*-mp)XCx0h~XeuY=g$Sm&Zdrkx&_YGS6t*o7<0Razcx2{N|c-00kj9y1@WlgwUat zeT2Kv!NGHiSAx-Cb3fngN%E=sGpATg_FtcG>9Gk&_hcm=9Eea~Fv_7sBtn@MLYSpp zsRnW?K(SL66t_NFwI934_vOBQFYK(u(p1$=`EM8cSymplWKn z{9hn>Mv>w`xw`PC$Xp}!Tkn&C9(R=Iz_)TOKR;IA*6(klTl2Y9qfu4DaTEcnJ?%5a z{>BLQn5HVHnM~zZ?AEB5#3SE-{s(eN)TLQx?5EH{Kbec#O9Q&n<9Vb!G^S_>RZEwZ zdzyVe<%iN`VW81fzmNVA4uq#Jl(gP0fJSmQSD50FI5V(&ztDMN;XC*YRQY5orZ=Pi zM`%7cY6&xdnN+8)RME8OtY6?c>0mv4 zSUpQsr^1=nJ*Y5%K>Y#qz*Gu^IBFcR3^b+y;;OU)(jp^a{V(Xf_#E^e>=}-SqKr;q zDkID)UF=(Ntks96RHyR!#=7x-K>fnj7IK!5DMq*#iHLw1F*{IIR*8q!h-)L&C&F#< zgVhXOi;No&hoV9&U%A`7e|!GMwui3uwOubLp%liy-ef3ZMaDm0ql-!G2hcq4KvdWE zTdok}`f8IRMWF2|ij#Q48$6aH5fL#5=A{XHmMS6SKP`_nU}N4j*YRK3a`r#=fO#6G z7D;#tg zz@D(Lo82cYIvss{q#>2V;tQKrx6s&gPHkwsxdPHdcE;dtd}EOuHsXUO@$egp|N|CJLOZqrWuewlx^0j@7mG zNlBZ@g*LskBy?9@-!<}zPRz(eva9;{!Pj%5w!h6=s0+AM#xtZIz|0KpnwGsx-pNcG zhd17;_&UrS0Hyt~kY)M0_y^kLhkVJhnn%8YnRFs?#4Z99C2`axjk%P@gL5$OEkv4xwXqEfTrR($=9Uob}n4 zp>LL(Ql`%VpAwUt?N1jd(}2e09n;e;Kno`uC^m<5>b%R(CD|hgtZC_wo!DO47;+8& z;#g=FI=D}UlKRke!HjkTRoWAZMf-uq-HTs`U^c(#7N49#wYjPzFZamZe{+Fl@_Pqg zS_X`HJmb@HCX^lTsS6eqMw`_pyAIQvz^QG*s0(9GemhJ&~s*>w9b4U;acA@Vc@H4oVdj2rMz3WD(+QJB)T^O+%G- z^(m@jbTVT7NsX+uFjOh@epP+!LN5sZ8Rg|a#R|y$;K7qLBa&8f;RI~yAa1g0sd}us zIl03x_AIM5*Y={sz~H# zOkerg|2=*B*;HE3(tN# z8;bMvxhno|CZeDM5G9K(<=l@v^6h>Jc#g9UDp3zYv~(i&4ee{+6=C*&PrMm`m3w$d z4C7Zz`}Gt=%fvAOGsU95IT6Mfi9l$4f7%iF3%q6(ynuMJ(#}FX-|U|KitJ3z<-M+R z-E<)dqdJOdioubk(btD}3qBOS)ot)kzmtZ#3E-}{1YofJEe^^^&?w^|Zmw;Uqi>A` zv$#wBY@Bl^k96gaJ<&oMr)x}_waW2di2|`^I0O9Y$9!PbMQcyW>6Wy3@`8WdtPmX% zRH8h5aJ?a5cs=lq?rD}cj~DCPPj<1K0xChz4|p@Et2K``(Rv&xhWLcZ{UD1qWqj(88I#jV-ATRlXMkUn_kH3~aOle`g`EZnGyagdwau){%I! zt^W~EoMhZum~f%Y$oivh3-?T}$N{u5Px7;IUR_)CWEJ)IFx10;lB3H&ns$pg4YnG_ zO)dJ&oE&}>)A?t2=v;;2goLZ{xyUEKa&;q-j|X5MAflKZ=#&ptaRjIK8y;@;3nvf1 zK=H*om1(IetGexLv%XC)l(Pe++rEr^Y>5o{#qkTpiSn_g*+HsMXeO|k(I#^L3-G7i zgTJ8o;f%HPS%mi+PkPmYP}l7Zmydfu?!37p?#< zyYr+mbX(WSyf|O??ak8Lgx?*RQ%Mdxk9-X}0FO8=ba3+UA`o3n^lazwNzxL4oH&FN zeiIU>^Jj2b@%&){_sV)30Z1>m|n z<*|#gm)somDssQydA4>G1djpyk9NE2B!v2rawhT9WwH<9;VUAFy_?&|N8FQnTbtGM zM{KC0Tt)!fhM~^EHehW47;8@#;vhbHiabVxQRHuvoAaXSA!S{oxu=FoxqZdz_!QF} zj@zFzIx%sH?ZI2l-PuX>Tw&ZAFv-SBuz#_J(EQ}X)QJ!l)d(+pD4>ta&hvQQr_-JG z#)=QfW91H_Sb+H+WG-Ei)+tXHl%0a zgf!1F?y@MwZO;FF^vxZv+RoHx6#E8Y1Uz;AWAsf`PD=;-_TT7Rqtk-~d)bO^p(-Ft z1{6|1AT(%+@8LtOVJ@F?2pD09($uNtuS#~KduowVe7BDp_F`)yFU^|L`9qjiq<&^g zExt!_Tu)7gQHpxlpEP^i&uLxyJXyLnv~)=#)`cMOy-oAt?zY=pelU=CNhw-1jA>fv z>vRd%H8;IcCdBA8rL@|b*2{4+>>2Oz4^eS=4(PqUaH|?}&9f(S{@@7*Qxu7%sBLW4 zJKb!?dUk!A1KiR-Efa(R>LfxAjBAH+ixgW$fp!q@le5|zMMgZb{RGw}oO-1XuQbjL ztCoekjCHL31trart?_7_=5VD-Fj_F@84#^A12${!3^9*9vnS_+?T@(*@Lgn z#FWyWn2%t6_;sb$CRZncfdO z2FyAL9f$xXoa}TKGUvK-eYr?022}6KBq#12e%qVM2GMs)9041r+Ld^O&znA>dZqiH zx&Jc5hZP(5I3OD4eh08<>!$kzeJ>55eW%-ogU~`eRA2cJiT6S*{CL!r-aor=UQCJO z);IkfsK06qlUHQ+I3Rl@VG(CEKo94(7tslBU`tjpFlUVcf$m&7kreo*%RC<}#3%>c z3!3JQ5rm_FhdjSB)CQf z5RwkuB77?(aRAk7ij$@-5;r?faG4pX4+f162U+voaXRLnl%j8S%(s5>N@dNlIn71r zSN|3lZA+TlTwZe6Vw4K*$2wJlZy;zuRzHy~ajG7P5qq7_u zquN!O<9GEb7`iMV>mi<7=1x6ZZt&CoN4?vETn@zNMBQQ0$=4wmRtg{#1azHrC|!6G z^sCb{YO;3dE+b*sRY9*?xgsLgX9GO0&Ae$mXML~Uj<>BP|WkU%20PIWd z|6Ls46=4F*$;1Qj;e<#xfF?DPM^UT@E3%H}Zc3F_vR3wFOywu)&C@n_?p>7OXPGon zPXN)o{&Suu;lCu~|NnFrn9qQN&c#>9CX-o7BaFO6QB%UKkYlp;%{MPATLKaFqNvAy z!TyHxR7|EqKDY*_i)vM4$}Ho~=Gf6Jz5M59k9c4A3tC?DC-ApQ1Qt(C8$El=apf|| zgS{!Q3;Gq+r5Xo0u?tLs+I zpwe3O)n=|cbWV|0&ur8VM(WrvQNqHdg~k^vP`@wacKOkm;+E~0w8 z0q?{}5|3lP?74GSfKv1V!CI1R-!8sUMC`k9qu}2>d}h^i|E9*dd*k|Dp{2d6tM6`7 zNn2Yar^eoRaj$auz^!X*<_{n0rJKuT^qh$_*Z@9UCF!l1aA_ z{~)6h)RNr@xj)fB242uT2n_e2_`R93=|5FZP3-zC`y~OzQ~-CQPv#^Xoi zM%?Njr zbqa)!?p{!nK?1*!Ru~KV)b%J>`QZYIH6>5B{;t7GmOW_u?38Sq{Ve&$CO<8gdZ376 zTOBPUmPFh%s?ofCO!m#|9g`rxa1J)|33z`Oh9sp#D3v%dk(r zTXo;qv<-a7iDAY(fgSMGMrS?S=ONrF2c5z_V zviW+~ubjS9TNVyYHC^+w60FsP2Og4~y_r-}cz0uZ=!3>k?lRp=DnG3(gjcLWfll*t z?_4S1anHPF#dXWZv+1C(UAL%#8 z#yXIy0~;|f_q-Hd-LU+aUV1;OSQjw}mU_~&3T$b#n;{&T{f8WMWr%o0oJSTFMl(~P zm(_Jm;~uJ|jC3s_6-E*2n9F5L2UzN>GQ)*CSVf7fSdz9(RPU+OmQ-t*Jq?z%+5ZmH z-CBee?f*#n7G|dUhmvp(8V_u$v@XD)Chr= zuwg_5DZ;IdDlLwuNSB2Z`}FBk`qHEW2W92Fw1$fokBqjpWx!1lo~)aBaey9M@Ma2> zY{BKvO*_>=i|)|ze=(mOp*3kNa8#fwS2X3RSy{@*pgshJ+(^}@%>{p} z8jZElVOOhMqYqT9VzSoVJ~(v~8LCznmL_Ykl6*szBK2)Ro!eTMLkS^_D3*l+;-&`o= zr;k)y_M6rOy4LHDYSX&%7mj0*PLwdPsXiH-i;#aX!VCiryqcd(7rv3uar1`A9I(B#={y6jQ@ zn{GsL>8gK_ELC2lQX4pSUXlC4$HF}Y*^0x1Ng`H2%7^R$iWRM#0iSdpEaf` zypp6Bn&wj*sA6Jb+@59|go?+VCvPUGG+7kFtDJ}QOoQ?3;+?q#8rm8DGPwO$(KRHN zOL}wJiyIq@!z!N|8nP{N-n{#m>Gitm+x&c$K#yFyxdzJtk<#9oCt;wAP$SECU?v(n zL$bslG=xpA>agboaP}SjPROXSDm{MgI}iLO3y0=*NQWoT^;?%GY$oU#Q8+rXKgAJ6 zeLI_{ahPDg${D3nSv5Jc!g$^K>1wx&nv~6Gq#V4KINdQsyVa>P7JKG3i&D1Md(8qf z4#O@jF}k<47{Z2<)nP41!*n)m#{ZC4Lp@r#<+AU=$Wu#!a)K6oc2LaY;rUbWA_BC# zS$vDBuQFv*lQL?toWc(xUvC_zvR*P6*>8pA1A2$heNEJ)6SEZnRLqO=!H@xffdLrc z!K%LCr3EgwS-QDVBhy#=0tD`qURrQ}JQ0v`jBVN_9hl$PTejS zm_ULFI3jjGH}W17$rFu z_NLZP*G;I?(WSp=+9=pZBXjJ0LyzFE3j5^NZ|<_GmqAeqtp9pf$LET1qJVcX(i0-p z&s~^WqK3K5e`7aK_IQcYr!F){Q$NEd-8ym=swiVEsv_QZPt$xc4xLYY+2aFPCG00z zPoTGj9(g1YGTFGF?B6GCN&sCT_Adat%56eu^NHoLJ>qFV2q^ zMKjOC_lSSqX66b3UX-rxBkK>>h;Sqgh&5m9A_y2lOp!x;%wZ;krhc@$3&wZ1o%qhj zCZ$iq<;n_2-J6l?y(i6DC%?FDv@A-xHsh&DG^b+b%q%NX0%1s|r$T-_>?U3(`*-w< zA}*ze>YXJuKWXQ;ex~R-33#;YLBHMH`{xWHP6$WqDG5`WEGYs-vVMWJlyCi{QPEg2 zQtsO^R-*eN$&3HUYyJ9xjY34|Y=fXC(ts1H9Aw{<$zZoWveQ3H8=H+4=uCdZnVFb8!* zkK;+;_Pit=`;NT$hC4JA0e`G<#Xe;62c_%513S)y_m%8sr_rLKVsiGK(jt`DWoAiv4rXu#H0EJI68GfnBaL`CHh4)6MHi>)gNUmcFeRo!w)9M*{PC&nS=jVI!X0 zZW;~t`2-G#D0bG{{?P*B`ZixB3A&^o1M(PKhOLW{Yi}@`aqM(0S_Zk~+nDA$s}=M6 zC_=C5V+h}QPBWHoVs_k*&3>11E*2ua?PmX{<}duu{E=L=v$&J++IA>8c{wbC(WKU0 zd_6Y^u>VH4n^pt0=~H2p?1L#Po+kT+IfWA;TX$iiDaNEXRqRf2DR zEO7fQ(LllhlcxW!-PLq4J$vBVb!_q=K8*&8mH!A`t^U>xiMi)6@ z`qKNrlq8;uKU5;w`9%~+n4k9 zy(lSJMtKnQ*+Dsm;?xlq`;I6v@nL9waMz-kdoQQwB45{WPObTka}nw=C7L#=HW??` ztpm620&<90{wHtjO@}m`7!2c68AFISJH>|JjN4^5S>3pyFMXb8E@?3ral1dy$%!!%=$IW*WA{&a=8 z5nA@XAxLHE>-WO1rH|EDlc*S7MiX>?6Q=-7ascJkQZ+_%*gy?_Xh$(d$NM)0kSu2T z#*frwH+PicpVeK#WtAtah{jT?IJjhjhb1J>SxIurAebsnKF|IJI7BKJ=auqTfKkZD`R}k( zo;FMhzgMeo8l1ZMdh+*ovoq$Wrm^FxJf!2_giPCzniO#4?&Z%kkGsQk-Os*fseNaF z@~I}b0P%=NzsgWNPr!hm)<~FXW{;n<~JH z`tL^2e4bN0lJ$({rthreo*BbJ`MllPO!n-W(pP+=FS=~0J>t$)pJ~MZcdzkeT?6(p ziq^s@T%@>e7o)Bj&>%WVsr*#bAalt2)rr2CHj_I0q|~RCg7-|qwo}xlqX{|qaeL}X z+6$a+`m7c08Rdj!Ol)lW$BcF{BWZvUXPswb{F~T~VN%l=lk+4+9dPSBs7HAsy+o+c zDpE8(T=%5n(!a26DC7Jel?W!a>BiiN@NV%EZ=~$#t`zE~JLgz-;qNSUUY#Qw=G{PG ze@a&b49Efjv_CRse6(mq&!06NsBz65L{ zoNkMyVar!$ILK?cn&gzm&@%-^-j25^-`Jk0Ww=GPB>8o1+)k3*?M9LMc&x|ssN570 zfd5C>WwNLv?}dGCz_0gp4tIaf@|CE+`bLyp{iZ}?BLO>q-QCvl(#Hpfu9G)AAVQux z-Vsy!s*d$F&ppcdB*BCAzCJF)P3E8bKYJgRChd5cMGi!G`GU*xmx(r)Q^XfL7q_OE6WQ;9z5qW(D6gF%LCkBh(g?l!vj#7=O9QXJ4klEvE|}QeG-LZL#*RDU|KjdB ze-6xZbbN3$(KhR+3-@d3UyuC7pH|+rF-`6mn#64v>-MmPLL$TXcJcoK zz4`xx-av=7Q~^dJ@+94Wk>8{V%uIz@z!l90%f%ke4WCJ}E_P}1i|4*kB7BkihczqL z>|1959`9V2AoSCPo^)jwy-*SEH5>LX8hqH4N|d?KE#2)l5%MJ}+(Z8;FvE`UrzMxJ zHax8@h6Aq>nf#e;;oz;U)Au7w_+yfQU`+2xnY696(fW7c9pXg^*u*j?$6<_SgxxZ| zH*s|z*i3!o_N0;j2V6445b|+WQcv;F4}Obeg5ij6GA4lq;Z_TO76vgp^=0o2ey&}U zW#51GlJ~ftBV464*@$M70`0=SKiG!MwwxV8)rKDm>v;-nKJX(~`pa^X512l1ZIVZlfmDx1t{~-ZJuxmv+UGy3jQe?AZ|1-+aEi3J zCqlr2nsq5Ho5XuHa8>+ytzYCW=vxQ6Ez)3-0hAOG6kVzq?T~=xIpr;Vwz1B^cV{Hc z&YUGdzwWo;d{>J=mvJEKt7%)FFhYt^uXp-At=BluaAbZ+rF`@!F%|#v*EgYmuD%R# z^@WHCqN*f3qeUle7@%~A`ESl%$L}BNln(~hy=d}TYrUk| zXJP&wE^ggVdx;DWhhK#W-A38BeG2@guV*xT*0q0fD)MpISRzn1>Cml-{gMb>8ip+4 zIC5%06C&X#JXrqeqQe=!mkQ8H4!5H#hL1diwyvWjn6gG?Fdse|a9fX;%o-|}?;aiX zySm4llGbyE@e{w6ZXA&Ijr^@V38*C$&$hA!$^7CN+(NZ#1G_hJln^SIE>o$!iKzIZ zJP&o9%G=F-_!rce5|BK*wwSOBqn%D}LJBfI>)j_NUs*Y}YcjB@L2Ik+QL6ayEQ+5U ze$!N}MP6tt2|x`yo!*_UuE(8$x4EblY$a!`jy>dm-8CJ1-A$^(*)FRTwiNaXSMX`( zx7R^T<9_P&=mNA|LO4(w&>qfR{n|uH#x@uJ80_kO z+#8g1?WpUub(xK>OS>2(qsBnai7o>;-B)n?F734H8po^RkM=kVWKl*O+pi7(`Wwk%w`F+Gkwp052SX00k zDT|JP(|t^UP?JSxz_f9b~@!0%4~1?^nb+!k2_4pQD6=$5yS z;txbI27}0x@DfAvOd)Yvy`!NkhsZEnIJ{Pk&s20Oh*Vd))(VT{_yNA`5N3cahKJn7 z4)2t#zEi)6O||e3^-wp~P|>-dlX@F%17uM6NhgAT0^So$Q;_ep=Amg>1dpw|qHjG@ zkw3qWvn{LrhE7sUZ)Z!rIG=D}M1@u`3g3^ZA|xnNSF&tr){MLhu;1{yss8yGSeAgW zvWz|tiNNwUfnHk&6bm_cVSIuIMWsSJe!9H|dzxMrc1OXc%XMl?kmcdmb%KY+0%F#YSxS%=2;$4fEL$FKizpu4j z;IT6KeQ!^+yq0PU5G1{%c>u(FNAsA;j#~}bk1J!7JcT~R%UN0CPv85T>N`69u}tu5 z-6ignk3up#G7FIgl??p<#@>5}HPvnF;!#ipM5IfN3W!P*X;OnCAn+lG(gjpNK!k|2 zP(zX41Ox<>ASg(Ubg7}ERH>mz3rH^sH9!*Y^xNm|yZ1ilp0n@oIp_D>^IZQUu*jNg zt}(|PbBy( zGJS4uubvTq`ZQa&Y^?JP|Eot=pShRBrkHp=n8zsj=->+BZK*8>m@v0UvbQ1XsM*@> zrFGi`Dk|3)Z5{}XP`MpAU3oDb!2b#J2{=6nABQD`$x1>zy1dCTz&@m`tFc=`K|-36uzeR z@xE1W&8K)zi2;}E3eZ7pBjpO1dJxUUnIrykPRr!BLK$O{*1qv&NJZUZt>*=m7R-qy z)AW>gh&1Cq*NHodHHS*_6f=YqmfA6q$=^9p{R|&1&~iZAoo_AgzV^f>B-P1^LroGT z{A?=9V>~qr@FCECiY%h>6Asl`N7R|nV9$R_!~F`<;+gZ`Ko*}dXUxBGfk zji<`s&1CpYEQy6zQ3>bx6maD$u@8Oqr|+jFur+_@u>0f1+b;jSg!ByTLTISpH6IPU zUxbt|O*`dcpHw0>J%fTtRi(czdcCh{YrCK`Hk?na2A_|3gk)X0i?Gj@6;e;oODX93 z5Xq?+KQ7BISZO6E@Qp^!($I&6oQ|<)q(#U!PqEfBYWhm2m&Mi`9w*$)Em7A=KCKyW zwj=(U+fF0;)k@KyOP8cn`j@2(4RN$~+&KQfmM*Ay0IAGJyt*yWV#{Cv!mUvoaJ7tX zzGLRi9?T!J?)_}R)0vwo2-;<|9x~pP5HSaP+Pkl@vD*C;a-aVvq~DZi_3tnK(n6mb z1fy_8Shk&fWw=}PUDf_J5vk7c{l^t$XWGt(zs_@R@1S8lvb(ot^AmD$g8T-vQjJ^; z&ljT5as$2O<~G=_2*}4|S)rqMeg&vll5957<1Sc%xd^0=TycNV#*d`o!Re@07KwY) zahm~y1B(2!y(~Vk`qaH9%K4#MSx+f-S|_Qh`6&@K5u`>f%Otijw9Bg^XRpV2%ZY5oSoHAl$kF9)0&WRt?X zajie|CZE-!>q>s*O?>{EH<2aMA1Z?#Z}-K}4u+^=2tdj=1Kij{v>V~hVwRAWwctrm z{Yzd+JrHlQEU{d(Aw;&Y^PM3Ed?YpvG}e3Zs>7KO!Sm%YY%mGquI{=|r(}Y9IfzU}3GG0MV$U2$DM|LP5o1!<;DvQ?mULURyj= zTb1eKr{M4fIh}3EDFqGx3E^=ib2sf3FPjRzC>!iIT&J1hNjQE%r{LNHWrHu%iPBp_ zkszIx-@ai@5dyP}Q!k19TJC5;G0UPxe%A%1yXj}waQ?7+03OAly&FVK1b5v7ckOH) z3#pt|a?lO?`eBJhb>8&0qV6By*o4 zZ3fP;r)v!ebju1TR${U-L9|PiR;Cy!I-aq8TwOqq24<;Cq5-SKP6yU-Al`}&inr)w z+b%VeUo^^8c-^JXDl8?Y5=YBPwZNBQ)WtRg92qu7nYUR)nU#PFQDLI* zSZSt@h&0O~MKwQ;2h~Gp>*`nH*-K~M7=WqJB6u{Xg)iVy5pHPu?q^54FGPRrw(CFg zO(Hs(e+3-*z{^+IQPQ4aj8VQwVk8*MBIw&qcV1bJCg@!Dd}(pQB<}h9B656IaF3t9 zJmJprKUMB+FvW&TBbgmsR^;n*z4M-IeU5j$u{$&WInEyZPQN%oWRQ0)-I= zkKKA=@oa1;th~K7%tvTe{50axrJd&k8d*;g#zaCpuO~58&ynq@#_P``+>nnjBaHe) z7o2vQ0WpDabo+kq`{t`(c0bKuX^n`#l6(4o488J^YZovI4yu*}_Cj2pp|7sl;D&Ux zmP-m;nm#n$9-Q6cb#V^L{>l_`0`dnprVLK@K$4jlpv9dqkae&3`)C)~d+~jg zKxUg*b~2QYv`PF5hhmf;ATmx3{9~v9j{d|;p@0|{4f|dO9JDJsrR=Tg;q}2nH{Pq8 zv$qFDtxYm&$`Uh^IB3qr4FY zZ13!ZQR|{(Lk9{ZmY^eEpGu2k__;zQgX8=jjPE}~v`uM|>Wb!}F;mQIBqeeHM+=Ot z^_{1M#;&P@$NBNjHW|?``IIu;eL z7bT1CLOhMpEqw5e<{#jfMGDiQ?Hpuq*mKmLV(z}A!)NZd*=%4wa@Rq$SvY~R1QJ;d z!VSQH!3luIhzlJeJ)zs2nwh08UY7P%)b_-br$<}kC-0~&6AurUWsbY%<~oAiT|NEU zQe7r<&!3xw&jHX8zzs-~F=&$X;S~~nHPK<(lUW!OHa5|N`KYK=Fxu?+g~IGp23^g6 zRJ%39NXksZRgyyiv{JPK9SRCbWbZbXv2L`3S4^dJ0lfqK!Uqq*W>q@!$hRs5J?j~b zqXnbj`ER3Uv@!H!!~~-XeE0Ws$F^t&Qm(BeVN3B`g~Yy5yaJ;Z~+yD;N>w+)Ch z_O1!dkWY1^ccOK5*prezc4V7aOxhS63!@TR*GCmr;2A z*inZzOCD(yEityiFdwI+q1n$oey30LhgwaR0S9DXtQ zeC^b!Yv|sMGa$`u*`oc?sn!T&xLUARioVPbi~p!`y*ns;t0iE&z!#=h-4D+IQbDO5 zo5va1T5Ch(_#gHq27FNl!OeB4DMqlXs_cmR*sJfgxJP3gCML{B1xrp&7bgfXP5t<~ zeY_MljXKB)cY_lz8dix%xjCZ|>D)S6JwGA(hTluSo*MDE)X;&G2nuN6G5T^)xyD2= zvKX)#D2IjDOANa18(Ak+dXc{u%O9}XpWw$ASvL7efjWena~{#ke2^rUcUkJup=NFT z@U!SWptZ|Q^SKwCsKi%6P<-h;A&2aNMQ(c*AV(@G`sVqdPGko1d*8CrF|JS$B;(QH z7YOW;ICCov0`oDd1?@ zabWB;ic%QqDBwx@`n6XMh~Lfb0!|7zjDju9>evD$`pH4gZgst{_%1&=5pAW{3y1S` zEd z+`e`M7aIfPu4SA?g=0$Lk>YSy`fjBML#|3!acrq$KRku3-`*0)x+uqey^)509u}#2 zXa&MxY9C!RNt3{y`<^J(mL%&gU*7#Wb;s73Df+yM8FACYarT% zLsYYS31>#%kNU&{oJ+jPFASj2OUbVV^8Z}>s(-f4)$i;6+s@}AH}JA)jVm+!IP(WY z1Dma6RoPAQ3(XpL!tu4V63rgTgw%z_|AU56i;4=rDhEvcP9*zLsD1noWqH-52p zJDW@Mjz-!r0y0d{0I(t+2j*o8|8P0u=_e(@CgSDVxnj1@vLGDKjs36j4D0-@80vrB z&&Oj!Nt*dY-FuODzwKyGaO;PX&F4|i@PD8*Zk!;k6ktIvF@o=M|BnGTG)U77Z7(H1 zP4YNc8^l-t>AaVP1OM&!A*BeziJCQ;b{C=FEhneS6h3KP+bBB>4MZ3R(rTU#xf`fK zQw8K$uje81jjM;s3$?b4hMZ7cpX)Ji7t$ZM$to0!vKSi7A|d^H^? zf7-#N4SHJf4uNiSa-&sQV2Gsc2IollmrdTYr`7(<%PJ)rwxItkJ>1{l^SfQ;ZyWe+ z1HWzHw+;NZf!{XpUtbRX$dj_{b}9RGZBmOrP^mlnX23~Pv-_=9FM!sFtPvSW!T4SZqQr17)c z8&@r+nO$On6a#M`w_H=jUGg!XfrZKs5(HQ*N41~zX~gH5bzb8{zt2zlmJ^g{E0ZUX z7FlVS-090s?qxqSR@!peC%3Tzy_iO+hAK_JnSLCxpHzYTETIHcw{;MNjhUE7~9lKja7@Ioorl&ZgJ7CpErrj1Re5*aqFXog^Eg5p&Zzj@Hod%-NWX2uIKM z2Y=V;!U79YIU|@^jqrM2&Dk2pqZ7!c%SmW2cu`SdVWdi)@t5Mx^ItmsZ=JiX@dq~I zZ<-c(0LB1F|7^^@AM3K9`G%>O(x^DJ!5`jdr~F~U@3CR6Gr>rouy+60UmLcw6=xD9 zTlfSk<9+#W43-=7JH`qozDc-TAsKj&hli=X&I;Rac?5m_6Oj!Uo=p&`XNq>SYaDtQ zoNc#ROeptMsP>ay`av{)v?A}~t|>c^i7^we#kCnF@u3tACi+*f19w|7Gxvz&loxAA zkP8EZDgrCADVI=5rX2&)ByhOQUJ+EXT%d zL(d-G&V`MO&KxRwn^Zc+tJ%(+nYpeATKN8*Vf}+_zd@n6W<6Fst90OLku?2R$&$(8 z3rXq?Uz6Tn8au@=k`EsrksId$lW*S#S|#6)urnzJCCf0U{U zmi4PjIkFZPYeYAmEI4)I?6!1yHj$>~pfz*C7~x`AU+#2sc=+mWsw2vY9p)67%({Qys-spPzho&i%XzvX_@ej=#6ua_lbdLav{aMwmc}UdxBN_qXEC zQr53%LN{0}Uf_*=_Hp zUt3qEOP1pjwMtMo7|&;-GZgs=!n(x8K7=-op|0jhGPGvEM-|T8D)oG;911x~I~zsS zz^@p~N-zr9P=w+{Rn;(hmF{TVGDbP@OuV7_*c1AGFv2&Eo#f za(;jQJsip0+mU4PNe%dvx|lsPRjSm~s5;2hM-AI3E!jK$b^e_5*+H&x|# zlyy&LUv!CmovlF$bm;4R$Mw2HFTF>5>lz{c)s-PZ-hNwQLS)+j;tFjyXY}(ir_AwHE)|}9zI58vd@bPJ}WBM#u2{tWP@<+6GN?( zI9V{0bQE*Do`K{=5MP}I3H4SG0!5N8@kUkW5d*#Ts-r|j%=qSYrY@Jf!7E_rMg89T zaDz*l;VeLm!UtwcFlyzXoW|#n1XyaG$h(#HioX%F9!WF2bc#`NZEeu#l?TwrvB8WT zEbPt^qJiF(Zj>KAe!Vp3i6M)wgQv~YzPg&WBZ>-DG}MW%m+!^w&u%5-+5>+z5MX2@ z8eZ!DZmOK?Y{fJ2MFo^BPyb`o=I8&2aR3vlNrmZ!MtX~v$wI5svi9jFOx6N5U( zW4TXrrVHGBChPc}ZXrYP2pWKW0NDgkPJ&Uhs4xs$dGrO?8APl~)P#MiZ*ykkTP^ri zU5Uz<{yz``(;Pxkbddd1@KF#X1lNbTrTB3Zt3}UhEbw067Jdi+F{?lVn6U32J(v7W zkR-8wLZlmgWn^fxd``HdRegn{x{^$rb{s=hqH1j#>)Ic-39WwN2t(-jE*96C99Hhj zxh{1{JPs`-nY#qDV*fxv3{j7Vu)evXP;y*zLD}Z;wr(z^6No~$7Qh&GIBSJ$XBk(= z>(qxEE@#meX=(FaQ91d=Eb4iizcg$*r;lV=PW-$!QzL%H)JL{&`^D5=FYD_; zv_4assAIbaq3OfR=~Gi^keczAgIM~ch`}eMxkH! zW2q?D<$f}D(oiO~e2`vtM6@={)QaoVW%JiJl^>{cyvtzhKr%62Qrw0-O!k?c<21iT*E0hYW?b& z-GG>VbUp0hHWq+|ds#@g0OkrOO4rY;q2X8gKnTiT=5|4A!xnQoVd3brObf(3w)X6+gliO24-K9qbcG)WW zz1vOw_4Xt8tP>W6zgh0O5z%}po1xy{ z`UbADZh~Y=-JIa3(8&@aDeP@&xyBCp*$7jG#o3^yis4U%uM8hHg&hs<{XXmNl75}_ z$fjd!ZAB&Xbw&8ezG96SwaXn1(}9dP7@yeqW`UU60-v6kLFqU2DoS}$5$`Z2!m(!; z0r9Mq=eV|RU@-MsL>k5wUJ0CS?8!( z<)N(|UmAR@-nVVc=xl2x-}(Oc!(|_aaLgv{3OBm6T3FZh8EI(HPxh{QdwWh!QCE)J zV&Zcy^Yck-i-&gF)&+EzTvGFc4fA5oyVS8C_U#-o6~0nLvAyopG@Ex zn|xU`i167unW^>zu`KwPYfTFV)ihsQ}Qv z!b6KN9Eqf9*XBTcTmE@hXlCv!d06to<~|`xDVV7PBYMj>R>(JZe*zj*8XgrHwzwk0eJpp`~zeFW}ZD`MzO?vzta znXR(&+e1eB@%5(?u*b>s6Q6x&zB%8w)x_JbK@S~#RLHqfqWqeK==w;8qU7gTJzlY) znMbQNw{iV4>cSnh-1wR{BvUPbMcpLv7ZI~o=V&p-Wurx;+UJdHSisO3-lV>7Q| z&f6%==K)b12X@M_`42MX)9BL(+Z(>>4i5BhjdVU&h8Ub|WfMqLartB$s7WQgvq55p zHgF$OQalR)Sy7-=eJVXRZY|G*O=vOzfDf8l7 zK=eO9Nh?;wA0jv*62)Y6?W+*PXo+J@nxF;1x70+dY0DQ=w6)PR7DG}$hTJxoMJ@>r zuKQWgU*des`1LR^kAv5aY8r@b2oW&NuiquNrZW&|LipcSv>fy#D`mXgX-Z*w?w4o= zppB<|ObE<42P7TQ(u5#|_qU1E7?`iIrg`^}D_-6MtxsTFlOx>S4Z>3r@Z+tN3&61j zHfTFaikh#kvI*5&NxMyyWmXRM67`Op1wGoc z)g{GqY>LykkH|)tl)a)HK4JHLzm2m%1($0@(X^F|fYIgK3a&r|y;c^#(ds8Tup_*| zNVGM^J}qn6f)}}t(>n2&{lQXgsCMo+>zfLBu9mVglwNhn@Gz&C(_^=oiw|$~@+bJ` z(Fnw=K#Zn-L84ImXOU&0UybbX4h1m{ZBh#uaP7=-*-BSsFCDH37 zSE$QQ;v@!4^GZlVS%@4h^*jR;fufUz@9&$oba_EG&r+ib{azzVchfQO5z8hRUy)P| zJt|V`0)8h3BVAy#HZgBEpJK#)UHHgZD^8&(X5mD#KShZ+u$x&)e2bsLg%nLn^oh9& zeU2_ak#+TEYsD4ni(mE=LtFwgfP(XaMlg`4&2JC)qj2Gei*bSjxGgld=BK1ZGmYL} zp`@Hgq@09+#_d8!AUoX>%Vy_LXoq1W-7T=|q8H10nEAceNoDzFSTN!MJC4F@7CUA> zf%2-6&hPdQsE6IZagF6XcXTJwUt`unX9h;Rh;1`bmarR(Km<4{N{vNbK?kp`Ju*A9 zMjyP%b|a{X=XlTaBi#_6I05*{Xr8dI=i>`N=QZBzY!h}!h@TKK>sF*eUp)_^#;AYZ zoG@j)XmnR)WtrFNvc@;;D6)Jn)DKEz1bytLCsbPu-G|eehgfun%3se#dGc8)e(afc zE_>aVMxoa6GFl7Drwm(g5Qg@m>N!^`P0>y5F>+{I| zLgB*C+^d9{v}RoFD|s1pA5mTaCU>^$s|8Ehr_fd z=NVSk<;1YkW^pHP9)xEXLf7(_W~h}U`dMwz_OxE84C^{FowPY}MXgG|?`_Auxuc9X zyoZmmxh`wH8Ju1n{+OaJ85xy0pwxsMTWPJ-=e*G8BPYB)A^0i^DJkk{8LepUHj8GO za4@Rat*Dgc_E59sycIG;cZK%awAU~%+h|xjuK3Pep{!tijx>)T9b@V%eVaP|Uas=E z@`+uvl44<<$2zz3#v7wN%22uyNpz(y&1a*;Z2u6skllmSDbK>!G#ntC-*PdAQDlx^ zCmsSFnA z_Zk3I_CV*N!O0Lg>N0DzCW!N4Z@bGYDR+1=jWyY5dN^e2z5#)+VdzzQaU#o2QG8h77=Ep`0HEm=WJ8Y|#9LzPdX=mE#(6wweT z%B}rv;URzS^SFZb4)>RLohIH#A(?s{R&`^cwBYywbY;)r(arEtR1=72Cm9ExCh4e} zm0~^x&L6Cma66~#&1T~otdpp&oylPQiew`SwOCLMVoGauGJyEnpv=bMg+g1wf*N1< zTN$(Xd}Rir0~kSAsSZc5qHrNG-57E;J32?ly>B6VhU<-=^noqGWhS{*JPi6NH0lRA zWBXd6kK6PIl02eS(T!#cB=TH zXx5kGSMS}*czIRcYcQRGX#Z=F{kKapQ4RG1_}c}kmSMF@d5c_W{)V0R zN|MGN(KejpRdv}$f1*Gs&B^kis}8fV?90D4@_SRPGxfJzqm>;LJ}+#_swKw^Uc728 zxoHr}W5u?CWUJ@#F(9EtK*1XZ64BVC4H9!XN6tSa)!@;oN_@z}W<5 z^^uP_Im=HFU}M) zH3?#&xnM(4GjiZH?AJCKGPcpwggjuhiYNueBR^rn@>FGrk7NNN+LhRX4gJ%XpX=e$ z6}{cMZ}!WV=lY!k{6g8*SmsU~BZmVA*Ltal1Iy(7SxB*dZ%I-Vx5@24-YK&6;40QtoEv?7iB9t{?S{^&Z?>-dx|W;fFvP+FV{T zb}EQd5o7fU`ozb*%?BT_;asY8i}=x7d%+C?A76-(8;&|hO>=!HT9iix?|2sqn+z0f zN9zxfY9hH8xoBtL>%aPFk3^7V$ffVF6dt1OE|R!3%fQUY=wmeC=HSiiD>8QBP({u2 zl<5T!yMw3|DXQ0g^;~hgjw$CQd4_Y~gO4xSkX%r(gNJssZIsRW# z>;3(#|9#Y{3mH$XR9c+DK9zP58uhTf+RM3?DA%~F1mo(>%)9FRSevqLtXvBlSWrlOkB&>Ws#FpQAxJ9#e zZ%97Yb)#d-wcj0MyJ?%k==j2-H?fEQaiwbQ%~Wk zFGBLf#IGkl3)Q$|zB=rcB)6b>?)%&%WPd2?$(C@wa4rnB<9xA6d`@ofLKUbzpZ}m~ zn3gN+J~6u3#FWE!qVTlQWNJGpllumcYJUfcx7nsdv52nH6>*{vdX2#fkHHBp1SsCu zpPku=VL6o5tNc8FG5gsa!L!>m3fv<>B)iKqfZvZLlrydAo z3tA{C?kMkF*Z2Mf?>g3nLevDJn=ld|GZ?=Csr&*bfKyU z7REdLVzfNZRlY0rn(imJaEVYj$hl>XbVzRT7T9XHgKmZ8X|-nqt+0*rkBvuaYz#)R zXagV;iDt|6SN;Nm+G6C_?-s}r_Rf7J4{(r#gQILI^3S8}Bu05LgAvT#^xI#;aT3{f znA7#A5g1ElW<4#N}7F;CX&{_1yK8t1>K!m!Hesx3)Gi@&)_!A^F4V&Lw)EJH?ia z`RrV)lNYORDW>-`MK{Mdf7#oxM3w2$^iMLAQ^#kM+k4LtkHaEOAEWb@+zZKxI0mih zukieiV47Dk){n=xWau^yt6F{E9SV~!5laux=@d-*I1tvOZSfJjGIl7f`XLIIC;kET zY4w%OC?{?s?vmpJG^v`>QE*ldYHZD=vv>#vXx}awQ?e! z9QvXhGuo@cCpzRL#VfTU`IR;4S;{F=JgiH*uXoxYa9qGFIwJ zwAQk=x>2QGyZxOX(W7#U44#!QfW*QP3hM|0v_kf)c|KejZyqv0ef{}pJ5Y3>T{9bF zZ21WZO6SF|S7n+k@rkg@cbqq;*`z=HKCW!P)(u_WjC%&eM$%ljgNyd7&>cf%{n&wT z`>BHt-UKZq+jeAt!`yZ2F%k)SZW(7a|3L^5v?9!*Gz zAK9u6H7}5x?OtiMwX45E6wGi)GA+!G#m#uw%YVOlzrpDFo2XdXxVW1RdiRzz_LNuC zygGHtO*e8Z&$=#G4I*oY1b5x0d}Xd##-KKh6-|CZEH}u)!9@u;-Ec=AtJ!WBvyvFQ zLU@s>UH>zxV5Qeb)%{*zWi2@)kQ1(eydxl2UfeU$Z2;ebVp=@2|?4n zVXodQE#ns^WnGDd#9LA_S}in<~#0wTJn3qWYyHz;qG-pV3Q5cMCAsE~O%BEV#s z$_l&yiUVm4%@7=9jT{ZDBBJHJs!b<;Yk|OP*Upxnj4My3mOX>+mIordk<+0~ z-caHN3JQk|hp{PYWWi#@T&twWG)>h8Sd=rroW2Q>hy5NW)sv_nCC(;D{B81WUx#VT zn%qb8D-LOOmlhKJ8^peSFNJock_fJ(EEihs?M?ph0|ZPc>_jz(kzmr%H$5F)2J)hN)l?l$dgRYje+b8dA< z_L;L`9~I^tv#1FP!}Sc{78G(V=7)d}mY!&d2SNa^*m;F=9W zEGbjA0ktay5{@5a4a7;z92BjMSj?&!lFXHeHwPM&yx`uz%g4r!DNq_h_rGHs`9M`8 zuI47FYAnLG9}TPh<)UNML~k2{*)ATh@uHl;YpR*Ox-wK$w5QOWwUx@L`l6Z3#l{Eu zgTBkF$j8W0@mV0cRYMTg8A8{ewe!+wTG8wp%jb2B4(_fL3=2`C;nFD z6!uh?1EJdvT7AWoW2oQ5@G%pXk2wpmPhCE%F>7T}9eE?^y`Z$x_P6YxU34h&)HaHm z=q?UL9Efj2>ps{OQc5Vd^SW|~3R~FR*(0^R4b=eqh+#8+Vp{*IdMLVP!~247K#%f$ zyh~6}P-CkJF`U3+NKD3Eax*uy+&x>NyW>vSRfA&dybvbenp?4`I#?+m3g=5oHmXm< zW1~&`?`6IBs;`gSK|aGU`JG>$Vo_APkejC&uqV2vM_Hd#{*twyzSG&K_UvA+{D9kK zg~}TFnG*vMFWBNi6|hv~AeKUl0s=tM)0jO_hTnd>(u=fbczoE5DL0DUF~7R3Evnwx zf|X_8yYfa+U!*lLV27HHu>8wNXMO81Ysfug7sDJP>?iq%DR^O={K%7b-5BhB{QI$%isxn>RSFgF&dLh#HXJ{4 z%c>tE0>XzvKbT)P@E|~Fd9q-o&WV<{(nuJ>>74~jgj^3G>4C~zwHV8b9FruXtjI%9W2%sr!)dwMjB za1yIH&L#=S90zg96c;U0M2G`3p3Ey|gJl((>{s9ECavdPF=?v!PPLg35N8oUNNcDD zqCGP?2ydKi13GNwVLq?2g1Jjmf&=sDSNP?*^|2TJ-(Pw_&Kx@zt3@gS)?Q8|AIg$$ z6S?sfTX%`k1gD{Lg_O+7O1ux(95$K5xp;qK=rtto3gQ$vj28N}$x~bMVIFQoSki3s z>NkzIZ7rYQo$NSx2u*{on;5$(Xhy$!dF@)SDG8tHuP_yjItEUj{uYX9O?(%U+H@YB zIG=7aupp_yM|c_hN%?{NY^>MJ>iYbrnvms5^$;9~34h#ex=(V{-hr1dU!>Z-J%y7E z7FTApN0qlWHBDX^AhC&s5dxJRRla=WSeb`gW?|>itEi9PSD@uN&1r|DskqIRmS?(B zy?bxRbh_HV$Lk=YwOy8^BT z8VxOBY=uSn$qm+e;#F~P_|D;#F%tEGXMEJ8E_9=kW9hWksN;_VU93AXNJ+a4MkG0} z9;hKqgRZgF9Fg@xW5n6})hzcd7I)>}ROWuT>S(-|{B+~l28lj8hZ>ao$tfi73`Ev0 zC`Y!gdB!{1&hVw>8Lzukb)LAPmVgyhto2SMg@V^I2W-WanBj8|Nb;kDDFUCbnvvA{ z)@|Lbf)7oT9yNb{Bml(C{Ee8v&LB)6DPJbPFRE3@!H_g-c^|^xnYMi%DTv^@Awd~% z{B>E!y}yCn{?}3Cj;Q_q?%#9p+XjByz;7G)Z3Dk;;I|F@wt?R^@Y@D{+W^Q(y+^dy@LaM<9GT$amsOqcI!oVp&583+qCnR?R{AYd_IG^1HWCV$y zkh@b9%{xCK>{b+TLW)OAWcn*9P(<3vy2yP&4U$RhK{`lQYt^9>3@6w_W`=ULX47CM51bC;oEnUQYWBNouqF)^fW?Lc}*hT`Ie1kxYMC zMdulA^if2q{x>+UO?r<``lFLH`c%SJ759Q-y_(Ut$sd4Qs368tCNSHnm$$h7DV3dn zMv3S5HUFGq(f^lu^0`vp($^9sw#w?O+3K!GWdEjK|8z_0ZO3VvP3ewB;P=@9oVaKS za0=+Q4j%7V!0Tps_!FX31ls^FALo#n=`S}$yj}oXC~qfkV@Nts ze2_7+*CFy8B(xIeX!0xF}20V$Ph=|`~_&pE*o;^q(+X$F8^Kh{Lu%+_Fm(NT8<1eKCMMusRh_U)G z!CG{=?Nd*RJu*v?6lt*Sj8mgov&QI^up z`T|&|tc3vgc54wF8bg30aZkm}e7{eEs3H^SGTT)ebssIId8pv%i25N$PXNK6m4 zMl}0c+;L8pvMxfo9Y}54Ej17Ce$5ruw8QQUe7d8iZEFi8W*N#0n1RGB?%KOx`kLZv zbQ#Yzm4cmlZ{9PivWFFOw5>VlM(j>Cct|v#UpJ_(E3Zu8BYeGFje2whElR-pE2`pq zTU-{Eh5CQ=OWPTktYu$rx96m06FBXA{Z}`;i+?Lqhc+Xp`W*qp-J1v?f&suC;~0D_ zIjM1@zHb*+wm#NTo}Oxeo%VTFNsy{$n@_W=hn60?VRxfS&bc=8T=+6By2$XE8m)`I0yh0QQJbF-^MRj` z8*EG4|ACIC@uyN>^@FkgtN8+(B3fn{A}XA_^Zvqp76}B@w0M~E@%#1?4%k%3@h6)6 z&E&TtF|6nGJmAq1d!c{qp=JKUMft1L%SG^6_#0UILT!HRMBj(AI@;Q&?PLS!G#Adf z868G_Ii=z>W#O#Chx~VHd4IFnn8Tak%=Q!}V&uE!u@X+H70>WDmuZ?3ZF&@DV5jF zjj`BPLs|D~#?W+a?pUU!A3p}?`lmP7`bHr9oC0&cNU4F73+z;YQn$=1W;Bo`i3bLU-k7R9I6l)Bi&-zjD3{x z$AdN}iII0ByLBZYt2ZYDKArd~qKu~!z*XNQ2kgMPEfK@BGaj*u3bPyZM2ilEs`AYF zfi;o7vgng{a$nKtuX2q$)4k<(>y!l z67_~pSQ{7GMAn{(si?q;RHiz9*%EQP=ovAuoDnoK9Tn?09b_)dsDIBKk>9ES6SoxV zdoBOXfK8}o$n${5hSkUgpFd-;*HWi%Ia&1f-6*51-p~cyHGZDBgvO_~u`Pr<>d}9w zscFU6*bL^Bo0sAC?}|ql({}v)%5A>RBW01^EU9LOSHMf9BI2M%$(^w zmk_<-)T(~JPk$YVw_U%k<_&9xj$mgs+LU;uEon)xL3CNw@kO*)y70xve8siv0qxau z`aZ_w7(WRTBYtItB868Qj>~LYjQ@Y&Q2`s=Xe~{r_oqG+28#O!~SnKdEu!U@~hg7 zk=@x@G)eHrt#9>GeAIPh11R|4HBf+b{p${H&zVKDBwX zo(=ik=qE(Wu(qx4AAj+eaqhxL)$I~+u6UVatvxBuY*j+g+NL**K2#Qx7QuMgCgrmP zp;!^8vP;Kecb`VOIp=D@T%HEyI;lUuDzlL8buw?Y(bi8;>bz za_)KNb(GOUGU4kOrNd7=L{kte=89&tkK^g|^+bF)x_4F#Nx)%(U57d(w6gA5_437= zqSKbPuH?M__Uv~4k7V1d!)j7E@-cA?t4j>d?QvgvX?L|<0_Iw3Yj;2@+{Z>375k_Y zu%SR~s}B#{*MRi=n|@k1orfU|t64nahme4^hBi;3b_WsHcPI3l)wZ4sxmVP9*n9bT zNHyhZ-9-yJIheSWnET$S&j&z~XJd=WP~M_6z0)#i_C(1g;b%wq-0w*M3HZ}DCgj?d z_w@_y<;&NDa?PH|JANPL*zKo%SXKG*ecY$Tj^>vRUzMn^eiA-f#NHWn*g+izbWX(i zLXFKr;DX`{m0@DDWledFKA0P|MybT!b}w+M)iIaWWqy*d!WG|;H1(wF?3XV=bezRW zXFcSEs?Z;6X%6j|kW6KVx-=vYe0ON1l>M0-)tfi?tIK=&td6zw*Rh@Ql(?&xw~wBye@&gu=>{badW!otC=m$x!=r#DrpCXmB`@3|#Xsmd)zj z*6ETinO9Nga;fcQ)YL` z6eTxvF&F8A!l=ZP2F5%t9Z@kUjcB96|H0mSM>W|-Yo9?-kQV7kiwX#WfKsFg1ofqf z2v|UB6r_nX=@1j8N*57OM2d6~A~i@!=n;@2y$B%$kWPXSf+^1Po^NKYbIvzs);Y6g z&YCsf`v+?!@Ib-uf1o9}VB{>a`*rY7Cy-CyHXkH1&8=#|=;MFjZz(m7x& z9PHBKmm)dX7F*?rhS;bg#WaXPRjv#pV|zE>4}ZX8#h@3DU) zQIyD+860FSkvt31+BB&G#P~lSp)oq-o7hm9F(0~0zWJprwr>u9ed~JvY)@`Q0tx>; z%nk+Axb6A~X>%{PAakz{eep5n9_NvL@4K0+Kl5iLe2N&NlR>m&RFzxQAeuRKv{R>} zrz!Vs;Sc-4(@)nL%|sL;QZjbg6LoDrQi)yJv8|Q!rpS-5>!TLBpG?nNTv=r|&;fx^ z9|06YcJjahE*Y`Cy=dQ@Ib7nF8KS%ue})xk190S-_ERuLfEq`%rUjyz5~Lr$qf<3X z-c>!~5nB5G>Uv|m^b;1z6mXf)B1Ay{WM~`#oVZQbSd37qeiXcLNhqr51!AL+_oM}C zOyY#0CeBH9Lf4cmU_%z#r;n`f;#+Yu==ZDbOvlpC4xo#}EU+8EKW$j*ZDvh{l@AJ` ze08;6S;$L#k&!|QL*Iko|5ux}|E}T_dnp1)neE#D-RIc{|Jz(BEIB-63rK>=qPvik ztv{fm?>29S|GVDJ|I)8>{l$pRhjZ>O&pxV}?iE!I9T_-^PHxfDn9v`PD)iai))Hs? zXumfAdYbj=kr;FnOu`w&nT>p^hb2i#*VD{<3d3`q*T@pCcfyYZKjZjuC;jD-$rr}7 z0Jv`o)e$0beXH3&`I8d7b_?Ctqn|Mc#HQK#Z6bBQbna^gA1ac^ zIRuGQ$E*LqoBMO$=jgR@we}m#kJLPMikLK63B24T-~>ek$PnAuoFE+hF{7|0WN}9- z^qq0TJ zu}Fci!tLdr(N8X@#9=OxCZ7W~o+-t-S^T4#sUP!$bB^@J*(d3lOS|8mXbC-cCH=G` zVK-aJiXD0Ux)B7F$khh#h!0QGZM=FbOOj7EL@AtOeNqA%vR=yuQ7eGf-+2)DgI}r9 zx);Mfb#i&XS`O|$f@b&3yjtGOCi!JZqkybN@uFstkY<4E)Hg;sa6tQq+{}na)fsC& zR`r|hrd!P?Q6^M5Qr;puL0_;p%$ryNi^cPZZ52ms-M)S4#E(9|B%{HHJ;N84l#L}; zFv(O;f~0Ccep+q5pY40=SHJwj%f0Mz%af2|_!{~40yq_M99P;)H0Pq7)Ht&7 z7%}Y&eREqJJ8m-7LztBGT7^>Or0UDei74TzUgQ&sWoU44!gPs?g!hV^!k0GP+}!%5 zyxN;-nmw@8dCuXM+sL3#Yk7}6mm+_MytQ>PdRZcxE1J(fW_c9K%It-T=u3NC*sudf zZf~pi#;#T=yGM>)Z+*))81tHP>V(%2-E+YaNf>$|_g&Yl=*Q|z(J5hc(+&R8!gH&A zetvB){Ua;P0@N%+GJ9&JhRI%HrG;s;$T1JuAFRTs?=hx&Wf7F89<0l$vB=uI zuGA!9)p@E}N0wc2lK1Diy0qDjdqG?>pFVblfO0}m6;Ky^G)9GbO|C~$tw&6#Cq6_a zmi{%m*iqKavZ&rs+&@InDss zPr*;ZfVz3RHgJzEe?o4Ghx`HMa~>vOfYL=I0K@I=zXwnYF75mQ83?iru0v{ex>XY9 z0VoEFkjmi*TTA{l&(@Uf;a!+6fVqD1y=D?Q)fKigWkIMEtLj-m*VvXbeB(hk(pYZE+4;qQ{n)Fa*kSIDr*96SUFBh_SS zLR>tMqIkI~r8F{YG9Il6eK~3@f3YF>v&Z!76!5jFG2o|$i+IUUSeKOa_rSb*k8Ey) zPht4Mg^riXT*!XoTR0Hui=Nh!%?PAkqMwYW_)|T}K0^5N>2t&TnGO$4w7Bsk4QJ>^ zS((0^#UBu-BIP0p8F>Z(9I~gJ)fp_w_xAU>R8xUm5(4zt^&ogMkX~W8ARTly!D8!s zp86U^*^elH@bY@|&}!w(B~`K}sS(G%4oo(HWuX&E{R`1w;i(CmVG536B6v*Me+ouX zA38-#HR><;?f;-_QqzFrbm~l9veP6D))5X+qf5T5t(|uVF1ipwTs1DdTCDJrBDCiy zJAHUyf%2ZbLtXFi%W5b_1>r|)=@f*6M)**S?&)H~vf_pwf+lX*A8=}LfCykqAsn(Xu*x}ys%E;!s4r%kd#lEK!1Zt^% zR_FIB9_HZi=EJiAY13tccP=+_2*&p>b4Dg8e)ZYj+zTEC%7E9D{(a@{7Y~Gabpp0O z2i-gElxJ{Mo9}NB-?x7O@vWIx`f_^y&aGVZRvtB~^V+gDix!?(S9LOIdp_om)7{Gl zU;B=9RY~~0A03j3;b}5?c+x6FS9mD(KsM+BHDM8MO4{kl1(VgCAQN?o$(lA98Pez+ zmK7hZTb1uW9Vhx}9iXZ-@>uESardI`l6P>)nr-M;&K`ACmA*5e0CX>2?2- zJx1%9ROShlBO4cgoc|pi65%p-N}TIhB4W9Hf&XJCdjg1LL3KeULH6X4%QuGri;*=r z8R`yskq1_P@R1tTiJzt%d-%+pGV7@yqGc8RGS>p`+!{i$tpWO?d3BqAe8kit>pJm` zh?<4TWDoRx+SEP~g%#bNPuv$8WR5~1?-qBu6eU%z=j3s&*<5d+S%|2{cHVeuY>D}C zkPlX(#*sq0f$+6%qn4U5`$gK5vA=Jq`OYTe*XODa;v9kio6rI-3215GY6cq)M55Pp zJYAa_X?HFjx>{a_R}oSKquMm~P;@~xhRrho)$#>MM&0$L=mK5AeE$wo$13bznmp?= zJ`R73{(yW7Z~3m{w=t#2S{yNg_l%W%_gtFcQiWJs%gxX)AgST(ES}Hyh+w3$M?3q3 zFq68~1)Ue}o>86sDw8DHs6BN3w>$IrN?*1`%5;yVM)iaBOTF3Ta(xAA1u>*M5eZ(; z-dYUxwHrTO>wQ+6b5<6cQ+(G&;ur}0?&Lu}@3po(5c3q=Y;*tsxWF|6p1S04y_HGf z_;D~ZQWJ}7@RGw}x!^XWj$K8Vz-pGxjdbp=UGLB(oMX*71z@fwXVZWzB)U^2UP>PQ zea|-zAw8-qNuY@ysq+leDBA9fv2;!%9C`kXqgPJ)`Mo@W7Ou)(n%sttZx@dd&VekP z#yWSc%}s4<{Bw^9RDg!m56W>0OJH2^ppjjkp>4|3(gP8RL9 z-HSSm&LWC?-F9TWVaic`J9jti;-aexMhh%18JiZQeUHdYmS|+f*re?5TSURV!bk@c z@!HA2g}j+d6N3#SI>-1-4$eO(h4yWKJrGK!@zU+c#(;-Rz#~^?Lb<*_5N+R>efX^^ z3Fam5GC0C<7|!jV06Hve$JVBHAzz3oJem=S*;cMw(@t5m{eb2N-}xnJ2KG;LSkf0C z2f8V5NGjTX&NCnL-g#i_y?vrWW$?n&_Dy5<`iRU{nhCXUk`izB6nf{K1&NtgQI#c} z$TI6i34Hz6l_Wn?P)@E5s~FCzb+q@U>%!uDP;~I`S)Rbk8~ta zF+OL<)E7Uj9w+b_eJhAOET-4Y-jg^cm%XPl-Q3xr&(HX@S(mJ4hb9Zfpl0}$ZjG@> zw$ZdNXK{C)l<~tA`!FXVQo67L`aKM3CvHCx1zwx+i=Xlw5p@c)6-sPYQEF#pBeE8Q zLfKO>f>bmiXzUVGet26w^Nrg%iBD;!>%xD@no2!ey1ON};G3ec!DB=Hu?cnr(KWI`A>(AnBc05AWE}fsY1i1C_1;8LE!lCo`cyTdN(@Ek>CXgp9Nvr0@VIR>nDSZjV zPGG2!L{qV;&}L(7j7(!aRJx&KGk<}2lg!$#&q|Fc>~S~ivbWyt zF|{?KwjXexL{u6;F0JB^>bfri%?_x2IHO;1jYl===%FC)`)sr&MJ<<<9M<%+e%X4ZWn-RnD1;(G~~aZp<1tJ7XqErJXQ7k3XPV z<>!TPZOmw$Qo!wo*!7*;EoqC|X(3NYt~KgeG_CZnRN8kHl(Ui{RPcKM3$;!ZTMUDX$U ztJ_}kW3Jt^IeqzyUmPjzIQ>!SCc4a?E=1K}e^D>rWuq@k78HAO{1`_PG}D3*Zw`XT zxGuc+wIoMU?dIEyCTCWsx%Ae-Iilr`U0ds5ZCtB4aVYNZ3btP8>by*~Sa8u9+oU6* zD;*7frpa%Db=@^6ZqG@jn^^Q&RJr=S&yim@Jf;q>efJ~gc)maeI^Gr(t$a3rP<4s2~vL0pX&7tae!Kn_`>8>NjNU_wGsJdrC zl7B#1xxM0@(#B_MOo}QLxlb5d8k)L?>E{Ir4b-8IcHNMaNg}*Xi5A;y+zQ-Dvih_Y z;QfL6;RMgD+3vNF6SR?3W2;_C@?khRDS+*D;781L*s{vdBvQL~VQ#q+%8+BSFR!76 z2oR2WYUgd5Qq@#JGQ2;rJT!#^XYIlau%UZ@^hj!GGJ5Wj=UgopTzCfYduzyAu7=!J zfl($0WmLTdwvt1!A%-7%rW>1dO`o3n8&T>0-7D@Bpn8zvjZrkkCcui|%^1wPIjzCE z4BOSr{(S_(QST~%_PDUEoB4kf8(WPDD&1wemp!2|Ew@?5TSUqvYwa6sEAQp)S09M# zzSJ+w#W)%U639Xq>V>ZR!rH5bn%p$XI$E^l04c~y%g|M7Jt-3zhxUWr8`SXST4((> zx^IGUb(KCXn!?I*xG&kZq^n721(*%vRp~`Dt#kXG-X^2_G8EQwx#9?wwx>6Vc2qAi z*Y=XHOWzsr(mYtdM`nMa zj-AF|$?J3y%LSai;&UYfx9x5k=0kV;RIbsRa{bt!_euj>T4}Xr{%_v^rG}}x>A!nE zvs-I z$>~$p0Q$7I%i*%zs6x@xdp7GTDZ1Vtn3EF#JWHf4kuBPs@Xmubx--M`zJa(8nDp&A zBH8IQkdDo#LPNX=uon=)Li@{4t+w!g4ZDx!bRX$Q2c`_NoDK=QZo)>I^D1Cu0KJN# zi4Yc~hqvaUR0R>s^5{}cuZ|br%=#pc-nZKid+RisB4;UR8SY9D;-Lp+cP2Eu=Xjw< zNy@Hz=#K{(QO~YOzR)-T(}gwwEB!O%ro9D2Y=0#Wo!Xv83IIC9+MBT1sk~7BF!4B8 zS@1aQ;G_O4b~*uK?q|(Z6h;IkcXXvIEG4BYX4<@1nA@ZgYpfBvK^IQnxcY)$- z98J-#Ic4(Bi;j`a)c!;Po`P5zPF4RMr?&tgqVIG)o+c&$6tkQw!PK)u^q0_?Ys|Jh zny zerz8Eq=pOGV!=6gRj9I1dL%+0IaLo~M)^Bf(D_4{Hy4MPZD?$-JZmxo1$EVnSg0x} zqvCFnZK8vkC4C(mQ^fVStX?gyLoW2ns}}xMV89g>tNT)K9oK=U$|1W|;t|K|$gTsE zak@MoVBTKm==Npxg+PHcBkh*vDXH1WpJiWHzCc;2PMtm2hM3s6kMd7-Xg!reUGAcR zG<*J1y_5@xdI0*h)lKpuO!k12Mv)y4Xr^oW$Gp$ZD4M}I=R8)d?l-gYgJ(|gAM(5` zOyV75A^C3c&=jZudDnI9(<$=PjJgJ~$aL3=wSbeG+kUEd9X`HnJK@*It9?>v)ky>h zf7Mj1$i{210Jo!Gv=*7eI0+A_c^m8>0qwp(>Y7eAJ zl_uW$0e1)*9qbC0sp*OFyF*6HB|V%pCJs^0?sTbu0DzXD!@ zw+JilI9guE~j#npiU88!6VimspP_1Nk z18d^H)^a$t0yw4EcR?RCpTh$y!wB~2iC(qenjXJ@Z{gZYR}GIe4C4uba$Hg84+Snf<;+ z|F=zNM%I2exhT^{)5?(GQAo27O_ct6Y3>QHKUT69=Riz@a!SlLSXF}rU4Qdka{1P9sWqo)9IW-qG`XdQm z*rP8GR~f^IZg_b==?^RUk*bQj75ApfWt~GWh2!hNHiyO*QQ8cA)k0-LX~z3>RZP z`V~0ZfBTXUhHy?`ek_noIA~*!f=Sz~hR_9Mk%aTqb2J00iiIl^j~$7c#eH?>;r^Z! zz}N&+MOs0juq^>v1l*j8BXXgEv|~9{v*XgP=-vS2T2q9^y(=B+C8}K2ApYZRt00v8 zIMM?dpL>erR7_BU;dEB&2?K_O5s5sv$lJqpK9Zbo%>+B;q32HGw5yIR0=4V-`?;55 zJ>C@d5dUsuBwc;15a3!_q`-C)QllXhAsB;m1>?@hL%IO-9=7ha$Rty&u4c53i{JXE z)5JDU{p-iag10%p;Ut0N-^m`srx(fnOe-r=6te@U92YoDR>K{rW()7HQLa$c7W8b0 zlBpdKuz87LnYrX(uFo;l#bn7uK6RJnkn_gc=fMvQAVP2t#&g73xClv+I_QhdfUaL39*Oov{}qS z7G!be@n*6`o7B;<7JJX~P@A46r|ej>E>c6W?6=`lC*2gtXALA?7Ucw^)EPhy6cBC+ zAx1@{&c<~d{ML)2BD!F6NH6pA4~Q~Ja#;e)nA?-A^Vn<9`!HVmQPM#|i)S%hfs9LN zaV>N7NC}c1_dZ(xJpLZ2FPUGTUd^h#kiCnf%KRuVpwfsp(*8n8<|dsygSc}1{F~dk zKP=gYkbKbl$ao+pgEm^>wQ?hSd4G8xeRg9!BJP|*+~sP46blNWV1x#ESztU6k9LE%Kb1d|{OJi5kp^ z_ST5qPsPc!eKLE*~T%Syj{nX z325IuR`KX-O0U>luRtR-ww+V~{1=)oAcC`o@YKIYcI66Fwq11Vo1isd85pqs9c-}hbvY3M$weK75$F*8$E7`hwRdX3p*1u%Q!4O8g_ zJC*=T?lp4F*^<3Y-ReKrEHFGI6}uDJL@{4i{$0TQci;GzE_A^VZiMK1p1}T2 zwXO5~Am579BmUGmd*iwI{e^`P3Mg#~0IIw%Ub6$!PdObKz{V1^TE|!z+r@I^i@w|b zRPuKNp`k|*kt!^~eu}DTJW3qiG*BuVVv8vngNzRzW4}>lVW5_xIJ7aDc_vpZwWjlO zpV@pCbEa8&2UYO%qgv(d85=vLtaUmqc%Rcc`0)|bwzl3iQ^PR!d|;CZ5?aUBGFwUg zW)u5fDhYOmD+LAXmp*X#d=gQ+*C)Xze>#dKDJtn_Q<~FVL(o%ifXOs1a0Qci$M*%| z+#~`0K>qtcbb>oh-~M95m8fBQ|GrQ=+>h~50~`+(5A>Druy!|UARWBUHmvJXV@vLL zyCLBkuWjkaep1h?9pK_rw}dVFPWMw@Vk|^M6T6y*I$Y4S<+eZGy&DLyu~62ot}F7##hf~FT-!2iJtCAL z$U-UYR*^&uA?wC_QWt^yFtp#EWE}sYCS~NnJnrVJ<%b-m9jZNjytbcboA@$>^2kUc zuH$_O<$5Y0y@)Jo994e2uQgDW5yn;$cG^_*?ec56tkzy-10PKn2^(A>0L}uY4V6$c z2SyV8=z_hH{SetYtE}!I7~=L8UUU`#?|2TzJFyB3g#Fz7N$xvXVDCyq@?G&}6g)WZ z?NxR!6PL$&!h}8lzJav2pGZ*r(nzj5=r z(W2bllYle`a#I1ji6uu6QafNX0^LntF-^m80sqng&k~J2{-KNgJ$JN{w0mc8diw7b zm+j<_OjN2mtY@Vg%@)3L4|?o!s`}LAFtS0V8^s9+wgxdkorVKb!6;{>7szJp{MP+^ zc$?=7Z2rvlYM4W6_+j7wdxo3;ib-d0X9mVJ^L+vA9%ui6Oh2G5{^PRxkA;u_J1_CS zGQj_pYiXLD(32Q31R#Fe1Lkko7`|iv{P#Q8im7F1m(u(|zr;mPf_%X-kB^8-y-}h` z($#8x^>-*QNfEZ^e&AhqAHG4=aJ>pRWNPfj2(s*#ZpKxGauKjwt`+_6ixnO%;yf{9 z!ghmb9lPW07Z=h`85}?T`2twzmuB*|OB1;P>+h>Dz?~h_mDVqQ%=)(UiMEvdl>K<% z4k}+%x()oDw+p`9jvG$8qXe};~b+za2gUo+OmTE2Sq1XY=(%9z~5@bu3b}kNg>H+5YymL?o|~iR^QUm8R5a3sT+!w!#c7LjrKVstw!Ob}L*Ub3O% z&=iV!vnc=2&02hj6jhgud*+{w0(j)mO+b3k&Qu0m89eNZ;K;orcWgUl|0)!P4}> z3q}F4r;dMH#`Fe9`m%w=|Gqjw-xBeXdF4do>o*A5J@}1r# z62NVEF8W`jxza9khyz(@<<(ZmCsTjP%A({N!<3n+X2f37tLy3g;C%Wa;41koN8uvh zOaxM%GyMHlll2ii0v3+?YdrJCPcq5J6fS6fVU-)z_yv%=_J1bp9{~uZ%|vheE~ePu z5=5@GgUM0TuoACynE?Ci4u`S)53N*%`_GArN~hn0*8S`rIyOVsAYt3_v6D5AFyg~S znj$mJ=kB(AIjlvG`Ghzd^qBM*48S|B_Y$@0CGGk~B3{?ThK!34Ryj;# z0-v5wma{OVeUN`r^n4W-_M6YCzi2*GfT9UF8D=Y47muZqSr>sdG8Jp(s5d;)kf;7ks0o z^vOkl{4)rWKryz+)S4$6R)_xl^3M4gzpnn?SJuclwp?Scyn4;}7HP6sJC?W3T%g;I zr)Hq6OBOP7QD==TYVxhwewk}D=gCDFzm);xgZ`<{)KCO(JLy*kQn=+J!Jg;C<%;$Q zZ{10G1k+#V{udf9R|}P;e-6$~%IidON%~%+0-b!DEfW^i9WS+Al|7XUTW$<^p1M8x z;=2JPm^$h}h0*T9)rRfwkO$(T>IZav6rbvPkWKC!KT(u~ael>e)Z)RAl??z)uOL`F z!|;Z7cFaS_h&;7Up>Izd*G2rVoGtJhe)3)Vgssl0o-4EMdKPWK58Toh0@dFZ zsM^ow>gN$4TMr7?!smvPw{&?H?eDRvmK2dohHqY1{rXh~lpbreGn7x-Nx&aRNYHgi ziM>U1)2JS&v#%bWm|ZK2WD&l(+bwn_tw)u(>eUV0&nOkZeB8r`Aq*eG7QYWX6IGlz z#RS|TkO=I!&)jJ4d+jP;iV!(CjsTIM#u6PT0vW=`1NTjq$9xK(JGQj>alJf_dvpkB zQ@85}j7EG@L=M)1xTerAir)KV8aQ8k_o}_qUEF^#+`09DGDt?p!L7)wg#E!p)LM9J zYq_t!7uVOHCfJCRhkeytZE|_n56>ikexoQPa#kGuK^ax4PBO%NVq%`FK+SW~{|86! z#ru~!{Bxu*v6wr+vUC8R!ZB|Obp8SD4-)@?{%Va##UW#n-1_I}*5kZ|#Af6XYD!nP zaDi~XG@oNh_ruWXIgod$=Mn?o{DaEAnN_t00D6BG;MZqjs^C5Mar4 z2K6phFvsoY-!H19BZL+-HdtOmG&tD{Y4d=F*jQ^4;s38R3(P)Pv}QZd07p+PVP1C_n19va+&W@ zzUh<5ZP*+l4KzMm0%q=E<`McGC_6%SZT@tq-D2-G`}u29n(8W@-a~!{4>r(3d(bXa zOddNz(`%R7X+o_oqB=b_=AW~N>B7_&csjIYl818waw5ZRdg?6Mi{Tz5i%8w$LB;m~ z!Z4ncHTU@Cy5`0F6Vk5193&2H@!B|_sN$zWGzIt#Qc5c+rbU|g)c3|HvbtWr>Tyqb zn1qz``N)T}t+ByPpNaWrFp5B(!G)4f&46_M0VRpGGKxEXcv?r_n>H2qF-lg;x;-50 zjFT=q)0$3XPtnybXX5m^zdzn*DDT*!6WYv6+att(7+I@|2R=Y^OMQ{B`3l?^Q&?W6 zJY1hTM>4_@hEn%4Nb}_-3bOU|U5@Y3E_`2WH2XMi*H!T4&i`;j0R&w+QtrE_Wsjg@ z>I_$xm~X=2SN|H-eRG**S_WuohOpWf`sFRivW={s?DDdR!-}5LdB3NFNGrED_4L>K zRv~DW<7?#R3|jUdI;f~*)Bwa&O>=?@cPR93HFhL$Jo9jQ)Q8_=!abnQ=c50tDj4WNmDGXE0VY>e^`es_s##ANwhI+eA+*xweNXH{zo{ zaJx%HBvS-*{&S1}v$hiv@_GiSqD~@dZ1t+zt)EG5b@iBr~GmbR7fa{cupm};v`|29%2H&17e{Zx~I+(2K zlQCWM1=1|Bhe~>`a7984_`L=|n?5w7Mwr}Up=r@&S}|l$>f&TfF;Id193h@OdZojp z!}okoK#lfAtZrHo*#S=%3?QPPGxgv`q?Gan#{k-sp3cAQFTX|f>S22SN(x?lcr{e| zCC35k)!$Rr-xYU=RLgPls3p~1<@r8-tM2=rnmZhU)5E4KTW&EnJ(~-bpXhBYaRQfD z?%`AB+0no$?8!QwYiWW)U4I(p>oS7r)t=+X)l^#9+{N`35fPzlHc)41Du$JMjg&}q zOI(}_p~>AQOJz~KmBH0N%qj7@Z?k+>iLN&tjqW`kfQJDaL?p1gVNmxMEFyJ~-BT@I zRX{Qp(^^oRo1>4@Wy14sa5C2~%^plIkb*pp{x1er;Gx1{PfRGeg08(WV9XbMGI_EEnE&m=B?zipJn72b@ry5 zDZ8R(eG9_bGI~Q&FV5e(ZM2Buxz^;X= z5ZyNqX_8bCoE*VDX&+}*li`$ zcxA9JgI--5OG_UVzW z5d>s6&!vsOe2-Aq?0$8i<%B2Q-v&-!*2(Qpr#{?gOV|}txG?pW;64O4${h$s7+M#K zk(aZ2_br+((LD(?pgUio<;a$XnYY`_ym|Hf%%!C?|FoeSzoH_I0(w7Pm;WRudrnix zb+-D`Z7b8}E+T#R05D#e%ju9Vu}ne@t>f3xoV8u-XIIx6At#7mWhPO z)L~$euArzeN;NdeSughU1n6hTjzr(F$D5nE9#yi?@EgW#eWuW^O9Eq6=3(qTTVTo^ zQb?!L&3;1Gi&O3s+_~G$nN{qCe(LB#{}!6Ig^|~>db6g!D##s-#YXfLJoePk&S!|eAa4q)Kp?JAiYiwG&}maslI+>r8yx; z^!y#1K-F=!a#@qPzHHwVtf%j@OdxFtNzxa9Lot}qD*iQ>Q6-Jbwlf>IkKD^OD}Q*8 zUZi}DV8*S00y-KDT?a_;G+3$=8$hW35=N@7{}H-t?&qYOPSHM0+>)oY;8pr)`8mEr z^}<+Sss#FLYG;ua{VQz@<-CVrdaYN#Qv}iYwAdLZz zb$8j@@~Aq1=0yJFin>iHvLo>i=wlSniC7Xz5&XB$IDUyKj$#Rhe?a3`NODYGER7TT zZ=Qkvx!_+$<)3l*AJOs8IQ%mX|9ZCgCm#Oq$3y1qLd*R2z6`>WG& z84$!OP#|{K@eN%uGD3*)50r*ulnRhp#R7NO|;Qxbfi6*xRA&;oL=^vAk@16ZP zm40~q5XDbs2gdyPhE29nt&9HK^69V6xf9ErrsBL^kf9$Z9=%pG^;Ite=wQ!x@WK$HCXKPjmFTaEh9 z*FR(MziJE!?ci%v=o5Lgv*DA>?P&q_n-?DIg*yCzr`*_sF)9tDSpT)J=ifbMABI$CZ8jhuS-hBRa;1Enk&6xV zf}z(Zho8CLt9_QXbmHU--IoTS9I1>=blwT<0}JkTe$V5iiXJEV$Z>jl70>mDw3}M0 z3S3`%z*f5|!#1y(oydCG(#=k?GV`b7=+an=ENUhhYMlV$t}b~}Qzmn4HnZ=5+kXh= z`Zwu;?boorlE=aPWkz<3YiVfzUr*eS+yh!E+he)#BDWr}u1o<3>y8E}tn?X_V6VBg zO!{pRjeiVd>;E)m>Lv6C^me6V>D()|6*$i8VUT{;ei?G11hN}Cul@)01kgsAjx?gC z-LH+o)o70N%Omw(ipiR{Ysr!=n!;IDZlCK48dw8x+J*ES1Pm} zJ}2JUlZU8xI1uHxKq7SvMq=PwU+0W@be(4(RjD`ernWoDx6Yf zwupNHhb|7qJIPGI6+Zxy(#wSYjWxN?BP90e0y%{@PVB>eYR}tH!&7uc(r6c+bh}ce zO~?1St};eoII#S@PvF-*uLs@%Pa3wQd(S+cl|Is^+V;}ArIZpu4IwysF*$7)!CdQ7 zC%^B|HH3>RjHQx;9tdW7l%cBsI$sQO;O6#Ek!L0JDeepRJ#WyzpZr zbV^J^@wssgbA;$y_{dV7@XI%EPp4c6=E-;WmHx7XUC0M4?dH=-74^%>=PHrO{4q;Ew?Qzk!IZtSsbFxFR7{#8b!qu*thM zT5T=MQjMp!NJVOD*+~4!F+YZd0n6cC`*{|U<4%{axCcUH)D<0NIld!Z6KU4q8t*tI zuY8AJL@tMQ@6*;3^*H-6>Eye7J~DUjih_=5f$l1R7>d+u!0kz+Y82y$=9*pe+EI({ zDe8K{5gV0?f4wJEk2;(_jxm{y_$unhr2^W%nQ>SS3j>^SiqI7R=Q34-r`^JwXlTgZ zT~v$+%?(@jm+&_#emj+O6a?6s%Z}*m;ivH(P9Snzm&XG2-J&gAWnsh26y>w+-KI9Q z{LGpo_PFxW!h?Gxzso=b#oAK`!yp_jA%L@X9N>9~q4Xxyy{~mP6;HhVIQ3&KJL6NV zV&dhmcIOKG#~nqF6ovB{K>VoCuDoiwE)~%!s;Wv1Q<1d$C;$*q#g~r%JpbwoX9}57 zFn+~Zd#3H-Ll><>9Hokpw+(eeCfi{nbNALSS$%Yza?)a1Zb+Bqdfr2bER}E#=<#=q z+q9>tZeYa#)$jbNFG*_;J_@yJ zxvu7Tj~cnFlJ_X?Jk|r`8V{AneMY52J$xnL0_3M9NqNT+;_FVVjWJ7_yRh|iC$5-N zk2z&BC=0P`DfRn1I7mWX4P?u(lIn&O38nSS$PT8Lp3UOU4$8`UBq*_SpR%jzM3i9Z zhELKQ5jb~BNIej{32@CttrmCEMwg3@Tdk;NUv~%x-cw=P;bs3bzfjS9aQ5m4%q-&_ zh7+zqwWn##BZiS8bw=ces&g87aV@Ibw-n#93i6yJXtE@V@Q_F!FK5K9Vc`?{eG2SOeWJoWkOquNogD_h3~4 zF-%@uo-o$c9Mbk%GAj{rY$N+1KEK{%U-Bj%_9gc6+h>PGckE+0k8gs0+kA(D;3BlM z@Ze#%>!J)*vOLtiV_vXUGdvbmPJKniJbSpqUv(q`wAg!ov_ zcjbWC17L9G#8Id#a+)3RE46LuUje_MUqAL`(LIUq=AmY$$xm?#O0Ph_j%5j3W3f3( zz|JHR*^^Y1SMoZr+;sh#b+l!t^5J5Gr$ncZjQ1R$z48;kxN>c&FC^v=MV0!CIK>qA z$UQM5T`URiR)az6J-_tLg7S?Lknva9I(fxW;R|p%!aHEf zpca~tm|2kbW$Rh~wzH)!GATjWNx_H0&D0RiX^!Mc!kJe1arKS5V4T{kU$RAY8FKhsLmurTRr z$Gl=>Gm#f@qg<5N%b4OpO(or?w2?0rkn(J)JOmh<-hT9mXLwH>r_v8^(Lu2XVqYD= z?}8V3M>tlVK{Y*4EpStE^8#|Sf{3HKmcUN{)Uyal&bze}E#`|_A95+X3-@mf$4mQ* z-hL@~;<#i}t~-Uy$ZI)GN+)JL+qXD2B^wt5cV!cc^o$4)R9cY_vJ972ESMdBnDPe1 zO1!SP4{XMoseCj=D)F!JGt?`DA;Hj!TccLqfdcM4B^mDgwLXoRg61_}H)oBO*C1B- z1QH?!n6eSRHBysjvrO>i@ww(x&S>i&#Ot+`0QALbM$@C91W(k@4eJ5*iofW@RW<@8j47Rxi+#X&$=cR_MhhNPKZ1<@4@;@IDv+zB#|sSRZ_6km07qv zwoo|>YEac$c%hP19fwh`9qxgT6={ zZvHg+{0f98)Ol}lSY?3Ld*!J8X*2#l195|sK;Mfv57c*ysNbm_(Ai%WWau*)sxbi{ z!_=uCEgB2-hIM?F;aKK4`tZ(QbCLZoXP>jB)g=@H+lE~#bO9y=SEQ~%x*XZBH;Uk*%UK(E^bN@3CoB{$ z&L{&EzIluKF(e9d8rKo5&oj0?dL2E!O-%WD$Kqmx@%frM*F=6Jze5KSPGWanc@(Zm zJAs&%k|wQ(id-WzW5Ou@C3c~iLSKZBt4UW>E&IOby(87gnhhdDXDTSZUl>`4GeBR8 zmPu#w(SgDAW2LfP!aZzBUw2h9S=`REXTAU7u6InaXJcQE$$5olL`4EKZkJ~Z1W8J4 zXDW^bL3oVFq3L&PQ_MClD&9z_{*v_aM7e9b=y|V566`trC{2yogW;ook?VL0C4yhT z&CdGzXq0t#XJ(wlKl`2$WXZWT$Z|gHL0dj}NJsGp)FUr-9!#ArS-l3NkvQmjq@ml@ zuWkov#@&@pAdB+k_f((dd>N7Rvp)3cKPi)c(nkL+F(CANmOMm3FjA3jshm_7Ycj6W z`{up%G-d=W&PiZIMBkWQ_-F-@fk@l7a;8ao+V@B}T4qRh>7?g7-t8S7Q8`u#Au}0ois> zzBewsl_>$gIO$!D=vO0)_s(9E_+D*nv<_e_pvj0HL?49nAz&AXU=A`bk&V0coO*gF z%qzhY)(29~C13lxkL0E*R_iK9Jn_$_b^<5C?1!A+Kgz?~f@eY!K5Z&_7ym*(7cdj_ zDD8Kf;c)Z2_8<#zp3#NO7KUP5G|1uvqqqeqhX+EuapFTG`hrJO;3Y4AHFHkm7NbJ{ z{`&%>XP-fJS5ae-7r?B-2h7W>z)`sJau<>}5a@Y}<*RQ@0$$(SSiC!?Ee-chB9Z@? z_eUYFOWL|_HTo)WL8=wa8u1l4bBSR@sS2}%o%leRO#1;j^LXjlD`2&&w=R_7&&^kT z{1nO-41#3WS;30&)$E&dq@U)Dj3AX{#A%W^{0>=+QMoWIcKXT3mtS4@ir9qQy_@4* zomoVs@*&w8`xq?E3Vvn`>AV4sX~^S|0z<9|UjO~Q4t*j%qdg)`%U8WwUfR=AyT?xf znu@Pi=|Cnzxaw1R*Yav9i6mT)VgQ%jBRkzohlaK+88YYC&KLb}?7e4HQ(?R39RvjF zD!oMkMX5>=sR5NHLPQhfYJg%TIf9i34s)6 zKXYc*JLjx(=3VbuYu+_$=J^7PDs3GZi5N$diGfvT_IwRDFY0C3p*1FAtd9WxY zSu8Y6m3qy|-6v2!k!4RfuNer?64=Iu8IdiDsq(nh8lg-F{+C z@VQ}Oxr_99nb)_z7Mv8^7G~}D?g5Zj*M7nBQB_%+Ys9KK$Ywjl9h}%GMQIFO9e0p5 zc+2vNC1{G{&}}I=eaB_Dq*L+&NJb8 zV~);}KFJIDzwcExYTPM2IrNcj>4U&NkQDgF!&m_vn}jk!HUgvkk5&5u*Y(O%6>so` zQ!F$o|B};$sGD`T&z-h~UhS$0o9}gZ4An=6SYU3^AKps+wtt-7zPR7IpvEK+dawzU z71fJ?@?s5u3iJ9$dC?hmSPmiI+DFq1{-wOgR?YZ<5uzBDdg2*Xq!d`oNV9G}zL4ml z<)}ASdTXfq+6N-2xBGHxrsY7GJP~b1|A&fRsE4?70{~N_V(rK!XvvIny>d0`Cyx8_ z@%!v^!Hm>j-Y6utBda?SVrJ-K2*B!y+y z_|CD!G=0$FUr-n7_%=qI@iUF4K0d9q{0%2Haz0J!o@>(L?K178@2yl<%rAOjHFi=6 z2!20kM5?1A8f$^+;xY}zKo^4c*e#O=X6^tUBl#ti5W;gUtT6fik55Neeye>Zh2Q&CSP{-kQ- zbYJpfRRk_oA1uQ7DXBoQC(NGmIDl{^o*L6Nm!5dbBDnK!IqEfU&UHvZ6mHI{?HG_S~TX+ zZS_bsOx-72c+8Xq>B$v>x2#E{d1=YXbQ!OUXXK+rKvC}j^2qW%-K71&tWega_q%q} zQ{TUJ=qOn(1Zr{>2Cz$O@`LF1rY%2f?nz;+QyLTKLUp7|P zAD)d<;Yv0YXPzAmN0jK7Z1QhEAa*)Q;{*V;nuMN~De0P*1n>1qNpT7)KSkd7=cB9l zm{YVKgdN(anGUMx%gWTH15?j*ssn035QzERfXd>QCsFiZ2fx8^ucN2y3jGCn-DV5_ zpBQ5@twGpPZYXhD&`7iS)43#BY5lQpVRZQAi`2y@nzx^RZ&hE-tpdj)@O+vRdokgw{5pE0!gypwMxuCS5$a^@4@SIe?do9iqBBhxCnI={vBDHqP&2O z9S@e2N^frr8Bq_Dg&y~q^HoxNx`h7GWq0U6-1|*sz>Lq(CE5=QjfI@oz&3^g1Ih4-QMVQ%I3C@stJo@u@Y_lgsr=b|=eUt{ zrJTt}-cWit%FS0|16=JE-E1B*KVWP~9E#btw;T<0u$bKXXlVH4j2lQ*u(fqn1$q+? zT(O6)3Q+U$f^;e>t=V^Ee{P{??xCkMCl~Bts`TM|Fuf>%Kyw=6otrc()U10YnvnZa z2-kRH;mLSrEtzbp@)r~Yl~S9*Zq^#YU*Bm~kx6Ybmg4JM2L_p5fbBqZb$X?am<#nH zFacFmH%rDK0qFQLqwi5PJPK)c#FaK>yqGooL$lDl?#sz*ke&im>UZK~aNVh5hR)^QEXU4yH`T`p`D@!O zKgrP=#fZ`i88UFlyak$wGa;#EB00vIhiW|@kF)LRv@%CX8#&)@<%)i&b(9S{Vq=`x zBWz&7$XRQQ493-~#dcqNQbYWebJ7$z#-C#2OH~D0;`eB#e?gBN+yMW)G>j|-MzZRH z9M^I3BA}12=T02$muOuNCc}&H6`$@u$*{FB&^7d=xGn6Y=zvLfD+G(w3VM2Xoyvet zWA4P(?9)E>SBK^ziEgs_q$z%;BI-RB$4q>t6v-C`*pq*X7 zEWpSAy?(3+O@2OC0A2t9^x^__QFaYfA9V2p-LdJO%*w;GhW;y~Oh%@wAc0Z%2(YO1 z&cb;+B)Le(>&O5v6z-zaa=vHtl`+``FC_Mh84Ke5kOT^=18~tY6c;qjbC@AYb0A*% z5JJf1bXc{Vx^?7i?l)eZwr+d-6w~j!IT2ZG;?@VWQ}5&($~I`wX{vP?uu)?aGmz zXON0aR6uiRL58#|n+$jPy8H%eGPnyRr~{ezjmrfiA)bxpHRYHXJTld{;)bH=HH(EM zd)C_#lTMa3M!TVeaEOwQ0YI?aGGky|0CB;{9bSjUCuy`cz7pbO{Xp{uPp9rM_7S%1jR55D6$fj28k<97C zpL@H=eKB9FzPY{edN~mJ5!Ds(l$jau4ygoI#6?JVBT)6H&LL)NR(hs-5iZ3J(`#4! zP0Ke95|@e^Z+9Go9>oOd)IB)fa}}Lk`jf%M`01!e&kgjxZbdxaLXQYTvDYGW7Ivad6pa}Tm!DU9gGkcoX!J?dk=OA=+A3Yj)dsgz z6Hja-o%RHJ!gb7?$~+qHZAX9cz{h-&>+oRRZ?b>;;mrlkWsufakyX`!(7zy>P6s*d zFDM^)fnFufw894DsVObH~o?>~}#tvF(qZN74qRpf3dGkr-0Y)54ySB)%FB&bZZ z3lvL2@hD}Pa6mQv^A~j4&g|+_`HUw)R&qrWZ5vUJLcYNAJ3}w{~Xgdrx+a`l-wpTivIAN6uA_g`oEN%Zll7$Splw!{%aPof?V zB`$D?l@fE%(fH9JN&VfNNlQ?pcxeSHI)a}Gh_L_B$dx64yM4JmG8ug1Paf5be#~Z& zkGk)lt%{Se4hjwgi8Dv9TY%8k^d>zS5AZ37&$RjE3>b#Ja+dGA+g&)7*RjrFAngsimlCe5f(I0>de zpnYtEGjHScl={2ruw>4($F9~c$D9E&X$Z59jYP4hkZ5gQU|8_k?Co{y91nKp&`O0K z=44ad3(S9Hf!+4;j2=Cep$BK{5IT9C#CAJru{O~}I@8^b^~UX)cbSGmPO>eCc_JIx zh0;`lfDUAXdx3zj`{MX4Zan&Ku`q6R0ab9vEz&R!uG~$GJ z&$DGZ;LZkZqvlE&Qa^!!A74Vyl{9f{82MA`rF+x;KA+Fs204G)&9ZQYL+J{7@}N5t z#>2P@7wT-xH2UyqLlCFI1&O(Q=J#xPFHJtGp#kXs*(by~hAcgmN&DUf^#3vea*gh~ z7Kob8;4q}>Q2K9EmO@Fg9gTW<1T-5wA3w7_Yc>4Ht3Lk`N1o9H&(CWyEW}{H=eShH z;B&`1ss`gH_yodtfzAQ&xkXuL3K{0zMJK|W4G_iWCMF&xtX%wU#6GAR1yDNMho+Pl zAZ=l+&tUBEU8=>fG%(WY;?E+KdQDf_cEK-d(oa5v(n4D4nU$;wb%6F@&NY$*#`4vI z7y-uoex-c(W&BI>SD3Gg&$)d9g>eIK>2dlyL|{JS=Zp-=HTR>Z)&UStPF60T?{~{_(TP0mWRJ>vv>0;-LZjuHky!6rhQJ;R^)|Y|Yldu~1&x z2ap)Du)FXaAl^lr&C>bC2%=!%zTv*}7L~*)a~yJDuG|r(cW{d;(G-Ht(A=|Am7;f1 z%e1U*+JTN>&PB@Q1u>WaT;ndI2Ul)6EQYP>(i;nu>u@gV3plZUff-7U0xaAQN%D+t zZ!>^wT!;qN&s-tk_9jfvhHUcX9to5q5%5??EXf*MykQ4?<2kx7|JGNjXrg%8TskWV z|M5cq<*Oj39M3$Rlpuap!i65E&*9M-k;4Zfid z0Fm2l_1Gx=oil1gbW*h<&)$PyQp1_;TYpwXgR4^=-irtr$d!r3NQ_VoM)z&)h`<@SLGhSz4C__Y9wMhZU5?LInQPA|!Zy~#KG@*_cN zi{&p!P{P=|PuFV^dyLWl7sQVUTPTHcOv1sAwWH_i@4JPzXx(?J7U|F_TR$cTcuZ+M z3^4RZvQi=l&=@_LS{&_Sxud)20Om$;rpjxCWJ#z>&Uyf^zatKfYP*hgN1a^V^T^6Q zwR39R`NEc)lZV$8_MTH+Kt3@a@sal<)(0x-p>?p8NAzuf?(idcXkO&cfZi_QJWI${ zpqPqt@NFUK$|p7-P;K|Ii`&YOO->hD4#s4dX82_lBUOd-R{9VaYF5}1zpgLyNTojT zX+2+$AKR;^GmYQ`u&|B;slRK8fD-cr%+#MRv}bMwlHI-cMBUscPsx$e2UYdKjudT% zrPu{c zGY|{$w4YU!m4z_KJOI(};0*KaC#vrc&;0fPvWcBHDqnroir(lsTZOm!kCbcAEBB;; zX&hs&qlgoPgjt^77NECh+}AzS=Pc-I|G>m z)q(k*NMR>Kg|5Za454titZc0Z>S6hvFkiAa9q=Fh@OgQ=+bk|9k$Z?`(@&c#`>?bp zw=TFRH_nc=I{}R_#AMy7w-Wz3fuFJ!;V0h9W>1Yz9X%cOK%)cj4bY)j&BIPneB1Fm zWXA-8Npq4lZZl{vEbq#7HmR&Q`Uy#%BT!3hL88?C@-iZ?g zPrWylW-*Mt39Wa?(Ml z3zm?hK$%)N(QLV3ZbS8Q$d-xTW(@F)+z__>CUb8t^fudMF7X~Zh9QT;=&n8|XUuOw z?+%|Mc5)~yJXy@X^f)Bv*0*A2&#z87Q8^ha5LTdWG6MOAjrn6X%j0gBQ#=Rbv#-eW zc=WUgQ}FqL%=<;*!#KbPp*HT?ivMjpWqvliVmRk% zr%U&Y9z(wfp-peVXwohcYjR_CR2QhFih=_=OiPuD8#G;ar3f)c;bJKC(xV#NA}Kgfg2-p1?L$L%wxWSGAB!gKlxBuTNgZ$@x|34C7fg>OR zX4Rt9EI?miIgvusaE;ERq8J~gWq5_mh>zWAxtDz56FPIaMfK;o-MsiHf^Sbb7}$b? z39zjxiE{~)hGb5A)P)QVi$`&sexSp+k32R#FaaGm(zSK%Tp>!SElKUysmEI7f3l7# z>`zF%wEWYBETQn;B5AY&$p5+*G-KlFc0bRVtK$k=%Ifk7W+y{}wxrV4BG?Axr4f0T zru3=JHjCV$;CAQ~^8#;c3+o>!3uR`*WLV@!WVe}DXnlcG?}e)Fd6f`t|MUS6vKHBW z6x+S!I}eVp@lDpK<1TlM3DdS{sg4|8#!uYnc=oC@uIi~z>!aMvW&pOG6<9>OO;1Ih zqp8+l%p5{KH5pky%1B-YrS>N`1PtMK*dGeu8nYRyD z#NCpTIH^aX;RDg;1!?}b=&u=KG#8RyF`9y&EB`?REYdEwADpyxP_Q}GbJ_1$0WA%^ zootx`QDP1P?dWkb+EBuIl(l?3C92&fNBmc{gN0a&u>%I5Y07nn%{BQ>Q17c|?;*?g zPhq!EZC1^u-g7&6HZl^oqe?cHTS9-vs{|Pa`)sAOnLov{|A9>jky9xV^K@B)H|}LM zlxgkgwMKTSr=7FbO^a9G!TtDDqrGjpf;yY8~P}Fj*Rv?|6S1>&>AUb&CdcSGK z^~>j4S)`fX=g2RnL_=z2yP=VGXMQz{Ei`SZnp(ZC%n|lIo1l}cC~JHoeW*VkfQ4;^ z008C81bWH>Ox$t($kZkHYqGHS!&i|UStgbOM15($tI|^8I!H_>{Y?!PkD9aTn3nIx za{e*f5ugY;WV?FH&GhbH&{GSfK;ZGLg=a@up=1c>ikbadyi zVt^&2jL)#K)42~dqyANwUGeAR$ct$v!i#`dHV;rg+q`&&PM)n4%p;i*U>y{UB;w}R zn!UWe^xh_0!P{|Sf=qoTTE^#ZZcB7~y{5bcV&rE)`ELUU{R zBYdY@1Ha$WFfCBPK38kaI7mNL;scb5eZtngp#W3wT^T|=YTf}*DD5!mR~9~pPAJ;A zCmTrds@*s@-wHuZkbr*?>L31?E*X?ZbD_YouJY4&-`rGD62-Gxd&T!@;F7oWpvfyi z51GMH;dxUZ8sZc6<|+iNr$xJtL!byl(TppVwfOD}%S1ZCplI^*&Cd&bO!orJB#UH5 z$q?clWxTR^WnEP*C3eZ)zPr*;_~)OIn!6yjD~!lecoc)<9Q7K!;QFXq7?i+U zt;8JDxfD(*z9oH^eo%m}S9diEzeoN(UUQ;so+45-)ywW063ELtYugH1N32z(sg6|H ztf1OqDUuM1P>DHe4$40Z4+?2LEyL<4QaOUK5CKcnUF?RVZ<35@{9y76QcQ~fXHUo} zblPy>r0j%3xkBNY{bMFl#^8vLT;<@oEMR+^x=Tvw^yQ{pu6bFA$=tBa?7sgo`aEhz z<;J(~BH!7zD;B=*qj@uBBW;pzxG!G2mm0&7+Qt&3z7FAlcq+%km}$Bt?nri0;9%4z z&nJ${_^W4M3(8l2dwVj`JCQ4oEn>~lL2bxizF)pNO0e?i$m zkJNd{4oHU8=hXj|R{tX}6F|yfUf-E8CI|o2lXZkQ5qOizd;(F&;gTa;>F(sztaPh- z{Et_x;$Pc$3wBNwj-|U|UFl&E7UljvIti8Sfrd(S-h#t#m&1_les40O}K*znu zi#KD$Lm0QKXBkExc{zXS2~e6kC9jM$pLLt3&J(;1YVm7Xmh>E3Q3^y0$K6+$2+_3v@r#CTU>m{oJC>CkIrUG1h&mpRFpLaId{{?Q6B2Lt=mv z-Z1=<-rRDyZVH3L>99nr80txl`awZAzc%r*5uYkl*mh*>KHP z5zRfhe_?(A;};d!Ms;vCeRGmf-BpNAF1$19x zFlT1$+{ykg%gcSr711mgjvqUlBP;jOk6)Z;te55p6z|W|;O=b6v_~j(8`HEv>1NEN z7`0tE!)cl^{+o)+{`DV^h5XM(M*i`gxm$=*ZV2lr@6r%gf{b^#Uta(ZuY}=sLr^eE zh@lCeT^MiiD2H#@Gp0wkyrT1mu{mB&mRzUDLcOPUO+xBpXq^UrkPf1@=ZFikrL zctX!cXw?jUnuDBnga@pz-BZ#VJh|}UZd%^Le@*BOx-GPDCjc6#2!WS!A$IE|!CNj& zYmeZt7__I<<0U4ht?9p|aH#-2dI|ku+sC!JK9fMO$q9MTEA#ELYmn@@IGr@;^W^`S zzbF5%)De!%Fn#2Axe+KSjh}V--F$70xc`@aZLll{+tV$5Fyw#IbOzaAkvQ0%A$Ifa zDwb;3d>j)_M`z^a&iz*6Fz4;?7Sxn}6k{YAbT_#NAFhY`C$Q;%dtlT5ZUCwOE3c;_ zWqzkqF?8NHK>=Yp-?aR7?8(IISD?OiBM}KGSD~K)BXAH`S^o>HXZ=ZL{ z%7k&cd}ylF^R+Suj%}dPS)xb;irpt*jH&-N#jTE`Tl&5LQ*Huob$G~p1$I3FaR%r> z*!%_6{`YBc?!dpGyY};Jj8j;8Z3@K;eUv}T4k2a$ijOY zh;A^x)V1@{&Y`H@|7{W+2irHq@S*1Af$FLI|H6y;$w`Hoak9nE&9-ZYyk0t&&_3bp z^Mm)@s7)&38YLQyxI=O|h|@7e;Eu`{j_vXZSn9XuUzoqk0|E~=^!@W?{O5-J&o%I$ zUjy`~zyRqDnk0ajNbdntBmlk5_t#8^B8JEYpsSIO>m~Q0w69b`wKcel|p$2ZQD5#(eeKaiWo=H;`G6( zuWdGRX3BHOk$1cS&Yke6es;L-x`PWRMV)t5jAIG;K8N} z=3-i`HivnxTmpXLN<7m)nD(~*-|~%re*d4()&BYH{?C4PsGIj_wSI3x9>)MFa82Te;=aA*U{c*#Q<#XJGDTQw7-x3 z^xyjwM2Y*&tMW0)KC3W!$<#gH*Ihhm-q z#sGKT1nNGX#xC?%UFYOI^qzc=DqYn>ykVqMGUi)Cy8xWWFhZLErQF!@!3G`W+lj?F zy^N|iq;^iML||pU41%7h&uU@`NYh3 zZpNGPy^Da(S@Y^C&~am?Ru2DYXSx~@8?S~Ig(G_&{M^YOtuCFQO(;E*_2Qa~F;Rj)Y~*CEHO78UE>Y0sQa}%D(E2TUhw97T4(ranE>wk)FwB;%4Go-fNBE+Vb4lU z3RTbt^(P(}=`x z=0X7*iOe7BSyDKGMX$n*d(F7{sK*7zUJ9lEU`+*0=YbWd+Ipfq| zsg&lNeTmml@BY=bOsC&C33a)NU~9;!Bw7w$BJi~zCDwdH(zW^E_aTIAOpzuU6N+BY zyitJVwGHj8-RJl5YE#hKHcw}V=){jV3kQQi7`vx9YJbXGnR~Xv(!RG%xD%b96EGBd z1khtb#moxPG)Zx^r}O(H)|HrT7D1sCsHewzUc8eDxpU^>&5MT-YY(uStW-&g_Ciq% z?GX?azC5)qgb^k73wI|JW}bFv>{@Q{jtUX;6R_g?@thP@Q2lu+^qg>i-w-NRCTFHCEhWM4mMPfVaz z?OnQhKI2dN^K5iuua>Cgw392n zCm$Z)LW`2#E3-+4Qcu$^VkyANVwHq3ds>x`jmOs!!}8VTs*JpC3tsU|rDjx4U9E_} zLM}OF-)$Z;3F&>Gv9tL;pX?7^{l|%&my=|yw@QwBy!LN+|pK4QI7OJcF3g7ix zvG^DrioBuyfXeKnMbYJ0&jCP_E(1t)9#5<5-W22@6T>p4eiW8+ z&H3-<=ArE)_)ISN2Wlt(M1v6mMdzg4?)?FZ|7e%nqF>0_FqZQnPncri#eH)f8^(O&DPOEczr9f4qphWjn$3 zo2e?xt0$LZ0&HJq$S}*ie_XETay+Z+S&I!6*6|~#DjVe@yBmfohrV}5*Fk)hCjt0R z?B)QmZaz2WSs0TI!RM1tmR)xxnfjJf#y=XE1Gt!UBdxNV@8J!7^vl)8fY;WwL0Ds- z_Nt}C+r-4$uPGWT+Aks?y?;3#Qk6XZf|$y;5LQ61 z??ANWx1H}~`b{D^dC7V7ZRh7(TX=o_xS_YgVu!M4Y;Z76U=9yEX-^&@!V=2#_~Ecl zfEQz1(EiQ%NvmssxybsLlv3$e_QZANy)pWvYu*|~4kY$j)k z=CDazYp$f8EF5=(68911gI{~@IluyWQeV5fwAX(64dA-WAY?Z8*6ao`us@Q$G>hc} zv>}Zv%h3Wysw8GW%9e$7f(e^Ck$imlC`Vxd^Ph*GCF$Z-KTkNbW-j(9C=AqJ{qA#( z_?89747@me^i%{l@wze5Ed?o3UCTI00&klqX7OqnEnil+b7S|^l7oixWf?wQKb3%+ za$yo#1!3T&jn#n=m};y8{mwcTLV1QTH4LN9?@Y$drEFpW+7(ilp0}lr;)f@6vCE9m zE`G8gzPbGc8Dx4|@Scm(kNLY_Zx`-D<7U4B15m!nuqw$KQo@`-a`}8*^Oa$g2L)x7 zV_GNUDS11%_pA+j-&|?NnUmqq9iY>DFh_^25!^_z+Fwvezi&-lZc#B&;Qzo>OR|T0 zmL~QK2|@nM5hTjK^g(a_NwV6~dxm$8lW0E-8t!Yd{WXgC6&_F&i3E^ANhoLVMF0G3 zr!DOS0hYi}`K4pYY?LddwlWzojGTT2eDiE#ELKE1j)LPVtW~rQtwmRYS*qSbCq2>Ei3*U zXLx^VqOdwG7$`qv|F*0mC$*$i&Vg%ZHz6U^3)5?&n5=T}DY(2{YJPP~#xW>MUNC#% z)NZYfLPh=H_@U8pq%C@wmvV8Xo0nq(p-5zFlVG!p>U=&JPTpO&xiTnjuxMY+o_zO} zOu$n7iX6Y&m$G~Gw-{!|cPu+im7t90g^ugE00UlzEA|vG(|WjJNqAYuVy4thHvP?^ zq#lkU5uM69%psb8GZ(c18?6g9xQaJ-sF?l>f?{tV5x-#10pqMpBp(7wf8(R4iD0Q2 zQJ=*Uv9VtXJd!w$b!gT1iO zU*4b7_q{t+yl!)j%Lal0RmzPH}rw+G#4pxn5&5e67Uq!}tQ7eE4{g%=( z6q|dRaryo#>NM@Xj>NocU8Wnx>&@1Sv@fhuswNypV(AUB+J2Wz)DOU$lSEarHoc_T zJ4EA!j%vkP`Da@Qo_4kZ_P}tt_}PhI@zmcB_%MC$~ZI&<#o0R_U0`pXc@=1+r!VcxfO51seImfcOt@fT%dbTPF%HcB?D0yLd6xmk% zcoK<8$4Le$HHNNm_VOCrlQHe|B4=?n-YL5*`jBT@zT~#gvpjG$R&eV;2^0K#a9wSE z5az-##kNdAm3q4V*lh4_$x`K!z1XT-*|G^bkLKw{Q-+xr6(15Y>0ca%^osp%rk_=@ z5V2POlPaX#E9Z1pB|o2o zb>HzSTDLmia7y+3nOfJqEWa~f9yh75L#}pdkY|X%BV|SY5Q=!qMZ-~dgwD!H7o(nLo| z^Cpc8rQ{aeA&cgRyP36jf_D0gDTgHLX3~Ox<056=W`SEDMV`^{hB#(fF(8 z9MjQu?x<==2R$q2H0kc`+ArjVrQ~4CB@1KX4p{oR)?UBppA^bPH0>?AjrV8^7!v%v zToJVRbvMBJy$e6%0EOL^g_gA$%$!QhrYRnHA{{JY_6VVRdRp@dVy^xe@`4BQ9O)og z9jdvb7Ir>3Sy2;sZ*?*JlL?Z#J@W3Td==E7qtG7ty@W+mKElVEZ) z5go4sAHTmyhSg|w!Yy(UH!xeRu^ARZJRsLb%?rIamu{J2pE+YLu|1{qY9M#NjLoF4HkB?!efo0C+#Jy@Q4 zW|4*NT+944%6H{lr(6TeCFqC9)XYV?d!MVKp zILu<@mE(&~#KE@>K#|8`9Vqd2EVoX`M@rF+hP08p!)WQo7?UYBx!=V=mK}39c`g-J zfF<6C9!I~lpFdtxgfD9x%s z7cQOfaCt`8fG#3o00%@*j-HEkMNibVW5h=o8XnJQJ5evS#_F4Lp}#5$W8~EaPuxzw zzI&W2@9mq)JNlL*Y~<*Fgc#_yS$5=42#5E+I_2rP{l<+P@y54{8Hzs$7juE?^%?QUz34e99&0gcUhGyvKAS=We-*^+dw z{k7?qcIJ-8NuTpqj6FoHYHXf=S$~?NXG_mh--(fwqQsqBX;yr9C}ZKGt0C1WksX48)zLK#!fB!rO+F zB`U{lJu&~SkySUM_KulVMXKfpsdn7?cNx>!`fcL`M%!$a>OJwTI{WS&2EqF0;+e{(3=gplJ^7Bso~IDmPVG#1?Q{Zmti(Gc6sZx z!XBriuHaT3frp%d9KiCR+~}(FuQA7nJ7lixP8)B;tWQJ3Uc3S;3THy~Z^3M9(dAd@ zR%8p(ax7KPp5{F2G*U*B4pgwj7dZGd)}PWe3^Zh6{jT}DFRXMMO_9r3jw;%its20^ zmjMQ_s@wye*`Jb11u_Yv>Uo)JXJ5xS|7QB#oKsL9%9hgnh$x67a}#H3$|zzFnkm|6 z>!?DpkLvwH1zr6mSEwdVvA>}^P&Vw%?%<@0ccG4<&*d3S#w!8oO$9te?*m^38!VMl zU>FGD59HwXkz4+b2Un;*EtW9pf)g&P@tTXRBY zCadNMeDWXJ`xWHC9?gVaR*j7jr5E%9QAv7Fg;8QJHNn+aGx!)s%*C&K28Z49Gc+rz z1YB&vW~=23O@Z50Mv9*F2Z&MXVx#l~y)bSsn*}Nyr-ppoQu8wjgGPaq(%pAs zt&Q&7PMnie4L1liy>=Pz)BA_f7+*lX{eFoofZy=lfLbk-$nT3S;95}=I{=FLMI~k9 z`k3$W8ZOu*Lu?rBd(NKSxbGkUoAV7ZRPPk(mn(NVdv7)z_06|!h?CJ@2a{wdOn4zL z4WCc5sr~uKR^o;rVXig0xz0%GzH?^kJp)i;l$GEoA>Fi%l~8-!(eFCJ>h-N6hkHA# zjYk!$G%C6X5D)JFf!92HK zr5WtAjJs{g5>h6cx*R!&-6*Pa^w2hpbUdJj*{?wBRLRtKU(tSD)7f#BoLmy3V}oYk zXRC}md|#lx4YfmsDA11FNk=K1`NvUTz3HbKxtQ;Le?c;7DoPLBmY7G1_{}JHGRI%r z%pL_xDTdzf3GIe%*AW`Q8~~mZ#*1?L3yOk(^gte90hD`#x`f@vgJeww9o5f2NbgPF zEhL6KN#1=e_U5gC&{e&nJR)kdpL&UbN3xQR(N0y3W595nal(M0)~C*IJF;iFie*OR zjXDLU#bT@?jrBb}+IoE!8Xb;tn;Y4D%N*E;s9!+WpyuAgs-Te!RfHXBCkA<*;$7pP zH?ia`x=Wa7^Q$|i(HnC^CfVqOREu&OmIv~9hnMCAW>+7OeL#Z6Z>wMV>K$0IeRf1~ zd$O;*&|9EglcUqPA@y5F=0>bn{e_Le3JetmTX`IU!-i=}k2{kF~lh_Cz8+|O4foIjCJNEe%8jT^r?8{^%vTP$@6L2@w8g>Xl}~v?#o%w zUl0zH{uflhtzc+j=Qu83CVkMPv4I=CyI)d_8Akb&vbG$6LjPQF_;#}zmKEV!0w3lq ztk){=1SWwdZy|3#u@h`{~HQBvDaNBbDgiyt8No+l%-*m=F898?f z{+J2aW)a}BaW!CD5iU*A*b&xCime(_TJjTADvV2bP1yJ<^~bq zDbV=EI%m16hmK3bh4g=ZGW9-f-Quf#JBhF-vxlHBc%&BK#e8nRcP)XBw9ZzdHrGgI z_C!?jvlKpf$GvpR)I|rC&qDHd9JCXaL~II1Y{t}oPWkjnaqHb%Zi2gN$S1Cv zygz<5KTNGpKoHC^s&C@MH&i_vR5@Ikb6a7G1KChruI zzZKvAumb;8hG&z{7{u~Cn@z|SM+nUgJPs}OR<;{0sH)HI8asdY$zq<13)_0pnq#2j zEEPCfdhs-%jq`O8GG5owb+cNE?2UB0B4@!bcT*b(W284Bak)UevKc{q+Qm6PD?+m) zAtTDwF8V3@D1CHVYB*~z|Ja75cn4qqk06|QOG4I>f_e&65>R}PC~==#%VsCP^>U4v zSG#0t&bL=brA&XjcreHsfFjx`A8JiNHXQ)%&ad>bzaWYXtdra38oj_*M^RuDJAvQM z(1v>CP9Of9Uq}bfFh5`UwUM3ZD5Y$#KH!`27j)yB@k=ml(VKoawlSH5=JN}z;y>sSl<}XJ7Q-YV+ zRI%c?eo)mZrF10wV$TUHnkN5|VT*W;S$T9*n!R!GPa3h<+bP-W%N-BIOWQF=hflRY zu+8>>XY3$_b{b1|12Bo#;8lc0NtvJTI-eV*t7FMBX^zwO!h|%laN$FX7iq=d8F8nN z%k?REF++M*Gc%EDN0f~$ukrRGRHW$enGxO==57Y7l(qRdCEaM!vur;0xEs__xj3pP z=TYv`H;fFUYmvcU1gr7|PRGBXTND@N@Mdj#)cHz*DVWAog%5&|zy#YL z*8A=2+mwvGNlr-se**)(nyR^;j-i)GrAiEO`^|Xf-nt;(Ve7}i^QF$r^?qN`-ivox zc7o)qnEV@zrF9Fml2$+Yw*1*0!F^km->^90bzyd~>2PChIyWGA z4tHHm?j8G}ri>jWLE*e;+j}447Q-Ek_)ibrq&5Mt380q0IY4zmoFggDw$kNoh{lP3 z?)_F&*KR0G58-k;Z7ef#G1-WIHrhEo?1IdK~?n1 zhox?Ib?RR`J$UBoc|Anl0d!!aBzY(` zPv_95J#XLt{I2YS{GHMA>t_6N=^+7q;o(0@m@j>2S@?){pjTmdX_A!dX!zr)d7%{4 zyhd$HRhqf6XmrbJZJ-?A;j5A_%30@lrF|dj1E|Aqfji+jN|YAmSenS3gO>?ul~j72 zplf}!Y*dT6t`K)MG3*n0`&B8I(HrK(XT_+w!rUt5NFbvzqJ(}#s1W--xGU_wOO63~ zzIi7jpzxtcVF2$y;xRV$zQSoOjhQ>OA7DU5cqWXys9$vKakZrlE`Ql;X9T8H)cMS2 zP3R>S*t{pJ$jU^XD2*O?V2UJV);8gXmPLxcjF;qPY~TH**u^{7cG7ND_TF1(yDbfl}JWI~0ul}qD)M;M0c=Nz= zx+0f2bE8eOzWjYH)@tutJavI_qKhhz(4gn*i6KmyNfj@$lZ%U>;-X=jS-2}3UKk+~r8(+iOur)tgm}I7{FZKSyyzOfp zeZCgz#)TS)Thlkxc{C*u+jsQVDF3zQkpsG6iUjB;D-Y3z&rw^dM0du}UyyjS&75Il z=#;n8JhK1kd5vC{m)~yKi~CHh^MFLy1eOI7Wr_sOjm}v5r6&LyhO+SgylV5`SG*Q` zd%I#9WAJzpC8hKJ;(nc!$4*_BnM#;MvB`1AM{bv)$loaHkrPyS%;FL1mo4 zE))LsyQ%COmA9Awf)sx7Ts}y70*;4#v)LR{ZdVq9r_bAT%hOSvTHJ|Q9j2I;+KiRE zXRb)`b)DCwE}Ze-a0D7UtV)!;ayXS-Owvma3p_iFQ0x7?HXfRi#kc#b(62>9yHaNV z%!N()C9S2Eqb`jLq0RkJrJ$jcK>6i9u1#=Kefc8CQtln8f%od5SAR2zywSj1-KvZEN< z19WTq8}+W_V{bHjC*!<(TT6;U_^81IsnXfq_z);HsA&-z@mK#1qckTv<#)mh8*0ADt0#q7CR#^WpAI5#jW_!#y~}=TjZXzwYBustD4=n zN=Uw^2%N#5Ai5$ghW%&cS@8&Uc?rKZBLXp-V)pTqv- ztdOJ2XsLp)Ou&=d_wJUt?Ob}4y1U<#jN7v5feO=(ji4S6#oE;+&^RkRXE`cFJE&p? z)eV77HHy9$V?z^O%X+f0snp2?uIrtpzrngdm}p3nMkgxHZu9^^nhVXpYl3tO;ZXf*0HhGC7Aefoqc-P)YI>-?Id^Z{^}&K-%_|p!Ha0-40;0cAN5$pV z2*n|V;gMuBZu#~*-|^!G?x5h8mrk+=A7eIq)p2G%z|TLD@czHB_vZ0X|Nq{wRHVc=REFnU-!B0$91kpfAsJ$kJ8M?`~6y;&)4hu{Fqxk3?1}h8u@r!_Qmw$G-_wz zg{Py^4lVGrjQ@m?tjZ>9=LgmS92~Bk(d=}N*^+7-ODxMGj%(<78$K^PSOIxy)XsE4 z3j8tZL*R!FNMT2~O7)PgaUPUsfRPRCeN>}=ZreHhjHvYu&fpX@h*vtbz9Z(N4WY`l zgI$K1+y-C48KUpAq77a=Rk>s3J{XZ?2b-~-dW{SrC?uz6qYSn$#>#F2-6pbpvsLjg zY-N8o8AW+nk7=wLJFTTUaMFFN@yYdMvuoG}nN8VGxaX_I*r44D#ErV9(~JO!3J0x6 z+OcvDxMY>{K(5@TNh79mgvYC}e`zC{NK2hlPmkj@{dHmroy#8nr>{?lg zC<X#zniguAE{aD#m4tPJ_eSjm`t3CHJ`RlUM7 z66fVc^S&CNKVjQj0sgM+P^#y}Xv97NicJW0k`bM2?yV73ZKgU>HSagQ5NS6ldYZal zQz0VSVCS3K-J5N%ydsb4q0lgp7iHp&8Md2y6Z@_In8y1o_K&Sw*)0_&JMlM*l;k{? zb_R{zso28aU;EcDKGzfb9}Vk&*G@^mRK4$17b8vsd~n+n!Zq$oLJ|TK5Ql?4z<7dq z?U}7(7ptKfbu>8v!N|9E8Bf2hjh@)e|BKyNOM?BNVICU|=mkv;?I;b{8H@7&+=YO*vQ1^8U9G@ zv%}PA7phs+)@F_orwaxK|87zM(Z$xygdrXNfGxo{yAmy6wQZaAP`u?7>-@!t&+w~M z!`%Bpg>4BTsziuM)M#0XDIecp4%@fa-cqNHhhKG_gJ;bP5EaQ%b4F?C70humh;lBy zx|T=|i<%&b&gb=<;#{A%Qe*M+E@hquIb9Vsx_0 z*k<2+RpdLVcjVRMx6evE=Xg4$?42%HHh_x5RVQ_nB?&#Xhb8KIhL)_9fAM~lYykE8 zuB~FsexdGM+>yl5J;k%OLG!1_jY0va%(*x&6@5*5_Wm?B8$;*=5F%7XQaceu$sDBH;VoI$^!R?zH8Ye4 zyh|ocp-U#DMpKb%S2^Bc@OMugewSkuS{5m)J*;;DX!M=b(9Xu$URCpy2F<1T#mARz zUpl_n&@h^~(#ZwS#bc+J2zv=|74Lb54gSjZN(RrqG8$b_T~hj{<&NrYxxaW?_UpR) zp*>7~x;5Fd1u1Ax{oGPtNKwanq!@GICh;hb`m~1?_gu7&CK~#6=24Pg*Tg@@_^kT$ zYZPAU3f5$F1L1y)q6A!?P`E+IRkHOwkE-vHcl%8|&>v zyBzeb%#pO&!JT*jBg*NCQZ?of(R18U=|W$_9o^iN^-m0^=wt5Haeg^X-YSl@usvyV z5i7sTotUFL!j$bLD_EYs-$r=r>JT+1&m+H}aOz?}XYq5-Lna*IDzAK?gSvLKPjXiTN?>z96e=xjVlb0gFCW< ztN~mdHQ=sqAG*`Qs!3>rPR`^`(>v?6x6T8=7H9Mr_Ocq6FM*ZVM|QYbS&w4!!i2Ie z)>fOR2Y|lD!Sf%p?}<)6 zx2NU064??2z6S_8wzF91%V^~4_c#>xfgBnf#tshbGOQ+IR}7xixvcb*;tHyE>&UFc zF7kW252FC?P^$mTb#T3q*)yyKkk5xM33^ZB;3$$d$^KHwO50?M@xktXn$`U+AFu^- zt`M^2jy;4)2XvmVR&&#NrHn{Vo+5+ z&!U>fRV8XP(eC^!R_)3DRge-mTdEB=bq5b_En}fZw>a?w0Ra*PzbYw|mNen{ahv|_ zFU#$2VeLg0kSwRa$hJlP{el=M(@6tXufv#q{1EKD>jm2ngwo4ucamzs4xYre zTC|bR{cN2R<)zGPhYE&2rnTrn_wVTFbqKR)vZQPFYtoTa4VoF;oPp|FCUM7kRk4+s zK;yj6*qkzHexMZl*l#9L_oo zkvlb*ht!K5fX|@NAt?zeu>wgXe(uMdVGcofFl)ibqP1z)m&Tzlt zhaV}0!eFPzJG90~dxd;&CCCYrN_uK;_RAczQyD@ zCY*7tW*d#& zA7(T=o)Sj=Yrd1GE`50OzuUGBcOiBz6TB6IW^Pc6y+Iz%*4 zxk35S4b$~#bQvjs&}4g3*<_#@B7lTi#-YybyxGBu1WoPP4H3MhCaf-bK6r9YkPyjp zKe6LQm&YDx5UpCS=cBPhzzvgjIr+{!^TTP8R- zSF^X#zIHDF+gI^=MyvI9*eEJ<3?~t4Nk9FW0;Rqn?csA82#~WuK0rwq;_I&Lo}PZt z*I@s1=Ehe0y0z3HN^w{3sY5@Na=d$)-Po-(OA+LRB?M5wT`0@@dsK*nZclXx!$T6V z)!YfrFRB>l*PrgJC_Ge}Z0}E!U9UaNBmRbPk7w}>DY&_;7Ydn@1$bU=vYm`;#*;&~Lk-*a`%6w^#mRyO^1yG_DnuGDi)O|P$hDFNP3-)B?h?d(#|&HK|mbs~H*{B`8V+Y(mXOf@2*2Kyp-SL8$iMcV0Q_mcbE zC%O+Dw1%N|U0E75X!v?1#$npbT-K_hs!jr#FA?}G(mV0wy+Cg#d733$ii`?Jdcb(s z>^CE;!xRA{W@p(+k6Lvr`GRjL^Z7}=ZxRx3Jf0H)$f_W~FfAAlibBYIAxlM8L$i7B zmxodI($P`(<4@_&zYf>8ViS9%&$o=_2LpvNK=V}1C|Z)Saaj(P!-@j8s^VzcLqCnR zi|!$3t`~d}{Q5L8#O9`CuMDr(2K&IkYy;xsoyMZEk7=)Wo$S?M2J0ZI{E=F^1eX1d z_kyLrxqye~l}0M-)i z;3@vK8+Cx@E{M2a^>rb(57PnjT$D|dQ{r@gm*!Nr;(!Dwp7ji}6eT0&m*vrwQ;zO6 zflAX54-K0yZG5@UOyo*tojDI93_ae-q-i;gk78595Huwl@7KW&)k6@~`mk~EJ-Q)j z(}0mq4+!&Hh~Hi)E3cXjlETOb_tV>Iw`CIPCEd8MgxE#tW3)+4rS`XYt2 zb>H)MzO{y+5s){x4f)Dn{d+Xr|NV8F zl|ABHKxhw3mHy5048jo0#9oFD(_Lvd={KkmBP-)$UHd+Px|7HeOQy!z2)pi zVBn1;{yFsrcNb^Ps{ zZ#t7+GUV^j$8ooEq>A=dZgc&YSzPE#2WZEI%PuZgUW$QQo6HD`L>ICH<;9P6RU|0r zGYx4`{*~s~2%e;*(5@#QI3}Fr==T_tcdGzu>Jn+kW z0c_?O{2A49UI)n)J6@=^jR9-X zV5-$&fq5ReN)P_=fSPTyXIq+q7X#vZl&>xmSXeG=erhlC6e>@eYAPG<9UdT!6ocyh z-qj|QEiD0UEBOZvLJ59^C7FU_zG^O6F}-cLfG`1E)RcJwgeCy!qTprrRoZY>we3ml zbcqq>*%gF1P4UI9;^mnY|FBK_4ALMUBPaqdMy#pk-;RAA|1K9qVhEQh_>)KB4 zgdA1sF8))aF`>zo7HAhcDwndf{$(1^_rwK|OjA5Iu_U-ucH^$g`llb!w(7V{Z!^of zY&C(ZG#h#kE@5B{Hbo;u6Aeg6yfh@*>3Ag>`C{{Y0#Tu)${~*S^6_+x_#102O{<{FfgGK!&cyoJ@E&mg&bO7p_+RT0kt| z*lX9HHVecso_R3!l1A6&ks!zo(nbscSMGM;SP~ErfSZ_t=iI%Ndpl6~SR%_2iPTM- ziv@nXH<{IRq!Bqk*$A5Z%n@0K@w6@Row=ZX zQ<^`JYog`Jp{o+%7KhfrUY1jYHYXiMiJq`RQlMzT9DsM%=kwl&IGiK@G^f1Gnd?dv zy!YtdQUCMh$q^7$`b~gZRHHu_#N8lUw#!>=-%P$?=IWMgXQ-SUULjd8mK>IKq0v62 zNK)Hph1LHTy?Zf9j@Iok7!3Lft`X?8Ov0V)if%L@IRN(9iH+wz*?qPctAAP_`Q0b= z^|Nvl!4G~e=hIAtElj?Zy+pdBrb2;>kktH{sDlrD?x`y~H{-P>e8kr`-~6G^w)FPs zZOIG-*vEnx8Pw@x7zA#`O&btwT9QtFjF<QOb}0(e%`Oq0bqlInvy=s-ec94vqkcC zDW<#TlAp?GpRSEBzRp@7u8CetTE9bv5(e4u1Q;nf zB?E8%4G_;WNWILK4Df*#^p~Ol0tW)=`sM-}^lKmM3Edv(vps585A{{ULgFmCN}Iep%u5 zB2vB1bMH5clc76N=59@;X;?on2eva%kDV*WZ5^Yk08Utnzgc#K?Ux&G&ou?&1L>zN zTS8!eRb^p$R&PsIeeAs%S(u%!Q+G7$w*C{@pDdQFLs&gMWdwkiVBOgKY#T%Iip1p| z|Kz7O>*`~(CeL!QBb`~5@J-yKl(E?j3Ez?T zIU18Wg4sG|@Zg<&cahe<)hfc6g%-Z87@YhTrB# zmC7|jas6e^!im^j)WjYEAkb)rK^h&(eG4mb0dl(+ECkjo5gXUSUSCEQvu}fif_m+M zjE}wp?9Vl6C)O7Ak81>)3!P6l7_E8FuJ`WO{>^LQP>HjG?~1mQElX0mVAQ&@*VwrfFrQc>l}r{IcEVVbL2>fd zOzDqe!f*4^O)nl9P0EBEsn95ZXAw51kKp$@K+(6Tyd9#-S@%d)7mo4EyLbvdJgM6> zlz+{*^U(gAh36LL!FtIh5GwL+^+;92bb`k1>Q`p4KzCU~Ifau3;zh?yc8`C|yj2uP zD(GoU$1c^TjQA^R2hhwv(x+jSp`R>rjlr@q*`aQ74Q$&_Z2T$xo7kU7w7pD+NE&MER{W z1}AOvsE3eWu^koKng%LgR-!QUQF;tnCLo6QfxGHw)>P3g)nhSxQfh=TfFscLJc{VPQ97VL9}|B57lF_;vN|KMsAOPt*-}T+H%*oBWNxH>7xYN|n)Q@{V_(W}}ktqg^DO`>w0^H_( zK!L#p6)CDoeF&9`LGOI!92c@c(YkxO&v?+BMH<@4XD%Jzd^7h9ngL`F2>lp2sRhCl zG>%8Mn_t{+#t798KCWbSib0?I%@UN-EuDB%`GXuJ_&F<5a0$dg2mMp>I^yt}1d3Pm z6An$s$-g(*ke@71VBRcVX<*@+_I)u{ttZEv0G-8Xy5*UWQHf>Mj#B4yI?v`-g! z$g8<6VIyrH{FP3vkDy*Iiw8cqE?S4#1*kgj;AOL@DnL6*qlAv`a@}bb+M^uXr5~R9 z1u38Yxt|=xDZpzq=cDrKP^mSp)4roDK979gCd;3?+4-p!VI^`uMtAVycTXCfaF!VF zZD%B-=4R??ArGwUo<^ofrF|W@4DMM27TRlng<*jJ|LQkOYB(v05yu0h;Cmf#ZpS^K zt`OA%JiGK=OM__lnX{wv@`msJ)&ur@746DVbH)&?Qr<1Ngnp)W20vFq!*}3mgsa>HBrLS!%($tPJ3R3PA#@z=MM;k^}&(<^wdLWY&#B87RFk z7})*t{E4GJsLk^4k(T0Yp|N8P-XBtiLJDx{W{?#7ecUy-0vYrs7Y^F7vW>|eO$0m` z4L>_lBPgw7{{P&?15=G&QphHWBwfz$Vcil;wSML}sC=`7Xh6v)$JYbx6N<;3d13Sy zc6e7_eeh$ov`RXMMBc*7TuF!TvI%v|`e-Co!iJvhh-1WMpbpg8d#T+tH@F*Bmb`{9 zi`E4ZKBHBxCv|A28oHPY%>f=~`-B2<|JL-(C zxj$Z!A8M0HsrFA&-`X-Kz8ExixjlK8MTeb;;bx9P_?U+$2At<0LQcz>@V=%Jd(BdG zn`lY-&BWNQx?3lj`y5^uOV?pTtbPr{ERE0%PgLt%UU7V|Kb_$f=1exD)HBd(NfDUK zshuD$PxzI&m8bpLMUYh?u8xQc_d#O82*3B0yka1k8kN)zMCf=q+@A48?=s!z2eupz zCB*eP7|WGXc=V6uE2oJS`Gu=;haVEI3_rByq+?g`*%JvF?e*Ea3u7RyfyuH@&;Pv< zgfbZ8C31m?-~(i3d_ZeX=N)ob$u-p^LdTR%3|%LfkzMNUi|)%Ff1R>#buyuP^fiO+ zLQS5UMg9|txeEKvjJ-vmEhjmy^S#d#H^^T9x4FGigk^MBIqIEF; zrHQDO%`<}7<$pRphQG+=v14 zP5IVDqtz*pmvZ4z5i;cU6e8C@ALlST@w3k*6n3GPtD`YW>w>?QwKc0)#J3BWIN-mY z%R^N?$@Uc_ftvuv|J0 z8#=(KH%1G{5bB5_(Nh)JK~F&Y#@dS*7#yuRw-JlK1_&iL7K% z96kkZ3_0roBRrP!Dwq3UdM!=1l9PRX%49O(D}irCR2)ccQHUS2GJ~b64Vy7GG49%D ze4U-$T@|?VzqBS|BiL_Oxo@e3?W_dM7BR**#=o8WxnJg4z4kaAmEHK3Qb_0hHQtKk z0%q}lU|FlO?KnSfd!>3y#JXg%-5jhB*V{JyrSL3xKk+yhTm@e?0V5c5{#b!B~|s# z-@uNI6`S6E*?R{jyBf`~CWCT>EVJ}&a&c4056sp#w@4cKFLy@P0bWFaEZ>s7*bsDnOyE!uyIqZrB5|w(>Bz=lcw7H7d z{K9rxPMP5~h=)$b2_(S{8BL;z74or+sHy4hlV>yz-V6r>D9#R8q7iY-SPBZ=Db9}}x>kaM*(myY8$DwLiJ3)z=LT(s!a>p-p zzHE$8r)-e?`Q#VhlqGoH!$pnO=eA_~=^TWCQ*;&bz33QS`Oo*4GZ*7FYa6SdDla?; z=jO~m&HhUNXgC{srDwD$KRs4K_E$Epue=9b|16RCk?DY7#UchFC+Mzos42qzv1%NL z$AMGyC+bX2@4dQ;WKV_b8Ac}bx|b6RA1w|Iu>Key1(WWAdF_K_DVfw0c;Q`n=lpNA z<#};mO;{7K(m;#x+!s6lm@#73 za43l@dEiDfb&zI2*JtGVp94@^JnKtv?Z(bTCWoEg-ynb9sqadhZYNF7`Pz16X1>q+ z&7!b~yw~fpjh(w^IeQOn1=-q?4$*spn;U3C&V52vjwc|1_|@{8g%^G(-;s)I8+IF< ztXTF|8~LQ$m9Ay2+NvWBcsTz^Y;?ZokxxR4q{@||2hW)yMD z%u}wd2vxbJ1xutpFgo;g!54Czeu+_zQHJyUos<5_rpM&y-!?sp=i{WLdhH0_XQd<} zJ5Bo@(H}4XLkR$1a3%~0;Gm@Gb3djkx{g(-v(285vA!}P;WhnEwCaX#)vDFUo$S5k ztOnVv9KY3jv;5QOw2Zm18Q^FY0@YzCb!7*1U@8v>n*O8PzzaQ80Az)v0`;QYXbWAM zQGk&Ew*4p#xm4M9w zf3XBFY|}jfJOHS{7~)YF>(bA7WQQUzVE0t88K>)91S|yyh3`7sZR!o25pKQk0iG=L zsr3`!u+cMi20wp{KLDszE#Lk-wd#MyQoIwHc8dPAg33xW0mPrCs&Xu%&!<|BxOBq5 zUUbB`4mvo4T-4@vtY0s6D?E}C4f=}uh^k#$=fh)TL8mTK%Sj(+LHxEs;b#jm!$bw~ z?ISNot%FP-R2Z!mKP%MgW{K$f76|&X+36|Oj1eP8HO%ePRo=U$Ck6X@mzaFfk$LB7 zQt?NK z8K?@lqYHmD+7M`KL{aaWP#rh1%0w6DdN|u~2rzOy$=7$uN532qay^F6O6>7ifdG`$d-WbmX2LPR;U&)xXIqcN1skyyhjk&93-4MFq z)$`8nq^-!(!Y6P~E=+e+9ywBRdO zx8=68_{M%|rxT}5X7ZBRT>Ld&2v-K!dB%QE<^t3G}`uT7T;^0m%RKf;9H%H!Lfd2Ao~G# zUp^F%B-#PPKm62SngP{kpfz2^Od&bt zfVBkoe75McSp_vMSQ1^&Hdt07xACi)xl?&rkPF$=^PcGVSc8&;OIH`H=}5%hA-4k>MNfa*@GO<4CIS2P>cWcVT10_Q9K5)dM4t zSip(6512)L1lOeUl33dgz>(#L9fA_z;PbVqA&0lGe1Dp3bY_DU;jq}oyboDX8@fb-Av+vS|ckV?E^>LcpThOXZ*Nsth!Y-d0f0!se7qBn4De0n#G&v zCoY1=f|+L!lUPAu9O`~hU`vi>-B6WbK#GnuTE2AXLYI8yKtj)9pJ!hMB?uDZ0(o!` za#ysTgd>$^N|vX*#nT#Myh_!~)OmEv#Jy5|KC$1+O8LuEFRgm~ii78!O$X1tv#TpZ zR@5TmBs!2b@B;unps?w1OP*{_xUgmI33$prxL4Z#gqzhT z3f{_7E6s9&T{`N#n4-xyLJQ{#QjaFchqfW4Biieo%EKPw*`zdXufDSAeI_Z9LfcNU zu<#w1y5ey@zloUXzBe|Fv|r}k%X4e;Lj4Q{prmyHasfica-Me%eW#lisz{fRf7*6) zOJj+6e2HP}h*h7NZg39d+Xd12ADxF4(nVwLn-qz@&mGTWk&l8dz(f$UU{S;cs{K-1 z{bsva_fA~?)>72i(AeOj#qyBBX)P;F8Hb~%PXa2b-856U5##;&!AIoHm)P38!7;;f z$d_q{;Pb6fzgg}GdG&YDCRcWg0{wC=_Z=C2l%_lUE0U?!r^KUKMc4%9-o6sCBG#Ec&4zl@HjuZ|6Kb)jyFJB99<+w zCbe@%GEULz}Gburv!!1XVOr+%HgAb-< zgTyLhAFfO^bqHS|F1Z@2{Oi&+#8;Bmp0$kQZWwY96IAP%)M|AaqHliV;e*MrrORFuh-bouP9ftehNAkF_5Tp8Rclnl z69bzM+U>E?YG{MDgR1lCIz)w4Gxr~t+YVhg)qKiCciVytNzm0N^xa*}ksS9|BuLaokdH({|@JX1=E7Kci&$ul6$>T_czZK}+*9jjw`iIuYkd-%qPA zB^i&pR@uO;#JyARXP?;+FC=GlC<@YzwpinI9m|5=UG){9^cSe%(k=bB16N``#m z!0+VEvA>UwzY`a=oPdlDs0{#?wvt}zDtQL9ls+7+HYJ{Zbcp3^Li3|T;wbw?xA)g; zZSFws_xk#(W(e?VrI;2x>R-1oI~^>M^XtQh*yH~hr|Q4*&-f2M$X}(UA2D_5zkay` zONzb{sW&=+CB<}!ziki=4TT%N*vpE;TJY7Rg7c+ouCJkQPiS8}LiNvE>D zG)A4(UF@-|2>Zb3F3@A0^2i9uDGK#20?fIq_B1k5sw&OJMJgN0CEui`n06Pxz9p*v z|K*fBf@Afhg9bXM%%jrqiUQCn=G#KTdVu}M0=4hz6OMVk#*d033C}h0b+MOb?4lk1 zdp!C_T>4+(>%Y|f|N9;N>%jOwGg|&vKG%QV`~T?{{pVTyzk3#Z|EN>`yMZI$J^<<+ z3jn~36cUaRYmGaw3x<^X{~NDf1^t@>B-RN96cksz!~twdQt*3Ds6y}#U$*r_%$D;B zN)QOtzLMg0c$1Qz_M7D@jGl=k<0@=x#l z2Q~PEm;6DB{-A1q@Wekz>K_dG4|@KGH~7Pt{9#P~FeZN(lRu2fAI9VlWAcYF`NNp} zVNCuoCVv={Ka9!$W{gSM@)kA=^?#Y1V*~e?4|dA{``3c|G%7p|HG2w!Z=e5knLU_o(zlV->PA5_fNn3bVVIy z&$5203=FKs141dcuyjB@Z2i)|{O-t)|Hr@ZZ<&1D1Qd{frQs1pKphuMW2XZ;Y~dA- z3@jy_l+Zt**iZ7$&+>iuWP?NiC$PW)P10NcLWAbd_kW(ppEK|uI|C4m6Cf6qTtQ<_ z0=tCOWzAEJE%F{cAp=Jl_|0O7X7Sy*{m=9FeEa*r6g{xto3c2UL_7Tyxl_D>y}Gu& z4G69NW|8b|0Z}9-{+5-RVSzvVAAS6eOD(WSEUA|M*pHhCUPtZNDIf+ZNSzJm#p$|` zrBY}_Sr8)*xlpOW2;V?b?01w8Zk5FrT70PYyie%7na_gP!rkT;vQQG^$_yVgNN|**6 z9k5ZbBj4&QFKM7P&XRr7L+>(KuTt-GfFQQQk4+r+G&eS3Q%uIR)4PQwQD-zM4#(;T z=A?oR$b}L9aoNtTQ~6OihSuSMqj_N22P}xSlM%;4m(;*kMeEsjhbtOPKMrleR%dP; zjA)IjXEsy>1i(hNgk-05xk)x{HCXO>a#y>f*QVj1qDV*K#LD1j$C+f*+rYytbGxDo zi7JzTB_N6^K)1y-d?jthRCj)G`H}x)2bHV_t`ztz@l?kP=YS|ZWh`D!q zMc?X0i0i#S3?1}KiUuF0JD{bac3=Y3L@tkjQ}(MGW8|<{_av5M>>`Ilyu{aR2b)LH ze3FlIVu`X?+02oSI|Wh#fu4@30lT{Fu@mIzNEn?PpJ1jxGH7+s>dcvCahH(C{fJF` zV*DXZo2ob61wPxT^Uiii@V0qP=(V1+| zAsdZGVVcUSP+{}~vOt_aL#H{Duj?SD+JLrFq0HWSgJgX3i`1vHzq0X`&vS%pNtnXV zL9Y0KB)nY})gJG_Exx|33f+rUpvdnZ+O$PgL6TsN!DNT~p>HAUAz|Os)dTkTA0?{G zHt$NDMqpYSdz#osFZ;R3TrTK?mOh!;ob9ztd)sy6Y-Y^eG&6{U1bPKWzG7fWg%mh4 z2Qmv2XYnKtN`3J}zRb$P867Rz+JH?Ub@N~O+`G2SCBVE{+YX{!?gDnMKSxl#=gXqU zGv#ML6Ogb+#CE zlF1!}Sejq#N`iZrIIUpLIi$M7JPX=IfBmw2)Lb0D;G@;D5ZFc2!&coIzSkG}*`cWq zQD>Gs;7Ei*5o5ZD*d6YdQ?6|<{bsZY&6%aO{{9m28S2_2CZcN1Q!UBY-o1-|oVi(@ z6oEad$7jD1fI78HL_khK914c*-A=WO*BC7e=CcNh#V1+hRElt!-Y~tPo>01hE}crW z{bXoZwL!5Sw-oQ7i+`A+#v37oT_ZCGcm=GmhMC8qrlkhQhou zQp92jP~u6gs~U$*`hR*mB2aS!M}xR2e_=?JO7GI9C=~K&$kX&E{AnL&1R z-wO@p@b&P!!>xZ|(`V4Xu9veb*JIm49S#DwB&Z3bjQP#h?2DelcI4ybfrQ0!nn_~6 zD!)>Xk+phH`qBu#~1==FsbfO@$S^l`tKJ zu8ct^BB%v)98lJrMHRsTL$h3$B9GfAh*jrKszP7K@3^`iGyd`7n;37uE)9P%Yt9y? z+BO$<=WcyfHuqHCnDf2#nF^N0yV6G=lXKD*M_WenL_HFurdAL3kvBIBVv#W$K3%_?pE8mXENB2*;Q^F|vz!mQecj&UdHopHmmF=h2X zP(K_n_gc5FE95l}rSbnVv2*Y`vgmX60gW@U+PC@cU%~qyMu!62rx?WjRFV6V3J$77 zf4@=U#M~~BJ=YNYqznl=dYR)I7hxCT?tFp%~2R8 z?uLdYA4P})>N_THO>Z}zo9vPx<--dlYzC24oM2AjR?K1M&#Vsi&mXwglfJ~kt3vO< zP+!9~8?qby%eV&-0xR}OfFK{9Tcq1NsJ;eOWbAt8?;G!YRx-nDoxYTJ@~4dp{BYZN zwx+$iVH0IgX9bqB>NC`-J(8#8q>6a2 z$=EA<0zQ7yr&=~Up9Qlfo;arw%{)z)rWQ#|8HelME?r?>oEU(5;xBzra`Zf!c1I{4 z5!`7p9J^4MF;;Z8`tf3g=S7A9%7St7EkRnpYGY_7f4vE^G_lW&-9h~Y<~UEz=;VMM z4|+K>!L1zRW%#+cCrL=DS*}F8EVr}=76oF1gYc$}SMWG~Xwqkns6^wTyrlK9tEe=| zfNPG=JMj@L3jsw1FFsp~4z0*e+jxdTSGC{N`z@{SdW{c43|cM$LaPMV)))*ob#%u! zkdf=6YUb}6SnHm0@tdIN`|y)jRA#@j6VNyOWVG+`W&T_#v{HLe$m%x`GK_rkn}y4G z4tX*tt{rk3O;=ZIK@=oq&weKPCt>ZMJ8$pV(bVa-;xN}ytR4zZJSPg~?i-a32f0cVl)H-raO%7TQpQMoI)Z%{ID+23j$9>z-Ec zp1f?=cuZbPz84FE&DCxnD2D;@3uW#Yxy3 z<4jg+SEr4DKuodQo{|BK(<_|c`qGJKcgw*_%dNE-e){o2=6SgInC|VslHRbE$G(auBu1@d%c@@mHtF-r=OBiFc%bg?kBBkmnsTGx&rY3Xo*g}QJ8zn&G zF7%Bll|WV}LQ&E4O@PM$YD%Cj2ZT*ixEWHA|HaYha%KBak>wlJ3($x*O6xv=g*} zuVs#mvSU-wLgj%nXGHk*B0icdjEfV>xb1@ObO4%zg-~_o`HGrn<*U}u*?tM@e`^sB z_ihnStX>5a>2$#`{J<0-PHfm1>|8yf=HTG&boxl78~$jKSp3}H@wz78c|_Vr<`3uQ zUzT>IWE_$*2%V>4bj=Z|HvtI56*s0>8r^IjF zn$4p5Hq}9{^Mx&7QE2x(n!7{qQnY>DF?mJUgO~Q^7nNCVz1ZJ*gn8R9+rS->BN>_? z+aOz&g)o+XdeaSVx;Lodyi_mSFs!Tix63rm_6O#?>1RV|VO9EKm7?6YVObXL&Ex7k zscS<`uz6goWdw*IzGSqSdRJ8O~{bNi_7I}y$Ry|e<(V>hqYiAxlO z+BIC^T*c2D`l?QCq(}Fu+El|esOIzBF+$PprcX<&UsffY>@MBu41Toj()?5q85n-z z{v69y&4G|DESvjfYD7n-LdLTp$tL0s|B&i+R`xBKloS7SPyZrSi{;A8%T6z>dkT?K zQ`Uqbze*nuI%SZ>=W{Xu6~sjDxoNG9#i6mSsh{RLMOjZ@aEL^5pxzJ`cgn6(<4BNs zSSy5Y;3GA)UG%(P9s8L2R7jh|m#(TK@@=n=9NT00)bOQlNv*zjO)qrvl8*XJ^*BA= zNjY<|8mC-eu?$}^48c7|a4!dna;J9AYL6}bXp|dPYkFtx9o>L^<$B?=J`1O)$rbLa zD)!?zRyYqK={OY7H!}CNu4@{6L^Iq-Dm4lZh<;bE`aqFIREw_JErO|fpN|eGO&gus z$k_Gn6}+Lm7+4X|RAo6rT9uu`oPu)=V#Mi6WQ~{pTuz>%OE>DS(+rdunVQeg;`Kzi zcIl@qZBmD8b=645^IaVYDtF3BtS@(K$d2(B{c6YZV$Rp!x+;0N^zP}ai!p+Ne12O~ zyW)aIvs?8xHi)=7-mcpbDS>;AIhl%gmNJJ({aO6gcyn3H?CggP4Y90l-#Gc+NsEhZ zM>x&r(Iu(IpqK|FuW~%Y1Hz{pK4#X-mgjgy!L;kOhV+v*c-^<7d*>RN+s(B|E`-Kp zkPpQ$2YSwa^7^;S5(XEP)pcALcQxNhiHW@k2KX9k32$0o|~DFOi!at~U%oJ1&m z?)RG|3e2kpIl1C{|EHaOiJ?TJi~Gst(Zn0YiTRY$<4sAFdH{ad#e??b0qN`;Hi_1@ z%SJgeC1NG7Ga4-KFl?#UCz0>#&k1XL|MtD;bD)BQ@_eVtm1$C8R*yH#+RPhf(EFZ) z<2RE_czoK>Cmr=Dw}R_B!GnpKY=7`1M*M!7A7Ad)@0_)T?Qxq{Ic*sscJ!wR{lCV{ z4P4!YF*$lE@=z{fTwjw?Rxop<<3{#(KfNs9{CEZl=D}nq$p)xN<@P|f8S=NA-M=7j zm{r;C@}q>s%@A%*3eDs#qOCVJmJm=VSj#aUiBL5s-<%WjqzmwlGQO%yXG5^D4UR1Y zYLhl{p}(;}L;u=LwZCbtK6Tk!do>kdkG)k{ie$*MRi-fTRxm0?8sUPobu|VPb?H0D z_^byzH%?%GA6yYmvk{C-rRO!IH!1$its^mTvE?4RvC=2`K&b4tLEFPc|J~}A-}2_b z`Rd8XL;8#vceqeY3L`IVoeUyt$|jEg;0{IO{hiTwXhT~zK{%l~jc|OOUhYZwH^N4? zZ^*4O!B4Ln)PfvzW7RVo-qO%G$sUXDKO3g9QgR)!{JFI(-_%t0Oc{5(P3mdK*V&Q1 z(*kpykis6w0(K6o)PrInW^Hf(WqJfw@ymtV(gZTGhb(%D8}JBu>D{*(>)HpD68j{O zthPI+N&z{7ais>K>Wv=p7ja8A-@kQJwFP{BF41IUP0T@NABStfTMY|g(Z0XROI~}Z zX;Z5^Y-F_K>i?@>kHiE;8jv&x+>5KBJ*T{)Y4wG?!&R2#(rp0+Ek!`L(;Bl__<_7u zeNgz$JkPu-Y$BY-Pv(s#AJL`U`7}7@*UGJl*dln-r0x!XjJ&X@;r>w$gS;dmH$s~ue zNOE$mI#v48CTN^4djj?tI9CC6R{javD~t}gR0w_OTKv?)CxZlfYk7jF%1!_O#syO z+wUtSs#8}#oFy0sa%KCvDUaH}15sU6kIt;y3($k`tzy;tR77DjVmgjVqSuQ5(&n@2 z(rfpUy^301X}kj&Xhw|FGKGM5%kY7^#4Uo)Y7hE&u3`NFn*3AY zuMLwt>0QlvQE|fG+AcWu)^$}J?z0wtd{}cuBsIDOgeXE<43_NVq`cF~kqG&CUDt=< z+E=YnHNrEuaS{}hPuIW7?a!pvM-fiz$>C{l%i4LCAtOIfZrfPt!1-!moc59N{mG8u zF2LCg<>Z+}xt`f0$V_NTu0}jj_dH>!ez^j!UHVaJ5s}1;(t5;Q(e(+OQI2#XY5=ev zpduJ1=elyaqccs1mnZ+&dN~$$`+8_fEquvfK-J54&zd5FN9|6Ki0 z@8yhxzaFZbmmfRe(#O;zR5mnaoKdvZ2({7`(%m_dVNiuecj}=Lfn7E(RjN3F1DEo& zoSH{82Q)%Vz@vI8jCh$h{>w6hXyZf$0au9PpZ+xlnkne{-aZk@#Y z7f_<&4(9THKP2J&q@tJz+Y5hQTQ@$z`*-_Aw@~Z%$hW$(B#{i+5pd!vjk+v;9|P-w zaOwqB8Hy%;QsOQ46#1uC>|i(uBqW5%-RInc84;uA))L4`q`Lw$t0{546V>|ex8ecC zPZz$FLkCUs;e~uMZP*?NQBj4sNen568xBy!@cVsL7E<-O-JI#4Tqh#Sx39g83;NCM z^Gnm>$Jrx&Bo8tKzY2U~^zgDZNIy8R= zTtDL(PJENFSt-@uyG zD3qwvP=t|TBQ8={B`lgOYHB^{8`{0J(CW?6(z=hV-CrRj@W$Ok>YV<7QPtV9v6LEYi+}U_TJ?ht*`{vTLInAZZ~;Bdh-B<%S)88 z^TK|al=HHPb`_cTm*4OGG%UCCX*`+Ge>QY$T+R#BHDDk>rv(=M(pl6(^uLgHZrvma z&jC7e>cD@+7R0t=rif=!apY%Z?;ADOnDaWapKTuo9HlOY;=%o90q*5GHO^Kg&Fzy7 za4y%S9`C&5ygNTe=>acxE6_oX#4a=*P%JL%fxQV1k0EJe$GF{QRhcVFb?!{EnxUJKj!d0ZnVR6o_4_Y@o-7A+IOTo-=z# zU15s-nXV;hjVX+wK<2_&;7R?bVVaYE`JVrL&~e8EO@~$oSrQ3Pi zEd!~0Ej0#d}wy)3S$_7Syjn5hP@{whAA$stt1A~Yr2iNM&8p{OyLm@dOqls`CR zO6~ojQQ4?a(>sr40R9QAR9$%4`5QcQz=}E3XYytPncVTUnuV&TJ+b&dXa(V|+n?e6 zH-Jz(?2SJLV-yag$NdH(Z1*&0;Jy2mDWN?6YudU#?D&USg19{IFma-2If9N{M7oXH zY5Q@kX5cTuFwCUOfo@XVSKWKlXFp}%XedQ zQ(crSbg~pSb9(#b%UcG)uHf_`q&l%;ZCR#EP;L51imz|h?#@&-&jYK00#GcX+&=j( zGre#ufV>=W?O9@SVZ32WgIb*#&R>t!MifU~q<*l9t9#!T*B9a!lmkyT8*?ET#{D4Z znJ_NvD`vWq0~HH5dNpcj%R#$-CWmLl%^VLLfs!{ z%=W|aokCXO7d^%%&c=17@3s%^(T4nQ%Rj{o(kX00>Nj@}9r0#|y=Y{dLN);$t#06U zQZ0Axc2qo>Q@J59Z)n1X%$_-^XDEc{Sw(}!E_(*UCdlE8r@zW}4hU0!}ZXwp* zr%wY6uW58?1M0M&!0N=k3x!n@-{g_!wXO5L>|_MjS8scy%T5E&w?~8jG)_f$$3p#% zggJ2j$Eco#-2T;XkUp|Fp?!K>LElsIG<;ZUgzuV$9AfO^&)kq~k^Xj~+%GS>4p2x_ zFLc2hVTeCN1mV(nwgB04gs^%npG4bEKyv}1TjePzPtTAntdaN1w^=SRq~s^S6^S^jaDZu3QYh)$Z=nOaX=fAYaU~F$Nh`9jH^{ zT)_XP{|Y9scHUaBIsPf|Qj3K|1C#?amBQbl>0guYkyG6Yy`gf6^T*K!2T+E%t&r$0 z?zmXR{ij>zCSG74rQuHvX4pG(8NcN&w!LF~)*NH2Z%$rT1O}(f76z4BEf3xLEaE8^WIGcfmM9y;jXV4V27l=sB%&_FNrFT+ti^9acyjxF z<`{o>o^O+1Y3^=kvxW~_G5|(*SeghWX@fC!b2h-r$P@2B*mH}RkI(FDjf+R9INfQQ zktf?JaAp0Y&zJkMyi2l$FPJ|{2ZUJG2|;$F7EbRI=ptn_g%NrL_D*&@NBzGbhnVUc zhcXKEZN)-Sv|z%E7P<&3;VMYoAOK$^6)?^nL!!e(36}@s{Uly>w2UK+8Shzt(0j`E zpz;$wyknGV@vSp;3Q-oXcMm|*Jh5d-{t_McnDlxYUA!GRzNUYblQkE4$U`su8{${( zD|n3v1MUVEk~jgHxZfUL{3mBL1LKZR@+sO=!hwF%dxfMQRQaha+D%y=$#3>yPySZju3YM~F!HRn#lz_6G&5xmcMb(b-}0yPa>=_vDfFPM*v2 zuvdRC0Dfvisx$TP9En!q0zT~-5kg=y!IxG^2AWv!WiT|yvTktl7=ZTDy9MHfMXSB) zLI0b{wgG;%dlmn!Jrua2jAZ041U*-4Nv`^Ns9wFx6|j^tKlV>rwXgpcq|TF+y&t!F z!q@OGXd)^?qs^9_+{p_EhCiB+8K|=@#Aw#N@MqTSsonviu}kQ#!YCb$Z^1DRB?$CE zEC|rtZnZ+tp1**^ll#(zUoBb3ZG;9w94#)<^B;4IR(nw9RBit@T$mEKhmGqC&JWy< zEcW(_Tts}=2fH5Ai*DJ~URYQ!!67H6#Jg*0EXu}Q)|r7)Mc?EWyI7`$gYAQ5X23xA zc0tI+ghk?i?%Yq(Cj5PmtDlza|8?Nv3aSr-1`q=_ccKTyB}OF{{{^{1BG0+H)sUC< zJ}+-88CE;jZkt2Uth&D)JU%Plz=Wn6cLXE*U<+y(fuxs^FZUbSmbAxX>1^>LR2&%a9E7SP)!1Wj} zpQTi9Yhf{joVmdRHy{jD!NYYzAI|Nv>PD{feS-umnx{t7t+Z9s zogj!Rgw`?BsW4VzTVE~w=g;N8pQhBGGHTi$2(9Z*eA!b^ElwvdIV7RJy<@dnM7YK} zIR8%TITS8puux^fRt$7$c(jU}x+n z-Ed3ii-WoUfHN z@9q>+#-G5q`7RcRCH5eX3{%t>$M~PfkFJ}B3I*U9 zGSmyC`vi@_q)l3eP*bUwX@%c*uk_!MA4rbOHE6;j&To~W`b+9&-|ev1 z(U%@PU`9*^zgajWi&2j{BP;x6-W1jaMjm%#jM)(P2xgzL5`h;QCly7&O||F}$5<@? zdj0m=p43#6P!M$QGG6m^4VtQ(q;M46nH%Vl-Re=sx@VmmFv`cHEEIKRXg6e>?&Fh( zm80FyIA1A)7&Bo{3@#Lap@bU7RveiBnkO}c$Xs(Bml{FEB4pV;{b`&&zh5`AAqON! zQN0EtfluPGOuQWvUa%HB#_SS)ML{4CrrJ1fH)a)MvcVS{TKVyTsZexYa^%un6)|^B z253>Ex7&RLKaXu_`(Rk zRiJ@kCK-q(A*ezD|5@wu_O`0q!I$4XcM@UAuZm7pp>2f%J?eMhwGlcON?V0&?b=u% zT7q?Rl54kp@-zCRCO&dJkH59?aq(qxr-~^5%Lq-oFP-h<;SQ^@s{$m5e+7b%5b#aG zNO41C`ZdC$RwkPvkB2IS9Rzx{y@1xEEyBy}Uf`**PVuF9rMONZc!4KxkVh6erN3UH zbop1JVUSB**b05O_gm##5t@2mI;=6U?hhn`iw7lk^ z>#J&+Nm;aA1r8Dky+mPxx0#G1LV^0$W*g$_DQt}2_4;w5*q`>!!x8?oKKaAT@=wXB zV${E_B$fbwtFeXIUd$tax57!(v-4z!Q}-F>GTnQ?AZeU@=JT8}?~-rK#n-D*Du3GV zUMLVnyP-^eg?xxtghxf6wQEE_7XRVp7oR&EjJRLx@Az1ojs_&x@;dJ^-N-ZZX>(Ye zc`q`tfNGYcjkoT%8ZD{(z{fcXDF;&*+JFC7pd;RyYVl`QD$Mzfc)tT zVOr_5Da#zKnU~EQ)KsAS#U&Rm=x#@NiqFv!^O#@qc5E zWBR(y^T%{~6EKr)7(MjWKJ`v?PrdEv*?ZnSlo zht?r730Ai}*aJyILt|w8sVbe(^;rk=+l@cj_Bbb-ZM*m*dJ9wp!1uKTp*o>41Yf{L z_%@zvpw0@AS+~1I8Ew&Dd^A~K5*4adN_$rNc0l;qYKv*WUp0e`_KTBPay~*0Ki9j$ zMi`4azCf`6crD8U`>B4FKXqhAb2r7X8xTA7-^V1=#0+MifmrCdnynFAV6iW5UVpr3STblS?GU>JrH8*d9Vif+^kY&mMIK9(?+Gz` zwJk?Q8JDTgwUGjdYWR?~jod2uOE3p9$(#t-0n)zbBudK4Y6|x?)9_; z)49H#YBO%9`j5|5eK~cwlc;}*{Fcp}1~5IKEGe@i=TokcnCfc35!-N5!MFjg$0dC^ zGH+hSlT*08M1o8sp^1fBdJ3Z?TXJr@f)l=5^A<^xpfHw*;N!=l&sQJE-`soiCPHaV zOjwfYOjqfW67^fE!+wsV)$YQDxE?4A)M@!Cmbn89m==ONKUUP62ZD;T2%njRh19jkK*v$dfBe?Q>0+P2tcj;U zt_0(qupIkw2w$8hyJyzp*+%pOAb^;yGa>zNCr6D8yFd70+rg3kOM1VqifKn#Br9T0gCEoVcxOIQ$P0Dyq;mt?q_xGc5lt<6E|q-j!*mMYS|LDH&p#9ot(W zLfy5k9t|Th_?L%Gpv!<_pYCifO|b0d`}(<221&P}3^P+|Ds7RNJpkqw`O;a^Ni+t6 zs-B%7`yAyuvE~96Lm3PD>S8vYB1hldO~dYV-I%80#b1@dbVS(yfMN)wPQkYJw5Ro1 z?CsyCU)WapdYqx>hq`|VB^Ts->41Vd{trE$;OT`lW$1LZzU<@(XDi4*byUmCP*!)L zpW`&d61j2f4z0n^wlb2FpcMC)BnqU{2dL!1kTRPgH@WnQiNwO*8=XH0bV)TRht-8a z%%ijyx#4VXIeB5Xrg7BFFLcdWnx=z*JrXKcOt>fVGTI99a8f;}sN5Yqkb?+*#4HKAT6{4$JHZLRc%^%!E6PNN)zn7_)wJdtF zgAF^_4T(b0DvVtty4e!U6QxOy64YA}s=-<(v-U2EgyqhWU;77{zstLxGpml%{o+_e z$Pp!Qp2@0l3y7PToe>L(H(6V3?)9R`{hP0E5Ju^TcA2~t=HR~A&13`wqoLQU3W@iW zPvLr!JJ#0p{RP`Ui}wz1q!7EhZRa)LQ7r(@jCBA?vAg4s$(1s;Y??tHyWIjzylzNv zw9zis+T{I!qS2^_Wq9bC)ZoDNs%@n(;mP*vm{4wAe*rhsx0jQ`?unP`ZYZm>(sg=C zprLD@{skTCqjoLQfNYA)FgwA#UKuwQYY1emryA{9yT*CrBVB-UXADhG}6 z9!W)Gmq*rDC4C?EbL*m3gguQ-iYhn`3M$~Ou@ymnweeX&1y6XBFEjS7h2GWTaBBuq zMCLQ%1di&{R(61@SL%x4VjEf4Q=GxgZ{Upk!h;`d*DK<6tkChhzjE}gv516v*t06W z_pG<>yTA75F;&*+I{E}IJ6fGz?WQQUwokM(5K!6#y~MSY0*%{8r;Vv=^u6D;NJN?Nq@5-h8 zv1zfll`?Ce^)N7P%G{Jvk|u~mOYmO|YAqSaItgThbljRr%iQ_dL_Tt+rV4j}F%Zp$ zjgzoS1GWs^cGueC1(X z#oLhMsw5KdbykKC`QY`)35w8j(?Bf<_y39l{NFw{Zx8E79a!d4x&xsXQg97_6l2&e zR{$dU$A9DogJBZt`re6MQGE!EN7?LYfreWfwUsi$RJCqFe)Jz(6|>K(Udu&O00McY zOapkhyP?Q5bMF?~l=?ncWLRwf3=AC0Hw)t@8O>;N6T9G!DRkrlKNJ(%4lWJlA;y_}v)%&g$!tRhDH8oPK8s6W zJMZMo0>!X9u2XKS-vi_Pc@WStqN8*}q@*IRJ1X-^^4B&SnJQ-ARTZS-_{C@?W=)tJit)|@0$-?xZ6pY^?zK|b1=$4NNjw1V5j=rsan&%Iju6W0J>gL+TV z@^mdCPq8aP5p-2H($;72#e3EC(%lk1v4aw)()|FRK?d7V)|@tzHpIxX+xG>*gbQ8E zk#d9pQK!n{cIJb)e=hFU+e`2-3S&Cx=X)uaTnBgWe_1uc0fuH348Vj_yTpJd^ZDK( z&%4TtyxR&x2n}Ki0fGsPoT;wYKQ6qyt+Q}_Mlxr6H~?GyGrc~e?6-(hjmk&}v`0n| z-iiaTuoT487oM1KI+x&QwEzLxEZn{^%Sq^O3Rv>drN1Hv^8!0nSO3fnO!aj-Od3@= zR}1Wu8qG^@e_l66CqQ=)5_7rE8$o zY)N3b-A||X*7s#OCLrlu1N+FXA<+_3B(HM9Aj|QaeUW`+^|6Miu3XWs)%S)pD{_e@ z_qN?7VtVDOI`~#Xl}*R*_Xo)Xlo!%Z1C6>e2TQ@h2W{4TNvle`CkJEe1CE(L?=4>Q zw@-}-o~r;hMe+zu5l2soL}r6G-d25AlX^w1s*75tk!yr5h(yjmTe(9nSGUFPGc7yc zcKY&1)e-%!B~HKgfb?5KTY4m|7XYWKzB0Kytbc_I4RQ|+vAYP%XSOotFcSAk4A=>A z*>WFE(gCb=qzH86WLe#Q7{? zaePywHo5Rl1F@(QjgW1}i(4<`-`K{()PJRI#__?K+B`I$kW@~q{{?|4<0~R~u9$T^ zc43Q`@@8z~W^9YIhj2o|5Sm&h%**HQ6vvb?SDa5ARNtp`W=~?@sWXnbPTGjR40v4+XvxuYc%S-^Z{EjmXb4Q=1wx*2y&X5AK$bjhi|?Rf%s z&ylZ7p}#I<>c#GG*et8rVBLkP=WJW^yebnrkp5}sT=n6Uo@cei8CKCgLzgGye50Wv zwM_Nh@2k~5{Z$9mwkrhmNbtw0p3yrw@7UTi8&)0XLULERI(dlykW?qaZosd5`jJIV zS`{<4lmh>pMjX68L zE9|Hlsc{jj>e(!-EidKgi(PboWcQx%n+ce`s~FCblBjuxlcww)9grE|!K3e<;eO5R zo_(EjcSja(TXhm`>3X2(z@D6&CF|L!CZBwE2d5Izc>_jfEHqU6l|{)cOt* zwX5bv!qrewZn@3Du1U2!h5NJ?G%-yFYX8k%e|7I_g{kn>JG8XQrSK#yXA#yjUXIwa z&1Z3}B8_X8y_bA_CD-eYMINGvh~nL-Nc^<*ll^^m{f6PsUuf>&pRT3?t2c8GTmGOL zl}Op{FiOWBz!SBo$;IvUca$`BZS8{;)3+4&?`SAevv^J^U{S1{H(X)tBuj6sfE9yv z$if6mQJtkk)W8TB_2T%!cvKp~&H0nYfE^LbmY#tnCFsYVZr8K-Na7Z$B{y)gNkX zjGDb(9~&Ye|K0ezaJhqtzEn%D)X-*HiT}&m`kQf85A%?}rVQWfh~!QgEsWh~FjJ_Q z&U1J8dzR}?8hb)6pFv?*h`RG?#&OfMgFK4@cY9V3UWLj13;MPT8NIsU2SZ!;of}8H zt1I}HIR`K2zk8*omSXZ_SmS$oWNkF)iU2*$oKzX<@r>VoY;a*@QB$3}=;Jo)p;r#! z>Z<=-ugdX%}M;wu2!u&;kgoR);RWF=Huhu*=I!t$XJ7wi>jq#B(LQ#k}^o4 zZ<#bLZJ6|@&wi46y-;dcnRz8z61rb&7kZ)m=RCH7P}WmbCY;^WZvD}g_TB?vgC&|j z>_(j?59uXAsVAf=Zv1bNVw1YfyzSt|;@E(uK%KxRD>-P=B2rLxTK$xy zLZB4k2m5D%<_^=?+}Xg)s@DH1`L9XYbxY%WA+yre6^7NWbFFW-lN6Tr)xJKDVfc-x!?AJ24l#*IUm!q+D$qTzGoCQ1y49WlHV=DJ!t zmipyeqCts~=`FuBku#U|y1YQprSPi<0$|`hKOxlS5PY7Vug>ji<&3=L<2M`~#kKBn zi$TP;OFMEgu*3#q8p_Ww(b;;p(zraqgm&VnLJ_xtE1Z^Q-dpfM&S6B!t;{DC(We6j9`s%p^ zrlzCJ71k)4ma~k>F|4wzt~NYK6TcFTL@jxC@e&sI(QW<661#;hE2lWpU4^y&{*$D# zGcMNPjQ;qcp>@X8KJ!c$)s4@eb~w>Bg@IC~MV>-A5+4?sYt%ML8{dkOKSw>o8ML5n zM$pSrj>Melo|%4?pJi?EgKE#&Q>X7c5Wz>$mCIW|)qjOV4Xorz=*Y`CN639s7OpmJ zCFXxcm=Jf?LiMaB_v(|XLaHSEqGm;txk+o=Uh4(-35(nn>*N~sCw}8LFnC~3a8}jT z%SLAV52bu$Cz|L$kWbX;cJvNbv#A21l{8>}s25tT=P$6}V$Z-Q@8EvpFAk^z;&+{)Cy z84U&nhN_L(f!hgTxdyO?UmmQCsxe)*buW(Oe|XWle={B$!I3swarhE;2;{^_(KBAM z9ipD=z!TsC*M}+qj^2Ri${QuianH=IFb;xrO8Hi;MrlRW))&mE+&?c4$1fFwPg3B6 z2`Fccr+tNB1y5!)T&A~`HX%eZ+&NqC8=U>&6-RZ&)tVFh_f>i@?{FFkLIM4+5IV$VEI2{cw)B0VXQ_*o!q$CNj}4fxun0~ohQBogs> zT;7wOBtGFck6yoPXT#Or8g=t`F{`5DTRJb z+~-GJi0_Z~myH@qzOJlJO%rM@f@hp0BueXNst~OoQQYlH<#5zV3gK2tiFL#5=b*~^ zC%PR&gCZv&hs=3uTgX5fs|&zMK!}2S!WnENJD;$@<4lr3%S(8~*MC9&kCacSYsX|U zg=k?rd{duP;6T8+Zjx`cYu`uS4SGwVp|dwy`d2rpRYc2X8%oIK$g=eHOw4BQnTU^N ze!cF^gl&VvAo-cs5-FDAd3CwL3vId=GIpI-fovsqM_3HJTe>5J)Ec^}eIXL&p}g>0+1I^4iee_NYJ^tbX5&(0Vf2ig_Z5S}C>tvTUR3=h<4%XpTx zvGdQ=ucx*#&lg2}ekW$Abkn3B=SjS9eDqG-0QqWV7;CiJnLPPyXTbmFm9o)n+x+T7 z8IljsHq~cSda@wrjHbC4u!jeT;JIko=jn@;o8Jx|c$K& z+=KCsaD1RHyIA+j`7_-xPb(yWZx9{Vx6fql5Mz`O#4a$v~P*^ z_S^2Mw?8TS)uFL}C>|^5w`nlE+cP$2e4v>%qwcJ(bRkR9oRvg~ej?TxH-g>Z3b``% z)x|BsUOZ<$T~VQPv+etamOER#elMrks-J^DuEZO{ z7^VU*!u(@y*7{H5X|V0=Kj*KCxboev3-c_#)gH8ADY%H9%F&$_L>J@ZhZd< z?q=AI-4*~px)y{J!X!urM^4eUIexs|b2r7D^UM2|r!x}H7tr2czf%whB9-63H6N%rq#k+TO zs^G5QW*pJ+`h{E-jydJ-;6d6amAEp6_{t z9h>Recb{PlPxg!?0Di3zrS$mD%*}`GoQJ`oLrmjCo{8r{qM{cbP_m%JT(~pxOpO70 zel~?Vd5Cv2@(F=nyZ`luuE)z(>jpErSNIFOE`WN?>EVnM(WunU>v}l8ix4q?<@H!? zj#ky)54BBE{irui8>Fg&f?IiB2c@UJNoT4|s;JP9ST@z1_T``RPZpA?5>}}ycs|z8II%Ya~NwDuzMM0ir zlUd64Y5RBCb3q|F_;AKQf#}l&zdi9D`kSccW_|kIa247#v^n_O|Uboica)R_Nn z^EAq~4}y@J%MF{JR4){4w`@sr&$-F7tNwvlLuUjm#*`5o=larQ78~@XXOD&g49~tx z#10?O5Ah#9C7upsud=AymJ^dq5?2@&H_fxuOdXT2ebycSWvnA$Q1jYMQ9036RmC`G z#mpHU%lXWSxl*=i^v`)>Q4&yCZL1z-{;$^UR4DVcIpgt~BMGG5YyN^h9a zoGK%gYsqB_%6`i)7atIVFj7(;Usw2A>Z@hHykKA|uGRg+z})V{F@U&B+`$&c1T>kc zI%GAWb!PuT+m(RxJ=T-inuMZLn}r0=swgt#FX}p2B;yh>j7dftzmo2!-O@OIL;w}i zury~3mJ7&Ewz<9%_kJ4lU+$@{jsI~=MP+!Lwk@=6w-q7DInqUhvRHL*{ODe!t=$k( z9>2`FaYr=-A4dVXpjd_xQse@X)LNH%KCI6q-|1-@G3$=rySS+@6fw6!bv7K+{Vq-M zsdnv>5Bptv`7)cE<8$3j1^M z*q2({!N<2+gj1rr55kB0^2~|Ws57LlpCN-%!o~%!A!X&^>N@$!_PGq{qh~yH_XRLI zaxr(e$6^2i+yb=6s-_TQ%hn$-tK`!gPFw4A@~-ja{zcc_gA9G1BX5{Gn)GDGU6XqS z&LOosn(hymDR`xK*qhQ$yW9j3qwrtMpkg7s?Z)^l!}k*&*Ruw8D4Oy+e@Kf#k7P4i zX!rvG4$z3-lV7)=zB5JJjlFNP8$InP*ig9RFUq54dw6&=bf)@1jZAk^H0{??<1ik^ z4~H7JxCL6inv!o!)aH~s6I(#bW)>)yQAY2E_t>xP$FG1gFCS|tZ*x95Ve8*IR)g;6 zY_uC(7!cF!@OzX5Mf*piDF$>r^BRl;BpmR^gdXWCzP_f82cGakUr@64Npe0@11{j3dl|8V-_dSX|R0 zkS9?(FvPkb{K;p2xO4M0fREU3Sq;k;Z_OC`7i;i72`ku!-Bn(zyglXV{(HMnj%2wB zsEZ*c{$Bo{(~(fJa->I?tu}es+m#ywYgeaG;;nx{q<2W(@c9-c zO7g?ss8_3R!kDKuIf;kZw3MS^B(f7YQ*#qLh_e9aG#^1E?^aKAbB>l5Qr(>pXn# zH;&9@)z~)a2fONw_G9^3^kB+wu&FkPAN0!6fckD^*UfKoaHIiL=1~!a{flmqGq@xb5M|C+k)0Q^<8;v?@ zr+=xr_fjbz6pjIOx!>2lC~Rhx>92y^m(kg|M;TkW>A$O|xW*c(fC7_&1SifBs`^*w zRp}!AU`#t!$yM$Z#3a3Oho<(}8(Qfl&FQ&Lpu=t)b)GrPf4KJq|1_Y5kpPa+x~Uvf*#xe3 zGEG>GMew;{LZ3du@24DvXjQp^6YFsS&rP{aX;jyl7r*QMgRLbw63nr{k_i^dOteyC zQuFhe*ivOq^AyOh_b`{LZ}UDt5;T=@>{K|@qe2qfs>!!0ATk}mKRkG0QvOFS_M82i^hZau%65m56e>_lyDIGiy|4PJ)N2* z_iKj9m1v9MMH}HpZ0g6+yW>$;cHO3|PyP~q*Hk-(6gz9O;Ia4pPug;AA%<@7V>%FS zkH(;*OH`S$Ju+{cMpJ}Xf<;9`8=U%#If!Q9`i|0yfb3c$YD15ceZ{N8$?hhLUOp;= z8dc-<(5nb>a;-d+V;LUalSxt}MiwtA7j!bz(?3#ma89SN^s|-I+#IMp(rZlDS zdi}=NfK{5N$y}4Uj3M9E$B#w% z?dh|33UW?q{y2T8d$oDQTY=sf|LBE0rn=0sTsc--+t2#2aU6u9+7ZqEq
  • Y@i_cZ+OkIW64zV!?( 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 z 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

    U)a6=o*1%nUGmC=s#;i4?RT8EVVC+ zwzQ4OBAJO+f}=GMEdT1fn$X*Gq4TOjyR_a^{4c&R#lmHAh+ck4oOAw42B&(0!SL_7 zFs!p(i0M&Dnb9>d^=6b%V{D?H`7X5078I@EA9T{ac&_D?M}0#I=xIs_?nR7?g*^Gw zFzhS8(}b}Aa;sSt$Q~?0TO>83ESsw~<&!)h8LnAL0h@2CV|pjr)k;CK#m9!U-i1L7 z>!xaWi=!VH)z!6VN2UmIh6@F9zoO2Vm+bYq!lKIWf(Fz439HmYL*2Edy-SvKRxM^z zSg-934K(x_3?E)=VIp&bS5O4wmcqLCyMklC4~QaeXAr5uvChTIaU8MUR-o~x%jJxi_%z2fRRWw5e|;_Ho?Z?d99|v_HFFF9=vJ3 zP9iHh3O{LIzcPI}7kY^j<1J<}1t=RXd+fAPk#GGe4rXsDgtRQ5$0MUTR^>jQe5kLe zi?v@H6H>g;-=UXt314)RY6nWZxt@IkSp*kvOECa6d~q3*va{JKiD6Xb{YV<1HCL4w zx}5ZWg${a29rC(lYh6fT{9{Qn2QCjg(#ypx&nl(szxQN0))}~G-UDr#Kw-AxCHO3< z)rDw*EAB>ck*u81OY}2-MFfLZEg{91by0qsLQu3p7V`N;0ezZ@r3yr^1P93xZx^lt zA|4sl4ZV6l7^U3e-*K)fP>41W ztq;g#A@89(_GGTj~NAeeZzUwEZlza7!?^N|`FfK#b(Pbj@cn*K@^ zk7`UR_PZIfI7yil7YltcpU_T`pbF9@|FEe60qF@=k`IoYPzFmn==L#g@gQhp6^LRV zKfS(p^K+*y@;gPl0N#w_9||gW@MZG+R4Zl02Z@lJ$#3zdg6OBzHnJ=H?*;Nl8pXE<36Yg4y@X<;46zoma&m`Oopd$nuU2pxSa`7LE=O#m7*3xfP#K@J; zH}1#x6fFoAZqcR$B69%s;)@ruPDRN>jjwjpF{aw?%!e$A_rbqq0Zr1Lwpv8@g6saE zyNQLBR-q*E6XS~Kx|pJB?5$__ zVP9F&3MO3n0;uY#J^5dt*gN2YXPGjQHkan$TEvTI?_h6}m%jG&uohM2l+mUKmMeQt0U_y-i9lG>)cPKXFDKEsG>cF*d zOF`9Hm+Y;D8;51A)5rJ4J7e*QFD1xdS3_qqh!-Ln~H@TY|H60uIWnBMh8Xy_sf z-gnToj?QC+;jX3SgMbTt^JgQy{`s<}r~kXe=>G`OVb!*}+AI%*d5Lx8Bx{rHjQ>0c zAYJ~u6({y>n<}Q5YH(=QWk!HUW^d;VymPs0!~3b$LG3*KwS;K`^7_}tJBPU;#XQ4{ zx7TG0AGO>wO!|?!ub#T^^&ruKJCJar1wwGZ6W#-!Qn!j=!_;1D$N9x**>B>j{Wp%y zJ_UE)LOtkTY4(qR`RsR1Jj-rmca$vE8BO{zgR={Z{Q$ShfxHA&BkUG>Jl5=Z33uMw z)w)=3;xBD4BfFW{Es2vGJtse;7SCsHca3cRwDUd}Sn)>iv89_EkJSxI&$T%~!!vn_vC!oZ+)fckm(HDevu{st*4S3D z1Z~ONQonlTV$^281hQ9AYQ*{eGWmzX*$S*4F}ivzrLp$C#bm=EtDq0b|Fya_w%B6! z-t|2oWlY$eyq3wBaa-5;Y+!EP7fce9VETumOANqMT_pg$V+C!sDiZ|o4ZTCN(>cNp zNjen_;J?EFc1tGGjkY-;4gG>VGO{>1btI*={@5+}m<_Y_PPF&t*SjYb#k!S`amLoE zr5*=Y%0DLF8*`e~-8(tvZ@>w!EG8_c`T2HPi&muqAEiLLFPdAou4#FWIzmdiW8(^r zcJqDFA`9_y&Vn{VI99gQr=RiH?=-91nsx|v2dig#*}Y2zNXD;Wwz)hm`F9^#Hd!gF ztd})sbebBiZ*bpT^0lyO0e7PGmcbmzpw?^lWPuvv2s+WVv^TEs(j}==(uauOL$in# zL`XBlJIBGFq2csVu)VXyYZv;s3k{i1_x2m#qsqV$%~BEHxxRn;rN`LH4S>wLd}eHh z8(w6KjFcRO|89$JRU*2X5^30@Gv?%DWO;dYM4!g?e`KMj-|*aT(%tz@os~7)Jhg1s zGXM=yD9eYGn93ERqaEjG9gX8K-cOjhT~+($ySTY&kdF^UM14}CeG;>6)Nd9`5LN2N zzjKM`=Zjbg?Vb6!E6>1%aXdp$$zxEyZO&Ookc>Sfx37+2X+WC&B6e*yDlChEbAqL4x z-&Q9h2xGgNhsar9lsTvy9RA)IAY~$iWD#hu9yAvU9#45b;#1pId=|?mHu=tD0Wx@wm4!{;z0-`CKXf^8$@Ywx_QAzw#2y7Q0O%CNi^ ztA3Qec==8+Pb+UEh<}Uf0lqbke-LbSDidG2;;99%u{{*>Pz-gkrs#q&(>`Z17#=k+ zdnqa1z26w_b{%r)-|CO>&gEgr_Mpkx9P#1L##QMOpOwJ;2|$cgR+#O$?b14X(kmA) z7x|o*`#$*5ybslo`EL;IcH0FN+N~^Hf_)T=ZC zC}e$0^lQw$VS}|?etWE_;>jL_6eaRPxfni{2#|Iy0gV@z|74y#lRFTsHL=VPxzML$ z9(%H~7Mc|YVo|1v)XN{WmNV4^mA73_JC-PO$Fua`uUx2LOkHXwqjW?J-!*K!{Lx<( zlm7lt8PZvhOYigv6=)Ecnf)BfxnB_5An6ox%a35_v1LM;CPr+U-r4S zlpu|v1NUFNHSfj^3!~f|_4B!8_B?!-))!ih*_Gr)91UHKYcksU{e_1Y#h^h5_8L39 z%;L@QW|qQ5a2g`7KVQo|`s(SAs0h{mUA@*3YY$L(v*a=&iswxg+J4WOq?o&)CWd(1 zp7|~i-n&C-TOWurXh*7i&9HX1Kq z=Jgg?*cI1PJLgb0F*`{Linxiqv#Xqp+34n@>TSJDbh68_Ijh{z9Bm!+$$S!b{M0GT zY2YTq_d3zI9!D5-#U{xA8eDdi#EIvC4DxTN_l+KI-+a;`*ejq4ATZG`l!f_ zKrHt5jY^2Nh0cOyadh{Ybh_083=obWs6TvnbD`hnlkWMS7cIP{BtCJa!+Y-6k*HJkuE0*!Cc$=D=ZJ4cPk&Cy3^e36)$G5r z5jX9BUtczM6nfuhDt5#=s$xQDb=LZ~k^kdG-(N0bLV^Ruqq;Wohy&&1KWuUpK>O5^TX^ z-_S!3F)J@LSy_l)6pYc*77Ns6lpMDeRF;yo;J;W;l*ARIc-}PGt+YJod5Usxz2Bd& zO>HcqOJ5n^^iAa3^0h92`gV z&Tnu#3brYA=}FPo1qZDCw5TSVy*kV%Gk|;p+vaRYY3_}>ysjJ0GRIsuQ)mUEmX{B* z3b2zcj^NAwLz9i6geZSD{M+3&g-tg-&KY^n^UYmXxetXmt&Bt)hm)&6iLEZ=4(9kh zYxK6lRt%X(5G`Ygl1;dhdj*L8&@TW@^Z%)O~4G-j@Ny)-d( z!peM-kDk5YzO=KHP78n0o^#!SvM6fSri+293*vxwf*9d-+l0Ok73jQma(WqMCsI+% z>(aL!hjKhHzlr3pQ8%{yE~27MW>{MBFE_*#WZ`&2o3IP0>E z4LkhR7)b{`kX>YEuIBha=IKKo&FPA#d}_Zp__lj*7KdDO-+cVZ(+S*2AoVA5{rp;R zq=jrU+#788)dp#v#WbO`%&~PT616Bjie*&Rl3)< zmLE5uM|H{d{W>(^6*eykD5+2%#S$O+U(ha?g>d+*Ov=EFO7_0VrHCcuFnS7gc*gj! zT5KDU%<%cz_$e&Q7hPB~ z_IQmv5HfBwGIvj!tD}Euc7>wdWsFby{b;Mt#3ARTEM)GO#n!iQ(evSHky#|OazoK4 zV_E#uQra;CgNUZe);+IcC|))v)acv#>YDJxT>e*p`P+nL{J$Ia{NMUNpEdxJ{XmOo zx3YbJ)Q}uGgb0_{r%qoMx*Dd~zNJBPcOyLt!#+d2fmud%BCj~4VzVL+nb@`YMvv)k zWQeht7T%Tm{&@FeQ9?lER9*hhYLk48I~iP$uEZsaHaaOHdn8(!O^tQXbt?mBs%)^6R_IyI*yLTBktLGAkb^h@d?!sGITDr1A zC8cA~RD|@bKPyQcH`S39!P8CWD-jOoF0kOeh|HNV{ZM6*X z7H*@Lga6tX=~*ExtFI{<>%K9z8Z6%W;z>#1Ft46GsQwkF(9tL?b2?+v7! zY!e+F^cXHVv+A4{C$Hrn^W&HG!WZfAUY*k_Ah>$`fljDiV&3TCz}+8t^sCs{6zQ%S z6hTZcDNC4G?ZLFovgi!eP5)aHO18)!X=0=%nyR|MN)>M^bQ+cN#qH7N)QC~jP2Eef zSGi?M(sT)@*nI80`<(@Y-!D7J1L)Nwn_atd7zj1X7<;Nj-0qV1TGVYQT<8+dMJ5P( zN8~AGba=)#`oxXqoF$XIvPp`>Oj#)N62cBJ;xAG`iv9668MVtV*fLQy-hAwLP)5Oz zpRt@gU1_P%LhyQTW;`LD^dE%=OL3hgfNq8Xt;0ENT^BrG5APz0TM5H@3YKh9_9su#M z)LLj%UXk)B1V9diD2oEXfRH%MP-N=Qnry4HrYH5L4-Jp?_^}ltS&8j}AAKSK!(9S- zmgrMiEWSE-I(W;_$e}mg^D$~PtI|LBbq~@9KnNBR%zHp-nwbAiNgWWTVw|x7YDVyTtWFK^ieAB_21_$cqV`+C-CD#xd0sVMS1&&=rnBFuxmId>eWi-(a3?ypx@752gV%FM4u%j zM0m~>Rqi8#Q#OI}Ll#k|RmovddJ;S=mhiML`T6;tmS*SrEA;6%``cF&dhFmn_(v%i zy~s?#$!bVetwXYF@9@xCCG?z-;ePp_oo30vzCPYFUaYI1**v-qEd>C`(v4g&!*n}7 zv62?>H{YrEDmP%lC=lJ-=JS8N$D5l^Wm2sh>{yb&(|`pFs4?l!&(Tt4Q%v1kiKasf zhcrvTWnwRHWlG|y2P#M6dv>s;Kh?z0xF7FmxrE%tTD;ZSt1Cte&+~kYbg)Rt_w^%; z47dCZYOOI&*%2k8voL z0Z;b`@86KKslt&yh}OB#BQ9n!VBb|i(S&_Y`-?`9=(pYft7KBDs7py=#+mG&nJTW7p zR7#RUgo0UArX2DfymNM6csWQP>xdEx(ZATM?M`zwti4?p{mD2EH4&8~DlRzS91Q>( zG=G{ZxJD%|B2&){_m#aYaeEzm3`E4!cvMd#GDPc{CjYD6vpc;ERQlDay=S%3fxKmEB3}{?DDLuY4-^!bqAm@W>RwW6VaFac zIi0OF11!6S>FEtkbGS-voU+NvMvthI8-}m74ZW$osUTS!s_j(r{`-4scnKv%?QTws zr%m-yFB2UM^Kj%hl4gM$`=%-R*?60qkZJvE3aXYzm;qNQ(TxaEjnBp|#e87cE~y19 zai4=RKJgx8*9q_d0J@$7#^rxcBah4mJ0c=7If!v+n-8`Ad=ubmXLoUGGsjy5@0a^G z=9uS_pD`R+B=%uS;YaEeeiu&-Nk+K3?$}GD>s7ej!m}K=Z2M~i26|NkoN;o~A@hv| z0Ns9>2A?C832utZjor~%iKQ4S+QB>R*742rAZFGSS6EfGy#wVKS?a|zMK{cEQvE_s zXRV-uRal5i-6x@uvNk(u+JmeXnnI^aRnSk3%=OV+F_f!#W5gS16hHN-KR0m$9owzg zguVO_FDQiHHkOphyU0cvqJF+2@#&p>rS~y42d~*E2}?W2n7x@Jf(O2NY?_ENz>7~D zeyY$}5iJ#giDM0e%2Biru6jL}>UN@3h?LlF2+8`B&F>CJ( z&AV9*`ew>P$DEVtlP zHqfaa6bTtKCl5C=^c4GLo^(B`{wxJLboH*hd&1H|DhdrDi;)Kr^oJgJPzd}yh5=zy zgHY(4>o#G&{*5)}S!GQ3^6&Z5VgBZ+0FnVQp#*M;pDbQ!aha%LxUaK*cV94EmC}Gx z_|g~3lVO@MeidRcPM(lkF{Y%B(PMQ4Gbs5&-zFuGs^<;(Il(xI0nu8A9oIE~(!Qm# z7R1M+&^JQ!HqGt2qP5NN{Mo$KsUZ!8_npv*j{^$X9$wI=7235tIEsaemS)kwKElA= zlRW*S)r0TM?;&>1UM>w)rv*t0dGm(e>(vm@zaR?*I;O>|_4r{>gO=p}s;cqQGT{UV zr?_uLKi*LaQ}9y^`fQM7;}IjAL=Au)e*l5sTK2yMHw9h(nW+&(5=4V4fa4*~;)$HU z{|=&LpmxVL=5zlS#vwuXYwDtJ!^5u*h&{hEcdhuHU$F@x zpIC^7hV!!%we8RghNq7Y69@pf2m|jp5LN>?F+S? z<2e-aIpnAP7p6yNIZ9UFhzFR^sAjc4N2cbu#4H37D~>r}4v?;Ce=%0izPVHbFm*DJ zRNIIze3utqEm{8Jk?&Z)GZO%RwEvhvLe9) zOE4fhVCH;ZRky~A%UNtg+S|IR9remCiadJv;5iQ-6qN+ND5EU@cueJrqxn$SA??Dq zaoNGgm!b4UM&~uZ3P=U03A=7&HT!y70k^9BPR*$fOd7q^;q*Wg@3c6G=sK$7$qM-* zH`>3heZ47fxG&gn-E%Drr0m_clY$Rb1*mRqScCy0RS7y+j!u2m#0~pbX}3|X6-LIk z3H9%o7Lk-+1C%WY8N^&CJOty}wjwTq&K;%7txdZz8GFWm{nCdE6lI#?L6p43(=~e$ zOSA}wy-W7-aNWroCZH`C-;NU{v=$rY(JC04k zt%Eu)ia#JrtZWI5=wZS2?vmZmOqYmFSo^{?VveqSIOC|UE#;KMz14$ZlWZWfWF~yZ zg7|-g_R2jwMzY#H<{sx$)_BDlBIRjnzOD&2DE)Vz1`J%NPrt9m6TXVN>c~r+tFbPSxxgWbvDZ1!d?Hej{i{XB;(~fQbP&}2-a=RVI5mrg15y_ zb;(zI&u+GPv>q@fmf|!pp#g`n@9Pk>{$izv`Jt_&P?;7ly$3=`Qmk6%RfW05gV?KD z0{OPr{~UqJzMbHzy7$fU#q-m|11n-+nHE&Y$0?&W@%jhmA4VU%qXM$gS^pS(6Pef2Reb>`hXK;z3rpj0{X#WGtgxq|9jd57+)H zMNtvbW7pdcd*Btog=4YT@fa;)3IyGD5hkxwKLX$~VM@^|bYGRWLj^9Rs$T36cqgSN zlv&RMuAb`Aqa)oX`r_Q40Frrx(>!P%C$@;vXoQ>j8=EsEpEOhc; zF&K(&J3Uwl?X;OS1frG@ELoWN2ZXh#fIF+4j()SG7r)O7(6kKjBxFkeoM(Nfc^4TE zSln!X1^6o*98CWk3IJs326xCT74`B{CoLp@%h`bZE=dOWuajN_&{+f- zXjJaZ!o~VkkvU>#nFy$qjh%fme8X$E;z(}ixCMeL_`*~y1Ds=Yt;+DLxQ$>HQHaSR zBOV-_b1IjyB5EPr6tl8KLG7+;At17mFGB0ASptd#kWCC|oA-G5b)un*Z;}0x$^BCc zJj3rBG;JTB7hPlKx+&74idNl7u(>;;%HQ(`#S46u${~Ow;4RRp&_dW-vK!hbMQ@O& zu`^M&8w*nrKn9167`u$(ziX$W|NsP#z54g^aBV_sct=ST}T|%um+P7Z4J6p^2sJwG^`4vvun(p7rh5ets zrobf zwl(TX&4?1pj=Q2`*;h=ySL@T%%#l1*6wV6W0k=aW(S7dvr1MqXC0tf_;X! z?aX3TV!^%F!>t#e<#>Jh6*BfTc4xn5RlAb1?sf#Q`Aq~Pl$3$@C4npCBb2CAimQ6+ z8t1*nr2>az$SsH7YydW(NO*}}J@@W*%0 zz93eYQuq9{wBs#)H18~&ECvHOVx#|bHdj3(_g6QMT(1rSf&sZ>?QFWRk+5ZcJ@$iA zHp)3TE1n|*4T@Z3oCGlSl@6)?g-|y)m0rYc*>`5O1!C_MDRg`f>#*`@8(Q*QrT{V8 z{s3alJRUm3v%bg~qjp)1HHBU1(u|4j2l^;X4LlhLMqa;ct3q@wg(Z4RVIXL<)~-xA}ojSV~pgH=eXp6D>0ABP+U4o zebxC;@PH|)4-}mr-EbEp`zLnT%Bm5LuC@tV;wM?HfEgEoo(=n{gNKA86~mrpTEVBD zjm1nUnyZY7GjJPXDH_V=KhSoOB$&IE<%nkt6&frsJIgfMr*cO9{La!C+o%IS0KP92 zFblS5FhJ9v-=)CWqwJ=SGl^1?h7uI5d}hCE*Oz6tQz$$t(drCRn+uZSjTbE@O5j76 zHQLWE_qOtk04R-(@!u&NKwBLTyq~ZgR8rAFuNj;Z?In5RiR;2UQS|Kp)B=n6*XOdi z<>avHJzA1A&a!e@L^ES?5a7fDk8 zV(r(a(bi}tUIx#P^$8ns1H8pPWz`&l9q=C9DW>iN(7C+m_g`a2a&j{=~=O$oOLJpzoFM%?aG<0 zyt$|MPFmk2MI8|v~7zAwLIO?7!_vegebBBRby{KbK-yw{10G6#pr+LSvg zkmJRxr~QY-GU1t)UCyibIg_nT0|#9}m0qzj5+MlwX4w@ms}17KugN!1m5u&*tF&wn zkcg<{YG6C^8ZfB`oi^1E!E^{m9R%v+KA)Xx+jv>`aDil6+P!bWB3$QqcgyK%1ZmhO zVQGLLS9uf(SCa@6SGfW4=dNsabCVB6l&>e5ri6=Mas6;JM>r~(YKncog^hB8^sp6I zj-Qw(p9|Hm!0m{0RVqYMxjrs>FUYKUKAi)Tr$LqL2R?n`KW@!LjKs<7jgjQN*I`ZF z7y6sEXzP-snS&%6tv-s94?ymj=iv}wYo?qklgBfea7;UUUU`tZUNA4w4?5OWp62~Z ziY{zl@>;f0R}x6_%B5q}a%|6;_HtG?R-%`~;H(0>khH$|2sL}vC7e04J4S6sRq1!x zg$Rn1svdKu9TZ-;TZ)(`5$3ZI*qbeCWexM!;jjped34Vs=Ha7<)EiBKnOzY8?Tmd} z%q&xMvm!c+0!F9TIHp8}{-V=l9k;RgL+yecRlYIGtvQ}XZTa^f0}TSY7%Y0*D9H>k zuSXLqGbKd-UQG{0Xw?AdK_}a;ebedK zssV`%$%Wvv+1kaNr1m3ZCSdal{2568xY(#xZcCB~aZIVJtGw4n9nX6Iz|tX}!V}q7 z(#?c!7vwhF#{jKsk$RP*9s}FT^3Oso%R`=)JKj+j(o*nz9xqafpN?VlIV{<_Nj2tA zV@kR`fvibm3ZG5N&7RYH+ctAjn{oNEQyxP?3!B`UC~5(0FxgV23Q)Er6QD$2j4u-v zvCD`UT}J%cH%*&3_C8XhY!JKj5r!;;feBEYe?sAsI-bfJPyX^E?yXFd@(l|% zv&SE!rTdB-j6Uj)GVw7zJ{|>D?J~jiPgER2W+&Fzt%w_*Dr{H{>m;QEQL&ARQ)P66 z`tvq#@3)LTqvRie!w-lK4$%{{&`aIgylG36#7`HJAd-z1_X4PX(2d8it-4;K`crQK zzH$&b&mZu^OR6+WdFiwJb-NdU&TVf)R*SX1b z4=$7XuyZxD)nu0bh2&fX3V&4QMtDFRLT9~iW0$o+vgCI2^Gu4}7<-+`CZ$~2bjw&o zO0#nrBb<4-Y@|<9yKO!d)Jg@{!6Cz2S&5w+y{^+k*MIE!y}15WppWh%W08d`Cwv`i9DXojJ**jz9rMvJ5udxR2`GRm(Dg0EOf_)QQwbYxo6wr2A46X-pmM9I9 ztvO7&dw^Zy9q0dXhxUl7#=8axTJ^$|L{D$S2CNY*79{nl=35S)SQj^RRgShyMb(v0 z5&BVK|LTIfww*`VGcm$Bi1{lO4mk^sHuP{+AwXmJhQRz;f|#JQ#rbyIj}{+MaXql} zz=i2xOu#Bk##8_YoMJa8&;7b|CAmhK&efy+)?xh{ihkh87Vjf03x1o-ncS_-_js}U z7nyhTMGWfk*mTf~I>U*IUd(vl$2&B4`|&3?sg}S_dJ+8G#2UP<-X#21Ay8A^tgx@0 zjFq2R3uVpGH1q5$g3;gWy;rOcH^x=^cOR)xDdk_9*i^3O7@U-TU}4>l>fFJw6$ zuLGOfmf%Xv#T}|#0uqPNZgKOyE@Shx?=}_?j!C2|%ecU7UqIajS>-!wf`Sog1Q+~N zmtG*EIw_|>I8wM7_sYkpw)SMAH%qE|zp+{TI5U)b|=l9X|(A z!O{U8`r-~6&u5{VHpZ~J6}yhu*#wPI4``SN$@Kxi^pk(sj4Nh%uO{3 zA(nUOzr{S#pk`Dw2?UO9V_2~oz&b5N46$MB!82Ln?v7uF6b~`=e;s&-??c_L=nLx$ zNI!ZfJ?&y?gXP4}sp0EF0kgtH>2PFj7XX*JSO*zZI-Lm<__6H1HNEQ(pL0#me|nKpmNHsRczq5udev}VWcH&#Fxol|vx2Nb z^r#VH6`?6LK6}Sr&I_@kYba|MYegX91fe8|hFQ1>7>LZCKNr(L028zPa(>ROV|82Y zc#iQZ!*_HMqR!qw-~b7Au{#X7pB^_*UA=Miy$C(D6X^O zd&?u1A;VbIce>Q#RWx0RrnM4=zNwBL^HIS>cKPzD9GnZ!W-VWbZ>__WYUo0%9Wp@* z50idW{zE~NCivx%$U9eBZtjjvYZoA!fbk4Q+sx#z&~yzn>DKO)gBiGtBZ9QiQuGr zTtT2_gIwYqMkC4t%dvrNG|n#QSFS-NjU0#R(LgA=eyPf~1H$Y8nGxs_dAg0G`4--g z%sxcAc7i126Ldc$nY8`d?^=5zw}ya4Hf685DsTG&9_e0}9uw(2ekw#s1Cye}uwuiq zASPa5vFRo68Y%niSS^~i>+;RsWq(^6kv~^PbY`7pf`0+UDzuVR z&z4LmruR?$U0#3HtAx6!ByC`?y8~F`_@BBCDvN6a2eau759YV z?+G0tRkEx`T4_kHMrD^mRc=B#XB?!|Js7iPqmuj~wnuSXfZI!5sN7}p8Tg&n#K~=f z9kFL+1hb&m%d_+WDiPK&(JaZIELJKref+^qgiWX0)zvMX^ld7c^p=RugTEuTd|A+O zoRtrhNvazwDap{5;Sj<2-mxV0xN2JBD7bs|!htKlB_YNE8Wb2ly0rp~qRZgv{P|N+ zR9r-Y-g+_L?k%!Fk4DwGv1z4?s@jl^@A%; zm>5L>*`*4407G=NRnK8|BrbRJ$Z^; zuWic}q4>8I72TI6Ujkrd!q?Glr);Hdzbp6KEVuvjV1SCiza5tU@wtj=npClVOt$k& zb2%A4?rcOL%khrjp5Upw&E4*azPf9=3u zJMh;I{Ivsr?Z96<@YfFfwF7_cz+XG?*AD!D*$$9D6(2YJLlKTRQ$}EF&II)-)!F{_ zVH1~yGl3r8lVAWi6LX#Zp~y{6JlXg!Mn6&F{}e|4KK{U z!67GEJy1UFFAmbP7K>UNPlQ@LO>rs0iN^OxqSeCyvnYsj+oipFiWm&=uiyvBV$@B4l}+{sFmQ7=ZLMrDoj zBUyHNX|4)^p+0&VEtD8Uow~PGp_c{GI;TKHJQ8Dm0J^(NvBmNMpu`~GUNa6qyJ%fl zwsw-<^VT!T8$slN7)coDUTOWI!HuXmV{cX*l#~BlopVkTPN~?R{xHgzbRrYKN=z`p zY7Fd|eq#;uN%hpvv6yi`mimw&65Me=xRf&3H1OLaDP z{Jr4aLvu;K{NwM+YFH~1qNExYWixMeBy2hnedpv4TC8jWC2xs{Cy3RA^g71sPJ9I> z$HW$&X;bW_m1T92v?vpIJad}o>;L^dX37RLTJhEH%Q?VHGl8Jc)gQz`g3I+sHWNKo zeInwIz1hre>L$YtgvM@`l(#n)nY8B4Zn7a-;ucf{G7KB;D2r=tYt@ymE4?1;OMjco zmk`|K=V+2x=2*iRGpg4)qkQ&NZ0dtSwVy4*#bfkNY<{zCD#oM-#!Ao)=H(u*gUf5f zHy<;yXvFK@(!z~;dG!}Hj`e{_c4T*R$Ku@)-`@CShqxvAv7h=%{eFEIQn!UZ8yL|u zncKqX#T=GlR^#Lq6}{+kH(3jH*5^OH(qGO<`J0lTBV$7#M>IF5f^lHOCRIR;GG4(OcoZKCDnw<06Orr|uw=gVu@+6Yy$k*{7NZeD(y8TJ{ILu6kcUL z_GKqmC-2;B*B1UehB<Y9a?oELlHL$r09i|RaA*oKT7+}1j00p6X3t!n?3$`wfD9{j^j^Iz z?7A2iDq>1>!(1ZlL|J2cminext0&!_pPB{B4J9d#O~5Vhx)@dKIi^2ZoBQ`k`#T*{ z3Qg(3W&=>9L046T$$F$&ck3y@+F4M@uJG)3MYvgt>y!GI#dh=1hwZrGy;1bk5tj9s zd@CGo;k-3QHGIz~;iklJ)4-lUYF9+pADX0HdA_)NqZQbmBONS#Vqp4#xAZZGuk@++ zeN7pPz#qDYZ3RR8&aZ8?DOIE&S&fYRoLnhH%DTQyaZ-}qfD^7Fslsyh7g3Sa-7plb z?V0Xmfj8%AU~*dz;)r2Og2D7&&=?Qa-Z%N03!l|xd0~HXog-YpT0vj*Vsv}unKN(F zqp81iT;zoxj=;?#y~CRTa}D(c%NqBm|3Pz4_^{tW4=(A@?glqjBoSQK*I~oLdFvyz$Qe)0)4BPQoaGP^-anvlCTr-; zDCS)!+QXCIb#NXD>*Oc*adWonb45&R(YmP8{EUV6;inQkMez5WiHqDi947MvhFfep z;gE{`EL02UEcI1D&xLfAKT)#Lw1P3hxG-8=kT~ki9IaB1gO@S>ts2+Yk*DhiMj}f0 z$_H~i**u(AoXIzwm6dn>`W+t92^ZwA%`A6Dws$@sWV>HJ?N$Ik=e7vUM$)Mngs$bm z*tE-su6deshO#fiK(Kdrn+p0|qlehHY9pnv=(UeCYPZ+)4_R<9iIWaAI0<}MrGBp#^!V5DMZ3QN z(7onEFa-sb?V{)^mYo%=fb=--{0*4zQTTFpf0qHz&Fx zrf(*pDNb?j6cO+xq?&nSSfy-?v!vBG0ZM<$mslv%h}rxk1&5!G`=^Kes!y%9{!?AQ zP49U^%Z4+AkF%`IsO3yXoLCv*z7j-UQC^Qg4TXz}N;(I0XZj42Dgh9}rJq*M(L7>;la z7#bK#?-Y=Atnq~Ra?&M#-3S=hWWl&!w+mlCnM(>Wxz;V|mNaIYBUm zR{cz<6>lmq@D0W*CiBW;G!U3Ghe)nIR;T%kOo5^C^D1GMc&()ry*+D-qoU>;S-Vb6 z%*`1rHqufD0;U9zwX-__4?9X+rGTrbvOo#R>jbjhgi)o}# zR`a#41&EcOD9dp%^il}lI<4@1hM=I)Tpx=3{lwGdU@+x?!dwiDkqn=^2^gNU!ZF$2 z0z95}dO4%Sy3!E-$p=&Yk85tT8!P?-csD9ozTTFX zE?Cwa;g4tIS0ziTrAH=C@ALT{ztSrYfNb-zwez506!tGj`tQx*rgL%wgB87TE$+w8 z;2`h{5rQ{1X~zfb3OJdqYV(ZX5RDFBL1>Olz}s3UYP^#f_DhF*$@c8(%jv`4U+;t_7mw~_OXpRnm}dHj)gv*(e5~MY z;5B}vRsc;{Fa@k$+$s3R-dwJ9qc=|d(L~G$`A68d4>TICw@pX`6=nctp(WfGE7$L* zQ?okA>6s&5nIld7TEdyAP(rDzh@PN>4e!hRy%X*OBXvWeHgRj>gY5ilK`xnOnrM-Q zq?2vKs6lGV0LO)fH)n3tt`X)rERN)(~na+8@bcA0$#vTm3Ro3QSXHR|yzn_v{z&35jvb!C<9o=LN zmwl^6)vWQY{n*$1Ll@e*5%wr0G>#Fw1n!L?wiaH<@OfN1|}^&p`*ZfJ5+kynPT>} z$P~CyxJ@^cSU;3Qe%a@G;M8|jC(+?^d!cTw!{xUO z+OL$i!{4bek8ww^&!~}C%r7~3UhtOt`T0x!sh>QG>%%p&j1FsZnPc?KM*PitMxQ{c zw5lUzVA&Ut<9kmX#V*A&?XR7twqG$@Ar`KOt|daHYJDNA)E@WXJ+Zu5;nmN!w?0!< zb`=#XY!r%P9>La%nC(NLHgHAT_tG~r-iimLex+EeBIQm>`mLrzQDqUUUmcRGP$Z=y z{Og{?f(-OIfMD7Q>+dhPF8#bS`&j7ZMaRLOwtLIKgQuTJ*an4ebPa9g{sAZlELf2q zm6vG^%?L%Snmli9llMP;r9nbu{0#p+H?ja?h7|iEB+T*ZlZcAopPu@I>1g_wGu~cnK~=zfIk!g?N9UXxnA-Dk z2s) zGre*7z2-%?g_-%+bz|V&X$hu$Zg-A@3`gr-mmss5M-uz=3wrBnt%z6x<1H*W{^T-} zUPt1OqbHeMpas(=g6k0`2oo}@6GGlw^g2ou|H;L#%39B>;zjd0BQUgmt<#V({hy2u z;M=lnqy5iKYq`}qy?-pOoJ}}AO5_f)e^zBYTOA3g3!uaRu}o197SKc5$_L?yiRlXoS5VqoLrH*HlCQnMD+xHd*xU}ZKFsL+~< zGD>CTTEBgT_;mKLzIq*cRChY*7&Uw?J$dTl1+CiVgnW!w0mFTLbGh!171WbGrx|;l zN&HS$WwX}#u2fT18*KI;=+AISE2YB-)CsedJmH9_iuzfoI;Cbq7msVsEc?b)Ts`P_ z9rG>4C!@^y4w)XQdm&Nv%DtSrG`Zsz2t+ z1M!>C7*|OfeLR>N;+xF5ypmI9;_e&Z?Rno8*|26_#*-rD4;vFckTfgmaHHm8wB zrV}o0$v^%!DIZ0Q=-#|VMBP_?e+#&5F0f|YQXW&d`s9r{C#|114drk?wzyNZ-6Whh z7-xYsZ?+8ZTo{Ze$OMEGuYH?^%LuP`Z{HV3Y~)|Oc636G(X50h_2tGVRQ<*;n{PMdeFt>B}0N+xJn zu+}%^Y`rKkihY+A=O{e6_^{=B`e@?A`X4+2De<~brvpblifF-qN<*x!duEF+R3!GG z3*jcQsPs1kn;T6};YTDZLK{}u;ReqvT~2nP2Spvh>#y$gt&7jJZKeGzok09;aOV|d z6K78fJUHwiz#9Pj%i9nfl2Xkse9fTUo$lSpdSyW8c|~HF;^ckS6o0ULA^KYchTGRNHt(UbbfVy`5MrkPpa>It1!j_p_nadMx_6mOqWm9dAr730N=*T?FUI~YgIe}xu<(3^Wc8u zJT73j6_ya81PM{ns@UU9&k7LvOvRj1s646{Vg96Nwr-(<>;RczahJKWY)ir(1viPa zZO+1s8Df9Uu^N}{T1k1)h#tCI-sqMr4|;vfn-Xrt;q(ZYJ#Vg9L(UuZ*h<&G^j6?9 z_B78H&^l5fz1dC5pv4RS1E!0j06ZC7Kg^aslROz=olAs!+d>-`O2d4*g|3JOBi!2R ztvT*DiB2YO`Xzgf)JB4}Gvmc&E5zYKU(03)u;MPOrxgU583O#E5}9%(hxwV8D;3dJHo%zFx=B)$ zm~l8;ygc$iMRLa05BIj@H~Tx}9!EeyMMb$kIZSvP0m-Ef+}YG8o3lESRmpyvU=KF0IcDq?)Vx} z)<2MxSHi@9@_HvsVHL`YR@x|){-LVRVejXg`6OosOTS6oUjTq!opy)1hIf!!&Dd_T zT@!3wO^+iT77!(n{kgNBY9rHoa{~qxc)$n#6$?f;o6bEIHIy&=ER&Qyr{L^HZf7R0 z*DNKwdJ3L?9X5K9iL=u%oZ5BLQ9C`xq_60vnn;z`g23X^pi2NxapTJBi)=k{vTh(# zd75eMOzc&Yhcm{8P5=kjl~M1-@=VfU%anYF_Gs(dv}&st4!wm+0cmnJ+9Zip{}KHZ zpnHeX)~yUVl3%jaY?Bb>J8Z3+RlXJ0wm*ZRe*8%iA?A&3yj@ledY6JBEuW72FpT0`0vw zQ0(WbfOsp_Ipf(py1)J1EP>`T$=|d$XJ10})}w0BU`l*mpQ073pG`;6C}~(5(y*gB4nyUrutZIh0}d;wT4)nHr=UlAF+v~COfDwQUbWY*E1rlR9X-XbL~=9 zp3T^tNZ~1SsldC79-2fK@6`7i(&%r#wV(dHpi+%`F%bkDi|Z#=R%@#XR#7t8+bfCE zRplW*hcos+E>4G=Q)IuHep-lnS@?0^Yf`>wUc`0|cH_$@bUMkd(gRioThB3xHHfOE zfS-lljkk5MM{F#>St~vDA)ThAL+}Bfu>1)A&AvZ{bbPtZj8%$NQ(U=~ zcBGFLPUP~=z0_*IeE2H=_1_J1v`8f>9lo5KSHS$LI(FkwDY2B}Qt5WUFVQ-{NeM|B zVSwf8Y0YjcPWJk^@8iG)uJOux%{4jAD-Ce=F_i9V@J&HNi~mk(cTOv=G7o6otfQS6Hjei5$})%iU*69w=GmZ z9te`Am9&NP0o!qIcU-Rq|H8|N@8bo>ba%%ixu#0f|JvZ@80Fjv(+aXF;VEOTc)s4)K59rAKKZ`oymayB<*P5E zkNo0)RB@kyUN21nn^Zh%UhDYmDpIWvEAIk!`_qyxThivl6d^oAkXZxM<2$|bxJLMF zZ$I@i;3*UVWo8n8CR6turVI~d~`ZW@6Hydh>ppZM^Unx zL+oQ=n|tGufO7lkntGR4FxhT#T~y%)BFFI3yfk9aN9eeD9~>GgqGkb(U!{o9!FP?LKf5!}p>>V#Gd5?kYG?$Zog&iLP6~Pe^4xfX+`+o1O!q<>7E4Q#) zF%jCRRQZKe)d!|iWuqvYS9!m6iQnnl^Xl)4C-j=c--Gq5+aC8C6;6)NFR1UIv5gKh z>V6+Jtl|E)7>Yt0^`aUIN62D>X8aozw z_VU+{l2rJ0hA876#6S~#xV-C1QK{Pd8B51{!*MPtvBMzV z`RY!AtB>}90Oq~Xwf#X?TZrC9T{g5}#4mNangOc384hL7Ya8`A=~J)ec7kmO za#+$b))yUm90KgVUn=B&+a+<%9`t8^y_5tx_LNvAKrT7(d)+Iv-?0{PKp;l&D7KCF zs)12^lI`17?*5_@;}2fUhbXi36WH)Pu!z7}1#hL^vwM;7fxKrIZ;%U&`mfQZL>9l( zjQsCVkgP&0@}z z?^}BMNu=Lbh&u448OL-pBNxNs%W$~cf0mnB+*9NX;)aRzL203%>GLaL5idF;iUtulFOZo+j2Q zfu+Y7x?Z!{sxSMBdV?+H9Z=}}n*;(v)^7lIFsmQT5%DmWEiQ0iT1N3abI4lgv0kC0 zo|^b|#b;8iV}0#)Zuw}#^$7ZDweWowi zhTX?YV8D*}1C;6&lV;1*f%N{@vd#>+n9u{!IISo3+=oBu?xu$=VT<+$QBEMdumjX; zR!x=Xgjef3X8K-wUX5MiM@ct*7Jd6aP&TNeD9O+ZSV>dSZt3derug>d~nhAE$m^|+OkofEg;7gu?&8x+uP%# z_tXV2QY4ZbK{sye`WGjzt#N|RkCQG`dy(IQ`=p{~mxX59B}(@Y43S^Jbe^_V#`?t^ zqnWHF1HxF?6&$-_^YqA)Sa_~Fjo5;5Q8H@yrh*5wgM2SzUsla}B#KT-f zaunJameBk$%KR}Df|c?_aXOK-#n-)sYDmmsQO#c1U|c(6Yc$#9Sl>c1{QJk78E+_l zi+}^)t$enW>GPeZA1tDZ;$6Wb`=Im9L6(R;=h@^}N2=ME4Z=(=x?M4Jgo|i@QIfuG zm>ypB5{&Of$1N}5gC;2gFK@Q~wVZZ6mOO};`#T&vswyhNjpm-S!jj-Lu&~zzjsR4f zu~F}e?6^1OrR!GQDN~S?=I$t!Sl3Ysx~gk4T1_!Y^fPf0jhjcNLYKR9sk(~7KA7qs z2vB5s04JZNPNCRKx!x%DhiF?Y%j&#T5jj8y|D_8}_F0ON%P`jviy)fSpc!7j{CN=E zyK?K>jIb-B9dmHrn(WWAL@D|meCIPwdaBcnQ{-z6NdyLmgj6iAjJfh$41XCqVo&`E zq72k-`=f&9QK=*A`~nz9q(X;-CZYTGfD%5w`PG3B$ATT%h|g23MahuiEsvh)ggYqN z%|^6UX-6)J3&uRs18wDk&PS8>J0&6n0Sj0tyU{w5X`b3!%iMtL{`GUS0Rt*5;+4L} zo0~C2FpCN3(=qN9k9&|qL>=C!+iaJLckU5Z_^bC}x!L#|^QcF9q<`Gs(SjndI$_*J zL=jI#`hOP1&$8a#y%s^_{CKhNN=r$ko%5FqBs@unP9N=HbG&*RVOPAv*}qD-eN8?s zBcJCX4U^B~d0N(y`ou{2?z!f3P*^VLxQLR#gH2CUyA2B|(jMQOmY1Rp-epS`^1MY9 z%q?-p{Z{BLEq)6VAaJ8?*8=X-*(grTNFs7Zy5asIRmSJb(ftq$k}3k30dX6B+$w!U z015`2$$&ctT}alYNN=uGgHf%=s!t(b^ME!(r>&U59cIiQIO2)iyyayyl8$LNQgVM#zrgN?3tN~Gy?g*nxF8q-mRxxY+O5jKfTL`O+EM>js zoqm9HzjNa+tJ?<`bHOl-38Flt6JEN44+r33r(8iz$c9e`hx`$4DlAD2`F`Ex<>5sM zNOxb(?IKQjz#ZQR#g}j!t61T!(8oELpwO})N?gNcm8;xa0{{r<0vxp}@lJMa*o~uv z8R6OX`w&XWdGE7_XL5;D^`^R;KZ*Ty!*fAf+pse9RSY4(n<%WO%ZU}ghl(#=lj2>OMcYrUxV8qhn8(~s>`{vwvmi~2&MJIQ zv=wMIkz27Zfv%KSH+wPx`3IuF_c+|8UiMhwov}sj-jU1rHc%=^p7IABZTuptr-+iR zf0Z>5%(%42%bhl6&>5KZVEV8=JTM|&e7x&%0+qhX(7@D=CZDVxmytk;Sg=c+1&2^! zPb<)74yK53!o*+njP+kg<|>Swes4t>+)gvbZgKpO0|iX;>iIcVTv|skf5(`lL>Qnd zu)c8$)(|QG$Xv&)Dh^ofSsU``*>6QOyIMZ4MAlVtCof={wbJr=F=Vf=2$Q+8;^DV! zGlJVWB;@()TmO}f`QCl5$4s>Gzf0d)wvjYYcj#Lr`+<8KCLyj4?xk$!vMism*xS~c zc-z%d@H=TnhCOXues1b1yv+WmS~6p#bu_pj(*5#P$d|MA_7yt3-ulnsCM4aqtvut{ zjj}Iy15~sA8pQs+i3nC-0`_7rN~x!al^`^mV~7n(2q0 z+{?E%>?tYH{<3mTy4Q2I8)x1BNsMT&nebtU4$|H7antZ89=B4K$8PQ2G8>+(;I+ezx>%|0s1JwK4TgPNiw=<1X7cxYoz zUwR6w>0FQe7Hx?4r!`0QJnFozlB z8NL5(zE=8lNQQBzybg1^T$a=4lzh^NM%h^u4E)R|N~1 zqbj~B>@!|>^WOWObT0426e7`gQJb5cqc?Gyb^G_=V~bJ?^4*?j4bPHR6IudzhMe%#;R>=(>wDg}o*crLpPguZiHkUQ zb?ugFBad$3>$~xk@Z#!Y`%?_qXiCA`)>zJZ9M06dYBhdn++U+8%Uo~4|BjNJU0GS} zF?r?_Ms1djNwmDa z(T;GC=#%xN{35SZR^2bB{N#HjSXy5N^v7RLle?DX#GP=bBHbGTG*He!U{v_1mDxYG z+Etzxd3K9Vh8EVfoh~c*C8FD)A%1t3%_2^X8+h27OrpR9!OWWq-WLU_-6$(`?f5|w z^W-gg>@)+#5IRGXH_|Z`6TJ2aiEX=P1n*09C{A5cb?vf&7Z``~&>ZWEg0A0>ULV;Z zDWR?=oCJH!@?fIW^GU#}^rL~(0gPe!DtrDnH$#~OQ|y3W3N}C1>B;p^FbDuNJAxCf zY|BSKe0_0I5x05CTVK3?O1TBKoBuWb>fHs zuZPF{tS}Zd37g1Q%3zmVU?LCVHMcTWHeiv;5bC;X1i65{fmqD zj>a>oGgBip$?u}}GKq%x?sT7hrqf6|S&fA@R-|gE7zE2Cd|it*Y((u@Pk%X4!qjty|}s5BtWAvV_4({KJf%<&+g=#j*9yV50PgeI2Ri^=nvbrPN^ z=<#{{l=g8sVIt+gkFk`2ohG&4L=6?K5m3@G)#C(^jn2GOufEVZ7ZwY8Fu3 zgYVzX;`P6Mbs~k3kk=~=M7+SWp^(v?f(iOqop%1E{w>=To1y23mWONapAoH{k`l`* z|9MPa^u%$mIBEdNpk};YMCrBQwWGut{PuI^&TX%p)R#{m`ebet5P$v?IoWq%-l=$% zqUN{GN4kt}=rzM^rJNY4<+ZfSROU7Mlpe_uC%;oY80OI*Fb0K4u}l)w@xCZ7`F_yT>sFnub5XvnpC+#~v_lnvi(amsY6Tz1i(C?)P0bBwGqKV)dAW|iU}$PHM|&n6B}+vxWXsC$FT zzP27BAvn7`z18vEl9BqPbZ`Dk0{E>VdHqvE7P#`;d>I`~$^f{A+_&^guUr>rNP4I%k}JX#9}bW&g5zfgE*3BKJ-nW7wl2%R5tE6@BL>Y&+B=i< zgFptnHrI-P zmvq6h_0s|>>%GDFg~^`K_3OTl*3n{#bD^&pU611*Tl37bFGPxx{MnTNVBgS~96maN zUiIE29?_G#A68c%&^)L;o!URsxfOhM{F3YL_;DzzJ-N44A|%~us;R6E{>^Lg4T8;T zGW690o9Jah=YuEtS!p*w?oXUPLm7~6W>rx?fTE$A3?Q%&c_4!By_sXePcWhfMtENL7mgW5A4qXFaAq$fqFBs_iLoeLn2uN zM8Iu9trICFvQLk$iR%CsH8>_hr)ELSBhXvMRwn4~jA4`K=YOE~p3cBo`S4Zx-JCF= zaxbaWtFl@e+}|pz)akV<@?x@RajO=B`c-;_HnO+OECbiiD8`$yczdZ)c+tu24y@8HvqgZq0QxGa=+22=UvJNr#1U1s5W z@l1Xw6QT$eJ1341J%c99T*AC@b8&T(F6OHrVYcSmdGwnuHFt?UO+GfSRk8@z^&+C3 zPWkC374P=DmA{;urfKRkBxqN=xI)NXoExJ3`u!|+SH$s9bb$;GiUIJ4GK`V1Zq7JD z_C-)KZfA9Wie4_@T(Z;F-Q~EfC~s+Y3`lNVj(G7uyQA2#x|tUi19>p{HYNKew^8Mv z&ucq z#G0xBX?X6rf(R+R0jemaQ`nfgr`5%iEiYpDxg?{g;FyeHAq&)OoH*n^=jMf=-Bmmx z*rmkNHa@vF#B9KSr`q=D5oV>@$ESou<%g_{Ao&Kl2sep?)jkO(Lroj2XMpvdg{?Pw zRg9^TYj^%1_-n)WCz0;0Z)NA}#C3W;^fUExya zGxIo<$~CZ#y%*}@%+WpYDx{7aZ2}y%YgTEuF?Ah~r@@taq`_pyih3c<--kE?wTpV9 zl?^4vVHy;B&EOk>z#ASr>}+XvAieLYLNZO@ltj)34tYU@1bpLE(vBL_r7(~giS%Bv z^)FCN9leAYoqbDN91F~4%scxj{f8nW`c3v~Vg7SeG|&}%cEo<&AEk^zyoM2MTxvqx z`!6gDsU4v`3RPSch{v+Ox=LaZ-%a)RQmo#EFm(ZS+P*O+TcF@-`+T9UHZV$GpsS0= z<|C$BwVs~})K$`%)p`{Z5xL>m`vo7{-HJoFb7XpxKb%!s6~0%cn`(aZaOUragMxv) zQ1$X9Svv>2p$Q|JY6~<(+0{9WL5uw}bs-n#uoQK~;Bg_G<%{bud0gOK`+22mQ-6@E z?PDB=`Y`d=kg@L8!QLZgPhOt6{p;?p*2-y{iz5b#cZup-D9yTgDC^pAz*KMM73T7~ zHwbxg$4cwc4LUrE{|CB8<^YwTK}~MHUTB<#7{2YR{f;B!B!KgQ9ULqiT1QPVt3ER& zdO7riUQ(G{ZB9bSn>i)r&JTUTC97F5#(3;p(oygqs6Gt+52UN(D1}L0i)zE}4dgZ_ zu3vWC8$Fy{vD=C?G+>lXT4SIRELgpBkRAs5Yb)LtBx_W8`=i8WQwhJx!>sflZBD69 zWDr0vk#(Z=IbMd(KeI#le$DzR*aByyU@Ot{3%Q`SxF2dIT-_{Ed*X@k%aQ-#x%o&C^lQJrGQjYO3 zGp(|3cF4}*D6lwKm34OsAUa}M%KJu07qT;|)%!d0;v`9bC;M-)lZyRGLCX`ZuhL)h z08N`kiM0gvb?>{U-p?TJMu8cE=jN`7?zhZ|mNIO@aBx+wtj;azo?&dFid@ZbDpO}rf?&=QcY6>}{+PzQ!(1{^J1RHr2-){5_ z*gvM!(rZJzx)u`&G-ZL{*WIL#$>sjXEcyTRNbZY4uEA0@RI0Ht1dp=&qC9T(MJ4bpFICR^p$Qa>wFzH#rv8+6f2~t2o1}{D|8qyP+9~ zFSi%QSQfeBpu$e(`=v|&?7daO_2Me6AU+hkW%<29Q$C$RbXJOod?;e+69{}157uQS zT9db`A}CztwL4+myTS&OA{3j0-|ZmktrZJ8uIJPmn5j1^?|(lZFp^y(4!8QOcS#y@ zeLRZsXg!OC7r2drWg|%d+wY&-V`m&eq_m4UgB_rVc^!x&CEn|62pXkWu$Bi&el#Z| zJ@VE;FT#VSlt1xKc{~L_#yBjy{*oO(*c+7lYhe_*ZY*F&3rX*pSc2En>BL%0 zU%MjSo{GL{w9)$}rauRY&Cfp^RIB<-$2aIit!9N8Rlh}eQeyui!4jclnX$~msOF58 zj6T#Z93{e4Uh@&;uqOS+FFkmfC#2zR1fLfN)847j_CtMh-hEA21$3=sZfZAYl?oWQS+JJq@%Ya{eyf| zp${M5u${!L#zTDBy(|}W6DsU?7YcrQ$4^cQ3Z+Fx?~@CikYw4wX9z0zVwB9Ai}LG= z_2kw41HJq0mtnm}# z8^G_l^)pE~3cL(s0T7igt8aPb^KkDm4U1m3<$rgB!xe;bHw|?9RIOWb{La4-y)1k~ zwb$enzd)XjT>HF`7U%6t)5(`$UwHh2jn^*J@Ofa@zALHAcrNHKJ=OK#Dtm;-Iv&y? z(RG%&GbQqgIfsqGPAz#_c2F|u&&~1IW1h#g0ov0May1SfVek(Fd6f$-Y2kL2zx;K3 z>&=E>Pp>{-YlI*GF@;xQ#BymiR=Y1(IsLKd9bR*DXA|TodYil)6lxU%2;ff1s| zrOx@CdjH_Xxi^laMj4$<9vGDXc|)Z!MuAV#6A z%IU6&SK*TmCAB)a;WU~Y@(7N1a#hd??EPV%^G3-f4x)eFk83JGAWv(?_2D33sO zrvG1k$m)+ffo1Xfkx?%cCuRrTaovb&nfw3!3={zXxBox8jQ^YGj@V09VEoF>_wvRP zKx>1qo$f#zxB5n8*1>%wb)Fc9CELg}ugGluTH&n$I*#`)>9!~SyBX!lcS2BE7j$Hpl#vyO)!Hen-hEKtWawPoOL$aMFZUyoDY8V`ve8Q zCM6h8Ub7P(J285`bF{a9Tao^=@qvdwnk3$puhviTqUml(gZksI@yot(!;i_XN{oLG z_~nPs9=1o-7*g3*4I>HJV}E7M%MW&qYq?Dchv9k$jnxj05pG^8Ztl&E^>4Ipg2jDq ze0;rYa?JZ77@Y+_+F!-Q@A|v8-2BP#p~bscljPWfP%{R8A(ME|y&sy$rolhS--c+& zToHW}Tv;P*@hZgfY5D*xLJMD8hHqRudL1F+;Tz6dS{z#Bk^NkY`f%r4ywEkjmFr7m zmDvHK+}-fd%bzDIRgd#M)^numSAQ-;tJ;BP4?z8pq2CThGO2k7l-sW?B<`OWQR{s# zRHj^#-4f5QN3##B6?)a-fw~ICeo;ekLPEUojC9irNORhXgR@A{q{Hv|F8eK(F(BXK zh~gwX8gCND;$FjK-UimVHeEhS5W27WcJ8zH{vFEUE)EW5g*>bTx*{RM6%$|rz)Xtm zU--IIo{!sowu(`OSW(f$A>4T z!C`qYLVVTB^X2t;;|S1t9}A{zq9%LM6rQTQ@=I{tEx($(`QAH+bOKey)mw<_?{;65 z1jRUuUO6{tU?78l+8!LIAZFWo@JUIvI1v-{S!865+$0e^fx#_-- z`2_W}La-KKgYCZ|@i7RT615+fa#OdfO0P4q z)^_M0CVP?Y)#NiI1;I?CoTV%*yC|H=Zq?&BUlN;@?@mq{w00`k5tQR7h9_-(lbg@W zh&7+$D+v4~Es!=A{AF!Z6Ua4AgX-=nC;9hIrr0wVhyN9sSyu4HN7CgsxpU5Nzt8>9 z$rS`I09x|Wn9#n-C+WNdfU0>#$FVkbR3K#DqM6?IEMACMPm*$Pr4>A{XN#E7xEBIB zv@unUmHOtUOjM{yeV$K0&_3ueeQO3%bGhiHe6kmwxMIDJQqi~g_%8N!7kA)+h18)C zyilb$qa;_6F7wu{53h&#ar|?s+~&o});Tq%o2Rn?6pzXp`m_O#q~@s@IHFq#aY79y zeTBI^&wx|bF=Rwf3~fv#)YC}3g%va5-e7$DB3UQLP>45m3f_jJU}+v-JwKk_blm%f z$gmH?qZ8J=qS%V=JwDo9)Xu7kYFK@W$8_0wc8(>Y_RxD9dFXA=>YC%vK|YWlKVd z$VRDsmfJSKz3E}w5dbu-``&8LvTC;zLz9CoibvQo%Vb(!FU7Dp@wT-p(Nfwu(D0nQ zmx7sbH8%HH$Td7eDByzTTs{qSC}=!5EjWQ6c+ZS!V@@=v5^#R_QjfL8125CYRDsM; zg}3Mje<|7T-r(RC9gVyZ3J^fSZ&zq%ubIX$a|35=xwk78X*UY%-T6LNZsqGoGwKG6 zbH~p3<#vb+rjvRUQAaqe7185^A5ZSXQ05J}_cMRWfBN~;|8jtmNYjFbOdjuEis6cHq4#b}lxuVXi1A>RtNgDa(4Wn6n&wPQ+vFMCer*uf$Zl zRyCd+SLncLH+FM)t%ys@Gh0LF#BRTiVwlT`U)uUqh}W;_6b8oUVWB{~1y?Cvq=!>s zAZOh{ac$XW`ZlBe(vN_jF1Pf4EfI&|1|)oZ*&`^XW%y^@Fgc0)zH^L5Uw)5JG=!21 zJ?~sA`v(e?nXFIwhN-$2SkC8m?o+nmb-EGMneID1Y1mXuIc>US)o9t#KD+P_WO=7u z4$%Fq@h+FzA$D4`=m+fy7I0@w^Y(@||HAewS^DqfNfUTDV8HGW33RJ3I&JZ|d98BO zr)Vg@xK^H#w4EI^X+em&dOk>d_uw)nCMe#gLWH|;CI_AV);2h?Q_&vZGs{(ZGOQr# zOKK*N*nI0@3YkRFdtf#SZU46_Ayv$*R7$_tygwb-=nvCYNOF7l=Cx%2|^ zDtr;R5bGV32KPiE5>Bsi!L-dQXahu&?uq4HVyK{_3-&KcI1g)rvN(Gi_))rczamM< z`sk*mrUh|+oEwi`tpk1-Yh;9vE5Wn=H_qNWn$17{8`e@)~d#6i`t@96t!!w zwl*cS_KH$_Q`BBX%~XvTA@-;}Q=8bU5;KVOxxT;qJkL4zInN*Wx&O%VXI!~H*6h?`l{lU{&X)rB zQ1v8n#-#3mAoOxH4lm~X==aS%XTyjowd+Q-=_9N_MMXQcYQc!z$j2NoI5a&=%{-x+ znPzz|qwwB0`48>)3(8ZURtax*j9vKgB{Y)AH6<)QBu@{$+nCqSl3~r6ZC19q+nn@j zE@SEa%4arM~X?By0`hnNVHN}p(+hp%w4s6AlP%jsu+O2&%(}uBI z38JD*ltYJvdG`xL1HNJ|7RSlbhMlQKsAsZo{YBRCeG~od$&A#<#nZ(B>p1vn0T8gQ zwF0_|?*B)U*Q>e$Jr{+r!v1*DZQf7`z(ucY#><27pEPjAp_TP5c_!@Y#>a>l#iyay z{D%f_QaC1&^tHEdGWBnv7{w}OPGLBT&)*S9XH)ITLS&T9%fsseF$qJ>o`H&ES}qQ6 zDphuwzyif3R#`jolh3!t+$IOHnJBUVufKeb{ok)v?N9PRw*ew%l0IK`w@Zks_#$3d*GOUMd4 z>W25kODH{F9%CuR9j1|XH_1bYwQodrl{?92Eu^J@U;^NXbsJOu6f3cgmtEbgLU37C z!9erkmEhmi)$@T3@|cpGSd&^e%Ce~7C@0e@i{GbliKw2<}oO0NRG}x!TN>-VV$#uTk6S)rd5v#n&W_+lY?bmNH8igwQ>zB44FVKQU z-U)a}zO$`ggZj9LweZQXw*HA|{%%p^Sz`k{ z_|*DTn2oM@^`}w__x*G357fL`bS$dI@FV#qoLvu;fp8zsj?G8Ph$EFRwcI3T?=jff zzqXQ-$5rt^zp8HKab(-bb`oFAUDx`=p;h1ie0K2K6^$G0j{L)I3sHc;3tTAE24{&D z_`um$F5eqo(l${gg`7=pS}7rwR2A>FOB%dGFE)?dCOF{jaF$x*aM^&B1z*S= zqqh1(bNi1kxf}JjoBgP-t4j7LYl&C-*1A3I8rM_La8zx{h7+xIOLT+tCCK;L#So^j z#Jdeeu=h)J3^ysd80Zg(^%efMIZ#^S5Q_3RK(f}vwuowR(Z^q~=A99FuNkw8TzHWc zz%|%kIbieWoIrw#?7i4{Ql*1378g8`^mAnm+SWpiS%3R^eRz(v0oHaevm(riYDj9*+@yMh)Qu$0ltK>sob!?X4=J@6ML*3Uy!xFE z2$y=;nlrJBEoC3o9o_uUHoKridFNHy#Y)vh03bNi_W%IE>z9<%EWrpWL>3;l3yC7avwJRrCE}< zl;kNqo5)HqYsH)5D53PmFVcYYK@|_%O~(07t`sPS{!}dJcKx}ze#DX@s8Yp9H{2i+ zx5QWrk3@4ZC#xfn2sVpk&X}bSFU`kAbeoNTq0B&zTJgDz?(nFLjZmNObBm_kRz=-b z50Nhogo`4j{NQttHKEPkr^Y=7pQPD!q@(h>kn*p4+s+Rzp^ zaEp=h%`3*d5_k7)+g+S_hE-oD+#J?gWa;0beN-4xC~V^5>5?XNDYH1TUNWeguPc!e zJ6<~Eva=xXn+CB8&^#Sj4ap9iG7loWZFd?DUOYjHMo4^97r_7)Q2vuB8ltqn2wnw40i*SXnm;pq zEN#9cu^|98`bR=$|GDFlUDEUZw$-S^kx)x!cq=0ijj3OYP`{GLnXoTNfBMo88t0iq zdvnj#?}QAUf6~NgPSx*M<+a|DGOoH?Ucbpawfp9DT1%h(lc}kMN6Eaa7c;|x7SB=N zkp?%j56}C-K}}Vj6CU)$(sc~>H2G2#kJg*sm~yTZK4GkFZ5Zu>Io-xQ{y`Pv%sU+L z4J{xMBY(ZUt z?iaDb3qp&8V%1l|qlIJ@3m5P>xKO7^ifetb0Mpk}L&|I1StmO;yrHpmU>ds~w#EFS z9_%*Sutp2Y5yh0kIzXbpLreGE;>V&Op1D9(j+nAS$FR$c{3hrT{Vi$y+5T@)(Q8|C zHE~W|>4+ziJ({lITz36S$uT6G2FjCYewq2sp~~k?E!?_g_m-uClO@nLg8pk8wXVu7 zA?P2DAV&9c)Xb4O_L1o#jRjiYX)`@hHaHx14dJqIM7Pr0Vii(K>4*@mTOL1Y66=1U z=YDQ5u5~0cG6OSc90f#@mXm^OPs~lX)p>M9^xr1Gjd!zPT|S_33>3o|q!&7HdzSb~ z#@)4j#MG3^|C5A4tIl(Y5>Q83P+&n_oD9UpLsR(eKUAiMh?myNRQCqI{JiJCnkToL zg!fuij}H%gHZH5;L}{i`GPL3Il;aj-a7E*O3Xff#vu>rpc&A=gZR~mF_#rGmOJFiq z?I>z$cF{BbJO^IkFNZf>mUG!y>gIw>pP+8fX%JJmLT&1j-hNcc6jr?Lw+YX$6q)0; z@_#$ZqtH7zUTNwc1ce~|U3z^BF<<|ZcLA{o%%%@ zy~fJFC1xxQmh_@xz-ld0L+URN{Gi4CoX~wlg@rjmw|ZhNJ!5!8BQ!r8@~9?N@Xv`P zD51m=t?Ou6ZIR@nl{M{qq(~~k%e*NGIvcB^I}O377ZHr`LE=LXsG9w>sym^-PMECc z)B8JWs6XxMspHhuU^6?Q>r{Rt`|eY*xXkwfxdZL1p8Io+#J_U8(%;HHc4JD0z8CT! zPpjRxG$s9IeLSKK4;MGxtS~@!yT23OYXwG$FE?qx+M@D0PfazR=O2C8&}9mAeNwxk z{P7K)-Z-)bgXnO!TH&j^5mzMCvR*fD5s-bA`8NzBd!qN}xbKWpnZ}b17THSa*hHHo zen5>+>NKfC#IdK1@r3s`*=S4r^kfl=$$BVzBIlHgAHz99BF|=DvIVAJ#pl`AqpT+O z*|eT2WYG*S^iv`|d-bNPyVYV%I8JPs_0%O7_hCNH1?LwT?^boQT}<2@*%oAsedSK< z@`=;Ahu84{E)te?93PuLGo$h|Z?8ph|yc9O!w|^l`Rq za)~3GdlbSm1mx~=kN!lmjU?oATt-8bxD)1Hahi0L?sidCZe@(XSh;2jtK?Ejb5+xl zW#Xq((J2vU;uEEkm&V6eFNVDj-i`G2-To;k7ePuS3vepD`bwyz!<@ypcE>uf=N>SwzmEJ^T`&MmmeI_h9G)(b9vQoGqc;b z`x%YT^|N!`dP`?f3GkePcN{-@3x0}k!)if5&NrqvcHblW!Q$cKw2(ZzvihV_z?NCk z^%`pb&K93HP7hbW&s(flkLnICxMJ0uF%GIi3~5`wcCoTbKj3@D%UhxIpM}NA>(X*j z48Z%kyk6e>v*I7gOowtK(BdQw8;CfHRX>bu-GT{QX6_!w_Zc!_Kv7Mam4NmD+BQ13 zSXEiP)G|3Ceed(v^jDPah&xAdWin&fa7ebpA!% zXiG+y_ZUj5kFgb~u6&bTtM!Xk7IkQzv=hn$PE z!R+{fj=K78EVasMH7z$~P(#nS+2%~FjlVPw)h-goC0L82jrUsZK_aMI^*d(2eK*i8 zGJ8lC_X+)jsT~j{jpowm8H|eu2mlOkN~ee1trIi#h~i`U206)L3U1cQ4FC^qVNg9d zhTrr~Giq6Dx2iDfN=-z#=%jz6Q(nmWq_56Ip%zp6`&PU05x@I{%g)@=5zwOp&PYS5 zrSh@H3wp)rYd9Q@VXwjHqxoR9 zmH`zOqUyuv5(k@TzUKdmI!tN`w!C|`xV+rdd<5!IqG2ETK4Oq_<`s|V!`|P1M5aw? zjd|(7N*fP17es=hv?_1&Dnr>%UfSo&pX0K32P-4=A5Xq7D*Kvw*izv&Ua(^EJ!5=K zeHbmDgwxLr0+O1YKXRJB#>oI2mb1s-MZP=YHWs~fLh1V?S!KQWFN0hCaN%F-AlLCp z|43d;-#-+ml9Fv?GX0qIlvT_1Ik0p7{C|b$N}cK*e{1@5iUaGTzW1@h6cwFx_A%)a4r26fXB| zSRC^5npr~3+l0ivQcvV7Ejq1qzXZFq1maNtn|sLCm1XakH}`2D`W?!K*gfrE`Scw0 zmobT@Bl-A4AQ^hl;`UTN(4a<(nd`1t`}u*lgsqK&g!Oq0?p;?HruYc{j-Od=21WcM zxlYx_HuyLKELRZ25qQuDwaiOPju#VXdAFm6u zScI4JmRskwb6j5=H+(`ChE;EG%0s(@Zh0r`P35@>73IL)7-kjkN$I87T7^uwy5z>X zLF^(!@0R`e2o^giu3Rv7g0*hyZstpuPJG<(GC){YTpAr8FnN2uZoNXtO7ew0wyll2 z@a`jH{}T10@$CFIk?F{?C*YGdj-p$Oal!H9t26Kqjhn`F^DjUC2pJ{0@$?MS8v$+Q zqvMq8h;?&GU8gKPM04D18=0RwT$KY)%IW|PQI}Ye>2r&sXsUPJLSgjy_@$;>--PBTrD*|m3N zg(S*2D&H$@kU}U;@*jyeI@8|>e_rUXgjXrRzaLS~RB4$wKu#e-nfDS+e|W^wBV24L z2a?`cuT5G|;g?og6j#QdCbhyn>!U0yl8~rf?-?28dI?3A46agesrc%q=Q8e(sN@_domP9!Hps;-kB@Ts8E;M5pukhVX|J+BU(6I zGsl{e<;l&&q(;deZ%O`2Q6+qSk;4)IDMrZB@V2Zv&W06nuIWAEPoRHo9p*e&bI29t z_sJ~RL{0O~*AMwTjZmlNZTLy)*dBY-S8i})ck@9}ooq*I{8f_20Gt|ciK(xA{~M7i z{o3nxP1QPW!TYB&hu}?0pqcstVHAUt;PrYhZ1bT$;=K`KV|I?yeK9}q2{r?d|EIvk z!zF|&*;sx|Cf6mSi3^?t&3O+AlaOG;7L?eB-P}5K7v%O9V%B_p>T@mf^ZxoR+q|zf zk6is+o$OXXgbV;L&%M}nCUpB>Srjf?Mwu9f1=8SGI}8oZk{qR1JEq4wBHn3yxAPIa zx&4Q2tJBKyO~q#9kELdws>^O-u{ic;C@L<@6CvWg$p%NRKdvw=mPd5Vg+^v)JU zyb7mg>azbM7srAIUq0Bm^M~Lys>@2r`&)~;Oj_FK^&d!72;RW*OW?z86Nf{vba*Wd|?IN5;{?G8~h2GJ6VHiKK==~%aC4+>&v0vYc zKHTYSapri<^nrb2{4OdDIY*#gf1#Pf`*9aMH?m+^x}RGUmi8W1E78SX%6(W%YT3h{1=^)Idty8{r8dQT@m`pd&EP;0 zOJH6b?eE2mV8}GhO&ba}6twcc6A~=N+D=;OIg5&wC&h=n32@x)2o$Jk{dQinU9b0| z-ueC-VXiYs>+HqlHPeYM-O}fJ(ZOzCb6WzkE2d)Xl)pb}>{l&L>vYLx)x*HL%qcKw zz40_oO=J>o3ga`1PXI;TqEZ_BPXM@~9m{nry)=jQ`{L*>Q~!}%@PdQTNPRoE)nat5 z+yf!nad1R&?L;D>`-?KOz0l`|q(=Tmz7~m9{%(Q9vhxYSjS2RIWHyGWnIYHX8qW#!p_o^n`0SM^-nZpE^j2HZvj z-dTa=+@iV%hW(n8LhApj+&(T*6EvKFM`0sx_Tw0zbvR3$S4-WY4t=v0 zO7=Oolxef#B}0cWGz2E%3qTZqwtnNo2XM}tf9HDSSoi&URBvrw_u@_s!^4s`0G> zjv8{-zi&j$R>hZ2qQnJ;v&;b8?Z9G4E~C14&rvVSju-r~=*J9^laCaNvtD zLhRaDf^YbRa8A9~9Y>vl0RaPEqy6`{+ShOvD&}TD2deE{TKeDs*4Qsw)g9lT&hoo(B5n-n#C1{tXa0}{zhcLmthW%w1|`A(0!BN7gI*y+7Hiv zC(m2u?XiF{yrEnO+R@64-fUtfLCzu*A%9l*HxKE}{(fxKHg6dIWT_IA z$_5MuTx5Tn99e8TxV)*oyg29Ldt#VXLY50QF_}H^LzK1$jy_v&mBe>Ev>JH!eMN_Y zC(D)OuPR(=%35nCZ6$sDt%qeK7axMg@6qF>ViT^!U}-6$52T|mWhFN{hctY(r)71) zPh(m{h^Ik9+NR?1%fTej>Q`2U-=Eva4nO^QLlgi2bvjmj@TJLAGKOY!nPEA`Eqf5O`)tqM`-8?({ zdDT?&%c{8>;2t6?7}6C_dE-X>X&sydHepjWva;Dd#J$4YO?9Q$naYeNGBicZ_FI+y zqDl)5PHw0&bbaggCr)Og$yo;D)qX(coiW!X&x9>T@f9N;?PPqfKELZ|x@n(imgd?x z%dyPC5o4fpDlVWCQ^vE62sklpna;>ipVcchP@_32a&9&msix}{IhRp|?FqaCz`btm zz!~Z8;UZk8PJM>5y`b}Q7}*GA@#9U>`RXb=j0(V>>H%?pdJJ66yNl}9>)OKHb)Nm{ zAZMXAgb4HwZNF)i_P*4@XX8Zm0l!|FAz<>?#URtIpWqz(W)1v!htAiiLP<)mOBq-l z=00#gA_?}`j&auCN$(3Q&`=`?7YsG8Ej`znOEZ3eaWu>{FuK zK6>Bjon^c@3p3D@`#!CCcW11hf32S+CMgix^Gb?>Nu?`?AFo=1x6`h{=7yd$FPPwD zzfU5c%UbOPC8$48R!i=As=zJhRBzO0!t~=e<(T@L^JKLlpQVzj5<%B-Wa%4SuVi0w zJ1;*1Y9(%Dg|^b8fcP85DEwi=o?k*oapQhFB}VK6=*%d-r!26`YhsS@K7(b=Cd&CK z?1^aS+kDmwwpAoIPDO20o&w+7j<|akU*^R8L<1^jAI7Br@YP47#}I+7;=-$(K)!9* zt-$**mmREy*=#_PDZpQg<=dDG3A15Yoo?L1l=igJYMML;pZg8}1I!*x?xYB+=}c>B z$=h@fRo??%X!uI8eO!9xkGrsn@pZFEzkKnW15y{-7<)ZkMC|N?7jz+p z7>v}@K;Nsu)m8o6zF!}$qh7C18rc5O|5}zE*U16_aPIt$-(7X*dh!#|68<{Q$(Y*k zX7sZMbIn2BurI3{gz}_p?*J3GuXUfI34ezp$I}oo1-05vhrcBLkvPQf<>DQj^)CJP zQGd?sFAYyUM`}MD-jR_YG+yA0441G4#BR4!2;Ruj>2R+9h}gM)&_379u_`$%)%~8} zjyui8$zW{DF+#%ZnSS7+2p+Gf@_Tb^rF{nPCb>@9Cf`@@r6=`Swo(els>-L_+_;KZI*dp= zglZ=eBL`{Exu0wLC363Gp!wTu&#mx#<$o6ym;W09v!m zk@#a91D?%H*{?&T*bnEfR^0BsG{q~wR8rjtc%~kUI+_^jmA`y}&LK``bWfM!=DMED zzZ&7pO@>k?cif9KCB@l7Vn03g*KI<#J~qZLSuTL93TfuYOsV%{Szo;*JJoONzsLw# zm53D#eBl2Y?XOha?RF#OI0C2QUiOQGTVE!)n)A&u->;tc+vq~m#JP;3{dK$2Vi29Q zzQB=4*j-fi*fA*b9+oTqQpR6=f}jV9*mrOKV{!lu|8n29;hrcfvhCw@tN8rmD!Yzc z1|l7xjTwmo+#I!7EsC4pp8hi3Nt~0FssCxv!PGwBu^F{a1o^vQF9;AWGJI&>yi+Sz zn4);fRCH)ltyOX;us@Rtilt=qZ9_PfNaCG8c#Dh94teJ3syfr|KjK=qwYYY55>#Wk zc>&~A^Jf2Mo#zNEd7(v2UL|9lR=Tkd*`*>J(SrKR1KHC5?JHt!C<-lDN+|bzRJ3A04k*I5!<jrPqAmb2&E7IGy7o$*SD z-H=`z9O~`iSE&z8`j1yZlXZ8Y+3PppV0}`AMXb6c7I+IEv=Jpn*KibHO1_RT&twU8 ze-BU6Z|lQhpj^YBI6jJjL%fL$nm7{N`Kr)IpAasCeHrf0iJFPr+KP z_-7z9Ubc!in`;j3{T1@Kxu3(VHy=9Jx0!V&o{05*z6uXQ(G%`|;_VKuLcA?G@Xz(9 zyIh7Xc?>({Jj6qa@G#ww4&q&O9jC=#<}mQcZ8PO^hXyNO9_z4obKD_|KLH-C8Uk;K zBVRH?1v^y=zv8V!1~2GmuX=2e-liL5JXBE|mMmhM+b+L1&LW@9-L}5z0MerJ}kJK^Q!crgho!7oNj1FE$KIvk9dta4g z?M}O#)6c6ydAV&%X0a=V0mYxliT%p8q`xOFiFXDYT*=pG_Y=tfYSPJpeXQ*Lq*GIC z|K@LG=v+y)+Uj&nZH7)KPg`inL#LOxJAV{JopWym|L2YJ|9)D3;s22U(JVSxFtOPT zKy;@LodX~%pjqY>U=&a8?YDB!ZAt4LyodK(DFQlsX&ku+Zyb7Y7ZLWztyz*HM1hlT z&jW7ZZFTB}zbtb&tYxmB{oqVp=Bg9(iKKJhPW;HOBmUYh>JIUNeJdw+_1t7=ZMoBR z{OL`~;0@i*1V(`maozy>0T0dPKt2JcUMsL}z%E?%U71ggV0hm+;cM*bXO(Y^uZQk& zUrS4&8Aac~Dq+AAmJ`v2%}>k9C*Jr3%(}Y2L$;knA5^uIsL}Kv(;x)iRsvxx8ampXMP_+ zwU)g@6qvK#Ay6-yMotm5Xr|jXsnd_qLF&mXV{F+TGNgA9LP@fNS}qK{hnoCHVjp?D z8=aOkpfRyOK24pScwqil;e_WfAiT)IUk#NByo_L9f@nhvRNha+)5*x%#h6>qwJh)A z?KM2*q2+8Y=5IW%bCot9(?U6WF`?Oj2nm{+?%V=}lCMf2PyJupL$wh94_&(paY%h!b5b z8-Fh}(m?+HsE`Mh`a`iyKk|6pSO&!hVqX&I=bg`cq(%VSuGv6t?-~OwJikcLJJanK z<~zzg{t_Z&P^nk_#H~MBuwP*Csca$~uxFg5(9Djh=T^CMlZB8^C~bXra0p)m4-rgp z=;vsZjn++qD57>U*2Ifw}l)5B+7gqAh=NVv_2iGoXYs~82i zvsSqizyl~d(Ckx4h}&)}2uB{4BY>5N;HKa4)q8A6!E(gSAG0qBl zD2oHQn7&lY>5)9{EA%wx{2Hv-L{jLm^=aP%vU2reNfli?x7#c>DI`?&KEp}% zNxi$_jY281cR}079}SFnTd0YJP5RyC7bFpEaJ>yY_2r~u9WGNe*2w)fC?#p z9MzNFc?$7EyDpJyPL|aEHl=vGuDh5y{fV{1b$#dG^VcgX7hc^9+43_SonB&u*b4D? z-)$9~@TXWc68BS0J*43;qCv3405stBk;V z{<6)rlRVSN=RP#u71&S`uBsl@ioLRJD5B8*R1xH#9ex}KO9M_Hd zsqemwWG8dy1$w6%)N;l}$`E}2nwK-LFgHi^S39Z%OB3A+a+qFRP zc@uncFOeLl6dpsURYzmzvC&Q)c_e1d!B5GbGP|;{$KCJ(amczk!2{cy#HMG-xbBSC z(Rkb&tBv?mt!@;(&l@j1RQ;!Vw<$=_*n}VrEH2Syb||ZbcTVSvY5021juz!jvNUG) z@AvtiUZ)HyB%Put`UJZf_=Gr&BC|!Wj|#Uwuq>{5d&+EJQu{2)w67%pQ6{a*J&t3m zUh$28B&0xKBB&oR=$t;2o91Qa zIizYuX=Y*C&3*3H|DaGJkDqK(Oq*hQ39CJ%cBF(04?*6sX`SdWQ4WRj#%B2#8TY%3 z#C-`>V%?EC*<7cA5Fz`h-7>)S$x_1sRST%qBbVroVKn|u*y73x%dLc~TrC`b__`AE z@ZyH+ULKZ$=cnZGs1IBm--tN~MUUFE!8$Fe9GjFXW8mT&MU{i`KHfvMBrj?ng;Kg+ zBNg=Kd`0myaEa~4Srp1ai`stn1K+Clq?m^M^y2-VZ7ySd6$F2!HZHtv=}RuPNB^Gu zBZA>{T`o&c#Mvw?yn;<7^7r-I^J=U{tDK%$R`(1=aR;Z#6G$K2YA5J6lGhHPAgim3 zz4EY6WL*za`P3m3TjI+32_3ad2*6F8`r%_SsBkzxbsQwr?! zkaR@QEqzwfl(kXv&Hc^txtRg1it+f+P?yfufSWVl561adQDb6(o{Lnzt1-z2vQSXR z(p-o|_4Ef>JN}?no)IU`O#7xa(@J4;WhSeyZ>f_%_gnoVkv+0-xKs-q&!Fq2QD14z zcPcdN6?;0`J@{P{u`VAfb!rHl^8xqLFQ&!j*~bA+_i)dQ6C65R!ubw7WJFs zmBTh}OdwBWg63_6nLQ;*XyyM(=F!5I0c_cW?oab+*rX8B;k)X`2Z(@YM6d)k@pUGv zO=uh`^`nGatYjg~gP<%5CL{w|}foc`?i(iJ(i3GG}RoPLJsjJgwtGxZ0i z_NS??3g_VqGzJhGP~0pMwsy)R2miUNjxXJDr&-8Cf5vu=C8~z}Uz(_qr zqUrIOdTCvy%S$)6PW|dCZS}pl^!yjKV_zMK*6^zKl9sl?Urx6^3>=gfoF0i3hlIC2 zo;Y#%HsbN!0r5Ci-dKx&oS3Xm^ zV=Qd?zDHG|4Sa3N^$q>D0@wN_=N9UQzXa~r@1-`P2+lAPsU)7=<;*j!>Rf^}eeS&T zn`iIIUveh^nYCpED4os=^z<*vb`6&wvXJXgSDPi5|q0wzUEO1T;?Ju)d>ZkxQn1)G++>G#g{RQA>1m)veS~2pfc(af5ZD8-mCL8K_Tq|n!<^g zO}7-j-lY};A3#aTX^8ZUMCQ^Uop7HN(a8JD@p~Z3*`lAVfH;k2w54P7wh>f*LWD7#sysu{IDuXk#wyH z8_*jLdkY*QO|hc_cS}p>W=!p3_hj>4om}=3&&3a8p8ANY@JTqo{Ue8Unv<9Dhm9lM zRs!y{1(J;xV-cMTOoO8{^Qx_wzgAg8Psm~pz5CaabAohmXhHqYxPg@4X1hP+^ zLJQM!+X@U-)}R6Q^CXOPZ;1+1}Yihp*?X|UwQHrmGfUEo>d>w7t z$^xCb78L<9+A{=J{Ibcya%2PPTDx=Hzm}wmYdV87ECmkHtz42}&Zt+M`1*(?gj zTm!~tl;?by4X1%f7hztX&6MbV!5HK0$bOz2RsI%V*xniLNEc6m8OX#7zMpnCSEKvo z*d*89<>i`%%i?(4-`>uVpd!BQ1-Xr~nKM^*_Uv8Rj1d;6DSlO}-u%r_!`L_GXG*S% z-)&_`IEOa*S*KHZ{0-m;fFM08?P*6HXN&7o4bj?eJf7#Vo_{%l6zPGJipGBm+u6ld z5=wmF4Sh3alf?)KFW6f$L+pT{pivy;3-ShL->S<1zUgq9bH6e4LuC=jL%j)%z^K^4V4_^D?&Vc9zwqcE$;kV5RryPOryi6Gjqj!LRf+6- zgcse@KSNBFzp610r+Mxhj@o>?0<5@R;b(kGiK8ZVU8uXYh-AJ>+I-JcdkHdSG8KlJ zYe9Jr$xd12cH(=1BhbXF+cL)DAF2!HG6WqM5u6QkQ|SY?xxK$6Yk{p z#J_Vr9r3{2s7+awJ-(8F%h!0YQO=>UIC#jHKW9Bt zS@;#c74h@=I@L#H1xIupc}ryjv!O@%r}b5NNtoxu=m- zEBw(Fgc~@Sjz#WC?i?ph5uLEV_WNJOVj`9k@*~KWy&klr5!qTt6aZI^_$a_E%FV05 zkw;NDH;_SKmXzA9;oNx2=&AL`=RI^5B+^haJl(QHCn|E5S_NYlC98)S(6G3Pai-8P z^_HLHBe^~vHs9R9YqVxZUP?drzyw!&Qq6hyznwz)5k$#fbB&sfqp6cXa**^h$oas?18Y;;0-#Yqxox-B$EDz+M^y(bq0T=dvO-F#B9o<<1g% zsZ#f&&YAeMe->~8Yj|Djg?G0Hgb~muTZjW-Cc8In&xB62A$BsUZXQkFBQ*caZT;uR zUbqM2wQUq4wu{IPOr1L{DI5kzy)DoRaT_dFl2OJHlx9Ib_q_g*e7KnUM}p^Xh5z8B zSS3%}{5`8ZYO>kK^KIJsm+-O-LnGIvO3}wa&{dH<7vM-`5W5VIS!9_OcMu~xtgZCx zJX97QmnEV95>psNvi4JwEG7mGcru>W0>F0iZdRGh zw|99vxe5Jd~U!LGYIzI}28Z5lr zv5x0z;7#L6V3w?s01g%U*6SwT{CeZ9Ab-heS_F(aNgPhUAmI1B;n~)zVWPTQOl%3+ z(QJ?mJkHCIi~cHtNW0Aj7H>_itWERHY;Vi?0KK{9aURV9I^U231DNu=rQ17Apnaj0 zhwlA6^o|Vu4nCB*sYb6qn7aNYA6?Qfhfx4cu@LENypu#HB#MhIx4ZS`QEYcs>c=n0 zi8Y?&^&~@Xo?K+Zd}o52`P~qpcmUx+P`^@uGzg6l_P27Qn(M6aZnBT~Wx&EG7WwT7 zAX?LEeR`9^?NV~PUYei4$lX2d`@YOrQTPY<%ggfNS6ppL5X$p<2-6N4RqJkYjGmCM zAo3Z<_FFZ3%_>VB_p%&gfI$N!j?JrsE>@*yQ6OGt5|g^PZTIY9k`~Xec%)(zZ6kli zQM4t!sUnV2$R|n9HY2a~A<5CRTZmQG9=C&-vpl*2)be-Vsgtw)n_}mGxzxclPv=b) zvm)g{Ki$xc2e*f~CP~XmVeRHe)+%S;{tW}m{%QzHs zmA`)8?9!~mp~-U>?#aTJX&(j1RycbgY!i4O09paJxp#&gX-mDE@l_fX=5_VU>06{a7AmYii=^ICg6bq^`3CtJ0B3Q$ zZmVVNY-&>6P@&}(8Z>)%^V@=<%k;a6d-afImFX5pca9`BJPc+H3%;<7mlcHBpRX8GuF{LMOFXe8-9(d*xX6hHM+{5CyJ!aHH(+nN^Rv8Ejt>v7FhFPvQnN*H4+ ziQ8R%%GEX0hi+%Cu9|z4B-=m=@if4p3;3Z3UxZGN1T%cKkpwIA9qK~7aR_uaOI$|^iI1KtgaN$@`CdJ8q}^lNDG{CioQC zvqnH$cY?Qb^Ih~m&Dfj%**E`7xp+nY`EeU5mT5beLy*W|54jOYi}&kgUVQp%98#V1 zcNjz&?FN-Cy4}yy>X_APmH?ZRuRGF;2$Zn*MeLQVz{0d=9jV|BzDUH8nXFqhU?%ha z`p zJ7zt02qo8btGK8AM^+B+YL|0rn+yT=PVcGKbSsOh!w=5DGh+>9nb0`MuZZ@T1k=F% zrTat<_l+PKAa4N37IwOPA@}v;l5l^qo^PXC`d0+K|m1@q*npy0)o<;f=G!}=_R2ENN)m43kXOj(mSCey@LcH zgx*Q00YcpGx7M1qX4cHU&fYU~owN73zCXAU-V}Js``rC^%ZM9!?p>p6t`6DrG8_5K z-YB?p{ld}}^67&gnUvNGd4xnN2G~!FeZX{Uayi@vS8_!{Z{R0aOpP%|p$i)PCgZ}S zjpLN%BYx?+L3Ap*9F~3QXi-c+r)Lw$?=>!!_)KQNcPokSo7^+ z)~w0hDw|@y(#!>elA%vI4lDs-;Pu9oRRYDCobTf)8IpA{Me}{UM+d#LjfegFJhZ3V z0;K|-7))Ra?Dy$>E0T?@)O;Sk&1#JeGQ?>nhyrVfxr4V~xX;R0d9Ciz=1q&6iP2D} z4j~ll{tJ%Y0AIG~r{5`YP{fy;uiiBINM0%Pwe|(62mYYb=cEGWW>7SE zkC#9V6gxWp23dtPD^YIISy!wvR=ZSs^}*&wRN)#!y)AfZ$e4o9st) zg-5G7s{tO-ehTkc9p}{@>uHGY$@*fdmgtnF%CgGH5@3idhgRg`BaW6#^`C~T2t{lT zsI5%i|HM=5$P#%06f1FXrQEn1T>%bRshbee3Y~j2b;xEkqk+5pOW zYnG`*!Zmy)aFEFG+B6HQ-}IqPL#!GWT|(0ov0oOO_n!vKJ)wqBvY&r-G>oS8eYpfb z^AQHJ`*sNk4=(xfq(qK_e*mDV@q_dE1Y!GJ-f8rX%|9@D{Hs!oUKK)H$WvJGsrfi|=T}Fb zj#sI=E`B!49NKfr-%hqId;u{H;m_}J8tFcI!6>2CXrkB9KYJiUV{qalV7B2SNj-~ZLidi$on!>dTPlmgg7TZ&v45CMKC7s5KxE6J zE}qR(Mey@0rPI}A*#SxJmJ_aDQtf^z4w8w9y-pavp>V@{3FMvUPtZPl>??`;maq`T zu8;pFtRb@OU?Er%rhj`65qzoWdf)}dOH)zM5i{{&=sn-JIMFbIC`D&;LP38*H|scr zC7`j2Qmx>&RS;X#=7d9|+u1|ojRc5D1_)QR+$v*XW2Cx&*Il-No#|KmS&{nWF!Hj{*p1%HAMB}_T4iIfS$D0YOVzx zfz^<902w4OW+{D46y4@C4StP!gG|FM-Cy^kjFX0>$`EnQ)SmT2E#@?hybIFu;wxpN zhYSuY(bEblKccUaGx%!)MO`lz0TcqSS zOTn53$gk)O44ssb#jh`JJIdn}J3mz4uo*MGi$am5dcM()r+OxUxC3bS?mw~@Yr-vu z22W|{CU%@3x&e`-a;sbhlXCMOl&C#5~I-WJF*#3vjb zU@5=k2a9;zT!%bR9r2GF9D|!!;!0_B@k3|Qwq_5KyXF|Nq+#E1+VE{B1G@_OdaI^Z z`#BrkxG&W;{WmbGAm651IO_f4VQA-2RFaGYHpNcDu%fEUz=$X|`X+<(?c7Dl$TyMi zXL3PC=XH&$g`4Qgyzr7LMvgt9?&!f@QrU;kKTd><{1mW2V;>yMvKx-OIpR6tAHO0q z3^C=CnCeQwc=xA#x9tnHUiG6j6XO=CQ1tVm-C~vJjtka-1P$v&gV!n!2r2%DcbQwV zLCDXGi~vz9R_xak+BshpTo=5Q*y0^oZyov?8x!hKRr{_|`jN`0q#R3O=j;&QRu2yy z(X$7%C}sNIc^(P0DGItX!kQV;kusjAm%?`4Unqw?Zsu4;V6C=Pod^hy;tdJMZQe{{ zL#>DIQ^UU$JgBYT#eMt|g4ycLlP;`jL8H{$iH!L71-?S~WK3VoEj;DUi}#>1ry4z- zgm}w7?%NsAy;#)^N}gY`Z_F8d1tJ!KdU{`OEVQ!RR6(e|6uA(V?GxdnEALwyFQ}~` zo18T0^FGa=l4d@JkfR19z1HUugM>wo?0$nj`P-QvF-*eJCfe|_i*!-gnWL78Mz4Z) zH=pd8O{2(Q*CqYLiT?ath4P@|fTidMd2RgBDOCP2yKBfWrr>YcBB8>>EZ6Fz5v3_f zYr%Jy4cnF+8Bdy=Q$Pz)QP1p`Q$%4;B!C`EGL>_S@K11%j8(pG&~|#6Jk#5vX_ZLM zDljgkfko?lc{w-dX~D?#iPAKJW@w>%AMv>nQX;pY#Rx%Fm8&F89Us$cKg=X0-+K&d zp?(}Rcoks?2yJms*rHO_yjP_Us}e({G!w7HhO`{@WA=j8*UFBcPSe14AS{Y!`VVfU zIR){yXHYvm^fFcsTNM?RqL4r1<=lFdcb!V5XYh*hXXx7@_He+f@rU0YV4_mmnUMkS zoQ$%9+%gJIPGm)*(#?7Ix>U}PeEa(%E z#{kK1t#S zHRKIhD}IX23}&1zB6^2#Wj)UnLg)0k|GQveY){=s_G6AcpAW_g-&gq)69BnDx#RdC%Qjh2@A8_-)g>42Je3K6lTc=7KqMW$RC9(1Q2 z>Mr<8^B+0m=<+b;KVueUvU9ZVRqf5?s7rB#Mw#AKdZnyT6(e1=3iCIbEXo3c#~O1n zLS^QFuYKm}x4SOAdk-Yw&vie_bWDwzmm>g&+0`?4g5e~eYrd~sZhMgeD*#&GE1760 zR#|gS&&g(Cb8?=n1CoiH&fzjQH)0kLm+{v+^@)68>IQO%Umfp?mu^QE@l>!_2li^! zN)3}5E?$#V=f~gwmQro^kz>N%D)B|$=gD4!bJbNG;@Wwc@aE7B=%|@^{NCG7GiYWN z-Dr7b2J%8_QpVE+Lo^jss2P6t)D}ifFmiAsHGRGz+BR?tNG<9O?oS&UX=`V~L#cIm@-Q1<#%(L(*IeCGoC4PfY35(SMK#!Rl z=36`(YGY^Dlucz;&*Ztse1jbCm(B2W`-1Jz_^Y@+3_J)*ibu4_hkcW>c^|j4 zYGESQcPTa$xIT*n#GNmOgHEFB9f24xr5ie&C@@BNjOo*=+VF@9?rBrXPKuks>nd{q zIr0G}eIhGdQ^OWb`$uYc4B(m!G|G!`kkYp*{zYM_K^&@qD@1dqfI3b-Fmh<*F*_-F zv2v4CPROu(K0Z<$b(5v=6{*vr^;NI?h_Y)Ia06R^ClW-8eg(=Lv)_JGEmBIgMT+39 z*;f48<0BC7Cx5Nhx5xOsR1~v_sxeUnQ(e%N*vfFc7-L&dbVJdPW^P}1_#%B5E8uXsU4AALVJ+SGe4Vb=t)@JxbuU5e zy2@<4(^ct^M;F$hm++#0OdRyqX!9LkD?w9Jv&_0-0tG2OeRg5bdw3mKA!vrN=Y%Sr zV2__h5ZrK|QjTgZ1I5OEl#gxi-LCLwW0xZg>A*lT0r)0d#gP+Gk4}#Rn7Tt@5x&F9 z@5-hlZiR~tzm_lfv{)eRonR)7lh~bqHb>`%hgmJ=ODV2$PEDbPQ768;LrI-AuALwq zyu#TtfUq#{km{9(SAH4T+q*MwGIV{?S)-{fc%xT^0pz3zgn6eh@KA#NnZ%|Uv=e!dUKRjMWZ&3+aI@CHgRY9b{n$FSGb9ptQN6Voqc(78MvAL@&i?ZwVEQAmKuS= z5R1ebVv?EuX8OOs_?)!kKWZ`epSk8e6hsvA^wGfD!$W|32h@8T$XuqcZ#5qOm)(D|4CWh}Z|8M7L; zI1!y_RU&WU$yGK^gM6u%-w%E~*DT}Nk9(x$kH4jqu@G@eCzsnTZ` zG4y_R3u)tc8Si~^s6|D%J?gssjuks=Vn^l7!apw9@%(c4**$30l9?bbq-b%7+H5mr zVhB}rt@_t?Bsb_4kR=8J(MBlJmL-@ zaTiY~_t(N^&eA)1+S}DV{7;MHgz{f}h2KT55Rdb<6>0k&{xci!|AfzYleQzn0rNV* zQ?@IG{>Xd=iQ%ZAgWH@bCm;EeGFNX&5`Tl9MJKKvXd7!5Zzw%V7?t!pCiE|A3Vg~* zLco3iagUDSe+hp4cRliqG&2B^q#H66>&Ypwpu^?ScRMRI1Iz}-CJs(n@4r}Dh>`d^ zo4r>A`AiW+^}B#dY!<*iYZV6ETMUR>Q&oMtG!T!|=3G&f+qLz%l?D6o)Fl_g=n2sE zcux>{)<0UU(K@P(=Z?5Rc;#u8Q$}6W>7J-1>0Q47iWYp3d+Wl%`SG?XP(Q--$-ArW zOxlJXwc|1H-o8+}l16pB;>n!{(^7=am;&Jyb5>x(-ynF7SMC=WPp>m^CNqX=jJW{FR57RY{*8=27%f_Y$Oysj>wxQ29CKY%(?DZnVM+P((w8@acKp5fAjRXzcRuD+ zp32(8P&$IxD3pmp?J>nlE=8Z&oRqcH!{Tt|7d^9)X|MLpg-8A&LjNangsp6TC@`?XWFbKrXc@yRi-(!BIzk@V7(By+1uxtxelYyrloB&4Q5#kz=CxK)s2HLg$Er z4L50=E+ZLg>^1A9=h=$taOZF~9RD{7PJgK|Hy=%e30Ixp|Hmulad51@Iak+~ma5)&Jn?rwh3Ml63r^%)p=D`8Or&&-wX(yj%XS-YYOQUBcwlLGC|B`R_I8 z{~fiO_APV7o5+Vr&6dZGk0Ob*M&Y2kqaxW8+;7m20c8}BWw+W5+g1Dq!NG*c@qc+;SAzTE>OVdT{+BmQX#V--e@@GvyXDWD=+Co7 z_|H@EufpU{VezL7{ZqC0Q{(!pn)&Cc_~)tk7t`ZU%i>Ri>+fdfpLXcqjHW*==sz6` z|2O$t^bexU2kc>LFaO_b2>c(APygbx{`2}jy!C(1#s9zO;{U7ojDC)3wV4)vqMB&ksF^IvlU9HQ&Tt{JAE>8QSU2c{vu{ z>hSvcQtS)cx9k4zGY%&{woJ8krxdCa=OWNOBK_P8Yg6vuW=@1pvXj4t^9)H|44=eC zM?e<%X>9AQjtZ`X*}4gK@@2U`W+8`#)v@@gu;ozN!B{=L``R)dj=QEy8Uo!Z5-WmZ zbSgp0k5H6KS6OJHud=w6_@y<$E7yHs>Mr7oLp@XP$-}veBgnZCPbOr5iiEcW#*s$9 z^MVza4O%++2sVvd-sThaN# z$A3R6|N7hxZ{CJNL<#rVvn!S-JRf&pe&^I7e$0^pV(ppNRpQf7daxa?qpk0#@F4tn zCT2RheU5PkvPczP&lXS&>(h{#qj4R1^X7_-#SLhY3Ake@*d0xEsB!0Eqk0}bPi?%_ zhQD$W+}3LF=(4}mK~L#M9rSLb$%ayoV`2TF>a1V)Jt-@u^5r0O57E7BbzDD}I1Iaf zfc)?qbmK~Bj+V!J+aoat(YgA{RJb^!u6DFE&j3$S731p-wNJ-J%%cTN!@BGhK%Qlp z@L!TGc`C6n0YWi1@voyQTC=hSEFkQuejZt`j<+&w z6Y*oemuHH(1$kY{a8ZLt4LcR-D8$QWvm)vp6Bhr7-L>2cZJq0iyd_1G>q*sdWBpV%{GG3{{k`&MQ`MkLN*v3Sj3G)F zHqo&UChphv`q2T295Zp-?ETpjX@0k~4VnHL%+lAujhN^6^1+bKyicANac@G@cC4qm}qzj`+y8)+f zrnQv;VfFomqhuD2An+Ro%tg6%u5XlP7~3vCe{wRUl zyT@Ng;VJIMlF==FK*xGH)qw{JjH z)2i~UiD=|1z=J#VQEX+7NA~gqM=D=_NWFO^-FoSUABC~*CFUwvQ zsdiE6j(meJTHX!ksRZiQb8O)h2QX@5e1jHp!ttAcMrH>RS*6{u;+QJiCXo+*)G9ng z?vkIgIAWUG>l~zdIJ^MN;E(TrAxl(eW6f$rKdj&c*Y{wr6~wB2MxSUsI?zsthx#v+ z+2t}S{py{%r>b`31FW3Rb8TZYax9v_$;LNQDO>56aHg~)XixjDM|Xn00kI^;@@W@YIKpH*@m2j+VPmnF$AGh?T?7T5p4|U&P%t5U78s!+-CuHB^u6Zc!ALCJQ?^4QIvvmE zYmGnp0w?AT4g!6FJ4q_v0DXaP#l?EH7KXdn@_ltoH2qSk4*;}UBw+2}uoOh7Yh9_s z!xFu_@n(XRp{{n__jHwYeDq25jXvd%C*I$sx8A#(t}+o=z?zYzcuP+y;NPfRpbIemNV2_Sdx z0@-~3Am0A{IZy6HGc!I}4(pJx(4?T6GS+@t8AThlRGg{VcU)cSVTooq21LPM-v0pT zMRf2}ILb%!dp$B#y}G_On$fZJg1}7Cqbo|?R-|0(Pi}FSE-rHU3ps{lh`|+x8(-() z7qy}pmQ0N`$nU;=9S`TJ{c&VDH5HCo`zunVlE9xc1DWF(J(w9#qhK4|SrNN8&L<}@ z!}HhglnvFMtOrN3T^^NT#&7J)4-<@EFWO7oib^mTdva67P>yG>Au_1@y7FEoCEwpi z_0J>anUNtS0QewI--q~;1yh~f=YeN!DX*H!qDNIG?}Oh&g(mSih_LJ%1U_|wPSTDN6p~kcC^!lp6*xjciqSJR~+TJO)?W4Ko{G}fJWpR#x z`VDiE1O5vHQarGZGP~NTx;S~Ysn}mV%yNv{-AS}0RCpR;&tTBMO>i@R;z@t>vbquP zW4Y+~5h^v-%xuGy1$6YVMwJ-ttYBe&uk~KkWL=_m?g71urGl>^-r%>-gwX`%(E~?7 zqHiZh`qCFWTOw>Xs~Ep)c0a2g^LGxBbvx=F@c>8|>d}n)<5-y4O3{*R@+- z_tK%HqFt!`Cq?zY>rngSdwdXEHCV1E_*sA+Gj+5*muq_-oL!w|e-3|W+bq`*Iv16= zSWVRg^8BMx-?Hr&kRR!gRNLDa!`pQY6{2@B5w9{YK5Zq* z_~tLQ5q?UXI=X}R@tL0)qHD$NYbCe4zb~ok%BjD)mmRx(LG?`QMIB7Qj2D-O(F%mJ zOs~h|wHEx6JFb@IxMnb`lf1M41X7^3@?DCTbj_r?{}*AJ&J-H=^7|9bYa&k4gFM4T zVPAn^8Tt*B#OoDZZ|${1P!*X%Zj!N#25v-lGYfHO?&2u%`ZUnY z9H`;6el{u$sjeKYL{lj<)_pE`HQ1$S)!qB+l~diI3T+oY2qPOvkLf}#Qcx{Oe;75| zK-lKt-)@7(`FI;!3Ld-U-P2tBc!c#L^}n#>s{OYNSbbGnEV`p+?s79OP2$-ACW0rp z3a<08h^e;&*@r@4jHf3=zZ^~UeXW^m9d;8T^tpe^Tg{*;YAA{H zVfbKYy>sk^Zc-`zfj_pB2bdH}Z3kzPdL_gvxYMn9bEe0~1C~FqENAcV8O;v1Zx7h~ z`Np4;E&McD<2;H0UW6140G1f@0r-|@DcSVmC|t|OW`{g7j%5x)x+s;;K1Gsp(!AeR z-xL~t54&_k!&%3Q{%O?Bm@tH{ctuh$+s$f2@*w;)5oQ6@CgEK+pN&Yl;bIi9F_F7* zhOPo{r{t;8&Q_`Yy7Dd(k=}qrV#g)S6OmZiZhA8Y+;!*F&l6T53%`=W7dQu}Z^Tkk zk}bWtp$Kxmr9XD<>@HwkR~z}7-)t6KGb6`QEN}!Vg$y8;0!%J8zke99oW_=8e_(0m zhTA;ynIw|foqC&@p&%)2Mf5140f^SSRyQ!%v?MT(k^MRur@vG=GWP)ij3wPV#;{tp zpgh6=;Gm--_NjN=d)vGS(dLE+r9Vs;^>qBp)7X@ecIWf|(29`kvh$_rJr^@zfy>lp zfHtuFJcon-!BuXOg}*4e|H*`CpkfF>)Nn3iVZ=HUn1CVjn#|=jHVM39F}~vEq=T!M z>&z~nAyF?-((R?SMXJYR%tz3p9`^9jfAcYQj5wR@&!MhVgVJpWTCttSq_l@F!QvK6 z8{JJU2o!WKO*=I4F$cWy{aJYIUl1>CF)!6PmwWA9nM=o}?9!A+DZ`hYSnG z=_*ajy?2|9o*VB7=JSp(vQ30gKT0p0_&}XjoR~9HRT^*X*suZl_$k}lb(wPkQ9tHq z?2}<4Lkkp+l~1*J_Yc0@a5hwTh6KNjns(ZZeR9u$O|Hw1ScgTbjlpaL=2c4hnN^4r zA>D%>3Nqa@2@MXjXaORNk3I}XPt>xQBDT|kPp|7Lbi((%6^LET=I41&v6Th;ioAt; zgsNfoj|Ds;$9b@f4|9TeNo*0uF#;ikpz};MjcxQtO|ProN-%CyrgFZcQ74sNSVzKE z)k$#0OG2=1n@Y$LH<3wSfs&c?Z*4n@7jXV+fd2sVX_W*a7anu;*&P-=$Nx|rT*bXQ ztn|5bY|)bLJdH?2#{qxfJXFnH!bD5QnP!`RCjCMm*^yL#LI_sVeZ9qXzh%wX)fiA@8oz*Vh&HVBOW|8W2^+MxQIkrY7_>r^)5?l6z1J)6! z02D+uF?o9FWrrqmjL)Zf&mB2x&bUjV5{e5ZiVG#X^we`pYZx)+A7n`hRtV7#u4snM za(sGXcF=Q(=VaT0)uq^o8h0^i18WwVPR~6&|C#Ipji#rATLj>cQ zy1_Eq{6Smvyh~+@!{+dOqZ}4FzuMj;=PSG5NC$LF>(ItHa*oVLY*m-~JhFP|oZ%kt zxkg2+zR1<$M~bOwLsQ}to=vV!?zl;|Gt}v6+jHDA9T^eX(Q7M}vkXevhlQgwv%V74 zaKhj6m~%HaXc~4eIb2^30%&PKAzHPs#fW1i)%0UbRYvx;nb~VAv7NW?B$~c;yW}ou z;B0VDth{xJoaP3ml+Fdua+UL!NEH;9CnpP z5ML5B#}0nBo0(Y_@y+Y%|B3`_ciDSJ%pZU7RRj#57dXduKSv#8sB*iVkzNH8Z@ zvz8whV?kUjSSoP_gdRS0u@j4EH4icBga=7UE|jpW_dz&L2SQQM9`2{iazlN!Mb@*B zK7hrO>n1KGidaV}`%Cd;qc-TG9Q|YxzEyH4wPZfjEo+5}Iw$NJPvi!+6IXJZZ|zzS zxFcM5A?Cf4`+|8dXpN7*H=j=wrOxXvrPG*FQ>eAkziM_DVWGlPgZxCp_XXj{Knq2e zzGQ;l*y_)ne%ZjfW;Pr2=qX%eKq&dKs?exV`H#*yWsV8~agK!X@p>5H1Mgqy;+hje zMFUjNYrl{4zAbO6afzQ93}$6;zdfGhE=sq*eoQ^n$J)3T^FU9YPNSH_UYe51L_fiL zpkQs*SOJB!=RbJ}%*m?;$McjTMGQC~g~!-ngD8MwEAjnFGiP&z%guS{eSY}%mGsMM zXH!`KKo^78khM*xlHYG06ut)Gc`x$#yTB_=Y3G!J#TXh-W(-xNqwl>;-$!MWyIXIJ z-H}td@yn$g55#XQvcwBST7PFm6n4DO?zG@}slB{XwUj#L!-0IUx;D@#&Gg&_$$L;f zHh>(SmwDt%562**UC)`d8i`Y76N}M)f@}WYUdB}y*1QXf_P!yvn7Q4kh)u>Qw++Zs zkao?n<5# z29jf{Ge{0W3!utZ69@opdFL>6xufR$}y<_`zcB7DU$O;)K-Li=l( zO8U8A)5&0wAplBC!s0#IT$SldsUiEaW=u+XA*;x^{Z4glLm)fE`9VF8rPle^QRS z2TIx6+8uXpE$=^c5b*cl1DPZYgS-Zf;|xZ!ujIj9y6Bm%<~gs5s~Oa4AowIF|h}>cM)Fz zY%;)CKK!OMviVW2J_UEDnRX)a1eO@-9IbnQN>g*>6HufSpEeZ;RCSXq=y%yOw`YLs zapa!v8&|K7qARbu-h1hOqLyXa$giDI)rYsn$Yd=d!bPDshKEj53l>F1xjtq^{SXu< z8Dk~o2nSGjZ_H2l%>ZtZ3s9!`w8@)vYfo=?L926?52YAk++5id-5J)(yVCrGpayTN z`~K70pmx+HsxFUX`&;<^X_%=-(PTkrq9Q%ipoB1^FV3sbio7T#na_F`Xdv9oJ;DD~ z#^f|9`O@716DKF~q}$+~q$A-LPjI`;jmbvcf^Gn=)|2h&K47M@6aTC6SdHbuU9RW- zl-?|_mh{1HdB3L3)vcr(V`sbXgw4C&nP_d*kyw>3nwGgv5XBy3kl|vYrA)ugLg<>= ztOA4#a&4~1r&;&E-UoW#r;87I>)#VStnU@bWytlIoK!pA^niG$KQ`CTS$+`jQNHfe zj50Q_ogS8W`na#*?Js~b5B=}ZR*A6G1$~-xl@kspca5noGfH!ov z`A~%*ZwLX6Mr^43d~4jFYZkfo?p2mQ<{PPcX&Dd@eb|kkHj@45efs@D`^(x(Hv?sT zCk~Xm)i)GbLfN-Uv>_`5qEuRq&E6+bOEJD z`Y!I)bCC>ut9e`f&ngq7YumLx`3`bWWznk%g^~mJddatqNwbSMwt6XTOA-@h`x50F;mi7^ z!{KC?Vg-%a*>8_~GnW%Po9}{RnLBOBFZege9MCTn ztDKAgUUFy^|LIA>Z;-t3+&{hS`C0g#)xGoOlZ?`PXbREusS`Fd4#0@=he98RJxMUf za@M%CpAEek6_E8O`3<_`GZhLQlBF73;OaORnOv6}eOCd4Znu53TnhBNibBdmfcQbo zU99Z3K47_jv}ZOL->K|dL+^Zwm%jziw#0JQgPHJ}{L`rzt%wrKSXM}<#D^5WPhU<( zTV3Ac3vQo%KR|pf&}1l#V0>X`UvRQVkj2x*ov=ORdMGVhq~JB(y^8ajAq;3m&H>Dk z;FvR!&6GW7d(p7Q1}oOAXB@DUd|4exmkcd|t{i~eIua}wW^M3}t<{2FyiReu87rDH zDk0J>gH%$MrIP$7<@{%#WlQ)!7O&t)w;&iV*F;;ux-!(vWik2OBl!9!B^vlEX!%6f zGGSfszAuGpdON!(5LoQGS+J;D>au1Y?->uQrA)saO)f)C(5X#U!di#BZHsmk7u(;# zUD9T7PzzKmh*Fa95Z~NO)Bo&gj?rvdfPdVa&(EYgt^XxOa{_m#_^|8F{vCAg*=;lo z5Zvt*jPacqmCAAV6y~)Z4p+u$rbpJ6YmdkX&U4Kl@b<;)sP1hy9NDx6IMu`2+0pv8 zlu+Sas-Qz9*?>|b25+&o(X`C3zfMdm>#K-FxR9e!)id@2hQ2S{XtU^}vwA{|&_v?} ztgPGwxcwOV7CyNSERp z8}U(7=XntsWpl@S{M4X#bevz_rYMvBL}NjIr$C?zqvmhWBNp0jo%iO7#0e(*uAq6? z2ReyQihR7TW2_zaJ=Y7!tYmw`-E>VjImbWo_5mfkUu<>&{>F#(de3nB{AHhA$7S#A zPi1(?c{B;$_}K)J3zCwaxKnbYwqp1|Wq9@>S5CZ;f8pxz;)dpvA$$}TCRc&wMMgJX zEir}2Fg}hj&UYhgGd1jW_Q!*6sFL_gM808(u|Lmg=7hB|7q5x-%*&GFlaO7faHFQNja+bXevJEwUm;6rfWssS2U#yaj!o0I~J7!%q31g>@l&O z=3h+5f4)9gHgFQ*KL z4Ck}Btxg#%^ik!<4_EdR{i4t@#t(thicnEUoYW}_Q%1en4+ISF;n|e2-EBszky5rf zC>xQAA@>?>WIB1;6B3e@$1pO6L9JXL(e0~_IfSR@1+GokHM?d}L(iI0Cj6b2qY2bx zzeq0p5MxKx@%kLq;!_a@JvMGX4)9AlrIR8(EFZwityVG{a;56?;|S3%FqtZQWxNc+ zp?}N8;L8WnN$sB-z8)>!>Ki1`S# z2&O0S;I8ClL+SwtB1AOhkkAB|#1L0i- zS~cG;B{Hez5hG3S&4Pp-iZ2u&SmKqr04G68Tn>JFVXxmHB3BzO#{}Xj!=VXZj@!{^ z*R=?%B^yeS8w;S{ z%(hFb!}e<98!r;9p{lO-NbJFm?L#Qt+7bK$zpqD$$(&+=3ED44r7G~L!E)=#msWWd z2IvPrwD&fF7b4o_IGwcGj^#r6%3&n&%azXv1CBhFV7a>Apxpq2-=HeGk}ENO7-VR@ zYe2CS&#O4~%JZ}2=O%DpOPr{H^&Ia1aI*ZOc$c;HuW0K1uBtLtqc(Dc#uadEm!3H4JBn-(aznVdhiE= zC}5y7c)l>Go0MWN7XK(bdbu`GF0JSl2)gOcz=JMv&k!30xUCX$nd=^GS7W-&?lgW^ zpFU*OS)QC#rxwY1Vt@OFAEiM2dm}h=)%`>Gv}Nn@z6~84)0tkeRgBiytG(9-y#rN& z01)}n^lsYZUfbA9yU_xM{Wj4Nwe|G|Z%OpaW+li?QN45((LOGF`?pooys#3DO;0E- zz|ItS)(ivOVwju6>C0$9`?Wt)A|;7RmAyU{i08-X!aKpN8f85Q zO;z8C_b+19Gn}rFl8!c{>b^Y>cleR87z42qptd9{7Xm85( z@MmON3uD;s;zWuTw$1!r7$V_1rNI!KDsB@-Eyl?+ckfG=1Wh5-zf_+h)A{8EQuric*v~bV9$=3 z41bycVfx^cxA)`ZIX8%rN|Q8?^fp_v0$u}~w-DUf6*do}flM}Yk`39iHQh2(oPMsV z%bi*JWXFZnGJHek;^vjUBWql?Es8F6!BoCm+qfu-|3%IILOgF7q4V+JaIx}PRkw|7 zH8@8AVZ{Yu(7)ehx4YfdCgLQFO+N zO9p4o#smAa6kdI+qUK{kDH<$96X($mV>SKaSVFMHB=a3H54Yj?(Y@QVweMn`e*T~x zAl$?|AZeTLuA{E+sb3BXP1&|{?4Twi6=MmSY~T-&rDdC1+_dvfbDBYUrYsm6 zpLw?4q>?VbLg`6WgRp?qnv)~9R_9^iOclgcZDf-@sq$M{(Rj4D8?b_pWM3BBVDj~% zB-VXmS627cfn^QgmDaGEDpDOxfF6|eE&G9g9f|>cm)Nm+F;a>+CT8Q=7iU~g%2PHq z6W_-4r@p?;NR=E&`MAZ5!Uau6r0K!&?Q7RIj9U&9#Bawpc}kUnBNn{y&>I>B@Xhq9YNNLgO5~|z#4+TJ48Ue*=D6)0 zpdZ>c+~IRoQ=~o>>OR5u8{}TiS$($zZ1?qONxk>1B5k;tj&K_vSD*?UiDdY^4mv1% z?4ybVqrk@y*WRnBhFgM5R13GyXgXhca?O{-d?bKz3}!uk_KQ^HL3gLS)|cw}6hd@@ z!!9$&wzyQ~WfR9<7;IEm*qUD>P&pQG1a0jZt}VZ%8h-a+dT6x7_bNVJB=1bg#2j)% z!6xIrZ85?=`?958tka_ocyp$UPYU}X)5QI*-tF23&cu{*@20VT|w!>3vaxL*-3`+(FewseOk;x`I z`qbE`;B|{zG;il;YO+hgi|n9=p>gt%qj{70ML4K3t*jrwJjT zK)my;d{m~e4`+Yg9SC%A0J4?<5MQNV%G>R*)$MLx4FPh{AzHhwh-1_f&F1Z9>Q zFX{(dV6{5UX>5l1`XD}CHu~jVcsH>BD_QbBJj`08064fPXPz1i$mBX?1*~%Ft~8jV zk~SoVV%T_WQeARJy0p&JsV~Ytg8cZ@^zDjHRf)8W?JSh+z@kn-)!cJ)&kmg`^(~wm zar;32@1e?n&TaY6{Z4_nyoLf=TWMInF0#X|8NDm+@{@l$cSl!edL}O3*(AXPB-bT0 zBG5zjb}I3Uwjd?4^|bwHpX=7b>)hCiFqK%!S9t++I2W?HD^>)|h)bE1`3p{9O#Lsh(4&BQ62=r>REb|^LO zs4UA@K0z;hO3RkF&&JF!?wcM6Ja_#aJJ(dMH@Y490e(e>Q!778aKD?bI>oK7t`XVn zBUUmmcfLaAB__tO<;UX>*fvcHoxnOfh6&j}m@TckHlX`8TzE%Qoa;LYM@9?N8UU|L z(860{#Go{IBaGGF$J7pqPX=hvXa=Nz#8$BO zVEMO#fr1{cZ#{0XSJXTWl!lrmzTx9Rm(d@m`C7MlX=h+ zu_5n0B$@3ad{Ac!U$WEay{7F0x>2F00O9pP{MAd=q_x63u=0yl2S8BmhtgT!z~v5s z)g*SO7O+0;5^x5%LIx}s5W(-ZUwJtw<&jjraw&|z;^GG)S3T7iT5EfW9gB2J^{6rT zajZqr-ea7KNQzTKJ6GY@F&W7K3o)8%enxy}d316Q^-DvtAoX3qHJ0FO@Xw3O2Z$&5 z2&_5AvCW)z=o>zvgYAxM9r>gP%DbK8dv_%XZ~G^b%g3PnhVON&!e4NGM9oq2Gjapi znt-0;wjWOqZqw{~XP~k}QAT@@Ld^J-u7P%Y_f269QKlsQX?`C<mDCImq zU}=K4Ew!5xt$%24(=>AUV_0)|KUpdA@;phmY$)SF$%`(a?{o#YecPhD&6_Gh=R8);G4ij1N%FjgUVra)vW=SJrA0h=TqK=i6 z%_Q{p09z}6w8-8feQWoRD1kj#-TRBuw+9u8Y96B+4kd54-`3psy^Uwi1{$APE;!!U zU}{834<@>V9feq(2{~bml-*EO>Qkb~S?{-9l& zk<78!%lxV0b+gIRMW5(7nAf~9G6c!I)hOK@kz@+Q1;Ckq#BfN!O6U2(PPgJL`}ZS5sUxX>&ikMgJH19s&E)J4fP5-%=R*2@&YdA&m=49;KW&-@$o!5*H`GOl zoo!FKoapyEn_qZCK9~Lj`92Bf(TGmYJoMi^l(e;PCXkB;mO71ka~V3r%(dvzdU$ou zRb*_n74@`$^KYjc=8~P&Oug4*zo~tprYJn1XW&|Eq+SC9ZEe`{HG~#27arQd!<+i& zbyF8DW!PY)f1pvVN5jFp6~6WB_N6Wew+WF$C@kTc^7Y~esruX1 z*SU1nWXyDow3u_nvmC{UWH58-d&5UwyE3inUHSK$pWE4M8fHxY4FI-^tV!f##T*_-7brn2^TPGvr*#oqr${u&JqNBUieGIit^`kHW&oOme&^Bdo-u=e&NI zcymaKlo&K-OU^ZpH=>WK(Bg3~UfS(E`Kw+EKz1cle^{d-j9Xa3b?jk+7w6aQjr5h- zoe_(=$I7C-Omp9Y)DCp$t5{pJ!_rmbB%rMLhz_)L>U;WN+dpZ)y;M^@Gb3q*>APd? zA5=||23hs+suNMbp1qltwy9LR!w#iNZ{yQf`I z*iF!6KrT2`rxxaGYBw%X9j(mr z_(EuQPAoY~CZ9AUj%>48IgDHaB~zX%%IvV{oiTQ9pUOiI(?54pM`k#VtM}<8jY`y_ zV~lssY-Qg#v<^AXi71-6%*)Ro-Y489W{CvyBZP6_D3`Lbm5G((G<9^?h^pJDY9sne zZekKOg_q<2fgW#@M|e_)yR+2n>FfA?>;2ob@qW9lgqncPe&OpkIMGgLG6V|<1O6PS zm7!=qH^;MYJB1nKlA8?m#D!4&BskKF6G~2EfbVoL+}-VHx($_(R*RzZ@OgxX;nBV+18W=~?pyu>D`y zgk<@v-lNMMW={Ap6ysCzZ;j4S*EtH=ivj;8%b6kZ&VXZ_%k+vrX(0PrvSmH4Baq(o zE~z`I1BeGm7_1*&s27{&R6-5Q{T;`gyhFaR4t8Ps#JF%}X5|)``~;c;^31MC+Z$g^ zh+pEsClsicIB}?t%t?)x2_)T#;(N2+>ydZWx!}uf)At-01;5qi&}6Bw*DKIl@Mz6# zN#=?PRKwHjVsnw&)N^kPK_7Yr>F0mR`JxPoDRywE9dwQz^Cpg%#@4et;1T+l1BaaL zUVVw~%8s=HV^j74*qSx|(DQ-Ju|lPa&()7gHfVN5@pRB>qv$GXuTeDeL4%}d2bkSS zE~O*JnOJ2HyDsOOp*`Z$@VxEduxC@ge9$kU(=}L}z>nVq2UQ8T`@uveYr_9B(~O(< zwNQiBfyLCqTb`=DWQ0DJ^#e%=8mvHxWqsP*jGol~Lbn`gX8FV~*Hnu2X#U{nYS)1r zZmcA5{sLSr9j;8KlbE+Is(kt98-pzwasrr!$rWmecCzU*?=jwTjef84Lp>RM36yOSvs;I)vyd zk_*pjU5f(;Bc5C{AABF|a{JR2pC)GI9y-E(Wqq1MD@to){E|vC>FPB0+>@m{@&E*Q z`Cn!UZ(IY-VvS;`qZDkvZA**rnOiT<&-IPo;1cdB(nz8iVqm9gj9K$-fimDl|I0A6 zxA7~~{5Bk5^KP2;R+mf2z>V7L{IrQRKtH%^Wr{_SG$KNQ%pWlT+Q}Jf%EVs+fiXA6 zkb9!JKy4S(rG!Q{S2VYvLXbC55@0U)bSI^tm%p$UpNwt#*g`=^nm*fE(qKc_vmRXr z*?j!&nF1EvM%xQ;q(!-xq}yY1qfT7+3iM7Dm2>syLHuv_bgz0mddg651-o?V84H}q zl3(boUQnXaQ9g61L1_>xGQY04?){~`1^v|vygn~Vx5yLm?U(ZS`_n6f*`3g^rrVQ} z+1E=)em7T6jZ#ileh8x$iiY5HRiKeKwA{0)5v*90A(oU=hS0!eeb32d1>0ATdTDwm zo$YR1e|x<(#W(}eN5+qGI{ja>;Zgi@l=T^R41i=+10H?UaB859Sf1@y!so96&3G@4 z+5|^=Ja4*vw4_*-`J?coZC}FYM0S~1%01+4cY}oB=rbR@=NcezTJ8}25Xe96iosq6 z7i~lM;&02{?jHInsn;Uk9C?F*H`e&xC4@9ojbyB}^zE_|oo-%b!Uud?vDyJ(pY#{x z8_#4nDLg~_g|4Y%w!sl3Ii1Mt-^i{;qxRK5p(|SKUT0{uGs{Gm%dB3^MLcrKxo-s% z*VS;WRi53Ejnx(|@RD@=Ge&qa%~AQN(C%h<&l~Dj9OBu}Az!}HK)4CycrqNSONxU! zQ~_vE#ks!eDxVqUF$-cwq@PLhpm-9?Jzn# z^WQg6ss7+tJxzV z9=j=1+)SQ1N4>$vU1~@NBfQJD%!XSM!tWK#EcP;$y03053l6y77C5eXU9l{SdPw{M zk;8{#yf?!)rV-Nlct@{(@clkI$da1g{zAwHYMUcM^TQ>vbkGsU2{H(v)SYH0SV?iv zrzw~PRElwaC2FiNGUtL~Yflxhwd{&5y*%#LmVq6qN5E!+mL!Y!RDGpjT;O1{r&rjK zRG@BHbbdLIv(pyzNVI|BQpAxXbn6&?+;x7QNY1%yWb}($p-1M9ao=O+9un8OmtZN3 z)Cc20kP~xKSsy=>P~cCD>)#j-O~^wO)j7{QU1>2JaBW!T-}@o{=i*D(V9n4TF1{88 z@HF18I{=|X%X4Df8gg4o%&$Wj(x5<;M>Zvb8++c73}aos+3?zZHBL}RE!Jp?h2*_> zTUCk-`UB|StyaN4EVn2x49z>LU^mPT{vMCC+?w~-0Hj$^vw zlfjjxL~%XTu<05>6e}IxY`^GctORBqm>gpamlH6TK z>IdK2Bi(U8GTs>>vBLdZ{@#fXm9V?iMBnwZefx&buZJ^8*PQJ{af^Hdpk4~L6fV3G8bM%K{q^GrCWM&(k`cQX`zmaw;bR~cQ^?$OcMExiwe|550fJ+QvF>nR zPzlw-G2L`d<cre);_K#Y1)I(Wu(` z_3O@NpznF4VJIDm8}SI+9Rqk&CtIVlJ8%IxTB8Ip3cHsvpaZ`wQhwhkx*uI!e2pBfwX9;pRccbt<{Nbd~tC6kttIID#1h z9}%DlT@beNIQneygQ|%KE3Z?;(41*5QY$}IAaBHg+EW?PGDyD48lym0jMx5qu-Oi| zA128u9H4~EHK*&*5Nqk_h>1O(xaFQiW{;5usCL%mB&ZqO#;O_jtclL~zI<i9fSMNPWA*X=ibL=JMs4x$a{P zNYXX&e;~oDti<34|3DcjRY2q&0GK2uucC=D?mz`GBm*M3AT(Q6O#dtS?P+EGguqmT zvY%w*1fx28^>ZC@N+#Y{fy$E!@3$IgFD3Ar%6Qv+!V`S^T5W&2{sEpUocKc=bV8=)O;UF>{wYKc|?wA1A5 zg6VrFu4JU4EbvHW@Y*sDKHqfOWhEL`&>#l8*7|nnd+fV0eplg)Te%sbEeggFaC;zn z=k8=>y-eb2$lt%*3RV(tJCf8|Ksqllg4}L&0hTy_UA*b#J$wzEUkeX}GATNZO|d`p z9%i&uC{~ECy?8ZW!3FFXN3+Db9LNWodO*;-)!Lu9Qr z<*`uDoV86zZjfv%ITw)|2b4w6z&L~v3P+qvgb*XD~ z+XA{jE4kR+njPY4?U0(qQJ*^IC@}Vb_lURhK_Xa$pLBz4+v2dxWVZR$aHuv@ilzPv zOE>vlgf2B5Hf<##EbtDT76Xog%ocZoKkUsNt36M;b8LL;6D#O@Z`(s3<{g;ySpYF} zxQjNxwS!{`4Gu%lt)AR+df!pla59|6asDpQlg?D$x5QTs5h;N@?!<^KIa*(kIbGxZ1Et-4h~xd@6F;wEqGY5!wCvD zx$ux}LLB7WvO2h=3?TJhD=)r&cD;9kzQOp@41&IX6zLEry_yzHn70ow0xC3BIWyowrr4E|u?&yw<{J@%!V-!CxWDs68@N2}y33 z#SHylnE5^X`&xHW4$>Swfd8*zO7N?I7F%!_$P)>`?DnYOYzl-g@&|mkD@*WWzYt6W z`YfK^MZ~#>^KIRy?n)rkSx=cZo*p&?bsV1k)4x)>8Bt|T4-;JjQ^Av__swii`Y67E za&uNda9iFW@uWv$x}@1LiR{Yrgcz|mqPo{Ju(uPgG>V=j*&$~DW&_z9lMC^9omU_x zvLj1h>nnt-uW|BghhYuEMOvP&`8((sSBcbj#rF#-HZ+An@B=!xs@>(^qJ#_-fIwdp zB!x_n?KIuTQ)3xcbviT;ufZ|hkh`p<9?$OOcGKR?CI>GD6dABD?B$BlggPk1pZo)H z2lg~w!7~M>c&YaP3FzEoy6(wB<8AY-)Fw?M zC~G+!pZ(}{G7-0{#JywFW!P0WBhhL6?b5Z0_^P2Af@dkrtyZ*vIfHd`dg z?RQIJkTei-e8k#e=k1jkTMpZe`d(s=yIZX}8^-y!ILMC|OXVkUJ-%utuzd+U>D@eM z&}Oh*-n-#A*6Zu{I3ZPt;vHN09{ozQ5$YS%e(+6u7Z?n6m=CxD2j20j7~$4DIq>P{ z#K|u@^^d__K?*s#c7hlm z-BNu;m+-#me4;@+^cIBrVRxndcZXF{96V{h@pYo$I6 zOitCizTgOi2$Pm%uE@y1QSrlon)MsfHo)}lLCp37Uxl-(;G=++Lz+hr%Tg#-wd{XG zvskt(P~8nAJGZdU#_Qc92&m%bg)s&MQG6c59ElOn*l7lY!7!c4{i)4~iOSb~)bmy_ zGavn`f7eLV32|>`)F66rK`rQ8+KK`FTu<_e=^E}6&%-2bfNlz|z z@ctv~UF#P>%lfQ}8jS~NpiW%fd0TSaRgI-Jmxc9rB6(JLfxk69P#HpbV70>!TYJ5COPnx6!KwII<&Mq#<=WYT(@ty|HiE)KmNjB`T~!I;Qy* zH0tk5j9=k5CqT*w9M@FybSd8VZ!faXM^Q;ODv6U!wx3rR-v8}x(-drn&MM|eZSo32$YvZVZgdoVKbhb?u#e)oRuwhr;D3v%@?@gqqd?{RW5 zRp(vjRJ}!rT&FSTAOCEWdHLS7cWoDF8*V*dE|bu*QI4Kj;O$d=ym7`jvpSz}#yR#K z&(DdFBgR4=!n5_BzH7ScaAGMxz$VSb{3fS{#|8-Id#_8~TeY1Hu#xNlhK)66$wL$Y z{QY6R4NRuGrpAAU_hzl`44( z{o>DOfyoAW0TbAw*!r`YgtW-tzxvbw@nHy?_r4O?0D*jsg z?}x;8zIpSz>L!@PiL3N#y;d^sFtLP0YuoL=O@)}l8P-m@gpPY~K|D|VRG!qH43{gya)@!x zZ*hVx%kfQ|qbi5YOWSHw*!;h59IQ2ICg{|q6W`fXr)y3n_p$V|KV}`0 z+VAqr5}OKA3|(Q}+kuFxqF{f!>cL?I>Q!8`-qg?7iuaKit3B0?#8!c8C!%x+e&Sci z9bhmcvEw#ly%KI%LKE|scB@AuQ#$g)$c!XkXSIHj3!aXizgUn>v-l)xfihmi*PL1NP@&_j%?T3Mp zj4JT972dZSB85}Au%&}J=c-;$uys+IJJu2P z*A!lSIJPlP@)y3+av9VIy@oxUm;Le&$!D1_8RC^lqayei5xFlU;!h^ z;|6!(RJ;A84oeQE03F?j^^q6B&uJcM-V9%W9BQmXBm#$)=*LJ5+u2M_Z17P1sfK%! z!!sz6(_Ce5=X)~jLPd~s3Y)r*YLe4|3rXUDtJ4+QTMQ9wiCH8|w8S!SANr&bz}RTR z1^p{E7xV~1Pa1&S!be>y?quKaZoahy_pp>Ue6(mOrdky}c||<&hSuS|#VVyhbt_>c z@Gk#eZW~UpVx0uYN;>cgYb1-KvOt;+PUBhPAiK=MPYF)t)=iOEkW!B%b@=RmNxf^o z0M(b?4VeRJC8urzqhB;Z9ryDp7^nRLdBmqnu5cSmeul(}#wM?>A)eqQhvUAaPfE)B zI~ZuBZY%fk3R%R4$iCv_lICk*G{zf|nDM>RK@Fvj@bhx+F*#t#E1=cfNCX$f5-%vjkEU_>hJkUo`QsI0fBw=4lPYU{$7HK`BY~$q} zkUsg;6scT)?YTy%C09{l$O_hI1wGqUc~Kttn6uUC)ZDTW%;C+iBp-Q0XNQIs+8b1E zvX_gy{obO%`gql|_)5GDYEdCk3gv2ZXCv!oZitcP@4G9l>MGO}Ts*QU7*@24ffCua zG}-`OVF;SL^1|DzGWyu`u@kFPvFM-__>--!`5|}BZl`GX@`YM>@;}h)0KtDC<>;V$ zKpn~iEGX!38)u1_1a|xv%$LzhqV#j1*(=@eOITXeu$euUBHS;KS5o-XuzQwH%x#)B(>YIb3zsB@Iw*WC>16$XmJr;IiU10oZON zF7fum5)eN%1&GX|T3dLz**2S;AUo~_jk4my!`1?x8jl?)Kqd2*zLY&HUpCcX{-Vi5 zX36H#suyG!o3-@v5-~Ga1ndy5DyZiRYpuc(7*t(h60bfdy%1&|R?_Ki5JHEcGsxm6K`okH_t>uGXh&(e-uBf$E`&1C*(f?BMM+^P$?jX@Z*1PBBnk+N)C}8(D z)|!xmT4Nx_rUKDb+*LZ4R|d|`vf0+-qScyM5>p~{16>@*dr9}TN4d>}H!__Ywqq9^SDweQ8AE6qjW`YOm3sIZ%>3IqU?p zARZAj5di@!qVx#1ae_h7c9Y>PrzOEG&7XBCiROIQom&?m2V|QdUFyWZacfZWigZln zZh-ttxy=a4ugb{0<=KkjlY1L?jo^zw>_$xX`cVdbj=0OpV!S_^XF7I+TZ;H)eSf_w-v$3 ztA#m%AX%!XIu?Xd$WQh1Mda)Wz&$ZtABSQJ-|goib!y4YDb%R&5O}><@tK} zef)kj$sa|gZNZh=6#z%ZAuF;&PqIIl*>{4&NVg}vm#=EMJvbCO^-}hR-Ik$9dC9gI z#_#IQ`w^B0?7bt^_A%C=+i&y`qApK1gEXa(9|?t7v_7tQL7jw&q$l{KWpYJ`zZ0kx zi`+Y25v3*Yjt24(%yBGLuV15jdh;A1oFP&*iN>|NAs>&d}?n%OIn;Q;$P zLAssW(`>Tj;I>aAdiu3t)|8UUWZ#eCD_1XTx2GBzR-5-9AOu(Fpa7eyWBH0Q#+4ki zFLiVA09{`l*GpW#g-O}Ks*LxN;X0KsbrB3$RL}`9g>AN^Nw>FUJq*qd)t

    8Vxd< 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 z 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 O`wwnlaSZJ5v3~)l(ADDr literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/image_classification_output_settings.png b/sdk/python/foundation-models/system/docs/images/image_classification_output_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc1e9a166c8b877cf6943c25ee87551ce67cc09 GIT binary patch literal 147456 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≥u%%B;fh{(kOwI* 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

    q{HyCaqWIGf}?WnP%7~-CP`{bQ@+j5sW}| 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 ICch2*FO&SM^Z)<= literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/instance_count.png b/sdk/python/foundation-models/system/docs/images/instance_count.png new file mode 100644 index 0000000000000000000000000000000000000000..663e4d6cd0138440708db17f254603e1a68bbe50 GIT binary patch literal 5442 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 literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/maximum_num_nodes.png b/sdk/python/foundation-models/system/docs/images/maximum_num_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..b591e25539d8f5045cf6c006af60e0d92b7086fa GIT binary patch literal 30095 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 WGQ|8uu@CZ>b80$gUa0)z&i?`&gRhhT literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/mlflow_model_tree_for_hf_image_cls_comp.png b/sdk/python/foundation-models/system/docs/images/mlflow_model_tree_for_hf_image_cls_comp.png new file mode 100644 index 0000000000000000000000000000000000000000..576694154243d301b6ad5775e4b980429fbb293d GIT binary patch literal 158525 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

    oy$YKou&u4zc)yT#Af)H;GR{%UR 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

    p#D^ZK;B9xhzBGHdl6I{06SBzy#nL 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ƭ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 literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/other_compute_target_for_image_components.png b/sdk/python/foundation-models/system/docs/images/other_compute_target_for_image_components.png new file mode 100644 index 0000000000000000000000000000000000000000..a53fd4bd9210e65d2eb9c96e05ce227fce1cb338 GIT binary patch literal 81290 zcmeFZcTm*nwl$2-L1#cQ0V0Zs1j(pGK|pboB#4bo4gvy_MQCzxbQnRBNX`m0NVaLo zX;gv|C1+3&u$v^Y$-MjF+;dNR-|x?_>Z@Ddp=zpy(dO4r*n91@*4_ac>WT;HSm|hJ zXbvhX{f>c`02-QK6n@3hZmRHrT($Ek>={HSi;rrhn zDCs)U&qCDuMo!F45%M0QSyG&EO^96kCA^$&PW6-=qWr@4Mp z=>YW)Ui$wQu!s5wj2AdAP=EjEEDsl2n*aXNsQI(zzrR6$coy@Vh583qjvV{XL+mcd ze^%mO=i-0uN{GXy^J1G&{_ylrsPFb-@_fHd{`INuT(hTaF8-C2VVO8Fs~2m&=$oBhg`kFXN#@!@=X?ftOOe=RwBZQ|TFa@@Dn@!_d~u{Sz}{;52vH-euX zyLI`34b2_)w^kiId6g^uIiGG5jvU?SDsdbe{rZ$WWWb?XmY%ygtFXsNCa-#Xz1K8Q zXyJ%Oear>36q}yB`K69qlblTWdlMr&+mwpERKGB0{{bH~%&a>d=v)p^Id6P7hHa~0uTg`|BFGRcWOosH_I#$NN+PkAr3;Z7eGurR9& z3fOZZ+c;*E+8wiWYrj_u0luEPOYI6}2fkIGiAdG&A1 zyKR1|Pwn~4zCcjucP{Br2>;j#MARz-dljx&nm}_kW(j$ zM|?b8e!A~IqI*qov-Rx0O&4XY*48GI7jIjq82Qy;>T~}1W&Z>gn|Tcz_q(bf;deQV z6N&`HRyi4$VfRTd>f`um?ZqRVMAbcn)3P2la6ymUl3TmyJU48pk;6>JDhc9#-I$1X zSjb9gNtCH4Wh9>tJ}KFvNWBm*kM1E{8vSGcX@AQkcOLzn@o3|J)LLi4liUbBotTd; zoQSijgLRJn>ELMuJnB8=^yA(Bdi(MjW_m%5qpn98vlBg-j>d--*$qtCQ2z>zwr?DJ zO`X~m=!F=E%5cXRX;zS!PpslWnA5)6c zWQ*fEDWe{)(lN~p^=A3&hDwx0h%bQ<^DasB-%q8ZR9$<@&?oBtElkn0JxzJ-9Qg+M zf$LOmah=@8ba-OMQbM3mkxmY=McT3Rwqh-8_~rU!3heplSg3r6Kwin&@+jw7=Y#m3 z@L9#U@bcL*n*`tOwYF^SeCg`rRG;E}{`yk&A$tF26Z};|gds0Cua@XCKUdM0$Mh36 z*n_8}&ff@P3Db5OaUJoFRvYco(idX5{NwME#TJ=V<7%G^F4MhUq5fY#JhkLV7t55v zkt1m9PD3;h92Di`>%GIe#AjIMOnTvv%kTG@f6lmU8a`%6KA)lD_za2Ir97Ea;Y)fr z=vY7QiM{jv6kc`RNc6?5Hk~Kay6xIr7##hb0K1|-p7IQBV{hCNsUze4ikN)6sPYKM z3}w)%wRx$kwdsw?hf#md5Pz(;p?Jupi5L|7T#_(w-a{d9%G+0Ot?b?%8`U0NYnNFy zcRnu{ND}pMgpv#!Gc%In3{|CF%l^WUe9|thK|HU&G?{QL-mXZOnN^j7u<^gX$bshC zdKdS}yWKWe3e9R%6UksaLFA;Z#mJe%eQZ^PBer|kqtnStGXs+J4NdkxGK$*QwzuYd z>v`gBkIH&1`QJ{xF|KbRjC)A#FSJQ`@cuX5{THo8Xw%xg(ISs^X&W~yS_%$PJ}}4# zqJ*OxCqfeC`?GLsWuRVuXRVdaNS_m zewD>?#gtn1gRjz?B*uTSYNCdCQvKlR{B1-yA1tm9_K zV^dMhd`roaev&p5K14a%*vH+#saah2!F_wBN#)7Qn?F97K|ENyKa)09_4Til z1tE7J@PAUw3|Ja_FdnI02M?n?_EIa8aiaXkd-}0=``Mcmt$F;)F(rbu8-E=*@glT) zFej<_xwerzH+_BNoH{k8zSDXClet-+xpmQ71FoIJ*t8qsoHv4A&tH7_?IZsQ_NxSP zSN8K>J)2ync!w%?BW&beDa&MU7v>UH30oaGY0I=XpL6y_&?zTowiDXvuQgv@_{gcN zBtko5aXn5%a>UEYYi&Gw?PC-Efi|6cSGt*jIf)49LEiMs-+!zr&3LbVed^f2mr}+q00aOaMA1bQ_6qab0 z-=Zo~8R6G#eU_FeT)EU9yRSw9VviIlEqpYue6}Hv+fcKt$T=9l?*PkT*I{={qpp^3 zpTdcA!}-S5UTG;})eM)uJ$Hk(8H08GG-0gQzK$YPkD;rfEnFd{y#4>W2Jm{2y0Wlx(w-QpbAAsnpEC*= zE0n*cY2K0*M_4gbYpF@JwZ?dRA^Nf5OP7AD3_*iC+j{blAQ5aaid33ZXUnC7OKoNf z(XS=@8GwZ&2*fa#OpR3gGJElh_@&#!3Rh%(cktcN?{3b0J|3knOs{~A>fcH9Stq$; zZcN3j5rvhOLoSf({nova)AUcq(HQSsd)ofnUPw|a;@epnUrXmZYX$Mdai z-$i!5MF8jZ0LGKGxwQ-&Yo)$C`h{OGQy+`#FLp3C-)ZNjjlol2R+iR-4o+SR8KQ}3{1k&+8s0-;w(&2ke0Z>=lFdk05 zSxFzjeek42lk`PHulZVW^_5^Y8Hv0ya#pV`u{lLC^tA5NOx+8qZ#3xWw$@sGL+XN0 zPI7jsZrBr>CET$*+$_fKCALCKG%6sCY}g^-Vu^S4?jz|bO3IuTWIR_GGs9G@O+6R@0GsC zCa*e~ray9qHYr>Y50f^Sf!OYjZS$O~JkF^Y(j<^YggT*H%C-<50;Q4{+F1BkmTP+0 z%)(KqQ4+PW_*p}n9KsEwW&^rHHeBaz+;E)ZV2NWNbxpDu$zB~GqUfVb9M@O#^bzQy zt&tdf@F7R}`J>*Tu7T$|nKQ*Ba!G&{z7JP=qMC?3u@n_p+Z%K2D9i?zKl6sIpReB8 z63OQ$_Y%eqTvPH(yW5tPofoHV4rt-FT@SyCVDaEX0>p-UChy{uHgch^a>sT}Ci^Dk zW5pkQ`Fj=M@M2a5$^Teh?lGQB?NYt^3UDP?KEKMIv`)1g3B6)_HiZAPFYTE|z;zGM+yH_Gprp*u>rg&|pV0L*qlp1W45w8B;mbxfJ zb&SumpV)km@IWQhZDYW=CwiK3!?qmrNvb-wQ)3bp0t{@@zxp@t z-_)>kdt*0H#B?;TunVr9SFVd*p*0h%L!yb2J%r-6T>WAc!_10@TpA}RY0BXXxl|9T zQNvGLqh7vH)|+9N`oeBA9iuVbAdnxVDqQ;em7J(QYb?&-DDa8PM{|pZ8{V6WPF-H^ zH4Ck6mK;gY#x^&9>5kyjToCtB<pQ~38;QnDWP~@~)oY*G;YZaxOeHckR)5IGKL4?~<3_UNs9kA_~7vY6J}4#%M=Z{43vC( zp}LTjg+eI8`w&7IG@&SJ%RP;n-9lJ@W}|0f z+2cxBF2^pccI{MtbrP;NJ78%Dfq{`6PFAYV)^z9KUen}ZN2OB_8o&5sLxcCv$_Z*U z)K8TI7OxFBmlQM3`NHqGkyMny!%w!}Mhg%F>u$+!MdV7__MS&)6G}niu->?Q{KeBf zMxJ(W?T4hZ0|V4eiFbp=yZs@$3FK$3e+$1=@EfM@nLu7lJ{I?m_V~T4DP?*VjEBvJ z&pVFRu!vgRH0m-^dtx9S=0l_Tv;tM8>l6s9N$wUoaG%$@$@ugA_-G^6f^_Pq4|hJC zt;u&&9EcQmd%lD2+?io5z>v|;YTxJE=`-cwk_ZGS!ziR*)Rg_KE`%+fn_IvJ0)Lej z_SNhi#%c&g1;lr zu>5}iTPq`ML|G`QPHac_{wqJzusmT9x52+>_$ z`xfrlC{%oBfPX$URPI^vu!lfC)ic~ZtipPZ*hK(RMo^{xvKzWNxnYr$y(fSS`l#68JUe)47O=Q=xq4UOzmKaS zgm4sgApOh^l_O38YM&>{8?3LC8SMmhH(1lm475?kQ z3iU3}K$HnS=}>VYpI>@1!D$pSQfu}zAn>Z;(#WI$1+}KsTmh^LN=Wyv5)~}Qjarq~ zW0e+10R=ZH@=JgH^Vle$`DOvC&%JuE>*ASxi%&c{lx?Sb368Z)+BLiNMpIJfo-BTGJ$4T5&4pF_3?c1=|VzX^#FrvbM z8q~MDVyljj@ATUa^)}!wpa@V%T%`KVcV{;)p01i@-E)DQ=yB|*s*&eRVa}6Iz{b(I z8*$jJ_2ousN9;Mjce@OpIp%?Fhni$FZ1R_B6thC*x24!)iOjn9!tVDKm>Xf2AOhDw z&9Ru}0)-60D>o~QQ*pv(xe-3HAwJt6vsHfQ^3)Xxi>4T_dlQI8aGQv=T(F*1UUUU| zxP^LEVvY-)+%Rz0KUMxIeXnV!0FV|@OXMyAz(mQtKyZ%19nQn)2zpNd)Ch$G4$u_k z#lRcEtZ-Hb?1~K$eFoLR+;C;8ezE;L%J`h((PgTJ-pgI$42Q5iGlD0i9()npUj`u{ zG9SAPN5PzJh#b$zY5>L0Vpdj?tS72IQB1w0pw%6rbjXt|x_oy~Lk*0Wob zkx-Nq^ZDc2oTy5uN2OU`vmARPwSV=$oeu;efJ7JBrO($0P*C5gx$!3!mnJ8=BC!u!YDJgeX7kb%)Ajt?r>Lo>%yWc1MV-aoS9~5fue#t>eX} z5qqB?b^xKEH6?71fs@)Pz?Bzld*8rW`Ry3b@1dt9>__X0aa*X0GCTQy0ihKShjSUDuvSg7 z8Q2Pb=#UB;__ObgLF6(Ygp(^e{byGhZfbRmeTQYY>cn85>^nI6<^w|@(14SiSiHSC zBD%W0`DuGm@?Hfh$87b-*S-Z*^=fV_EU;5zrX7rhWg(?SMf-9WGI>@v!hQ89X!1l8Fu6HDl!rf`4 z#L43ikHG0j)b_*E77#C(n@iay*uF0+o+J zA#5^r3^LP)C5N0fy?}O{heK;Ip!rDi6QtBfQMYvzB%$1;{&TK}GESuSwLT-I|X!HOmG4jmi* zJjM=XT!b`t35T#}Jn9KCxSBE`6&Azdlnwhal!Asb*SRFW4!YPrSG7N~7}Eq8U&i-Q zc)4)TRTC?AIh=^h+4aT^l=c4B#+hWt@h93;Z!V}Zf8oD(gE9djuTjAS$AMEUhu~)l z7q0myhBjt^?0t?<_Wbb;R3452&6{)kieMjXG)hS=(h6Hz+drPl*8tHIsf{yhyMDY` zIv$^AeW$a^dt*8lt^|4QW6mW2Y}VpE6A?>6nmR(b1ZutaOR=Vdf+@YwTMdNW3(2Rj z#{jrkU4~2M2)O9_SY7a9Tb%Mx4yHb1_XH8o8LF;_h!+AgW@(5gOMfl|WK#>rAQo4V zlETPP0hlrc7+Z+q_>EZUr-p#vL=$WP$_7K$md>9DVidla*o(P4Q_PS}ea<^wmwC9N zqzw!K)V4u<&e>?&chdH`LuMtT*Z>GNW1t?4ij03C?B z@SLjeUI`WTo}Gor?FO+b)vP{bEhRxc&nDV$2MR5Uo4?l4e&+E`J z;9Kqp>An3(iNV1>HNLmzTa^HwlSS&m-74-B?~Ro{%B@!~VKHRN|B7RUTz7e;*KGcK zYG@q@7Xn_%;ynhUGWO)xD;py_awvW~WXfli%UccOJ;NvTqJ<3$EQg@>u+`6G{83Iy zk6*~TS?)5ki?!7x`ncHnY-{|F%)h4>L1fV={GLF_Rm=$vR?3TVejJ+n2@O5eJN&mp zw$am?mpW<*QWrv`$*&PVM+HQ1{cH^XT0wYyGAzvLRr(?pEWN(-i((JLQ$XPf+?sfZE-evCxThU8-9)zt_r3a z_YeSZTWV8;(i@Rv(k|06)GRSg=YIHGzt;twIEFai11BzWv1i^#XA!AX)L4w>^`Sp& z?h2Q#O~j9N>pKLa;)t_Q6cPhOe$Euj)+Epx;Q$81c@{yB{S%R@!TxK&JA)VRP3liM z-OK@s8!3ywgL-F1?#x6ec-90F<%kl1G)M4yn+3&(#4b@lRa4Wvth#@GMte>A{C?cr zu&lcL)=~w38}N>(XfjR2bq63pfIT?ovin2kvr|3!#)y+g_}GEZ7G$s1vIx7XwTZP~ zsWygY+3z_^6Stp&Dee_;G`pn*oblwJA3s?ToF)e+dc!VYzr z+KyZDY$$_@-T!>%r)%`G%Id$KJ@~Y&^ej|}=)|M~4GgThm`%5!#E93T)O^h`v+|ju zz+Hik`Y~VU|5@`z@&{-IwSYH|RC-cEKwhhZs=(~~=U4xw${@lR>f%#~NJLa)5!}aK z=MFXE%by%75&xG|+0Y9X^pi1#p`4p{PQtlHd$?{vYN%qhP=Par$Ea$MgJu z;^)(OVpZMHlX(uz3v3`|Ib2?B61@PmJByr`o5V26c_1^5y-*bnz-sAopNt<#o9lWy?~OI-ve!LmS4H@44BSNH{_rwnAJlLngkF)=ApVrR;&e1=1}Km z;B)S6&N%pHOPtwvC63<<>bZLTU+U|#y?y;d<+d*H+{$!&{&weUd2tZuiVi=s4ycmUOTt9rlGu+({9PhO zvU7NG#dXyrGgz0oJ!Z?Z^ol_NvUJ6eGdfQ9@$O^r9v2g=KztYmMMxQUnzvj9wEWSHupw-hssFW_y({6 zfu3^CV`cgT6uHi)9{jxr@nwaDR#Y@&#%H_^AKb z(G4sJwWvr#7BzlV)>{LX6Uf@}SgZB&;!U}Wb1c%%_p7ulpsEi)99S9yKJn&6Jl=NDk@yYb5kt2_;1XDs2$HRQ63g zM`u?%vB31LUdp%2AdI}5;T$D~g%?oi1TPCfVin%4pW&wXg!3qp68`-V@wB_FGI(Dc z-~V>*8z+-2#2`m-M~pMkEN0!RPGBtF^mM+Ngn4mT-!=03*kiNkPz(2``Iqd5u*ZWJ zePxZU6bb0YkMBrYuP;-@n}}j$MxztRIXvRCVP^o_KMzNAQh%btInTKT*|Q0c*8W(J=au*DPNeEzsv?^M%olJb_z4|7>-FDZ&h_UtvqOBfK9 z6CU23y8rg>lbqSD;Y0J^8%NBkA=fzmLAU(&eCV!g;0>aWM71BAl1`Bfe){+ak;kqq zAQ#HDHKo|?tqn!c{}!?=P)b7PtZ7i(2te5V4y0Uxd8~O<04myA_q9URbrNWd zo~2d^hvCbJ+4ZuCMP$sn+;}vKStF@g7tHGJ4S*o~?fYP<)5^tYAA3SAb0Dr;_Z+g( z*(L*RJ)Rs#0D4|q%2yBZ8Yuf!)dw}tPG*P8C5LEwG%Xo!0JG;HI&1p*CxZ}HWFfwC%M80Wz!m(qQ;HsIK~IxrcA`LRp(-3zy!jXW*cj6W#R zd&aZw(B&Ujg5XZ>+-W`qMhd1pQ6a0m^h^5uLlj`aB_#%IiPK(I$<7C%Os&5;*@e8j z&CNjTSu7Hkh@>H9%4qqVHFKGAtFY{cg`U``hPfN0LVGAXJLWW{9i)BBLYxzpa;#H$ zC>A%Y*Vh_0@FRaTw9j29Rf<%nx#se;C#X6(ZOjzs|2P@e-BEF~+L2UjZ}h`pZf?x? zmpaR-Kry2;EmHSlbsS^sbY+WYs%noCC=x;i%f>#55)`>DH7_~qhgwuuKO%a2XS(zR z~^;l9Ds2otxghVx`}P>9G!JBmH>`NItPM;dzUQ z<_f-cvB{t;8rg1llM?(j%iTTM$8ahpI2m}`J}0-$`T9knE>))=$kT(gG2Js$btfHy zz`i9K?}^8Jc@5^nK2bT)c+7GOyPpLLm%Z*bAt+#01#lCpU*CW|QG{M6YF|RTc-j}e zIBjq%%#8v4-BPEDUu5^)oF@R~W8p-Edb`i-rpid7vk2zRg`w&`ag+CdP8;DZpXV(D z{T1Vr-0t47)`3f#>Vq_521b#-qBXnay_I5G4D3tKsZ|Fu@O7i{H4tYZFB z_j;l_u32+dC7rrekseP~!D#dj(mnglpXm?>LHc>wSlRR(ejNv8tL3p3iRh$9H)&hB+&!P~yOmvM82n;sNK-NkL{cM-9EP;>YGl1) z&?IVrua66DF^CfZukxqt_m~I#w68H=vb|ngTC`X32^N9{!7_2t0!!zQ53%JF6C*BW z*vJCGlfHip<63@a1VCrU6O%6Gp&rZ?5)kaIiq;~DbI8Opi&YzbisTW zT$J=v{78DN>{G6xaz?tFlnG!*niVJWI(2zb#>Y!+Xm2{^xt21E@nJ2-D_HVT`7m*E%@;7D%mc5Z<_}*9{9ZYa$ZQ! zH8s%3$c2}2VrS1{doX{$=6MyWfN{lV=aunKDb?nv8jc~u8!PQA>nSiO27%-#O|Q|M z#i*ycr${$8knc)NRS(dgVWCY19u6upF?e+&K7XtxvSk~O*jIa;ajB$q8P{ zOQ#uhVEQYrqkT(iwq(q7*KXg8|7=W7iFxnp)X}P$UaOh!Yy2uuXG4PCa;mzJ&9^cN ztHoOyg_6S5mhZ=IDiVn;x^2%#a>2{%C7>DVg^#H#$r$Pwm5xm zM07}G85=U2`G9lJR(Z-w&`v4U#?1Ij&%|!`M;l@4g z2Uqh#u6g?*qqU9bDDZLOzf=*=`dPLUeIXJqggpZ@O(N|<2N2^Cu|*t*>=209+5rhp ztL?NYkaUabF?QL4hEux^HjwVfkxBVWhP;*Xs76X~ZdYytvzD!= zIiHg2Sg_>wgyC{K`}l&B_!h&RC?Apbxf^R+?GKwS)PM7gP^K&(Kk?pIGzq}}hS zUrN;M72DeX9!^JsZ1w`?;~b>r*6dQVRqgPxC$Ho!rUE7HSY+%5FY6~`*|Z&w<_{NG zR5-QjIrfy!m=dmosopxjFTaO4^A~sZa`mRPp^=ZJ0kbt#G=8maxWD!vHP6DI>#$|o z7aS++h*`C#m4Ii7_~^QO=1E<;gfu&(>mmYCzukki9CjxAAHJs{gzXw6uNUnAWJ>fC zYk%=x9Z4Nkg*SmO&zRHn(FJv4QMMsXqaHQKdP}e_RtTzHaICU@H~{e!Y&U{#I%r1z&}|17Wuh4=9;IKzQ!@Cs0>B%t8(Bwm4*G> zG51AqzsP`dreGXOvDU|uR{C^gLGaY9Wi+I@$4Xmc8TfceCsx3;+u*4At6($gjga!( zj%-%xJ%{UI1>g4#A431MAZnf}K<__B6#Ux?@qm#ZsAYNUfUh(#P`Mp>^C)_Xo4XqV%D8( zs>LgK2^1OBxV4bAivO%n{;p-@5d}!yDhG5}5CBLgAbvU`8{jui?p{NEdn!V zqjHMLDFmf4_o-W7=^DkJF-6%&@p`>)0 zpYtnk7_f-98-<1RHe!m}%gkqRyFW3b695=HFz0GUUAaQVgBN8i$7$4Y($3#CxTnMO zW}w-mQNWrXH?1->z^`gJgn%Whe0T$bryyV5kNlxar-^SdlW9hxF2I8^J}kP ze8!I5pufjK=v!`4JeIO};g?jio;{A=ORtSS4bWT^B3eLnsf!bccBVI4{o`t<67cCJID=^6^+EM{1j6?w|ELXJHYE)e10=Hk8O$NmDm0oEa9& z5PbVtf$;Gx_t(D`=x}#ZJ;2P*$5KQF7>*jdh^G##?mKik0oR@-=tsc3&f;lb(>(L~ z;bDHizpTL(!uB2+z)tuizr7Vl@k@KIGfsI`;XJ7DDo>2PLpCqic~0|w0T1R}E^>S3 zH-Hi0TpxRrY4k)Z*l^;txiM~q>3_5@T^49fgzWRSyY-${P~v&+8{QjEMZ?Zvw5G99 z+-&6&;&##cQpSNS7Y(R;c3+qF?}Gq3aR{#4J(P3xuA|PFDlJnmwqVQr@yB03q~wwX zA<4sfhctkYCkF0vD1k$X1>H>TkGugd0xPpV_0G*-;r#k!2*UXsDFfZGH6HO=eJr zb->#Rq9WZ@yoM!V$EH zUspm4&+!8f?Leh<7oP$%IngWkrbiS=+s)Z=%1#80(tNNsLBGKg**S5HrZcC7rZq@_dDNRvlm`$KY0c1oonY*n^atj zb$8j8&)5Q;a9Y!^b;RLF2X(y)s}J`FUw`YbQ;U(_ilYKU*47pX46Ox1mW+{dH1&e= z0Bqf~_oH+zVk`J>^S%@ni3dU#61Xg3wruJKWVBJJmdSDRaUtwd!7s-*?F1*ip5y7MqX5|(6zRc* zi$gLT1C&WRHo1ihw=J;btUJ1NzvI=_oZdqkmsRB;=&s%Lj+*TO!|hMf?Do?X*|(2jy3dx<k z40pOlC|7RY$BhB@3kFNPB*ZRZC9tm;RRGd+gv4~u@B`+Ipx@wY{eND69={U)R-$fO z78We~H^~MoP-}pR`=6Hi*v|Q!yla8A_jdzEEU2q3#}jMlnqNg~8(l(*^W*AU;<~6D zw%{OMvin+h(DWTZxW+Nx1XlT*36f7jM!e*?({Bp>7682(3iMi=`c!PDhW}=y%xx-=i25-&_&FKQ6##Y%tibTaGP|MER7bBl^&XMo@;Xhz>bz$?$k_0R>66PvfB|mMy|!rGEkta(xTY5ihBNc}{NPUSX~02E*%wKx zfg)9IM$Pi52`s;P5Da%_(AwmVwfMvx-IQc!9+`}Lq3{REFebKhc@BjBPuZoMTOn92 zZH~H2xw_%Bsmm|u&8NnEH@R>4h+cwCJ-~LGx!<_dXTWA? zD5ju_w)~uE_+u$_S+dtuU%9_PzAW9>4_wmT&h2(;a<^~!0E`FD3G><(Sx2!J&Eh>l z$k5ldnfh7g_HO>T`_cip?m&E$9)ErVqsJjAgtAuwxG!dTSS2g44NauML(5J@=?p`A z0ft*gTEx2G<6eToR9)YC8bsXkCpOGViSZa$;vXM;nz}W6h+SHTsZ}C!%TZOqFrg-6 zFq*eP#5rEi=4#*tt_q;VkQcxOtWFhK_wkWh&yX0C-+;uLLOShct3p!Tonf2&O073f zFgT22iozfGxKo_87-Y++h^u}Jz0d$v;H(${=yHST0h^q5So_tbRj7buG~raTFSh+_PVFdtol0ZW zpZ)*dbefma3Z{i(_JbuQusLJky%Xpaw}gI>P}D}xDk;1vznn2^ikLm9R@qY89nYcu zjV4cwWhx^>RtxC8V>{b(J6XM;M&R|8UUUGb7>eZ zA)X!oXcz&V4%fGkc^u&>C$X_;fWSZV^?fLq^N&VtLK|qo=dPd@NwA$x%PMVjM>1-u zvF)+s^4mi%JBd2h?I9~(T2SxAhuDY(aK{V9l{pbeuM6F0+?I~;4G_;wM>fj!|@N?3s*x8oQ-8ynm@w+ZhQxw z%P6uGGV>@ns6wF2Oqe~>h;9MtYqTGDajzaq@hQK{l^k~C%;#T+%SL=K2!J*|v=a=YY>kjDvvkfhm<>a& zF-1%ub#w;WN zx${%GF%P~2t`Tudo;XfoQ!{BHmzm=&ouF@?>A-W~Ktc%JdN$y-?ZUZwet-3J6gq_X zR}(s9DACoM-1HXBSqgLR^V&@ZuG%3g%r4R@%K@XSV zcF%~3kDv-hHWQtzeE=S9YMP^q?zfK7CNyB4zFE2%0)4Q8{@NacO9`5vN$> zH2!Z)mqy72GU^PujRlVZ)W}+v(H=&fsQHn~lbet`PXpeG_o)&K<=>C#aP5b*4ObJj zV6|qg5D6Sn*FQL=BH%jFDS5*ZV#`i8f0wpgHsE_rY`byN zoKjW6I6DQs<=yz40!EB7M|lHBUhGgk7wsyzf=d7igMqL>*qDz?^Eixa@HPMAZ-t>L z>$5|F3MNTQWI)B^jsRoK-@WXchraepa^5yYrNAmU^yjf4h zU4T2m$JC`v()T1RpjupNdvz>(ChAV2a~@E7)pzT2$Z6gkmZ;G1y4Rx05!JbM-yYg2 zwhHpBVY)zcyOT7aCE`m{yCf%fzDLfeNkHt3guIgBK#TNL&f}q;tnk?>Ky|U;&{wX% zl~`=;vi(&oBiAO0w|5RjEcAALLe!=`G=uJD^BR5d=`mD*23y51)KE`kb zCg9m^cdfk;*t?|}vDQ#1wCbXN?(jh_`3h)n)qP;?bI6|?PvNi3hjLdB zS_T+-QE^3deVbl=gzu(S$5_TCM?jm38!I!gR;oRbWls`;S0$d(GKBMt?tMd9Wue`G z1Wa{#>q~c{WyUqDGbCOtbR-wMQ0benq-x+n`AFi(Eu9JIsR~pyIu)KP@?*;Rl3R2X zV6GdwREUyBl#@&17rvnIvW;o5tf0$Mi|`fP9P?f3QYy#fL%(ZarXX7?F#f1AKp<%h zb)+4X9DJj2nAcAd<8O-`lcFtBoJP=-fqDSO78*s8#~C!lBdaEnTM{+yxUj3VM(0^Q zIVkb*JvW$3^q3DTzbft{^jXB$A~u=U7#KOPRqosj0;m`k8@r5FRH+SW_d1v4b{07{ z=_s7aQ=}7k23wd+^igrD1(_{TyEU@%qfVxKlg7{@x0uU~Nv!J_L=6!VmNpObF^A#* zvj>5M3an!v0hTs?=qYm8j_Ap!X>>stXF{6g><7RpqLquppV9 z#j9D*u{%=kmvc3dlu+;!;FWk=g|@#e|e)qW+vnTEy{1&}(-{YDu4TO^`;PebTau(~DfsmLwQ?-$W~VkO9P^_CV<~wX zcH2^<=#qu1+m7pn9{}3D_}!Jx-_T{0j_@^3joL3jV|`8Oz$1@*F>>LdV`_%ZEZ)l7q7(z)sYPR#t^>?W{W{ zc#KcZk4u{WLBwh6iXr=rj%(NTMe4~#uPc!aF8`NKPh=BBG%VtSy@G27pXD&5|Gnt1^Zh?~uq zRq%5ins3XHx3~%t!uHd-;fo=?W|=y7|9H`2PPOnFegDh}@CkVpm4Yy&{IN$I$Hqow zs)Iu1cQRFUY_-Jn-dvq7QC^gC+`*fDvfv(Sp!)YOrNs{hL>9{Jp-H#-e5OF%WXJXD zM#)r#3!wu%NNs+WGp!RCRlykCLC=M(uF*lWsAGqzbe5OuV9(MBQ8#V+C{leh@M`iF zqezvkupG;R*@2CR7_XfV5iytX)3>ZTuAjWIn10Y~Ig&X5p?#qqW5Fn+hp)V--SnLX zYBB-f(2U^x$#B>tV9k0||I7~cd>xucXVZSRr2c(b=^Pb_1kC^*SEw0H8k+x1A^g|I z|7Rusvl9PnW^@wV4JflisaK!u>xc$gRS~%FMe4ByG*`UO{S+@~G-}8=C0m&9H4n{M zwV%!kXC9@?gW9@LGdwsU#Sw|^d-PxD0lnTG))2X7dW`3$KN{zN z+I|4}=p(uS&1I~Ge&t2kUE%~uZzVvDjG@vUS-o}}M5rSg&EF3B!+td|pd}Z^;jpDZ zKkNk{8oeS$-lL&nfQVYl-p&9h)73dN@fR{o!K}C!xFa{Owl(Z&Gu>@OK{Mt+e)CNL zmU@ks>OnQwVPKOEYNG-fA_)4v#yK~&cG=a$L1fp=Q5_I%y?hJ}>MMSq5cb|Alk*Gw zs*|WGocZP{)W=*Xb%5pknIf3Icps|DQ_!P14;A)qkG=zScN#er`jk(~xY)w5I9Ym~ zJ4H~)*8$}dZHIVoB7-(*1a&3PRxGykLJgXNiml;JzopA^&?Z^&xO5B=)Cwk6+f3R2 zHRCS!rv|BIUaqLJr!Yc86@*-?j&w&bAJzli$^xXh7c7{G2aDj=07!;XAhnOZdV2a9 zLR}^osa6A;zmzL~3qbV5Jd`5eumPxJ7IiP(hn{^oOeG?rfj>=8rG{5D=Wk_#1lpFW zIB8?vtz#C;+hkT9X?V&kqQ4-Zbk{~i{n*qWR+ma&+& zh+m8{x>lCtY)D$C^P99bg-1Z_1QLr*qqaRkSo4n1YVh^d0M?IV^M&@JzHP9z21D&) zvn~hI-9FVdf|ROK94(BB*5dA9SeM#Idwv;31Qc*ga#}hjexyljV7+bMw%wRV>N0B2 zjS;iLY-f^D#~i2tu|rRh*;{HSN+HV90Brusa4<;v+>cXMw1yn$_Xj#8uVp3(A(I188R7sxrjUbM8;u^iC@bp_qx86i>(saN!(wv zI88xp9#{g^cea#UU6J1xiW=8-heK3{qH{m&UiYq8(S+=;e!SoXz#=PqAZlV$mtF2e zO`m3+uWzq)`=eGbSlH7L7I4!=1NORit<-^qkwlXP``p{t+TB(0Q_4M&dHLYfha(fp zN}KXxX{&u3R3|NTd3I;aAgLTlFBE^&u{jDO4_ZQudpPp@!W6jqSPEf#>%mRME>iJB z!S9R)T~XTKpMfr6IhW{+L3G#%221i*s_%zuRIu?GW{AE5-` zg1vC+6IG)u19KFIb`18R3h_##V4=_ZA(*{!Gwv5;hd%Z2BZuzYIphbcvk~y4y(RVa zPc&zB6u7(B=Udw;zECj{KYvDJ7r?#eScNZX7MOEWdkY2$Bn?&YFM^1YfA{5^0tmmg zKs7}J#r+8FL}NC&IkPluWeCi&rr=?2-5W!a724WTUM$znH`*m+UNu8=g!xbHoQvgX z-hs*MC?Wj`Yyjebr+6b3*l}Osu78x4MvcEr?-jb-VcG!kC6-RSGm>!=&3GvIf>8^J z-+O~k!x6g0Tf}&y9{|8Sgv;qquE42cD4&ENcDxcr?Gvpm8;O zuZ&-N?1$VXeN}v??levKxmFZmlmx)6E`m$k0963A4^o*t3USYJ#`Nf_nwt{hPV)7} z>@_8ciiRiMqI-DSsp$gl^ggO;3|sLWpj@sWS7#2#-5{<0z*aIP=-P~<>u9jw@3|P7b5<>m%ax2S}u9-cJz*5 zc)atRJxMR}yj{{PryHL-+wDqF1 zc?zumx!B1(#tG$j`HW2hvWhU^R^ajn3`utw5=7s!A?PI?)lQ^Ez9riiO9r6(#Km1S zS7DCe_hoN)O=`Pj1T!C`ASPNf=4Gh{3Kl527+Uc;kF<;4YOQikek%xS92%kM6?(LK zTqY@xu+-nan7?Th;k%;}-CkNz$7)l9=62;qt9-3%V0+IW4@!3A1ATH!A*9`LtcjDg zeVRA$K-G7C&E+P=waY}#`qITCZe;{>){ncR{Jc!{997IX-x{wKid?oGTE^bX5sbVg z$i>ishKX4rKd1a{Q7~`Cxd26?eQ6kSk+dB+B-f0%+X*5t(aZ{jmE1RTaK)47ZnuF> zqGeL;GSja%)s?MXRhR-!TVex6bpu$r4;{!`=#_u;m;DS0MUc0&dy63hbU;5&#N2HQ zm<-&3LNVP&I=A;zn6BWaSM9Tvb!rDqC3AuJd`kv~p@1b2qP*_78>zgz5RE6$gZ_x@ z1RK!m;!&r{O_a5(ECZIjP$PmB{0;J3Gy#TP==PA4dVMuG^3#zOX)OuZl#mYCW&Y$# zz-eU<62BqBrU=GnX!XepS^1=U8uH6VI}a<=gS*#z#i6VS&9&`E&PH#Z#6?hAM&3e; zcUprbnq+E)lEsR^97Mz9BJlrf^|}UdM}184)lG5%+nfp$1MjTf)N9{HZB13$ zu?izHiK2;~H|V@);ZQXfYhk~ar?qB`HGNF*s<#oS+#yv8`%a(mp5)rvcc&@|`hbN- z^msE}frQWP?jP%SfSA!AX- zB&5t5G?+^kGM3q5kuqm!Fq8}-LsE*35He@%zFzkCakqW$M@Zk-3UjYL8_Q5`@&o64Oemuqf07Hp?7;;Kj-wO#p`57Spcvv01 zd<69C%R-iy8>J75gsdhxLGF3X$HLz?But+Dg|7YLxfqX;qS-f{hk>-qT%+I1Y>pD_ zXY-&ZI#G=VD)`WbeJ;_1a6Mfp{C0cR+E1}T`tzM-b?!EZjLh)NRiZt=I=T~qQtAi= z$~M=@p*FE>OVPTwsAp4TPleT8fk{0st{K8E-ga;n#Xw!L9NY{V$Y*1dG3XKi#Ce1H zEmplZRV38OKDUxwt|NZOfvf0rYJN?Z7X(NJLCOe!v`25UhLxu5n35Xkv~~$HPrN!J zf8@{?*PhHCJvV@zue=;_Pj0%p1hwZlF#%rY=@YLWKHTcugK;-tf{@H66;CG@#TMV8 zjQk3ZtA?CwoyQ)AgH;j1i$h&i|H?S-6T`@wA5e*6-17OePX;00cHeU31%?k}$fUfX z0TXx9&tptHVWe--$gpl8v4*ZbBDgyTgc9&BU_%B%T`!hx>+s^*sxjaM`zd~x7r|+v zZ%UcMv<1@lM7ZX}A%3dF9|Ndlft5dfEs<<F|h@=-ry&j=AZU{2uFGn6q z>VB8r=d;kW%L0y*cNw%MC|hLeo{#H9LhZEZ0P%uRAF;Z`UWf-}VnQbBpzA^(Gz zz2Y=Hv!pYsX#N&0ao{02*SZc*mUkyI+~JCbtAF|~&}k_hS>}S5@4Z^zo17&l=nDzO z6;A+Z?xR$|Y4>1VsbvdPR1{EXzY7<6W~a%MFqmWy|2Iqc2Ui8b>pzsu`^D$?BC$;} z@n>TRuZx}sg#OTcKVjg5HJmjNX?-isc~C0+mC?cHn+5lWDIOen7#1PpN8S7vWuMFD z3@%qevAS=VBu#k;!!7bi?5R4CIGDi_w&TFLlR?ML2c9P}nA_ZWI+%1-q;zvH%2ht< z2=`I1dS0=I%8~Vzub?OO%YDV$n|JNRWF1p#$q`t&y&HWrNi9>ICtnuVoXy`>oGJQ9 z-xhKk>e@(2qoC(~vND(c+N^5n#^pTCK!5>N@PGieRhZ-HDV--@(Qkp}n>c9XJag5U zTFE1#n1^x#t`dmIgp8yT#fZn}pbMBa98S_WA$W=W1vNpSYPe!b$%bZi*3j>R^bf3) zGTz+arIwp9MU&a(qx6$TwTt+)nJOqFDP&!EOvU9w^jsa&x^^IHbd$HX1ChxIY8ew# zir6}ja8vhz5}GY!hWYi?MZ=<&h;NpSxv%)S+Lq`QQ4{-y>D1$d$q#-E+O8RS*JJBM9mt7>boX`WruyP zc2K{rNkdRgY-Q84lb<(k_&hQG4n$y4>t5Fgb)DX_VmI~eg9uGM;yM9b+L_M`5ZHiv zVK$sa(Da&Q>H*U0k1 z?4FE|`pvu5LW@b1k+SgB$G7g&sLdD@dGccQ>F>#hnyhpRWcx(Qr;e0CiK_&a*#s@= zxgJwkI0W!LVKS-E;c&tvq>S$H)jlh}=6(ehmW(~OD#6B@yF5n$V?9o&dO}x@UF?Eo z?6to9ZMl#%tYgX=F&T(n!IIUXD9iDldEV7a@dGr1!YDKiCol5%P#!y%jt=f<@gdDrjTcf1hB!m`^w{qwQ<`nVV(?AoRy`jP3mI| zGvz#dF@_!yb;#Zj4p=ca$x&N4I8k)#M&UKNTD(-OQ>6Pb5PfEUFB%L-vu;dKHmxiF zFC}J_QRM|#;a19nCkvpSP=*6);{IJc`sIN#y&!i>2or8Ioz2t1#^DxR*L?cn4k)UO zF?nm<=xA;Dhf^zww!RaJ<_GWHFh|nQl#1%8S)*cleFT5w>t&L6g| z)wi&5s1eCMSx$nNC!nQ==Y6?$IV;dHUHz+Q-NW&w7+XlhGOde)R+{|%hUC854Wq6m z9UzTKS%2)oHqT+mc+OvfJ6;7!%BNF%Zh?{Iax>)d702zM`rHh?ym)H_ejSQ>6jp3w zhGlWqBbX18^I|otgZAJ~T$?5S=uQ)cj4C%uHzo|CZ@MKWVzu_)*BKaP#Qu&X9BKs; z&XZmX?F$zid^H(vx=fcT-l7b5y2jyq`0b-uX1W@4ou{N$ke$sZtJs=uL|hgOHGWdny2 z)6=lcfl0xNfAebQH+>B@J&6C5@aqJvo#Y@xSg{7? zH&Rv$2)=j%L8N^YCCE{Kx?9;zFz_;{o2o$R7aBqqyH$uvF5ycOM|7&=5p9BB4>%o$ z7t~8sgdxNT>)C08{(Wf zFFmrkz^-_np-izc>PFP5G!EWA!IO1CJeEOGvj5 z-I=E3nsz0Ux9mCeXnproZRUGmSXsaqgZY2f*A{xyTStOoa&|f|MK<(VVmuw`j5k}u0xdVDfALV zf$c6QiR4?H4|PWZg+J>fD(~0aLf}fgfMgs|DDSw)XQ0p0Bak%!(8lT7bhK=}>vx1| zvb8W+T+a39SJ@@IuH%H@Pauu**He$a@bpydmM;k1PlB>a9%mF(#?Uf#P&J0JB zXuj2E+S@aYeH$?qopU~oF4x(^ul;sEkuyAi!SHysc08l`FzBON8UhN%csaIzD+v9b zVZ)tBmp;^O05X6snZ;?WX8>08wgH%+GA61U63pU%#~`4ycg;#7Lu)`r&7Q8Laik5R z>`-&VMz_&rS_4{KwF@nhsw?u~0ICWQO%S045^;URuq zm@X(6F$~I{2Ps4nMh)Llwhh?-25QO3Rv0!R%RQvBTQoTFFKD&uSwjY!+h=cKgvn3i z7_+qvB#H-ThvkKRH+TsjXmn2_0Q|1Pa!vH-7invk{F5N-cg+MG-c29|Bb#ieJs#qE z#}}z{ev5I6S$1cJa|3QsjYAA_w#|c8;5a8CF;6oEn9rG4Umn-ADw6&khBAX|# zTJP@Y2j*5~GnGptSO@kcE$g6}lGfBFXcFR;w!B-X*hSFyMSdI+G#g4(94(W_%RTzeV zwh`&`6q?>uy)$GAU3&wd3KI$cAnCpED;I)?Ta3O5XB}TV8AZEtII&8lQ&U`zk3%os z)l#YV8Dm4G9Q(HqQsqsH?2q4LRqVKSMIA%kzlbI z=QDm&isYx6wy?EHy&~n%e;FOw&DJA8Gnd@9C1VfacEC?l8`%nukco@mWmKg05q(;i zA5o0}b9MfeUM9|FL99AHNg4QpshCb*M_@yEUp%Z&p7v*;*!NmIE)(zEIWo3oRSlzD zOI9&kcSkk2MI!k#J6FI!8Rk^x}!xvMMSq1`n~r^PJUE#UN~Vev{U; z#+;up==Z{y{MJ@2a12ToSq%7goY(@)KedmcrPtyFEi;QUBC&kBAk%b&;i6pGXMsr znJtBkdjR_q)@St}w8$wP-+jV&hk3cSbidi}Iekt^Te8fLC$F2JG||lzU*z3LIOd;b z$?D?)03sh*Tc!ab#rq%C6*~4bf$r;lX3epj<%od>@f%_UZ{lVWj#qFvoHYi)Ku*e! zZ&x@n!yu#2U?Q*qt$wCsV569J5o*5#`qbhJ%Lp+6wknSGjn%zgyC@+E#pFpuUP_o*5lIYRfH~m#R1@&=(Ka;_OlhTwCJ@FIg7PtT+rFWdf=p3Z)ct#nW3Ys1O6!&ELuSzke_RKwVGQ@pw*Tq!E+}^%p#fQAl2ZM=@ zn&idsbdY7KYv+j2+^9-<*=fA3G1pddm+!q9{Z`f9D1+wbGQh#9FqEl0@_|ml#m`NU z>0q3@;xn(2c=r6Ue*-5VRX9_?UysUo*JY%$$a-b{M^!wz@eJDpU=c|m*p+~0J1g=* z6V9LT2I*re%qiFgBT4_~fBx$;-JmyYMvp7xOc>OrHvzVo3%M(7BLDL*g7PL5zi9=a zD{)v=<${+i1)D{v8Jq@Cz8&W~6Bb|-uKhxR%dwhxIr#7iJ3U8MLfUY{w0Vjb@p@{!W#bvDt zky61QAX4qaGpmMNXuR2-t>l1Z5lrDctm?ZgoVX0JKuHjU`mcA*aEA$#BsJ*|HcxflldB!P7@ zxeKNO6zQCCW7xLhmp&4KxGe^;(n+1HoftdKdHsIcmMfr)PX$_QUnyWSE%C_rzz?-= zp;Sc9ZiHzj_8<&NhvL8nL^P|f9lVdDEpbTc0A$mtVQkF5&XkTSXsesyqK(8b5A*s! z_W59oyB6P`^XzG@G6lvp7p)z;4NgJeR}+v0R3vtn&k^i-k!P8E1~p;|CUoCXGmkAi zg?R*?D{p89nv!L2(gO`rYK#+U`96gJg&zl}xvRC};?GvGu-F|(6j}xwBn?+W z>5?-lbz6$9Y=@$`{hpeh#fIMtn(%z0{iOxzWPww@ioxm!v~n zyL6@tyr}wnj|_hBO|#AidR2>8%<3=$ez3=HAhdl6D(f&TTl5_i+5n+i94w8?*AhlAh~!kTNCuxrt{w0&CwD*_{2g+QjV4cdbsNJp z*N5KopSn`8>uj0P3~WZ9nb{B+{XTG<01uodG!~vy-rdjn(VY_Hv0pytqGzgj&f>3& zv!yKYk-=_`yQ)gRgpFGWbvbm#qc^*3#{4vw#jN8B`dZ7)lB}h6G}8;#-WpUE1#LMA zF>+2Ei6Y8{y&z#cg&}*(l~LEybb$oW(wvVY0gOz+l>1>YDoX!i9jcx&B(B~|7{tD& z8MQ^YU1Sxe(RG&s9YmWAq++GT?Lyv%>mpb>?8n8!!o7f;836O;DXSPql`p1iEmA7c z@3pKS3X;km_o{ZQcC2~|t2Ug(-j72IQZNZV-YCZ6l@#GxZ@-hg7i}ITAL|;kQii6yu?~2h~e??R!&b4HFQ*R3Qg4`y&70wZ3<+M&j zTH8WKB~y8|-@-9QMfze=;rE1swA9v5LBm(!a4|?E`Bq{AsswPyTqHjxH5^i5nh*P> z|GhDnQBhhN>$hhhn@fspmL`7;zx!t*K43JbopEl^3?*s zJ#a^1;cS`Sn4eY)klxV|m0i{m;Z*tL-aKX30T2b+OwHbII@Dd#v!I&rO5e8<{g&n$ zLw7HoB_{=FwZK+1sim`6@C27n=j2);$qR5vsjYEyRh4#8VL=4&d4t|U1_)*^BxO(j58?t3^Nw`%fa97jyI3fx};FX%{XCZK+I=Wl{s0-RbYD8;~dxh6**A4 zc?`f3&SEY{F31G@X|wIo7+a?S3bYH%H5G1MFoD@ETAN33nm~EY`-F|PmXxpvX2K%n zZ-oPrkT8%86#eL|VP!vfPDvPrV9Mr`Xkw^0hmt)pu^H&T`!1RJmMc#7LccyPtpG>V zY>9;oph}^N0HLgR@GQtviW~r?ZY>OtoE#QRjS0=30o&Al7%bci5O%EvAMukUTkf2w zGAkV}dGhbCbSPH`;APOogHdWM+ZqC3oJ>D~=LrBK<;7j74l+MQ+Hv8@v7qx~epftG z^V62Dz_>`VS#w8^^xWZ;o~0ph)|&1ci9n2V_E!|&$lJ6VZ2cUpGu`qy>)DCF7*6?T z1{?m_0oO=v9mjHhWnD9v2km4H?Bh{LL?i#=L1G{_GC+=*v(UWPlK33+XT@d@kSW0Ay__7QqL zy9+*WGiV|L#au_dbJhGa^!o+Yl-nFec)7Y9y#RK85_FoXBNO9g!4n}vTaKj~?5nt% z&=9rbj|*zPb=_xoetWiMk-P06k-SVmnVt#^aQ%K_%l;}Gk4#}U%5z>Rj&1`BS(RH^ zvjMh%trXP4Czb&Nah@~WLDodc&B{{U5wWJ7>ONdHk? z^97|h2Vb2bj0gCi&ncBEKqc~>%`2|xNVi-)JiZUWz4|om!W8^CXi<)f=e;(h_d+T2 zhH{JaGBhpR1;meswv&v2lxaS-FP6-Gz|U3*jO!N9Rx3GfMHX$-2;U6})TuO*Y`QD_ zq+?iCg)wFUfVv;CT$dLD#6UO(iJFJ`i4^56#8=jY8+LD?Vu(j9ZIIy;%C#^sU=msL zEBtqN>-lyo`fg6-H1zf0e2O}jAyZn@G$?C&{hgZmvf6+<%eZMPe%rj34%6R@O#I9j zs$Cf!<)URG49ei5V5PSr{+4!aR;j@{k8?bDGdK5jcwnP+>(aisGYr4})P)StuF9&#-({&Nz$P zVM)Rg*o(J3DWTRU9wn1qGUZVe5p)N$GIZ4>MOSO##OG+2FN8Cn;6(A)Yq>cH7qf^V z#J0dNO}LbdO~fz4Wt)}7(i(}**5y%~bAXMgf$q1yxtaLtY>4dm$wtxuJPZ3)$6PBw zja=F{!i+&0PEoHr2qC-z}Sm7w*Z7b24NLDpFeEm=1 z_2+yjAFskC#FC)Va4f(X^YL6hu~aS|se`rAufSZjvcTH zB^#%R>x>iX2hs%Tb*?B*&h&j~f;=CCUIL4qMRJWMU4*DgUGL3%m$jwB zFrma<-?uJmYpwr|=Yk+O^l|wmTp`~F8h7|zz_6vDGzPHYwU2liTa0^GpkR}1K zqlyxrxVBbEIH95{QkMH{P2ZRGAk{rF_j0qhR&LbDC&pI*cG6ekWBW5~E-r7}81A`rX0Bl1 zt`&?ELk*neaWvP`mr0sjAMg8ZpRzBD@5JED!Aq@Boi;(R0(A`q=JBY*nA!`?HRg>4 z%N3&Gnd|EYC(nAt8;G?!WEHj}r=2Yey`ANNq*n^1XGgsA8RWxjI8 z0p-dJ%pRr#MJ=*a@hiz2)%Nc2Etijaga^$pQsJ~nhMGzejn+1`k>Zt|t!>coy3f<4 z>1-RSh_m7V^gX+d`K^mrn`P0?PTREJE)yb=6A)R$R&m9JK zI^D_{Kl2%$QY=ObOaiXV>YQTc)&)t7LUN#WahZef2vj}W%Auy$QmE@IF)?R>uqDIz zf5rSVH)X=y4b*-PuE^&2XRJ~vTRFnyP(W&S&8f+d!7l0JNs>h6gBdS;74kP~`p#Lw;mW)!(YCocR>i)^)tX)~k_r z0wXdR;klp~j*9d5P%6%fO{Y9#tgSfFI^k{1~oFuRq!Bz*<7Bh}f zd(;@^Xn8rlBBT?}h?wavpWo&hBp7M`X2#e~U^7D*Kqv$7os{J$eeIkfD4X0H12jqL=F4}du#4DZ8LF-c2zOx_!pOrFv4e=#p6Sqr{E;azS z-Mi)$zh{4hd!mlM zm+fqrRCp+8w34A>OS7in5Z+`gz`Vc=1AGL+F9UFWy=iU~11!lN%RA@i#%rrdtIE@4 z4uQZ$_Vc~(4X}&&`piQE}`7cdKtxs%QaU3&5&cYsjjQW&I^`Kue ztvx0E9S&WqWTg6Ev_m};bKHoq7ycnl+Hrowd}RK*cic%pK+%}MMAKY*g;zk&39!rl zpSr%*$ic&rjQ&0o*nc)~6)XcVacu~|g9{=RfB-=g15hn!X?PPM@dBa(n$m9Y-l7pciphyMwf;HT@FXFgP9snVEf%Hm_NC6-uOGN-rsJd167;_fBpHLv- zNU!I0C)<;f^bM$mOKuZPVboxpm86(CL*x2v}0c3`=gsp z%lJdUwH6fbqeQ_d*|%pO)^gkpaDTmV7^^F%=P;QNh;cXREI5mY(j6>1noW z19@{`;$}W1tzXR}=1E{@zP(HN8V`TI38f z@=$Lm_cDX&swBHor)+^t|vhuNYo>xz1TRgYgbx&e@*~&5dK>%8`5(qWzZm z%A(gow91jI4ZqRgkb)e%3EmPnc=f&eKS2QP;-K?gdz4nqdJAWlu=C`mG3doJ@`R5b zUTr2WYGITkoK=l=o-m!|lmBe*%ovPmbG|1r@~JR9xyO&`GC>PReKujSlerRpudRWE zxoeE|sK*`v|4z;0aGe*aMa#GZfLh7B7QU_roeu9^w(CzJOax}e%CI_T1acoabjPOK z;nWYG)YvPe5yx@Qf=>6_oPoU`t`m$e7>geZ6FeI;iTk~3dlb@YCFuWhq zl~})(rLAUtnStp0C<4V>s+(ByGG5$DEj-gO!dJr4Iu`O>PQ+;!01FSzZ=e z1WWI|6K$v}xX|7n8Q?7FXL0v^$E0(scrJEkZc~24$^yBv zcR4=YwWpdr=;&U6+q0yzJUPdhr7OcrmM3nL_9~HA7Ax+L7n!OjFZ_WM$Cpv23>6ay z+?4+D6x;(XjA=?z%R3FP0FZq>aFTospvz&yA_1lS{5Otj4`Zg}?0oOBaK?cJSYsN9 zi=iL^=~O3|gonoj!zREE(LaRxo^7f+Wq%-8uv|xitN9+{IOeCC6BJwEvW?HCTu5AS zuaY-6%V}u8%5_||@@fKa8*~{D))*(B(elkou+>9M^LakBNOIg@x7;-CVzY4yG{z=y zyA?SZ`xYe>8`$~(v6jOE;3Qm;W&(MRMhm{zBJKPGJM_W0N1%y|9bx4v3K7_XN0I0SdI>yn=`zQJ63HyN6MGOOf@zsz8% z@ytoyx+YAplH5aH8HLEe@ZW|QCdZURbe#<#m$O?}79I@yh5nymAuZ?bwR1VwYO5tr zf~}8TcjY@g>Y*REp4jlGcC*?p76jV>0sud=zu?Nh^r%#*VGXt4H_awxvmZ=9e-=qX zZW+rn9qoV7!W}tpek(Bxj34FimFBS>+&}f3wfP_&c|2smS86IiRB;&~CTP{ttm|a{ zOEQv@y@w4=&9W;1SV%&tVJUj_W_{z6(+QylZ@~^n#hgCu&afph7hU;P-^W32KNr^N z>0tD=4*D1_7#=vO<9Yu!v&es~MWR0o2PHo9B#=T!D`)Yo1mvZDPAHH_JS9<;&!^ z_e6A864G&~22)YK&mV5Ui_pvfd-*TrV$l3Ifhr-u;lM#mmFR%>!*5tUMobQ%)b)189BxvWx+`kz}}T zm;rZh?EZGl0F~@rV8aDBlJnRL+25|M$MF* zbAroh0NNZ4@KJh;ulVf@kGvlCDw-2GJ_4br15TIaTCleF`Ic|d2ubMMe1b;T*}y@C z6AJ$?KK3xZ&W01>&FQ1BwximJ#FA#8>CY zWsIwqAccXn{QCAK!;6=68Scolruf-f5iAqOp-mU9BvSz_NdXo8b8E>iu;ruGZ!m zf$v5%q?~;TX@n`z7nelp_9B-JpsTPUITRcV;>ZXoXVAoYw!dc~>(O%PE8B-8n5M^Qp_ z=QfFVcWaSzzp+S`>>f6Vd=LKu;8jA)6ZpV`Ap9t;A1nB4Ygfo{SVd8rX+InoqTz=! zr)N-{DFHb&<~Hg<^m#lHaJCp7ifp&jfzgQ2xSjUua4O0Bu-WI=>s%0lY@-vAaX}4h zqiqL3q0w>R3r(PoOFDP41R)NVG?zw4tbbLE1;&LL_pMWI?g3*B>riti^3`CbW^V7!fH3C|@toXn*{alcB6$s=u zu^=Rgp22Z%bDx~9P^mbnEU7Zalbbm9KRPYuc1Nn*zy|;?bvV7P@J!(ZLs`)K77(<= z+%(8pY-M&+&qiPoFqnMnWIQ|{+lJTBXs5hAs%L?WP>2s;MsK}z-QlI-War#veSv+>NUzr+bULCa2wM;76EbB z!~omq%xx@~vAU2j1HyT|+K1j_-3zFxShKb6!#T<+f=r=JMf2|Jvi zbvR^$-Y-DFmOn9ng(Jj4&nht9?$XtWsdMQ0QoM=eptLJ}p8YM4wliH_@qtpIi z>p4*6h4ljel#pCMMs-1PQBy$aTI5b}Zv)px%$n3X3R5Ii(IfecmDh~+U2!+CtfWA- zLYLXX+2a6oyv@%-Uac#DoU+kV5E_*hpm=kWswrI)Vioczm9o5*VW``={+;kMHTnFx zEF-sas(g;OXST7&Y*4`d7C=HjU53)IZAX28IG2TVJzsss!jeNnw;M-8Wk>(ERV{^9 zq_)Fx^r=`~yD4YmE=EI~s#zHWW!B#dTDep3 zz34)HLC!qQAE$}x)-n}To`H|^ctcV95^ymGrjYGy&14yF*MNmLYqUlHI%t4o+D(;Q`Ac=cnbWU4?BP%mKh4Ky43kRCwqJ%aOpF+JO@2dW*dz<+UEvC zMpN9)I0C4EJDx8@_Gx`lwLH`|COt>SY`&k?>5?~Bt8Txj=G7H&rPkpj9Q#u{JmkZ2 zdmW5bk@u<3?`a10$6!CD$XWqLr0U}N+~0q!Xl|roE-uIZvx4}D`2sbYeTLGRIJKz2 z(qo78!jjlxrta{*$nl9SRcj{)XGvSt{VBx`CL9k=rSj%=y)sH~f< zJwUBcB(tEjR~J0}0n(Dd7G zwdpLZsR^9#P%K!RjstEcmxV>)^KiU4vxe&Q#%!S~Bt&U&sSYzy048_J@@)ny2C%4r zQ(rEI6E~o>Uu!@=_pAmF@;;Cbz4h0hFs;+&{iI#cRRqs-$LjkjLID3-Z%Uib@Q+u^iyxN zgJ?7?{&4w1uh`!*XgW(nYFeQrD9v+Gi{zZ~VJ0R(UI8i)r{pxaW^*Hr_&XrZUlS64 zYKN%Lp_(uvI|@{(%WA^4IW(BVT8*543QiI)cvs26Jho8=STnnrel*l(XtiW>`!nukR zUe$&Sr$(GrGg129G-H(tYgPxfHDPW5JZaQyD|_*>gmHsmJK0j8)Z&4@kK$}Q?7bnO zdk`jDYr#97`34r2hx5h83uRQ=l4MHJzwWMyIvt*z_u#X?499WbeuLvGfgJbE>QVO6 z417sI(G*Vj@*XIc_51*3JeTp^M`W*VAqgoh`V}8c~tjV;oCfBvm!4Uk3%|*+fYx4978ki>!9ib~hZjP1@ z4kKI!WVPTE$HNvhGQ`o6BxSd+h;UhI|y9fcLVj-}o2ma-oYUNTBEk4!O2gIu{ss zszRya16>1D1f6H@9Z+;2T*wd^`Nnvrm3h-Gj?IKWL}#GoNrDxhZ7n&B4P%)mXYtjZ zSs$42)$%7lbkGwmJo%*errte@Ys2mCY_L!u%w=%9X6`}RS1g1`I5)(imkIt=-)h@C zTT}IiuU%MZt(N=p-r-o_V&P#v0aKQlE5ltKw(OI5V!TqBJ}Ym6D(vB@vu>AT}sSr%;r@ z8|Xsn?ofGTV<y(2km#VUx;qhGhH*4w^PwrOyDzlX(#!+H0-k6( zuf9Q$K#}*3PR+Gn5}xYVJNg_ZOCHFlbh%hxlKPtptE}2)|00Oo+1!_X+ zLY4BFqJ=LT33@}H3LKt$+|DO+{e~T*4~ya8AlwKdhW27WQI6rDZH8PEb`J zqDl}kg|jVY<+=K3*7EH=gS$j7G-5VEnr|~)6XD4InV(X}d7?6a8#Dt5{s2u3<|75X zWUc4L8ssN7v~ex6oM84-mW0r{+`A;Pyo?M?C$xb?EFr^9%iuqS-?YL9T0eh163Xyn zCjx#d+v)GOQ6)qc!QtWz5C0V@=oXjx>EWZgWcg(ki)~q93Ya5DxhrH7J@R?geYCrSuOSo9^P)EIrm9>3SGu-+H}2=H@h5b8 zfbb(gZ@z6OtnUT3Hs&_vT@tK%8EdE3arYFT*fIvXWi_{W8e-Y= z5^G4q>~NXPclBRVw1`LN(`P6&Di6~ZMt?6kFiYfN(n*ZjPf>QN8R9)H&qv2K0bU4j zAp2S1L}pM5KtCatLQ`57n-;8liZ@W_$cJq&Z=@+U-!srV;<=^e4VW=b=SJULpr&P_ABdekom@s!>qWqUns!@v=b+zv)wQo`M*A7f@y=1su-&LsC>;E}N$F7^ z)OgT;@;)kf!yB-T9-clb&EA%pQ{&hRe*_|DRyt8UxaMZ`Ccj78vSK@Qk0`MXcdSZo z-PW(OQ|3bLq;F%#&FP;z*atISu(f=(ynRo5?FbqIWT>OO)-ITSVdX^rjP=+M{aQOG zs`FBz69<`25v<2%=n3>3euw+uMbf>4(*1A=HYF?lw&ax23e9D1t?(`uA-{-R02p5w zpBARcqqE6ChyR8-fyD!^G=FKjnCbgC!u5w$XycMJ-S!)xsep9in4-7t^`Pm!G!^B$ z=@^Z(!)sP9yi%r@*Wg3bk`K6t$2Uxhdy_D4h3jb~z-A+;@Q)wn%`&S=dhS6*d2ITGi zn&i~x56G1}il@AbPkbCoG(5zwcm_4xv9n9dT)b90HhB`1C0Pg&^$7=$$m zbvzrrN||8*Drz-=W&|LS0-kj$;0C;O$fBu?neN3ngum6HmZG4pRSp_-)ZRVPnQ9qj@9k06<2R3yj(PDD^ZSG#a}=Ki5_1VC+TtX?Wldp~?{0u9so*cM=*ly6)Yk zZT|wQe{@1zX!bY9QR$_N?H~Gmw`xT4kJ$f%Us*f&R&WxI6tsMa;#)1*xUZKtb6Z2U4a8w>NP>}AG+5#cmd+VOmE8c4gIJSd z9=(a8YCCGkQW#)mS;XN3X?22z%~s=oy&V8Vo@i*FD7R2`Yc4pE-{R-<{c?-Xz9$6q z(Nf^zs(JZW{NfKQ7w?c!II1QgcWoPeK)36l1w2bN1W1R5-&M&&+ic4Kz~Hd%BQ_q84gW6KP|je)>?Z0>oNkdE%&k&f%(2oLG=J~Rbuwj1=1%lh@) zj%)-ARb0}ZKr!C8f4ie5j4_9+rdF5j@s61z^^% zI&xa#spCqIGNzpepb~s@{ecbPlM$#}A+Z1wO;h1gqXPywlGxF6VB{8weh3cLBa?dZ z$O~xjzh+c!WmZvPASycdCcH9{ea*S`dhd9@nvwP9a>vJIJ$J`s`4r!Eo&R0oEI`{G zPP`1FT;5!+Rc)i7$Tnw9!G$yQ6q#yks58w6Moy?G3VVgow#c;&011q zF8_*_=xQ-+c_B3=YX&lA`zK*XY;&ezX7}F;%DSzOeLJWYypLK9dSe)qaPYcv#&B+n ztDPMdfrg;vhsOe;<*kL5(DZ3yZx*0;-v5!&u;Y%GDXz>KVEK(~_H=BhDAg6sIz8#; zE4X88k7R4W3-YPJ*!YFN_B9(*2A{Jvgd?J8EqMXrC(+3Vw_CRxUO;fgJ96804Pmy} zgU4mCZ4}n$cjy2dGXy4ELx9I&HKnb^2=xLt$(-r;3Is#IzCRC<4+jyw=-<$p7Rz*1 z{EEfK6?YRA$(c&kMHrEzhBtmRWfebd1Y-cD7j#5TM?xafRZ&R%nz@%Za5>gqKg^co zYYWE3a`mfEtRP?{4Xj$709g%yVAt+I1)(Z%`vVyDs+C*DD%R@&xwr71$SQslp!op? zZYn^_)K@3U?niqLefp_S%mnnLc58KC!N%xHI77j&mG6#MT$E6i^muWqGP|J#Jg)Uzwetm<)xGw|ww8Fy37Rm`4~2inO+- z_vbvEVS9i0^JaKJzt6&#usg22*10H3gQt@kIYI9@+j$9e^oI@T#A)t^=mFM-fGQ$i zKH$u0X9~fj+WMy*GHgXo78VV$QnxY3Lw`C-&;FwVauv^r!If@GlFd$C^IyP|P$k*Y zFm@r3$-j5THSjZx_DXDYG-YY~4Y9-Z)b0OZ%hyJ$V1&{J?N!8AG6YWK(C$Ezc}4I3g9+eE-5z_aa8k56mo;SE1-@SO%%w(vMWU`$C9m zM*#hamHTV$Wu-2_&9)^+cfq_%n1D8LxO`Tf`PGMhP?(=Wxo8IP2PWF>54y=!}yn{gsd0aA| zyGQU<&i_|<+1yXi#Wh^-099=vU=VQ|#ysziY3;n`*KaMWn?N(-513b|@4*Vjk=sH> zF==cedvOQLx5C&f9qHCB+gN|tDp>Jdy9!>v4{6rhKZSHjf6@h}F{2X!g@b5)n$PNeQ-U!xI5Rzu@%Y5rL>bH>0tq?jTMcB8X8>2xRj(s>A#jaxP8j>z=uD zKw#0o=y83@bp`yw`D?Z@m&Mv_Lt=2=m6O7zF=E+CY%S-&lxVhZ+ZM5wU0`>Z^@Nh^ zD=4Ss1r;wqzR9hO362~cF*E{ zeuyJDU_P;I%Mj`*vaJR>s>-^hw;%h=IQ4ahPMf~^tGO+R>edaP&HZ>deY z} z@YOJZMTq@V@ct`aDar9YJ3}7n5AQc#ICO$h+FK#fAu*(V9}L9Ex&^6 zLV0q+{qJe`nj{#$1%8}TOSb_MOBJ-XhOrUfkNXOA_x@mP00qK2bS79oxTi+W@FyOd zTKBQLcbHKfgDPjGx+|wqM6Vjn)_)aJCE7f^dGcAWUr&3&N;QdM`Q*ny_Npn66rq|W znAhPtlM%}V7QSkh|5v#G6Ll}KIcPx_XN?n`)XAsQv;Flay<$|I<+b0A0JbVvcA8&N z5e%PUIOB2FBiTF9kyGr~3C1%j*6+qzTR~gr+g_vmi1!tDW7ole?}=dI{qW}mwZi#3 z&H%yJs>{2FX?zkOv_$BbEE1KJm)eLuZ-&ec)czn3^ijl0u3S z{z@IA2z5Wwjg22Lnzt~2_Z_#}G0&7^df{OHXBKV2>??1G70-m@igH2_zJmBg-1Fue zRn9+UJlvXE0)fFa$=b9fKkvH?<4{vY!XlVGJ#TD2k7)%rAHTL4?*FB+)@|rW!}sRz zpT74x_uW8i9^t60Oxb0H|M2iL1i*mA1-yj5Rd@GfI-j7L3 z`#vA-UheI*joYd(fs9aMzIT$*L8&srbyXRUqqnvkWU}!T`BR*glAqu-ChHc~`GCPa z^kG=mbz(0-V4#wB{Fn%##oAVXYrvKdfKN7Ka=63MOi86(RU2jr@2%A`*?Fqc4B5OS z6PGI?anZw2IVMn&$uBQjZe@)%_f$!K-qAA8$79e| zcPI!D5s#Mpqvzq)$Ek3=JdZqRZ>jWKg1?^sMiEq?9;G}_Lg8s{dHEM0qd6bTr+DH- zaEN(;(5HVcQwF*flt0Ud9^h7W*W)mt1=1=c^uzsWd-%u3r{H!B7c$0ipwbK|k$^l< zj}%Zylp16>0!nor#Y$OE2rbp-9yy;wUGK|G?_gC)=xBjR)g~xM4ym(daUKA`vj6Bw z@*%%+D6=vN%!092fR;Ejz=(0jWtevB4Vq@AGr%u>&VlT|`4+U7LcJk6Z2U?OX9x_m z)&FF3lB*xu|7M`fLWQKLyDTPE*Cr-(>#8pE52H1evsF3j8EIVP`8n7^JBnx|BdpY$ zP_dn@Yy4nbe8=_J?{}6fr@W{m8b-PR<>#|pkHC2+C^v&}G4QE2o=Gktu{T6OdSqOn z{9P;KSt?zgMQARnTm=*C&!4MWX{hS_XXF(@eO*8mpnd$iPT#)3s4 zpM}FUp67#6!l^RP-{W8vdDxC~MsL8l+q0+OQO^9cbMAA}H!e0-iiPGQ|s zD+FIKs?2iFzq6tK_sASu&kp_;N?EbS85peh{Vhq>;Qv=1*R}tqab^EIWU_xhH7j?0 z6Bi2RiAC){s|YP-wtvxzSI=`R~3*ZAku3TL^_D{5~5gW0@6Du5PC6`AT3Cj4vF*4B6I6cmvV#BiV2cOcC=bV$<&ASu%! z@(&LPEgBN^d_U>N0xvm*-@!+9?|s1MegLfq=*d>vd>0j2e{R0^yo(DvbpEdtwXVy~$bkb`5{(w`st~_JU+SFf02tG%DraL)AVr z25zfOyk?=)eDYs>Gofd-??B7yX_JG0<(}ECe_Zp>jG6{bEuViG+Ydt2{=Lj%W5Gb$ z1OM**|A)NyzhWu>&oBs0qq?dQdq07#a~qfpjX>*Wc)*RK^uK(AIpH+e&a4grWO>jw;h5?W`A=69!>%ei5VIX1Sd*jf9N^m|UB8b4e4zi! z-#L9d^>3yI)aXk9W=vJ6i&Eb#QfnW}Vh%<$DL?})Aa^qs=&X-(N4^5_M`8rvTMc~}PlKJ9<}vD*%E@gt4`{n_1Mzvr;Swsb@Y z0$8uviFXh|zNZXP=GR=u`n|zCoD2wQ2TmTi9~}LI_VGyOOWh=*_={_1iXD&19a|KeXQw!VN+3@ z42FNEL6Z#3mW2nAW=J n&!p$fH?Vy|N{kZ~k$4zhfGt84ZKytSufv6dFj6YBduy z)k`o>xO-rU3FuU2NU{1rL=!ncG?DF}0QE*i>s-{sS@4bSn@Mbu!<3BV%5h`qEsMa?(kC+4p9vE@4|65{0XjiQYuF`+Dv zX?|BhSdx%0BE8>uZ*n$o?$LOe2!f>ZD7lzII4h0e>xY!GH=oj1-Ix?Z3kFEIz?-%(zN#02Lxy@ zex;Bl@w6x6n>S*!6^4a|WHL$wF7&!$P}@M~ZJR57@tFI_Q!4Mk?@ttgy~*)Ymdjp) zpx=cN;7fYaW-0CvtX{@b`v_77fGH}Aa_sWBF4z5!sUSGz3KSY{a_nMLw)gv=d6KZsSM#P=LBCs7t!E~R* zh3Vjz&YuR@Y8*JHwWcM&5sD#!US-K-M=##;nUrEs0G|Bo#CUhzI?!`fr<$yF9`PQO zu{d;g1IPU^!KVI%%SWjM&N$d70}sV!MLX3S%s!QCV+t6BqQHq1Zl6gdgNA)f`Y zDkQY*fJoYQJ&PhW^6Zs6X?i{N`;!}>9+RauNERs7qTU(+=_3{*I@LX-e&UbYnWzqIbfFH!0ic34S}e;kUeP9l$)^*pfh6Zz=xI?p=J4W zsU{7JvIPph`*wXvCOpU_7pf~s$BcWRn_5iNtGM#@{7fYw1D70nWsYH=#Wm6O^jMx! z&G%mF`z7BBln$dHEaN_w926tk;fB;rmrSocutBN%5uqv0Dj%3lnbmiAk`5zJJEIo< z!{a*n^T2WaRKH}O#|5EI3PF*EO{a$wB9NaK6lC*ZQCG?R;>@B;eK?;&MexO!_p~i< z(!(-Yw6cYIA|NOs)G-e@To3r6{%~MRfDD_v^pWjKZ(;|>yjad^P)B}Gv3jBbHGGhO z^nsM#{!J;ku9r;l1vE2fSRf%+jgAg7P8;GCK-qp$@P*zh<_V#+de1|L^VJgeATbqy zjykNfAPVP6qSCW;igY=_Qo&wb)>1C@Z423%+p@aZS&sgbz>H$tZN*4c7$|jy>fJUp zdLjgQeR-VrOFl5o370Yh*Qf-V{^GQV`^tn@h#>kv3HDHoHje(%#S1xJ4@~mr!BSU* z(9HTAaBy5UXbuGiC?f-4>Y;PM5z&lO833N5?3`yk>^?SBF`UOuYoW26Tz-N#kMJW~ zo!agCUGS7cQux|Fr0&aIilQT2M}2lzB%T@2E1~WCsnL!FBiT6S{)@ z`3C`0I^{q`?@*q-J`@4nJ^61=5!9bW0!0d%JT%Q#P=Lu7&8kdMmhaSWavHgziJqX_ zhfALWYK!aHviboGx=97{ikiaK!Jz6dShf(>ktjZG%Hf}_io4ntsAP`Jeym<&3+k@KX4aEb=x{SOt&ADz2YSgCfi`O3IHmr&?QehNEZsw#Z;d~ID=}ZC=&!JYFnuH z(p%10diS%Ta{O{QuKxKAA~mGQp@i1A4bInLYMic{{0P*U3&{EX8;gd2^I{- z-fvaB(SETf5~8j`KnjNEpqlBvf`^KEpl6I95{U`mE>?rO43~q@I@yPM23fo`n7&yB zuYA{kS086^KMxH;f{YlYeYPPK>Yo21xaPlRveO7qkENr;-VFi>DVKry$s=%;)Blh` zt`33af*bI6X!+=s|P`=Kn0n`Ir50iLOTfH!u|vIn$mK}xdc^EpinbE7@$|0D4xk>z5*AB zGQ=Ov(fZ9r*GF^U2z;S^4x)CxP=z?dJ|>Wi33XgL9{;+sq^pqIvd2E*12Nn2UUCTv7fMFf=(^UEa^nA5XK}hXRp5#Ns zLQ^!0K^H6}ze*O|&G7){kHD-5T78Qzq_@o5pq;911G53)#=uc9`5M2E4uir(RHVHe z0_tmRC(nZ*r=fIK81PHpk!_dpjM9{j}w?~61m~} zUo5gYl9{6v#MMO|d^Q${mbWI5X?mB!uiXp4Og>TYEr2tu><-k^tHsJqy8w)n7z-_T z2;iohJ^{>wt@l$iANPKOk~v690XofX;0PlDD+Wzo_M8N$(bDBb5dd)-Q0?ojGHZuE z(jLyP+B6K0NDpn#SPmkw92A zMSx0~4>NPGLpKK*M2Q;3oH$?^=}U3+TLU38u(v{;lj)*t+Dumie(4=s8+=RQFW2xb z4Cv*&I$z?ufd@HN0NiSz8xguDq0nE>dQgrA^QYVYrJ17UA}5hZKtU0kCl^TE#LJWp zj$&!cWw}Hv7d*xaPF5=Ft>F50DBT5aSEyHpp_aqH znA}s|>^!;mU#I-K9&5&&hTKYnz^cANDu!Agu$(!$VHxt^fP!pc5<5n7KqiAQs5x9# zP{V3jf%&_YUxx2!Su6V^DEa|5r`$p%Ig=X=wtYH~^QP88@R?H=j>`dvhMu1BG0YXv zuw2x{cwp~prpVFiu_0nMDg5ES(D*>GK8bLmrzLs-vk(m7ZA3|zpqc15>tO1~Av%>@ zP9cQrYCnB{-^LA^MO2{mWd}Iml6j!>#oa?c7j(3We$=9F?gzW0%mQAT5-|?-PG+Rm z>S^`|tlC?H+oR=K_JuDEK+>5ae31Py3njTwD*;&35EtAM3K?-!5rLjaj`l2tQpjQl z3bZK}f{5XRie#}c6mEbDt0I6XJCmUkMsy8oTEOl5zn|!XW8AUfYZ%0x+Ar{uA+rEf zfqAPH%)-4t$_pxD#%K%x!&h`?2I_S$6j-ZDEY~}M8*$R**lfy}=COeE9^jge1+Ny( zz;qgFE+qpSL*MiMTe6>s5LGMRrk6G)Y#17TW~9R1u?6^%RxAA}D}5lBd|a&0o1N2; zF#$a979<8>#_5H+08@ItK}~}}jN)hu!Fgy>4TLC83T}BZ+0)(vvBE9i9H;$(QxCNR z^gH)*eu$k9TIID?oh*l|KyN_VNX%u#(GzE5EPY}RJkxt-0EK1-tad77U>uCi(N6^Z zMrE}+3orYi{s#zNmJgoLaPVs!um?MDBF5-YPgQ2*odB>(P>AOQ zYCjnO6xlN~ePIFoJzhK)(#kb|drHq%h{_xo$62nbH9p+m#uAi?Fkt2~fxD#3ykmALdJGV=l& zn$H0889vA!TJ}Kqm>YEU*KvUJ$u;pcP6D90AW!d4&_*^K+@b)908hX?avU^MTt*SX ze4Rff3H*zekS{>100X?x(`#H>kP>j~RtJ0jGtHBMzjQZ6!Qvqkz)8W2QKwM|$Tk6> zCLMnBK{-Jblr)HnXx;(y9-O`(J~?3uTt?m>$NjUlsB{BvKh^ZKw&uUt0eXM-Pc6qM z`Li^?QM$BWYFGGar_QmQbU;BP0P zjF#a=Aj&|@xBmrc3#=(U##e!_b>DTRgv?&N-U=Yke{0a~t9-obQ9G z>FN==;#)tzjQuN152?pC`C^=h6L#3-9S47YtrOb{rOZw5{zWZ07N}S!>vp|nrCU~OHD2i zmJJZUrk6GBfLF}9v420-pCB}wvdIzoa)vn+4mAbhGVkWVDICiXwU3!A z?7b9O2KDO-fJt~x5Frrk>0XKp4a+vb6kHaPTEIGd34R4{ZH)@)*LfGsQdt6-%tX*o zd%6ucz@WKWJW-D-GOxOT&?o~ULV_Q#6Rg$m)=~dG2f7(lq0ljPyv*=jGb9f~+^ya+ z3_s(l$#9csy(CRjS46+7ra=WTn!b9S<5XS0p2DL45lLK0zKIivb8|{vhkboUym7w&mSNz|G0`!qM40ZcK;}`@$)V3`=c;IF@bZ_Hgqn$q2iD;>+4oNMuAl5N%07crldw zSCMk2o@I}HL2YRq4JRj4Gf^heEt9axBUOWgZlr> zOO)HRL_~q$7j3X1jlN~{vc1l7vtoPkGsm1D%^8Dzi|)jP3yz#jglHEhoikc`{s*XMjElKfB*cU1!ZU#-J^H2 zYFQC5UCbucPnZ#~d{R-tQd{|?GNM#?6gN!A;~!<>-quVZhlYN7P+LreSk+qL7B1nq zwbF(YQ|gB`C1Du+ybH2$>c z>7?$l)3A{a+p+9@;csLx##k`KF|xLhibE3nC96ebo)K2o2;ss~u^l@TGM2sDJqKTH zFc@0LzmDIq;y{d>Yhc}VBqMYVpEs&-QuJLA7BF(@V9G+^qqNRj|M+!S6027*$iK7P z$chsr4rQnw$0MXFZzsAFb_jSiUfz*^{1sh7`;X3&mCAzL+q$UcNSoWtMKSEPR^#j= zQ(Dr2mOON*OT9OLC?&o-_he<6`$q^!l0U)D9rOTyR@1 zPc?>57>9;8mcyA+n;vWd@Uai<*wrGP$vK-uWUFvm!7e_*sbwo!$+vQ?yD~&{B{3w! zx>`7g^l>5D`yWLFI)T2s*tUF(B#@b$FTgmEw`M9 z%R(6T*WnSI-}Mn(=oX~{JA>G*1u2Z{Y}iQWI=e?ES2e%n&iZ1*rU%2Gawk)`F=DvO zE3soPj88=wQI4>*`M(uw z_Z3FcV~-~%hB37p(~UaJ`Z?{=%TKm`M_;6|<0aSrEH>$B{8^yZ=QPqFj(od5uj6rP zu(y1T9yi%19SWTrUXs~vBTJ~GE6?*j4Da=)IMoPJW=wMRW$d^x$JkYFe;4=++rXyU zPDdl+BJ<0anQnI;rRIgR=-Uua+@?38p`c!sZwje!@xTu%FzFYF%Ejf7<^;z|v$f2Jb zA-;4-abkQlpZuNPlX$ds>M4`ozu+Iz5Z-%8LN|;d+4~PcX7I*+?#gvD@iZMKjqppf z{w8>gnUxUHD89f|yFp?btd}S$(xfF}Em|U6XKD6FYjFMc7{Wf*Ac^wql`cu6EzB}u z(S9+}Zfk{!5CR)ac`}3+V)I(G;J&?8sEh8sIy&HgZ)0Y>{_YbYTqOs zz28Jbbn@PF@55Aoujja%iXT<4A30jE-T0A&=1Nwkl&rc#dCxW|GDrA%0pa`1Pt|MG zgrt~CPWVdvUF`cl)n=}nwv>yzorMCXb|bF|zDatqNlE49#SaC`h$tG%mRvz(N!~@` zMdHbx7acy%go@IR&hP}&Hq))IRl#*VykQ02+ZEHeY@7Vc#x65{B|dC< z;zVq}I(%i#JUw3lvE4N6Ri@vTP%Q+X;Od;Fvzy7xax;9+Vt1W0G0}7IhtqJ)QLQVB z&sk7QB;{lk*xo=wv6I{!xv69h0KM)Eg@~kYNTDUvglrXQWd8cRpUv3(yML#*8HSIp zWi=Co5eAwWCjDJ+MsW1O^l|wWZW*NbITt>>-RAZpA#T<6Q3lgpHpF>B%18%E+=IOWgny3|MU}Y*mcr`y(eNx zlgyo}xaoWqdi{7Bm5dU};JTr=Cz)UgyOATcpWaB~hG2K4)@DZCy^kyu%iu}m@urDZ zhnly^c>cRQ#$b}h5Oh?O=Jz8zwky8v%*-0$1`4jKo1bTDX2S2bS3>JJa&Z8i6pu+a zRCoLHi;3X3L!NGRI={TNm=5b`4}Zgw^%V?CjV|6>gyU}54_vp`iCmbU;$lxfqskn) zp4iWhU>Ztp#gM%`Ix{jRXvTVTBM(vh^`+U$gP{d-lJ5#3I@XxuKDmsbTnRlkYAO2tshvHV zA7+LstOu>9qnH=yE+UK*9JCB=Q-v!JKyI)7+w zgj_l>$!Q{A?WQ|uKK9+K?5^lqf4AlKc|pen^9&xf4XMIgu*F;8E^lt?Y1wpj7=n8d zoqoqZM8b?K48+zy55mi=+8eBI@z!v>~?XXFWU0TQoIb=cK^tnNM|;Z+Cy<=ciWe0+H^X(! z$@5}QZHkrdW&UsSVuY{v-NjF7yvS1tQPtNgdXQ0yn@O_l{}m^jZ=Rl~>N;G?1{;0i zDqYMiDeb9(shs;Zntl4n*Vutoos5&onTod-aTNw0Ys&H&yoq0Lb9eg{V&T*zYpFPXh z;o|9P3F5rx=zkWL8AuRQ?mor50-vigz~a03^VvmhDsTrrDV&}G%C{o05ctxXva9M_ zva7P|^R4;90+r6U7*m*$$9fDnHa|>tTDRCDUE}vG&UdE^ zREXtPuj0Vrf?--%onSpN-89qZ%A*P$p|5;~zih3mC0D)l+68pE7AEN*gLd;3v5tLH zG>n`>1F`Jqls#2u!pn=7pH)pL`Hd(i43kz z#=h*%JUk*H)OHJzD3V(P@A+h=7mxW>q=8Khw+d_fCm3VA-hmP?l={`1o2M3sDOZ)g z?RIaYc>3KaA%gW}=}cwdIJwlOdN`?MEpwFLewkcZ^-jd~X7F4h`)uONAKz)$w1P@% zM5I~$R}n>+HN0A0TeVD|&0AN7p1W1#nHoZS!R072DSL?4RD99HLXTWyd!_}h+I+WKJ{f1PJk(#SWm?d;%2P-pb`4iRo6M_#m_MzW{>TsK;-NUpyF zri%~~#h)swQkCx=Z|y%dXy*A*(SQZb8a&Nc$Un{;!mYMSo5!W|(ckvU-4uBb#a`(| z@7k{d-cBRqLs-mL$zVm9u?h)(Gc9tpIBohCGc5Fl`GVA-mILo%cvX{i@RcxQ^4Q@? zm!GjszZ=)>HBGi_7S3Qh7Y#o#7OZW$`eXi#Pk-d8dbNeJ+i7(A4WiMCy{c>C!A4kf zzESo>r{_&;8$8QzI;G>h5uFKMo2Ju?p`%{dZ(i;OnF;JcR|i?)t1F2HKlz$AUv)cc z;97bFr|)Z+zC>O&#q3oa-~6T}g)dwe5!;$ir377tH`ca-9_%bTKF_JS5J zM(J%*OC?{REXj@A82@Q~CNQJjINsZ%$){3{XUgWw<)(2jc*C=|LiFY`8aq~PRd%~0 z+uIKq&qV)Zv!mH*iDjo$Zen;mR9f=hli4UqYN^3;G8?7NPtIO#L^2Ki^0|hhw68LE z=tW1RUs>&q-0GeYmVe$vTB2K1%P^~E9IGgOetxjuJ1=2KBB{M%OxVn;vBT7JazQv) zYX^R{X%%fVOuodWhFu;SF6t~$ zrIa=>VEpa3b0TfWWx+t-8d17uswlR)V!o>Mf+~h?%pPTkkBGI#>ghaEBJPqRBtDf; z96GlgM^V1r=4zha=e-n5iau$5L^YneQ+nLAGhN4sq*=b`3oaB+AEmlR74`cj@T3{4 zWY6|e^Qfb;LmJ06F;ho7(^@g>UdCBj6q#pH3>$J!@q}n8jr_5n#w?p0+3#pr{Mmd= z>jF3Cqg|MAT(DsHny;sIh^eQT8*w)aksNh$6YXokPTZ?4cIw&dPyk_Bdo^Ns?2pYy zg-H*V+XC4l3EP;AmFn)OK(yvS$LRX9BB2fzt34f4>MQbrs^1XwE^qV)NZcY-nXH{ZK8LN45)_61Dz|hdN2Q$Go#hL}#!HiJMuqMDE&A*?|2Vp{ z^i~&o=N2+HZ3HiTY%-xYF~~MD2vIcP4C6524jk&-Exz6UgS^m!;zUoDU9rZ7cvoLD z@~&HTFEljQn#YwsFNNVtZc#e%btI1&euVGTfc&$%Ak$~CchHjo%!*n_cH@Qbm^-dG z^3`wTZYL}>7t+k(hTjXq)vGZh*qLXHu5aE&4Vu|3c)4L$OIAO3*!238OddmJ(q29F zM8)4>V%EOBZODVI<)@rr;rBiTRyGlc z!!``$t%%#?4eesm60XtuKeCs2W>LZJ*Kj$RSeLs{Unv}X-)xU|>uzKA<)V%j?=!|P z7b19)=(xEV3ry@ZwrTx4{W^E*RqkTl`yOQ#sioqBcg2IBNo2UGbT5v7!*Ik??o1PU zb*MgW_z}IVgqi|3vLp&j;!`APLgc9jqS_9NhmUQ!MBzpLy2ra>6{t<)1Fbj%qkE27 z$=xQL@;yI%Qzw#=>gR45vE9m{C*)+3ZYVpggeX$zvN*Njhx7AEA1D`%r)QS}qw>_4 zH(OTSU%P9JDNR#d)(seHZJ-%V)xST?`PQ2C&>|heIL3}VIo$5E>9IBw2Rm2oW@HxW z)3U*3w><2oBICVUDo22WIR4}%+OdiT*N;T~Wx-WW8zRRI)8c4^RJlYum(hDE>Nmk~ z2iy0h{Yf(GS$Vb8k=i#U@m?wF^L^y4G?c-PX~mu$d^OvS(Vd1Yva3EambCX%v&%~L zn3A!>_(!L4zNx6Uk7ZEIoI}dR4dQzx0+cSct%rVpNbvgeOTgv1irnk6z~0G7lK%KQ zg0~~*#Ji(~#3Zyw1j%yEOXfv(0 z7##a4oF>_r)*FDC(LoqRbTp$`$#^BXy(b6*u_B7b5VjDpErFr+#zA$Y)m2{|d7o); zs&q=gHezf$S?-%Puf&zf;(_w!_eJp3RN{cDsa1IW6i>G8nM5tp$xux#zgbE3#4LXP zCO4Q+-yb=lQXXpE2QuS|61yNTP+R;N{Nui8n-v!Al*|G zm7D6(i-D%OAD20%+#2jSM)}ayyCOqR=9I@>P}PA_$X%gE^M@%0Y$YWxjJslDLNpiS zC0%C2*GJ2KTiMv&Ag?I+v~N6<8{!<4k-={!hj4d-nZaqfW&;wOVINWl4Q@>ttThE@ z{&C(sC%7OiH9j_%KDpy+VIjq2V&~=FJ7plK(~N2DLr9f&BvgxJ%yyQJEqCrcbt%8@ zxrkQ1#D#Hm$g$~LV-7S(7)JbNhWR$6#R~JUg*I7j@oK zeQ&$$H)>jY@=Y$)@RhM;*Xn1QVrwxqlb_KPPb%hW%m}Oa>cIOtQA-C+)aaiF-<@(g%#z)z#IcbsW_{By|?>>0Zw9(#| zQa zJzwR~835Vurc0mNVjb*prXxn2Z$X!c^1zMQPFK!lH@nMaz8q}*kPc2h5y}~_rYu%0 zeK2#}N$(E5ue>AcAq|9}CQ2^$sCvhg!G0b@-YJFPKP@sF3(34K!E^NvRjti-%Y$=8 zE*EtM`Nk|^tJv#=71vn zaEEmzG~ew@+wk&G@-~+BA@mThM5~H8b-mb{)gUrOt4gK(K5eSrek)r^uF%R4?!K=~ z4m~)Q*|^LXmj2+_PuQRIZo;qJAgvRZo645DG`Lm+=(^Ps-1cy;^bVSJT^x)_SATR@ zq;o7GQv%PWh0bzY9CVIffe$>crhyZxLh=+~yUX)p&5zV$mmG=A)q1yG`?21|f(0Pt zO|62C4q4xp)6vTV-OPy&V_(Il9f|`jWI#qQAW5EYacU4XotqDjTJ&9)xY^AtOFb@w zJoctvhYn+@DYp5eW^$bh&+4-_US+aKjZa1GBJT#(t!)sOea|XYx07Gr->JxeG#phi zlgCM4g)GUl65YRfGS2dWAlYHhG!T2dPa+|zz%aQz`9ylWl=oAi^uCT#vD7UlqX^#0 zDd_=+p-<~W@TcX=D@Sp!y#XcKG?*%K_Cax$y)njdls5hq-n4b~d2EV`kf5)hs6lZv zOBp}4i>m0W#~z(?@{wD?BKQ=Qht$fIu70T5?cDaHoouR2a94XS_Ao1(7<%2LXNS~Y z4|^e|rZO6udT-axvF!~RGan6ujfT+Ij9M8cd%kWVG4YjzNtrpeiu!~F`2n}RRU6f% zDV?*{FBhNeRfZ_F^P2~6_@j0Oo6d7=aH#7MhN=^jz1@bkU*RvB63uys`I*^EAAW2_ zg#?@qTafGv2(&l!8u|H3>#KzUzqv=B^}~s#LW>Z7J~ywG*~+Tny+11}!>r!E-Z#XB zmWMxRF7{!nDxjQyDiTFGl7S$18MtQVy-cWj#>NJpswiq%V4ccg_8vN~w^t#8=j%Ri zvIE4OsPJABZ~A7hNXNSL4kWp0v%c=c^p59tdLBaceT@AGzk~@;9wqG*W$$Zx&25v4 z#Ob2Kv*W~i^I~;$tQO|3ZY6d_%&>~p*)#kV9L!MA3l+~lXg(+ZOh(-QX^q~hbvOmf zeYWiLHfJMGuO0ASEb%0+&n^we>vRcv}D}Q{<63fr2A}Z zGu=1DPmJTlVRusuuUzxF$NI9|g6sN`Ap44pss4IbH|uq`W7Ui0rnXDZ{rbFDs+%VL zA1qg1=n-I{%9KoW>i_jhJTA1ProuoM$i~4mHNBpyGl|B9_6wp0=Tg-CtX|4pcsakS z@N#>R{boArI)F1LoN*YHt0t9g1mU^wbJsiUZYG{-tts#|?+jYq=#i%chNAZteCCM~ z5^!SpMVy_UIK^_g!o8fcN_I+Yy>ef-&*|-LrsNjf8ho-ng4nNqPa@m+ZVmlGv zri`exx7@8_xh5u6y(0ebyPA7_H$8A} zSk8yfRD?)oqOU$X)`nkuI>*`XT)fT@uFo3AirF3)o#bZ?-Vl~XJC@IU>~=nal_?HH z0Y$2`>XjSQpOLWVS++c3p@HwZFPobT2VGlfak+#yt&K4zgii-4*khf24~iE;k|b{$xp#aMgUff{WR1$xnn z$*TkL=1~{xO{BK{9h=f~3Z*JUqTa{Q)f21xnWw9~HQf>QhNN^@d+WvZxT05UjoUE| z_9cAJtEU5wp)P>)`R?BIw!@_RCiz@Ewgev^*{PF4#7y}xu1?oGo>^w%SJl@39T<45 z4Q7bzh%4kAN-|i~kJx+YM+ARwE=lA1lmWl0JXV|EyB-znSorPN!;+c#YKOlz@aMak z^m6AHxQ}dtDDRvbeSfJz;^&t2OFF6{Effwnb{eyPUShd-hjaWL#mZK{c;iHkd5}L> zr~FeJs&_7UQ!Z?T-Z^%$%0)97EQ*h*-{OMp@9&aiA$^(&{a2TbFuO&flbs>Yi%W&5mMVGV8hjOWa~{30QSkC5>S(@q8>l&oLnI3o zs@}Fj{;>j%mqiI!lO9WLNRe zzSUiNiA6z#(@*P!ZK>wYIK!KUF0bMY(QqU1al z%fjn&*Stc%(;fyb8CBopYJMfkc?K);&}_{CDb+wV*iVSG?AX|&*qb)d6kM>mWtcJ$TJ|pfvQZehi&=V@P zn~w_8HVIHttlphVdG%!V%0MM+7!7?qtfBux&n;7?%lhGuNA>wjgWa143R=i*52uvg z16^o*n{O&n=7fv=dhM}P-!%n3xI-%^yurKjPa9+0{1D5Pf|#QpGF!Ars|K@WS4!|G zolf3KQF+fyiJPcoJ`uQ+*yN8Im5z~dR1BUOVPSh@SCW!XSYw{Kmv} z&kZ%c90k>o?2O+d1}=fjrUGwITIedJQDG^l=Dz3)vm-$Q4BIPc8ef(8{6d`N&km?`qO~F^$4Z3v?7YjepB$5re`;&4 zC>wB(K;dEA@m4MWNBGnOh754($rdRpgg$lLzFzVMNp)La^R)$KH#(I?mCA4^>{?I7 zZdLJi)tE%!YF?b|7I{Q6u(kPR_eK@5-5}~3EoX?MCc!V8mFnp*b?C&a7OE0k0!%IU zM~=4uyH6Xe(i~SacXGbF)KHRDwgO(aEE9jWchuRCDB$#T!ChO=wvdDBA_H+GjK~Nd zYNo-9a+=WiizXVGUkPV%+x-%-O3DrYAbfS+n1`kN>xKKIsM#|q3*J>ewf>+F?{*M{JFr5kCTG7Zuk9;7V&Ro z9*s-lYhbv|`HGg7*C?6YrZm#Ks$!CkU_rSS(tOyHq+B3XzFGFlugrq&1T9S>>ziA= zn%&e6UjqCGhLQZ>yBxGNTYSRCDX2+?ZpF@P$)m~&XlIxeebG#0NQ0BnBUNB=I zAgz=_+iQI@Pb~?kLbhMsjy=d9>T-FL>flWNrUdt63;cG~Q+fV&iu_fr?D?<2oj`jd zx>$3kK3a!KP=s>KMnTiA-@b1!fY-o)V;YER%F>&4K3<|eVx3}UpfVWUp>f@un7B1@ z7}xG^r6p&U054hyd5w$mdsmqf2b8I~_`F9&B`Hb<>H{o3nyhcKQNM_8+n@%(izons z@8k0?^JpECWbbHS=d`wMcg>XO5Dx*B%N1?pOeafop~&bN+Ja6l8lh>qi(3K)@A)~e zuMsuqEvn~&tFEe$xJe7R64ewP_RSVtcS;^0*z1m%qs@+ud(XZyRS#8f0 z(d8<(Di4XivLFJ>MQa$Mv_zrJZz2`SBjJ1D7vmqXuJ|wNW}|&&z3427kF8m&kR5J)XMxQI+yxi!Xv&RxGzjD8(G? z-U#Zp(Pq#U_q7j@pP_v00|9AXTqR%F$(2nbYa)N_CR*03(^%4)mDS+t_x=Qmwve0w zx*7yZg)f`pd_EtV^+-hEp}ow<4twJziXwTar_E%i9kuC*90^7Y{xy{KuTFNDlqPxz z(|@|!d<2ws&PfH&G6mfj=;^D_>HArA307{h_CX*c;#-$7i{D0C-O0!hyfo1BZwfv+ z$DU7yX^#4}99Eah7?eF?svgTq9hoxL8x`<$lwy{r-hoN%tF!;H$exO^g!o>cT~1Cd z0rn#!Tw7rZ7p(KoHCm^P=~~Mnm})k7v|_*0;@x-0I+AZwibv)itTo>l1fZM5Bdcrp?%?)+e~As&E{XKxrZr%>$deo6{X(cnV4BQI)VZcIOZQ=ZE%Q4tID`*=|(uT2l(w&l4 zH*&-K=gm!z_0MZ88>HUQiZ_*(OVM)VoMw0yjmk@wDUoH9mZR2GZrHrq?C}1^z_8Qg zY)3Miw#tD(Dz!vS;Bs*n`YbktlTjU&E?PvJ+xoUa=2$3ne&X)iyBEuqN{>_*PrYx~ zt?fno!G+g6?2d6x@Ui=1m6>SlV;S#a)?rxP~Y zX&xcn{mV5Q5jfqjI;79mEi3r7_Hf09H5x0c`S6N*Xy%fyXLQ8HDt*o{9EOZ=Y>A9u z$y^<~`>-@~r50U`o0&TLg!M;}g6wIita>8knM|o;K~loWr*_Jr6Q$!barb&=&ZKxe zggbbpwCFk*hBO-&xw2<3^*(WsqHDfJCBU#?quk&S{CTu?hR3ad+*2{g^{iAfoPlKq zgFIaO#e2z_ElT^XE&okH_KxZn%#9;$@ychjPVhHYj{l^Z+?C4S*j~2}#QD=n#qw@q zi%EYbv=;RBYz%_x)Z1V5|LVQLWJ3v*u%w6Q^RAd`KZg&`A3w*=;(D{QJyV5x$h9v@ zE6SQOwXm$mK7UA3a;XZwI)bJrYlTF+9 zz-nN1_UYm`R+v3W=rsPyOQ|~dXt1Ju0KZ$sU9}r#zVf{1xC5DF(7UPUYG zTnk^Tv-{=ww9P>4qf@MU`Csl;w+v-5yNR_o4?g~#m6fyddAHZ^dDReba`Cwmdv8>& z{tUHzaE6P|Nr5=p<8r?rt4O!`rL@`si<23B+UMUjPA zHPV}II=d{9#>kx)%G4C`cabSAXA)b{x!(q2GDk0Jd7X|tJk_)K)AU1{HSaJ=^~RUW z(X3hHJYc03R7?<@tc4!hD26?B6dMw$tRjr$7!10W#>wUc#S0-%G8J5z6VCyPczQF= zI&5-ljS%H>rH>D`cow96W!+jJ+hdmWd?bo`)i_*2h$FVy+_{f1Ti4ZO&2?EApkpp{ zttORFs$^;`i;xpe7M3kTc0i~=MS43#S4@6D!H9hI(QhIlb`_n^sc*^|US;6H|0%s* zS2%~oJ-Q=x(0lx^#O9uS7+df8#^CwH#Y#dZX@)NtpFKph7r7I3Rr}&|I)rJ}m+6uz z+98^uK6Ms;6W`w@hd+U$d;8Hx;yDyPjG}2xv?BolhXB>+Pk>W{aQZa9;=(CbsxCjoqCbKOGsk^eU zmm3Hx>e|z#dyWqJ<&`&Ydln>af%4^CJfDoUoLpv*787i^*OXc?7{2_Sl+(Eo)gf*> z@gmY9DY;0<$f1tpG&LEH)zBC!pw^NPsT<1Kab=ERf9;EqE@J~mE%%G}lHv*_tnCH; z7g;}$lrAK;>CMuJ&8Jz^N;4w@9maZzOD$m&<)_N zo%0sSNm!!pIf8NCSj;Us<9l+M* z(^Qe=%s<*K#R$4?ZJN6%Z@sW}Fo^joQ{XfsB?y1OcIsi_Q*{p3>;RgYE-E^2?C-ZL zRwf`;3J9`Xi{qi}%0nbfqd!*(XXxilmpt6D(xu`yJU3|lXz;3S_mo)tF1!NiXe@kZ zBrfPZtnB#%DIJ1-=qJ!`+e6syeAIl=WKhZcs&A>z)+2^bjS;-Tx1D=iNcE11!ZlO* zC#N#Ba;&HPfK&aJ+NHUVEb8-l1q{ZjgTbgR`D)mwBsk``yCECFIf%~8!`$?b;54!S zDR^}2RcfkjT%TMbY@uf-;7vKavN?iv1&cXY-0f+iyQSgtG3;D&XU>Ali)DIqCpp0h z-y~y{9aO#g2x&;U5^Q*);srT2s4}vA@6|DQ$Q_Yy5y9c&mrmR;|bXdv1$t zrud@46ZV(YsS5(->$5v3qfp&0S|+boa&ZE16%2!xG%upBAM*IEJ{@Z0h7EX|*|WSZ zx{YWq7urfPNGa6U)YSD0u%h&`$J63FL@af82XC8>4w911<0!|fcfj?TOf1L}qdokM z=+W+1j61);{HcmVJWahjQv#JqHW;u$V5WKq*Gk<3@ zZ~K3@nXbAiT9j5>T6>EqO4>nfMQdM*mbTVVTL~gvrd1S!lGa{(5h)_ECS8zPV~t%p zGvMh9^L)ME=XkYB;;x~sWf571FKZYI;a=W|b^bb-@EjS zc+-yO*G2=@ra2Q%w~#~sc&y>$VaIGlGA@RNYV)!h2XG~mZ!NA+bJRVrnIE?2By7}y zrIO}s%Z)cL-=p#X#?4-8izY1^l94xgh%_Ssyx}KkkmE~O)Y4?U z!~q-S8*l4nVFC!!$NkSO{oO^WNu_&b$VYui{_=A58lFL$qesq8O6BkP{Nq|}yPl3dnxb}@XTXP{G+kB6(RqWtUMg{wVmPDnaIt{+@UmWz2|=$M)0 zQBx#y84j!qb5sEKqNMF}J|oXiy6r^In5P28noQk~6iTlY7D;8J%Q&2Cj_|(QR$gZ1 zDJ@!?H_nKJjQtjwV1hgXGrRvw?r|bUwlB~OvgC1eu2qoua^%evee2qb)kA&U}!Zd9KSq<)f2iaPxOVeSj@o7Emnq zl6H~)6Hs!>IyMGmxhsxW5X4bF`l;O9Xrr}?T6x9uwl>@LOXuElBGEOKM-Q2sN{o5_D{9|HVv)40VBAL=L` zMrT9x*ikEiBj+UMGR$82dT;bz#+lini4%EF@PDkgUfMEy#;zr;y7Ws}9(R&^_(L!i zMe~yYWq?t9%ac93gn-9$1HLtv0y4Q1-vSiVS-J33Tte7Hn(s}xI_5&yP__?=zZaih zM#6}SkYobO4qqc6o8#bT(+qjmjfN@^D^PG}VXmPBgvkGS>nd05^bg^8Plne`8Uec7*R8K&@F+zI=1vvxZ2^=#EcX+5p zk3Q*$wD1Y&_lu#u8&#v(YfU$x>O`D1nA>rS7YvjXI=fgg)J^nyBE0=nS0njhM2cb7SUPcJqZz$$*#ecEjg zvc4-P-(a}S^Uw4~(ORYmFH@Mn0wQyEl^;a6#~MlBl(;!&m29&ahd3aQEg8XA@x|B5 z@rtJW^XGgFfAD`PNh-5GT~d^PwD0S?+U>88MOgKqZHWnWanC8*+B{$g_P78^bo{m9SW&#l(moSg`Bu|dT~%dp~Kq}(cyH%a~|X-nX(T^%sd z>5CD_XP~(?=bWsz7YZ`4V;LZ<24>@;_t(7blU7tIjq$@PCC(Q|)ZaO^{VDb|XS6Dk zenBU_JeJGEK^GW|u5N^m6M8s+=kAknu|)Pl1U8#hG~DDD1FUTZ5_%hN#>zaCC%Bz> zMMdP0HuL4R_m-%P;PWZZqc=;QpVT7XP*MXHpk3pUeHh*uU1{bQ+`9R_`;|k2&tK*^TW{;jhL)!))kCRIxi` zC7{44$0e;;T@7T|&m*1H#ujS()&7H}fI#SbyfLvSg6&IYi1j)vkz?7R{&G2CmKim9 zvU_|7Ke#S1G$r3kaa(Cjvcn--_!Sh-cZNF+E5CMIhy(0)at@;EK1c0(0pm!h^`~i? z6L;dB+-KU%p@vV(d12RUOze??z@BX2kL?m@?t?A;N)n;iBJmt+>8j;XhZ}Gw}+x24r#| zp+z+#ZKdM2Bc2F7sBM8#pkS-{GVUI#E(6B(*^#7+m50rU1=Gt{V+H_?hU=r=blcLn zZ5`Z4ZtYcm+9BA*4B0;N`dXeSm1QrpH_+dWQQ+7u+twBs-_m9zH-xm& z6hJ3HJg74^xeud)zZ+3wqEqFDV$HrndpUMPrN)KFZISsf@_J{z`RW(=0}q4y@P;rF z(ZJc)_%MOUy7PS8^-+c`|lb;qHpEqctL zD|2joW^NLs`&?Y>3>^B6Yc~@anoa z#V+on7?2O+$EO}qf|-GkRUI*zC-V)`J^l~*t#vkNyt{vBq@hfd{&X;YV+lGMZe`u7 z-Buf(dwj0!R-b65>7_(acz4)?S&uLvHRC3C(D#ST_KS0s6;k3R!@!2D={nr3WkRj3 zAm23D%r>!zHa45mSibRhwAs%Wh&HPx-wPgs&h%dsu~$txg(CAHf!egsaszBVu*T#j zqZMlPCF_@^weJ~Q65Ai*SxfmL?TF%{86y0W%a73uO8a{K5{&I4xHSFFPk~43xQXRC zX2bjt3#n3v3p<27yPPw3!*e2N1JK?-7i%-+cAU(D5%(w`3LK&flzEo&We5D6aY6dL z6I3FOy(S{je>yTCI+W37aEkkFy9QPI$zx4Ulz&Fe2icLzDudM0u~5#t+V-P|z>Sxh znbn^3ZRC-3Q<_w2F{)?hvMaRDdI1}z;$wT%S$`ECWvF#Zb#vp^=%zt0C;g?5TFkO- zBR)UF@RrtjgPV7Doe*ok82E|^oBWD2)e~&uC?4W5G=XlQk~nsaf{W*Fmaq}UVQy;Y zbTvK9Bl;>~*5s*`;f*#16aauao*=4RZqa}$x#m4PgB8Y|Ut+{47f5R5L9NQm%93&Q?X6fyi6^ zNwcpBjinLChf>9@1Ov|y*oX~4117W*By3Yl)nPql>s2Vd98nct7b|_|21c^sLNFOB zYw5IK1sruxn=*fk8Ke;_|G_g$U6GokZ}WgPt3>Z_h@)RPiX%pHOSS3W_{_~$A+%6y z`uBtmno5g9KR_g-V9}r{ddTlR_ ze<&-fe-H=-zS(iE&kIzfsxE8kCl_s~ub6|oD>Kun2o&d@MTFv#*bL6NGQnAq@Qa!| zx%GHZe`IdQoT|_Y-U}|4Td!XaY1NA>WC~Q8u9Icekk%kHmT`~GevwPOz+hfP#I>+} zjsc9DpM@}lwrqI?!J{TV4{fXV0s}gi`#%}w)Utg9=}W5FZ@L>LtQ~dLIm(&kEm^hI z*#zDztxf=(?IH96++p^MgB8f?iL5Pin{^3Vq-tB2`$YUj^|GAS0RC?p{J+6K$orpQ zAmqG!v_Ng%Y5N7JG4jP9#}crkR68&}!{G3UShT8+C8tb!V#w-N_BYlc^AW`#;HUe~ zoL5ud%xW`uJn0#b^VXkfhH=>dDeO488^8f4@fQFU?%kRd-e4m^aK@1c7xNq&jt0pc zdQct}VRQJzmApu)`R4FZ)|!W$6zKfP&3xX1ux9ty;WNoInFwlD+W}Ojf%VH3?l-X# z%BP3V_qZo85((2b_|@s`#j}*>#)U8MbaV`h$jpBTKviZ!oL}xrcrk@4ny$k$f~^Oh zS(0py#+Nh5>wVdpW=DY|uj<2v4I<*%tR?ua7wgA(n|d8Jo=UQcyfL3$8O=xxEjz9L z=tewO>Pb=+IqpukvD3?a5%v?8bq~2ie59{GUT&<+xNV{8RcfwrZpUvPZi9GvI0b|3 zO1#EB`#UKI$i*A<7=PbGIC(`?pc`cdS?lqiIWELthi$gUL7G^)GyQu-_8t@R?#9J^ zq#G+Db4&ZIj$}pfB(Taa!6|im+-%3pUv$J^*SOI|?;rIKG9}tInj=EGg}WB*kH<4O z^W%i#)Pn(0WPcNh3OwAo0q-BE>~f zjr04hHOqSkZ@QhF1H_C{$&6nNYb(;T^uf&@cN;(wZu0De`P6B(>E;>TB`Ovpm5Q-h z&b@r_7PlCe-#tWi7S}GOu||m98_(Z0Cz?i%{WzPf@-=u9f5r6M&+JgpMcLJ^!w~=)<$cV@|g44&EGF;qV(Vd&IIb1NREtFh4CZ#kZz0D?{+rcpEE}t%6VCy-e1*38N|8ft=t{);Rr%T9`3EvzBjsY=2rX7idS0 zR4lc3Fzg^6=XGa zo1R+abTP(%!n_F%Ap zzw`xC%yT-|zqvFGe=e%szIyBQJOFD#Y;BQS%ZIYG8Z1(5o7|cLxToq(k31IpR4jnC z4t13uLzPcpep{w%;@us_BIh#VB%Ng{zw-wN#|*MdcZd#s#9X(@%D7w!3I|upOWWt+ z`LQCjuuVB9`06`e>V|DX^|CfDZ7>xxIx6{2UK!;PVaaH zW>3+&WnVrYDG973fx|#cX(T;&XzKcb zg=B%x!g>afrAgM0EVM1xEDl}LEYbiRAY_`9o{r1pDeh=?4IIe}Sr~6CJd{(b|5H)q z+`O&xu!sj3yTJwk|hqH0+f^ClTO%P|Js3JQ&{s4(g^Qk{9bf`2fm> z75i3`nOaKf^6lM z)RRbI0>nk6X^(qW^BouF8>7eHqyU!%LXLA9kNI_tgHsxEV8?ohx9?N|G9_pk-x{-Y zlx2AhS1M8&<0&9P0VX+HS=%Ed=M>17*RalpE4Gh6B1*aRo5URQ|6pZgBfPcY5>NLy zk*IU;&KQJ1TFKqBEurv@KzAoiysrTI4v)W$^$MQ3zS)&(s~kxfX>z(|^S}r4+026% zPEApVJ}|%J*A$Q?(S735he!ck>AkpII||iQ1ZvO^WWYq`Rs{wPv&v)Dzdzo|m`CL9 zc2?;5sViNyT#Rv|@6bg~Zc%?}Ig$|K zhruuUdb>GzC3zfOQF9$uYSbAsr__m&ff*rZp|BzWwuTS8;hA+=k^EvdBt5XMmd$uB z(}oqJYFyR{BNfZZsSw!{?P_)cMP}APGTaM9@F6p4xvQB7<%Z2Z^{~6YhF%yX!pEn(^}MK}Yi>grH6y_?R5&Bw)X^p)fu_PrEIn?c zHJnu6`8yzc7;g6SVmW{w82;vi<`$zdho(}PCPkR#_^=b>I$*Fz;&J?(xH#UU=_M?1 z%DX^ZQevNT#8f~zPli?g29*`s@#9LL5^Hf@VTLUVb9spaZIVAlZdwLFDL(|9A7#cp zI2bXa*%t!>Q4=t=L}l1OqpQv(m*f@V8*odNUr+jS?q-(023nUEIioSEB{4VLWVp0O z#hqr)d&LL(w`m;_8JN~mLS`Lrl%2gLC#`iJ(lzDV*Y8(BoOP-K7eH1sV7b9=nwL=h z4f+@`=DSYP$v(A{@UMAMJdo#~tSISwnOWBlmNVf`zAz;Iz^1aaS$`j1Lw*NjPdC&W z?pgYcs(DwH4sHPcF)H@^d@XEtG%^>T0ozeJO&wxkE@3WBUcdFZMCBG$ zci@6iQpfOir)hx~MLbSb!?G=I5%&KD;fv+U|HA*!09C1^pm@%t;u#uLUw*DkYrEf& zB|L*P6&c{f28_PHbiEB6rDrHK5|o@RCL1W7F7EYpsI>r!N6}n5Rl)yVxW%R>oF6wQ zie2+{*R_d$bY3dnd7+*HK{gGMXAi>_T*>EhgyqRK(^{cZnycmEs}GWFIo)KeQBnqR zb*lM+b2UYI6b1yRR3_a#wRmkat-jUxRv0sA!hXVy8UWSG+24B*@D_rcOR4qejJ^&T zAeMYL@p$J8iqXD9yteR#I-<0q7D(S0jugoaTq4gFF2U6=subbV90;?7nB z`559VijFmQRnX1BgLtB-3n_!suxVxyo3#BxDsR6M2S&iE+W$JUA8rRF{Pif4ZSPg}=u17+GA8EVG1ko@DPfy{LCuO)#6tisbfBVS9ILq)0uxCAh#Su(Dm zPfc>Ezj(K04S9Ps=Q`|Uhgnj=!Ncn>5J~MX(*3e_kL>vOzHmHyszaK4UJ3B~?-&2L zS#Cz1dJkALL!Ub4c!9ibnx{B&63$i|pN~I_mKm)uz7$WGhTd8^XyV>`5Txvq0lJa# znq>Jlg=Con6pf8sYe)0mmzWYqCh~|;vKzYeuKuyjnfe8V{y7}|Mg#lZ^UQPckoVEB zh9WhKQJ@@2sE%NFf>`}!(irBW8{SlnW z%VGZJX&-=E?h?foO3e+SEVqzb;y<1odQHNp069`~aNPzoq%+sEsD8h*+lHq6^OY)V z{yJv(l_lzO)V;;g0^fxrkCA8oy_@tcbn9+?L*Lz8?ib%SeuJ_4-Yi#7!^EQ%8AkQ9 z>n)n4%@+S^eg)?})7IZF>a`eLLzq>*jj*ezgz^DqwK!SdOoWsX;SxMPFcAhZs3F(9 zrB=6QuqKeBhs?dFVdM00&G+w#ll`#Qqto7j!R)(ccwdE0{b)rJN(Bj#_!7OAI!OO| z#>{uTL|~7C2cuO1r2F|ovS)hneFaiUYbPm93TXl;ZAv}GL3N(m;kloHw58n$>qPre=T5IDj{#IzU>#aRmy;IPKV$H&&5*MGNB8+<^Xv-Ja2+z;5pa z#J{g`D$R}@9qBCu{7|0 zWrqJWN9@%qJ$t?6!}K`W!k1bvhivBa(1AQoe=~47*Ij-+V0?zhnHz+x&-VjxMqS&94hNj;TFvGa(>n{&0ROgo-dkoA5LeybbiUMhIC*RfFd)) ziuRmt=_Gt$Jn_6zfD^WIv#Nsx#-z;EHp^WSGjUNsI*NkW^ZRdvl%2lvjNiBwUtUQk7ecX9g{h1}_R)pejjW7@!f! ze$5UYL1WwCV(3Jm_ea2%SSph0((tcEd)wp9vnB`f#M6!vI@+y6Dvb3MQV8iP zmJ$eM^UQQ5Gl?2!9PXaU7~0)%?Db?WSu9D(^>#3v<5H&zc>~7FUKGmf2swFKHIy7i z9$b3kVKw~c7i(&&g{jN#L&~~;+v9%3oB~FJcC5LAJ?ZQlk@kC?h+#znS!O|zC)$3W zHj-}$O&M)7zO>WJX!3f3=_F%JArz>&GYFf@w#M!i_TeQ;{L@Wx+eyGsYMbAo>bu&O zQsotPqI*3J^Bt>lbmic#6Zl7vG4um-(@`bfEOw~e*T3BEz2C3n1(hz=h#XyO#P*$5 z!`Gf!A$VNt;bl>HP|`5}kFwHbY5n}2-?InO4nL`M5q#3b(88ed Iw>wY&ALXX8DgXcg literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/images/output_settings_mount.png b/sdk/python/foundation-models/system/docs/images/output_settings_mount.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7047b6d57ffdfbc1ce8eda36b01c07f4756420 GIT binary patch literal 57709 zcmcG$XIK+!6fSB*R0J#tnF5jj&unSKzc$z={2Y*76e3^bd}yi3!R84 z9YRY22@sJ^2%&}&lH6h6dw$;Mo^zgafA9>GnfYeTSJrypcdeQCkBuI2o)I{60`S8YM2K>RwhqpSZy*p*NwF#9KRQO!Y6o{JXeWWXUR}I zTYuk*9`N%b&o|MYQnrZ{3E26%(n}@{->;p?tGX2b-Mpq^A!3T8=r(_V*i26)8Mx)A zhNz0f<&dbM1Jn$vHDZRo7hdO6Vp+Cvn+>x$QRULhORVuofKSv9%@1V44AbN)1whaf zHb(&~k9G&$yfBEyd=(y zOS#^4xbY0Dli(Ejm@>lp3|SHj8BvEcnX4!o5(atHI3FA^-pw*93XPFwjZ>}xSpvw_!0JWEda(mnM?@HJ5rG8!m?OYAa?9Pd7344 z^KOVdcupTz<5wO*a7-m-w5$x`9)T%;>}-47zb0*Uwj3E!*O6US!KFe%GS27oF`XFDCt&wtdaDP@>85Jzj%ajacCde=34KS_6(pc`w zumEgf#+4FRQCMSk=x54Ux*PFpvI|SumcW`4OCLcefm+qpiQpZ=kUW(s-`3>Uhin4N zRjZjr))`p|E^$`vvXp-FxnByaxDaRI^YY|N-p5r_)x_9_p(!q)dq!5Kit32EZB6wn z&kWh|a9h6S3+Q*1w}Rg9YQe(fwJJi#K`x7*01F!J&t+G3xf-W?jWF^?*{qd|e_!-; zpu1YaSWac_+mZ0mU+$l7M8gNfWIg+QkC(a8v*bO!J~g+D)!?|3d`flpCexp4W_6ve zx@W}iFcOhL$(mUjIk+Nuw!C*YFer34RGk%bT0Z~I-eu*!sOu-JU5>N7PwFL5;k&i) zGD@&+Z*4mRbmRJrgYr^eHD%>~a!%E9Q2@-(^uxB;cpJZ$|N7$?%VL+go}?*}h=b{} zCzU^K8vTmu+=s4t|NZrTsshbihKE+S9F;NzJ@=4GWw^3uZ%Xk~w!N%Jj4^9z5V@}O z*1I|~H?$$C`$EHDFxOgz!O~quJPk6kjA(_rhO~6v<~HrE3Z8mlb`9S&bEjf78{2mj z;=09uYj)V*9GMMwrW|xnEk4>0q1Y&F6Q=CfMq0v5?JErXM;AVabZ?#PJF9j(r*Xce zyzj|sOzW+YlBI0Tj%iAZhU}}^LhlRN(KJjx;A{ses ztG7p@J6F?PTuBKTH`-z9Dw8nugdpy&=x?=+25p-gORV2k`AR)t@4b)fQwfa55V(ze z58Yeu<&MPqlhZ7F8B5WY^69;##pel0$zcwUDyL-VGK?FrJ?L)j)agee6yeGBTiys{ z>#o6;R}B3Lb!u6dLamBc#P|kuM-z z;6sJ+N&D4Gxo=~Pw@dqkJ`J8QFg)Q4pOGP=#{UQjPAol9o+(z74_i5FWAa00qMSMr z9PVk5OOwbk%J*MY=(~xrc8<1m%^V@zV3HLR`nms!#eJe zLxMgDB|TQe{uB^N+gC~?P}cy5wK6J=+nhF$zls*O2Y4D@met?;0PllBGW?o#HW>%S6SssiHUlmoaeqc%t)@Xh;rxKw*Z`4WX22wWnED zLvd+(SO%Wc=1IC_C=vNww0G8lZ@t(vNqjU}t&I3208^@x!z_PoJ z+~7|h_kLx#+Ih-XyuJ7`tkV@QZj6kt=sN{jaEXc$xWtt^G)2g?k__TJ@+Re+bFDNr?u>kBRU{M?SI-mxmTRbZX! z#*P2wjvBM$qc4mUS`MHPt!cGO4uNx_EHnG;-xt}zZ|AM)#g=t$vNDF zS3xsMIHPfCWK=D{6KUAsgDu4#_q~R(N8pt=CS&ANHe53B_^cJIT#%K}D|(2vG7MXj zWx=tTxVjU96%xdvqcew8?gb{zJHn=V2zIJt`Lh{%@-biU&(8C7!VppZ^}goAwT59h z-+AJD6|>W#CPv7txAUIan|4x*%0d=Ds+kiRD=!tQ%4|H%vKo6EYv4(n;X5f%|8#3f zma_V6!t3(}Vetpfac6Hume~cVNDYPYZtbZ3w3|^@&aIbe?9lYo_6fM=!_;;^&E)k2 zdtSUuqx#ZROI)|XyO>T6--D8*STGP;Xyg3}1uDw7SsHh*MLIb9sk9SLfa-&FyL{&# zu$J@l8!JgUEz&mf8KknbVkU#swC~Q zMoOuAe1f}rjTrXFVWuaon^s(FcZ$DkH_8#Ho=rRJ>H7A_BC#ZcHv}qm+xTouYs!I03{=V zD_8LWm9~+ulyny$=rB`n88cyOd(EP0OHnpPMd`J7#ww?hI`zQXKT|UefAh_#@MuCx z?!dgqM5vS(@|6cHl3OdUUX2;Hkb-k^h~Y_hvcKaW`(k^+7pdZAj zlkw5))q?o+UN5YBZ}sL>b|WP2uJw|Z=^%;SyBSYkGmqrFE!YvYBl8H+0N zv9u7mu07kS$fy6Zw{`7v-44lxuR-)z(U(ql_PAZiJ7AF#c4SQ#(dlecCBK|5Ewkua zAyW?<(8haAbPvfGa5S4j;vSS54G8@hGfGZL9qVxAY}Cuo>zz%3!3&vwS%LVbh!eMN zNVT-xQ4@NW6*$$)pZ0Z7`C3#;KyCRXBhM)xTb7m7{5SF??i=GldOS%c zi8yL$8~O8zQb!2HC&lmyctoJq6Gp-G*5vzN%cQ0ZAlnpnYEL(mC)~87I7~ufnFGba zpVPo*QiRUo)40v=YFb(P#o+e7QaY}s+C~1? z8`oL=%Db_9>|%nmYp>rvg#CGjgb^luC3(ad%Mv1Gb&DahNbYv zy=?VvW?3Xl_(`k8T=I>Z3shGd7T26k5bk?~LbO?YR-MXi5m!6R2&?2ETsUi4(caN) zKM*+(m%khF*X=mvBW}_&h(`L9LG@kOOmkgu8R(rXZO6tduD-Znnw-Yrwaaj$2b-+U z)#-q6-e{()pgg-bD#^Uo8jMPxo=k{%DYZHvx#3rejsFxvI+VWeG}oKHMD)$CxG z{Of9ftkDw1&}hFlf>P5OZ~yDe<<>wV*4^V)4@i6wzs9qJbPV+#Q)q*Z-^YYjIZbxS z^F#3XNdKeQja^pGz*PRcb$H8q^sA%+us3axrVG+|Q!>#7h zRdLBs5NDC`U&|x1KrQltA9r~3_H|p3!^J}%rWG&aMSZg3w*|#Q5$BRKv-VSFf5ATO z^G)QE6UmCVbB{$>?4X_A*6p19Xp`9F>IC1)ILHgJ^7cdOb?kgl>E%=k6*U`mu3$Vz zDag<-NN;54buqy-Lu-9hKt3z=kAJcpV$X=o8qX4DVQjrW7M&Y=XiI*d#OLTJb+D$7mqyZ)N{Xh41}KE%&X4Rud*RlI#4; zJ{iSWE+q{;N5(YgXwBj!)G52IxEVqh^%=FV?ltMYI=^RR75$?#IGaufNB>D-JOitKtzK28q}3;^;+=I5n_SjhP)e>``1seBFVhoSWCf%y%)tH->i#9IXU5 zJgKkK*jRctIr>rK$R@^97u{XwdQJ|Q$AM(>I7XdzBj&*N-?@R24^~m*YsRk>io%ph z(5ZVp+N94OAblvZ{eISr+5XszRm4!+I$mAwN51F1bXN9J`TH5>wJyej&)^2(#R8*J z^Y&fDu@|@6OFM6Y5>|^UOgYHG7W6+c-b+I17nj_so?6WEt)?N=63X+;2^I0!e&%_nDjyug z-8&((({8)8n}sWLTI;BLnj9ete)My=RGza)iS8yrt~^5$8*eg zk5vnM-g{0knbFc^x^sc$J#XD6Xir$MD9EhszRcrf@WII#>4-5p4XLZ+((QaBgIkaq z*>Anmr=(yoVbz};4xeQxhA*!W0qi{7>G!)g(uX+@T7-r(sCtvRRNwy1&?op6H|GyA zVXDm)57s4Yj@!>V{&p68wiiR&zgFF1)H0dXLXjhuJVbg4UK{MOit@iNv+-8;?^ym& z$2nh5MD7F7Oy&?XyX!|VyiD_Q`y;Uxryjrb%gwj#J_K-{DRWUKf12#O{oP0wCXmYR z{_~)Vbxgq!c^bo35uTda2u?TW-v&{}aD1q`i^)Yf83<+#DnbbkD+K!Mzwx6X}O9W+q7I^^rs4~b}a-!@TBY)@R794!3)bv5j zx(|+r@Z5YtlX*Ioa<_dMcWa={;8=D{<&a~WRm4L1*|hR}pCBu;(5;Wgsdp6%iX5d= zajUP)N!Ui*%34>jVMey=5o=ihz;(n{nvh&u{30D@*A( zz@PJ-i!OG@e;pLS_0OoeJgIHwk_|*S*MQJ3LW9%-L(pK$3z5QN6ZDG$p>mkyf`dhWo&Y&yGr<7U~;Wj~F=Q*LpzfA@!eRXKU|kVt+zaIU}WYPkrBj zC&ypXbAa8+bJy&6*#dU5R5RTbXOM%ft(U~4O=_pmkma0_3QYem8_(Eb%{HKtK6gDT7%3igw^U1 zYwm(zT1wyo({2fhQ1ezlreZUsQsKQMgkPAQ@M2}&_@!pZ6KdJzsFrw;(sk37J%=ho zrdp7lkbHlgiB(-y2;Hi>LoCBlSZTZFB{w%}+R1I~qw)MKi|nf{C@AMq#aS;7er)5o zN#cL1O5E1~Z*s}s33hj93B+XI8*W5>RMU-ycSr_Wr(A?uPxg6v7=%AQNTb+y6^wB6 zHfDk`P^`OWXVzp}qpkYjNp+Qpjoejjl3I||I82XRPWeJM8V$huAl1RselfS=s zYeG&zADNzg^^!+#C0PF;oh#9mX#D9?;bY=JYoQ;T^~0|g69dce_9!|__V%--Pi_gK zxlZsNftQ}l#tSmBykj5XnPtR(nzuk@kPl-2OcEA$Gmio$uU1)WdamJOEtdcx&B#d@ z|JKDl_olSvCVY*pzjU(wqGzjM+ilougBS-~4k>}z5Qpk^3K9E=OxEA##X0Tz*=)@? zhi>GfaB>&aJx=swrKaMfnn-3}HEaas9OKI}6^BpSrpXTH+|If`rnGz1{$-9OZ}prc z$N7LT^)W)NyIUkFHG7*;INo&+GxF}Us^^c#EdG%2s+iUrq>?9RKkv8aA-zTjf0C$c zA1@SLje`;@H3O<^4k6-FXf;0*J#8BTC)6#lt`;ROZpxG9F=rw3IZJtwpP63sm0M7= zzZm|2vyv>UldnpXHsKp%brj0|WNY;%yYhX6&xh>?`eu*t!+?5iA) z4;YT&k_ZvS|2;?aZT5Jz-K-=;P;Dm!c#3#d|J0r&jGXj#;Y{4us);)xVz#>Cs7ku^ zZ=1T^P@70Gy$z!f?MZtbPn*?@^n6e;z-*|iT)1yeK|`HmUjRL&%fvAY<#X<1YA~q5&XK%9dGuueH>0`VzDhhO=_jCJ zhCI7nWFr=)_qkODv75M0bsHXTJa4FBa{FdnXz#LZK!qJ*@ub3ueQz}U6fW^v^c3o? z7rNgo+9~)dneS6}r)uI;h9)gQ&7NHL-;mhUbnngVwz&(YPEI%0yFAJ3DhwZSGw9xD zlj(kKl7sSj{loOTh8aviku+`0IpCyr5B)&hFX(-SZ!~ZG-uqVJr^iLQ=!LSEg`X<6 zq!S30Qu=t7=}d5})z}wu`VIUk2BAUJm6q$=moKTjm6%j6Lr3x18$0eO_N%7zA?@D;Fn9;m*yp; ztF+YFWH@HJoJ2Qk`s=Q8&&p;`yG6ovod0B^m^;n0=rVr9bdxWQlyaAQyJlL$(ADH* zTcIUr<7M6mT)WuB7%k!|+Ih0VsmlGit~_T9D>$9iv$pa>DxRq>dwrN%(c+SIp?M1} zlggA$pd`i1tIVmr_-pmNf?(NX=}%|o2~vi8W%|MUO#FvxZ20tw%iFAARHohE-fztK zXpLgUnwrGC;F>ea+1k5`XmRTwD&V5|jZ?FAlO5}jxW#5kPGZRMo7W9i6XBFTM+jb@ zeNOSMu6RpujU3g)Ss6C#AAT!jLT(}P!;ApWeYBp^W`z!u7=tb{8BmJo25}E`Xie?f z+`Bm6GxT}ER(elQ45Lfj-MNw(TqCe8AX3Va7aIOSJTo})X;3T(V?7XzS_?5gZE5g+ zz%F6BHvBqv#Yz|d=gZX8EYGHnqF_PjaijMGOSw1NOG5SBynn29Ppx##I>AzIZ}9e~ zuEZd6EAUJnR>pS>Tn*#*vsv@jd>c4XCC+GgVZktcRZ1_FRXeq~I;4mS39>eB_wlCH z%({sopJyrjDebBp5S*QxNWGBu2-XmhaWZ}zn;w$6T`HF8^j8J^o?aTd)b)CA&lF*A z#%R&6H|B@X-4f=#IWDc$-414!)XWb-7fIQ6lI|18=Ue8zipbml zTr7$T%Fl1pF-v~)K`^m^Tr7NsYTyl?KOXS#33$N zI3&TP>;leiYMPgmN>%O&am7`EW5Cu;y^Yp&C5*YhvJ>u)lDH`jk?5F`RD-Bm#R^#N z5>7}kOhdE;Z!Y@X!!NH9S3mO127k}D$)h(r*pAetW-fwMj)QPC@7=>mQbX#WPGW=&FIhRM@f|ZvN|<5~{jwXz4@%6siizb~rxpflJ{0 zS-BzR6Cl-BB{-z7KPRB{)`{}5WPfb!q1;_hKb?`+gr0!6^1ZEG!bW9oG54rdT85iU zul|1seNb$%TR*|Ct1-Z9=_v&)hvMR1I9SdKwq9@;$k&pe-|w(&uylf9QTns8!Ydy& z<7%_K>tn+F%V3>cY-gKI&)y?|Nr?Cbr=_!kf7QuJJD5Et2nGas3aKZ=h_k|16y_H+ zU|+b$@^Fhe2pzw1zrvCow1KXOE*-zccJM~2(Cb-@^BYcdeLRROF4%4iR^$*IxAnHDa4#cQZfv@^CuSdzBbFh5u8o-g+8cqAuG(ns6_mLZl4%AxCkbdf-&6K}<-L$>e2NPku z*=gn>9cNA5#9er!e;Jd9__m5yD?4zNVj@~kt4Z#ujqF9#P59;?xE9<%s7)(p_;jzO z1&Ht$ZR>@cG?fMf3`V{fHY9JoH&6%!emUn95}LXf#+tamNU!~cv9E~|cU;FTFqfvb z+~Ed2=)k>+Xm_AZ8`Segg~jjr4bT=}DG)IzTr96#QL<7%DpkD;me9hzNl;1LXI=J~ zyM>{qBx^&6kMjA}SXpw}=UHn1!a{wLbz09fTP=l&T+{!8FGEayMjI!z#7}MpLkbFAMsYoNSP`-Ep+Vj-;=P40AVF6!F+FO0Ht?ip#6|GssdjD5TE(Uz zT&miU#@}>)I)pnLzG+W&G~|=1db&dXLY%gPkJTv3hr8RuNR36H59SJ^o`s<#d{#zH z7siI#_25*VnMu~nC5(UVz_{oc*C+G+;TKMpJ}a&ZM6X3zHV=1(sHK@z&n!+E3Anak zdOzA~P7<{Rdao$pBRswsW~&oB)Ia-E(sA#-z9hNDDB*VE*X6^z-O2IaD=eV@=F?*hthy$wY&QW=v`D^LS$2KLY zEpcGne9uuFR(&Ub98kHV$W$al43P0w9V0Z2$j1g>?sO^9Nu4VT?ZO2o^2^@M1xF88D~#VHvnt0U z*tb-1)oOjNbc}AC%EHM$ByZhE)Sj<4;l(PGRdIpIyGZ}blB$>6jcC^#8ZtkcXfbCV zda2py54)q+c$G^uoKVv(?=|7>yD(6D(=hExi~#6W*^7Hm0ZBGlHPzFOeAg?Bvum~R z>|wb@w1Cvgxp{-M3;dkrMS$`WEPPmuA@Y(J6`}uV{D;`h6W(ENF5q;=D?D)E!QCr^ z5BU{3_A@3sqr#B)=Mod50XfRfXvtHvmGgpu?~tE36LDDQG4^ff5r@l!IN7p1lM|=! zUtVs8UzXo)FZ3=T9_($xJ9gf;2P!oB z0fjuTK)~?_9&+dvc5uYO`dih_KG}c{ez&os>_QGe(SR@8hG^{lpCMa|j`k4@f8>px zVtd5i@2Ln@xJ@lIDV#R$M#Ea!v%!F7UJNfZv0AJGj!R)SSCXtCl{v9WJCu<4 zNQk?vN@(<3dWwgH!at>nqnoMK7&Tm@Kdc1O(kL9hHAE{=XWV*n9JqO+bUHfQJwc70 zvvLwF)3Wv1&L3+rUMu+aa!BF!GPXA>f*IVzpb;sFW=56879|8Kn&s6Jx`QHDpw(~= zB@ry4cvk2t zef1tkV#iiII#yjFfL~?nu)Jg#NNsQa0p;_TxXnIAD^Vd9qxCjQ>9u>6yl+U2( zoSI7y5Af{S{)>ZcUM<^}p>#?eEALXuzQ^b8;qY24J8T#m_6}O>)iB3P^vByx(m#29 zN&DuJnU+zc_zl|jkIsJ!G6WckWgb};btG?jFqN>S8|7sF~E;S|*y>YPGL?w*7WoI%Ze`&A_J6qX@*EXqNoipAu zha`%bTyAHSG&m>)TWuQKb-IIf=%;oRprhh}VRNEF|7c;ld@-tS=?dOlYVo4j;Mc^6 zwKjHXs-D^99Lov_+*oxxu_?PTg`nLz^5S+#2hh<0JVOrp;TxN#&%yvSShV#ZjjyJTpMZ;&Zk4qMt=!JKL7V*wWk4NS0JUX@u#g>bIXA68OO?pR1;dq|Hmy2| zdYrAmrsmze9tCT?)hJfXv>3b>yy2W;In49IE^Pg`w20%Ke5PaZ_NeN+VUWoEXAb3? zr|N(;+i5n%N7*^p#MBvODmBoHLizJy50bMH``s<!(lB=hM9>d=@eT!To6~TM2~=-yF(cr;v11a13J7dG1D`S|=MisS2V@1&pu+CFe z(D7_mSdH-GTMNy-wqNreGH_!A3>7e`{0_QTx~YEW%+^miHnvL==FgU{f&@o@2#4=) zJ%9O)7ki4ana%PeTOh4AYs*Z=RJ4ltGqg7^vgrXPBDVOk|3JI8!*?d}W%vx|_P5-D zZSSG}s|^d6iJ{b%NmOz7GNHDF=tZdUpe+?-H!>Ehd-VS~Cuz7h{QZhMY$I!>ekQhB zBl4v6=6rt{Fs5ESnsfR*I#HtL#o5`%^srBF{jn(fJC|a=s+KeVnZ?{ePYQV!9RM?6 z)t*x^g5Xi$68EBTb5s>~XA79u%HPe~aIxkI7T=6Gl&KpLjYFu~#D)hj*sVL_y2V(< zz1f7wKx-a@48;CY`C}Oyn_d)%M|`x*2H#?7cAxD{@Z6(*>2?RLJ?_YyPigMO+IpZz zLpR^u&h8;vMhZv4Ut41Z1l=ZlAU4|JFo<;C8m4G3nZ_!M6=tOiPicU zF5u~ROld5j2z2bcR;1K+=Wvzi3F{)j7XAL_ha@1RJgjwwm|wg&{FVKNE?WdhRzH7B z!lJkyUu=DvzMm+!?P&HZyzA=QdX+-?NBCV#1hYCuNb%m)caJ|^k|&z8?y+4T(z4IG zqeCR5wSU)9cxPGt3y50S7R#7qDDHDnL+-#WYdVcG*$}PWXTte4Egx#?iG=_Ltt|d@ z(4RD`S$U_CoY?(9vee>nbrbTI6=YP-tK%d8YOQt@Y_u>w)Gp0^wh=yF_bBI}g~gOW912Kkcu(KYmx1$H?!= zKKc7pDRcqJd1c}~% zlw?_~TWVhPIkb#iL{2m4Kf77%Vveo^+#;Uy!?*cF0iJ(%3?ttbYTr@P6FpoPdUkT7 zfrv*I^T(t>{v)USi!(1=@)QYK{ASB=HXp+y=LAk0wKtZ$A0shob+28YPQME%jz0x! zdAQtuaR6TnlKcMkWYoLib4zE;N4<5}{8V3m``l%Q;Q80RTq35Bk7ja)ZgZ;(`-1;F ztYlL>TJG6z1f8+~F;0`a<>&<(3T^?W&uYW1cQk);S)D5eoA0=qupkTs_aCtZ23%3! z9>RB4C+$9cXBrB$86OuAzaO;zn{V<8o51p|XMjYP?&oeF5%kNa2`4@mDf3^QH?~hX} z@g1?Xg=+I%D$_6>EK1X1l$?&z)anj3DLPpRR1vS%#ufxuLxQH+0yF*9&dh?EL%$S= zTSRaJfu0j4bEZe`iuM@yIRy&hV{)5<#tU0ki$7o2E1fwf|xOvT9V7w;t&LI+!xhG znuC2Y+@%xW@p{VJqh_k=KlI0>Z4Z9@rmwYgN2*<`eC_m%7hv*A>ts2-)9= z4-(`^Yg`;gI%;|ke$`kNAct>-Z7BuQpA9Vl+=R#TGyote@qa(~CEv5oxgl`g2*eH5 zE6@;<`>Hv1`!Q>|1zLabprgEXe>rjUuE(x-|HZt$xSuzlr=fL0MgmbjJClKd9!2i0 z*A0V81jL8#Vn?NgbnoQuAikzNJBtk|u$~(XFJ$p#SvTEGr;@*s4}OgGdgF0{lAhlR0|?jioqx^Ad2k?(Yg>`)a{_3-FUpq_Ix7m!IV`QujeNkN^F2+6lXmry(DQ$PCIY`5 zd7yNv2B~@G5udq;9A|g=eAd2|sA|B<*pTZ$#u7>y!1|jci!FcZ7$+% znkHF(}hI8Lz3r$4Fif48&>ns8q0E9>+dhKV)L91UvhZR_|MrxR`Ngd^26^!fO|CD)EMaMLds%PMyA4d z>=eS(kS#+_s=mySruFU{0mJ?rrPJ#3;~IRJYIR0Ere`t6rA^CHOq!3tzFU7G_6hqEs2!!aVHLBD%$|FY68_M9GKC<+$ZBI?A2j|Utb!g-n%h&FPgRvxK`r%M?%vm z{K8f+MNBWecWbXZL5%qByyyg?wq+xC-m5r9*D^7@M7si@nE?P%bH%S5Qf=Hf&9^I? z#{LG_a}wc)_;I+TJO-tWfJbPAZ14z-m?%KdoM+u$) z6JMNJLLY2ITNImj7n>Jd$W03eZWsUr>q7wSW@Y>Q&7sVI`>w@7Ce~FN8W9^=`v3U_i<5Y&r(aaF5`^NbI=M5x<*GX=vvko?;*B)QICv4Vf zBp)yOz({gdi1j0y}A}6R4gakwpc)54H_*f9o-L?p$`_m^v0UB{g%AaX`;<=&T-FmR0 zZ$-Wjc>X}{8g8~Q=yHKt;Bj`YzDu5YC0`HT`Y}QQl?3nzfkd(zxive2x%Z!#VRI=q z_S?)-y;3W!#0luo_213g^3E&N0H10J9Qmi}X6f&qXpx!m-vz6VDH*MAThxM+S~fja zMGk#TPwwGMNJYs>l2##y`pg2~?Up?Kl#pm%sg0XP8HrRs`C zFq;2Iq&KbFeVMqx=hFi4zw9g#o_aaEO)g=jAh+!BfS(}R@pIIvQ0jKERmExyzida| z8zNLB;ijRF$JG|Akd5ae!L#S7eL}a6-k+*Fgdrfz+IQk7QC7*f9@=e{K0T4wIyOpdbw%Prh0&M7x3G+YCT5s zYj^>@Jykm~bZh7lB@I^oycZ}8UeFdY_ieWEYWOW-S-Oa#&n6h#O2t8Kp`(SRnfsHY#OZ^(*g^3ke{AzO{12Ed-YoyI1Dbhn!Lxec*Gb z?L_kUlCfdK-1VLSkkf!peF!Nx*|Q@7qT1w~jocTl=fmrQ3SL6Zy~9;5`hgK{eP7O# z9eB0wdJk!*AIyQ3nV%#A))3a1=MvbRLWcqn2}>)hH2d_~hBHDi#^^qozAev4_t%gB z`eYo))b}Mz+bwGgge`u1JMsOd{jwOqfDbxp6TTP+$!bO4`T8UOYJ7QBviM!?A+(3q z&aGY#->x|Jp`A;)uO)7n=D$38ddkHlK_z@X{?X;ijk#X26&sD1v{)%{O&1V4`NMve zLRvzA@XGjO7YoR9jbX)0IXo_;?+9zc&D1nT(NfO7_7eDj#A0MmKJOH!0T0^1;K?oA zdq3Rr_;Er0mm=|9^T&lZW0y`uXnkXdv0H!tVY_sOXQbisZ(WTc5tuxYzjI~To^<8z zn~>T7RA|#EQk1KhCpR}>`MgCbG;f18G*PPoyq@`gKQB+I`{U!7P1}g;Z2v5$15jFq z&BocJ&HfD;a8(TsSFjgoIVPWS1j^m}tq?qC3$=AXcZ+BxS}zUd*32BfKgheHHC|W# z{$zj-ZM{>ZN#Hu$ljYF-O*2mWps6KsJ;diFi2D-+r$GFNSB7>GoC&SZXF9HcAj@bg z0KfdPTiU|L33|raNj`}r1mj)1JALuiBfaRraO6gHU~Oh;z;@f#s=%M{Qq@y&SK0W51=ygDi|Q83oq6cP$JbU^qFNc-IK9$M7m> zt1(UUrb4QjL%cyPyy#fW{f(T^tKIm!xoNtfZ1c??WLze+!Oxgi2C_2s)-+ESvd3Li zlsj-WwLD=p6i^Z;uL(4mVg_FE_*NB(SdI0`<~l8aS`J~^UyZM|oEd=Jj6=a~@L`XS zE4(}QQIlJBG|%G{Rh-RO^DS5Zs#UIra2g0UKVPqRx!9H-3OGPOC>iZDjC|l8U&W~*Zh4&R(N_&$Pf>6)RR44~E+5SwXgw<_tWj>!TK>!dNj(PwS z9MlN`dcl{GDEA=h%t-N@p$Y3V_eRBZMR~Xc<@>h9hE4rB*5|#lNM=*HS#f^k8NX4y{?VlQu@FF>oOJu!6}RtpD8gg!dkjbz&X+X)e-*If4pXsu@*JtEIrG zTRP)Py;fe8A`z2|`yLkMI)~|&p8Ng$iBRiq74Z0n5QBcZS-yPV{+vt0Va7nv-9CgJ z3iio;U+%UmFJ$yy$2N|O1~y;Sj5+}u#uy{~`u!<6^g$3#RZj~K*)iH10+@O)EVit9Lj)q)KLUF8 z=Yc|YN^C_0;|RvCz!~V$-rBM$myZy#EK&UdMYTa;pHY`1JW@B%5ykb)_>>cLgu5umT1~Q8<6XGG3)|Fyta~q zA-`wJIS568+Zy2kqrc9HOY>VuKA~GS5x2bY#4g=njDGUK>)$N;)0h?zJgHU?p)bGBXmY3Q>*?qP8G?JD%1%0V!dHwu z5fXRh65u~QC4FBeEA7ZwS6vUXI`F$KTrD^BX=HsBZ3J}*bY0eqC0K7)`_s$0KSG8c}PL)>!+gx z^{$T%1H|;O_3I4+2wUIl9-m3i{b* zZi0(DbnW!p^mT;Q5C)q3zoqZ)u1bSSwPrqNAMgX_*C#f#-N^+wl-Ji6&mcvAzo*@1 zvlb8#dcZVS#)j(PUhrZAN*pLg6a52F6D&x$wBAgS&z4c+oD)NLuH_VDy_K?U>=wBE zcxc}aRR`K&0gFSNV_5iXj=@Rr5k0Y(%Z07rfu%|afeyU!!$(OXil6ObeoK?1DpuS6_W)A(4Jp3M1AeYao~a>)c!}c|8m~X z$Gnb}0kpC4j|Wf^An!4J9XK(=E^yNSkXJT36o>6?cn!hwJpP}HO2Q8x;RjBl4vLkK z3CjGjsZ!@TUiDiZPMC#8{y(34c;2Sx@!j%N)lMwe(guSDz>Nxg-zQIkjG7FKpHnM(d=OpjiHNa8&! z@i!}~6!J@}ym`HzQS*F$`&bqL6LdMgiSR}$uudQpNa6s~jYup{=Yqce0l@C5?d}iC zT^A^3blly5+@VwS9jZ5{fE@CcS^kMzTAM)n?un~wJ_Sf2(eP*{_7J3&z9$u$46`K4LOpD%kBXF>eP*y|@x98LMiG;X`>!nXxrO0WxJArl=Np zY5_)_H6h)+_AnGku|_6-P9g0rB%xJlW9^5E_s+PI|MH0<7kmM!v^tt<=Zr2N^Nc)j zfIi*{FGWx?BWoLqy8mRRnAc5*Lv8Xt%&qi9u%3DwSzjsz49l}l<*0!K&s~BMYKlOf zV|R3JsR8<3p3^l|;Cm!KFR`fAP6elqvxf=v5id=f3n-VYR{E-P=u%#aXL}Tf`GNS?C4D7dEM?5-QeV_ov4@xf5%k0iskyxJ6f^atcNt3m{ZH#1!z?7ms}C+3dS4R6CJeI`)4t_vYbH_ix|0h-!ouQc84HvV<0+vP)UB zjj?a7Vr-Qy$r4E=OJ%8%-Czbo_I<0aLb8p0uk400j2Odneq7(*_jmtsKga#t&vF0p z{MB)E%#6?SUe5Eiy`8+g$fK+o^`xq9y{?Ugs+F{fIcCM#uW7_Sea%T#8d%X<$K zSp?Zjvh|gjV48j?Q~x6?w;Gp`@PKsd=FL)zBf1ID&8(m6`3wGb78TfiPv1nD?Uw*M z$_5>RtpEDj)zCnPejVv53itUDmXe4c;qu?qU+f=UhYr$JfKZ*A&32cU316#sqSKZOS6QO(#&4RQ-#hp6TH^^bC#cZ$5a`{eo?t=lkYs{$~jhFEKmqK{O7u@q7vAe z75Qz>j;)kUBs7uB8t2#0ZTJ0FnzDvd$vMSsmwr6(T-q7pUHSX(gH$Mjwika*p0F8? zK9#uo0$)y_>6Y$Z(p+Y|A-|<{_sb`ei;F+c+er$Ta%0?PR$Ha%vHkpgLUoft4cOF9 zg6||j3lpUxv8d8To2iuKKdvCn zIHwpuzYBl1Ea@V{_?oKh02lSzDWg;=LYf1O`pn}->R$1GJzk@4GPdDAA9$Mw5pom^Y)ecVFj|*t$y!}%5%8R?B|_*jwgJUK13Ja-CG2iKT#HV z4T;YDdt=%y(to@qOtOC=AOnI3#DR!n8P@34u~_E}*r0~So8yAKKIwmMKi!e+h;Zo- z0B2j?chYQE+Bkx*=0a1RAhcMz4APw62&C7-6QH2{=Z-@@g!asXG-t<5m?Oc8YND~0TYS8JRg0yIra~`c`mT;LohLBoO|<+ z15^cJDSeJ@DZvx``Bj}+rrU@KUZ40((-iz`lID;(cRzLvaET?Dt^to9!cz|-8|GtY z)WZ)EU)hnVOEyy$iQMtG0kBb2{zZdl%b#ZF4Kf-lr3zpYSL(<*5>86Ta}}m6rtpyR zBV5Wj+^)#@th_!Nz5z%bJJH+rwpNi;?o1TF@~*r65&KX7rP+{D!#=uXUV10F8-Sj9 zWNTR2>A-~Taco7kXc-!OcH+wL>&k`LZZGkHZoneueL;z$N}8yahE}}X>*H>X`v^d) zBQfiiIJbP-x+ZsMwusTKZj9RC?!<7#3a!1dJ;jA_Gb+&Gsv+Ci z_-#RJHmBHOZ@;^%{!1zpXCSld3#@>1xH`&!cp6^GSN-#1(7Z6()lap%Q~1(~YAO|8 zg9}TTvzS5)0)v%%QgIctuX_B|(ML#cJC-DHVd`=e8QQ%6Mn%Q^k0c&D$ZK3l2Ni?mRnY?Za35#~dyIZ2XBY$CBH zt!}v@*~FjAz9(PsWyvC2M~+tf^OY{Fma6VHHQj^Qd;KTZoQ)!(cGZqUv_WFndqOY2 zr`;Iq{&|vHyiz;>qiPXsqFWy~a6*G=L{ZSu{Uwu}ADD2*@Q7)1&OS+tsQI6@ZsT9? zHdnu5JKW~SyLd^g)X43^lChz3^yKLx`|V!ro^md7lvyKPRA-2$YA~v7x`j}!(tq#z zV$z6>?E=G3f0+*aK%K1Ek-8dUEnK3cSi2LPNH>1 z&Y}v7oEHj`N8CZS^a+34Iv1egZS(gs%Mur|RP>{^4gUBCvBTKBhV+>UhS`2pzDaKX zbuOIgPE4^)v!d4m&4oU*(0-OA!os471*rgEHnMV#SpV*Lk4@4ES?!=?o1eWOtHehq zSJ5r_FNsaI*0PB6s&7*@2q**{-K^3{Voc!b5wYz?hxud(H{j}Bc5yCMXnQC~PAwAJ zE@ZmC{ieli!geG*Vwd?Gvr2Jt9QB^=!xAyap>OolKpnz18CroZG*7_>7m7{wg_%^!&-vS?)Lb5!twJUc2H4;je%fy z&nQEWYlu%-P{NqYz>k-A3e4pv&GKr)uJ7Y|PC2Pnli)}`g1*r)=^(Imw9C@fBYxGZ z&*4N#80tInRE?x?L;TM5(a!^m+=JNpu6tNX;!NI5zY%}D4;vr|Wj1p{dE;)-@yw}s zb(annHi0sO?rWBuEk;GSwnv9kC<+)|&JHfjkF?ubE11JNuQ*8i<=iuy-(BcH6DeM* zY_^jJ_{MI-eCoxY|lD`GADCt>OP!|3o|CutAvn$8uVT}lrtrLdVYWUEm+Qtk5YXWN|QgL@4Bf36Q z|AXiVtZAn^^N4l?(e=d)<+7{S>9f76+T5L!nbJB~5S&;kq1)dr7+|41@hG|sgsJ-k zKZ@DM9g`q3hC#Y#rJ59l(}3Hzvws^uZKDFIbX_Z3}C$IIarSKW0K zre{J)Ja_)awb`oAdNJ=ESIkZvSYQ3jC3U}J0Jf4OcX4RopSGv)Xy#a%=7K#x?%eU{Mi1!e+q5~sNDV7btMa837Wby(~KDgC1y>)>`CQzk%e~hhj zhk+hd2&#z0u^BUxyhC1vhOSA3;Yn=UFL-t$vII+P;XDJl@_FkI_VtrxY0WQVFhY2_SesQP5* zSR{$AoD|hBFKM8?o$8x0$FK+qei?05P!$5HvIJ)=%ex$`-E&Gy$hd~4jLMfr#dn!d_~PVJPh2VmYN@|jKvOWx{`dq zG(qJx7l`t;5nMBtPZl^NsMEY6gHImU$Jo>}ANzjiP6ELml-YTJ0XJH`ib47AF1;wLY(7EvBrl^4zmovaQHQdC%- zOm)!{RXjlwdojd@j-VXEl!wI0I^SC{s7-LIGk&31+Gxz+3^g?fy3 z`UBb5i9U)!Bt?o_uHB;tb4yACrscz*-HkboH8FkmB!gl>Ew5Ybxbv33d272w^XYe@^=(y{p{Y?p18NTttkhKJ1^d z6a0;VQGXnUq5U%EU400eBE_1KbotS7`vo@H7U|ityGyC=Rm`Ms^0Rp#28#WzwKwZW z;Vf%Zs4Kx{Ez(JL^UK)<-xk&aZ`CW9dbi2?ZE2_0fHP~3hUat~|N7R&C1vvA#Uo?6 z{u}EKW74@R@eqT@cvCLor}BM;-K-=>=;m>&+sz+j5X`gYWq5}Fk_}B$%)hNHW&!W7 zHE{vD!+B)l%rIH~AGrxnS-I;qW_&YD1cB|_iEWm10>>n-{Hwf@o9vrX0zvbIxjz=) z&i{B}MN1EURnqB581v%MQ}}(!%Sri;d;j<+9`^w^!h~A?jQ7k?RmC}1$Xf|LIZFGv zO{ll~N{iO~P}N|8fN`s$R!iS9CEoPPZd29fd(jnlTeaihCE~yz@j$(-OBV^Utrnyi|=o z`|RuWQg+?hHSXLnAD7erp{8f>gMWdtkjbaHKN?FHyPtsGi=l+o=xb7MO%J;tyy1EBV+ee1JN@AHBr~C8@#!`L-WpjD{ z-K=a8QsG|=@JR8Pgd6_I+IzcD-&2k`9=?6~6vQwdG&rjwD=<{Tsei!4$wM1u_ zFWYYwN0{W_Nh{!#Dy>D7H;z4d*YZUCR36<5|^Q5P%QPqwl();tZP7nMBLLHkviIlK3V?6wQE-|^gU%WyK?LK zS)z_D)mW6ezt-Kbi_bBy`6SCYZ5nOeXr9XE^&Z&J^tZyW6MW@9V1L=c?;SLw-OcBa zwz+%CT1HwQlzrCJI>5QCG8>*EP~>cn=bwMVS-%$#^2~F?f3Xnw{y${*zl?1~KK?(2 z&=zdQ(gt?#P-t<3Ldg=EQr+UaKh)!Zvp_qve*`FXx0CUMFot`PZbDI)oo`LuzP0i; zKii^S!n|QoAl3H93Hib~DbLv>(Xaq|dLYTWEC!LyaRuL>2RZ@b+K9HCZ8$A48~jWn z=l3H%>PNM#o>4Aw^LV_x`4ge54JhT2RlnaNjM;t<`ubP2EF*-=(-7jFbmDgQ=b-o= zBEPp#{DIwK!`GiMxcuFjxX~-{76(@bTs_U0*0Z+$xrfsb3|%GMoh|3g zu*qDXhJO(PG=Aw{mb@2vd^MY%?CX$-{Gb8$mRu`FH>Tv%?6CE6@xoZ($DAbas`O>h z0rFyDxol|1Cb`srajRqG_Q`8Li=Y#IXZCM?(+mK@_Q^njKNo%T7qS{KNfhG7U-Ao$ z^VFo!i8BAC>LeCz2Bq3#r=X(-B;$%^+16Am{uv2U)n4~o`>i2AotcVg!ggY`pM+=p znErEl30x>WVdsYI5s3#NVm$|4D|cs$9cD6?OYV&|mN~wlwk!|(yMn7F-`c(HG94QB zZA8FuH83Jr)*&e~)v?pdDzJc61?6 zHP{sXTJvkdkpUyaUzFboiPTWEoi0N0ZW%7l!U0R zm_wZpGfk+kbfm=4MZ*1Z`tTKUJgD>OeU7>8V#gf;*Oa|l%OVfA__xA{N3+9X+ zabUvWI&kJAx~8Kh@!`TVfH8dO(2@5kZ>;EB7CV{$(sGi3jr2XJd3u!?vp;Z$OZd>X z?@nC{%rP@8w4i*?%c05q3y3W-=lTVD)X`{H&d;ZHzJf)Gr`(4I9Ii7gJ_p?08yyxJ6SPTo`rD7?B?PsqytCb zl>|_A02H?SX6qVqPIK^_<5!KWK-1vY!xQe==ED<%m8WoZf$SiqnJ*Iw^j~SR4WtZU z9T!S!m;k&u+CjhRrkju0!TRAvJAoFt&g24btp~NQ6EEwG11Q8e5=TCef*e(h0TFXdjmkK<1bTipymtQcYqSf5&GPh~8_uKk!7fQ0 zRMY-TL{C*_OSsaieTnpvB0yUP-V=JTxtX+{{@|EO zGv3>PP!rDlf@W%;v9Igz2(6mxPGLLtMh^!Zn%dcw>|8hx0;OI+lBYR-YI;zO%&Q-k zElqWN=2l+2vwXl8*3B* zLiw+%xo4ST{^%BA19!CU_jdcSKO^dL!TFj{9mACJq{YmN`}dWN!$<7=FElj{n! zJ;yP>aL$MB1WZywkyCGbr`1@7C$-NLae=H`;au+5?>J!wuhh9cO{*-B$C(E9!CsIU zIlwseZ~!M+&J0_6?c8$-@*TDdh4yXrt8}U(BJ4gmas&t8^8~9wA3#fvz$WAagvaif zpLsQF%Mso$4udh0#5h}AjrbSDN=Tk>02|UgYDI4Ou;PO>CzN?lWjfMC^aB1sT{ZHU z9~$J~IXnwZWg0f<&B^#1fKnz%&BNyTk8Z1C_KfKt6A*n}&6ctDkIxMp?a-5N7PMru z%Z$*o>ML<|MUZ<=_ob5xz^+J1qxLV*z~j?*;P$&wJYjk*N`pNRH{JdIhQ>j}`*l^q zdTLxN*l%gHo!MGs$dWvh+Y$k0m>$v{P;xxWA=fO<4a$!W{k*I!>^@CtAerP$2OjA> zIa86DB%d~uOkJFv^vP71!4r2Rsqa{WMs2`TPCvfjn{~HJ_eJkk@39iHFsgmY+VHh; zd}@NebuNf1zgag$CKwW?E_8Y6D%Vf0)%^L+=@s_6#&K0Xr8*JX$aIEjOCYNv^J&rz zD9iSY^Osj)n;N4f6l+vQR@h}-0d^Wnxg1*gZ10H&HS4QcwtBsu+|_^NU1>2Ry016{ zYa|w4@eAsFz7itj4(5izgJ8ahe5G6yFb^vD;W!2F{E2O{V1HOxyBN0&izcP4 zl`yd%061IjlgsExR@>IXqp)W#ggy#lNkGJWkapXFbKl8d_;apvE2?QhPpnz|Y`u@ZbUx^+-Cxh++rqVi8L<+1aUg+t$v^mz_qaFe6WJ}Ilo zmAWi1fE0ZETK58c3#wLYKlgAsQ?c389!w9RlnF6q=HlxLkv?0^iK%UT|3T?Ea6yB% zD;gIcPH-eR9zxA`!T_16_F~`BV$||NC}|tf+;4;F)gry?~hf z;8hY@{rY&v-ayJpAQ;NJ!Frerqjku&hB@B8Q2y;zcR99OOd3JI*Hn52m%(uf;B?8q z!S7p&A3%cl8xi*`UwK@;zUtV*W1^_svjAR5YPfwzZ24w<+oJ@bts;l| zdHSqY1-%A#r}3^=(7&E-DJ|T6RDG+M`QoztsyC=DJg~+8K)~a-BCJC_~6=?kqr2 z4Z3@2CHUU*Oey{Km7+U-TUt90g8@)V73b2}1myU4oIeP|%5!Y8%v1aZBgD0BUOSxP zKu^KLX|mSUh{9(QS4^>oKJ&(BgdfO>r+AZgq}bjW9531`r{5Vs+V_d)Vi4tI#eB7o zr*kCP_U=N^4*99H*MVN<>+>7yE#Ks3PMWe^xc%*&aM4Zs$mjNw#8s`iDzC1O8jGT4SYkMMo7awx_Iy6%_QI#QGp%)lVLjrddo*_SkwfGw z&EciYDte#9C=FJ)o5+3~LE>}zM4}vxWZG7x@QExi-T{%BuETzZZ}Is>-5Lu2(Y}WU zx(V2%uAdp=?$1zUR5*p_N^sF+3TqnvH4}8>F8z_LNtGzO6hG~@KwEJfDNRHV)dkCF zjW9YSP+;lYGvvXDiDLHVf|^Z6vmsenv`ozW(C3}RTC%DR<)#k9hy~=6UZvw^AR$H- z_sO~^py-q|89u&&rLUP&H|}x-my47aH*m|(p7Ij%1As=Da9=E`b@`HNF!}e<+wmmyubP%AGe)=O;E9vHiR+6ex_?{O zJk7WPJ2^Rze_t9RQud>o2)($|%DL2x89fDYSwI|_2F!trdWQcMPHRpAQ()JuFhMh9 zi6Nbey~3>IWx**==}lTjRf=>-FUr~Y`MRZiKcD^(CNFt}#G=E-CmM;BG?z=1+##nw z$f>AC%uIZRo9F#AGsMR)m?2}3ly;%@FsPum*d#)IxVojz;nu(2s!tlJ5c-ny%wLNpVW>fPp6Ow* zeK(;co_ATy7Ix@KC3XC!JQnRt(Odm=xyW;hd+Tmf8)Fr{5)+Z|8`J9!!aF+8i1u`* zBs0*vH1F=K=RB&Q-&vcMQeWOBwo5|Wtt*GncYys`<83X&v#QXH8|*+=b!7SoC|qW% z%hXB;JT#^e%CTE($w^ctRQAGP42ovGmn-J1`=mh}sO=o@o%fi=o~zYxkA#-N;0)mC z9!T%ReCy3$$^b*4XQG6229=hIRCNYNG|<8ToK_!Pk&qVu<#6d#SWHIpNNSN9t}ngX z45ySS;)ePgEBu1K7jsr+iJh_7p$`IrWY!848TYF2rq8O z(has`sVlsA{^Jcvx3w(OL?u;KoiJUK8gNlH0*6V#5XO%0WNqi8hZuFVW3dt>AJ9@N zW|^IK40P=b&lIy=V0N4(8qT~Tyw1Qf2YC-ou1bg+*GfG2=3$F{9e3sEIstdxj3TVN zC3ZEu3JQ8MU3>V1V5&tCj(i~j@0WhIE$^GMw^XHp-%PQIVYQ!xwc4;*pJZqv5j2L%n<5-NzEkIjK0ikOJM3*miZzukjtd^ewl4O;Ul-Wazbr>FVZROwZSR|IW! z^8V@-O@|Bu7Rz58R+KY6ynyLR_q&#OsM$Z};m)Ps-e49QNZK!O>R4Km zam$<4_{$9GDVnxUj9voPEv+mqB`SReh+(5WnHMrv_ldC>)x3`+zps{P2s;0C^{f`j zqrqLNfp%GJ14WkE|2Xh3b{|qRR#_5#`pVn~!lT=Tj~BmYc}f_E;r{g$SGNeS%!lE3 z&J2`X4g+RMz8nQb8m%U9WcwKDC2qaD_?s86bj=s&56p;7K?$2fYa#OB&fjnMZ&Ry;b z-kzjQJ5-t5?d3x=K50tNP>Z~G{Qr!G%$1U&ji?a`V$Co4hW576Xb40$p~nzZ_N(N) zN3-Pjn~&1>4dGmsO7BxzweDD%v6x&#p9-CeVEsJlrTZv#+^0j4;?XsHxY;d3#r$Y^ zdjDsj!G21wve{R!U3?N3al+f&TzjJJm9mK|J-qT>_3~7=W6;0BY`^3tAGnOcHGRL) zzGl}S{Na@dl1JkVba7%bZIbZgKB$Rr+MlF*eEe!h#{1gVnSpP+t9-lw751*% zcfoD>(nSBWc7@CMnlI9SK-ezh^^%_DoU$fdPh;EXrDQP-#Hbe;|3f_Y2H|!0+T;U8 zknPNwjTTWRkQfJri9GG)H*#LqK|jH}zZk^gm5mr7d@i^QlqyVkF0k=?DGa(wKFBF_ zpJ>|?-*Pbp|zLq_oIRox+XB{}K%L^`p>K}s~C2&`6GA8k(`TNR&mpH7)Fv(`iFSL_l$ph-aag;T)Vg? z-0GaQHa+l!M<`*2k?xF+HJ0n2zR*e|yLEfYsf*@%j4prU!QX36jh<$_#QBJQ1zVyf zxPm;q+lqsk;m`ssW@blz!|1VdZ}>Ns{b76|H!qxXZ@wXOLJu53+LtwcZ&cT`KdEAb zgjM?5N+fQu*aR1Us`-oRVreg^H>5cH=uCj%Tbwoe&SM<(!;fF33Y3CW!wkCVW}f{) zSlEH~yo#HiAbeeFLy57-Wv@$l4j%ojf06|H!L8;j+DFk0>|Wy~E^y%zjNWn;{sg$p zWo+&2pNSD$YlzEgS1ObS2_Q#6yE?O&azc;!Q>F)OY@+dv?n%datjbDmVI}ABtGXK^ zOKTRe1QhX5br@R%oTmV-DS$MTnYPrBxTj`Ke5O{{GU7e)SQ-Q`ISzAOZ}O z+ybdQSi5Z>G;fXJCFwuk@X_l(MtA+GeeU@^*?9IBM>NtapG?Jd8O(u0vUr}~HNU0W zdP3xAmx4Ke(Li%~VME>^$%+3iqOlCP{%Y>({(j>mKJ;8ir>u9EMcf7dDrV`;*UY(X zX89pPcLej6zjHzgpw9LEuXj8C+ zh;UIM|H9)y6Ly$Jz@soUR*|=ic;r6FI#}fq|jm% zrM_ZkN4WV?q;oNWWp4$BL-uyH_Y zu;bv2!M($@e9#~xo?*v(850D%W;}wj#)>o+BnWc-N%}Dh-5mK@!a}A+;V&zMwL1vv z34{UaouTbvTG@1~7odp4s;NC29z_C!_v7eueleyLJ(t z%$;B=SUpNd(AMHsLifHLLE@|$svt#a&^oyqJh>*Id5IMX<(DpAXEORh*Y-0!W5ld^ z*j-^v%z9d$z%&J;P!*_;nbvuG4l668_H%F_nhdujTV3#)n+_q+Y|8H4$}_G*bamum z5O4-XE&lZ4a&HDEdU|0A;3bhoH=~iX0JG);u%ym>v+Xu_AClW(<33+owE4LtH@KoniTMO$D1Rbq%fw&aQ zj30=oQwrf02nQdTyg*{Z;^aI?2Y-%|E9UaS@z)D_L?@6MS8>V#l{Jn#(Ov}p+#Ys* ztE&j`?~}{40byhp(dYz%)>`4$!0)>0T;FoC{s+->44}IvyLbLltCC zb_8*vPofYzH|d&@?hD*g_c;M`1GHT5)Jz)wFLohRtGm)v*ATBe7w?~`RU(HD+9m~W z(Rpu54h~8CEj7}%)ajWrL#CPL5n7N~5-BFUa*xl3l8LxP-ZUl%wJoz&?q7GO9@Z~B&*AlVc=JEsbvW`3@^09=nCRCld>+l)qoC1Cb#eQ!s}^$ zdpZ*eah;8Pd1{ad;Te1%onsWHJ}}*#JCCcrC>PU?71k%;5|bJ&%jz9QQ1^ChkbBRy zkTQI}J5e?VFixpIVlM*8kMKvt?@$=I)vJxpsUwshin!=>tk2JMyX&Z%)f?+R{CDi{ zZ0DOqV){%AQmZutQY?e-@qGa_(#UiY+}aV=kx5jD^&NMbe!Z7|0dqB}R`qBbu`CX* zS+(7V;JCFO+32WhpM9YJv3Bl6c;(f-Q};=C4R>WIX^|S*M)(lR$IOW|pDa6%(LCm~ zMq2IVN6#Tno*KdN`U~XXFeUCA9_Ed-AK6A#Yl#R?-6Fg=D>@9ZGoFt!IFeiCeDx+$ z>SSd8Tq>_`f#-4&bsmhR@!u?cGwbc*Qy3}f!2)X++4LvnGVNx+9F1`AHc0GX5s)*L z6qvU5&6PPba+%-y=bSBxwl}BajNAB?l0<-#%Wq%W(8J3#0CQ=8pDysG?uB=IT*CO1 zhB(FklV#%k$|Bo=*Ux_iwBLvGF##+@d~lAE@m;b*ijrSbq*QcDlo z5!#eDd9!NjifE;x_$<2hY>sz1#a&-*LgEjUxh(B`RGU|c_rM&}STHBCv$#G$hjtFU zxQDk|1lMrjaGBoKi&uv4eBdI_BV|S;xsWXf1Vs~;sf5e&MrY3~*&b;XSJW17#dN6a zD!uD|XNBv^eD>@|x)KJz>wNCZ{S}_n>2=)+flAPQlGROoCuP1T;_@j!dEnPXce3UP zvY;)dY=ZzT?s3em8dpDpt;qpu9<~}}&b7bvOj?4~bnJlrGyG1RVG_an=|3mI&StiA z7pCjQ<2}P-M6Mp+G=}A+YM*Ppe%}ke_}@7h7Ww%9l*HhFUwszEo9Ewr2CHy0*fMsf zA%9fVVXMVyivqi_!3Q%rUDdumn?XtxN_~K4s7t2m1eV;c3w5Z^!HrV_`u3;S3c57e+gg z%RjsD-1>rPiIY`PBY|i)QI=QeuT|M zC@o5f&uh5(+vmj0}ULwbORbb#@GuiwF^3^eF8u3{5OtI5Eu zRF~?Z=|tajYI%zi{fEy6=O(59g%h?GqG9S2&KS6}D1$7*_+y+2atj<{7wY@SAPf5p ztbM(3XEw0EQku{q#ALmFmA7&YtiL(h(c)6NpJyS$FUycKnBg>3Sq3c0T`ApuTTm$! zxALSFCRSnxy==i&zM(xnvdy~o-?ux7?1WC#z9KqgQB^FXN-6Jt0ixT)9iCF(C*>>E z3$~G2)=cT@KlN3Jy33lT#%^i|P6Pezg$pEA&XP?b0kS=^+=WT1PI@NyGg2)-*&iu9*n6D)GDzNC~wy&!BQh!=Kz zD05_a0cONLBm)$GRC|A(;@Yndy+^l+Pd*q8<{y|bI4>GPC$?=mmy1Of-dt0M2`{&N7#;YqjvZ~CZL{-3B_T!}Q=d*S8z= zjW`i~5?8-Mcxcq^v+BriT{d-@rVx=fXu`X<3Hlgk=!zhj(!2Y!XpIGUX`$G$5tG&4 zh6W+t|J9+?$k+bMrN`uda~1!g8CwNE;*HPYMG%X*RSfyj?*;^IKF7iGB2Ys}Xo`71 z4{KLV;ycQ24neXd5c38Qb?0U$%W~HYL;+lf6?za)k@G$$!a@5s_fzVmhQGcb@8@|) zW3RYt)_`^2ZrB~0*>@m;$^qX~7d*`;)76rY(aQ2ae^@v2tN+P!F%kO(=Egol4MF6L zVkGtw{3<@L)(-8jo>u zzD+IG@eJ4%JfV#02Qj;4=2e}4K%e)DuqIzdQeNaCbra4{zq{G(qhEqriDw)n(1+7R z`YOE(kY+Uoq!b4Z9GHs@gfx`_Ah{2329M?B+xsInRcHtSV#MSap>ydO{wE*`Xd$`! zIt+n)2%zc*&mpgq!W0HI1TF9&Ldq6cd-i@}m)BSL{TTkY zMUeuFuXr90_zb?jxmGf8FBFk}$U@XBvWQ#Nya#Dl+nB1J;u03gR2q~+yFElwmRNdV zgDg1=mvqZ=zZ3B*@tzIos*Zz2hO=jsu+H{E?YC;&7e0n7uirKLvH$(}-t9o8c-2?D5Ueh{20aC65a6EP!zFBtv9 z>vl*Np}RE|K94rFbcaO?kdZRicpPcyAx#$nII_x~drDDeLZ!;TaFr(4i9zozkS&Hs z0A=>aM>-SY-P^U0h+PJ>tDDnxb~}dMQXYhQ@Df@5Cympw4# z?SW7#D)=VX1mo8Q(UIwN)b52Ap(q~m#K>I|(XhPqlzYq!Bnf!81@I!d$6@iFePZ{K zRp921AW0ADw)|8MQh=6$XD@j{qtYe6{ zO89C(4xx4$y5M4s!`?STxbh#XWJQr6Lm1*YyP(9I<|u7t**nc2Z5vPsIjR*c5QQv1 z_9aleL(Vz%CFkX%hfE+mY$-=OUF%6naZU8xYA;C)e{f2;byaAgG~@A^hR4Adj(x2a>XQS(gR6EW-+TE`tWMhG5e5P;CVb z&1Mo+zr*$w$h$hWbGI!Pe|rYd5HGd|qSA7R1~*Sp;vA?v20G3$>fg^7L1og5W@7vg zcIrK5`b27~7 zR=zOW{D(4QBf+WI?RzD%!>Tx#?0e#MqV>7qvw>f|8%?CQ_*L5i+lg(@ER*ZM*=f9U z=t?8hyu0aHn_LH>LIA4&)!J8gsQ>%^IECZs2j`qm_vdxZ#zlM`_r=i%PuSV|+7~-r z%Tql~%nvcAD!-*#cW0{$ZrJ+wI&NflqYv^{(VP6kXCsc=Df>FmY2B(R^HEJf{K%C& z*k0(l749a8}dc>0!U)VIk9zz=$@qm74sb<2uv1PlfTRU^z=yAn{^RYlSA0OUp!z~stCkL z+qxi{)S+mbtrnIyroW7^7xxYD{Bz|vR6a=0oN_EnxG~z&cy5<4$AhsX{F~r7&-c<@ z^LB2svp6><;rfLZIx%mEPR^^tQ45E{GYi}4gAUet9#i*L^_!hO#l#08eU^#~sR0uS z>w2y*;b)sh*0C3*pPX(Ek2K3d@~%dFEc%j9{D+{A4>R8m#m=uZT`JHY-npmb{Rh3X zGfb0T9PkUGRj_skKC$V38icaZ#ssB)U7zPwE|qJVO-c>=_*biDfNkXsS%z=H@!`1U z{f@=&A3Iiln|A1W@Bh!&2jT1OM%{0k86Rh7i0i@qdycsfP<5w%qtawbjG0H9rv*p1 znXfaf&jyA)f5b{Yu6&bO;r^&McfAI`-~0DDyBgU2u$L-kaVE@wY^|3(%FRxRt9D@< zhq945uC2_P<9zv%34OrqAX9$#Nnq3@)J-dV!m^3p-VtXXay`j_h6^J1WyzzS zy7pU^0t*Vj<@f6`ITq-dc0y#-G>d%B7oP2r#JS=eWGVqP{rCU^Hd-D}Y|{i&vOnKpFDS&aubi!0syPJl|*R%kUS z=p$>;q6G1#y}Iy6RsP4P3F_;0HtIx!(d-0IhFONIoh7rNWwYR5(LT3o|4DQ&=mu+M5RRS9_5+5EU9HSGJ{GvAyhzO z%pF8xBv^{MR_&uP@X^E^>xwP}4Wr6xbYD=AmM5Jm-vFCOh485X z|4D!z3!usrnN{nz@87F;{>Uf|RmmGLcI$(X1U2qut{H8{r)SGsNouW;MX%{m8}7}n zlpq9|rRi5EfQ8sO^p?|r_YKnOvdga+hQ;E(r4*^Xef!n~vf*Y0(vWO_2*9(Ihp?AH zpB2XNM#8VRSdcpjH5BP1rjP#N&5r-4eK*J#H=|rpSAudnUR5H6$Ru6!bWXCs{r<+;RNgTjJV_7r-(dJtjBi5brV-?<#@lk1B3$p9OQHo_eA5f%Is&3biN_>j)3iT;BKL> zUo-s@+JR&!v2#f$lmm+sAd0-2F5u&cw2=AeOY;63xo|2}X*)11h-9{0;0XJ1(lY@t z;2x~}E4S|K0u4eLE0Q+r5vX9;iDeFhkw?^Kp#XI6&zQc!N2nCL(Z%Q*#$t(#47q=?8# zWLXbze*9ln3h=T2{^A#na6Q#V2Z3m*(bBd<$blf>CD~qlF(2W-kp2%O z{76P4OTc;XgMYFB{e0DfB@{+G;d-k3F6d@eyI>mT0I_HSR*Fp;Rpk(}cS1NvF*Gf= z;@B;xI4ooYU%bTSZyqER@IConabv%@SF9%>cNjNSBuR`V=}%^*^}h0{UG~UouJZLC zfb#!(RsXNQz5{9Z{~bRhA6}opfCb53L(n4%5!wG^ehE%(nW9-1AUJE3(m(HJ7od|@ z<{0ciqRd$ zq|uQbNUSh|T@dYP6D=jshW2sGO$skJslbbwh1}30z?`>P-h9Sg{R^O;vLCl^-ZX8i*`U$HYj zcOi3T35ZfS>tm_QBSF>~->=ti?=LWWG|jgX9+@X(!d6r|R4w!s+}5|Oyni>(IA+q9 za+U_ZpFu&|qiu(`7k{}h{A*o&UXI_|2X=Db=Ny)BXo$XOfe1811*u!1_bLiQ`fxh< z%X>f;w>Ryk;Rr(B_5pE9?FvE2pAu(i^8djmRi6fi0)=ncU+lb@Ui|2BU>Gb?gtcf@ z9tHxMqCTLiAJ& zUsEShyi#CdV0;gi9;oKMidc=LN{y6LxDLv0wZtODgC+d3h(jeaTZZo>%x zL)?H&{5%`TDV2w$Lw|$pXDe?_g6OhZx5}0uh%lTL4@txI>=H<)pQ95iwS$?>J0e;O z!;Hk4u(-_;I^bsRLwvmA!*HeU%RhnE^7L*k+9NmvXu#d&c>v%G;#|tb80(4v%FHPk zS@REe!~WTcsO14_Fs7ePb@q@P24zLX_vaD=)$Yn*BAFrk-a7>qd$G{9Ji?i0jR%Q= zl1PYJuVLWHe`VU0>c-1;>J(jhd*&13Tv&$Ndw_^x&-tz0cm4kH*$|*d)7uD|V{l*& zw+&$)=Ey=g4CZ;ThA$vl)$L$Sn`izI+V~Z&NH;^Wz~}lxkOU|ylo-7ZpqW@i;wJ@x zvL1qQ@uU4BOtob_rIni{{(>6FnJh@CvJ?m%^k_<8NT25aJ9rx0a^S2(h6 z0NxJCGzrK7L_RPEIfrg}1MW5GxtSELfMoCd)>CG>d-)=#Jfw}&fz|sDF+8CO4)M3$ z6Xm?dia<3p1fMM+q|O!jCgzJh?VeN?}P~iTtN=2ke^Rk6W3jN zw(i_o;0DOj1K9bO;h2}bfZYX9qu2crQKApH>~user;FMPrM{g}HEbNbYgi@`A1sjL zoDD0ICnO>F&Gr@)#BG;?#G$m?Wc9K8aRC6Ct~{E`RPSbZUyLP&JenTO8`UK?pdPjo<8t_uhD z0AxxBju|gB(4%!Co;S_T&|fmX0&gc0@ik-Su+4C!kV2V~=0kc-jnMCYd?;kU8&>_cy{@?9g2(M0Nqe%BDCx7s)$CD7(Tj_Mv{~Pea|E$}oMb ze0$uPxfOGAUdk8y^p^E?;aJkl-D!4V>OZ&D&s7s^jsU=3O~75uyrtoEWgGk-Q=0RdZcx+hWq zgPq}s{1VC3T=qVOl0h7wdVrE1WZV?bbR2nR z?;I(bWZ-NrPBKR#%m@8GSQOnPUB)D(^u>TxWN^$FeM~&*L>81#WD7Eu_muswt=2rg zM`BN!fB$BC^e8D(h)}CGL7+8-s{aPeH~!#LHE-P_dzR;uMMgFfrsPAF5|t@KJc4e( zym1eW=`J(Dnd(uO%Bs&rPM(RzZT*auNeadti4M7QD*7gBm6wv$byEDRPgEdQQ3o7x zI^MoTlLw%8mVW}rcqN%xcv3d;-YuQ8qF39VdZIFU?}*hJ+)2Uj?z}15gP}fR-4gbM zA5ON4w^B*QKgULqm!@PSIElqq*u6U|?Mq$5=3<}YPGV_^qx^+WINv<(Kix1J8|~g@4&5P(y$+VL!!Jo1H@D?dzF{^pJ7_l1YX^2 zj9WO&5iYQ9g%+9SAzb~7m*WI-H2#O#@nhGdQK#?vr z^iTxpO(j$*qOpL21yE7Cw9s3CP$H-xNbgcbr9)5cAgz4ra>d+z*a z%{58BBwu;oF`n@hDSo34_n+xuaUs!eyv#)+^*5>E(PoZy>N>M`ZqI1NQq(%))HUY| zhrU|sb*m_h11fHhIDS*LteZ=%l(sl9~4thso< z79v)VZQmH$Gk$qP0>HU5(J90hVLyOCm{d9!N7XuB>$a)5_b5b;zD#qn+8eDuUe z9rqMV?fD2ENy&pJZSQ9oclf02c{ydqYVY)kW&6e5$-E&zre3X&!1}U z_<_!%)&SOni`0R>5mm5_aLA8^V$N?KNC%}(=?waNv|tIIa@DojuA4aHQQ=YPXp*)q z4!<4Co%&j(QNL40dn|2*k4v}lBPiCs@~U*nmcyJP|Bt0_GFa)fDb{2Y2^{l?-`Dq# zgrDgLrOiOm%vAPRMo_EhniV_J#jv@CHc zoI%El6+kWCHZOB)EZe67aX3fE+ZLC)nHyxz=58Z3JRUN`DwT4AzHJW7RKL!p&eQ(T zZf0)TJqJ?^0m(bhvx^rqoYJR8w%}bWZ>Ir=v2{JcQKC1M(+DKZqk%1UiL_i`l*V#8 z^E8a`w9=ok#pF=kyg5Cx^kPJyWjshq>8~iN_Q}VX)bpp!FQ;%RxDwH3{q#`=IsMMuGzcU5fv^sUJbp zCdQmS-my0VdB_hl1J_n1!2QV-eCCm%9|PBp{{Vm^F2HYi_Z2_D zyD2x(7e!q+`ro_z|3ZHM>k$fi`G0~RWZVbDFbq+NR!qCDL;2ZNdTs2)bA-poivszw z(6*7i3>bh}Fv;8&x-kjZjGIi++3y+LWzTvO5wgDxzbSYM=tm!zY8a(OA7r$}wCFPx zCJ8o~lz;A*gx7kSZ8G8c3XTYRa2W{$1aP2{+ckDgMy2u&u(~2$k7Qv5kb89dOGmNPQz>7-Ky0bAz^tHBS za&IDmiLDp48*RGJ#jG!6bE&U~$UwP`+in~YyoHf#n1ngPVw094NV)EKwpZ9UtUhDz zVDfcA%X_0dz|i85GzpDhn>ky)dH1M@b7HCQf@5(U3U{txbJ;U^r+mC0d3&1`X)R?2 z^D`!6q7^Z|;WBgYZ*i$l6~$~E8DG$Q2xdG-*;HV~wxk1r;?ItkA_sdbpj*$rFai#8 z@3HN#*u&kWI}h>mX}fFhWIVD)3tVF>|BxtuagIqF!iKC3o%U{bKL1NsGuhE1aYImW z4tUjydOt<@>#tG0xbA?&DovFlt#m#Tc$7$10cpY^eP^7UG~FOC8*>t=rA!kCQ(kg~KHQ9*hRp$F{i z@IX@IRwd0r78aEf&8se2{Vd*m4E(MbE*6zn=Mj4pHNVPW@RG$N%{Hq9<$*9Bnm}=(xS+(8$W~jg32jaR@y0UX#$l#sUrl9l zX>^;3-@&xZCCMcF?eNiQjN5$LXRhv8!Ohq1`%l=YBs8NT=VhS2@yGY_F8B$!3M?O! zWRCduGd-GhuR)KQRwK)kWHoifOdIQ47CUQI@UHyU%3I7NQ>vwoZlhnyaym&6TTsm> zzUz2e^FcTm$pV&>1DGnL@66$Kc3j-M z*!M`EdycRnl*FG_YARJNr%o(wi{CT+9s8yoq7<{T8!_ple9kFsht6$CYD?_+D$*OM zwjqAWnV_Jr@~bWF{_rZxGG9yU)}U5vdxkK3P9arsQPsjaTcUqxlS1R}&W4lA<#XxQ zdpq=X=Ez-`azwAU6oeDvobyb1-E_b0t;{-dp8Mec8vwZg8J8}syIy@ThxmAB@boVP z0K^nTb(w%wLZoCDESv{Gg_&hsz`Gv%z4HzX5Rq^$3q&Jei>~J!0rb*+{O?Ub4uITm zKy3J%yma>s915+{B#>e_7g!3e?|WjpntK({4zDev-(=upIznyB?guZAxvbXS{L7)C zy(nHDAgNau1UZo*0)SuQ-iQ$pf77o3)VvYER)Wa^|QpcPxE(5r0svZ z3_v^I{{>VYKILCYa6~WrpDzj4&(Wm|@o0s3o6sU{e5cxyCUw_b`w5*UD zs1$IK(dFBOCVKK>+Gk8hTq4WV%l;LsG=dHC-^#PD?M1q{-%L|&&8T3M&IQ&}Zh)LX zKFeQm8PRRq3+;ageEwhK3;tI%=D&JpymN%vG1QEb#p6ZZv33ACyDZXOCSd+u2+cts zY%Y*_XAF;qEYQV}{s^&q5C-Xbz$K#@U6NmiTNLl17`SO*9~C2_AZ&ugTtz>$xqd?D z*8_>Dnc$D%i3DPhCUJ0m4vo1GkKKG607FFB0Gu>#{rMD%4;Ml4*9*VV8p*f;M{j^t<}#Fju~Sp96mbA1^s>+O?cH7LoX22Brc6L{g*B@^ zI(ZR6aKRc$S%CNF;J32S?E=_$7XbSR7e&kl4|*Cf!(f2Z412R9auGtQhKp-615D*u z>($!tLuZumkA>a2#!_$lPz%E(g4+o#Je}x@Uc2JHa?z zlB6=Qy(k7v64=EZZIGi$pLt8RDyRPCw%Lps6v$Vx2D6D0>dkv}qlf5hz|_hGSvDbk z*dh?Od*JfhA#3E>IN!;1s+%1+fl>YBetq2o4?S%H=(mg#gE7ICNK&I^SXupF$!c_Ao~sEX~>b(MClrUHP^Hz zoO8CuabnqiV>k$vj9}t3-<*I9tk+#jvej#4UHebdVeT*u3QVus-3Mm@Y?_rj;PJGh zv~AT<_aU$os*3z!2ID#aX^agVeu&H_4YySNmXV~-@rkU53CHpG+6k59UkDGp6ZCBhty=swRkMWZVg!8pv8lpTPxPZeL zPE1Uo_!F{a`tyycT5;5-P%=My(5U4sr@AyZOacd`7%o|fQZxRdhwI~CFpL|kY2xRC z*<%Bv<;o5zW=tNY7IUQ+QF2R%)L7J5ZIp(EdN>JZVvtErhyPjly#l4A150rKHQjy>@9sR!#a+l#OMn-fivc8qiBVJhoe;cJHW>!*4+)k2oYck zc$ZusQ5~ZABrLVWx`ajF!&QHK8%^K`Uk~5gei+SqqCpwW!@L6qLnqdrd}lch*J>m{ zM94S$TH>`Q_RyGR2lJq+d2ErE^1?MAfS zbb+TebLkkUC4)jjVTInEp+errOeV6j9?>TVq<;!N8!wuwrmj<^xW|=m>v?`L6-PSH zgjCu}XMo{R;`ww()|A(;hI9{WBp6c4s-ptfG{X`oTd-2t%X-D<@pc{0gs`%2I#uCD z)7RLPwUq;6orI5SfMjjJ=5+idK{yec+@cY@+rv(e^_=y+^Kq>u#NeZwi9sX|>f^LL z%jh$?5OCpobqm%YnCdr~zt`Cs1j|?G&(n@>;NSP=m6$4qDRH)SIuNF#1%9}XX}~x| z17dQX&jyY)a3~xY3a*Y2xNp+&;3^acKssk(YdA$u5U`r`O%pSbGVG15@q(Q*{t~yn zlFA-_do?`anC9#F=M3W5vXpNI$;w}@1ji?f>66n8xY!{r_eGx89{cfNnMYlEMr{qA z(e{c{tKi+UTIPd|2i@1#z_=7|!=lLuy^B|#=#2+k;5vS!rH?K6n`rGhllJ*B-&Req zJuF1pXNM1=iRpdfBo*t2p!C@***64Z`%&Jyt<4XOo{#s(LZhGU6mNU_AP};oT{$Sc zn_D;S^F14Hnd}-&-d`wSTy^^RgLJ(Stw5&a8L4e>0p|$utcM#PrhZ&R)|+hi^~E3> zlI?5s0u_eH?pDejNHWiMv7=D~n+{aklKr&Z6Ty(XLd{-EFlNH8Y$b7%wJBggiF@B_ z#Hm>mZ@d+PeTQ?bTpx!Z-5=h%-528sI80+)z3entT3>CCc5?J~(ZW7U96#*}oe&!r zwpHiy#V--a=dGk%*0lCUUu>Q3>Gs0U@KT0)1JP|} zI%&T-DsR*5v6f}T#N_M;w6D6w7Y3f4c8reEl3WwA=dFP|2sw=|8^Sx~KMJ}k z!Hs^S6%VrthMuCWzvV7sHR}g^?W(x0z6-j$s}Ow<*QHIr@veOe>s9HI3;)0TIpeW$ zkz*td`gnxbQP#1m>KomJ+POwI-%twH0zEA{)CX4Kc&%zqWpnY&t)(JSwA8d(HFbOMutHWi(4JiU_Jyn;iRlsw zsWGjOlci-_+pSG0IbEA-lsGw`vpDm1jlB55t~vLDOJB(tyr1DQw|(Rdz|xE_T(~V{ zUhaM8yCKmw-84bb0LEo2UEWncg&r(mqJnvg_enS#_4~G`YSD)76}t~BPQkyf`m(DV z7Pou&VXtYS{Ug7u z*U8jdKyGPdR<=?oQjb$#*UvME+ch1e`NGUUo1RdOHG*0HmtX@0)EngB1m!EV z2v`&495kYcCUrIXgb7(q-S1F2*J_SsZxclYIt;3=4D90B>I}Rd`+y>y1Sd!{rTTC^ zi#XTUF@1A`|0s}QQgmU}WQf=h+$9`;@3?-afV~<`wDHe<8e@m6FeLBrHkK~dv>#KUx~tLt$$4=mBUj6 z)v0a9@Cy0;EqGFPF@69yxU2BUD>d|;gYvPvvdbo<_9dM2^Pf3;l0NtG+_D`yUZVD) z?BdV?y!)dy#M@-pxt+WNjTz+M{`IT!I-V>JbT2MMZCLwm`Z8|j%ds{4r?G=wCK9gB zz_59VpSf1HhE!583P@Mx@QZLrH-6(*7weR?6noij;8(DwiIwMTv8+riQ$fz4U)}m* z$DsYJgQE4)=1KWTc9YNc&_k3Do6GawPsUy?t2pU*Tl1h~YfXjphryB+LmxqOYz7SL z*$aYnjsq*xEVFewU3AicEUfm(oXs-z#M*xJf_TyI3RCl?5?>C;K6iQ(P!R{*%=heN zVkTRR=HCR)8lbDnz#=SXFSODs=c%=$Fzo3Mk|5p8fikrsT?X>A={Z4RuUYge1`Hc# zA&jh)OOMfeRsA`0w^03FQz^87GFmgO7k86-^{Nn>3RE8^7<(a zdaN4rxyI(#WUOndg;BSxzukC|C+%${)hD(@1x=P1_~a*XGdqg*gt?6j<(6bGl#E$T z`KQr58fzD6=E|lYJaL(Q#sis7bnYT_Eg0grrrVzFYjar$D7CtBv%vZN*Yw5W15NpR zcBDC-4U}viZT!_lO1Z|lzB2HIb$~3ox86r@-py#b<8*^>zgYcX^e;k|QC@ZBe0A5_ z;Ps}!Jvso+lpe&C3j@$l_0np%M#vanpR)tb|3X}+guuyQgEMW& z0vk9$Gtdeaz_6po?Ln$%#SrQzU`<=@@WGP70b#3(W)~5ba&*uOTg#LM>@g>6HMdRmR5mV^%3Y-$ODC10GJi6 z8@`>q66+4rB;|17!UOSx?NV4Cn{5giFVR>w6ZpUqS3bYxST$NOnE~V>9I@t7?rH3H zfuSJco+DFe6uO6Gi^xa_^^b>Ov{DASy&(txFgS=>`!#IKSV`Qs`}0fJ#F|w0D~Ui7Al&M&CI>tlT2S2v>g9&Td2uP;$Z~U>P7pQ+u zNf#c>bqiO(S8jKiMd%Y!8)|xAK{5qIJOF3{KV<_clYuG#t9W%5!+#h63`&L#Y4fzt zuYTrNPsuc=$%Xg^|W)Ddds zh8DEMB+KM&t*35Nh_{a)wvW_%z%HJT^pptKk*p%{K5HpSv%zir1B94Y;-KQtX?xDt znL;ZJvlV7(bT@)4^=e=x05HIqLvG1=Hkd#-W}4KgZPBhG`jNW|>%}y~v*mvPDH6#$ z2V_Z@BtQL$@Fh4G8d6_AAk97X0chKwF25!rp`=S75Q?u992AJ){{%zTIyZg}Y_rFo zeZ_7=6Vwnmw!9Kl1+_cQeBCMeB+hoL{(D_M0X3MC4pfw!`lfx7Sq?6)>qK91&J?#F zs8`AOjlep0zu^jCl_v;*diQ9_4Da~vYb({8ZmT6q^LKU49{Kv!$iN^< z2uJQ1xJAk}o+0L+^IK_KpnkAp{vLHF0Epz;>hXzODkNEgT8W^~svkj*{OF05jh$UtohZ;c-q`FTSf2P3{unnk zgXbq5+wIIh&Kg~Od$qzM@Yq!nt=Q^7;0aUO&EjQyQb6*@=GDY8Q;BCTeKsV#_24xj z(~8UUz6JfxZh!Fm^gW9Bb}cY&$C<%QbM6AU@aHp)LkG|aYuc9u5BZ)#HRoT71%c)+ zB=?XZZH?{apYY$Vn2$R~vQ;k5uZlu>u|%f}P9G&i7Y+GQCW+;_NjqPSO&N~Kx_&#v z8WOOm*c#31qma>i$kwmxREGH*XJ)tb$}y2}#}7?&PhBW7&Arhy-?HLq44x)lHW_E@ zLZ)wr&rc%?sI~Y)-0oHrp2ek`wj%wbl)FJhs|U=IeW?!S-*l8xO%}>)_1$!G>v|uv zxsqI({9@O}2^pWR7&68UB;c3}UaXB!;7IaV?5^N00FRxkZ*AL@wVU3aGe`dO(o;w5 zwHq!4?5n6u(Z5{el+v5JCi6b9$cdG;&>Z3#kgMPGKa<{e`0ps|KSUY`L@*AK+P}l^ zS95(FxCE3c2OFps$u$u;s_pyW~nIP=k`y~fUup6l;4SZN>aEjwv$(L1zEcl;G>7Aor7UsEM(wpIwJ*Vcd*P8EFkE zj?zv)4r|qwR6IY0&{Y6aK0;E5E9~C$rjHuF21xewgr$B=;SBJ|p#)619Ker1%C1JA zs=rC~W)vB7!d%c73NcUIR=b90!^K?BFLK}RGZv9^gXUFh^`1t@elEk57BfJy55y9fj#i2&6u&_h#WRF%gr*FD+2H6( zOey}czua@n>s?|LN-vXHV3Dxa>YGK!wzun@e2=V}_yxiHAqF4qA%^?F7NAo*(tH7e z6fWOvT?$qbRK+^L=&6H-mbzs%{*2ZXAj^rd>9e%ybF|w9H+w;=kNQz4P(9)d-?vRc zAv2njG^3)^cL)hB3Bxmxt=3O?ZAriJE|jgWzx3J{QUbov6_AN9ayg%p84Mm~E*zNt z5J+)!ajp2cW7;EHTso=1Uu^O68iF|Dmjy-bt-7^)N`ch0VmP`nB)AUh2wV^UeF1ag zOG3su1b=kCj}I;c_#C;cpz^LFN-(?R2=!zgAA{q8d!4CBq~zkZ{PTOj2NBT344?gw zgfFC`e2?O1NIXWpGWWHPDz?8-)O++Kca~0HxxDu>r<(`D#I$vwsM{8~&u?*hVlTc^ z?|th^W5~J4Bsu@3lIB5h+oBd=j1n=?WS-5e`JZ)@H9Aw@%BQ%eVqOXu4HF~Co4R&1 z?o6Wn0VU=+AN={cGSm z2i4z-FJj_<-2fJk*jp@W`uCzCc=<(nVtn06%(`Y$djYg5Ch)+lba6~nfU`y~M4L}^ zX-U)wXwXwW6`o|5a2_X%PWA*d>^E1thN??cfbhB_k zK`rrhd}Op*9=hV-TkH@`goTdvcfXnZN+AQDpVgD-Z}O_|7=^HT9_LKS+t+b~iPH1Q zmPMe3F#*0Ru2^CHMH9&|w60}5j%TwmTgOzUWtO(Czx>}|hX`n4YL~~ZT*`Z9diB~h zA!+Hp{QP`p&^SjudSnH2w^b9B2++^L)hdA1mcIU75+6oI*@9ZA0OUh-p)&J}7sJ+$ zmx442ZL+sm@?mMQ1<0}hh=}wo^i2|TJ!eb~fO+`~i%VXFtk0W;$U82mL>^Z}-%4A; zBPMIg1?TnD3&tYpWn72R&*zgS4`y$DGt=iNy(+3@giBbC+Jr= zvlI*6h6cg*gi1j_TYInP7~U(-&8QqY$4djb-jH9p2(bK~LX5&Xm|btKwAI9e1MPbM z4cPl_T|+}5>X1QoI9{yJ!6Ul}1KuX&d<%51SVX4`aH@lbb-BqIHT)yY|GpCn9LCn7 z&J*N}Jdq~=7)m!fZi`5Qh-MI=UN=$Ddz*wc-c=Z+W)G)S!e`C~i7`+Mzw<#v1PhXX z&wz$44{cmo?^2t`|9%5}5JQB@KkL-HT!9?4_G*vlb?7C!fG&?lm0#3|RbRJ(XsZxi z>MUDu-+!<&%p91DMx-lGZ-Dq@s7aP)Mu(B+viRJsV-`k0%cQRYh2SGl#%6Q!xUtHG zoV}yKG>D>{MJY845J0p>xiDU~25G`0vxcI^Z$bFy1k>H3KG!m#zya7Y23?@-cX1tf z4T#4ypbSMo=QD=2y1xx57j#JTp32#!)z|3-`$?W_nN*Yos5@MT01#e?sVapq*>GvQ zy78a98qYpe8V=?EO({l>deBKep`f7(1&$rvX>h_^B|i z|GOh6zH$|YvZXY9B|a9CUnaWRrFvs|>09j&pbV=RAd$Kb{iuY>+0-=;Se8{5f?7Yl zI))m+?0dNK8e}}KvQrMaeWN=L;g3tvU>CZIxswIb%UWCkZ=0VN&gS6+kmaH`7%JiVZ9DU~4XB!t3$=>w7D^#dS7VA_p2AnW@> zWyxayk6O9wKi$2=GQUN}#LQ6kXep?$(Ubb+Q_#Wo zpB7|1$k-2=IUfkeR+tSC`~GH{pe(QO=d`SXcGco^U;0L2>irShl`e4j!*}6lm+JP;DvFQdxN3nN#AaIIi=PJ4M0f?9nLOxBeaA3$ zg-+c~fdT&P44weCOcq`Hgpn9^1jD=DKzn7&~Gjnd26w z4NUT4v(^1Yp{q3>_kqu1*-$1=Gqn~I+4{~F?sZB%C=O;z7Etv-;n_Q1Z8r_1C66(? z`Uw7jsj%`-dr^$L(z6nC%JN#w-mhjK5>1r zT+Jbn**}LZx8G;m_;sIzlcS78BuN|V^$1ufLywY}NDx_~l`M7ah7Eo1w~dy_TTx7; zyk;fkGh@ZZ@Oe-g-^D>6`HL>xYf$XGRBDZ5X2)smw~W zG54L|L8u_ow@K_Q!`4ND-FGQx?&bBlI@hy6q#P}NmhsxY3;@q7 z1H2WXp7X-vfU}p!+W>JTE+cVMx%&uFLu#`~$Iq#;$Qd>0(;@|c|J4g%gq_4gN^M)a32(U`=bt6v^SlEq}AS$V$) zFC(MeFCHDqS_906*=7@zf+VncJ4!tw6aPBRUvHd=4hT4|TN0n3r-GUorf2NZEFKB% zXF#1v#U$n_^^(ZkDJd!B&^1e)_|~)63BB{tX8Hfq1TEqT7Wl0o(MKyr9bV z2D2MuLM|~RD6nO*uO%)hVK+bMbVRh37!|fjc4pS>&G$AEh?ncq@)wZf)D1A7HW_5g`_8Q?$cUBd$Au1lY57RA50ndW(gsImW?$i{9 zEKUPSISqQWb8AW3x6<}X*vmfzVz0uF{}F>2glk00r2#jPce5R0l@T9R9~1oe_DG%m z%ShtG-aD4}EshZ62)@|H>R^9nJ(bR(HZTWx_G8(xbqF{CY3#wd$$7nhW3Tb`VH-nv zO|;{6Kk2^KKCN^4eB_@5AuKb?rc$(_Tzqoz zXi^A4z#>|87QAP&kg;Jlld%*%iZ`ja{je#zs1| zLMF<%NsmKCfpvSa)71kDm?Zbq8AkdGjSkA4>M)}Hk~wzdd^5IDSMmb>4}BhuJ)!oA zA?~zlo5JlgNdh-}!)-iXVzi>Oa`~!A`swPP0Y&zYVbRyd^BFnR*x|Gceq+J%U!sGr zm|%pWw_U_ybPR>CyH8P-6*Nw^a=5?VK$X=QQO9P#&9>iAB>0oBA@UZHJ^J~@NVdk; zPo4LYgBEeDqKrrJ-`h)KL* zO6X6hUl_Z%$9$YF{?6woePJ0K{XI5Fw4%ko2`4}0$ob=d2Y3fDehH3Pq_qUd0DJJt zz#0qnhs8|~Iq|$(NIFdMp#~5>orRhr+6#SI4I`YfZcUj9Xi- z#qPzwe79{(%7D>D^JQY4YITQ_&X|zQWYb#?eS%$SZ z1B*@a+vzY`(xy$581Qm{wRZ8v&@%5@waJDHY+Yo-2%=Op*AX+FRz{LAk+tR2CvDd4 zSvdlC6d#jgCMwm5ckc>k;`f-gG8PBxJOh^6#qm`w;?{|4>~62(UkTh@ow`-C$Duz$ zz?@w*+Jq>ywh_5QS$rl#Aaf3 zvfp_JS;AJvmzHtj{I|%YiIO5WV)R7G0te<;uNOYBy|nF2XQ@uIW?$$1K=v2O&68$Z zSQRsK$feU$ zs3XY~#;l|vTiCLxW&%Nz0rp5ZTW0u_m%r6l%0kKE#Di7;g57M?B<$50&r5QFv%!4>h5{e`@035>Julo~4MHg* zo#XLySwGKAh=&yuIW_*&D;%s%{2Q1stL#2M{CpF*CRQSkUgyjTq6R($Vkvd31CTqY zk}jD)bf<-)f|f2fyHReG@#ZtHM>BzwPw67KYmMT0Afl@&XL2pBjDnes(;Yw4du;jr zo(njs+t7hD4zv^F{S+rkM8G%4%OdSl38GY1O2_-p2`^cjzjmLpAAo!b=|!NFN>b&R ztMaBQ%@JpnHr}@6`y<%6fk|RD+6Pl+h;;}E2Q!9uzBKC0qE_uJW6LwPmd}eiYZ7?o zlQC{ChGV*8ADHme%I#K2!i9pcJ*MnmnCH$7)s?N?l-skqJsj%kXKbW?uUmw`+Td~T z1^Q;n%_e;Q7r+qjRmv?iQNmg%sbNELGd!Y5qs*>A2^YENWkB%~@(@gJL zeNmDnLMwojxRV422s#lz<&1NiBA1n``_Qu_&GOaMGhBd)nnzxkG=^7Z8DyObeRm1f z^ELLsR2_gEzH1-ezt8>g!-Hlu%?ENg=q&7rEC^J%8zx|kF-Fs8Q%~9LMFI_IGGJZb z9m-ZaIbBiAmg!h}J4kWw@0LG6r$0WDJPTu|oyc$*B2jAn|Ih5YDBr-brmkO=>8tAK zb+4Ne6VZ=n*ri@!-FEba$C&Cr{^6hUWUy7o%}QFpjz@}S)T;49qH*cRgx+BqvY+SM z27nC`55d4cAF_99gfJJ-1h;z~F8K(vNqHdCIRi25mpXJIF5qCwL;TA3j6Xgdqu&{M znKkElG3=;8#83bc%>W)X$S@Fk0V-AmP%y-w;I^OH2q026vFOq}%sN?5{&G}4pfAtX zWG)`xdrcjNdzbC(`ao_m1HQ|}z%FMyn9Kd3mHmXxT@?3=jA-NR!siUz|ZxOpA z{!(3C-S;>iHZ$6bV1xY2Kr+jNN!>r`D}OQ7IrkRwOSpe}-2*6xAs_`!&)E)L0yFqT zKUug#m&bOObFP}Tq~PD|J#MsfUU<^_so7Q4Rlh2lW9xkIrYVQA;US%&3>U|~4Ks0- z+~uy{28R8$ct85~8oG!q%l2~mdwE;@c>dPE_1cVbiDsee&*h^5Zuvv!rcg=`Gz`TY z({4Za1dZsSwP4|B^A<4q z2cn3dkjb&19GFCFh|Q|r(Rs|ji%AXcer<1d9A?p}i?p8fxF(a*k4=fm#9U+NaSHU=io-@by zUe#*DW#9?AW*VLDxx1*2Q)Ck{Kgh02zK4~E0kDX9Kld{Jn6{)sD}&v*0WoPMHqUMb;RWKllKw`Y?H z`2vus*9Ik=;F|$z$hjx>X-WbE7O}4dr1Ap-RT(ud%s0)l|r@DsRdtAh00yK(* z0Zyhp9;U}tL@#Eh<+)=*A5T}>^`6C+J;n?EsmE58SknO4GJfue{mdnWcgGG&f&X?R zN6LPYTw2A_OcTjIn?dkADIGdV|WfuIMY({@PE$1OotoV@96K>oDbgLyX`j#;}Oz_%kKWY!5x8BI~S6u?#8e0 zV>(h`&~%(<^t(l^PC-9Gc!?KG7t3^5ffjsgLJ8RyhObUQ1ZtB4G#qCybT9Kh$%p$&^Iq z!aB zHkBD4MQ-}=7sKfxw*c!0t{e``F*-wmXv)H%&CV|tz9thEUG#Ny)Wp-1bouh-k6^ia zoSXX%0)>ipq5zv0a{lD?0l2(zPfYg!Kw7H>)nZdz=m`HqJl(&4?!Pwg5&O@t(Et8t zB|agcMwIWcJ_y<={=57GrAr#zPGEVtwR(LNwfWyhQUAqhdH8n`2&Nc|>*x8rLgaBm z=6{%oWxD@h#%Mq2W&I`e+ob>Q>WchUtTTg{ATeNmBUlF z=qCB&{#xn`<;d@c|7djFRU!vg#4TIluPgM~QhFr9Iy0O0H=R4(v&Et7dr!q*YXlGe q@LvnZs~x<*57P19y9es0*ETrQjlKDk)P2xTQ&qZnK3mZ;_);@;jzI27|`cYS6a0=3$U84?EI#~;vpzTaf9(Eq`$nhWNm9J-|~KQb(9jhc}tkqUs_s9CX+w8L@~&< z%`U@(gG8sxL&HcVrE>SS6w~Z8PLxPZaU(*Lfg%9@qf{&Rz`(%HEaY%)0411xNhPg$ zeUWKbdb!@MHIb;*o)QXe+7Qg9)#I4OHl+5B4zJFvpy>}soiwk1ey6!gue!PDnSBs9 zN3Sn@9C>S*)o;Nc-l*PZIKgNLv9qx$`i;h5FmTMSetjJsonYjlKe=G`W^2S(byi5( zTIz2~sG@jllMVB)xJ8Az5Z0cNPr<$SEA~-kF zvs42{xbu{<3!Qxj8H51Z3v{OE`v*OA`lHESKLEl7>mGOPudUZncY`%>EiwyYVq$h_ zb#6=(l2nL9RM?82fkA7G2&(SJjHPJLHdCvE--&K+Zpu##6qj&}3_Mu8P3~yuq%Z?V z$}!5XlwN@948z~~_@bnwq^xYdugGfdzLS#^?#uh4;^M1VtPK)r&3>1BJcBwlHPx-f ze_7*P?)s*2b%fh2=3?&wz;%W9vZR@(*&4A^!KrHy4>&x3xO4Cl^yRU%u=z$Wr&?QV zr-gGQXQnXNrzuuAgb|c^`A4p^z0TnadZPSq9SEoPNC;PzXJ;jo+CC|`dq0tM;SVrdWGnWFh$O+AFzDwWU>?7} zytz0MzSxuFD@xjY|z6d=zdbNfOLT$GXFXMjjwN1)QSN`eYusA$3et< zyMLx7OcvhF4J+YqS1_AX4_x2`Wj}cHkP>q6^6FROR*?VnHJbkMBZkq^(qg&8tk$E;}NSXuaL}E{#w&YlSCA^R+Nw??Yb@Tgrcm}0)8HMFu;$fUH$anj^Ih(jSwr+< z*|rXwy2tir%Vqfm=(U_4Jg5jS30XAlb)B{5sWIdgd^O@IMSM@%aQ1@PQ9>CHxsf`$ zboeVgjzh5ZV-JT-U+;r27gC%r^WHujfAQilIdrC5i(Ai|j6HB3{g7%_$Zn_+Op>r` zlD@CFKw&sK{-m~Fo@b-*tkOSl^i>2;T2U>0ty~=CbbV)DM77i~TqQ*jZ*!qnW$4Rr zU0oB^+q{gH(~BLK)W?#1mYqyp{4R3f^ljB_hIx}#x^voy3DPfJBUU3T z^W-)TUNKW4(%SF@nchFBf}eUOV{aN!9a|BxnT2W)-z}op9U42BnB^wnqdS>lHX(_$ zZNKK5;5gB3SNrOfvxnPqg#VSA)5P&-4EUlo&-h1Gt%xhLnmyX2`#oeku4sz|Gh-WQ>&VvPA7_hd~D?${t!Pql5=o1VdU341Rsmy(FvA!!Dw}*I9de1bid+TS znTU9_h!dQD1f&%_lc}I;zddGT=hjPgisSfL%hu>NOS9rX_Agm^XvB!8rcwRzLT-1H z&!rAdr*K_|w9-d|3*!_+a2svEQ|7)J0i3TkRBt9V1)eEya1VI3OYn zkN9e5G*ox*yy`LA%bCx8lRddKL%-t&4TIanP7igBwb&R5%qJ!*;*rFx(&vOMa{7(! zi?xAw_mcLJ=5b*VQ@(az4T)Do-xd^!AwF9LIQ!wIxSCHh4BSWwxD7Fni=qOsXzQ#isI zgPqy~P$>seZ}Y|Wf%tv@VC_Ut;D>3nViJiW0=X-LH!1d~9+}7xegNRW= z-D6kS85tSv?M4aqVjvo3H)~dCRb-9DmV7(Q+6v5RaXD17M6Om8O458QaD^gBGs&_8 zIoJBOgC{RUk$BOja}b2rc6m}YtxX9D2^Nw7#LMf$7OgG;;BFN!Wh=Dk2f>SvOQWuI z-#Qy^A`GJCSZ00@g#-V9`!6zikah7yzwzQMXjv_4a=Nz^v?j literal 0 HcmV?d00001 diff --git a/sdk/python/foundation-models/system/docs/sample_files/HfImageMLmodel.yaml b/sdk/python/foundation-models/system/docs/sample_files/HfImageMLmodel.yaml new file mode 100644 index 0000000000..742a05a8d3 --- /dev/null +++ b/sdk/python/foundation-models/system/docs/sample_files/HfImageMLmodel.yaml @@ -0,0 +1,26 @@ +flavors: + hftransformersv2: + code: code + hf_config_class: AutoConfig + hf_predict_module: predict + hf_pretrained_class: AutoModelForImageClassification + hf_tokenizer_class: AutoImageProcessor + huggingface_id: microsoft/beit-base-patch16-224-pt22k-ft22k + model_data: data + pytorch_version: 2.0.1+cu117 + task_type: image-classification + train_label_list: + path_list: train_label_list.npy + transformers_version: 4.30.2 + python_function: + code: code + data: data + env: conda.yaml + loader_module: azureml.evaluate.mlflow.hftransformers + python_version: 3.8.16 +mlflow_version: 2.3.1 +model_uuid: e69aa5cecf614626a0c1d3334526b4d4 +signature: + inputs: '[{"name": "image", "type": "binary"}]' + outputs: '[{"name": "probs", "type": "string"}, {"name": "labels", "type": "string"}]' +utc_time_created: '2023-07-04 07:38:38.114772' diff --git a/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/README.md b/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/README.md new file mode 100644 index 0000000000..1a2366769f --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/README.md @@ -0,0 +1,40 @@ +## Multiclass Classification + +### List of supported keyword arguments: + +Note: The evaluation config is an optional configuration file that can be provided for model evaluation. If not provided, default values for the arguments below will be chosen based on the task type. + +| Keyword Argument | Description | Type | Sample | +|:------------------------:|:-------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------| +| metrics | List for subset of metrics to be computed. All supported metrics listed below. | list | ["accuracy", "f1_score_micro", "average_precision_score_macro"] | + +### List of supported metrics: + +* log_loss +* average_precision_score_binary +* weighted_accuracy +* AUC_weighted +* f1_score_micro +* f1_score_binary +* precision_score_micro +* precision_score_binary +* recall_score_weighted +* f1_score_weighted +* confusion_matrix +* average_precision_score_micro +* recall_score_binary +* recall_score_macro +* average_precision_score_weighted +* AUC_binary +* matthews_correlation +* precision_score_macro +* accuracy +* average_precision_score_macro +* AUC_macro +* recall_score_micro +* balanced_accuracy +* f1_score_macro +* precision_score_weighted +* accuracy_table +* AUC_micro +* norm_macro_recall \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/fridge-eval-config.json b/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/fridge-eval-config.json new file mode 100644 index 0000000000..8631ecab14 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/fridge-eval-config.json @@ -0,0 +1,3 @@ +{ + "metrics": ["average_precision_score_macro", "AUC_macro", "recall_score_macro", "average_precision_score_binary", "average_precision_score_micro", "AUC_binary", "recall_score_micro", "AUC_micro", "norm_macro_recall", "average_precision_score_weighted", "weighted_accuracy", "precision_score_micro", "f1_score_binary", "accuracy_table", "precision_score_macro", "f1_score_micro", "precision_score_weighted", "f1_score_weighted", "confusion_matrix", "recall_score_binary", "matthews_correlation", "log_loss", "accuracy", "precision_score_binary", "balanced_accuracy", "AUC_weighted", "f1_score_macro", "recall_score_weighted"] +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/image-multiclass-classification.ipynb b/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/image-multiclass-classification.ipynb new file mode 100644 index 0000000000..bb269de9b9 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-classification/multiclass-classification/image-multiclass-classification.ipynb @@ -0,0 +1,700 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Multi-class Classification Evaluation\n", + "\n", + "This sample shows how use the evaluate a group of models against a given set of metrics for the `image-classification` task. \n", + "\n", + "### Evaluation dataset\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset.\n", + "\n", + "### Model\n", + "The goal of evaluating models is to compare their performance on a variety of metrics. `image-classification` is a generic task type. As such, the models you pick to compare must be finetuned for the same scenario. Given that we have the dataset, we would like to look for models finetuned for this specific scenario. We will compare `microsoft-beit-base-patch16-224-pt22k-ft22k` and `microsoft-swinv2-base-patch4-window12-192-22k` in this sample, which are available in the `azureml` system registry.\n", + "\n", + "If you'd like to evaluate models that are not in the system registry, you can import those models to your workspace or organization registry and then evaluate them using the approach outlined in this sample. Review the sample notebook for [importing models](../../../import/import_model_into_registry.ipynb).\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites\n", + "3. Pick the models to evaluate\n", + "4. Prepare the dataset for fine-tuning the model\n", + "5. Submit the evaluation jobs using the model and data as inputs\n", + "6. Review evaluation metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install azure-ai-ml\n", + "%pip install azure-identity" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace `AML_WORKSPACE_NAME`, `RESOURCE_GROUP` and `SUBSCRIPTION_ID` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-MultiClass-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"SUBSCRIPTION_ID\"\n", + " resource_group = \"RESOURCE_GROUP\"\n", + " workspace_name = \"AML_WORKSPACE_NAME\"\n", + "\n", + " workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + " )\n", + "\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import warnings\n", + "\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_evaluation_cluster_name = \"sample-model-evaluation-compute\"\n", + "\n", + "try:\n", + " model_evaluation_compute = workspace_ml_client.compute.get(\n", + " model_evaluation_cluster_name\n", + " )\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " model_evaluation_compute = AmlCompute(\n", + " name=model_evaluation_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(model_evaluation_compute).result()\n", + "\n", + "compute_instance_type = model_evaluation_compute.size\n", + "print(f\"Instance type: {compute_instance_type}\")\n", + "\n", + "if compute_instance_type != \"STANDARD_NC6S_V3\":\n", + " # Print a warning message if compute type is not 'STANDARD_NC6S_V3', i.e. Single GPU V100\n", + " warning_message = (\n", + " \"Warning! Currently evaluation is only supported on STANDARD_NC6S_V3 compute type.\"\n", + " \" Please change the compute type to STANDARD_NC6S_V3 if you want to run evaluation.\"\n", + " )\n", + " warnings.warn(warning_message, category=Warning)\n", + "# generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below snippet will allow us to query number of GPU's present on the compute. We can use it to set `gpu_per_node` to ensure utilization of all GPUs in the node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is the number of GPUs in a single node of the selected 'vm_size' compute.\n", + "# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train.\n", + "# Setting this to more than the number of GPUs will result in an error.\n", + "gpus_per_node = 1 # default value\n", + "gpu_count_found = False\n", + "ws_computes = workspace_ml_client.compute.list_sizes()\n", + "for ws_compute in ws_computes:\n", + " if ws_compute.name.lower() == model_evaluation_compute.size.lower():\n", + " gpus_per_node = ws_compute.gpus\n", + " print(f\"Number of GPUs in compute {ws_compute.name} are {ws_compute.gpus}\")\n", + "# if gpu_count_found not found, then print an error\n", + "if gpus_per_node > 0:\n", + " gpu_count_found = True\n", + "else:\n", + " gpu_count_found = False\n", + " print(\n", + " f\"No GPUs found in compute. Number of GPUs in compute {model_evaluation_compute.size} 0.\"\n", + " )" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick the models to evaluate\n", + "\n", + "You can evaluate the pretrained models on the repective datasets. Verify that the models selected for evaluation are available in system registry using the below code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "registry_models = [\n", + " {\"name\": \"microsoft-beit-base-patch16-224-pt22k-ft22k\"},\n", + " {\"name\": \"microsoft-swinv2-base-patch4-window12-192-22k\"},\n", + "]\n", + "for model in registry_models:\n", + " all_models = registry_ml_client.models.list(model[\"name\"])\n", + " latest_model = max(all_models, key=lambda x: x.version)\n", + " print(latest_model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this demo notebook, we are using fridge objects dataset. Due to the differences in the labels of the dataset used for pretrained models and that of fridge object dataset, the pretrained models can't be evalauted on the fridge dataset.\n", + "\n", + "Therefore, for the scope of this notebook, we request you to finetune model(s) for fridge objects dataset using [hftransformers-fridgeobjects-multiclass-classification.ipynb](../../../finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb). To finetune and register the model(s), you need to run the above notebook upto \"7. Register the fine tuned model with the workspace\" Once you have finetuned and registered the model(s) using above notebook, you can proceed further. \n", + "- Replace `REGISTERED_MODEL_NAME_1/REGISTERED_MODEL_NAME_2` and `REGISTERED_MODEL_VERSION_1/REGISTERED_MODEL_VERSION_2` with that of the registered models from above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetuned_registered_models = [\n", + " {\"name\": \"REGISTERED_MODEL_NAME_1\", \"version\": \"REGISTERED_MODEL_VERSION_1\"},\n", + " {\"name\": \"REGISTERED_MODEL_NAME_2\", \"version\": \"REGISTERED_MODEL_VERSION_2\"},\n", + "]\n", + "\n", + "for model in finetuned_registered_models:\n", + " model = workspace_ml_client.models.get(model[\"name\"], version=model[\"version\"])\n", + " print(model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset. The fridge object dataset is stored in a directory. There are four different folders inside:\n", + "- /water_bottle\n", + "- /milk_bottle\n", + "- /carton\n", + "- /can\n", + "\n", + "This is the most common data format for multiclass image classification. Each folder title corresponds to the image label for the images contained inside. \n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the next cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"milk_bottle\", \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images\",\n", + " name=\"fridge-items-images-multiclass-classif\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. The train / validation ratio corresponds to 20% of the data going into the validation file. For further details on jsonl file used for image classification task in automated ml, please refer to the [data schema documentation for multi-class image classification task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#image-classification-binarymulti-class)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "sys.path.insert(0, \"../../../../../jobs/automl-standalone-jobs/jsonl-conversion/\")\n", + "from base_jsonl_converter import write_json_lines\n", + "from classification_jsonl_converter import ClassificationJSONLConverter\n", + "\n", + "converter = ClassificationJSONLConverter(\n", + " uri_folder_data_asset.path, data_dir=dataset_dir\n", + ")\n", + "jsonl_annotations = os.path.join(dataset_dir, \"annotations.jsonl\")\n", + "write_json_lines(converter, jsonl_annotations)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Now split the annotations into train and validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# We'll copy each JSONL file within its related MLTable folder\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# First, let's create the folders if they don't exist\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the training and validation files\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "with open(jsonl_annotations, \"r\") as annot_f:\n", + " json_lines = annot_f.readlines()\n", + "\n", + "index = 0\n", + "with open(validation_annotations_file, \"w\") as validation_f:\n", + " for json_line in json_lines:\n", + " if index % train_validation_ratio == 0:\n", + " # validation annotation\n", + " validation_f.write(json_line)\n", + " else:\n", + " # train annotation\n", + " pass\n", + " index += 1" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# Create and save validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the evaluation jobs using the model and data as inputs\n", + " \n", + "Create the job that uses the `model_evaluation_pipeline` component. We will submit one job per model. \n", + "\n", + "Note that the metrics that the evaluation jobs need to calculate are specified in the [fridge-eval-config.json](./fridge-eval-config.json) file.\n", + "\n", + "All supported evaluation configurations for `image-classification` can be found in [README](./README.md)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# fetch the pipeline component\n", + "pipeline_component_func = registry_ml_client.components.get(\n", + " name=\"model_evaluation_pipeline\", label=\"latest\"\n", + ")\n", + "\n", + "\n", + "# define the pipeline job\n", + "@pipeline()\n", + "def evaluation_pipeline(mlflow_model):\n", + " evaluation_job = pipeline_component_func(\n", + " # specify the foundation model available in the azureml system registry or a model from the workspace\n", + " # mlflow_model = Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{mlflow_model_path}\"),\n", + " mlflow_model=mlflow_model,\n", + " # test data\n", + " test_data=Input(type=AssetTypes.MLTABLE, path=validation_mltable_path),\n", + " # The following parameters map to the dataset fields\n", + " label_column_name=\"label\",\n", + " input_column_names=\"image_url\",\n", + " # Evaluation settings\n", + " task=\"image-classification\",\n", + " # config file containing the details of evaluation metrics to calculate\n", + " evaluation_config=Input(\n", + " type=AssetTypes.URI_FILE, path=\"./fridge-eval-config.json\"\n", + " ),\n", + " # config cluster/device job is running on\n", + " # set device to GPU/CPU on basis if GPU count was found\n", + " compute_name=model_evaluation_cluster_name,\n", + " instance_type=compute_instance_type,\n", + " device=\"gpu\" if gpu_count_found else \"cpu\",\n", + " )\n", + " return {\"evaluation_result\": evaluation_job.outputs.evaluation_result}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Submit the jobs, passing the model as a parameter to the pipeline created in the above step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# submit the pipeline job for each model that we want to evaluate\n", + "# you could consider submitting the pipeline jobs in parallel, provided your cluster has multiple nodes\n", + "pipeline_jobs = []\n", + "\n", + "for model in finetuned_registered_models:\n", + "\n", + " # # For each model, fetch the model object from the registry\n", + " # model_object = registry_ml_client.models.get(\n", + " # model[\"name\"], version=model[\"version\"]\n", + " # )\n", + "\n", + " # Fetch the model from workspace\n", + " model_object = workspace_ml_client.models.get(\n", + " model[\"name\"], version=model[\"version\"]\n", + " )\n", + "\n", + " pipeline_object = evaluation_pipeline(\n", + " mlflow_model=Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{model_object.id}\"),\n", + " )\n", + " # don't reuse cached results from previous jobs\n", + " pipeline_object.settings.force_rerun = True\n", + " pipeline_object.settings.default_compute = model_evaluation_cluster_name\n", + " pipeline_object.display_name = f\"eval-{model['name']}-{timestamp}\"\n", + " pipeline_job = workspace_ml_client.jobs.create_or_update(\n", + " pipeline_object, experiment_name=experiment_name\n", + " )\n", + " # add model['name'] and pipeline_job.name as key value pairs to a dictionary\n", + " pipeline_jobs.append({\"model_name\": model[\"name\"], \"job_name\": pipeline_job.name})\n", + " # wait for the pipeline job to complete\n", + " workspace_ml_client.jobs.stream(pipeline_job.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Review evaluation metrics\n", + "Viewing the job in AzureML studio is the best way to analyze logs, metrics and outputs of jobs. You can create custom charts and compare metics across different jobs. See https://learn.microsoft.com/en-us/azure/machine-learning/how-to-log-view-metrics?tabs=interactive#view-jobsruns-information-in-the-studio to learn more. \n", + "\n", + "However, we may need to access and review metrics programmatically for which we will use MLflow, which is the recommended client for logging and querying metrics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by Azure ML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)\n", + "\n", + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")\n", + "\n", + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.2 Get the evaluation metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "metrics_df = pd.DataFrame()\n", + "\n", + "for job in pipeline_jobs:\n", + " # Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + " filter = \"tags.mlflow.rootRunId='\" + job[\"job_name\"] + \"'\"\n", + " runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + " )\n", + "\n", + " # Get the training and evaluation runs.\n", + " for run in runs:\n", + " # else, check if run.data.metrics.accuracy exists\n", + " if \"accuracy\" in run.data.metrics:\n", + " # get the metrics from the mlflow run\n", + " run_metric = run.data.metrics\n", + " # add the model name to the run_metric dictionary\n", + " run_metric[\"model_name\"] = job[\"model_name\"]\n", + " # convert the run_metric dictionary to a pandas dataframe\n", + " temp_df = pd.DataFrame(run_metric, index=[0])\n", + " # concat the temp_df to the metrics_df\n", + " metrics_df = pd.concat([metrics_df, temp_df], ignore_index=True)\n", + "\n", + "# move the model_name columns to the first column\n", + "cols = metrics_df.columns.tolist()\n", + "cols = cols[-1:] + cols[:-1]\n", + "metrics_df = metrics_df[cols]\n", + "metrics_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/README.md b/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/README.md new file mode 100644 index 0000000000..0f1684b67f --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/README.md @@ -0,0 +1,45 @@ +## Multilabel Classification + +Note: The evaluation config is an optional configuration file that can be provided for model evaluation. If not provided, default values for the arguments below will be chosen based on the task type. + +### List of supported keyword arguments: + +| Keyword Argument | Description | Type | Sample | +|:------------------------:|:-------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------| +| metrics | List for subset of metrics to be computed. All supported metrics listed below. | list | ["iou", "f1_score_micro", "average_precision_score_macro"] | +| threshold | Threshold value applied to the predicted probabilities from the classifier. | float | 0.5 | + +### List of supported metrics: + +* iou +* iou_macro +* iou_micro +* iou_weighted +* log_loss +* average_precision_score_binary +* weighted_accuracy +* AUC_weighted +* f1_score_micro +* f1_score_binary +* precision_score_micro +* precision_score_binary +* recall_score_weighted +* f1_score_weighted +* confusion_matrix +* average_precision_score_micro +* recall_score_binary +* recall_score_macro +* average_precision_score_weighted +* AUC_binary +* matthews_correlation +* precision_score_macro +* accuracy +* average_precision_score_macro +* AUC_macro +* recall_score_micro +* balanced_accuracy +* f1_score_macro +* precision_score_weighted +* accuracy_table +* AUC_micro +* norm_macro_recall \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/fridge-eval-config.json b/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/fridge-eval-config.json new file mode 100644 index 0000000000..8ed97657d2 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/fridge-eval-config.json @@ -0,0 +1,4 @@ +{ + "metrics": ["average_precision_score_macro", "AUC_macro", "recall_score_macro", "average_precision_score_binary", "average_precision_score_micro", "AUC_binary", "recall_score_micro", "AUC_micro", "norm_macro_recall", "average_precision_score_weighted", "weighted_accuracy", "precision_score_micro", "f1_score_binary", "accuracy_table", "precision_score_macro", "f1_score_micro", "precision_score_weighted", "f1_score_weighted", "confusion_matrix", "recall_score_binary", "matthews_correlation", "log_loss", "accuracy", "precision_score_binary", "balanced_accuracy", "AUC_weighted", "f1_score_macro", "recall_score_weighted", "iou", "iou_macro", "iou_micro", "iou_weighted"], + "threshold": 0.5 +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/image-multilabel-classification.ipynb b/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/image-multilabel-classification.ipynb new file mode 100644 index 0000000000..c20d84faa6 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-classification/multilabel-classification/image-multilabel-classification.ipynb @@ -0,0 +1,698 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Multi-class Classification Evaluation\n", + "\n", + "This sample shows how use the evaluate a group of models against a given set of metrics for the `image-classification-multilabel` task. \n", + "\n", + "### Evaluation dataset\n", + "We will use the [multi-label fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip) dataset.\n", + "\n", + "### Model\n", + "The goal of evaluating models is to compare their performance on a variety of metrics. `image-classification-multilabel` is a generic task type. As such, the models you pick to compare must be finetuned for the same scenario. Given that we have the dataset, we would like to look for models finetuned for this specific scenario. We will compare `microsoft-beit-base-patch16-224-pt22k-ft22k` and `microsoft-swinv2-base-patch4-window12-192-22k` in this sample, which are available in the `azureml` system registry.\n", + "\n", + "If you'd like to evaluate models that are not in the system registry, you can import those models to your workspace or organization registry and then evaluate them using the approach outlined in this sample. Review the sample notebook for [importing models](../../../import/import_model_into_registry.ipynb).\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites\n", + "3. Pick the models to evaluate\n", + "4. Prepare the dataset for fine-tuning the model\n", + "5. Submit the evaluation jobs using the model and data as inputs\n", + "6. Review evaluation metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install azure-ai-ml\n", + "%pip install azure-identity" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace `AML_WORKSPACE_NAME`, `RESOURCE_GROUP` and `SUBSCRIPTION_ID` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-MultiLabel-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"SUBSCRIPTION_ID\"\n", + " resource_group = \"RESOURCE_GROUP\"\n", + " workspace_name = \"AML_WORKSPACE_NAME\"\n", + "\n", + " workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + " )\n", + "\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import warnings\n", + "\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_evaluation_cluster_name = \"sample-model-evaluation-compute\"\n", + "\n", + "try:\n", + " model_evaluation_compute = workspace_ml_client.compute.get(\n", + " model_evaluation_cluster_name\n", + " )\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " model_evaluation_compute = AmlCompute(\n", + " name=model_evaluation_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(model_evaluation_compute).result()\n", + "\n", + "compute_instance_type = model_evaluation_compute.size\n", + "print(f\"Instance type: {compute_instance_type}\")\n", + "\n", + "if compute_instance_type != \"STANDARD_NC6S_V3\":\n", + " # Print a warning message if compute type is not 'STANDARD_NC6S_V3', i.e. Single GPU V100\n", + " warning_message = (\n", + " \"Warning! Currently evaluation is only supported on STANDARD_NC6S_V3 compute type.\"\n", + " \" Please change the compute type to STANDARD_NC6S_V3 if you want to run evaluation.\"\n", + " )\n", + " warnings.warn(warning_message, category=Warning)\n", + "# generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below snippet will allow us to query number of GPU's present on the compute. We can use it to set `gpu_per_node` to ensure utilization of all GPUs in the node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is the number of GPUs in a single node of the selected 'vm_size' compute.\n", + "# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train.\n", + "# Setting this to more than the number of GPUs will result in an error.\n", + "gpus_per_node = 1 # default value\n", + "gpu_count_found = False\n", + "ws_computes = workspace_ml_client.compute.list_sizes()\n", + "for ws_compute in ws_computes:\n", + " if ws_compute.name.lower() == model_evaluation_compute.size.lower():\n", + " gpus_per_node = ws_compute.gpus\n", + " print(f\"Number of GPUs in compute {ws_compute.name} are {ws_compute.gpus}\")\n", + "# if gpu_count_found not found, then print an error\n", + "if gpus_per_node > 0:\n", + " gpu_count_found = True\n", + "else:\n", + " gpu_count_found = False\n", + " print(\n", + " f\"No GPUs found in compute. Number of GPUs in compute {model_evaluation_compute.size} 0.\"\n", + " )" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick the models to evaluate\n", + "\n", + "You can evaluate the pretrained models on the repective datasets. Verify that the models selected for evaluation are available in system registry using the below code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# need to specify model versions until the bug to support fetching the latest version using latest label is fixed\n", + "registry_models = [\n", + " {\"name\": \"microsoft-beit-base-patch16-224-pt22k-ft22k\"},\n", + " {\"name\": \"microsoft-swinv2-base-patch4-window12-192-22k\"},\n", + "]\n", + "for model in registry_models:\n", + " all_models = registry_ml_client.models.list(model[\"name\"])\n", + " latest_model = max(all_models, key=lambda x: x.version)\n", + " print(latest_model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this demo notebook, we are using fridge objects dataset. Due to the differences in the labels of the dataset used for pretrained models and that of fridge object dataset, the pretrained models can't be evalauted on the fridge dataset.\n", + "\n", + "Therefore, for the scope of this notebook, we request you to finetune model(s) for fridge objects dataset using [hftransformers-fridgeobjects-multilabel-classification.ipynb](../../finetune/python-sdk/image-multiclass-classification/hftransformers-fridgeobjects-multilabel-classification.ipynb). To finetune and register the model(s), you need to run the above notebook upto \"7. Register the fine tuned model with the workspace\" Once you have finetuned and registered the model(s) using above notebook, you can proceed further. \n", + "- Replace `REGISTERED_MODEL_NAME_1/REGISTERED_MODEL_NAME_2` and `REGISTERED_MODEL_VERSION_1/REGISTERED_MODEL_VERSION_2` with that of the registered models from above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetuned_registered_models = [\n", + " {\"name\": \"REGISTERED_MODEL_NAME_1\", \"version\": \"REGISTERED_MODEL_VERSION_1\"},\n", + " {\"name\": \"REGISTERED_MODEL_NAME_2\", \"version\": \"REGISTERED_MODEL_VERSION_2\"},\n", + "]\n", + "\n", + "for model in finetuned_registered_models:\n", + " model = workspace_ml_client.models.get(model[\"name\"], version=model[\"version\"])\n", + " print(model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [multi-label fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip) dataset. The fridge object dataset is annotated in the CSV file, where each image corresponds to a line. It defines a mapping of the filename to the labels. Since this is a multi-label classification problem, each image can be associated to multiple labels.\n", + "\n", + "This is the most common data format for multilabel image classification. Each folder title corresponds to the image label for the images contained inside.\n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the next cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"56.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images multilabel\",\n", + " name=\"fridge-items-images-multilabel-classification\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. The train / validation ratio corresponds to 20% of the data going into the validation file. For further details on jsonl file used for image classification task in automated ml, please refer to the [data schema documentation for multi-label image classification task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#image-classification-multi-label)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "sys.path.insert(0, \"../../../../../jobs/automl-standalone-jobs/jsonl-conversion/\")\n", + "from base_jsonl_converter import write_json_lines\n", + "from classification_jsonl_converter import ClassificationJSONLConverter\n", + "\n", + "converter = ClassificationJSONLConverter(\n", + " uri_folder_data_asset.path, label_file=os.path.join(dataset_dir, \"labels.csv\")\n", + ")\n", + "jsonl_annotations = os.path.join(dataset_dir, \"annotations.jsonl\")\n", + "write_json_lines(converter, jsonl_annotations)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Now split the annotations into train and validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "\n", + "# We'll copy each JSONL file within its related MLTable folder\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# First, let's create the folders if they don't exist\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the training and validation files\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "with open(jsonl_annotations, \"r\") as annot_f:\n", + " json_lines = annot_f.readlines()\n", + "\n", + "index = 0\n", + "with open(validation_annotations_file, \"w\") as validation_f:\n", + " for json_line in json_lines:\n", + " if index % train_validation_ratio == 0:\n", + " # validation annotation\n", + " validation_f.write(json_line)\n", + " else:\n", + " # train annotation\n", + " pass\n", + " index += 1" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# Create and save validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Submit the evaluation jobs using the model and data as inputs\n", + " \n", + "Create the job that uses the `model_evaluation_pipeline` component. We will submit one job per model. \n", + "\n", + "Note that the metrics that the evaluation jobs need to calculate are specified in the [fridge-eval-config.json](./fridge-eval-config.json) file.\n", + "\n", + "All supported evaluation configurations for `image-classification-multilabel` can be found in [README](./README.md)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# fetch the pipeline component\n", + "pipeline_component_func = registry_ml_client.components.get(\n", + " name=\"model_evaluation_pipeline\", label=\"latest\"\n", + ")\n", + "\n", + "\n", + "# define the pipeline job\n", + "@pipeline()\n", + "def evaluation_pipeline(mlflow_model):\n", + " evaluation_job = pipeline_component_func(\n", + " # specify the foundation model available in the azureml system registry or a model from the workspace\n", + " # mlflow_model = Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{mlflow_model_path}\"),\n", + " mlflow_model=mlflow_model,\n", + " # test data\n", + " test_data=Input(type=AssetTypes.MLTABLE, path=validation_mltable_path),\n", + " # The following parameters map to the dataset fields\n", + " label_column_name=\"label\",\n", + " input_column_names=\"image_url\",\n", + " # Evaluation settings\n", + " task=\"image-classification-multilabel\",\n", + " # config file containing the details of evaluation metrics to calculate\n", + " evaluation_config=Input(\n", + " type=AssetTypes.URI_FILE, path=\"./fridge-eval-config.json\"\n", + " ),\n", + " # config cluster/device job is running on\n", + " # set device to GPU/CPU on basis if GPU count was found\n", + " compute_name=model_evaluation_cluster_name,\n", + " instance_type=compute_instance_type,\n", + " device=\"gpu\" if gpu_count_found else \"cpu\",\n", + " )\n", + " return {\"evaluation_result\": evaluation_job.outputs.evaluation_result}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Submit the jobs, passing the model as a parameter to the pipeline created in the above step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# submit the pipeline job for each model that we want to evaluate\n", + "# you could consider submitting the pipeline jobs in parallel, provided your cluster has multiple nodes\n", + "pipeline_jobs = []\n", + "\n", + "for model in finetuned_registered_models:\n", + "\n", + " # # For each model, fetch the model object from the registry\n", + " # model_object = registry_ml_client.models.get(\n", + " # model[\"name\"], version=model[\"version\"]\n", + " # )\n", + "\n", + " # Fetch the model from workspace\n", + " model_object = workspace_ml_client.models.get(\n", + " model[\"name\"], version=model[\"version\"]\n", + " )\n", + "\n", + " pipeline_object = evaluation_pipeline(\n", + " mlflow_model=Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{model_object.id}\"),\n", + " )\n", + " # don't reuse cached results from previous jobs\n", + " pipeline_object.settings.force_rerun = True\n", + " pipeline_object.settings.default_compute = model_evaluation_cluster_name\n", + " pipeline_object.display_name = f\"eval-{model['name']}-{timestamp}\"\n", + " pipeline_job = workspace_ml_client.jobs.create_or_update(\n", + " pipeline_object, experiment_name=experiment_name\n", + " )\n", + " # add model['name'] and pipeline_job.name as key value pairs to a dictionary\n", + " pipeline_jobs.append({\"model_name\": model[\"name\"], \"job_name\": pipeline_job.name})\n", + " # wait for the pipeline job to complete\n", + " workspace_ml_client.jobs.stream(pipeline_job.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Review evaluation metrics\n", + "Viewing the job in AzureML studio is the best way to analyze logs, metrics and outputs of jobs. You can create custom charts and compare metics across different jobs. See https://learn.microsoft.com/en-us/azure/machine-learning/how-to-log-view-metrics?tabs=interactive#view-jobsruns-information-in-the-studio to learn more. \n", + "\n", + "However, we may need to access and review metrics programmatically for which we will use MLflow, which is the recommended client for logging and querying metrics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 5.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by Azure ML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)\n", + "\n", + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")\n", + "\n", + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 5.2 Get the evaluation metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "metrics_df = pd.DataFrame()\n", + "\n", + "for job in pipeline_jobs:\n", + " # Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + " filter = \"tags.mlflow.rootRunId='\" + job[\"job_name\"] + \"'\"\n", + " runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + " )\n", + "\n", + " # Get the training and evaluation runs.\n", + " for run in runs:\n", + " # else, check if run.data.metrics.iou exists\n", + " if \"iou\" in run.data.metrics:\n", + " # get the metrics from the mlflow run\n", + " run_metric = run.data.metrics\n", + " # add the model name to the run_metric dictionary\n", + " run_metric[\"model_name\"] = job[\"model_name\"]\n", + " # convert the run_metric dictionary to a pandas dataframe\n", + " temp_df = pd.DataFrame(run_metric, index=[0])\n", + " # concat the temp_df to the metrics_df\n", + " metrics_df = pd.concat([metrics_df, temp_df], ignore_index=True)\n", + "\n", + "# move the model_name columns to the first column\n", + "cols = metrics_df.columns.tolist()\n", + "cols = cols[-1:] + cols[:-1]\n", + "metrics_df = metrics_df[cols]\n", + "metrics_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/README.md b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/README.md new file mode 100644 index 0000000000..bda4e54ac0 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/README.md @@ -0,0 +1,20 @@ +## Instance Segmentation +Note: The evaluation config is an optional configuration file that can be provided for model evaluation. If not provided, default values for the arguments below will be chosen based on the task type. + +### List of supported keyword arguments: + +| Keyword Argument | Description | Type | Sample | +|:------------------------:|:-------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------| +| metrics | List for subset of metrics to be computed. All supported metrics listed below. | list | ["mean_average_precision", "recall", "precision", "per_label_metrics"] | +| iou_threshold | IOU threshold used during inference in non-maximum suppression post processing. | float | 0.5 | +| box_score_threshold | During inference, only return proposals with a score greater than `box_score_threshold`. The score is the multiplication of the objectness score and classification probability. | float | 0.3 | + + +### List of supported metrics: + +* mean_average_precision +* recall +* precision +* per_label_metrics +* image_level_binary_classsifier_metrics +* confusion_matrices_per_score_threshold diff --git a/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/fridge-eval-config.json b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/fridge-eval-config.json new file mode 100644 index 0000000000..018c304c54 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/fridge-eval-config.json @@ -0,0 +1,5 @@ +{ + "metrics": ["mean_average_precision", "recall", "precision", "per_label_metrics", "image_level_binary_classsifier_metrics", "confusion_matrices_per_score_threshold"], + "iou_threshold" : 0.5, + "box_score_threshold" : 0.3 +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/image-instance-segmentation.ipynb b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/image-instance-segmentation.ipynb new file mode 100644 index 0000000000..d1f8a3938f --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/image-instance-segmentation.ipynb @@ -0,0 +1,745 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Instance-Segmentation Evaluation\n", + "\n", + "This sample shows how use the evaluate a group of models against a given set of metrics for the `image-instance-segmentation` task. \n", + "\n", + "### Evaluation dataset\n", + "We will use the [odfridgeObjectsMask](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip) dataset.\n", + "\n", + "### Model\n", + "The goal of evaluating models is to compare their performance on a variety of metrics. `image-instance-segmentation` is a generic task type. As such, the models you pick to compare must be finetuned for the same scenario. Given that we have the dataset, we would like to look for models finetuned for this specific scenario. We will compare different versions of `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` in this sample, which are available in the `azureml` system registry.\n", + "\n", + "If you'd like to evaluate models that are not in the system registry, you can import those models to your workspace or organization registry and then evaluate them using the approach outlined in this sample. Review the sample notebook for [importing models](../../import/import_model_into_registry.ipynb).\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites\n", + "3. Pick the models to evaluate\n", + "4. Prepare the dataset for fine-tuning the model\n", + "5. Submit the evaluation jobs using the model and data as inputs\n", + "6. Review evaluation metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install azure-ai-ml\n", + "%pip install azure-identity" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace `AML_WORKSPACE_NAME`, `RESOURCE_GROUP` and `SUBSCRIPTION_ID` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-IS-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"SUBSCRIPTION_ID\"\n", + " resource_group = \"RESOURCE_GROUP\"\n", + " workspace_name = \"AML_WORKSPACE_NAME\"\n", + "\n", + " workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + " )\n", + "\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import warnings\n", + "\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_evaluation_cluster_name = \"sample-model-evaluation-compute\"\n", + "\n", + "try:\n", + " model_evaluation_compute = workspace_ml_client.compute.get(\n", + " model_evaluation_cluster_name\n", + " )\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " model_evaluation_compute = AmlCompute(\n", + " name=model_evaluation_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(model_evaluation_compute).result()\n", + "\n", + "compute_instance_type = model_evaluation_compute.size\n", + "print(f\"Instance type: {compute_instance_type}\")\n", + "\n", + "if compute_instance_type != \"STANDARD_NC6S_V3\":\n", + " # Print a warning message if compute type is not 'STANDARD_NC6S_V3', i.e. Single GPU V100\n", + " warning_message = (\n", + " \"Warning! Currently evaluation is only supported on STANDARD_NC6S_V3 compute type.\"\n", + " \" Please change the compute type to STANDARD_NC6S_V3 if you want to run evaluation.\"\n", + " )\n", + " warnings.warn(warning_message, category=Warning)\n", + "# generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below snippet will allow us to query number of GPU's present on the compute. We can use it to set `gpu_per_node` to ensure utilization of all GPUs in the node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is the number of GPUs in a single node of the selected 'vm_size' compute.\n", + "# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train.\n", + "# Setting this to more than the number of GPUs will result in an error.\n", + "gpus_per_node = 1 # default value\n", + "gpu_count_found = False\n", + "ws_computes = workspace_ml_client.compute.list_sizes()\n", + "for ws_compute in ws_computes:\n", + " if ws_compute.name.lower() == model_evaluation_compute.size.lower():\n", + " gpus_per_node = ws_compute.gpus\n", + " print(f\"Number of GPUs in compute {ws_compute.name} are {ws_compute.gpus}\")\n", + "# if gpu_count_found not found, then print an error\n", + "if gpus_per_node > 0:\n", + " gpu_count_found = True\n", + "else:\n", + " gpu_count_found = False\n", + " print(\n", + " f\"No GPUs found in compute. Number of GPUs in compute {model_evaluation_compute.size} 0.\"\n", + " )" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick the models to evaluate\n", + "\n", + "You can evaluate the pretrained models on the repective datasets. Verify that the models selected for evaluation are available in system registry using the below code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "registry_models = [\n", + " {\"name\": \"mask_rcnn_swin-t-p4-w7_fpn_1x_coco\"},\n", + "]\n", + "for model in registry_models:\n", + " all_models = registry_ml_client.models.list(model[\"name\"])\n", + " latest_model = max(all_models, key=lambda x: x.version)\n", + " print(latest_model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this demo notebook, we are using fridge objects dataset. Due to the differences in the labels of the dataset used for pretrained models and that of fridge object dataset, the pretrained models can't be evalauted on the fridge dataset.\n", + "\n", + "Therefore, for the scope of this notebook, we request you to finetune model(s) for fridge objects dataset using [mmdetection-fridgeobjects-instance-segmentation.ipynb](../../finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb). To finetune and register the model(s), you need to run the above notebook upto \"7. Register the fine tuned model with the workspace\" Once you have finetuned and registered the model(s) using above notebook, you can proceed further. \n", + "- Replace `REGISTERED_MODEL_NAME_1/REGISTERED_MODEL_NAME_2` and `REGISTERED_MODEL_VERSION_1/REGISTERED_MODEL_VERSION_2` with that of the registered models from above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetuned_registered_models = [\n", + " {\"name\": \"REGISTERED_MODEL_NAME_1\", \"version\": \"REGISTERED_MODEL_VERSION_1\"},\n", + " {\"name\": \"REGISTERED_MODEL_NAME_2\", \"version\": \"REGISTERED_MODEL_VERSION_2\"},\n", + "]\n", + "\n", + "for model in finetuned_registered_models:\n", + " model = workspace_ml_client.models.get(model[\"name\"], version=model[\"version\"])\n", + " print(model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [odfridgeObjectsMask](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip), a toy dataset called Fridge Objects, which consists of 128 images of 4 labels of beverage container {`can`, `carton`, `milk bottle`, `water bottle`} photos taken on different backgrounds.\n", + "\n", + "All images in this notebook are hosted in [this repository](https://github.com/microsoft/computervision-recipes) and are made available under the [MIT license](https://github.com/microsoft/computervision-recipes/blob/master/LICENSE).\n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"31.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images instance segmentation\",\n", + " name=\"fridge-items-images-instance-segmentation\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "In this example, the fridge object dataset is annotated in Pascal VOC format, where each image corresponds to an xml file. Each xml file contains information on where its corresponding image file is located and also contains information about the bounding boxes and the object labels. \n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. In this example, 20% of the data is kept for validation. For further details on jsonl file used for image classification task in automated ml, please refer to the [data schema documentation for image instance segmentation task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#instance-segmentation)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install pycocotools\n", + "!pip install simplification\n", + "!pip install scikit-image" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "sys.path.insert(0, \"../../../../jobs/automl-standalone-jobs/jsonl-conversion/\")\n", + "from base_jsonl_converter import write_json_lines\n", + "from voc_jsonl_converter import VOCJSONLConverter\n", + "\n", + "base_url = uri_folder_data_asset.path + \"images/\"\n", + "print(base_url)\n", + "converter = VOCJSONLConverter(\n", + " base_url,\n", + " os.path.join(dataset_dir, \"annotations\"),\n", + " mask_dir=os.path.join(dataset_dir, \"segmentation-masks\"),\n", + ")\n", + "jsonl_annotations = os.path.join(dataset_dir, \"annotations_voc.jsonl\")\n", + "write_json_lines(converter, jsonl_annotations)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# # If your COCO segmentation data is encoded in RLE format, it can be converted as follows.\n", + "\n", + "# import sys\n", + "\n", + "# sys.path.insert(0, \"../jsonl-conversion/\")\n", + "# from base_jsonl_converter import write_json_lines\n", + "# from coco_jsonl_converter import COCOJSONLConverter\n", + "\n", + "# base_url = uri_folder_data_asset.path + \"images/\"\n", + "# print(base_url)\n", + "# converter = COCOJSONLConverter(\n", + "# base_url, \"./odFridgeObjectsMask_coco_rle.json\", compressed_rle=True\n", + "# )\n", + "# jsonl_annotations = os.path.join(dataset_dir, \"annotations_coco.jsonl\")\n", + "# write_json_lines(converter, jsonl_annotations)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Now split the annotations into train and validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# We'll copy each JSONL file within its related MLTable folder\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# First, let's create the folders if they don't exist\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the training and validation files\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "with open(jsonl_annotations, \"r\") as annot_f:\n", + " json_lines = annot_f.readlines()\n", + "\n", + "index = 0\n", + "with open(validation_annotations_file, \"w\") as validation_f:\n", + " for json_line in json_lines:\n", + " if index % train_validation_ratio == 0:\n", + " # validation annotation\n", + " validation_f.write(json_line)\n", + " else:\n", + " # train annotation\n", + " pass\n", + " index += 1" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# We'll copy each JSONL file within its related MLTable folder\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# First, let's create the folders if they don't exist\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "# Path to the training and validation files\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "# Save train and validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the evaluation jobs using the model and data as inputs\n", + " \n", + "Create the job that uses the `model_evaluation_pipeline` component. We will submit one job per model. \n", + "\n", + "Note that the metrics that the evaluation jobs need to calculate are specified in the [fridge-eval-config.json](./fridge-eval-config.json) file.\n", + "\n", + "All supported evaluation configurations for `image-instance-segmentation` can be found in [README](./README.md)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# fetch the pipeline component\n", + "pipeline_component_func = registry_ml_client.components.get(\n", + " name=\"model_evaluation_pipeline\", label=\"latest\"\n", + ")\n", + "\n", + "# define the pipeline job\n", + "@pipeline()\n", + "def evaluation_pipeline(mlflow_model):\n", + " evaluation_job = pipeline_component_func(\n", + " # specify the foundation model available in the azureml system registry or a model from the workspace\n", + " # mlflow_model = Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{mlflow_model_path}\"),\n", + " mlflow_model=mlflow_model,\n", + " # test data\n", + " test_data=Input(type=AssetTypes.MLTABLE, path=validation_mltable_path),\n", + " # The following parameters map to the dataset fields\n", + " label_column_name=\"label\",\n", + " input_column_names=\"image_url\",\n", + " # Evaluation settings\n", + " task=\"image-instance-segmentation\",\n", + " # config file containing the details of evaluation metrics to calculate\n", + " evaluation_config=Input(\n", + " type=AssetTypes.URI_FILE, path=\"./fridge-eval-config.json\"\n", + " ),\n", + " # config cluster/device job is running on\n", + " # set device to GPU/CPU on basis if GPU count was found\n", + " compute_name=model_evaluation_cluster_name,\n", + " instance_type=compute_instance_type,\n", + " device=\"gpu\" if gpu_count_found else \"cpu\",\n", + " )\n", + " return {\"evaluation_result\": evaluation_job.outputs.evaluation_result}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Submit the jobs, passing the model as a parameter to the pipeline created in the above step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# submit the pipeline job for each model that we want to evaluate\n", + "# you could consider submitting the pipeline jobs in parallel, provided your cluster has multiple nodes\n", + "pipeline_jobs = []\n", + "\n", + "for model in finetuned_registered_models:\n", + "\n", + " # # For each model, fetch the model object from the registry\n", + " # model_object = registry_ml_client.models.get(\n", + " # model[\"name\"], version=model[\"version\"]\n", + " # )\n", + "\n", + " # Fetch the model from workspace\n", + " model_object = workspace_ml_client.models.get(\n", + " model[\"name\"], version=model[\"version\"]\n", + " )\n", + "\n", + " pipeline_object = evaluation_pipeline(\n", + " mlflow_model=Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{model_object.id}\"),\n", + " )\n", + " # don't reuse cached results from previous jobs\n", + " pipeline_object.settings.force_rerun = True\n", + " pipeline_object.settings.default_compute = model_evaluation_cluster_name\n", + " pipeline_object.display_name = f\"eval-{model['name']}-{timestamp}\"\n", + " pipeline_job = workspace_ml_client.jobs.create_or_update(\n", + " pipeline_object, experiment_name=experiment_name\n", + " )\n", + " # add model['name'] and pipeline_job.name as key value pairs to a dictionary\n", + " pipeline_jobs.append({\"model_name\": model[\"name\"], \"job_name\": pipeline_job.name})\n", + " # wait for the pipeline job to complete\n", + " workspace_ml_client.jobs.stream(pipeline_job.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Review evaluation metrics\n", + "Viewing the job in AzureML studio is the best way to analyze logs, metrics and outputs of jobs. You can create custom charts and compare metics across different jobs. See https://learn.microsoft.com/en-us/azure/machine-learning/how-to-log-view-metrics?tabs=interactive#view-jobsruns-information-in-the-studio to learn more. \n", + "\n", + "However, we may need to access and review metrics programmatically for which we will use MLflow, which is the recommended client for logging and querying metrics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by Azure ML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)\n", + "\n", + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")\n", + "\n", + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.2 Get the evaluation metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "metrics_df = pd.DataFrame()\n", + "\n", + "for job in pipeline_jobs:\n", + " # Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + " filter = \"tags.mlflow.rootRunId='\" + job[\"job_name\"] + \"'\"\n", + " runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + " )\n", + "\n", + " # Get the training and evaluation runs.\n", + " for run in runs:\n", + " # else, check if run.data.metrics.accuracy exists\n", + " if \"mean_average_precision\" in run.data.metrics:\n", + " # get the metrics from the mlflow run\n", + " run_metric = run.data.metrics\n", + " # add the model name to the run_metric dictionary\n", + " run_metric[\"model_name\"] = job[\"model_name\"]\n", + " # convert the run_metric dictionary to a pandas dataframe\n", + " temp_df = pd.DataFrame(run_metric, index=[0])\n", + " # concat the temp_df to the metrics_df\n", + " metrics_df = pd.concat([metrics_df, temp_df], ignore_index=True)\n", + "\n", + "# move the model_name columns to the first column\n", + "cols = metrics_df.columns.tolist()\n", + "cols = cols[-1:] + cols[:-1]\n", + "metrics_df = metrics_df[cols]\n", + "metrics_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco.json b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco.json new file mode 100644 index 0000000000..332d22d94f --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco.json @@ -0,0 +1,32635 @@ +{ + "images": [ + { + "file_name": "1.jpg", + "height": 666, + "width": 499, + "id": "1" + }, + { + "file_name": "2.jpg", + "height": 666, + "width": 499, + "id": "2" + }, + { + "file_name": "3.jpg", + "height": 666, + "width": 499, + "id": "3" + }, + { + "file_name": "4.jpg", + "height": 666, + "width": 499, + "id": "4" + }, + { + "file_name": "5.jpg", + "height": 666, + "width": 499, + "id": "5" + }, + { + "file_name": "6.jpg", + "height": 666, + "width": 499, + "id": "6" + }, + { + "file_name": "7.jpg", + "height": 666, + "width": 499, + "id": "7" + }, + { + "file_name": "8.jpg", + "height": 666, + "width": 499, + "id": "8" + }, + { + "file_name": "9.jpg", + "height": 666, + "width": 499, + "id": "9" + }, + { + "file_name": "10.jpg", + "height": 666, + "width": 499, + "id": "10" + }, + { + "file_name": "11.jpg", + "height": 666, + "width": 499, + "id": "11" + }, + { + "file_name": "12.jpg", + "height": 666, + "width": 499, + "id": "12" + }, + { + "file_name": "13.jpg", + "height": 666, + "width": 499, + "id": "13" + }, + { + "file_name": "14.jpg", + "height": 666, + "width": 499, + "id": "14" + }, + { + "file_name": "15.jpg", + "height": 666, + "width": 499, + "id": "15" + }, + { + "file_name": "16.jpg", + "height": 666, + "width": 499, + "id": "16" + }, + { + "file_name": "17.jpg", + "height": 666, + "width": 499, + "id": "17" + }, + { + "file_name": "18.jpg", + "height": 666, + "width": 499, + "id": "18" + }, + { + "file_name": "19.jpg", + "height": 666, + "width": 499, + "id": "19" + }, + { + "file_name": "20.jpg", + "height": 666, + "width": 499, + "id": "20" + }, + { + "file_name": "21.jpg", + "height": 666, + "width": 499, + "id": "21" + }, + { + "file_name": "22.jpg", + "height": 666, + "width": 499, + "id": "22" + }, + { + "file_name": "23.jpg", + "height": 666, + "width": 499, + "id": "23" + }, + { + "file_name": "24.jpg", + "height": 666, + "width": 499, + "id": "24" + }, + { + "file_name": "25.jpg", + "height": 666, + "width": 499, + "id": "25" + }, + { + "file_name": "26.jpg", + "height": 666, + "width": 499, + "id": "26" + }, + { + "file_name": "27.jpg", + "height": 666, + "width": 499, + "id": "27" + }, + { + "file_name": "28.jpg", + "height": 666, + "width": 499, + "id": "28" + }, + { + "file_name": "29.jpg", + "height": 666, + "width": 499, + "id": "29" + }, + { + "file_name": "30.jpg", + "height": 666, + "width": 499, + "id": "30" + }, + { + "file_name": "31.jpg", + "height": 666, + "width": 499, + "id": "31" + }, + { + "file_name": "32.jpg", + "height": 666, + "width": 499, + "id": "32" + }, + { + "file_name": "33.jpg", + "height": 666, + "width": 499, + "id": "33" + }, + { + "file_name": "34.jpg", + "height": 666, + "width": 499, + "id": "34" + }, + { + "file_name": "35.jpg", + "height": 666, + "width": 499, + "id": "35" + }, + { + "file_name": "36.jpg", + "height": 666, + "width": 499, + "id": "36" + }, + { + "file_name": "37.jpg", + "height": 666, + "width": 499, + "id": "37" + }, + { + "file_name": "38.jpg", + "height": 666, + "width": 499, + "id": "38" + }, + { + "file_name": "39.jpg", + "height": 666, + "width": 499, + "id": "39" + }, + { + "file_name": "40.jpg", + "height": 666, + "width": 499, + "id": "40" + }, + { + "file_name": "41.jpg", + "height": 666, + "width": 499, + "id": "41" + }, + { + "file_name": "42.jpg", + "height": 666, + "width": 499, + "id": "42" + }, + { + "file_name": "43.jpg", + "height": 666, + "width": 499, + "id": "43" + }, + { + "file_name": "44.jpg", + "height": 666, + "width": 499, + "id": "44" + }, + { + "file_name": "45.jpg", + "height": 666, + "width": 499, + "id": "45" + }, + { + "file_name": "46.jpg", + "height": 666, + "width": 499, + "id": "46" + }, + { + "file_name": "47.jpg", + "height": 666, + "width": 499, + "id": "47" + }, + { + "file_name": "48.jpg", + "height": 666, + "width": 499, + "id": "48" + }, + { + "file_name": "49.jpg", + "height": 666, + "width": 499, + "id": "49" + }, + { + "file_name": "50.jpg", + "height": 666, + "width": 499, + "id": "50" + }, + { + "file_name": "51.jpg", + "height": 666, + "width": 499, + "id": "51" + }, + { + "file_name": "52.jpg", + "height": 666, + "width": 499, + "id": "52" + }, + { + "file_name": "53.jpg", + "height": 666, + "width": 499, + "id": "53" + }, + { + "file_name": "54.jpg", + "height": 666, + "width": 499, + "id": "54" + }, + { + "file_name": "55.jpg", + "height": 666, + "width": 499, + "id": "55" + }, + { + "file_name": "56.jpg", + "height": 666, + "width": 499, + "id": "56" + }, + { + "file_name": "57.jpg", + "height": 666, + "width": 499, + "id": "57" + }, + { + "file_name": "58.jpg", + "height": 666, + "width": 499, + "id": "58" + }, + { + "file_name": "59.jpg", + "height": 666, + "width": 499, + "id": "59" + }, + { + "file_name": "60.jpg", + "height": 666, + "width": 499, + "id": "60" + }, + { + "file_name": "61.jpg", + "height": 666, + "width": 499, + "id": "61" + }, + { + "file_name": "62.jpg", + "height": 666, + "width": 499, + "id": "62" + }, + { + "file_name": "63.jpg", + "height": 666, + "width": 499, + "id": "63" + }, + { + "file_name": "64.jpg", + "height": 666, + "width": 499, + "id": "64" + }, + { + "file_name": "65.jpg", + "height": 666, + "width": 499, + "id": "65" + }, + { + "file_name": "66.jpg", + "height": 666, + "width": 499, + "id": "66" + }, + { + "file_name": "67.jpg", + "height": 666, + "width": 499, + "id": "67" + }, + { + "file_name": "68.jpg", + "height": 666, + "width": 499, + "id": "68" + }, + { + "file_name": "69.jpg", + "height": 666, + "width": 499, + "id": "69" + }, + { + "file_name": "70.jpg", + "height": 666, + "width": 499, + "id": "70" + }, + { + "file_name": "71.jpg", + "height": 666, + "width": 499, + "id": "71" + }, + { + "file_name": "72.jpg", + "height": 666, + "width": 499, + "id": "72" + }, + { + "file_name": "73.jpg", + "height": 666, + "width": 499, + "id": "73" + }, + { + "file_name": "74.jpg", + "height": 666, + "width": 499, + "id": "74" + }, + { + "file_name": "75.jpg", + "height": 666, + "width": 499, + "id": "75" + }, + { + "file_name": "76.jpg", + "height": 666, + "width": 499, + "id": "76" + }, + { + "file_name": "77.jpg", + "height": 666, + "width": 499, + "id": "77" + }, + { + "file_name": "78.jpg", + "height": 666, + "width": 499, + "id": "78" + }, + { + "file_name": "79.jpg", + "height": 666, + "width": 499, + "id": "79" + }, + { + "file_name": "80.jpg", + "height": 666, + "width": 499, + "id": "80" + }, + { + "file_name": "81.jpg", + "height": 666, + "width": 499, + "id": "81" + }, + { + "file_name": "82.jpg", + "height": 666, + "width": 499, + "id": "82" + }, + { + "file_name": "83.jpg", + "height": 666, + "width": 499, + "id": "83" + }, + { + "file_name": "84.jpg", + "height": 666, + "width": 499, + "id": "84" + }, + { + "file_name": "85.jpg", + "height": 666, + "width": 499, + "id": "85" + }, + { + "file_name": "86.jpg", + "height": 666, + "width": 499, + "id": "86" + }, + { + "file_name": "87.jpg", + "height": 666, + "width": 499, + "id": "87" + }, + { + "file_name": "88.jpg", + "height": 666, + "width": 499, + "id": "88" + }, + { + "file_name": "89.jpg", + "height": 666, + "width": 499, + "id": "89" + }, + { + "file_name": "90.jpg", + "height": 666, + "width": 499, + "id": "90" + }, + { + "file_name": "91.jpg", + "height": 666, + "width": 499, + "id": "91" + }, + { + "file_name": "92.jpg", + "height": 666, + "width": 499, + "id": "92" + }, + { + "file_name": "93.jpg", + "height": 666, + "width": 499, + "id": "93" + }, + { + "file_name": "94.jpg", + "height": 666, + "width": 499, + "id": "94" + }, + { + "file_name": "95.jpg", + "height": 666, + "width": 499, + "id": "95" + }, + { + "file_name": "96.jpg", + "height": 666, + "width": 499, + "id": "96" + }, + { + "file_name": "97.jpg", + "height": 666, + "width": 499, + "id": "97" + }, + { + "file_name": "98.jpg", + "height": 666, + "width": 499, + "id": "98" + }, + { + "file_name": "99.jpg", + "height": 666, + "width": 499, + "id": "99" + }, + { + "file_name": "100.jpg", + "height": 666, + "width": 499, + "id": "100" + }, + { + "file_name": "101.jpg", + "height": 666, + "width": 499, + "id": "101" + }, + { + "file_name": "102.jpg", + "height": 666, + "width": 499, + "id": "102" + }, + { + "file_name": "103.jpg", + "height": 666, + "width": 499, + "id": "103" + }, + { + "file_name": "104.jpg", + "height": 666, + "width": 499, + "id": "104" + }, + { + "file_name": "105.jpg", + "height": 666, + "width": 499, + "id": "105" + }, + { + "file_name": "106.jpg", + "height": 666, + "width": 499, + "id": "106" + }, + { + "file_name": "107.jpg", + "height": 666, + "width": 499, + "id": "107" + }, + { + "file_name": "108.jpg", + "height": 666, + "width": 499, + "id": "108" + }, + { + "file_name": "109.jpg", + "height": 666, + "width": 499, + "id": "109" + }, + { + "file_name": "110.jpg", + "height": 666, + "width": 499, + "id": "110" + }, + { + "file_name": "111.jpg", + "height": 666, + "width": 499, + "id": "111" + }, + { + "file_name": "112.jpg", + "height": 666, + "width": 499, + "id": "112" + }, + { + "file_name": "113.jpg", + "height": 666, + "width": 499, + "id": "113" + }, + { + "file_name": "114.jpg", + "height": 666, + "width": 499, + "id": "114" + }, + { + "file_name": "115.jpg", + "height": 666, + "width": 499, + "id": "115" + }, + { + "file_name": "116.jpg", + "height": 666, + "width": 499, + "id": "116" + }, + { + "file_name": "117.jpg", + "height": 666, + "width": 499, + "id": "117" + }, + { + "file_name": "118.jpg", + "height": 666, + "width": 499, + "id": "118" + }, + { + "file_name": "119.jpg", + "height": 666, + "width": 499, + "id": "119" + }, + { + "file_name": "120.jpg", + "height": 666, + "width": 499, + "id": "120" + }, + { + "file_name": "121.jpg", + "height": 666, + "width": 499, + "id": "121" + }, + { + "file_name": "122.jpg", + "height": 666, + "width": 499, + "id": "122" + }, + { + "file_name": "123.jpg", + "height": 666, + "width": 499, + "id": "123" + }, + { + "file_name": "124.jpg", + "height": 666, + "width": 499, + "id": "124" + }, + { + "file_name": "125.jpg", + "height": 666, + "width": 499, + "id": "125" + }, + { + "file_name": "126.jpg", + "height": 666, + "width": 499, + "id": "126" + }, + { + "file_name": "127.jpg", + "height": 666, + "width": 499, + "id": "127" + }, + { + "file_name": "128.jpg", + "height": 666, + "width": 499, + "id": "128" + } + ], + "type": "instances", + "annotations": [ + { + "area": 46766, + "iscrowd": 0, + "bbox": [ + 100, + 173, + 133, + 348 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 138, + 519, + 136, + 517, + 116, + 467, + 115, + 418, + 111, + 372, + 110, + 319, + 107, + 295, + 105, + 250, + 102, + 228, + 105, + 224, + 110, + 209, + 110, + 182, + 113, + 176, + 162, + 176, + 209, + 178, + 212, + 179, + 215, + 182, + 216, + 207, + 230, + 230, + 234, + 240, + 231, + 339, + 231, + 495, + 226, + 498, + 209, + 501, + 186, + 508, + 176, + 509, + 170, + 512, + 165, + 512, + 138, + 519 + ] + ], + "image_id": "1", + "id": 1 + }, + { + "area": 32918, + "iscrowd": 0, + "bbox": [ + 247, + 192, + 108, + 301 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 306, + 489, + 291, + 489, + 283, + 486, + 274, + 485, + 257, + 472, + 250, + 458, + 249, + 398, + 251, + 380, + 254, + 372, + 254, + 338, + 252, + 329, + 249, + 324, + 248, + 307, + 250, + 296, + 254, + 286, + 268, + 266, + 269, + 250, + 264, + 243, + 261, + 232, + 269, + 226, + 270, + 203, + 277, + 196, + 293, + 193, + 321, + 194, + 331, + 196, + 339, + 201, + 339, + 225, + 346, + 231, + 346, + 238, + 340, + 245, + 338, + 251, + 338, + 266, + 351, + 291, + 354, + 306, + 354, + 322, + 349, + 333, + 344, + 355, + 345, + 386, + 348, + 393, + 348, + 412, + 344, + 449, + 344, + 462, + 340, + 472, + 332, + 480, + 318, + 487, + 306, + 489 + ] + ], + "image_id": "2", + "id": 2 + }, + { + "area": 28500, + "iscrowd": 0, + "bbox": [ + 259, + 231, + 124, + 227 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 323, + 455, + 312, + 455, + 290, + 450, + 272, + 438, + 262, + 422, + 264, + 271, + 265, + 267, + 276, + 252, + 276, + 241, + 283, + 236, + 303, + 232, + 335, + 232, + 365, + 237, + 375, + 242, + 373, + 252, + 383, + 272, + 382, + 293, + 380, + 300, + 375, + 345, + 375, + 360, + 370, + 399, + 368, + 430, + 359, + 440, + 350, + 446, + 323, + 455 + ] + ], + "image_id": "3", + "id": 3 + }, + { + "area": 58000, + "iscrowd": 0, + "bbox": [ + 245, + 119, + 144, + 399 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 324, + 515, + 316, + 513, + 312, + 508, + 309, + 495, + 307, + 496, + 307, + 499, + 304, + 502, + 304, + 506, + 296, + 513, + 289, + 513, + 277, + 507, + 271, + 495, + 269, + 494, + 262, + 493, + 258, + 487, + 250, + 467, + 249, + 455, + 252, + 343, + 252, + 285, + 255, + 272, + 262, + 258, + 278, + 240, + 283, + 225, + 288, + 187, + 290, + 178, + 293, + 173, + 293, + 162, + 291, + 158, + 292, + 130, + 296, + 124, + 311, + 122, + 336, + 122, + 352, + 124, + 364, + 126, + 369, + 129, + 366, + 160, + 360, + 166, + 360, + 173, + 363, + 180, + 364, + 231, + 368, + 244, + 375, + 254, + 386, + 277, + 385, + 319, + 381, + 338, + 380, + 354, + 377, + 363, + 370, + 426, + 370, + 441, + 364, + 476, + 350, + 497, + 345, + 498, + 343, + 502, + 332, + 512, + 324, + 515 + ] + ], + "image_id": "4", + "id": 4 + }, + { + "area": 44132, + "iscrowd": 0, + "bbox": [ + 39, + 278, + 373, + 117 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 198, + 395, + 183, + 395, + 170, + 392, + 159, + 387, + 148, + 378, + 137, + 373, + 111, + 369, + 95, + 369, + 83, + 365, + 81, + 365, + 78, + 369, + 49, + 368, + 46, + 364, + 42, + 355, + 40, + 339, + 42, + 320, + 45, + 313, + 47, + 311, + 55, + 308, + 78, + 308, + 80, + 311, + 84, + 311, + 90, + 308, + 100, + 306, + 119, + 306, + 134, + 303, + 141, + 300, + 152, + 291, + 170, + 281, + 191, + 278, + 349, + 278, + 384, + 284, + 396, + 289, + 402, + 293, + 405, + 300, + 405, + 307, + 401, + 315, + 410, + 321, + 412, + 325, + 412, + 335, + 409, + 341, + 404, + 343, + 400, + 347, + 406, + 351, + 409, + 358, + 409, + 362, + 401, + 376, + 382, + 387, + 362, + 392, + 241, + 393, + 198, + 395 + ] + ], + "image_id": "5", + "id": 5 + }, + { + "area": 30380, + "iscrowd": 0, + "bbox": [ + 125, + 316, + 244, + 123 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 343, + 438, + 168, + 437, + 158, + 433, + 145, + 425, + 135, + 426, + 132, + 421, + 128, + 394, + 129, + 350, + 133, + 332, + 138, + 327, + 142, + 329, + 147, + 329, + 160, + 320, + 166, + 318, + 342, + 317, + 353, + 329, + 357, + 330, + 362, + 339, + 364, + 346, + 364, + 363, + 367, + 386, + 367, + 398, + 363, + 419, + 360, + 423, + 355, + 424, + 348, + 436, + 343, + 438 + ] + ], + "image_id": "6", + "id": 6 + }, + { + "area": 39195, + "iscrowd": 0, + "bbox": [ + 86, + 298, + 334, + 116 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 301, + 410, + 285, + 410, + 277, + 407, + 254, + 403, + 220, + 404, + 216, + 406, + 209, + 406, + 193, + 410, + 106, + 409, + 102, + 407, + 97, + 400, + 91, + 383, + 89, + 367, + 89, + 348, + 92, + 324, + 95, + 315, + 102, + 305, + 110, + 301, + 192, + 300, + 226, + 307, + 256, + 307, + 281, + 301, + 293, + 300, + 306, + 301, + 321, + 307, + 344, + 320, + 360, + 320, + 368, + 316, + 370, + 313, + 376, + 313, + 385, + 320, + 390, + 320, + 393, + 322, + 406, + 322, + 412, + 325, + 417, + 336, + 417, + 342, + 419, + 347, + 419, + 367, + 418, + 373, + 410, + 388, + 389, + 388, + 381, + 396, + 374, + 396, + 364, + 390, + 359, + 389, + 345, + 389, + 322, + 404, + 301, + 410 + ] + ], + "image_id": "7", + "id": 7 + }, + { + "area": 60514, + "iscrowd": 0, + "bbox": [ + 47, + 280, + 382, + 157 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 409, + 435, + 106, + 434, + 93, + 417, + 90, + 408, + 85, + 402, + 75, + 403, + 71, + 399, + 68, + 399, + 65, + 396, + 55, + 341, + 55, + 333, + 49, + 307, + 52, + 303, + 60, + 305, + 78, + 304, + 104, + 288, + 117, + 282, + 398, + 282, + 407, + 296, + 424, + 334, + 427, + 337, + 423, + 368, + 421, + 374, + 421, + 387, + 419, + 389, + 419, + 395, + 413, + 422, + 413, + 430, + 412, + 433, + 409, + 435 + ] + ], + "image_id": "8", + "id": 8 + }, + { + "area": 41538, + "iscrowd": 0, + "bbox": [ + 80, + 157, + 128, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 117, + 476, + 110, + 476, + 109, + 474, + 108, + 458, + 101, + 412, + 97, + 373, + 94, + 306, + 89, + 271, + 87, + 244, + 84, + 230, + 84, + 186, + 82, + 161, + 87, + 156, + 123, + 156, + 144, + 158, + 180, + 157, + 187, + 159, + 190, + 161, + 189, + 190, + 191, + 193, + 197, + 220, + 199, + 223, + 200, + 356, + 204, + 460, + 202, + 463, + 117, + 476 + ] + ], + "image_id": "9", + "id": 9 + }, + { + "area": 23520, + "iscrowd": 0, + "bbox": [ + 299, + 220, + 95, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 352, + 462, + 338, + 462, + 321, + 458, + 310, + 451, + 301, + 437, + 302, + 381, + 308, + 360, + 308, + 334, + 305, + 322, + 305, + 309, + 311, + 292, + 317, + 286, + 323, + 275, + 323, + 265, + 319, + 256, + 319, + 250, + 325, + 244, + 327, + 227, + 332, + 223, + 345, + 220, + 374, + 222, + 380, + 225, + 383, + 228, + 383, + 246, + 387, + 250, + 388, + 256, + 381, + 265, + 380, + 276, + 390, + 297, + 393, + 311, + 392, + 329, + 388, + 335, + 387, + 342, + 384, + 348, + 384, + 377, + 386, + 393, + 383, + 408, + 380, + 444, + 374, + 453, + 360, + 461, + 352, + 462 + ] + ], + "image_id": "9", + "id": 10 + }, + { + "area": 44278, + "iscrowd": 0, + "bbox": [ + 86, + 102, + 130, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 120, + 438, + 117, + 436, + 115, + 431, + 105, + 341, + 101, + 269, + 91, + 178, + 92, + 161, + 90, + 111, + 93, + 106, + 99, + 104, + 198, + 108, + 204, + 113, + 203, + 145, + 207, + 166, + 211, + 175, + 211, + 379, + 171, + 379, + 167, + 381, + 160, + 390, + 154, + 416, + 153, + 432, + 120, + 438 + ] + ], + "image_id": "10", + "id": 11 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 150, + 377, + 295, + 113 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 337, + 488, + 317, + 487, + 310, + 483, + 286, + 478, + 259, + 478, + 252, + 480, + 231, + 481, + 219, + 479, + 198, + 479, + 179, + 476, + 167, + 476, + 161, + 474, + 156, + 467, + 153, + 458, + 152, + 442, + 154, + 420, + 160, + 397, + 160, + 392, + 163, + 386, + 172, + 379, + 189, + 379, + 248, + 383, + 257, + 385, + 265, + 389, + 280, + 391, + 306, + 391, + 318, + 388, + 332, + 388, + 351, + 393, + 373, + 408, + 379, + 410, + 390, + 410, + 399, + 405, + 404, + 404, + 407, + 405, + 414, + 412, + 431, + 413, + 437, + 416, + 440, + 421, + 442, + 430, + 443, + 449, + 441, + 462, + 434, + 474, + 415, + 473, + 412, + 475, + 411, + 478, + 407, + 480, + 402, + 480, + 388, + 472, + 376, + 472, + 364, + 477, + 355, + 483, + 337, + 488 + ] + ], + "image_id": "10", + "id": 12 + }, + { + "area": 56518, + "iscrowd": 0, + "bbox": [ + 56, + 148, + 153, + 366 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 110, + 511, + 101, + 511, + 99, + 508, + 99, + 496, + 85, + 409, + 77, + 348, + 60, + 243, + 57, + 234, + 59, + 217, + 58, + 155, + 62, + 151, + 70, + 149, + 179, + 149, + 184, + 153, + 185, + 201, + 188, + 216, + 193, + 226, + 194, + 274, + 200, + 378, + 203, + 388, + 204, + 406, + 204, + 454, + 206, + 465, + 207, + 493, + 205, + 496, + 202, + 497, + 169, + 500, + 150, + 505, + 127, + 507, + 110, + 511 + ] + ], + "image_id": "11", + "id": 13 + }, + { + "area": 39406, + "iscrowd": 0, + "bbox": [ + 328, + 180, + 121, + 322 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 381, + 500, + 373, + 500, + 367, + 498, + 362, + 492, + 362, + 489, + 359, + 486, + 353, + 489, + 347, + 487, + 340, + 478, + 334, + 462, + 331, + 435, + 334, + 380, + 334, + 319, + 338, + 299, + 345, + 287, + 356, + 276, + 360, + 267, + 368, + 227, + 371, + 220, + 371, + 216, + 369, + 213, + 370, + 188, + 375, + 184, + 380, + 183, + 414, + 183, + 428, + 186, + 431, + 188, + 432, + 192, + 430, + 215, + 426, + 219, + 426, + 226, + 428, + 229, + 429, + 268, + 431, + 277, + 446, + 296, + 448, + 305, + 448, + 321, + 445, + 337, + 444, + 355, + 431, + 459, + 425, + 469, + 423, + 476, + 421, + 477, + 420, + 482, + 411, + 494, + 404, + 498, + 399, + 498, + 393, + 494, + 390, + 489, + 381, + 500 + ] + ], + "image_id": "11", + "id": 14 + }, + { + "area": 53067, + "iscrowd": 0, + "bbox": [ + 51, + 107, + 146, + 360 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 95, + 463, + 94, + 461, + 90, + 436, + 67, + 274, + 53, + 191, + 53, + 116, + 54, + 112, + 58, + 108, + 173, + 110, + 179, + 116, + 177, + 151, + 180, + 160, + 182, + 174, + 186, + 183, + 188, + 267, + 193, + 342, + 195, + 404, + 136, + 405, + 119, + 410, + 103, + 425, + 101, + 432, + 101, + 440, + 109, + 449, + 102, + 451, + 97, + 456, + 95, + 463 + ] + ], + "image_id": "12", + "id": 15 + }, + { + "area": 44764, + "iscrowd": 0, + "bbox": [ + 94, + 402, + 360, + 123 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 323, + 523, + 145, + 519, + 130, + 514, + 113, + 511, + 102, + 503, + 99, + 495, + 99, + 489, + 104, + 479, + 98, + 475, + 96, + 470, + 97, + 457, + 102, + 452, + 110, + 449, + 101, + 437, + 103, + 427, + 107, + 421, + 110, + 420, + 115, + 414, + 121, + 410, + 140, + 405, + 304, + 406, + 318, + 407, + 329, + 411, + 339, + 417, + 351, + 427, + 363, + 431, + 379, + 433, + 389, + 436, + 403, + 437, + 409, + 440, + 411, + 440, + 414, + 437, + 437, + 437, + 445, + 442, + 449, + 451, + 451, + 461, + 451, + 486, + 444, + 496, + 422, + 497, + 416, + 496, + 414, + 493, + 410, + 493, + 402, + 497, + 377, + 498, + 358, + 501, + 342, + 514, + 334, + 519, + 331, + 519, + 323, + 523 + ] + ], + "image_id": "12", + "id": 16 + }, + { + "area": 50410, + "iscrowd": 0, + "bbox": [ + 89, + 121, + 141, + 354 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 130, + 472, + 127, + 472, + 125, + 468, + 115, + 392, + 102, + 268, + 94, + 209, + 92, + 204, + 93, + 154, + 91, + 128, + 95, + 124, + 108, + 123, + 205, + 124, + 208, + 125, + 211, + 129, + 210, + 160, + 212, + 161, + 214, + 167, + 214, + 176, + 220, + 193, + 220, + 261, + 223, + 334, + 224, + 433, + 226, + 456, + 224, + 458, + 216, + 458, + 130, + 472 + ] + ], + "image_id": "13", + "id": 17 + }, + { + "area": 20370, + "iscrowd": 0, + "bbox": [ + 273, + 278, + 104, + 193 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 327, + 468, + 314, + 468, + 297, + 462, + 278, + 448, + 276, + 445, + 275, + 441, + 275, + 316, + 280, + 305, + 285, + 299, + 284, + 291, + 285, + 289, + 302, + 281, + 317, + 279, + 329, + 279, + 351, + 283, + 365, + 290, + 368, + 294, + 366, + 303, + 375, + 317, + 363, + 444, + 358, + 453, + 350, + 460, + 340, + 463, + 336, + 466, + 327, + 468 + ] + ], + "image_id": "13", + "id": 18 + }, + { + "area": 76368, + "iscrowd": 0, + "bbox": [ + 62, + 323, + 343, + 221 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 320, + 539, + 312, + 539, + 308, + 536, + 299, + 534, + 275, + 523, + 153, + 474, + 118, + 462, + 99, + 453, + 88, + 450, + 84, + 447, + 78, + 446, + 76, + 441, + 70, + 388, + 65, + 363, + 74, + 357, + 110, + 338, + 113, + 335, + 119, + 333, + 125, + 328, + 132, + 326, + 158, + 334, + 164, + 334, + 172, + 338, + 186, + 342, + 215, + 348, + 269, + 364, + 360, + 388, + 368, + 400, + 376, + 423, + 380, + 427, + 393, + 429, + 404, + 437, + 400, + 457, + 400, + 467, + 393, + 497, + 393, + 507, + 391, + 516, + 387, + 520, + 382, + 521, + 370, + 516, + 360, + 515, + 347, + 525, + 335, + 531, + 332, + 534, + 320, + 539 + ] + ], + "image_id": "14", + "id": 19 + }, + { + "area": 18564, + "iscrowd": 0, + "bbox": [ + 320, + 268, + 101, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 397, + 431, + 393, + 428, + 380, + 426, + 377, + 423, + 370, + 402, + 364, + 390, + 360, + 387, + 321, + 376, + 325, + 301, + 328, + 294, + 335, + 286, + 335, + 279, + 341, + 273, + 353, + 270, + 380, + 270, + 393, + 272, + 406, + 278, + 414, + 285, + 412, + 293, + 419, + 305, + 418, + 320, + 416, + 324, + 412, + 358, + 403, + 407, + 402, + 421, + 397, + 431 + ] + ], + "image_id": "14", + "id": 20 + }, + { + "area": 42828, + "iscrowd": 0, + "bbox": [ + 95, + 140, + 128, + 331 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 173, + 466, + 153, + 466, + 144, + 464, + 127, + 455, + 119, + 443, + 112, + 383, + 110, + 377, + 111, + 320, + 99, + 289, + 97, + 265, + 101, + 248, + 113, + 222, + 113, + 211, + 110, + 206, + 110, + 203, + 104, + 197, + 101, + 189, + 102, + 185, + 109, + 177, + 107, + 153, + 111, + 147, + 121, + 144, + 142, + 142, + 171, + 142, + 175, + 143, + 183, + 148, + 186, + 176, + 192, + 180, + 196, + 185, + 195, + 191, + 189, + 203, + 190, + 218, + 206, + 243, + 214, + 267, + 214, + 284, + 210, + 294, + 209, + 305, + 209, + 326, + 218, + 366, + 219, + 427, + 217, + 437, + 204, + 453, + 185, + 463, + 180, + 463, + 178, + 465, + 173, + 466 + ] + ], + "image_id": "15", + "id": 21 + }, + { + "area": 33499, + "iscrowd": 0, + "bbox": [ + 289, + 248, + 138, + 240 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 356, + 484, + 334, + 482, + 312, + 471, + 299, + 459, + 294, + 451, + 292, + 444, + 297, + 293, + 300, + 286, + 310, + 273, + 310, + 263, + 313, + 259, + 320, + 255, + 350, + 249, + 384, + 252, + 409, + 260, + 417, + 267, + 417, + 275, + 415, + 281, + 421, + 290, + 424, + 299, + 424, + 315, + 403, + 443, + 402, + 457, + 396, + 467, + 384, + 477, + 369, + 482, + 356, + 484 + ] + ], + "image_id": "15", + "id": 22 + }, + { + "area": 30520, + "iscrowd": 0, + "bbox": [ + 120, + 185, + 108, + 279 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 139, + 447, + 136, + 446, + 130, + 398, + 132, + 341, + 131, + 334, + 125, + 322, + 122, + 310, + 123, + 286, + 137, + 258, + 136, + 244, + 129, + 234, + 128, + 225, + 134, + 219, + 133, + 196, + 135, + 194, + 141, + 190, + 156, + 187, + 182, + 187, + 195, + 191, + 201, + 196, + 202, + 218, + 207, + 221, + 210, + 225, + 210, + 233, + 205, + 238, + 204, + 242, + 204, + 253, + 207, + 261, + 219, + 278, + 223, + 290, + 224, + 312, + 222, + 321, + 220, + 323, + 220, + 359, + 224, + 370, + 225, + 404, + 161, + 426, + 152, + 431, + 145, + 440, + 145, + 442, + 139, + 447 + ] + ], + "image_id": "16", + "id": 23 + }, + { + "area": 38420, + "iscrowd": 0, + "bbox": [ + 127, + 379, + 225, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 164, + 544, + 161, + 544, + 154, + 536, + 143, + 517, + 135, + 495, + 129, + 461, + 130, + 451, + 135, + 447, + 142, + 446, + 152, + 432, + 176, + 421, + 220, + 408, + 280, + 388, + 296, + 381, + 305, + 382, + 312, + 386, + 336, + 408, + 343, + 419, + 348, + 434, + 347, + 457, + 344, + 469, + 336, + 478, + 231, + 526, + 214, + 532, + 196, + 542, + 169, + 539, + 168, + 542, + 164, + 544 + ] + ], + "image_id": "16", + "id": 24 + }, + { + "area": 43400, + "iscrowd": 0, + "bbox": [ + 95, + 156, + 123, + 349 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 156, + 502, + 148, + 502, + 141, + 500, + 132, + 489, + 125, + 487, + 117, + 475, + 112, + 464, + 110, + 430, + 105, + 399, + 101, + 341, + 97, + 312, + 98, + 286, + 103, + 274, + 114, + 262, + 118, + 245, + 118, + 213, + 121, + 204, + 121, + 195, + 117, + 190, + 116, + 185, + 116, + 163, + 121, + 160, + 139, + 158, + 172, + 159, + 180, + 161, + 182, + 167, + 183, + 193, + 179, + 195, + 179, + 198, + 183, + 206, + 190, + 250, + 196, + 261, + 206, + 272, + 215, + 295, + 215, + 463, + 207, + 479, + 203, + 483, + 197, + 484, + 191, + 494, + 187, + 497, + 180, + 499, + 179, + 501, + 174, + 500, + 167, + 489, + 167, + 486, + 163, + 484, + 163, + 492, + 156, + 502 + ] + ], + "image_id": "17", + "id": 25 + }, + { + "area": 34384, + "iscrowd": 0, + "bbox": [ + 228, + 196, + 111, + 306 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 290, + 497, + 273, + 497, + 253, + 491, + 245, + 486, + 236, + 476, + 230, + 464, + 231, + 396, + 237, + 375, + 237, + 345, + 232, + 328, + 231, + 316, + 233, + 303, + 237, + 292, + 241, + 284, + 248, + 276, + 252, + 267, + 252, + 254, + 247, + 247, + 245, + 237, + 246, + 233, + 253, + 228, + 254, + 206, + 264, + 201, + 278, + 199, + 297, + 199, + 309, + 201, + 317, + 203, + 323, + 207, + 323, + 233, + 325, + 234, + 330, + 239, + 330, + 245, + 321, + 258, + 321, + 271, + 329, + 290, + 333, + 295, + 337, + 312, + 335, + 334, + 331, + 341, + 329, + 354, + 327, + 357, + 327, + 388, + 329, + 393, + 330, + 416, + 327, + 438, + 325, + 472, + 320, + 481, + 312, + 486, + 310, + 489, + 290, + 497 + ] + ], + "image_id": "17", + "id": 26 + }, + { + "area": 31414, + "iscrowd": 0, + "bbox": [ + 65, + 180, + 112, + 277 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 123, + 455, + 107, + 452, + 95, + 445, + 90, + 438, + 83, + 399, + 83, + 389, + 79, + 376, + 80, + 329, + 68, + 303, + 67, + 279, + 79, + 253, + 79, + 238, + 71, + 229, + 68, + 222, + 68, + 220, + 74, + 214, + 74, + 190, + 77, + 187, + 82, + 185, + 88, + 185, + 97, + 182, + 123, + 182, + 130, + 183, + 137, + 187, + 141, + 208, + 149, + 215, + 149, + 221, + 144, + 232, + 144, + 241, + 148, + 249, + 159, + 262, + 166, + 276, + 168, + 287, + 167, + 307, + 165, + 314, + 165, + 331, + 166, + 340, + 169, + 345, + 173, + 361, + 174, + 381, + 172, + 383, + 153, + 387, + 147, + 392, + 146, + 410, + 148, + 414, + 143, + 419, + 143, + 437, + 150, + 444, + 141, + 452, + 123, + 455 + ] + ], + "image_id": "18", + "id": 27 + }, + { + "area": 40014, + "iscrowd": 0, + "bbox": [ + 141, + 375, + 341, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 350, + 488, + 181, + 487, + 159, + 481, + 152, + 476, + 144, + 463, + 145, + 450, + 151, + 444, + 144, + 437, + 143, + 433, + 143, + 421, + 149, + 414, + 146, + 408, + 148, + 392, + 151, + 389, + 156, + 387, + 180, + 381, + 187, + 381, + 200, + 378, + 345, + 378, + 362, + 383, + 380, + 396, + 394, + 401, + 431, + 405, + 437, + 408, + 440, + 405, + 465, + 405, + 468, + 406, + 474, + 412, + 478, + 423, + 479, + 443, + 478, + 451, + 474, + 457, + 469, + 461, + 445, + 461, + 441, + 458, + 437, + 458, + 435, + 460, + 424, + 460, + 406, + 464, + 393, + 465, + 386, + 468, + 368, + 483, + 350, + 488 + ] + ], + "image_id": "18", + "id": 28 + }, + { + "area": 45666, + "iscrowd": 0, + "bbox": [ + 122, + 150, + 128, + 353 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 196, + 502, + 188, + 502, + 182, + 500, + 176, + 491, + 173, + 491, + 172, + 493, + 163, + 492, + 154, + 482, + 148, + 469, + 143, + 451, + 129, + 326, + 125, + 303, + 129, + 279, + 138, + 264, + 143, + 259, + 145, + 251, + 145, + 208, + 148, + 193, + 143, + 189, + 141, + 158, + 149, + 155, + 164, + 153, + 198, + 153, + 206, + 155, + 208, + 160, + 210, + 183, + 210, + 187, + 206, + 190, + 206, + 193, + 208, + 200, + 210, + 202, + 210, + 208, + 219, + 248, + 221, + 253, + 234, + 267, + 239, + 275, + 243, + 284, + 245, + 294, + 245, + 353, + 249, + 438, + 247, + 458, + 237, + 475, + 236, + 481, + 230, + 489, + 224, + 493, + 217, + 494, + 213, + 492, + 208, + 485, + 206, + 494, + 199, + 501, + 196, + 502 + ] + ], + "image_id": "19", + "id": 29 + }, + { + "area": 29056, + "iscrowd": 0, + "bbox": [ + 284, + 286, + 127, + 226 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 351, + 508, + 331, + 507, + 306, + 496, + 295, + 485, + 290, + 477, + 288, + 469, + 290, + 328, + 302, + 313, + 301, + 304, + 306, + 296, + 318, + 291, + 339, + 288, + 351, + 288, + 371, + 291, + 390, + 298, + 396, + 302, + 400, + 306, + 401, + 313, + 399, + 318, + 408, + 332, + 408, + 349, + 397, + 426, + 391, + 483, + 388, + 490, + 379, + 499, + 366, + 505, + 355, + 506, + 351, + 508 + ] + ], + "image_id": "19", + "id": 30 + }, + { + "area": 68482, + "iscrowd": 0, + "bbox": [ + 74, + 358, + 352, + 193 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 403, + 545, + 373, + 534, + 370, + 528, + 351, + 527, + 317, + 518, + 302, + 517, + 288, + 524, + 275, + 527, + 258, + 524, + 243, + 518, + 239, + 518, + 235, + 514, + 216, + 508, + 149, + 479, + 115, + 466, + 107, + 459, + 92, + 451, + 80, + 437, + 77, + 429, + 77, + 424, + 85, + 415, + 78, + 403, + 82, + 390, + 86, + 386, + 98, + 383, + 96, + 377, + 97, + 371, + 105, + 364, + 115, + 361, + 152, + 362, + 268, + 395, + 277, + 399, + 282, + 399, + 291, + 404, + 299, + 406, + 311, + 414, + 319, + 422, + 326, + 435, + 337, + 444, + 366, + 457, + 387, + 470, + 391, + 467, + 395, + 469, + 400, + 469, + 410, + 474, + 419, + 476, + 423, + 479, + 423, + 491, + 420, + 499, + 420, + 506, + 415, + 524, + 410, + 534, + 409, + 540, + 403, + 545 + ] + ], + "image_id": "20", + "id": 31 + }, + { + "area": 24600, + "iscrowd": 0, + "bbox": [ + 324, + 247, + 119, + 204 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 384, + 450, + 374, + 450, + 357, + 446, + 338, + 434, + 327, + 422, + 325, + 416, + 329, + 353, + 329, + 321, + 333, + 283, + 336, + 277, + 343, + 270, + 344, + 259, + 347, + 256, + 353, + 253, + 370, + 249, + 394, + 249, + 404, + 252, + 415, + 253, + 425, + 257, + 436, + 265, + 436, + 271, + 434, + 276, + 441, + 287, + 442, + 293, + 435, + 346, + 431, + 363, + 429, + 386, + 421, + 429, + 418, + 434, + 407, + 444, + 396, + 448, + 384, + 450 + ] + ], + "image_id": "20", + "id": 32 + }, + { + "area": 47696, + "iscrowd": 0, + "bbox": [ + 4, + 339, + 270, + 175 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 244, + 511, + 238, + 510, + 226, + 504, + 218, + 499, + 214, + 494, + 208, + 494, + 207, + 492, + 203, + 492, + 179, + 483, + 172, + 482, + 166, + 485, + 152, + 488, + 140, + 487, + 132, + 484, + 28, + 424, + 12, + 407, + 8, + 397, + 9, + 391, + 14, + 387, + 14, + 385, + 9, + 380, + 8, + 376, + 12, + 364, + 16, + 360, + 28, + 359, + 27, + 350, + 29, + 347, + 37, + 342, + 69, + 342, + 82, + 346, + 109, + 359, + 145, + 372, + 186, + 390, + 197, + 400, + 205, + 414, + 207, + 422, + 238, + 444, + 243, + 443, + 246, + 446, + 251, + 447, + 265, + 454, + 270, + 460, + 271, + 466, + 265, + 490, + 255, + 504, + 244, + 511 + ] + ], + "image_id": "21", + "id": 33 + }, + { + "area": 54812, + "iscrowd": 0, + "bbox": [ + 157, + 275, + 283, + 192 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 360, + 462, + 349, + 462, + 346, + 459, + 248, + 410, + 166, + 371, + 164, + 365, + 161, + 299, + 216, + 277, + 277, + 296, + 343, + 319, + 409, + 339, + 416, + 357, + 416, + 367, + 429, + 371, + 436, + 376, + 439, + 381, + 424, + 454, + 420, + 458, + 415, + 458, + 410, + 454, + 402, + 451, + 392, + 451, + 382, + 456, + 375, + 457, + 370, + 460, + 362, + 460, + 360, + 462 + ] + ], + "image_id": "21", + "id": 34 + }, + { + "area": 67144, + "iscrowd": 0, + "bbox": [ + 22, + 276, + 307, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 94, + 490, + 42, + 437, + 38, + 411, + 32, + 391, + 30, + 375, + 26, + 361, + 25, + 345, + 26, + 344, + 156, + 308, + 202, + 293, + 217, + 290, + 230, + 285, + 239, + 284, + 251, + 279, + 290, + 284, + 302, + 284, + 307, + 281, + 313, + 281, + 315, + 282, + 313, + 294, + 317, + 298, + 316, + 312, + 317, + 314, + 323, + 314, + 324, + 317, + 322, + 346, + 319, + 351, + 312, + 351, + 311, + 380, + 309, + 382, + 232, + 419, + 156, + 457, + 155, + 459, + 149, + 462, + 140, + 465, + 102, + 484, + 94, + 490 + ] + ], + "image_id": "22", + "id": 35 + }, + { + "area": 31647, + "iscrowd": 0, + "bbox": [ + 314, + 258, + 136, + 230 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 386, + 485, + 365, + 484, + 346, + 478, + 324, + 459, + 317, + 447, + 325, + 303, + 328, + 295, + 338, + 282, + 338, + 270, + 339, + 268, + 346, + 264, + 375, + 259, + 405, + 261, + 434, + 270, + 442, + 277, + 439, + 289, + 444, + 295, + 448, + 305, + 448, + 314, + 446, + 320, + 441, + 359, + 424, + 460, + 420, + 469, + 415, + 474, + 408, + 478, + 395, + 481, + 386, + 485 + ] + ], + "image_id": "22", + "id": 36 + }, + { + "area": 51379, + "iscrowd": 0, + "bbox": [ + 49, + 282, + 268, + 190 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 112, + 469, + 109, + 468, + 97, + 453, + 67, + 425, + 58, + 378, + 52, + 355, + 53, + 348, + 93, + 334, + 153, + 316, + 249, + 283, + 279, + 288, + 289, + 288, + 297, + 285, + 301, + 285, + 303, + 286, + 303, + 291, + 301, + 295, + 301, + 301, + 303, + 303, + 303, + 313, + 308, + 315, + 313, + 323, + 314, + 340, + 311, + 346, + 307, + 348, + 300, + 348, + 299, + 349, + 299, + 366, + 298, + 374, + 296, + 376, + 208, + 419, + 173, + 438, + 119, + 464, + 112, + 469 + ] + ], + "image_id": "23", + "id": 37 + }, + { + "area": 37260, + "iscrowd": 0, + "bbox": [ + 255, + 328, + 206, + 179 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 296, + 503, + 288, + 503, + 280, + 499, + 269, + 488, + 260, + 472, + 258, + 457, + 263, + 447, + 270, + 442, + 273, + 433, + 277, + 428, + 279, + 428, + 282, + 425, + 295, + 423, + 295, + 416, + 299, + 406, + 308, + 394, + 323, + 383, + 344, + 377, + 361, + 357, + 367, + 352, + 371, + 351, + 394, + 335, + 401, + 332, + 410, + 330, + 425, + 332, + 437, + 338, + 445, + 345, + 453, + 355, + 458, + 369, + 456, + 386, + 451, + 394, + 415, + 427, + 403, + 432, + 394, + 439, + 377, + 463, + 358, + 474, + 348, + 476, + 334, + 476, + 331, + 487, + 322, + 495, + 307, + 496, + 305, + 499, + 296, + 503 + ] + ], + "image_id": "23", + "id": 38 + }, + { + "area": 45108, + "iscrowd": 0, + "bbox": [ + 142, + 156, + 125, + 357 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 214, + 508, + 200, + 508, + 196, + 504, + 191, + 497, + 180, + 500, + 169, + 488, + 163, + 477, + 161, + 470, + 155, + 422, + 153, + 381, + 149, + 338, + 146, + 323, + 146, + 303, + 148, + 291, + 156, + 276, + 164, + 267, + 168, + 256, + 168, + 217, + 171, + 201, + 167, + 197, + 166, + 166, + 179, + 162, + 209, + 161, + 225, + 163, + 231, + 165, + 233, + 196, + 228, + 200, + 230, + 203, + 235, + 228, + 238, + 253, + 241, + 262, + 255, + 281, + 262, + 295, + 263, + 301, + 262, + 459, + 253, + 479, + 253, + 482, + 247, + 493, + 238, + 501, + 231, + 501, + 227, + 497, + 224, + 493, + 222, + 493, + 221, + 499, + 214, + 508 + ] + ], + "image_id": "24", + "id": 39 + }, + { + "area": 28785, + "iscrowd": 0, + "bbox": [ + 241, + 187, + 100, + 284 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 293, + 467, + 275, + 466, + 263, + 459, + 263, + 295, + 255, + 279, + 250, + 273, + 250, + 271, + 256, + 264, + 260, + 254, + 260, + 245, + 258, + 239, + 253, + 234, + 253, + 229, + 254, + 225, + 260, + 221, + 261, + 197, + 268, + 193, + 284, + 191, + 310, + 192, + 322, + 196, + 325, + 199, + 325, + 223, + 331, + 225, + 331, + 231, + 330, + 235, + 324, + 243, + 323, + 256, + 325, + 262, + 332, + 273, + 339, + 294, + 339, + 307, + 334, + 324, + 331, + 342, + 331, + 361, + 332, + 371, + 334, + 375, + 332, + 439, + 327, + 451, + 319, + 458, + 311, + 463, + 293, + 467 + ] + ], + "image_id": "24", + "id": 40 + }, + { + "area": 36652, + "iscrowd": 0, + "bbox": [ + 101, + 171, + 118, + 307 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 166, + 475, + 150, + 474, + 137, + 469, + 124, + 456, + 122, + 452, + 119, + 435, + 119, + 423, + 114, + 396, + 116, + 345, + 111, + 324, + 107, + 317, + 103, + 303, + 104, + 279, + 110, + 264, + 116, + 255, + 118, + 247, + 117, + 235, + 113, + 228, + 107, + 222, + 107, + 215, + 115, + 208, + 113, + 185, + 115, + 182, + 120, + 179, + 141, + 175, + 171, + 176, + 179, + 179, + 183, + 183, + 186, + 206, + 194, + 212, + 194, + 220, + 189, + 228, + 188, + 242, + 192, + 252, + 198, + 258, + 208, + 276, + 211, + 296, + 207, + 316, + 206, + 340, + 208, + 357, + 214, + 376, + 214, + 445, + 210, + 453, + 207, + 455, + 207, + 457, + 196, + 466, + 190, + 469, + 186, + 469, + 182, + 472, + 166, + 475 + ] + ], + "image_id": "25", + "id": 41 + }, + { + "area": 24080, + "iscrowd": 0, + "bbox": [ + 209, + 363, + 214, + 111 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 374, + 471, + 227, + 469, + 221, + 461, + 216, + 458, + 214, + 450, + 213, + 393, + 217, + 377, + 222, + 375, + 226, + 368, + 232, + 365, + 379, + 366, + 383, + 367, + 387, + 371, + 391, + 372, + 398, + 377, + 402, + 377, + 405, + 375, + 408, + 376, + 415, + 386, + 418, + 400, + 420, + 417, + 420, + 434, + 418, + 440, + 418, + 448, + 412, + 458, + 400, + 461, + 387, + 470, + 374, + 471 + ] + ], + "image_id": "25", + "id": 42 + }, + { + "area": 21721, + "iscrowd": 0, + "bbox": [ + 10, + 383, + 202, + 106 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 58, + 487, + 49, + 487, + 34, + 478, + 26, + 479, + 22, + 475, + 17, + 466, + 17, + 461, + 14, + 453, + 14, + 435, + 16, + 421, + 22, + 405, + 27, + 401, + 36, + 402, + 50, + 392, + 61, + 390, + 166, + 388, + 179, + 386, + 188, + 386, + 201, + 396, + 204, + 466, + 199, + 468, + 191, + 479, + 164, + 481, + 135, + 481, + 58, + 487 + ] + ], + "image_id": "26", + "id": 43 + }, + { + "area": 25662, + "iscrowd": 0, + "bbox": [ + 221, + 351, + 272, + 93 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 385, + 441, + 252, + 440, + 231, + 434, + 225, + 427, + 224, + 421, + 226, + 402, + 223, + 397, + 223, + 388, + 227, + 383, + 224, + 375, + 225, + 366, + 228, + 362, + 239, + 357, + 254, + 354, + 386, + 354, + 404, + 361, + 413, + 369, + 419, + 371, + 441, + 375, + 451, + 375, + 454, + 377, + 458, + 377, + 459, + 375, + 481, + 375, + 486, + 380, + 491, + 392, + 491, + 404, + 487, + 415, + 483, + 419, + 462, + 420, + 456, + 417, + 454, + 419, + 431, + 421, + 417, + 424, + 402, + 436, + 385, + 441 + ] + ], + "image_id": "26", + "id": 44 + }, + { + "area": 39390, + "iscrowd": 0, + "bbox": [ + 35, + 207, + 129, + 302 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 106, + 503, + 90, + 503, + 85, + 500, + 82, + 500, + 74, + 496, + 65, + 483, + 56, + 431, + 53, + 423, + 52, + 373, + 47, + 358, + 42, + 351, + 40, + 338, + 37, + 333, + 38, + 317, + 41, + 310, + 41, + 306, + 49, + 292, + 51, + 285, + 51, + 271, + 40, + 256, + 40, + 250, + 46, + 244, + 45, + 221, + 46, + 218, + 56, + 213, + 72, + 210, + 100, + 210, + 110, + 214, + 115, + 217, + 117, + 224, + 117, + 236, + 119, + 241, + 124, + 243, + 128, + 247, + 128, + 251, + 122, + 262, + 123, + 278, + 141, + 300, + 145, + 310, + 148, + 326, + 148, + 338, + 144, + 354, + 144, + 363, + 147, + 381, + 149, + 383, + 155, + 405, + 159, + 467, + 154, + 478, + 142, + 490, + 127, + 498, + 106, + 503 + ] + ], + "image_id": "27", + "id": 45 + }, + { + "area": 39440, + "iscrowd": 0, + "bbox": [ + 191, + 168, + 115, + 339 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 253, + 503, + 239, + 502, + 235, + 497, + 233, + 492, + 224, + 495, + 219, + 495, + 210, + 485, + 207, + 475, + 203, + 469, + 202, + 457, + 199, + 448, + 195, + 329, + 193, + 312, + 194, + 297, + 203, + 279, + 212, + 270, + 217, + 255, + 219, + 218, + 221, + 215, + 221, + 206, + 218, + 202, + 219, + 175, + 224, + 172, + 246, + 170, + 267, + 171, + 277, + 174, + 281, + 177, + 281, + 203, + 280, + 206, + 276, + 208, + 276, + 211, + 280, + 220, + 284, + 266, + 297, + 281, + 301, + 288, + 302, + 296, + 304, + 299, + 304, + 329, + 300, + 398, + 300, + 448, + 298, + 451, + 298, + 458, + 295, + 461, + 295, + 466, + 293, + 468, + 292, + 475, + 288, + 485, + 276, + 496, + 267, + 495, + 262, + 490, + 259, + 497, + 253, + 503 + ] + ], + "image_id": "27", + "id": 46 + }, + { + "area": 27392, + "iscrowd": 0, + "bbox": [ + 346, + 295, + 127, + 213 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 413, + 504, + 389, + 503, + 382, + 499, + 379, + 499, + 356, + 483, + 348, + 468, + 356, + 367, + 361, + 329, + 372, + 316, + 373, + 307, + 379, + 302, + 400, + 297, + 417, + 298, + 440, + 302, + 447, + 304, + 459, + 311, + 466, + 317, + 465, + 329, + 470, + 337, + 472, + 344, + 449, + 482, + 446, + 489, + 436, + 497, + 413, + 504 + ] + ], + "image_id": "27", + "id": 47 + }, + { + "area": 40467, + "iscrowd": 0, + "bbox": [ + 121, + 110, + 122, + 328 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 228, + 421, + 214, + 418, + 197, + 417, + 145, + 416, + 140, + 395, + 124, + 251, + 131, + 228, + 141, + 215, + 143, + 198, + 143, + 165, + 145, + 152, + 142, + 148, + 141, + 143, + 140, + 120, + 142, + 118, + 149, + 116, + 174, + 113, + 193, + 114, + 199, + 116, + 202, + 118, + 205, + 147, + 201, + 149, + 201, + 152, + 205, + 162, + 212, + 204, + 215, + 212, + 228, + 227, + 236, + 248, + 239, + 398, + 237, + 408, + 233, + 416, + 228, + 421 + ] + ], + "image_id": "28", + "id": 48 + }, + { + "area": 24442, + "iscrowd": 0, + "bbox": [ + 285, + 243, + 120, + 201 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 373, + 440, + 370, + 440, + 359, + 432, + 336, + 420, + 322, + 418, + 305, + 418, + 289, + 420, + 288, + 406, + 291, + 336, + 291, + 285, + 294, + 279, + 303, + 268, + 304, + 255, + 311, + 250, + 335, + 245, + 355, + 245, + 380, + 251, + 388, + 255, + 395, + 260, + 396, + 263, + 394, + 267, + 394, + 273, + 401, + 282, + 403, + 290, + 402, + 307, + 398, + 326, + 397, + 341, + 394, + 351, + 391, + 390, + 388, + 402, + 386, + 426, + 383, + 431, + 373, + 440 + ] + ], + "image_id": "28", + "id": 49 + }, + { + "area": 49476, + "iscrowd": 0, + "bbox": [ + 89, + 415, + 371, + 132 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 324, + 544, + 307, + 543, + 283, + 537, + 261, + 535, + 245, + 535, + 201, + 543, + 114, + 542, + 105, + 539, + 98, + 526, + 93, + 495, + 96, + 456, + 100, + 445, + 100, + 441, + 105, + 430, + 111, + 421, + 121, + 417, + 210, + 418, + 241, + 425, + 276, + 425, + 292, + 421, + 316, + 418, + 336, + 421, + 355, + 431, + 370, + 441, + 385, + 441, + 397, + 435, + 406, + 434, + 411, + 436, + 418, + 443, + 438, + 443, + 441, + 444, + 448, + 450, + 454, + 464, + 457, + 479, + 457, + 501, + 450, + 516, + 444, + 519, + 424, + 519, + 418, + 528, + 413, + 529, + 408, + 529, + 403, + 525, + 392, + 521, + 375, + 521, + 369, + 524, + 364, + 529, + 344, + 540, + 340, + 540, + 335, + 543, + 324, + 544 + ] + ], + "image_id": "28", + "id": 50 + }, + { + "area": 28776, + "iscrowd": 0, + "bbox": [ + 123, + 180, + 108, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 154, + 442, + 147, + 433, + 143, + 421, + 136, + 375, + 137, + 333, + 134, + 320, + 125, + 300, + 125, + 284, + 127, + 273, + 137, + 252, + 137, + 239, + 128, + 226, + 128, + 220, + 129, + 217, + 134, + 213, + 133, + 192, + 135, + 189, + 144, + 185, + 154, + 183, + 184, + 183, + 195, + 188, + 198, + 209, + 200, + 212, + 204, + 213, + 206, + 215, + 207, + 222, + 202, + 230, + 201, + 244, + 204, + 250, + 214, + 262, + 221, + 277, + 222, + 299, + 219, + 308, + 219, + 334, + 220, + 341, + 225, + 352, + 227, + 361, + 229, + 416, + 227, + 418, + 185, + 420, + 179, + 423, + 170, + 431, + 159, + 430, + 156, + 435, + 154, + 442 + ] + ], + "image_id": "29", + "id": 51 + }, + { + "area": 36270, + "iscrowd": 0, + "bbox": [ + 285, + 143, + 116, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 374, + 442, + 369, + 429, + 364, + 428, + 359, + 420, + 352, + 415, + 290, + 416, + 289, + 408, + 290, + 279, + 292, + 267, + 297, + 256, + 314, + 233, + 321, + 200, + 321, + 189, + 323, + 186, + 323, + 180, + 320, + 175, + 322, + 155, + 325, + 150, + 338, + 146, + 359, + 146, + 378, + 150, + 383, + 152, + 381, + 179, + 377, + 183, + 377, + 187, + 380, + 193, + 382, + 237, + 383, + 241, + 395, + 257, + 399, + 271, + 399, + 287, + 394, + 321, + 392, + 352, + 386, + 390, + 386, + 407, + 381, + 429, + 378, + 437, + 374, + 442 + ] + ], + "image_id": "29", + "id": 52 + }, + { + "area": 30680, + "iscrowd": 0, + "bbox": [ + 148, + 413, + 235, + 129 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 223, + 537, + 185, + 537, + 169, + 527, + 158, + 526, + 156, + 522, + 151, + 500, + 151, + 467, + 154, + 445, + 157, + 435, + 160, + 430, + 170, + 432, + 181, + 423, + 192, + 419, + 264, + 418, + 335, + 415, + 352, + 416, + 363, + 428, + 368, + 429, + 374, + 443, + 379, + 467, + 380, + 499, + 379, + 507, + 375, + 518, + 369, + 522, + 367, + 527, + 361, + 534, + 223, + 537 + ] + ], + "image_id": "29", + "id": 53 + }, + { + "area": 29670, + "iscrowd": 0, + "bbox": [ + 64, + 177, + 114, + 257 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 133, + 428, + 121, + 428, + 107, + 424, + 97, + 415, + 93, + 404, + 93, + 399, + 90, + 392, + 87, + 372, + 84, + 363, + 82, + 318, + 72, + 299, + 71, + 290, + 69, + 287, + 69, + 277, + 72, + 262, + 79, + 248, + 79, + 236, + 71, + 227, + 69, + 220, + 71, + 215, + 74, + 213, + 72, + 193, + 73, + 191, + 81, + 186, + 99, + 182, + 122, + 183, + 131, + 188, + 134, + 207, + 140, + 211, + 143, + 215, + 138, + 227, + 139, + 239, + 155, + 258, + 161, + 276, + 159, + 314, + 160, + 322, + 163, + 326, + 169, + 345, + 171, + 375, + 173, + 383, + 173, + 398, + 171, + 400, + 170, + 406, + 161, + 415, + 153, + 419, + 149, + 423, + 133, + 428 + ] + ], + "image_id": "30", + "id": 54 + }, + { + "area": 20944, + "iscrowd": 0, + "bbox": [ + 324, + 257, + 111, + 186 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 380, + 439, + 365, + 439, + 351, + 433, + 341, + 427, + 335, + 420, + 328, + 408, + 330, + 358, + 335, + 308, + 335, + 291, + 343, + 281, + 344, + 272, + 349, + 266, + 363, + 261, + 374, + 259, + 385, + 259, + 404, + 262, + 419, + 269, + 427, + 278, + 425, + 286, + 433, + 300, + 422, + 361, + 417, + 398, + 415, + 403, + 414, + 419, + 407, + 429, + 397, + 435, + 380, + 439 + ] + ], + "image_id": "30", + "id": 55 + }, + { + "area": 50895, + "iscrowd": 0, + "bbox": [ + 43, + 434, + 376, + 134 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 371, + 564, + 238, + 558, + 192, + 558, + 171, + 555, + 153, + 544, + 144, + 534, + 134, + 529, + 108, + 525, + 99, + 522, + 93, + 522, + 89, + 519, + 85, + 519, + 83, + 522, + 55, + 520, + 52, + 517, + 48, + 508, + 50, + 481, + 56, + 467, + 66, + 460, + 88, + 461, + 91, + 464, + 97, + 464, + 100, + 462, + 107, + 461, + 140, + 458, + 152, + 453, + 157, + 448, + 171, + 439, + 188, + 435, + 356, + 439, + 372, + 443, + 378, + 443, + 379, + 445, + 385, + 445, + 401, + 452, + 405, + 454, + 409, + 461, + 409, + 471, + 406, + 478, + 414, + 484, + 415, + 501, + 405, + 511, + 413, + 518, + 416, + 525, + 416, + 530, + 414, + 540, + 409, + 544, + 408, + 550, + 403, + 555, + 387, + 561, + 371, + 564 + ] + ], + "image_id": "30", + "id": 56 + }, + { + "area": 19530, + "iscrowd": 0, + "bbox": [ + 112, + 193, + 89, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 167, + 406, + 154, + 406, + 145, + 404, + 137, + 400, + 131, + 390, + 128, + 366, + 124, + 349, + 124, + 336, + 126, + 329, + 124, + 308, + 117, + 295, + 114, + 285, + 115, + 268, + 124, + 249, + 124, + 239, + 115, + 227, + 115, + 225, + 120, + 221, + 119, + 205, + 123, + 200, + 145, + 196, + 160, + 197, + 166, + 200, + 168, + 214, + 176, + 222, + 176, + 225, + 172, + 232, + 172, + 242, + 183, + 256, + 190, + 269, + 190, + 283, + 188, + 296, + 189, + 321, + 192, + 325, + 196, + 342, + 199, + 382, + 196, + 388, + 187, + 397, + 179, + 402, + 167, + 406 + ] + ], + "image_id": "31", + "id": 57 + }, + { + "area": 27538, + "iscrowd": 0, + "bbox": [ + 215, + 181, + 97, + 280 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 264, + 458, + 256, + 458, + 249, + 456, + 245, + 449, + 235, + 447, + 226, + 431, + 223, + 415, + 216, + 296, + 218, + 282, + 230, + 267, + 233, + 259, + 234, + 227, + 237, + 218, + 237, + 215, + 234, + 211, + 234, + 189, + 243, + 185, + 258, + 183, + 276, + 184, + 283, + 187, + 285, + 189, + 285, + 212, + 283, + 214, + 283, + 221, + 285, + 223, + 285, + 233, + 289, + 251, + 289, + 258, + 301, + 274, + 309, + 292, + 308, + 422, + 301, + 439, + 296, + 442, + 289, + 453, + 282, + 456, + 277, + 455, + 275, + 453, + 272, + 444, + 270, + 444, + 270, + 449, + 264, + 458 + ] + ], + "image_id": "31", + "id": 58 + }, + { + "area": 27216, + "iscrowd": 0, + "bbox": [ + 343, + 327, + 125, + 215 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 415, + 538, + 393, + 538, + 375, + 532, + 366, + 527, + 355, + 516, + 347, + 502, + 351, + 369, + 354, + 362, + 361, + 354, + 362, + 344, + 364, + 340, + 376, + 333, + 394, + 329, + 414, + 330, + 429, + 333, + 441, + 337, + 449, + 342, + 456, + 347, + 459, + 352, + 457, + 363, + 463, + 370, + 466, + 377, + 466, + 386, + 448, + 499, + 447, + 513, + 441, + 524, + 434, + 531, + 422, + 535, + 421, + 537, + 415, + 538 + ] + ], + "image_id": "31", + "id": 59 + }, + { + "area": 24786, + "iscrowd": 0, + "bbox": [ + 55, + 167, + 101, + 242 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 108, + 408, + 99, + 407, + 94, + 404, + 92, + 401, + 87, + 399, + 84, + 395, + 78, + 386, + 73, + 365, + 70, + 335, + 65, + 318, + 60, + 283, + 57, + 273, + 58, + 258, + 60, + 252, + 67, + 243, + 68, + 239, + 68, + 195, + 65, + 192, + 64, + 174, + 67, + 172, + 78, + 170, + 99, + 169, + 108, + 172, + 111, + 190, + 109, + 193, + 109, + 197, + 111, + 200, + 113, + 211, + 120, + 232, + 126, + 240, + 131, + 242, + 138, + 253, + 141, + 262, + 143, + 290, + 152, + 359, + 152, + 379, + 150, + 387, + 146, + 393, + 142, + 396, + 137, + 396, + 133, + 403, + 124, + 406, + 120, + 404, + 114, + 396, + 114, + 401, + 112, + 405, + 108, + 408 + ] + ], + "image_id": "32", + "id": 60 + }, + { + "area": 24500, + "iscrowd": 0, + "bbox": [ + 162, + 218, + 97, + 249 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 212, + 465, + 198, + 463, + 190, + 459, + 183, + 452, + 178, + 445, + 172, + 392, + 174, + 353, + 173, + 346, + 165, + 323, + 166, + 305, + 170, + 294, + 178, + 281, + 178, + 270, + 171, + 258, + 171, + 253, + 177, + 246, + 177, + 227, + 178, + 225, + 182, + 225, + 190, + 221, + 201, + 219, + 218, + 220, + 229, + 223, + 232, + 226, + 235, + 246, + 239, + 248, + 242, + 253, + 236, + 269, + 236, + 279, + 242, + 285, + 249, + 296, + 254, + 316, + 254, + 325, + 250, + 336, + 249, + 344, + 250, + 365, + 255, + 382, + 256, + 433, + 253, + 439, + 253, + 445, + 241, + 456, + 232, + 461, + 223, + 464, + 212, + 465 + ] + ], + "image_id": "32", + "id": 61 + }, + { + "area": 27776, + "iscrowd": 0, + "bbox": [ + 331, + 334, + 127, + 216 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 393, + 547, + 376, + 545, + 361, + 539, + 346, + 527, + 341, + 521, + 334, + 507, + 341, + 372, + 352, + 358, + 351, + 351, + 355, + 345, + 367, + 339, + 386, + 336, + 406, + 337, + 421, + 342, + 426, + 342, + 443, + 352, + 450, + 361, + 448, + 372, + 453, + 377, + 456, + 386, + 455, + 403, + 437, + 502, + 435, + 521, + 431, + 530, + 420, + 540, + 407, + 545, + 393, + 547 + ] + ], + "image_id": "32", + "id": 62 + }, + { + "area": 25250, + "iscrowd": 0, + "bbox": [ + 72, + 150, + 100, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 123, + 397, + 116, + 397, + 113, + 396, + 109, + 391, + 102, + 390, + 97, + 383, + 95, + 376, + 92, + 372, + 86, + 342, + 86, + 323, + 82, + 311, + 74, + 255, + 75, + 241, + 85, + 227, + 86, + 221, + 87, + 179, + 83, + 177, + 81, + 157, + 84, + 155, + 102, + 152, + 119, + 153, + 127, + 157, + 128, + 175, + 126, + 177, + 126, + 180, + 128, + 185, + 130, + 186, + 136, + 217, + 151, + 232, + 156, + 244, + 159, + 261, + 162, + 311, + 168, + 355, + 168, + 368, + 166, + 376, + 159, + 385, + 153, + 386, + 152, + 389, + 146, + 394, + 138, + 395, + 136, + 393, + 130, + 384, + 129, + 385, + 129, + 392, + 126, + 396, + 123, + 397 + ] + ], + "image_id": "33", + "id": 63 + }, + { + "area": 35802, + "iscrowd": 0, + "bbox": [ + 192, + 229, + 116, + 305 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 263, + 532, + 239, + 531, + 223, + 525, + 214, + 517, + 209, + 507, + 206, + 497, + 206, + 486, + 204, + 476, + 202, + 428, + 205, + 419, + 205, + 391, + 202, + 378, + 199, + 374, + 197, + 366, + 196, + 349, + 200, + 332, + 206, + 318, + 214, + 308, + 214, + 294, + 206, + 282, + 205, + 275, + 213, + 267, + 213, + 245, + 215, + 242, + 222, + 237, + 242, + 233, + 265, + 234, + 272, + 237, + 276, + 237, + 283, + 242, + 285, + 248, + 285, + 265, + 292, + 273, + 294, + 278, + 293, + 282, + 287, + 290, + 286, + 306, + 300, + 328, + 305, + 347, + 303, + 373, + 299, + 383, + 298, + 391, + 298, + 413, + 302, + 422, + 304, + 441, + 302, + 496, + 296, + 513, + 293, + 516, + 276, + 528, + 263, + 532 + ] + ], + "image_id": "33", + "id": 64 + }, + { + "area": 15180, + "iscrowd": 0, + "bbox": [ + 324, + 246, + 91, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 374, + 406, + 362, + 406, + 351, + 404, + 341, + 399, + 332, + 390, + 326, + 381, + 330, + 277, + 334, + 269, + 339, + 264, + 339, + 257, + 340, + 255, + 346, + 252, + 367, + 248, + 393, + 251, + 405, + 257, + 409, + 261, + 407, + 270, + 413, + 278, + 409, + 326, + 401, + 389, + 399, + 393, + 391, + 399, + 374, + 406 + ] + ], + "image_id": "33", + "id": 65 + }, + { + "area": 25500, + "iscrowd": 0, + "bbox": [ + 80, + 149, + 101, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 135, + 396, + 125, + 396, + 119, + 390, + 114, + 389, + 110, + 384, + 104, + 374, + 100, + 358, + 99, + 345, + 86, + 271, + 82, + 258, + 83, + 240, + 93, + 227, + 93, + 177, + 91, + 176, + 89, + 171, + 88, + 155, + 97, + 152, + 106, + 152, + 113, + 150, + 126, + 150, + 132, + 152, + 134, + 156, + 136, + 171, + 136, + 174, + 133, + 177, + 135, + 179, + 135, + 182, + 140, + 193, + 143, + 208, + 148, + 219, + 158, + 229, + 163, + 237, + 167, + 253, + 176, + 345, + 178, + 349, + 178, + 367, + 173, + 380, + 168, + 384, + 164, + 384, + 160, + 391, + 152, + 394, + 146, + 393, + 141, + 384, + 140, + 392, + 135, + 396 + ] + ], + "image_id": "34", + "id": 66 + }, + { + "area": 18300, + "iscrowd": 0, + "bbox": [ + 186, + 271, + 99, + 182 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 239, + 448, + 224, + 446, + 216, + 442, + 208, + 437, + 201, + 428, + 194, + 376, + 193, + 350, + 188, + 310, + 190, + 303, + 195, + 297, + 193, + 286, + 199, + 280, + 202, + 280, + 213, + 275, + 225, + 273, + 250, + 273, + 266, + 279, + 271, + 284, + 269, + 291, + 279, + 303, + 279, + 371, + 281, + 422, + 277, + 430, + 266, + 439, + 263, + 439, + 256, + 444, + 239, + 448 + ] + ], + "image_id": "34", + "id": 67 + }, + { + "area": 42108, + "iscrowd": 0, + "bbox": [ + 339, + 226, + 131, + 318 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 408, + 542, + 391, + 542, + 369, + 535, + 351, + 519, + 344, + 506, + 344, + 435, + 352, + 410, + 352, + 381, + 349, + 375, + 347, + 364, + 347, + 344, + 356, + 324, + 368, + 310, + 372, + 303, + 372, + 290, + 366, + 280, + 366, + 272, + 370, + 266, + 376, + 262, + 378, + 240, + 382, + 236, + 394, + 231, + 430, + 230, + 447, + 235, + 455, + 240, + 457, + 242, + 457, + 267, + 462, + 272, + 464, + 282, + 460, + 290, + 454, + 296, + 452, + 301, + 452, + 312, + 463, + 331, + 463, + 335, + 466, + 340, + 468, + 351, + 468, + 365, + 464, + 380, + 455, + 398, + 454, + 403, + 453, + 432, + 455, + 455, + 452, + 465, + 451, + 478, + 448, + 487, + 448, + 498, + 444, + 518, + 439, + 526, + 429, + 535, + 424, + 538, + 408, + 542 + ] + ], + "image_id": "34", + "id": 68 + }, + { + "area": 45560, + "iscrowd": 0, + "bbox": [ + 58, + 222, + 135, + 334 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 148, + 553, + 140, + 553, + 131, + 542, + 129, + 547, + 124, + 552, + 118, + 552, + 110, + 549, + 106, + 544, + 88, + 516, + 87, + 508, + 84, + 502, + 62, + 375, + 62, + 355, + 71, + 335, + 79, + 324, + 80, + 268, + 77, + 266, + 76, + 263, + 73, + 238, + 78, + 232, + 85, + 229, + 105, + 226, + 119, + 226, + 134, + 230, + 138, + 232, + 142, + 258, + 142, + 260, + 139, + 263, + 139, + 267, + 142, + 271, + 153, + 315, + 171, + 333, + 179, + 350, + 182, + 372, + 182, + 394, + 189, + 482, + 189, + 507, + 185, + 521, + 177, + 534, + 172, + 537, + 164, + 536, + 159, + 548, + 148, + 553 + ] + ], + "image_id": "35", + "id": 69 + }, + { + "area": 15308, + "iscrowd": 0, + "bbox": [ + 205, + 292, + 88, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 257, + 460, + 245, + 460, + 236, + 458, + 220, + 447, + 213, + 437, + 213, + 420, + 206, + 328, + 211, + 317, + 214, + 315, + 212, + 307, + 215, + 303, + 223, + 298, + 241, + 294, + 258, + 294, + 274, + 297, + 280, + 300, + 284, + 305, + 284, + 314, + 291, + 322, + 292, + 328, + 291, + 436, + 282, + 448, + 265, + 458, + 257, + 460 + ] + ], + "image_id": "35", + "id": 70 + }, + { + "area": 18144, + "iscrowd": 0, + "bbox": [ + 306, + 200, + 83, + 215 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 355, + 411, + 342, + 411, + 332, + 409, + 323, + 405, + 317, + 401, + 311, + 393, + 309, + 386, + 310, + 340, + 315, + 327, + 316, + 316, + 315, + 298, + 312, + 292, + 313, + 276, + 316, + 268, + 328, + 250, + 328, + 244, + 327, + 239, + 325, + 237, + 324, + 228, + 330, + 223, + 331, + 208, + 334, + 205, + 349, + 202, + 366, + 203, + 375, + 206, + 378, + 208, + 379, + 226, + 384, + 229, + 384, + 233, + 376, + 244, + 376, + 250, + 387, + 272, + 387, + 294, + 381, + 304, + 380, + 309, + 380, + 334, + 382, + 344, + 382, + 355, + 378, + 394, + 369, + 405, + 355, + 411 + ] + ], + "image_id": "35", + "id": 71 + }, + { + "area": 50568, + "iscrowd": 0, + "bbox": [ + 29, + 257, + 146, + 343 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 124, + 598, + 119, + 598, + 109, + 588, + 101, + 595, + 90, + 593, + 79, + 581, + 74, + 573, + 63, + 550, + 54, + 506, + 34, + 427, + 31, + 410, + 34, + 387, + 38, + 378, + 47, + 366, + 47, + 304, + 42, + 300, + 38, + 272, + 49, + 264, + 57, + 262, + 88, + 259, + 100, + 261, + 106, + 265, + 110, + 276, + 110, + 303, + 118, + 321, + 126, + 350, + 142, + 363, + 151, + 376, + 156, + 389, + 156, + 397, + 159, + 410, + 159, + 425, + 162, + 444, + 164, + 474, + 171, + 522, + 171, + 542, + 169, + 547, + 168, + 558, + 164, + 569, + 160, + 575, + 157, + 578, + 151, + 580, + 144, + 578, + 142, + 581, + 140, + 589, + 134, + 594, + 124, + 598 + ] + ], + "image_id": "36", + "id": 72 + }, + { + "area": 42900, + "iscrowd": 0, + "bbox": [ + 173, + 180, + 129, + 329 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 288, + 504, + 197, + 500, + 194, + 497, + 192, + 443, + 186, + 381, + 180, + 287, + 176, + 258, + 185, + 210, + 186, + 186, + 189, + 183, + 287, + 183, + 292, + 184, + 298, + 187, + 296, + 236, + 296, + 428, + 295, + 460, + 293, + 469, + 293, + 491, + 291, + 500, + 288, + 504 + ] + ], + "image_id": "36", + "id": 73 + }, + { + "area": 19712, + "iscrowd": 0, + "bbox": [ + 308, + 220, + 87, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 360, + 440, + 342, + 440, + 332, + 438, + 322, + 432, + 312, + 418, + 311, + 372, + 312, + 362, + 316, + 354, + 316, + 329, + 312, + 317, + 312, + 305, + 318, + 287, + 320, + 283, + 325, + 279, + 329, + 270, + 328, + 262, + 324, + 257, + 324, + 248, + 329, + 244, + 330, + 230, + 333, + 226, + 348, + 221, + 374, + 224, + 381, + 228, + 381, + 244, + 386, + 249, + 386, + 255, + 383, + 258, + 383, + 261, + 380, + 265, + 380, + 277, + 388, + 287, + 392, + 301, + 392, + 313, + 385, + 332, + 385, + 363, + 387, + 371, + 387, + 382, + 385, + 393, + 384, + 421, + 377, + 431, + 370, + 436, + 360, + 440 + ] + ], + "image_id": "36", + "id": 74 + }, + { + "area": 65296, + "iscrowd": 0, + "bbox": [ + 32, + 196, + 175, + 370 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 178, + 563, + 154, + 561, + 138, + 557, + 105, + 554, + 94, + 551, + 85, + 551, + 79, + 550, + 77, + 547, + 76, + 528, + 68, + 489, + 60, + 433, + 48, + 372, + 34, + 284, + 34, + 281, + 46, + 252, + 58, + 230, + 58, + 206, + 59, + 202, + 63, + 200, + 103, + 201, + 133, + 204, + 162, + 204, + 177, + 207, + 183, + 211, + 182, + 237, + 194, + 248, + 199, + 256, + 201, + 422, + 204, + 494, + 201, + 500, + 194, + 526, + 186, + 546, + 186, + 550, + 183, + 557, + 178, + 563 + ] + ], + "image_id": "37", + "id": 75 + }, + { + "area": 24534, + "iscrowd": 0, + "bbox": [ + 244, + 212, + 93, + 260 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 296, + 471, + 293, + 471, + 288, + 466, + 287, + 458, + 285, + 457, + 284, + 457, + 282, + 465, + 276, + 469, + 267, + 465, + 263, + 458, + 255, + 452, + 249, + 440, + 247, + 422, + 248, + 312, + 252, + 301, + 256, + 295, + 264, + 288, + 266, + 282, + 268, + 259, + 272, + 244, + 272, + 239, + 270, + 236, + 271, + 219, + 275, + 215, + 284, + 213, + 311, + 214, + 319, + 218, + 317, + 240, + 315, + 241, + 317, + 248, + 319, + 280, + 322, + 288, + 332, + 302, + 336, + 313, + 332, + 387, + 330, + 394, + 330, + 424, + 327, + 446, + 323, + 454, + 317, + 461, + 309, + 462, + 303, + 470, + 296, + 471 + ] + ], + "image_id": "37", + "id": 76 + }, + { + "area": 17595, + "iscrowd": 0, + "bbox": [ + 340, + 220, + 84, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 385, + 424, + 363, + 422, + 352, + 417, + 343, + 406, + 341, + 401, + 342, + 363, + 344, + 358, + 344, + 350, + 350, + 336, + 350, + 316, + 348, + 311, + 347, + 299, + 350, + 287, + 364, + 267, + 364, + 258, + 361, + 246, + 367, + 239, + 368, + 227, + 371, + 224, + 376, + 222, + 395, + 221, + 409, + 224, + 415, + 228, + 415, + 244, + 418, + 247, + 419, + 252, + 413, + 259, + 412, + 272, + 417, + 279, + 421, + 290, + 422, + 309, + 415, + 320, + 412, + 332, + 412, + 351, + 414, + 355, + 414, + 369, + 411, + 382, + 409, + 408, + 401, + 418, + 387, + 422, + 385, + 424 + ] + ], + "image_id": "37", + "id": 77 + }, + { + "area": 63318, + "iscrowd": 0, + "bbox": [ + 26, + 191, + 172, + 365 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 171, + 553, + 146, + 551, + 86, + 542, + 71, + 542, + 69, + 537, + 29, + 281, + 35, + 267, + 37, + 257, + 53, + 222, + 53, + 199, + 56, + 194, + 64, + 193, + 139, + 199, + 160, + 202, + 173, + 202, + 179, + 204, + 183, + 210, + 181, + 218, + 181, + 232, + 182, + 235, + 190, + 242, + 195, + 251, + 194, + 480, + 178, + 542, + 171, + 553 + ] + ], + "image_id": "38", + "id": 78 + }, + { + "area": 37022, + "iscrowd": 0, + "bbox": [ + 193, + 334, + 213, + 172 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 377, + 502, + 372, + 502, + 369, + 500, + 354, + 488, + 353, + 484, + 350, + 484, + 340, + 479, + 322, + 468, + 306, + 470, + 296, + 468, + 286, + 463, + 273, + 451, + 214, + 405, + 204, + 394, + 195, + 379, + 195, + 376, + 198, + 370, + 200, + 369, + 200, + 367, + 197, + 364, + 199, + 354, + 203, + 350, + 210, + 349, + 212, + 341, + 215, + 338, + 221, + 336, + 245, + 338, + 257, + 344, + 333, + 391, + 341, + 399, + 346, + 409, + 348, + 410, + 350, + 421, + 377, + 448, + 379, + 447, + 392, + 455, + 398, + 459, + 401, + 463, + 402, + 469, + 399, + 480, + 393, + 490, + 383, + 500, + 377, + 502 + ] + ], + "image_id": "38", + "id": 79 + }, + { + "area": 17458, + "iscrowd": 0, + "bbox": [ + 326, + 207, + 85, + 202 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 370, + 407, + 352, + 406, + 345, + 403, + 333, + 390, + 328, + 386, + 329, + 347, + 336, + 325, + 338, + 312, + 336, + 282, + 341, + 269, + 353, + 253, + 353, + 241, + 351, + 239, + 352, + 231, + 353, + 229, + 357, + 227, + 358, + 218, + 361, + 212, + 371, + 209, + 387, + 209, + 398, + 212, + 405, + 217, + 405, + 233, + 408, + 236, + 408, + 242, + 401, + 250, + 401, + 260, + 409, + 278, + 409, + 294, + 406, + 298, + 399, + 319, + 399, + 356, + 396, + 365, + 393, + 391, + 383, + 403, + 370, + 407 + ] + ], + "image_id": "38", + "id": 80 + }, + { + "area": 65520, + "iscrowd": 0, + "bbox": [ + 9, + 198, + 181, + 359 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 160, + 554, + 70, + 544, + 63, + 543, + 62, + 541, + 46, + 448, + 31, + 378, + 15, + 287, + 13, + 284, + 38, + 228, + 38, + 212, + 36, + 208, + 40, + 202, + 79, + 201, + 101, + 204, + 147, + 205, + 156, + 207, + 160, + 211, + 160, + 236, + 166, + 243, + 168, + 243, + 178, + 253, + 180, + 351, + 183, + 394, + 186, + 486, + 167, + 545, + 160, + 554 + ] + ], + "image_id": "39", + "id": 81 + }, + { + "area": 17920, + "iscrowd": 0, + "bbox": [ + 227, + 232, + 79, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 269, + 452, + 249, + 448, + 237, + 438, + 231, + 426, + 230, + 410, + 231, + 375, + 234, + 366, + 235, + 350, + 233, + 334, + 229, + 326, + 229, + 316, + 231, + 305, + 235, + 297, + 241, + 290, + 244, + 281, + 244, + 276, + 240, + 272, + 238, + 266, + 239, + 261, + 244, + 254, + 244, + 240, + 247, + 237, + 258, + 234, + 280, + 234, + 288, + 236, + 294, + 240, + 294, + 256, + 298, + 261, + 298, + 269, + 294, + 274, + 294, + 287, + 296, + 292, + 301, + 296, + 301, + 299, + 305, + 305, + 306, + 310, + 306, + 329, + 304, + 332, + 301, + 346, + 301, + 369, + 304, + 378, + 303, + 428, + 297, + 439, + 291, + 445, + 280, + 450, + 269, + 452 + ] + ], + "image_id": "39", + "id": 82 + }, + { + "area": 19800, + "iscrowd": 0, + "bbox": [ + 333, + 186, + 87, + 224 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 381, + 409, + 374, + 409, + 370, + 407, + 368, + 403, + 368, + 398, + 366, + 397, + 363, + 404, + 359, + 407, + 349, + 402, + 347, + 397, + 340, + 392, + 336, + 382, + 336, + 362, + 339, + 339, + 342, + 280, + 347, + 262, + 360, + 248, + 363, + 241, + 366, + 221, + 369, + 214, + 369, + 193, + 373, + 189, + 396, + 188, + 404, + 190, + 410, + 193, + 408, + 210, + 405, + 212, + 405, + 216, + 407, + 219, + 408, + 251, + 419, + 268, + 419, + 286, + 411, + 337, + 408, + 373, + 405, + 382, + 405, + 387, + 402, + 395, + 395, + 403, + 386, + 404, + 381, + 409 + ] + ], + "image_id": "39", + "id": 83 + }, + { + "area": 65124, + "iscrowd": 0, + "bbox": [ + 17, + 335, + 267, + 242 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 162, + 573, + 160, + 573, + 153, + 565, + 123, + 530, + 67, + 471, + 59, + 460, + 36, + 437, + 24, + 386, + 21, + 368, + 100, + 339, + 108, + 346, + 130, + 359, + 170, + 387, + 244, + 433, + 244, + 436, + 246, + 438, + 263, + 486, + 272, + 494, + 279, + 496, + 280, + 500, + 242, + 532, + 244, + 539, + 238, + 545, + 211, + 565, + 203, + 565, + 200, + 568, + 196, + 569, + 193, + 568, + 186, + 561, + 182, + 561, + 170, + 571, + 162, + 573 + ] + ], + "image_id": "40", + "id": 84 + }, + { + "area": 17577, + "iscrowd": 0, + "bbox": [ + 244, + 215, + 80, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 288, + 426, + 280, + 426, + 263, + 421, + 254, + 413, + 250, + 408, + 248, + 402, + 248, + 357, + 252, + 343, + 252, + 316, + 249, + 310, + 247, + 297, + 254, + 277, + 261, + 269, + 263, + 263, + 263, + 259, + 257, + 248, + 258, + 243, + 264, + 238, + 263, + 227, + 266, + 222, + 276, + 217, + 299, + 218, + 303, + 219, + 311, + 225, + 312, + 240, + 315, + 244, + 314, + 255, + 311, + 258, + 311, + 271, + 318, + 280, + 322, + 292, + 321, + 314, + 316, + 323, + 316, + 349, + 319, + 359, + 317, + 404, + 311, + 415, + 301, + 422, + 288, + 426 + ] + ], + "image_id": "40", + "id": 85 + }, + { + "area": 19272, + "iscrowd": 0, + "bbox": [ + 344, + 172, + 87, + 218 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 392, + 388, + 385, + 387, + 382, + 383, + 381, + 378, + 376, + 385, + 371, + 387, + 365, + 384, + 360, + 378, + 354, + 376, + 350, + 368, + 348, + 361, + 348, + 343, + 351, + 329, + 355, + 290, + 355, + 270, + 357, + 254, + 362, + 247, + 362, + 243, + 371, + 236, + 374, + 230, + 381, + 202, + 383, + 199, + 382, + 188, + 384, + 178, + 388, + 176, + 402, + 175, + 416, + 177, + 423, + 181, + 422, + 192, + 419, + 199, + 419, + 230, + 420, + 239, + 425, + 244, + 430, + 256, + 430, + 267, + 419, + 332, + 419, + 343, + 415, + 367, + 413, + 372, + 404, + 382, + 401, + 382, + 392, + 388 + ] + ], + "image_id": "40", + "id": 86 + }, + { + "area": 71002, + "iscrowd": 0, + "bbox": [ + 195, + 307, + 270, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 285, + 565, + 280, + 563, + 204, + 500, + 199, + 418, + 200, + 416, + 341, + 328, + 364, + 315, + 370, + 310, + 443, + 340, + 453, + 342, + 455, + 354, + 456, + 357, + 464, + 361, + 464, + 364, + 459, + 368, + 456, + 373, + 440, + 411, + 439, + 417, + 302, + 547, + 285, + 565 + ] + ], + "image_id": "41", + "id": 87 + }, + { + "area": 21762, + "iscrowd": 0, + "bbox": [ + 134, + 176, + 92, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 182, + 406, + 166, + 404, + 156, + 397, + 150, + 389, + 145, + 361, + 145, + 349, + 143, + 338, + 145, + 321, + 145, + 302, + 143, + 299, + 141, + 288, + 138, + 283, + 135, + 266, + 141, + 246, + 147, + 238, + 147, + 224, + 141, + 218, + 139, + 211, + 139, + 209, + 144, + 204, + 145, + 200, + 144, + 187, + 147, + 183, + 166, + 178, + 183, + 179, + 196, + 184, + 198, + 188, + 199, + 202, + 205, + 206, + 205, + 213, + 201, + 220, + 201, + 232, + 214, + 250, + 217, + 256, + 219, + 267, + 218, + 280, + 214, + 294, + 214, + 307, + 221, + 334, + 222, + 380, + 220, + 386, + 208, + 397, + 195, + 403, + 182, + 406 + ] + ], + "image_id": "41", + "id": 88 + }, + { + "area": 19270, + "iscrowd": 0, + "bbox": [ + 256, + 127, + 81, + 234 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 285, + 357, + 274, + 354, + 271, + 349, + 268, + 349, + 265, + 345, + 261, + 338, + 258, + 328, + 259, + 219, + 262, + 210, + 273, + 197, + 277, + 184, + 278, + 166, + 281, + 155, + 279, + 152, + 280, + 134, + 285, + 131, + 304, + 129, + 316, + 131, + 322, + 135, + 321, + 152, + 319, + 155, + 322, + 191, + 324, + 198, + 329, + 202, + 333, + 208, + 335, + 216, + 335, + 238, + 332, + 257, + 328, + 333, + 326, + 337, + 297, + 355, + 295, + 354, + 294, + 348, + 291, + 347, + 289, + 354, + 285, + 357 + ] + ], + "image_id": "41", + "id": 89 + }, + { + "area": 33840, + "iscrowd": 0, + "bbox": [ + 65, + 264, + 119, + 281 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 136, + 541, + 125, + 541, + 108, + 537, + 96, + 528, + 88, + 515, + 87, + 500, + 80, + 465, + 81, + 424, + 77, + 407, + 71, + 397, + 69, + 390, + 68, + 375, + 72, + 356, + 83, + 337, + 82, + 328, + 76, + 321, + 72, + 313, + 73, + 305, + 78, + 301, + 79, + 296, + 78, + 280, + 87, + 271, + 98, + 268, + 126, + 267, + 137, + 270, + 145, + 275, + 148, + 295, + 157, + 301, + 157, + 309, + 151, + 321, + 152, + 332, + 165, + 345, + 172, + 362, + 172, + 386, + 169, + 400, + 169, + 421, + 176, + 445, + 177, + 478, + 179, + 492, + 178, + 508, + 174, + 514, + 174, + 517, + 163, + 530, + 155, + 533, + 150, + 537, + 136, + 541 + ] + ], + "image_id": "42", + "id": 90 + }, + { + "area": 53265, + "iscrowd": 0, + "bbox": [ + 144, + 308, + 264, + 200 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 308, + 503, + 305, + 503, + 259, + 472, + 169, + 408, + 170, + 395, + 172, + 389, + 172, + 359, + 166, + 345, + 153, + 332, + 206, + 311, + 234, + 325, + 271, + 340, + 340, + 372, + 371, + 384, + 383, + 416, + 386, + 429, + 388, + 432, + 398, + 436, + 404, + 436, + 406, + 438, + 354, + 492, + 350, + 492, + 346, + 496, + 343, + 496, + 337, + 488, + 337, + 486, + 333, + 484, + 316, + 500, + 313, + 500, + 308, + 503 + ] + ], + "image_id": "42", + "id": 91 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 337, + 175, + 91, + 229 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 383, + 400, + 376, + 397, + 370, + 383, + 341, + 371, + 339, + 367, + 339, + 357, + 341, + 350, + 341, + 340, + 348, + 287, + 348, + 276, + 350, + 271, + 351, + 259, + 357, + 249, + 366, + 240, + 371, + 231, + 372, + 221, + 375, + 215, + 375, + 209, + 379, + 202, + 378, + 191, + 380, + 180, + 387, + 177, + 404, + 177, + 413, + 179, + 421, + 183, + 419, + 199, + 416, + 203, + 417, + 244, + 426, + 258, + 427, + 266, + 425, + 276, + 425, + 287, + 422, + 294, + 409, + 376, + 405, + 385, + 398, + 393, + 394, + 393, + 388, + 399, + 383, + 400 + ] + ], + "image_id": "42", + "id": 92 + }, + { + "area": 44220, + "iscrowd": 0, + "bbox": [ + 96, + 250, + 133, + 329 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 172, + 574, + 155, + 573, + 140, + 569, + 130, + 563, + 126, + 558, + 117, + 543, + 117, + 534, + 109, + 481, + 112, + 449, + 112, + 432, + 107, + 414, + 103, + 409, + 100, + 400, + 98, + 387, + 99, + 370, + 103, + 357, + 117, + 332, + 115, + 319, + 105, + 306, + 105, + 296, + 113, + 288, + 113, + 264, + 115, + 261, + 127, + 255, + 146, + 252, + 171, + 253, + 182, + 256, + 191, + 261, + 194, + 285, + 201, + 290, + 205, + 300, + 205, + 304, + 198, + 316, + 198, + 328, + 200, + 333, + 207, + 340, + 208, + 344, + 212, + 349, + 212, + 352, + 217, + 361, + 217, + 368, + 219, + 372, + 219, + 387, + 213, + 410, + 213, + 440, + 215, + 441, + 215, + 446, + 220, + 461, + 222, + 528, + 214, + 548, + 205, + 559, + 189, + 568, + 172, + 574 + ] + ], + "image_id": "43", + "id": 93 + }, + { + "area": 37356, + "iscrowd": 0, + "bbox": [ + 124, + 127, + 131, + 282 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 219, + 401, + 217, + 400, + 219, + 391, + 219, + 369, + 217, + 364, + 217, + 358, + 208, + 340, + 203, + 336, + 198, + 326, + 198, + 318, + 205, + 306, + 205, + 297, + 202, + 290, + 194, + 283, + 192, + 261, + 186, + 257, + 175, + 253, + 141, + 252, + 131, + 253, + 131, + 224, + 128, + 174, + 138, + 165, + 157, + 153, + 156, + 133, + 161, + 129, + 218, + 130, + 221, + 133, + 221, + 147, + 230, + 155, + 231, + 159, + 243, + 167, + 252, + 179, + 251, + 251, + 247, + 320, + 246, + 384, + 219, + 401 + ] + ], + "image_id": "43", + "id": 94 + }, + { + "area": 34770, + "iscrowd": 0, + "bbox": [ + 281, + 184, + 113, + 304 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 341, + 485, + 330, + 485, + 325, + 482, + 320, + 470, + 319, + 470, + 319, + 474, + 313, + 479, + 310, + 479, + 301, + 474, + 296, + 466, + 295, + 461, + 287, + 447, + 285, + 434, + 289, + 367, + 289, + 317, + 293, + 294, + 301, + 281, + 313, + 267, + 321, + 228, + 325, + 222, + 325, + 216, + 322, + 213, + 325, + 190, + 328, + 188, + 356, + 186, + 372, + 189, + 380, + 192, + 378, + 218, + 374, + 221, + 374, + 225, + 377, + 232, + 377, + 266, + 378, + 273, + 381, + 279, + 391, + 291, + 393, + 298, + 393, + 319, + 391, + 330, + 390, + 358, + 386, + 373, + 386, + 385, + 384, + 392, + 377, + 450, + 373, + 458, + 373, + 462, + 362, + 476, + 359, + 478, + 349, + 476, + 347, + 480, + 341, + 485 + ] + ], + "image_id": "43", + "id": 95 + }, + { + "area": 45188, + "iscrowd": 0, + "bbox": [ + 19, + 188, + 142, + 315 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 61, + 499, + 57, + 497, + 49, + 437, + 38, + 374, + 30, + 311, + 21, + 260, + 32, + 216, + 32, + 193, + 37, + 190, + 136, + 192, + 142, + 198, + 141, + 218, + 148, + 234, + 148, + 259, + 154, + 375, + 157, + 400, + 158, + 443, + 153, + 490, + 148, + 496, + 118, + 496, + 61, + 499 + ] + ], + "image_id": "44", + "id": 96 + }, + { + "area": 29744, + "iscrowd": 0, + "bbox": [ + 203, + 231, + 103, + 285 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 255, + 515, + 243, + 513, + 237, + 504, + 234, + 506, + 228, + 506, + 221, + 499, + 215, + 489, + 210, + 465, + 210, + 423, + 207, + 342, + 210, + 330, + 219, + 316, + 224, + 311, + 226, + 304, + 228, + 295, + 229, + 272, + 231, + 269, + 231, + 263, + 229, + 261, + 229, + 241, + 231, + 236, + 233, + 234, + 239, + 233, + 266, + 232, + 279, + 237, + 282, + 242, + 281, + 263, + 278, + 265, + 278, + 268, + 281, + 272, + 283, + 303, + 285, + 311, + 295, + 322, + 301, + 336, + 303, + 346, + 299, + 426, + 299, + 464, + 297, + 477, + 287, + 500, + 278, + 509, + 275, + 510, + 267, + 508, + 264, + 503, + 263, + 508, + 255, + 515 + ] + ], + "image_id": "44", + "id": 97 + }, + { + "area": 29568, + "iscrowd": 0, + "bbox": [ + 344, + 266, + 111, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 399, + 527, + 385, + 526, + 372, + 522, + 358, + 514, + 350, + 502, + 346, + 493, + 348, + 444, + 351, + 427, + 357, + 414, + 357, + 384, + 355, + 379, + 354, + 365, + 358, + 350, + 377, + 325, + 377, + 315, + 372, + 307, + 372, + 300, + 376, + 295, + 381, + 293, + 382, + 277, + 387, + 272, + 398, + 269, + 417, + 269, + 437, + 274, + 445, + 281, + 444, + 300, + 448, + 304, + 448, + 309, + 446, + 318, + 441, + 322, + 440, + 325, + 440, + 336, + 449, + 352, + 453, + 371, + 451, + 385, + 447, + 392, + 439, + 414, + 440, + 454, + 433, + 489, + 431, + 508, + 419, + 520, + 414, + 523, + 399, + 527 + ] + ], + "image_id": "44", + "id": 98 + }, + { + "area": 32301, + "iscrowd": 0, + "bbox": [ + 93, + 205, + 110, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 152, + 493, + 142, + 493, + 133, + 484, + 125, + 486, + 115, + 474, + 111, + 466, + 107, + 447, + 100, + 358, + 97, + 342, + 98, + 313, + 100, + 307, + 105, + 300, + 110, + 296, + 114, + 285, + 114, + 267, + 117, + 240, + 113, + 234, + 113, + 213, + 120, + 209, + 134, + 207, + 157, + 208, + 164, + 211, + 168, + 214, + 169, + 237, + 166, + 239, + 166, + 244, + 168, + 246, + 169, + 254, + 172, + 261, + 172, + 268, + 175, + 276, + 175, + 284, + 192, + 305, + 197, + 318, + 197, + 386, + 199, + 451, + 193, + 466, + 189, + 471, + 187, + 471, + 186, + 477, + 179, + 485, + 171, + 489, + 165, + 484, + 161, + 477, + 158, + 487, + 152, + 493 + ] + ], + "image_id": "45", + "id": 99 + }, + { + "area": 44756, + "iscrowd": 0, + "bbox": [ + 198, + 171, + 133, + 333 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 217, + 502, + 212, + 501, + 202, + 454, + 202, + 444, + 200, + 441, + 202, + 219, + 208, + 205, + 209, + 178, + 213, + 173, + 312, + 174, + 315, + 175, + 318, + 179, + 316, + 206, + 323, + 222, + 330, + 246, + 318, + 338, + 307, + 467, + 307, + 487, + 304, + 492, + 270, + 494, + 217, + 502 + ] + ], + "image_id": "45", + "id": 100 + }, + { + "area": 24735, + "iscrowd": 0, + "bbox": [ + 306, + 238, + 96, + 254 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 358, + 489, + 341, + 489, + 325, + 485, + 312, + 476, + 308, + 471, + 308, + 466, + 322, + 311, + 323, + 304, + 329, + 298, + 330, + 293, + 329, + 283, + 326, + 279, + 327, + 270, + 332, + 265, + 334, + 257, + 334, + 248, + 336, + 245, + 346, + 241, + 372, + 241, + 386, + 245, + 393, + 251, + 392, + 269, + 396, + 273, + 397, + 281, + 388, + 293, + 388, + 304, + 395, + 315, + 399, + 326, + 400, + 348, + 396, + 360, + 390, + 371, + 388, + 379, + 390, + 421, + 388, + 425, + 382, + 469, + 375, + 479, + 367, + 485, + 358, + 489 + ] + ], + "image_id": "45", + "id": 101 + }, + { + "area": 32592, + "iscrowd": 0, + "bbox": [ + 66, + 177, + 111, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 129, + 464, + 121, + 464, + 114, + 462, + 110, + 456, + 101, + 456, + 91, + 444, + 86, + 428, + 82, + 405, + 70, + 315, + 69, + 290, + 73, + 278, + 81, + 267, + 84, + 258, + 85, + 213, + 82, + 208, + 80, + 186, + 87, + 182, + 101, + 180, + 120, + 180, + 130, + 182, + 135, + 185, + 137, + 208, + 134, + 211, + 134, + 214, + 142, + 239, + 144, + 253, + 147, + 259, + 153, + 264, + 154, + 267, + 167, + 282, + 172, + 436, + 169, + 442, + 164, + 444, + 161, + 452, + 149, + 460, + 143, + 457, + 138, + 448, + 136, + 452, + 135, + 459, + 129, + 464 + ] + ], + "image_id": "46", + "id": 102 + }, + { + "area": 66642, + "iscrowd": 0, + "bbox": [ + 161, + 149, + 173, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 232, + 528, + 229, + 528, + 226, + 522, + 173, + 471, + 170, + 322, + 165, + 213, + 175, + 203, + 192, + 192, + 197, + 187, + 197, + 166, + 202, + 155, + 287, + 151, + 292, + 153, + 294, + 158, + 293, + 179, + 317, + 201, + 331, + 218, + 330, + 239, + 326, + 264, + 326, + 282, + 321, + 326, + 321, + 339, + 319, + 352, + 316, + 359, + 314, + 380, + 311, + 481, + 306, + 486, + 290, + 496, + 243, + 522, + 237, + 524, + 232, + 528 + ] + ], + "image_id": "46", + "id": 103 + }, + { + "area": 25620, + "iscrowd": 0, + "bbox": [ + 307, + 316, + 121, + 209 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 370, + 520, + 355, + 520, + 328, + 509, + 317, + 498, + 311, + 488, + 316, + 363, + 321, + 348, + 329, + 337, + 330, + 328, + 340, + 321, + 345, + 321, + 352, + 318, + 384, + 318, + 390, + 321, + 397, + 322, + 407, + 327, + 413, + 331, + 420, + 338, + 421, + 343, + 419, + 350, + 424, + 357, + 427, + 365, + 423, + 395, + 420, + 406, + 414, + 457, + 412, + 458, + 411, + 476, + 406, + 501, + 398, + 510, + 391, + 515, + 380, + 519, + 370, + 520 + ] + ], + "image_id": "46", + "id": 104 + }, + { + "area": 33900, + "iscrowd": 0, + "bbox": [ + 77, + 190, + 112, + 299 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 136, + 485, + 123, + 484, + 118, + 477, + 110, + 478, + 103, + 471, + 94, + 455, + 80, + 328, + 80, + 305, + 85, + 293, + 94, + 282, + 97, + 276, + 98, + 248, + 101, + 226, + 97, + 221, + 96, + 200, + 98, + 197, + 102, + 195, + 116, + 193, + 138, + 194, + 147, + 196, + 151, + 198, + 153, + 224, + 150, + 227, + 150, + 230, + 153, + 234, + 160, + 271, + 162, + 276, + 177, + 293, + 180, + 300, + 183, + 315, + 183, + 359, + 186, + 435, + 183, + 452, + 178, + 461, + 173, + 464, + 171, + 470, + 164, + 478, + 155, + 481, + 149, + 476, + 149, + 472, + 146, + 469, + 144, + 478, + 139, + 484, + 136, + 485 + ] + ], + "image_id": "47", + "id": 105 + }, + { + "area": 18988, + "iscrowd": 0, + "bbox": [ + 202, + 303, + 100, + 187 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 254, + 486, + 244, + 486, + 232, + 483, + 215, + 474, + 207, + 462, + 206, + 338, + 215, + 324, + 214, + 319, + 215, + 316, + 223, + 310, + 230, + 307, + 245, + 305, + 267, + 306, + 286, + 313, + 290, + 315, + 292, + 320, + 292, + 329, + 300, + 340, + 292, + 461, + 288, + 469, + 279, + 477, + 260, + 485, + 254, + 486 + ] + ], + "image_id": "47", + "id": 106 + }, + { + "area": 64032, + "iscrowd": 0, + "bbox": [ + 290, + 157, + 183, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 345, + 500, + 342, + 500, + 333, + 490, + 294, + 444, + 298, + 388, + 311, + 259, + 316, + 225, + 316, + 213, + 322, + 206, + 338, + 196, + 347, + 193, + 353, + 187, + 355, + 167, + 361, + 161, + 433, + 161, + 439, + 163, + 441, + 165, + 439, + 189, + 462, + 211, + 469, + 220, + 471, + 227, + 471, + 235, + 442, + 358, + 434, + 401, + 422, + 453, + 419, + 474, + 345, + 500 + ] + ], + "image_id": "47", + "id": 107 + }, + { + "area": 22914, + "iscrowd": 0, + "bbox": [ + 68, + 301, + 113, + 200 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 134, + 496, + 121, + 496, + 100, + 490, + 93, + 486, + 88, + 479, + 83, + 438, + 79, + 424, + 73, + 380, + 73, + 367, + 71, + 361, + 70, + 342, + 78, + 330, + 76, + 324, + 78, + 317, + 87, + 311, + 92, + 310, + 98, + 306, + 104, + 306, + 112, + 303, + 139, + 303, + 153, + 307, + 162, + 314, + 163, + 323, + 171, + 331, + 174, + 341, + 174, + 367, + 178, + 445, + 180, + 458, + 179, + 465, + 175, + 472, + 159, + 486, + 148, + 492, + 134, + 496 + ] + ], + "image_id": "48", + "id": 108 + }, + { + "area": 60214, + "iscrowd": 0, + "bbox": [ + 175, + 140, + 160, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 224, + 509, + 221, + 508, + 193, + 462, + 184, + 450, + 184, + 324, + 181, + 266, + 180, + 201, + 183, + 195, + 201, + 176, + 201, + 152, + 204, + 147, + 208, + 145, + 297, + 145, + 305, + 148, + 307, + 150, + 306, + 177, + 324, + 197, + 334, + 217, + 319, + 355, + 311, + 459, + 311, + 480, + 278, + 490, + 224, + 509 + ] + ], + "image_id": "48", + "id": 109 + }, + { + "area": 38430, + "iscrowd": 0, + "bbox": [ + 308, + 182, + 121, + 314 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 373, + 492, + 367, + 492, + 363, + 488, + 361, + 485, + 360, + 477, + 358, + 477, + 355, + 486, + 350, + 490, + 336, + 487, + 332, + 482, + 329, + 476, + 322, + 475, + 318, + 471, + 312, + 459, + 320, + 355, + 327, + 288, + 332, + 278, + 341, + 269, + 346, + 242, + 350, + 226, + 353, + 220, + 353, + 217, + 351, + 215, + 353, + 192, + 357, + 188, + 364, + 186, + 397, + 187, + 398, + 189, + 407, + 190, + 411, + 193, + 410, + 214, + 407, + 219, + 407, + 271, + 411, + 281, + 419, + 290, + 419, + 293, + 423, + 301, + 424, + 310, + 413, + 404, + 403, + 465, + 399, + 468, + 392, + 479, + 387, + 480, + 384, + 486, + 379, + 490, + 373, + 492 + ] + ], + "image_id": "48", + "id": 110 + }, + { + "area": 35568, + "iscrowd": 0, + "bbox": [ + 21, + 425, + 311, + 113 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 155, + 535, + 139, + 535, + 130, + 533, + 124, + 530, + 111, + 519, + 98, + 516, + 71, + 515, + 63, + 512, + 58, + 512, + 53, + 515, + 30, + 514, + 26, + 506, + 25, + 501, + 25, + 481, + 30, + 466, + 37, + 462, + 57, + 462, + 60, + 464, + 65, + 464, + 67, + 462, + 78, + 461, + 89, + 457, + 102, + 456, + 109, + 454, + 124, + 441, + 137, + 434, + 155, + 432, + 216, + 430, + 246, + 427, + 294, + 426, + 305, + 430, + 313, + 431, + 317, + 433, + 326, + 445, + 327, + 454, + 325, + 460, + 322, + 463, + 322, + 466, + 329, + 471, + 331, + 477, + 331, + 484, + 329, + 488, + 326, + 490, + 326, + 493, + 330, + 499, + 330, + 505, + 327, + 512, + 323, + 515, + 312, + 520, + 294, + 524, + 287, + 527, + 243, + 528, + 213, + 531, + 167, + 533, + 155, + 535 + ] + ], + "image_id": "49", + "id": 111 + }, + { + "area": 12015, + "iscrowd": 0, + "bbox": [ + 228, + 306, + 88, + 134 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 310, + 430, + 309, + 430, + 308, + 429, + 305, + 429, + 304, + 428, + 302, + 428, + 301, + 427, + 299, + 427, + 298, + 426, + 295, + 426, + 294, + 425, + 285, + 425, + 284, + 426, + 256, + 426, + 255, + 427, + 232, + 427, + 231, + 428, + 231, + 427, + 231, + 348, + 230, + 347, + 230, + 342, + 231, + 341, + 231, + 339, + 232, + 338, + 232, + 337, + 233, + 336, + 233, + 334, + 236, + 331, + 236, + 330, + 237, + 329, + 237, + 328, + 238, + 327, + 238, + 322, + 237, + 321, + 237, + 319, + 237, + 319, + 238, + 319, + 239, + 318, + 239, + 317, + 239, + 317, + 240, + 317, + 241, + 316, + 242, + 316, + 244, + 314, + 245, + 314, + 246, + 313, + 247, + 313, + 249, + 311, + 251, + 311, + 252, + 310, + 254, + 310, + 255, + 309, + 261, + 309, + 262, + 308, + 279, + 308, + 280, + 309, + 284, + 309, + 285, + 310, + 290, + 310, + 291, + 311, + 295, + 311, + 296, + 312, + 297, + 312, + 298, + 313, + 299, + 313, + 303, + 317, + 304, + 317, + 305, + 318, + 306, + 318, + 307, + 318, + 307, + 320, + 308, + 321, + 308, + 322, + 309, + 323, + 309, + 325, + 308, + 326, + 308, + 330, + 309, + 332, + 310, + 332, + 311, + 332, + 311, + 334, + 314, + 337, + 314, + 338, + 315, + 339, + 315, + 341, + 316, + 342, + 316, + 351, + 315, + 352, + 315, + 365, + 314, + 366, + 314, + 381, + 313, + 382, + 313, + 397, + 312, + 398, + 312, + 413, + 311, + 414, + 311, + 429, + 310, + 430 + ] + ], + "image_id": "49", + "id": 112 + }, + { + "area": 50868, + "iscrowd": 0, + "bbox": [ + 308, + 176, + 161, + 313 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 353, + 486, + 349, + 484, + 327, + 457, + 327, + 448, + 325, + 442, + 322, + 440, + 322, + 438, + 315, + 431, + 311, + 429, + 316, + 368, + 317, + 306, + 325, + 227, + 328, + 222, + 348, + 210, + 351, + 210, + 357, + 205, + 357, + 189, + 365, + 181, + 397, + 181, + 434, + 178, + 440, + 181, + 438, + 203, + 461, + 229, + 465, + 235, + 467, + 243, + 465, + 246, + 450, + 327, + 423, + 456, + 423, + 463, + 394, + 474, + 353, + 486 + ] + ], + "image_id": "49", + "id": 113 + }, + { + "area": 41454, + "iscrowd": 0, + "bbox": [ + 54, + 168, + 140, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 98, + 447, + 82, + 429, + 80, + 398, + 67, + 301, + 59, + 226, + 57, + 219, + 75, + 199, + 75, + 190, + 73, + 182, + 77, + 176, + 81, + 174, + 137, + 172, + 155, + 170, + 160, + 174, + 161, + 194, + 169, + 201, + 184, + 219, + 187, + 227, + 187, + 287, + 191, + 416, + 170, + 418, + 154, + 425, + 144, + 435, + 120, + 442, + 103, + 444, + 98, + 447 + ] + ], + "image_id": "50", + "id": 114 + }, + { + "area": 32508, + "iscrowd": 0, + "bbox": [ + 59, + 410, + 300, + 107 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 187, + 515, + 164, + 514, + 151, + 506, + 146, + 501, + 139, + 498, + 117, + 495, + 102, + 495, + 94, + 492, + 88, + 496, + 67, + 495, + 63, + 487, + 62, + 480, + 63, + 458, + 66, + 453, + 66, + 450, + 69, + 447, + 75, + 445, + 91, + 445, + 94, + 447, + 100, + 447, + 103, + 445, + 132, + 440, + 144, + 436, + 153, + 427, + 164, + 421, + 186, + 417, + 290, + 415, + 320, + 413, + 339, + 418, + 343, + 420, + 349, + 426, + 349, + 437, + 354, + 441, + 355, + 455, + 348, + 462, + 357, + 473, + 357, + 483, + 356, + 486, + 353, + 488, + 354, + 492, + 352, + 497, + 339, + 505, + 325, + 509, + 288, + 509, + 187, + 515 + ] + ], + "image_id": "50", + "id": 115 + }, + { + "area": 22425, + "iscrowd": 0, + "bbox": [ + 353, + 338, + 114, + 194 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 402, + 530, + 393, + 529, + 375, + 521, + 362, + 512, + 356, + 504, + 354, + 498, + 354, + 488, + 357, + 485, + 355, + 456, + 362, + 369, + 371, + 359, + 374, + 347, + 379, + 343, + 385, + 341, + 411, + 339, + 437, + 345, + 445, + 348, + 455, + 354, + 459, + 359, + 458, + 371, + 464, + 381, + 464, + 397, + 454, + 445, + 444, + 510, + 439, + 518, + 430, + 524, + 419, + 528, + 402, + 530 + ] + ], + "image_id": "50", + "id": 116 + }, + { + "area": 44092, + "iscrowd": 0, + "bbox": [ + 21, + 202, + 145, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 90, + 500, + 87, + 500, + 83, + 495, + 53, + 459, + 50, + 430, + 24, + 254, + 37, + 236, + 36, + 218, + 39, + 213, + 52, + 211, + 93, + 209, + 119, + 205, + 124, + 209, + 125, + 226, + 137, + 242, + 144, + 248, + 150, + 260, + 158, + 420, + 162, + 466, + 90, + 500 + ] + ], + "image_id": "51", + "id": 117 + }, + { + "area": 16275, + "iscrowd": 0, + "bbox": [ + 199, + 341, + 92, + 174 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 254, + 512, + 239, + 512, + 221, + 505, + 211, + 496, + 207, + 484, + 202, + 377, + 205, + 370, + 210, + 364, + 210, + 356, + 212, + 352, + 219, + 347, + 236, + 343, + 257, + 343, + 271, + 347, + 278, + 351, + 280, + 356, + 280, + 363, + 288, + 376, + 288, + 484, + 286, + 490, + 278, + 500, + 276, + 500, + 273, + 504, + 254, + 512 + ] + ], + "image_id": "51", + "id": 118 + }, + { + "area": 28355, + "iscrowd": 0, + "bbox": [ + 361, + 235, + 106, + 264 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 415, + 496, + 405, + 495, + 401, + 490, + 398, + 480, + 397, + 480, + 397, + 483, + 393, + 488, + 390, + 490, + 386, + 490, + 378, + 482, + 378, + 480, + 375, + 477, + 375, + 474, + 369, + 469, + 366, + 461, + 365, + 442, + 370, + 367, + 372, + 355, + 372, + 338, + 376, + 326, + 394, + 304, + 397, + 285, + 400, + 275, + 404, + 268, + 402, + 256, + 405, + 242, + 412, + 238, + 439, + 238, + 451, + 243, + 453, + 245, + 452, + 263, + 448, + 266, + 450, + 309, + 451, + 314, + 457, + 320, + 463, + 333, + 465, + 346, + 455, + 417, + 449, + 449, + 449, + 460, + 446, + 472, + 435, + 488, + 429, + 491, + 423, + 489, + 419, + 494, + 415, + 496 + ] + ], + "image_id": "51", + "id": 119 + }, + { + "area": 45743, + "iscrowd": 0, + "bbox": [ + 29, + 194, + 148, + 306 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 99, + 498, + 77, + 474, + 63, + 455, + 63, + 447, + 59, + 427, + 50, + 358, + 32, + 248, + 45, + 231, + 45, + 219, + 43, + 212, + 46, + 206, + 130, + 198, + 133, + 199, + 135, + 201, + 136, + 221, + 154, + 241, + 160, + 253, + 163, + 323, + 168, + 372, + 168, + 400, + 170, + 412, + 170, + 431, + 173, + 463, + 113, + 492, + 105, + 494, + 99, + 498 + ] + ], + "image_id": "52", + "id": 120 + }, + { + "area": 17088, + "iscrowd": 0, + "bbox": [ + 209, + 337, + 95, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 263, + 512, + 252, + 512, + 236, + 507, + 225, + 498, + 219, + 489, + 218, + 485, + 218, + 463, + 212, + 372, + 220, + 360, + 220, + 352, + 224, + 347, + 234, + 342, + 253, + 338, + 279, + 341, + 287, + 345, + 293, + 351, + 293, + 359, + 300, + 368, + 302, + 374, + 302, + 480, + 299, + 490, + 290, + 501, + 286, + 504, + 263, + 512 + ] + ], + "image_id": "52", + "id": 121 + }, + { + "area": 25132, + "iscrowd": 0, + "bbox": [ + 369, + 261, + 102, + 243 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 421, + 501, + 405, + 500, + 385, + 491, + 376, + 480, + 370, + 466, + 374, + 418, + 382, + 395, + 382, + 368, + 380, + 362, + 381, + 346, + 387, + 331, + 400, + 314, + 399, + 303, + 396, + 299, + 396, + 291, + 403, + 285, + 407, + 267, + 421, + 262, + 438, + 262, + 458, + 268, + 463, + 273, + 462, + 290, + 467, + 295, + 467, + 302, + 459, + 311, + 458, + 321, + 460, + 326, + 464, + 330, + 464, + 333, + 469, + 344, + 470, + 363, + 464, + 380, + 459, + 389, + 459, + 438, + 456, + 449, + 451, + 484, + 441, + 495, + 437, + 496, + 436, + 498, + 421, + 501 + ] + ], + "image_id": "52", + "id": 122 + }, + { + "area": 22967, + "iscrowd": 0, + "bbox": [ + 47, + 333, + 118, + 192 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 112, + 518, + 96, + 517, + 93, + 515, + 89, + 515, + 79, + 509, + 75, + 504, + 51, + 384, + 53, + 373, + 57, + 367, + 55, + 357, + 61, + 350, + 67, + 346, + 82, + 340, + 108, + 336, + 123, + 337, + 132, + 342, + 137, + 346, + 138, + 353, + 144, + 358, + 150, + 369, + 161, + 480, + 160, + 487, + 157, + 492, + 146, + 504, + 132, + 512, + 112, + 518 + ] + ], + "image_id": "53", + "id": 123 + }, + { + "area": 49288, + "iscrowd": 0, + "bbox": [ + 172, + 319, + 243, + 201 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 401, + 516, + 383, + 506, + 377, + 506, + 353, + 514, + 333, + 515, + 197, + 419, + 180, + 409, + 176, + 344, + 230, + 323, + 234, + 323, + 397, + 398, + 399, + 399, + 399, + 403, + 396, + 430, + 398, + 433, + 406, + 436, + 414, + 445, + 407, + 511, + 404, + 515, + 401, + 516 + ] + ], + "image_id": "53", + "id": 124 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 362, + 225, + 90, + 221 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 418, + 444, + 414, + 444, + 406, + 435, + 396, + 429, + 399, + 411, + 398, + 397, + 365, + 382, + 365, + 373, + 372, + 345, + 372, + 326, + 369, + 318, + 370, + 306, + 375, + 293, + 387, + 277, + 387, + 265, + 383, + 259, + 383, + 255, + 391, + 246, + 392, + 233, + 399, + 228, + 406, + 227, + 430, + 228, + 436, + 230, + 442, + 234, + 442, + 252, + 447, + 257, + 447, + 261, + 440, + 271, + 440, + 283, + 445, + 290, + 450, + 303, + 449, + 325, + 447, + 331, + 443, + 336, + 441, + 345, + 442, + 381, + 436, + 428, + 429, + 437, + 418, + 444 + ] + ], + "image_id": "53", + "id": 125 + }, + { + "area": 17576, + "iscrowd": 0, + "bbox": [ + 42, + 354, + 103, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 103, + 518, + 89, + 518, + 73, + 514, + 68, + 509, + 64, + 502, + 62, + 497, + 58, + 467, + 48, + 415, + 47, + 401, + 45, + 396, + 47, + 388, + 51, + 382, + 49, + 375, + 54, + 367, + 70, + 359, + 90, + 355, + 108, + 356, + 116, + 359, + 120, + 361, + 123, + 366, + 122, + 370, + 131, + 379, + 135, + 423, + 139, + 444, + 139, + 461, + 142, + 482, + 140, + 492, + 135, + 499, + 126, + 507, + 114, + 514, + 103, + 518 + ] + ], + "image_id": "54", + "id": 126 + }, + { + "area": 23674, + "iscrowd": 0, + "bbox": [ + 122, + 374, + 177, + 132 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 278, + 504, + 274, + 504, + 263, + 498, + 259, + 501, + 255, + 501, + 251, + 499, + 247, + 494, + 246, + 490, + 240, + 487, + 218, + 488, + 207, + 484, + 195, + 476, + 181, + 462, + 159, + 456, + 141, + 445, + 139, + 442, + 136, + 423, + 133, + 384, + 139, + 379, + 144, + 377, + 153, + 377, + 162, + 380, + 169, + 385, + 184, + 390, + 192, + 396, + 196, + 397, + 209, + 408, + 218, + 411, + 226, + 411, + 231, + 414, + 239, + 416, + 249, + 423, + 262, + 443, + 271, + 442, + 280, + 446, + 285, + 454, + 292, + 458, + 297, + 462, + 298, + 475, + 295, + 485, + 289, + 494, + 282, + 502, + 278, + 504 + ] + ], + "image_id": "54", + "id": 127 + }, + { + "area": 42340, + "iscrowd": 0, + "bbox": [ + 325, + 224, + 145, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 361, + 510, + 345, + 509, + 339, + 487, + 328, + 457, + 331, + 440, + 345, + 264, + 348, + 259, + 360, + 247, + 361, + 233, + 368, + 226, + 451, + 226, + 457, + 229, + 454, + 252, + 464, + 273, + 469, + 292, + 464, + 311, + 438, + 460, + 433, + 479, + 430, + 506, + 428, + 508, + 378, + 508, + 361, + 510 + ] + ], + "image_id": "54", + "id": 128 + }, + { + "area": 25220, + "iscrowd": 0, + "bbox": [ + 118, + 222, + 96, + 259 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 175, + 476, + 163, + 476, + 153, + 474, + 145, + 470, + 139, + 463, + 134, + 455, + 127, + 399, + 129, + 387, + 129, + 362, + 127, + 352, + 121, + 338, + 119, + 323, + 120, + 311, + 126, + 298, + 131, + 291, + 133, + 284, + 132, + 274, + 128, + 270, + 124, + 262, + 125, + 256, + 130, + 251, + 130, + 231, + 135, + 228, + 152, + 224, + 175, + 225, + 185, + 228, + 188, + 231, + 191, + 250, + 198, + 255, + 198, + 262, + 193, + 270, + 192, + 280, + 194, + 285, + 201, + 292, + 201, + 294, + 206, + 300, + 211, + 315, + 210, + 320, + 201, + 324, + 194, + 331, + 194, + 341, + 186, + 351, + 186, + 383, + 191, + 469, + 187, + 473, + 175, + 476 + ] + ], + "image_id": "55", + "id": 129 + }, + { + "area": 20790, + "iscrowd": 0, + "bbox": [ + 185, + 316, + 104, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 244, + 511, + 233, + 511, + 218, + 508, + 210, + 503, + 207, + 503, + 200, + 496, + 194, + 486, + 192, + 468, + 186, + 353, + 195, + 341, + 194, + 333, + 199, + 327, + 211, + 320, + 228, + 317, + 255, + 318, + 271, + 325, + 275, + 327, + 279, + 334, + 279, + 344, + 284, + 348, + 287, + 354, + 285, + 478, + 282, + 488, + 273, + 498, + 266, + 503, + 257, + 506, + 256, + 508, + 244, + 511 + ] + ], + "image_id": "55", + "id": 130 + }, + { + "area": 54880, + "iscrowd": 0, + "bbox": [ + 251, + 147, + 159, + 342 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 322, + 486, + 286, + 462, + 287, + 351, + 278, + 341, + 279, + 332, + 277, + 328, + 271, + 324, + 258, + 318, + 262, + 206, + 281, + 193, + 304, + 182, + 305, + 166, + 309, + 155, + 314, + 153, + 364, + 149, + 369, + 152, + 369, + 169, + 383, + 176, + 392, + 189, + 409, + 207, + 409, + 215, + 393, + 318, + 392, + 336, + 383, + 393, + 378, + 442, + 373, + 449, + 322, + 486 + ] + ], + "image_id": "55", + "id": 131 + }, + { + "area": 29298, + "iscrowd": 0, + "bbox": [ + 22, + 252, + 113, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 83, + 505, + 71, + 504, + 58, + 500, + 55, + 497, + 49, + 487, + 46, + 469, + 43, + 461, + 41, + 443, + 38, + 435, + 38, + 395, + 34, + 382, + 28, + 372, + 25, + 358, + 26, + 341, + 33, + 324, + 37, + 320, + 37, + 308, + 30, + 300, + 27, + 294, + 32, + 284, + 31, + 266, + 38, + 259, + 49, + 255, + 62, + 253, + 76, + 253, + 87, + 257, + 92, + 262, + 94, + 278, + 98, + 281, + 102, + 285, + 101, + 292, + 98, + 296, + 98, + 309, + 116, + 333, + 119, + 342, + 120, + 363, + 118, + 374, + 118, + 391, + 126, + 414, + 129, + 435, + 131, + 471, + 127, + 481, + 117, + 492, + 108, + 498, + 96, + 503, + 83, + 505 + ] + ], + "image_id": "56", + "id": 132 + }, + { + "area": 51984, + "iscrowd": 0, + "bbox": [ + 163, + 181, + 151, + 341 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 232, + 519, + 172, + 474, + 172, + 363, + 167, + 239, + 181, + 228, + 201, + 216, + 201, + 197, + 205, + 189, + 273, + 183, + 277, + 187, + 276, + 206, + 307, + 233, + 312, + 243, + 299, + 414, + 296, + 477, + 232, + 519 + ] + ], + "image_id": "56", + "id": 133 + }, + { + "area": 21660, + "iscrowd": 0, + "bbox": [ + 345, + 328, + 113, + 189 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 398, + 513, + 379, + 509, + 367, + 502, + 354, + 488, + 350, + 481, + 350, + 477, + 359, + 360, + 368, + 348, + 368, + 342, + 373, + 337, + 385, + 332, + 406, + 331, + 424, + 334, + 434, + 338, + 441, + 343, + 447, + 348, + 449, + 354, + 448, + 359, + 454, + 367, + 455, + 377, + 453, + 383, + 436, + 494, + 427, + 504, + 417, + 510, + 398, + 513 + ] + ], + "image_id": "56", + "id": 134 + }, + { + "area": 31860, + "iscrowd": 0, + "bbox": [ + 69, + 230, + 117, + 269 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 140, + 497, + 126, + 497, + 117, + 495, + 103, + 486, + 98, + 478, + 87, + 423, + 86, + 379, + 77, + 360, + 73, + 345, + 74, + 325, + 85, + 303, + 84, + 289, + 75, + 278, + 75, + 272, + 80, + 264, + 79, + 246, + 81, + 241, + 97, + 234, + 128, + 233, + 137, + 236, + 143, + 240, + 146, + 259, + 152, + 263, + 155, + 266, + 155, + 273, + 150, + 281, + 150, + 292, + 168, + 315, + 173, + 331, + 174, + 344, + 171, + 353, + 170, + 373, + 171, + 381, + 176, + 393, + 176, + 397, + 178, + 399, + 180, + 409, + 180, + 432, + 182, + 436, + 183, + 460, + 179, + 471, + 166, + 486, + 160, + 490, + 140, + 497 + ] + ], + "image_id": "57", + "id": 135 + }, + { + "area": 32963, + "iscrowd": 0, + "bbox": [ + 167, + 313, + 276, + 118 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 285, + 426, + 180, + 426, + 180, + 425, + 180, + 403, + 179, + 402, + 179, + 399, + 178, + 398, + 178, + 397, + 176, + 395, + 176, + 391, + 175, + 390, + 175, + 388, + 174, + 387, + 174, + 385, + 173, + 384, + 173, + 382, + 172, + 381, + 172, + 378, + 171, + 377, + 171, + 369, + 170, + 368, + 170, + 366, + 171, + 365, + 171, + 356, + 172, + 355, + 172, + 353, + 173, + 352, + 173, + 348, + 174, + 347, + 174, + 330, + 175, + 329, + 175, + 324, + 176, + 323, + 176, + 322, + 177, + 321, + 177, + 319, + 178, + 318, + 178, + 316, + 178, + 316, + 301, + 316, + 302, + 317, + 315, + 317, + 316, + 317, + 315, + 318, + 312, + 318, + 311, + 319, + 307, + 319, + 306, + 320, + 305, + 320, + 304, + 321, + 303, + 321, + 297, + 327, + 296, + 327, + 295, + 328, + 295, + 335, + 296, + 336, + 295, + 337, + 295, + 338, + 294, + 339, + 293, + 339, + 291, + 341, + 291, + 342, + 290, + 343, + 290, + 344, + 287, + 347, + 287, + 371, + 286, + 372, + 286, + 425, + 285, + 426 + ], + [ + 397, + 428, + 383, + 427, + 385, + 390, + 388, + 379, + 388, + 354, + 386, + 350, + 380, + 345, + 381, + 332, + 376, + 327, + 374, + 327, + 370, + 323, + 354, + 317, + 389, + 317, + 416, + 332, + 420, + 336, + 436, + 336, + 442, + 339, + 430, + 387, + 430, + 395, + 427, + 403, + 424, + 406, + 411, + 405, + 406, + 419, + 397, + 428 + ] + ], + "image_id": "57", + "id": 136 + }, + { + "area": 21384, + "iscrowd": 0, + "bbox": [ + 283, + 315, + 107, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 340, + 509, + 329, + 509, + 317, + 506, + 304, + 500, + 291, + 486, + 286, + 477, + 287, + 350, + 293, + 340, + 296, + 338, + 296, + 328, + 302, + 323, + 307, + 320, + 328, + 316, + 349, + 317, + 368, + 323, + 374, + 328, + 376, + 328, + 381, + 334, + 379, + 345, + 385, + 350, + 388, + 356, + 387, + 379, + 384, + 390, + 382, + 436, + 377, + 483, + 366, + 499, + 349, + 507, + 340, + 509 + ] + ], + "image_id": "57", + "id": 137 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 44, + 332, + 109, + 185 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 101, + 512, + 89, + 510, + 74, + 505, + 64, + 495, + 47, + 377, + 49, + 366, + 53, + 360, + 54, + 349, + 65, + 341, + 88, + 334, + 114, + 334, + 122, + 337, + 131, + 342, + 133, + 346, + 133, + 351, + 140, + 359, + 143, + 366, + 149, + 479, + 145, + 486, + 145, + 489, + 125, + 505, + 120, + 506, + 114, + 510, + 101, + 512 + ] + ], + "image_id": "58", + "id": 138 + }, + { + "area": 15808, + "iscrowd": 0, + "bbox": [ + 175, + 231, + 75, + 207 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 215, + 436, + 198, + 434, + 189, + 430, + 180, + 416, + 179, + 370, + 183, + 351, + 183, + 335, + 182, + 330, + 179, + 326, + 177, + 307, + 180, + 297, + 191, + 278, + 191, + 270, + 185, + 262, + 186, + 256, + 190, + 253, + 190, + 238, + 196, + 234, + 206, + 232, + 220, + 232, + 236, + 238, + 236, + 253, + 241, + 257, + 241, + 264, + 236, + 271, + 236, + 278, + 239, + 285, + 244, + 290, + 247, + 296, + 250, + 311, + 250, + 317, + 246, + 324, + 246, + 331, + 244, + 337, + 244, + 351, + 248, + 370, + 247, + 416, + 238, + 427, + 228, + 432, + 227, + 434, + 215, + 436 + ] + ], + "image_id": "58", + "id": 139 + }, + { + "area": 55040, + "iscrowd": 0, + "bbox": [ + 297, + 194, + 171, + 319 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 350, + 508, + 347, + 508, + 339, + 499, + 329, + 485, + 302, + 455, + 304, + 449, + 304, + 434, + 312, + 363, + 312, + 350, + 316, + 328, + 322, + 263, + 324, + 255, + 324, + 243, + 337, + 232, + 353, + 225, + 357, + 221, + 358, + 206, + 364, + 198, + 435, + 197, + 439, + 199, + 440, + 202, + 438, + 208, + 438, + 223, + 444, + 227, + 462, + 248, + 465, + 253, + 467, + 262, + 462, + 277, + 461, + 289, + 456, + 306, + 452, + 332, + 441, + 378, + 434, + 418, + 425, + 456, + 425, + 464, + 421, + 479, + 421, + 486, + 385, + 498, + 356, + 505, + 350, + 508 + ] + ], + "image_id": "58", + "id": 140 + }, + { + "area": 52456, + "iscrowd": 0, + "bbox": [ + 48, + 322, + 315, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 286, + 449, + 284, + 449, + 284, + 448, + 284, + 433, + 285, + 432, + 285, + 420, + 286, + 419, + 286, + 402, + 287, + 401, + 287, + 384, + 288, + 383, + 288, + 360, + 287, + 359, + 287, + 358, + 285, + 356, + 285, + 355, + 284, + 354, + 284, + 353, + 283, + 352, + 283, + 351, + 280, + 348, + 280, + 347, + 279, + 346, + 279, + 337, + 278, + 336, + 278, + 335, + 276, + 333, + 276, + 332, + 275, + 331, + 275, + 331, + 278, + 331, + 279, + 330, + 286, + 330, + 287, + 329, + 295, + 329, + 296, + 328, + 303, + 328, + 304, + 327, + 311, + 327, + 312, + 326, + 320, + 326, + 321, + 325, + 330, + 334, + 331, + 334, + 343, + 346, + 344, + 346, + 350, + 352, + 351, + 352, + 355, + 356, + 356, + 356, + 359, + 358, + 359, + 373, + 358, + 374, + 358, + 380, + 357, + 381, + 357, + 398, + 356, + 399, + 356, + 405, + 355, + 406, + 355, + 412, + 354, + 413, + 354, + 423, + 353, + 424, + 353, + 434, + 350, + 437, + 340, + 437, + 339, + 438, + 335, + 438, + 334, + 439, + 330, + 439, + 329, + 440, + 326, + 440, + 325, + 441, + 321, + 441, + 320, + 442, + 316, + 442, + 315, + 443, + 311, + 443, + 310, + 444, + 306, + 444, + 305, + 445, + 302, + 445, + 301, + 446, + 297, + 446, + 296, + 447, + 292, + 447, + 291, + 448, + 287, + 448, + 286, + 449 + ], + [ + 126, + 483, + 120, + 483, + 105, + 476, + 96, + 470, + 88, + 462, + 65, + 461, + 62, + 453, + 55, + 380, + 58, + 377, + 67, + 378, + 76, + 377, + 80, + 375, + 103, + 351, + 192, + 341, + 194, + 347, + 191, + 349, + 185, + 358, + 186, + 469, + 126, + 483 + ] + ], + "image_id": "59", + "id": 141 + }, + { + "area": 22781, + "iscrowd": 0, + "bbox": [ + 182, + 318, + 108, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 242, + 523, + 226, + 523, + 211, + 519, + 203, + 515, + 197, + 511, + 191, + 503, + 187, + 491, + 185, + 361, + 189, + 353, + 194, + 348, + 193, + 338, + 198, + 331, + 206, + 327, + 225, + 322, + 250, + 323, + 257, + 326, + 265, + 327, + 273, + 331, + 279, + 340, + 278, + 346, + 288, + 363, + 283, + 442, + 282, + 492, + 278, + 501, + 263, + 516, + 242, + 523 + ] + ], + "image_id": "59", + "id": 142 + }, + { + "area": 19040, + "iscrowd": 0, + "bbox": [ + 332, + 201, + 84, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 373, + 419, + 359, + 419, + 355, + 417, + 358, + 396, + 360, + 360, + 355, + 354, + 336, + 337, + 338, + 319, + 336, + 282, + 342, + 266, + 354, + 253, + 355, + 244, + 354, + 237, + 352, + 235, + 352, + 228, + 359, + 223, + 360, + 207, + 366, + 204, + 389, + 203, + 398, + 206, + 404, + 206, + 405, + 208, + 410, + 209, + 410, + 229, + 413, + 235, + 405, + 249, + 405, + 256, + 412, + 270, + 415, + 291, + 404, + 324, + 404, + 361, + 399, + 385, + 398, + 401, + 394, + 409, + 390, + 413, + 382, + 417, + 373, + 419 + ] + ], + "image_id": "59", + "id": 143 + }, + { + "area": 51958, + "iscrowd": 0, + "bbox": [ + 30, + 296, + 312, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 104, + 458, + 100, + 458, + 93, + 453, + 87, + 451, + 70, + 436, + 50, + 437, + 46, + 431, + 45, + 426, + 40, + 388, + 35, + 369, + 34, + 358, + 36, + 355, + 56, + 355, + 80, + 329, + 102, + 325, + 130, + 323, + 157, + 318, + 236, + 309, + 303, + 298, + 338, + 334, + 339, + 339, + 337, + 362, + 334, + 364, + 297, + 370, + 277, + 375, + 235, + 381, + 228, + 384, + 218, + 394, + 214, + 396, + 209, + 396, + 207, + 400, + 207, + 425, + 208, + 434, + 150, + 446, + 104, + 458 + ] + ], + "image_id": "60", + "id": 144 + }, + { + "area": 23353, + "iscrowd": 0, + "bbox": [ + 203, + 360, + 192, + 120 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 250, + 477, + 245, + 477, + 235, + 472, + 228, + 472, + 224, + 474, + 219, + 467, + 211, + 443, + 207, + 420, + 207, + 403, + 209, + 397, + 218, + 395, + 229, + 384, + 235, + 382, + 277, + 376, + 347, + 362, + 364, + 363, + 377, + 374, + 388, + 392, + 392, + 406, + 392, + 421, + 390, + 430, + 387, + 433, + 384, + 443, + 380, + 447, + 374, + 450, + 362, + 451, + 282, + 471, + 260, + 474, + 250, + 477 + ] + ], + "image_id": "60", + "id": 145 + }, + { + "area": 19314, + "iscrowd": 0, + "bbox": [ + 312, + 170, + 86, + 221 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 379, + 375, + 364, + 362, + 361, + 361, + 337, + 362, + 339, + 349, + 338, + 333, + 316, + 309, + 319, + 301, + 319, + 280, + 316, + 262, + 319, + 253, + 319, + 248, + 334, + 225, + 335, + 212, + 331, + 203, + 333, + 199, + 338, + 195, + 340, + 179, + 353, + 174, + 371, + 174, + 383, + 177, + 388, + 180, + 391, + 184, + 390, + 199, + 394, + 205, + 392, + 211, + 387, + 217, + 387, + 231, + 394, + 243, + 396, + 252, + 396, + 265, + 394, + 275, + 391, + 279, + 390, + 285, + 387, + 290, + 387, + 329, + 383, + 349, + 382, + 369, + 379, + 375 + ] + ], + "image_id": "60", + "id": 146 + }, + { + "area": 48960, + "iscrowd": 0, + "bbox": [ + 34, + 260, + 305, + 159 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 107, + 417, + 104, + 417, + 90, + 410, + 74, + 396, + 61, + 396, + 56, + 398, + 53, + 395, + 48, + 380, + 42, + 342, + 37, + 324, + 37, + 319, + 39, + 318, + 61, + 316, + 67, + 308, + 84, + 291, + 139, + 286, + 155, + 282, + 179, + 280, + 193, + 277, + 204, + 277, + 211, + 275, + 221, + 275, + 230, + 272, + 251, + 271, + 260, + 268, + 279, + 267, + 298, + 264, + 302, + 262, + 336, + 299, + 334, + 317, + 334, + 339, + 332, + 344, + 311, + 351, + 297, + 358, + 289, + 365, + 276, + 372, + 267, + 373, + 260, + 376, + 239, + 378, + 227, + 384, + 216, + 393, + 119, + 413, + 107, + 417 + ] + ], + "image_id": "61", + "id": 147 + }, + { + "area": 44520, + "iscrowd": 0, + "bbox": [ + 144, + 331, + 264, + 167 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 175, + 494, + 170, + 494, + 166, + 492, + 161, + 485, + 152, + 465, + 148, + 443, + 151, + 434, + 168, + 427, + 175, + 416, + 196, + 416, + 200, + 414, + 218, + 392, + 229, + 384, + 239, + 379, + 276, + 373, + 291, + 365, + 299, + 358, + 311, + 352, + 362, + 335, + 371, + 336, + 383, + 343, + 392, + 351, + 398, + 360, + 405, + 377, + 406, + 389, + 401, + 407, + 392, + 415, + 385, + 417, + 341, + 439, + 312, + 446, + 295, + 455, + 284, + 465, + 271, + 472, + 255, + 477, + 240, + 476, + 232, + 473, + 221, + 474, + 216, + 477, + 205, + 489, + 201, + 491, + 190, + 487, + 186, + 490, + 178, + 491, + 175, + 494 + ] + ], + "image_id": "61", + "id": 148 + }, + { + "area": 20240, + "iscrowd": 0, + "bbox": [ + 376, + 241, + 109, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 425, + 418, + 411, + 418, + 397, + 412, + 402, + 407, + 405, + 399, + 405, + 375, + 401, + 364, + 394, + 352, + 377, + 336, + 386, + 273, + 392, + 264, + 397, + 260, + 399, + 251, + 404, + 248, + 417, + 244, + 434, + 243, + 444, + 244, + 457, + 249, + 461, + 249, + 475, + 256, + 479, + 261, + 478, + 274, + 483, + 282, + 483, + 290, + 464, + 362, + 456, + 400, + 453, + 405, + 444, + 413, + 425, + 418 + ] + ], + "image_id": "61", + "id": 149 + }, + { + "area": 26429, + "iscrowd": 0, + "bbox": [ + 67, + 255, + 106, + 246 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 130, + 496, + 115, + 496, + 100, + 491, + 95, + 485, + 91, + 478, + 86, + 444, + 83, + 436, + 83, + 393, + 72, + 368, + 71, + 342, + 73, + 336, + 82, + 321, + 81, + 310, + 73, + 301, + 74, + 291, + 77, + 289, + 76, + 271, + 81, + 266, + 98, + 260, + 119, + 260, + 132, + 265, + 134, + 270, + 135, + 283, + 137, + 284, + 143, + 289, + 143, + 297, + 140, + 299, + 139, + 302, + 139, + 313, + 151, + 327, + 157, + 337, + 160, + 352, + 158, + 389, + 167, + 419, + 169, + 443, + 169, + 468, + 164, + 478, + 150, + 490, + 130, + 496 + ] + ], + "image_id": "62", + "id": 150 + }, + { + "area": 17836, + "iscrowd": 0, + "bbox": [ + 191, + 333, + 97, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 246, + 509, + 236, + 509, + 227, + 507, + 212, + 500, + 203, + 489, + 200, + 467, + 195, + 369, + 203, + 356, + 202, + 350, + 206, + 344, + 213, + 339, + 234, + 334, + 249, + 334, + 258, + 337, + 263, + 337, + 270, + 341, + 277, + 349, + 276, + 357, + 281, + 361, + 284, + 370, + 285, + 411, + 282, + 487, + 279, + 490, + 279, + 492, + 268, + 501, + 246, + 509 + ] + ], + "image_id": "62", + "id": 151 + }, + { + "area": 42280, + "iscrowd": 0, + "bbox": [ + 332, + 179, + 139, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 420, + 476, + 416, + 474, + 403, + 473, + 395, + 470, + 387, + 470, + 360, + 464, + 340, + 462, + 336, + 459, + 342, + 365, + 350, + 286, + 354, + 260, + 354, + 245, + 357, + 241, + 357, + 233, + 362, + 215, + 362, + 204, + 364, + 201, + 366, + 187, + 370, + 183, + 407, + 184, + 426, + 187, + 464, + 189, + 468, + 193, + 468, + 196, + 465, + 201, + 465, + 209, + 461, + 223, + 462, + 253, + 460, + 256, + 460, + 264, + 456, + 277, + 442, + 365, + 439, + 373, + 424, + 471, + 420, + 476 + ] + ], + "image_id": "62", + "id": 152 + }, + { + "area": 22321, + "iscrowd": 0, + "bbox": [ + 59, + 269, + 100, + 220 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 108, + 485, + 96, + 483, + 89, + 479, + 83, + 470, + 83, + 464, + 78, + 447, + 77, + 435, + 73, + 420, + 73, + 391, + 71, + 382, + 65, + 372, + 62, + 359, + 62, + 348, + 64, + 341, + 67, + 337, + 71, + 322, + 70, + 315, + 63, + 308, + 62, + 305, + 64, + 299, + 67, + 297, + 66, + 281, + 67, + 279, + 76, + 274, + 83, + 274, + 86, + 272, + 94, + 271, + 107, + 272, + 115, + 277, + 117, + 289, + 125, + 296, + 125, + 302, + 122, + 306, + 122, + 316, + 137, + 334, + 141, + 346, + 140, + 382, + 142, + 387, + 142, + 393, + 148, + 406, + 154, + 449, + 154, + 455, + 150, + 465, + 139, + 476, + 126, + 482, + 108, + 485 + ] + ], + "image_id": "63", + "id": 153 + }, + { + "area": 13833, + "iscrowd": 0, + "bbox": [ + 172, + 326, + 86, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 224, + 478, + 209, + 478, + 192, + 471, + 188, + 467, + 182, + 456, + 182, + 437, + 178, + 403, + 175, + 355, + 181, + 348, + 180, + 338, + 183, + 335, + 196, + 329, + 205, + 327, + 230, + 328, + 238, + 332, + 242, + 334, + 244, + 338, + 244, + 343, + 251, + 351, + 252, + 356, + 252, + 410, + 255, + 454, + 248, + 465, + 238, + 472, + 224, + 478 + ] + ], + "image_id": "63", + "id": 154 + }, + { + "area": 21315, + "iscrowd": 0, + "bbox": [ + 253, + 235, + 86, + 244 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 291, + 476, + 281, + 474, + 275, + 466, + 269, + 465, + 260, + 450, + 258, + 435, + 256, + 326, + 259, + 318, + 271, + 302, + 275, + 268, + 275, + 243, + 288, + 239, + 306, + 239, + 313, + 241, + 317, + 244, + 317, + 262, + 315, + 267, + 317, + 271, + 320, + 301, + 322, + 306, + 334, + 321, + 337, + 334, + 335, + 441, + 332, + 453, + 328, + 461, + 325, + 464, + 321, + 465, + 317, + 471, + 309, + 475, + 305, + 475, + 301, + 471, + 298, + 463, + 295, + 473, + 291, + 476 + ] + ], + "image_id": "63", + "id": 155 + }, + { + "area": 38808, + "iscrowd": 0, + "bbox": [ + 351, + 202, + 131, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 436, + 491, + 382, + 478, + 367, + 473, + 357, + 472, + 353, + 468, + 357, + 423, + 359, + 354, + 364, + 286, + 364, + 265, + 366, + 263, + 371, + 248, + 371, + 244, + 375, + 238, + 376, + 230, + 380, + 221, + 381, + 209, + 383, + 206, + 386, + 205, + 431, + 208, + 441, + 210, + 472, + 211, + 476, + 212, + 479, + 214, + 479, + 220, + 476, + 229, + 476, + 252, + 474, + 256, + 466, + 314, + 458, + 388, + 454, + 409, + 454, + 419, + 452, + 423, + 444, + 473, + 441, + 479, + 441, + 483, + 436, + 491 + ] + ], + "image_id": "63", + "id": 156 + }, + { + "area": 44243, + "iscrowd": 0, + "bbox": [ + 40, + 200, + 150, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 151, + 488, + 141, + 487, + 77, + 471, + 77, + 461, + 44, + 265, + 44, + 261, + 56, + 239, + 67, + 225, + 67, + 205, + 72, + 203, + 149, + 209, + 154, + 212, + 154, + 232, + 171, + 243, + 176, + 249, + 176, + 280, + 179, + 309, + 179, + 337, + 181, + 378, + 184, + 403, + 185, + 439, + 181, + 447, + 171, + 459, + 163, + 473, + 151, + 488 + ] + ], + "image_id": "64", + "id": 157 + }, + { + "area": 19624, + "iscrowd": 0, + "bbox": [ + 182, + 259, + 87, + 222 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 232, + 477, + 217, + 477, + 207, + 473, + 196, + 463, + 193, + 456, + 192, + 427, + 189, + 407, + 192, + 390, + 192, + 376, + 191, + 368, + 185, + 353, + 185, + 337, + 188, + 326, + 196, + 314, + 196, + 302, + 190, + 294, + 190, + 289, + 195, + 284, + 195, + 269, + 199, + 265, + 210, + 262, + 236, + 263, + 244, + 268, + 244, + 279, + 251, + 288, + 251, + 295, + 247, + 300, + 246, + 309, + 256, + 321, + 261, + 336, + 258, + 383, + 263, + 404, + 264, + 453, + 260, + 461, + 253, + 469, + 232, + 477 + ] + ], + "image_id": "64", + "id": 158 + }, + { + "area": 13770, + "iscrowd": 0, + "bbox": [ + 291, + 317, + 84, + 161 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 335, + 474, + 322, + 473, + 307, + 466, + 299, + 458, + 293, + 449, + 294, + 350, + 296, + 343, + 302, + 336, + 301, + 329, + 304, + 326, + 313, + 321, + 321, + 319, + 340, + 318, + 360, + 324, + 368, + 330, + 369, + 334, + 367, + 340, + 374, + 348, + 374, + 357, + 368, + 453, + 366, + 455, + 365, + 460, + 358, + 466, + 335, + 474 + ] + ], + "image_id": "64", + "id": 159 + }, + { + "area": 25351, + "iscrowd": 0, + "bbox": [ + 369, + 227, + 100, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 427, + 473, + 419, + 471, + 415, + 464, + 412, + 470, + 408, + 473, + 401, + 472, + 394, + 467, + 391, + 461, + 384, + 462, + 380, + 458, + 377, + 454, + 372, + 439, + 372, + 413, + 378, + 352, + 379, + 322, + 385, + 308, + 399, + 292, + 403, + 273, + 409, + 256, + 407, + 251, + 408, + 237, + 410, + 233, + 415, + 231, + 437, + 230, + 452, + 234, + 456, + 237, + 455, + 253, + 454, + 256, + 451, + 258, + 452, + 295, + 453, + 301, + 461, + 310, + 466, + 321, + 466, + 331, + 453, + 417, + 451, + 442, + 443, + 459, + 438, + 462, + 434, + 469, + 427, + 473 + ] + ], + "image_id": "64", + "id": 160 + }, + { + "area": 48513, + "iscrowd": 0, + "bbox": [ + 47, + 181, + 156, + 308 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 158, + 485, + 154, + 485, + 87, + 461, + 84, + 436, + 64, + 325, + 57, + 274, + 51, + 249, + 53, + 243, + 62, + 229, + 79, + 207, + 80, + 193, + 78, + 189, + 81, + 186, + 97, + 186, + 113, + 189, + 122, + 189, + 126, + 191, + 162, + 194, + 167, + 196, + 166, + 218, + 186, + 229, + 192, + 233, + 192, + 262, + 194, + 274, + 194, + 304, + 196, + 319, + 195, + 360, + 199, + 436, + 185, + 455, + 177, + 462, + 169, + 474, + 158, + 485 + ] + ], + "image_id": "65", + "id": 161 + }, + { + "area": 14520, + "iscrowd": 0, + "bbox": [ + 192, + 304, + 87, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 240, + 464, + 231, + 464, + 215, + 458, + 207, + 452, + 200, + 439, + 195, + 340, + 202, + 328, + 202, + 318, + 212, + 311, + 226, + 307, + 242, + 307, + 262, + 311, + 269, + 318, + 268, + 326, + 275, + 334, + 274, + 444, + 269, + 450, + 257, + 458, + 240, + 464 + ] + ], + "image_id": "65", + "id": 162 + }, + { + "area": 24832, + "iscrowd": 0, + "bbox": [ + 274, + 211, + 96, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 331, + 463, + 326, + 463, + 323, + 459, + 322, + 452, + 320, + 451, + 319, + 451, + 317, + 458, + 313, + 463, + 302, + 461, + 300, + 459, + 294, + 451, + 289, + 451, + 281, + 437, + 280, + 423, + 278, + 418, + 280, + 370, + 280, + 313, + 283, + 302, + 298, + 282, + 300, + 275, + 303, + 252, + 306, + 246, + 304, + 241, + 304, + 222, + 308, + 218, + 317, + 215, + 340, + 216, + 346, + 218, + 351, + 223, + 351, + 236, + 348, + 242, + 348, + 251, + 350, + 254, + 351, + 267, + 351, + 286, + 363, + 301, + 366, + 314, + 366, + 328, + 363, + 345, + 363, + 362, + 359, + 397, + 358, + 430, + 356, + 438, + 352, + 443, + 351, + 447, + 346, + 452, + 344, + 452, + 338, + 460, + 331, + 463 + ] + ], + "image_id": "65", + "id": 163 + }, + { + "area": 25334, + "iscrowd": 0, + "bbox": [ + 376, + 247, + 105, + 238 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 433, + 481, + 418, + 481, + 414, + 479, + 405, + 478, + 396, + 474, + 383, + 461, + 379, + 454, + 379, + 445, + 382, + 419, + 382, + 405, + 386, + 388, + 389, + 384, + 391, + 376, + 391, + 355, + 389, + 350, + 390, + 328, + 398, + 314, + 409, + 303, + 409, + 290, + 406, + 285, + 406, + 280, + 407, + 277, + 413, + 272, + 416, + 257, + 425, + 251, + 442, + 250, + 462, + 254, + 468, + 257, + 472, + 261, + 471, + 278, + 474, + 281, + 476, + 288, + 467, + 301, + 466, + 311, + 474, + 321, + 477, + 330, + 477, + 350, + 472, + 364, + 469, + 368, + 465, + 383, + 466, + 417, + 460, + 439, + 459, + 454, + 456, + 465, + 449, + 475, + 444, + 478, + 433, + 481 + ] + ], + "image_id": "65", + "id": 164 + }, + { + "area": 26001, + "iscrowd": 0, + "bbox": [ + 19, + 239, + 106, + 242 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 85, + 479, + 80, + 479, + 74, + 473, + 67, + 478, + 57, + 474, + 53, + 469, + 47, + 458, + 40, + 440, + 26, + 368, + 24, + 351, + 21, + 344, + 21, + 332, + 24, + 326, + 24, + 322, + 33, + 309, + 33, + 269, + 28, + 260, + 27, + 247, + 29, + 245, + 39, + 241, + 57, + 239, + 69, + 240, + 73, + 242, + 76, + 259, + 74, + 267, + 79, + 275, + 82, + 291, + 85, + 295, + 87, + 302, + 98, + 311, + 98, + 313, + 104, + 320, + 110, + 335, + 111, + 358, + 117, + 407, + 120, + 420, + 119, + 446, + 117, + 457, + 107, + 470, + 103, + 470, + 98, + 467, + 96, + 473, + 92, + 477, + 85, + 479 + ] + ], + "image_id": "66", + "id": 165 + }, + { + "area": 36608, + "iscrowd": 0, + "bbox": [ + 96, + 200, + 127, + 285 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 147, + 483, + 146, + 478, + 129, + 456, + 120, + 441, + 120, + 414, + 113, + 367, + 110, + 331, + 107, + 319, + 100, + 247, + 105, + 239, + 112, + 232, + 111, + 215, + 117, + 208, + 137, + 208, + 157, + 205, + 191, + 204, + 196, + 208, + 196, + 225, + 216, + 254, + 218, + 437, + 220, + 455, + 216, + 458, + 201, + 462, + 147, + 483 + ] + ], + "image_id": "66", + "id": 166 + }, + { + "area": 12000, + "iscrowd": 0, + "bbox": [ + 217, + 314, + 79, + 149 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 262, + 460, + 251, + 460, + 236, + 454, + 227, + 446, + 224, + 441, + 222, + 433, + 219, + 345, + 221, + 339, + 226, + 332, + 225, + 323, + 231, + 319, + 247, + 314, + 265, + 314, + 278, + 317, + 286, + 323, + 286, + 329, + 291, + 335, + 294, + 345, + 293, + 439, + 289, + 445, + 282, + 451, + 262, + 460 + ] + ], + "image_id": "66", + "id": 167 + }, + { + "area": 20774, + "iscrowd": 0, + "bbox": [ + 386, + 254, + 93, + 220 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 432, + 470, + 411, + 467, + 396, + 458, + 389, + 446, + 388, + 438, + 391, + 422, + 391, + 398, + 399, + 371, + 397, + 330, + 415, + 305, + 415, + 294, + 413, + 292, + 411, + 285, + 414, + 280, + 418, + 277, + 419, + 269, + 421, + 263, + 423, + 261, + 434, + 257, + 445, + 257, + 463, + 261, + 468, + 264, + 471, + 267, + 470, + 283, + 474, + 286, + 475, + 290, + 472, + 297, + 469, + 298, + 467, + 302, + 467, + 313, + 477, + 329, + 477, + 346, + 467, + 374, + 467, + 411, + 464, + 421, + 464, + 431, + 460, + 454, + 452, + 464, + 444, + 468, + 432, + 470 + ] + ], + "image_id": "66", + "id": 168 + }, + { + "area": 26312, + "iscrowd": 0, + "bbox": [ + 71, + 198, + 103, + 252 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 136, + 448, + 131, + 446, + 127, + 440, + 124, + 444, + 119, + 447, + 111, + 444, + 105, + 436, + 95, + 417, + 94, + 411, + 91, + 406, + 86, + 373, + 76, + 324, + 74, + 297, + 77, + 287, + 86, + 273, + 87, + 232, + 84, + 230, + 83, + 227, + 81, + 208, + 90, + 204, + 102, + 202, + 118, + 202, + 128, + 205, + 131, + 223, + 129, + 233, + 132, + 238, + 140, + 265, + 143, + 270, + 157, + 284, + 158, + 288, + 161, + 291, + 163, + 300, + 163, + 312, + 172, + 395, + 171, + 420, + 167, + 429, + 159, + 438, + 154, + 438, + 151, + 436, + 150, + 441, + 145, + 446, + 136, + 448 + ] + ], + "image_id": "67", + "id": 169 + }, + { + "area": 38645, + "iscrowd": 0, + "bbox": [ + 149, + 160, + 130, + 294 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 202, + 450, + 172, + 411, + 171, + 371, + 164, + 312, + 164, + 300, + 159, + 281, + 153, + 211, + 160, + 201, + 169, + 194, + 169, + 176, + 171, + 171, + 174, + 169, + 187, + 169, + 227, + 164, + 248, + 163, + 252, + 166, + 252, + 186, + 272, + 212, + 276, + 220, + 273, + 271, + 272, + 409, + 259, + 411, + 247, + 423, + 237, + 424, + 237, + 435, + 235, + 437, + 202, + 450 + ] + ], + "image_id": "67", + "id": 170 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 234, + 392, + 183, + 114 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 277, + 503, + 272, + 503, + 258, + 497, + 253, + 497, + 251, + 499, + 249, + 497, + 244, + 484, + 240, + 466, + 237, + 441, + 237, + 425, + 241, + 423, + 247, + 424, + 254, + 416, + 262, + 411, + 281, + 410, + 331, + 403, + 377, + 394, + 383, + 394, + 386, + 396, + 393, + 401, + 405, + 413, + 409, + 421, + 414, + 440, + 414, + 457, + 408, + 474, + 402, + 480, + 277, + 503 + ] + ], + "image_id": "67", + "id": 171 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 356, + 217, + 92, + 219 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 413, + 432, + 412, + 431, + 410, + 421, + 405, + 411, + 385, + 394, + 372, + 394, + 359, + 396, + 360, + 362, + 362, + 351, + 366, + 342, + 366, + 316, + 364, + 310, + 364, + 294, + 368, + 285, + 381, + 267, + 381, + 257, + 379, + 255, + 377, + 247, + 378, + 244, + 384, + 240, + 385, + 226, + 390, + 222, + 398, + 219, + 415, + 219, + 433, + 224, + 437, + 227, + 436, + 243, + 441, + 248, + 440, + 256, + 435, + 261, + 434, + 271, + 444, + 293, + 444, + 306, + 442, + 319, + 439, + 323, + 436, + 336, + 436, + 374, + 432, + 393, + 431, + 412, + 426, + 424, + 413, + 432 + ] + ], + "image_id": "67", + "id": 172 + }, + { + "area": 16300, + "iscrowd": 0, + "bbox": [ + 22, + 341, + 99, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 75, + 501, + 58, + 500, + 52, + 498, + 42, + 489, + 38, + 473, + 30, + 402, + 26, + 386, + 26, + 378, + 33, + 368, + 32, + 362, + 36, + 354, + 38, + 352, + 52, + 346, + 64, + 343, + 83, + 343, + 93, + 345, + 101, + 350, + 103, + 353, + 103, + 359, + 112, + 368, + 112, + 379, + 115, + 399, + 116, + 441, + 117, + 453, + 119, + 457, + 118, + 476, + 113, + 484, + 99, + 495, + 88, + 500, + 75, + 501 + ] + ], + "image_id": "68", + "id": 173 + }, + { + "area": 21736, + "iscrowd": 0, + "bbox": [ + 110, + 249, + 87, + 246 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 165, + 491, + 161, + 491, + 158, + 489, + 153, + 479, + 152, + 480, + 152, + 486, + 150, + 489, + 143, + 491, + 135, + 487, + 132, + 480, + 126, + 476, + 121, + 468, + 118, + 453, + 118, + 427, + 114, + 370, + 112, + 362, + 112, + 346, + 116, + 330, + 127, + 315, + 130, + 286, + 130, + 277, + 128, + 275, + 128, + 256, + 141, + 251, + 159, + 251, + 169, + 254, + 172, + 257, + 173, + 276, + 171, + 277, + 171, + 281, + 177, + 309, + 179, + 316, + 190, + 328, + 195, + 339, + 196, + 348, + 195, + 461, + 188, + 477, + 184, + 481, + 177, + 481, + 173, + 488, + 165, + 491 + ] + ], + "image_id": "68", + "id": 174 + }, + { + "area": 52052, + "iscrowd": 0, + "bbox": [ + 191, + 365, + 285, + 181 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 404, + 542, + 300, + 505, + 208, + 470, + 199, + 468, + 197, + 465, + 197, + 398, + 234, + 367, + 379, + 406, + 406, + 412, + 420, + 417, + 432, + 418, + 442, + 433, + 444, + 441, + 448, + 448, + 448, + 453, + 451, + 458, + 456, + 461, + 469, + 462, + 473, + 464, + 464, + 515, + 462, + 520, + 458, + 523, + 451, + 519, + 445, + 519, + 437, + 526, + 432, + 528, + 427, + 527, + 416, + 536, + 404, + 542 + ] + ], + "image_id": "68", + "id": 175 + }, + { + "area": 17622, + "iscrowd": 0, + "bbox": [ + 382, + 271, + 88, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 449, + 452, + 443, + 433, + 433, + 418, + 420, + 416, + 385, + 405, + 391, + 387, + 391, + 348, + 393, + 338, + 407, + 321, + 410, + 314, + 410, + 308, + 406, + 301, + 407, + 297, + 413, + 292, + 415, + 280, + 417, + 277, + 431, + 274, + 453, + 277, + 463, + 284, + 462, + 300, + 464, + 301, + 467, + 307, + 466, + 310, + 459, + 317, + 459, + 328, + 464, + 336, + 467, + 357, + 465, + 367, + 463, + 368, + 463, + 371, + 460, + 375, + 458, + 386, + 455, + 393, + 456, + 415, + 449, + 452 + ] + ], + "image_id": "68", + "id": 176 + }, + { + "area": 37089, + "iscrowd": 0, + "bbox": [ + 107, + 109, + 116, + 316 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 172, + 424, + 166, + 422, + 161, + 414, + 157, + 418, + 149, + 420, + 145, + 418, + 138, + 410, + 126, + 380, + 123, + 363, + 123, + 346, + 116, + 299, + 113, + 256, + 111, + 246, + 111, + 231, + 114, + 222, + 124, + 209, + 128, + 200, + 129, + 159, + 132, + 144, + 128, + 143, + 127, + 116, + 133, + 114, + 158, + 113, + 178, + 114, + 184, + 116, + 186, + 143, + 182, + 144, + 182, + 149, + 187, + 164, + 188, + 174, + 191, + 180, + 191, + 189, + 193, + 197, + 198, + 206, + 212, + 223, + 215, + 234, + 218, + 303, + 218, + 380, + 214, + 389, + 212, + 403, + 202, + 414, + 194, + 416, + 188, + 412, + 186, + 418, + 182, + 422, + 172, + 424 + ] + ], + "image_id": "69", + "id": 177 + }, + { + "area": 20250, + "iscrowd": 0, + "bbox": [ + 272, + 248, + 89, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 345, + 470, + 334, + 464, + 329, + 452, + 326, + 449, + 323, + 439, + 311, + 419, + 275, + 407, + 276, + 392, + 279, + 387, + 279, + 366, + 276, + 356, + 275, + 341, + 280, + 322, + 291, + 307, + 291, + 294, + 287, + 287, + 287, + 280, + 293, + 275, + 294, + 260, + 303, + 253, + 325, + 252, + 342, + 256, + 349, + 262, + 348, + 278, + 352, + 280, + 354, + 285, + 352, + 293, + 349, + 295, + 347, + 299, + 346, + 310, + 351, + 315, + 357, + 327, + 359, + 352, + 351, + 382, + 353, + 422, + 350, + 440, + 350, + 458, + 349, + 464, + 345, + 470 + ] + ], + "image_id": "69", + "id": 178 + }, + { + "area": 20930, + "iscrowd": 0, + "bbox": [ + 361, + 332, + 114, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 411, + 510, + 399, + 509, + 385, + 502, + 370, + 488, + 364, + 479, + 375, + 367, + 379, + 358, + 387, + 350, + 387, + 345, + 394, + 338, + 412, + 334, + 432, + 335, + 449, + 340, + 465, + 350, + 468, + 356, + 466, + 363, + 472, + 375, + 472, + 382, + 469, + 392, + 466, + 414, + 463, + 422, + 450, + 494, + 443, + 501, + 435, + 506, + 411, + 510 + ] + ], + "image_id": "69", + "id": 179 + }, + { + "area": 64581, + "iscrowd": 0, + "bbox": [ + 47, + 357, + 308, + 208 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 262, + 562, + 259, + 562, + 213, + 538, + 202, + 534, + 131, + 499, + 63, + 468, + 62, + 466, + 62, + 459, + 49, + 397, + 50, + 394, + 104, + 363, + 112, + 359, + 116, + 359, + 123, + 362, + 125, + 380, + 128, + 385, + 136, + 409, + 145, + 419, + 148, + 420, + 157, + 419, + 161, + 415, + 166, + 423, + 175, + 424, + 182, + 423, + 187, + 418, + 189, + 412, + 190, + 414, + 192, + 416, + 200, + 416, + 213, + 403, + 215, + 390, + 296, + 416, + 310, + 419, + 322, + 439, + 325, + 449, + 329, + 454, + 332, + 463, + 335, + 467, + 342, + 470, + 352, + 470, + 355, + 473, + 338, + 501, + 325, + 528, + 323, + 529, + 320, + 536, + 315, + 542, + 311, + 543, + 309, + 541, + 305, + 541, + 302, + 545, + 298, + 545, + 294, + 541, + 289, + 539, + 276, + 554, + 262, + 562 + ] + ], + "image_id": "69", + "id": 180 + }, + { + "area": 38560, + "iscrowd": 0, + "bbox": [ + 21, + 378, + 240, + 159 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 218, + 532, + 208, + 531, + 153, + 505, + 129, + 487, + 114, + 479, + 94, + 477, + 78, + 469, + 70, + 459, + 61, + 444, + 50, + 444, + 40, + 438, + 38, + 435, + 37, + 431, + 31, + 428, + 26, + 421, + 25, + 408, + 33, + 392, + 37, + 388, + 49, + 382, + 55, + 382, + 58, + 384, + 73, + 382, + 81, + 387, + 85, + 392, + 95, + 391, + 102, + 388, + 121, + 389, + 132, + 394, + 152, + 408, + 156, + 408, + 162, + 411, + 181, + 412, + 188, + 415, + 192, + 415, + 225, + 428, + 237, + 431, + 248, + 437, + 257, + 447, + 258, + 451, + 258, + 467, + 255, + 484, + 247, + 502, + 236, + 519, + 218, + 532 + ] + ], + "image_id": "70", + "id": 181 + }, + { + "area": 56240, + "iscrowd": 0, + "bbox": [ + 60, + 305, + 295, + 189 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 266, + 490, + 261, + 489, + 256, + 485, + 258, + 472, + 258, + 447, + 248, + 436, + 237, + 430, + 230, + 429, + 215, + 422, + 192, + 414, + 161, + 410, + 156, + 407, + 152, + 407, + 134, + 394, + 121, + 388, + 99, + 388, + 86, + 392, + 81, + 386, + 75, + 382, + 72, + 381, + 64, + 340, + 92, + 323, + 114, + 313, + 121, + 308, + 126, + 308, + 312, + 360, + 324, + 381, + 331, + 401, + 334, + 404, + 350, + 406, + 353, + 407, + 353, + 411, + 348, + 417, + 317, + 470, + 310, + 470, + 303, + 476, + 301, + 476, + 291, + 468, + 279, + 483, + 266, + 490 + ] + ], + "image_id": "70", + "id": 182 + }, + { + "area": 17640, + "iscrowd": 0, + "bbox": [ + 201, + 162, + 89, + 195 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 284, + 351, + 208, + 329, + 205, + 260, + 208, + 247, + 220, + 232, + 222, + 219, + 222, + 201, + 226, + 192, + 223, + 188, + 223, + 168, + 228, + 165, + 258, + 165, + 265, + 167, + 268, + 171, + 268, + 188, + 265, + 191, + 265, + 195, + 268, + 202, + 269, + 223, + 272, + 230, + 272, + 234, + 275, + 236, + 283, + 248, + 285, + 256, + 286, + 279, + 284, + 351 + ] + ], + "image_id": "70", + "id": 183 + }, + { + "area": 19264, + "iscrowd": 0, + "bbox": [ + 361, + 280, + 111, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 415, + 449, + 403, + 449, + 386, + 442, + 372, + 429, + 369, + 425, + 366, + 416, + 374, + 353, + 377, + 313, + 380, + 306, + 389, + 297, + 389, + 291, + 392, + 287, + 407, + 282, + 424, + 282, + 441, + 285, + 458, + 292, + 465, + 298, + 464, + 308, + 470, + 320, + 449, + 430, + 446, + 435, + 438, + 442, + 426, + 447, + 415, + 449 + ] + ], + "image_id": "70", + "id": 184 + }, + { + "area": 72615, + "iscrowd": 0, + "bbox": [ + 68, + 340, + 308, + 234 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 133, + 570, + 131, + 570, + 123, + 559, + 85, + 502, + 81, + 458, + 73, + 423, + 78, + 420, + 110, + 410, + 222, + 366, + 228, + 365, + 277, + 347, + 287, + 342, + 294, + 345, + 302, + 351, + 314, + 356, + 343, + 375, + 352, + 378, + 360, + 388, + 370, + 393, + 376, + 399, + 376, + 401, + 370, + 404, + 364, + 411, + 353, + 438, + 343, + 454, + 331, + 459, + 279, + 489, + 231, + 514, + 150, + 559, + 133, + 570 + ] + ], + "image_id": "71", + "id": 185 + }, + { + "area": 17201, + "iscrowd": 0, + "bbox": [ + 9, + 273, + 102, + 166 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 63, + 436, + 49, + 435, + 40, + 430, + 30, + 419, + 15, + 329, + 11, + 315, + 11, + 311, + 17, + 297, + 16, + 290, + 18, + 287, + 29, + 281, + 53, + 275, + 70, + 276, + 84, + 281, + 87, + 285, + 87, + 289, + 96, + 299, + 108, + 399, + 107, + 410, + 76, + 420, + 73, + 422, + 75, + 431, + 63, + 436 + ] + ], + "image_id": "71", + "id": 186 + }, + { + "area": 16856, + "iscrowd": 0, + "bbox": [ + 236, + 171, + 85, + 195 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 244, + 358, + 242, + 357, + 242, + 268, + 244, + 258, + 248, + 250, + 259, + 237, + 263, + 215, + 263, + 206, + 266, + 202, + 266, + 199, + 263, + 197, + 263, + 182, + 266, + 177, + 277, + 174, + 299, + 176, + 306, + 179, + 305, + 198, + 302, + 201, + 304, + 207, + 306, + 241, + 309, + 243, + 318, + 257, + 320, + 270, + 314, + 354, + 306, + 352, + 294, + 344, + 285, + 342, + 244, + 358 + ] + ], + "image_id": "71", + "id": 187 + }, + { + "area": 21922, + "iscrowd": 0, + "bbox": [ + 365, + 210, + 96, + 225 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 409, + 431, + 396, + 429, + 384, + 425, + 370, + 413, + 368, + 408, + 371, + 404, + 376, + 401, + 376, + 398, + 370, + 392, + 367, + 390, + 367, + 379, + 369, + 373, + 369, + 362, + 377, + 336, + 378, + 292, + 383, + 279, + 398, + 259, + 395, + 237, + 401, + 233, + 405, + 216, + 410, + 213, + 433, + 212, + 442, + 214, + 455, + 221, + 454, + 239, + 457, + 241, + 458, + 245, + 456, + 251, + 450, + 258, + 450, + 270, + 458, + 288, + 458, + 305, + 449, + 326, + 447, + 335, + 446, + 370, + 444, + 383, + 441, + 391, + 441, + 401, + 438, + 415, + 431, + 424, + 416, + 430, + 409, + 431 + ] + ], + "image_id": "71", + "id": 188 + }, + { + "area": 18360, + "iscrowd": 0, + "bbox": [ + 1, + 318, + 101, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 52, + 490, + 35, + 489, + 17, + 479, + 13, + 472, + 13, + 465, + 6, + 436, + 3, + 410, + 0, + 402, + 0, + 333, + 10, + 327, + 36, + 320, + 58, + 320, + 70, + 324, + 74, + 326, + 76, + 330, + 76, + 335, + 86, + 345, + 89, + 377, + 93, + 395, + 97, + 442, + 99, + 450, + 97, + 464, + 86, + 475, + 52, + 490 + ] + ], + "image_id": "72", + "id": 189 + }, + { + "area": 40690, + "iscrowd": 0, + "bbox": [ + 106, + 178, + 129, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 222, + 486, + 136, + 484, + 131, + 425, + 126, + 391, + 121, + 337, + 109, + 250, + 113, + 238, + 115, + 222, + 118, + 216, + 118, + 200, + 115, + 193, + 115, + 190, + 117, + 187, + 186, + 183, + 213, + 183, + 218, + 186, + 219, + 205, + 226, + 226, + 229, + 370, + 232, + 402, + 232, + 437, + 230, + 461, + 228, + 466, + 227, + 482, + 222, + 486 + ] + ], + "image_id": "72", + "id": 190 + }, + { + "area": 23296, + "iscrowd": 0, + "bbox": [ + 239, + 203, + 90, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 286, + 455, + 277, + 455, + 273, + 451, + 270, + 445, + 267, + 448, + 260, + 450, + 253, + 444, + 243, + 420, + 241, + 405, + 241, + 310, + 243, + 299, + 245, + 293, + 259, + 274, + 263, + 241, + 266, + 236, + 263, + 232, + 263, + 215, + 265, + 212, + 269, + 210, + 283, + 208, + 297, + 209, + 308, + 213, + 309, + 233, + 306, + 236, + 306, + 242, + 308, + 247, + 310, + 275, + 311, + 279, + 322, + 293, + 325, + 303, + 320, + 406, + 315, + 432, + 309, + 444, + 303, + 450, + 299, + 451, + 292, + 447, + 291, + 451, + 286, + 455 + ] + ], + "image_id": "72", + "id": 191 + }, + { + "area": 27195, + "iscrowd": 0, + "bbox": [ + 372, + 245, + 110, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 430, + 485, + 423, + 485, + 404, + 481, + 390, + 473, + 379, + 458, + 377, + 453, + 377, + 444, + 381, + 418, + 381, + 406, + 390, + 380, + 391, + 327, + 395, + 318, + 407, + 304, + 411, + 297, + 411, + 288, + 407, + 280, + 408, + 273, + 415, + 269, + 416, + 256, + 420, + 251, + 433, + 247, + 443, + 247, + 465, + 252, + 471, + 255, + 474, + 258, + 472, + 275, + 476, + 279, + 478, + 287, + 468, + 299, + 468, + 308, + 477, + 325, + 478, + 348, + 476, + 356, + 473, + 359, + 472, + 365, + 468, + 371, + 465, + 383, + 465, + 422, + 461, + 436, + 457, + 466, + 454, + 473, + 450, + 477, + 443, + 481, + 430, + 485 + ] + ], + "image_id": "72", + "id": 192 + }, + { + "area": 17200, + "iscrowd": 0, + "bbox": [ + 50, + 312, + 99, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 105, + 480, + 91, + 480, + 81, + 477, + 74, + 473, + 68, + 466, + 65, + 460, + 58, + 397, + 52, + 358, + 52, + 352, + 55, + 342, + 59, + 337, + 59, + 327, + 66, + 321, + 84, + 315, + 92, + 314, + 107, + 314, + 123, + 318, + 130, + 323, + 132, + 326, + 132, + 331, + 138, + 337, + 142, + 344, + 144, + 405, + 147, + 444, + 141, + 449, + 125, + 451, + 122, + 454, + 121, + 474, + 105, + 480 + ] + ], + "image_id": "73", + "id": 193 + }, + { + "area": 29606, + "iscrowd": 0, + "bbox": [ + 168, + 180, + 112, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 184, + 442, + 184, + 441, + 184, + 425, + 183, + 424, + 183, + 408, + 182, + 407, + 182, + 391, + 181, + 390, + 181, + 368, + 180, + 367, + 180, + 345, + 179, + 344, + 179, + 330, + 178, + 329, + 178, + 315, + 177, + 314, + 177, + 300, + 176, + 299, + 176, + 285, + 175, + 284, + 175, + 270, + 174, + 269, + 174, + 254, + 173, + 253, + 173, + 248, + 172, + 247, + 172, + 246, + 174, + 244, + 174, + 232, + 175, + 231, + 175, + 224, + 176, + 223, + 176, + 211, + 177, + 210, + 177, + 202, + 176, + 201, + 176, + 193, + 175, + 192, + 175, + 190, + 175, + 190, + 176, + 190, + 178, + 188, + 179, + 188, + 180, + 187, + 198, + 187, + 199, + 186, + 230, + 186, + 231, + 185, + 254, + 185, + 255, + 184, + 268, + 184, + 269, + 185, + 270, + 185, + 273, + 187, + 273, + 189, + 274, + 190, + 274, + 207, + 273, + 208, + 273, + 226, + 274, + 227, + 274, + 239, + 275, + 240, + 275, + 244, + 276, + 245, + 276, + 427, + 275, + 428, + 274, + 428, + 273, + 429, + 267, + 429, + 266, + 430, + 262, + 430, + 261, + 431, + 239, + 431, + 238, + 430, + 235, + 430, + 234, + 429, + 227, + 429, + 226, + 428, + 209, + 428, + 208, + 429, + 205, + 429, + 204, + 430, + 203, + 430, + 202, + 431, + 201, + 431, + 200, + 432, + 199, + 432, + 198, + 433, + 197, + 433, + 196, + 434, + 195, + 434, + 194, + 435, + 193, + 435, + 192, + 436, + 191, + 436, + 190, + 437, + 189, + 437, + 184, + 442 + ] + ], + "image_id": "73", + "id": 194 + }, + { + "area": 20430, + "iscrowd": 0, + "bbox": [ + 278, + 206, + 89, + 226 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 287, + 425, + 286, + 424, + 281, + 410, + 284, + 327, + 287, + 293, + 292, + 284, + 298, + 279, + 303, + 272, + 308, + 246, + 310, + 238, + 312, + 236, + 310, + 231, + 311, + 213, + 319, + 209, + 346, + 210, + 352, + 212, + 354, + 216, + 354, + 232, + 352, + 234, + 352, + 273, + 360, + 284, + 366, + 297, + 365, + 327, + 359, + 369, + 356, + 411, + 354, + 415, + 354, + 420, + 305, + 422, + 287, + 425 + ] + ], + "image_id": "73", + "id": 195 + }, + { + "area": 27930, + "iscrowd": 0, + "bbox": [ + 118, + 418, + 265, + 104 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 222, + 520, + 210, + 520, + 204, + 517, + 196, + 516, + 179, + 506, + 167, + 506, + 161, + 509, + 158, + 513, + 153, + 514, + 148, + 512, + 145, + 508, + 127, + 508, + 123, + 504, + 121, + 490, + 121, + 465, + 123, + 454, + 127, + 451, + 135, + 451, + 145, + 448, + 147, + 445, + 152, + 443, + 163, + 448, + 178, + 447, + 189, + 438, + 205, + 430, + 213, + 428, + 248, + 432, + 273, + 430, + 279, + 427, + 299, + 423, + 356, + 421, + 362, + 424, + 367, + 429, + 372, + 438, + 372, + 442, + 375, + 448, + 379, + 477, + 378, + 492, + 376, + 499, + 369, + 507, + 364, + 509, + 315, + 513, + 256, + 511, + 238, + 515, + 234, + 518, + 222, + 520 + ] + ], + "image_id": "73", + "id": 196 + }, + { + "area": 31024, + "iscrowd": 0, + "bbox": [ + 51, + 418, + 276, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 165, + 526, + 150, + 526, + 136, + 522, + 123, + 513, + 119, + 512, + 105, + 512, + 95, + 519, + 87, + 519, + 81, + 514, + 64, + 515, + 59, + 507, + 56, + 494, + 56, + 476, + 61, + 460, + 65, + 456, + 82, + 455, + 88, + 448, + 95, + 448, + 102, + 452, + 116, + 452, + 137, + 437, + 142, + 437, + 155, + 431, + 169, + 431, + 180, + 434, + 209, + 434, + 233, + 427, + 246, + 426, + 255, + 423, + 304, + 421, + 310, + 423, + 317, + 436, + 323, + 462, + 324, + 498, + 322, + 506, + 319, + 510, + 312, + 514, + 298, + 514, + 255, + 519, + 205, + 516, + 187, + 519, + 178, + 523, + 165, + 526 + ] + ], + "image_id": "74", + "id": 197 + }, + { + "area": 37812, + "iscrowd": 0, + "bbox": [ + 96, + 170, + 137, + 273 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 131, + 440, + 113, + 314, + 100, + 244, + 103, + 240, + 104, + 228, + 110, + 206, + 109, + 192, + 106, + 183, + 107, + 181, + 118, + 179, + 139, + 179, + 154, + 178, + 158, + 176, + 202, + 174, + 208, + 179, + 210, + 196, + 218, + 217, + 221, + 289, + 226, + 342, + 231, + 426, + 204, + 434, + 183, + 434, + 174, + 431, + 153, + 431, + 142, + 436, + 137, + 436, + 131, + 440 + ] + ], + "image_id": "74", + "id": 198 + }, + { + "area": 22204, + "iscrowd": 0, + "bbox": [ + 233, + 193, + 90, + 243 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 311, + 424, + 307, + 421, + 260, + 422, + 248, + 424, + 241, + 404, + 237, + 291, + 241, + 281, + 254, + 265, + 256, + 233, + 259, + 228, + 259, + 225, + 256, + 222, + 256, + 203, + 257, + 201, + 264, + 198, + 293, + 198, + 300, + 202, + 301, + 221, + 297, + 226, + 301, + 231, + 301, + 247, + 303, + 260, + 304, + 264, + 317, + 282, + 320, + 294, + 318, + 402, + 314, + 414, + 314, + 420, + 312, + 421, + 311, + 424 + ] + ], + "image_id": "74", + "id": 199 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 344, + 310, + 110, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 399, + 487, + 379, + 485, + 369, + 479, + 354, + 465, + 349, + 455, + 355, + 379, + 355, + 345, + 366, + 330, + 366, + 323, + 370, + 318, + 380, + 314, + 396, + 312, + 417, + 314, + 422, + 317, + 426, + 317, + 440, + 325, + 444, + 330, + 443, + 339, + 450, + 349, + 450, + 358, + 435, + 468, + 427, + 478, + 423, + 479, + 418, + 483, + 399, + 487 + ] + ], + "image_id": "74", + "id": 200 + }, + { + "area": 31857, + "iscrowd": 0, + "bbox": [ + 86, + 205, + 122, + 258 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 122, + 460, + 119, + 458, + 118, + 453, + 91, + 269, + 89, + 265, + 91, + 261, + 92, + 251, + 98, + 234, + 97, + 219, + 95, + 213, + 104, + 211, + 130, + 211, + 136, + 209, + 177, + 209, + 180, + 212, + 183, + 229, + 192, + 241, + 196, + 328, + 202, + 391, + 201, + 400, + 203, + 410, + 203, + 422, + 135, + 452, + 122, + 460 + ] + ], + "image_id": "75", + "id": 201 + }, + { + "area": 44548, + "iscrowd": 0, + "bbox": [ + 36, + 402, + 258, + 171 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 58, + 569, + 54, + 567, + 44, + 549, + 38, + 527, + 39, + 522, + 46, + 517, + 60, + 511, + 66, + 512, + 75, + 504, + 102, + 488, + 110, + 479, + 115, + 468, + 123, + 460, + 131, + 455, + 211, + 420, + 215, + 420, + 216, + 418, + 222, + 417, + 227, + 413, + 237, + 409, + 252, + 406, + 258, + 406, + 260, + 409, + 267, + 409, + 273, + 411, + 279, + 417, + 279, + 422, + 276, + 427, + 285, + 429, + 289, + 432, + 291, + 442, + 287, + 449, + 292, + 454, + 291, + 460, + 284, + 470, + 272, + 481, + 258, + 487, + 257, + 489, + 184, + 528, + 178, + 533, + 163, + 539, + 157, + 543, + 142, + 543, + 134, + 540, + 124, + 540, + 98, + 550, + 81, + 554, + 81, + 557, + 78, + 558, + 77, + 560, + 74, + 560, + 73, + 562, + 70, + 562, + 62, + 568, + 58, + 569 + ] + ], + "image_id": "75", + "id": 202 + }, + { + "area": 12920, + "iscrowd": 0, + "bbox": [ + 297, + 323, + 84, + 151 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 337, + 471, + 325, + 470, + 317, + 466, + 307, + 458, + 302, + 452, + 301, + 449, + 300, + 445, + 302, + 353, + 310, + 340, + 311, + 332, + 317, + 328, + 328, + 325, + 347, + 325, + 360, + 328, + 372, + 336, + 373, + 345, + 378, + 353, + 378, + 366, + 371, + 450, + 369, + 455, + 363, + 462, + 354, + 467, + 337, + 471 + ] + ], + "image_id": "75", + "id": 203 + }, + { + "area": 21024, + "iscrowd": 0, + "bbox": [ + 386, + 268, + 95, + 218 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 443, + 483, + 419, + 481, + 413, + 479, + 408, + 475, + 405, + 475, + 398, + 469, + 392, + 461, + 390, + 455, + 392, + 444, + 393, + 410, + 401, + 385, + 399, + 345, + 403, + 336, + 418, + 315, + 418, + 308, + 414, + 301, + 414, + 297, + 421, + 290, + 423, + 276, + 428, + 273, + 437, + 271, + 449, + 271, + 464, + 274, + 469, + 277, + 474, + 282, + 473, + 296, + 478, + 303, + 477, + 308, + 470, + 315, + 469, + 319, + 469, + 326, + 478, + 342, + 479, + 361, + 477, + 370, + 470, + 382, + 469, + 427, + 466, + 439, + 463, + 465, + 459, + 473, + 455, + 477, + 447, + 481, + 444, + 481, + 443, + 483 + ] + ], + "image_id": "75", + "id": 204 + }, + { + "area": 32574, + "iscrowd": 0, + "bbox": [ + 32, + 247, + 121, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 99, + 509, + 88, + 509, + 74, + 504, + 61, + 488, + 52, + 439, + 52, + 400, + 48, + 387, + 38, + 366, + 37, + 359, + 37, + 347, + 39, + 337, + 48, + 319, + 48, + 309, + 38, + 293, + 38, + 287, + 44, + 279, + 43, + 262, + 47, + 257, + 58, + 252, + 71, + 250, + 93, + 251, + 101, + 254, + 106, + 257, + 109, + 275, + 115, + 279, + 118, + 286, + 117, + 292, + 113, + 299, + 113, + 308, + 128, + 326, + 134, + 335, + 136, + 342, + 137, + 356, + 134, + 366, + 134, + 392, + 143, + 419, + 145, + 442, + 147, + 448, + 147, + 471, + 136, + 491, + 118, + 504, + 110, + 508, + 99, + 509 + ] + ], + "image_id": "76", + "id": 205 + }, + { + "area": 39087, + "iscrowd": 0, + "bbox": [ + 110, + 157, + 128, + 302 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 165, + 455, + 147, + 454, + 144, + 419, + 137, + 398, + 135, + 386, + 134, + 371, + 137, + 361, + 137, + 346, + 134, + 333, + 127, + 323, + 121, + 273, + 113, + 229, + 121, + 195, + 121, + 176, + 119, + 168, + 123, + 165, + 216, + 161, + 220, + 166, + 222, + 186, + 225, + 193, + 225, + 198, + 228, + 203, + 229, + 271, + 235, + 374, + 235, + 420, + 165, + 455 + ] + ], + "image_id": "76", + "id": 206 + }, + { + "area": 60680, + "iscrowd": 0, + "bbox": [ + 57, + 393, + 295, + 204 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 89, + 592, + 84, + 592, + 81, + 589, + 67, + 565, + 62, + 551, + 61, + 538, + 65, + 533, + 70, + 532, + 88, + 522, + 90, + 524, + 93, + 524, + 100, + 516, + 110, + 511, + 135, + 493, + 139, + 489, + 145, + 475, + 158, + 460, + 179, + 448, + 187, + 446, + 213, + 432, + 284, + 399, + 303, + 396, + 310, + 400, + 321, + 400, + 332, + 408, + 333, + 415, + 326, + 422, + 336, + 422, + 343, + 425, + 347, + 434, + 347, + 440, + 344, + 444, + 347, + 456, + 341, + 468, + 324, + 483, + 312, + 489, + 222, + 547, + 219, + 547, + 208, + 554, + 198, + 558, + 183, + 558, + 175, + 557, + 173, + 555, + 163, + 555, + 123, + 572, + 117, + 572, + 113, + 574, + 112, + 578, + 89, + 592 + ] + ], + "image_id": "76", + "id": 207 + }, + { + "area": 18656, + "iscrowd": 0, + "bbox": [ + 348, + 300, + 105, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 398, + 470, + 378, + 468, + 362, + 457, + 350, + 444, + 350, + 430, + 359, + 330, + 370, + 318, + 370, + 311, + 373, + 308, + 384, + 304, + 402, + 302, + 417, + 304, + 440, + 313, + 446, + 318, + 446, + 330, + 451, + 338, + 451, + 346, + 432, + 452, + 426, + 460, + 418, + 465, + 398, + 470 + ] + ], + "image_id": "76", + "id": 208 + }, + { + "area": 19530, + "iscrowd": 0, + "bbox": [ + 47, + 209, + 92, + 209 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 73, + 413, + 70, + 412, + 69, + 408, + 69, + 403, + 61, + 369, + 61, + 327, + 53, + 308, + 50, + 296, + 51, + 284, + 54, + 279, + 56, + 270, + 59, + 266, + 59, + 254, + 52, + 246, + 51, + 242, + 56, + 235, + 55, + 221, + 58, + 216, + 73, + 211, + 89, + 211, + 98, + 213, + 104, + 216, + 106, + 221, + 107, + 232, + 114, + 237, + 114, + 242, + 110, + 248, + 110, + 257, + 124, + 276, + 129, + 288, + 127, + 328, + 130, + 341, + 134, + 348, + 136, + 364, + 108, + 378, + 100, + 388, + 97, + 397, + 91, + 403, + 83, + 406, + 73, + 413 + ] + ], + "image_id": "77", + "id": 209 + }, + { + "area": 34602, + "iscrowd": 0, + "bbox": [ + 29, + 331, + 236, + 145 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 57, + 473, + 53, + 473, + 49, + 470, + 43, + 461, + 36, + 443, + 36, + 433, + 42, + 427, + 57, + 421, + 62, + 422, + 80, + 409, + 91, + 404, + 98, + 397, + 101, + 388, + 103, + 387, + 105, + 382, + 113, + 376, + 120, + 372, + 128, + 370, + 135, + 366, + 213, + 335, + 238, + 334, + 245, + 336, + 249, + 339, + 248, + 347, + 253, + 348, + 258, + 351, + 261, + 357, + 261, + 361, + 258, + 365, + 258, + 368, + 262, + 372, + 262, + 379, + 255, + 388, + 244, + 396, + 241, + 400, + 231, + 404, + 174, + 435, + 157, + 446, + 145, + 451, + 133, + 452, + 124, + 449, + 111, + 449, + 106, + 452, + 102, + 452, + 101, + 454, + 97, + 454, + 92, + 457, + 78, + 460, + 76, + 463, + 57, + 473 + ] + ], + "image_id": "77", + "id": 210 + }, + { + "area": 12972, + "iscrowd": 0, + "bbox": [ + 261, + 293, + 93, + 137 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 265, + 429, + 264, + 428, + 265, + 386, + 268, + 355, + 268, + 330, + 270, + 323, + 277, + 315, + 277, + 307, + 284, + 301, + 301, + 297, + 319, + 298, + 340, + 305, + 344, + 307, + 347, + 312, + 346, + 319, + 352, + 330, + 351, + 356, + 349, + 363, + 348, + 380, + 265, + 429 + ] + ], + "image_id": "77", + "id": 211 + }, + { + "area": 69402, + "iscrowd": 0, + "bbox": [ + 209, + 352, + 268, + 257 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 304, + 603, + 266, + 597, + 247, + 590, + 239, + 590, + 231, + 593, + 224, + 600, + 221, + 598, + 218, + 592, + 218, + 575, + 215, + 554, + 214, + 510, + 218, + 505, + 227, + 501, + 227, + 462, + 225, + 457, + 226, + 453, + 229, + 450, + 235, + 448, + 394, + 355, + 412, + 361, + 427, + 369, + 445, + 375, + 465, + 385, + 470, + 386, + 474, + 389, + 473, + 403, + 458, + 461, + 365, + 546, + 324, + 586, + 304, + 603 + ] + ], + "image_id": "77", + "id": 212 + }, + { + "area": 23607, + "iscrowd": 0, + "bbox": [ + 22, + 371, + 182, + 128 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 43, + 496, + 40, + 495, + 34, + 486, + 27, + 465, + 27, + 456, + 30, + 453, + 48, + 447, + 53, + 448, + 69, + 437, + 78, + 434, + 91, + 424, + 94, + 417, + 102, + 408, + 109, + 404, + 131, + 398, + 185, + 378, + 200, + 374, + 199, + 451, + 148, + 473, + 147, + 475, + 130, + 481, + 122, + 481, + 112, + 479, + 109, + 477, + 96, + 477, + 72, + 483, + 71, + 485, + 63, + 485, + 61, + 489, + 58, + 489, + 43, + 496 + ] + ], + "image_id": "78", + "id": 213 + }, + { + "area": 33824, + "iscrowd": 0, + "bbox": [ + 196, + 220, + 111, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 246, + 517, + 204, + 517, + 204, + 516, + 204, + 514, + 203, + 513, + 203, + 496, + 202, + 495, + 202, + 477, + 201, + 476, + 201, + 457, + 200, + 456, + 200, + 295, + 199, + 294, + 199, + 289, + 200, + 288, + 200, + 265, + 201, + 264, + 201, + 228, + 205, + 224, + 213, + 224, + 214, + 223, + 252, + 223, + 253, + 224, + 296, + 224, + 297, + 225, + 299, + 225, + 303, + 228, + 303, + 232, + 302, + 233, + 302, + 248, + 301, + 249, + 301, + 250, + 300, + 251, + 300, + 256, + 301, + 257, + 301, + 260, + 302, + 261, + 302, + 275, + 303, + 276, + 303, + 280, + 304, + 281, + 304, + 284, + 305, + 285, + 305, + 289, + 306, + 290, + 306, + 291, + 305, + 292, + 305, + 293, + 304, + 294, + 304, + 305, + 303, + 306, + 303, + 319, + 302, + 320, + 302, + 342, + 301, + 343, + 301, + 360, + 300, + 361, + 300, + 380, + 299, + 381, + 299, + 400, + 298, + 401, + 298, + 421, + 297, + 422, + 297, + 441, + 296, + 442, + 296, + 460, + 295, + 461, + 295, + 480, + 294, + 481, + 294, + 512, + 291, + 515, + 268, + 515, + 267, + 516, + 247, + 516, + 246, + 517 + ] + ], + "image_id": "78", + "id": 214 + }, + { + "area": 23040, + "iscrowd": 0, + "bbox": [ + 291, + 281, + 95, + 239 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 345, + 518, + 331, + 518, + 310, + 511, + 301, + 503, + 295, + 490, + 298, + 426, + 301, + 419, + 302, + 408, + 302, + 399, + 300, + 393, + 301, + 360, + 302, + 353, + 305, + 348, + 310, + 344, + 315, + 332, + 315, + 327, + 310, + 319, + 309, + 313, + 316, + 306, + 318, + 291, + 323, + 287, + 332, + 284, + 349, + 284, + 363, + 287, + 367, + 289, + 372, + 294, + 372, + 310, + 377, + 317, + 377, + 322, + 370, + 333, + 370, + 343, + 378, + 355, + 383, + 372, + 382, + 386, + 373, + 411, + 373, + 423, + 375, + 432, + 375, + 458, + 370, + 498, + 363, + 508, + 356, + 514, + 345, + 518 + ] + ], + "image_id": "78", + "id": 215 + }, + { + "area": 15717, + "iscrowd": 0, + "bbox": [ + 369, + 338, + 92, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 420, + 499, + 402, + 499, + 390, + 496, + 380, + 492, + 373, + 484, + 376, + 443, + 373, + 415, + 374, + 408, + 376, + 407, + 378, + 397, + 381, + 393, + 383, + 386, + 383, + 368, + 379, + 358, + 382, + 356, + 381, + 350, + 382, + 348, + 394, + 342, + 400, + 341, + 425, + 342, + 445, + 350, + 453, + 357, + 453, + 368, + 458, + 376, + 458, + 386, + 452, + 416, + 449, + 446, + 445, + 461, + 445, + 474, + 443, + 484, + 434, + 495, + 430, + 495, + 420, + 499 + ] + ], + "image_id": "78", + "id": 216 + }, + { + "area": 33330, + "iscrowd": 0, + "bbox": [ + 53, + 391, + 201, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 99, + 552, + 92, + 551, + 88, + 548, + 75, + 531, + 61, + 499, + 58, + 486, + 58, + 475, + 62, + 471, + 69, + 469, + 80, + 453, + 83, + 451, + 197, + 395, + 210, + 392, + 220, + 396, + 230, + 403, + 241, + 414, + 249, + 432, + 249, + 461, + 246, + 470, + 170, + 519, + 125, + 546, + 103, + 547, + 101, + 548, + 99, + 552 + ] + ], + "image_id": "79", + "id": 217 + }, + { + "area": 26496, + "iscrowd": 0, + "bbox": [ + 55, + 326, + 191, + 137 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 75, + 460, + 72, + 460, + 69, + 456, + 64, + 449, + 59, + 437, + 57, + 431, + 57, + 420, + 58, + 417, + 80, + 409, + 84, + 410, + 92, + 404, + 111, + 394, + 122, + 386, + 122, + 383, + 131, + 370, + 142, + 363, + 160, + 358, + 229, + 332, + 236, + 330, + 243, + 330, + 240, + 413, + 229, + 401, + 222, + 396, + 213, + 392, + 202, + 392, + 90, + 446, + 81, + 451, + 75, + 460 + ] + ], + "image_id": "79", + "id": 218 + }, + { + "area": 42826, + "iscrowd": 0, + "bbox": [ + 238, + 160, + 132, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 256, + 480, + 249, + 480, + 247, + 477, + 250, + 453, + 250, + 432, + 241, + 413, + 246, + 266, + 246, + 223, + 247, + 206, + 251, + 200, + 252, + 171, + 256, + 165, + 261, + 163, + 356, + 165, + 361, + 169, + 358, + 198, + 362, + 209, + 368, + 237, + 366, + 241, + 365, + 259, + 350, + 377, + 342, + 449, + 341, + 476, + 338, + 478, + 280, + 478, + 256, + 480 + ] + ], + "image_id": "79", + "id": 219 + }, + { + "area": 27904, + "iscrowd": 0, + "bbox": [ + 337, + 229, + 108, + 255 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 392, + 481, + 372, + 479, + 359, + 474, + 344, + 460, + 343, + 449, + 360, + 302, + 361, + 297, + 370, + 286, + 370, + 275, + 365, + 269, + 365, + 263, + 374, + 254, + 374, + 246, + 377, + 237, + 394, + 231, + 402, + 231, + 417, + 233, + 429, + 237, + 435, + 242, + 436, + 249, + 434, + 262, + 439, + 266, + 440, + 272, + 431, + 286, + 430, + 295, + 439, + 315, + 441, + 338, + 438, + 350, + 433, + 359, + 429, + 373, + 429, + 412, + 421, + 460, + 413, + 472, + 400, + 479, + 394, + 479, + 392, + 481 + ] + ], + "image_id": "79", + "id": 220 + }, + { + "area": 22852, + "iscrowd": 0, + "bbox": [ + 44, + 337, + 115, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 113, + 525, + 88, + 524, + 75, + 519, + 68, + 510, + 48, + 392, + 49, + 382, + 53, + 373, + 56, + 370, + 56, + 357, + 63, + 352, + 76, + 346, + 94, + 341, + 114, + 341, + 126, + 344, + 131, + 347, + 137, + 351, + 139, + 355, + 139, + 360, + 147, + 369, + 149, + 377, + 151, + 421, + 155, + 459, + 156, + 494, + 153, + 503, + 143, + 513, + 125, + 523, + 113, + 525 + ] + ], + "image_id": "80", + "id": 221 + }, + { + "area": 34352, + "iscrowd": 0, + "bbox": [ + 142, + 228, + 112, + 303 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 204, + 528, + 195, + 525, + 189, + 516, + 182, + 521, + 175, + 521, + 167, + 511, + 163, + 503, + 163, + 499, + 156, + 481, + 156, + 460, + 152, + 421, + 150, + 378, + 147, + 368, + 148, + 344, + 155, + 329, + 164, + 319, + 166, + 312, + 167, + 288, + 170, + 274, + 170, + 270, + 167, + 267, + 167, + 242, + 169, + 239, + 187, + 234, + 212, + 235, + 222, + 241, + 223, + 266, + 220, + 268, + 220, + 272, + 222, + 275, + 222, + 284, + 226, + 298, + 227, + 310, + 231, + 320, + 241, + 329, + 247, + 341, + 249, + 349, + 246, + 481, + 243, + 494, + 240, + 505, + 229, + 519, + 223, + 519, + 217, + 515, + 214, + 521, + 208, + 527, + 204, + 528 + ] + ], + "image_id": "80", + "id": 222 + }, + { + "area": 48422, + "iscrowd": 0, + "bbox": [ + 245, + 192, + 141, + 340 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 296, + 527, + 253, + 527, + 251, + 520, + 250, + 502, + 247, + 488, + 246, + 478, + 248, + 474, + 252, + 321, + 256, + 241, + 261, + 230, + 262, + 207, + 265, + 200, + 267, + 198, + 273, + 196, + 370, + 199, + 373, + 200, + 377, + 204, + 373, + 232, + 384, + 271, + 384, + 278, + 374, + 335, + 351, + 510, + 351, + 523, + 348, + 526, + 296, + 527 + ] + ], + "image_id": "80", + "id": 223 + }, + { + "area": 30705, + "iscrowd": 0, + "bbox": [ + 349, + 266, + 114, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 411, + 529, + 390, + 529, + 374, + 523, + 363, + 516, + 355, + 507, + 353, + 502, + 374, + 342, + 377, + 332, + 384, + 326, + 384, + 312, + 380, + 307, + 381, + 299, + 383, + 296, + 388, + 293, + 390, + 277, + 396, + 271, + 406, + 268, + 421, + 268, + 441, + 272, + 452, + 279, + 454, + 281, + 452, + 300, + 457, + 304, + 459, + 310, + 458, + 315, + 448, + 326, + 448, + 336, + 458, + 358, + 459, + 380, + 456, + 392, + 452, + 398, + 447, + 412, + 445, + 425, + 446, + 455, + 444, + 469, + 441, + 477, + 441, + 486, + 435, + 511, + 429, + 520, + 423, + 525, + 411, + 529 + ] + ], + "image_id": "80", + "id": 224 + }, + { + "area": 17430, + "iscrowd": 0, + "bbox": [ + 24, + 336, + 104, + 165 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 82, + 496, + 63, + 495, + 56, + 492, + 49, + 485, + 27, + 385, + 28, + 375, + 32, + 368, + 31, + 360, + 34, + 353, + 45, + 347, + 68, + 340, + 95, + 343, + 103, + 352, + 102, + 355, + 109, + 361, + 109, + 369, + 114, + 396, + 116, + 427, + 121, + 453, + 121, + 461, + 123, + 465, + 123, + 472, + 115, + 482, + 104, + 490, + 94, + 495, + 82, + 496 + ] + ], + "image_id": "81", + "id": 225 + }, + { + "area": 25900, + "iscrowd": 0, + "bbox": [ + 106, + 244, + 99, + 258 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 164, + 498, + 157, + 498, + 152, + 495, + 148, + 490, + 139, + 493, + 135, + 489, + 128, + 479, + 122, + 461, + 122, + 453, + 117, + 427, + 115, + 396, + 110, + 369, + 109, + 352, + 111, + 339, + 122, + 323, + 123, + 318, + 123, + 288, + 125, + 282, + 121, + 277, + 120, + 260, + 123, + 256, + 139, + 252, + 155, + 252, + 160, + 253, + 167, + 257, + 169, + 273, + 167, + 281, + 169, + 283, + 172, + 294, + 175, + 314, + 177, + 318, + 190, + 330, + 195, + 341, + 197, + 356, + 201, + 459, + 198, + 470, + 195, + 473, + 194, + 478, + 189, + 486, + 185, + 490, + 180, + 492, + 172, + 486, + 164, + 498 + ] + ], + "image_id": "81", + "id": 226 + }, + { + "area": 20025, + "iscrowd": 0, + "bbox": [ + 265, + 268, + 88, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 315, + 488, + 305, + 488, + 285, + 481, + 277, + 473, + 274, + 468, + 271, + 456, + 271, + 421, + 276, + 399, + 276, + 375, + 271, + 362, + 271, + 354, + 275, + 339, + 286, + 324, + 286, + 312, + 282, + 307, + 282, + 302, + 287, + 294, + 288, + 280, + 297, + 274, + 307, + 272, + 328, + 274, + 337, + 279, + 338, + 297, + 342, + 300, + 344, + 303, + 343, + 310, + 339, + 312, + 337, + 315, + 337, + 323, + 339, + 328, + 346, + 337, + 346, + 341, + 349, + 346, + 346, + 376, + 343, + 387, + 342, + 468, + 340, + 474, + 335, + 479, + 321, + 487, + 315, + 488 + ] + ], + "image_id": "81", + "id": 227 + }, + { + "area": 43071, + "iscrowd": 0, + "bbox": [ + 340, + 217, + 146, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 438, + 504, + 354, + 503, + 351, + 496, + 344, + 467, + 343, + 405, + 360, + 266, + 360, + 257, + 363, + 252, + 373, + 243, + 375, + 227, + 382, + 220, + 465, + 221, + 471, + 223, + 474, + 225, + 470, + 241, + 470, + 249, + 475, + 259, + 476, + 266, + 482, + 282, + 483, + 290, + 473, + 329, + 438, + 504 + ] + ], + "image_id": "81", + "id": 228 + }, + { + "area": 15876, + "iscrowd": 0, + "bbox": [ + 29, + 323, + 107, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 54, + 463, + 50, + 462, + 46, + 448, + 35, + 391, + 33, + 372, + 31, + 368, + 33, + 359, + 37, + 352, + 37, + 340, + 48, + 332, + 73, + 324, + 87, + 324, + 100, + 326, + 111, + 333, + 112, + 340, + 120, + 348, + 123, + 355, + 131, + 440, + 115, + 441, + 107, + 444, + 96, + 450, + 85, + 459, + 59, + 461, + 54, + 463 + ] + ], + "image_id": "82", + "id": 229 + }, + { + "area": 21528, + "iscrowd": 0, + "bbox": [ + 248, + 256, + 91, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 302, + 486, + 299, + 485, + 299, + 482, + 294, + 476, + 298, + 472, + 298, + 455, + 292, + 450, + 282, + 444, + 275, + 444, + 270, + 442, + 255, + 442, + 252, + 440, + 252, + 407, + 257, + 393, + 257, + 368, + 253, + 356, + 252, + 347, + 256, + 331, + 261, + 322, + 267, + 316, + 269, + 311, + 269, + 302, + 264, + 295, + 264, + 288, + 271, + 279, + 271, + 268, + 273, + 265, + 279, + 261, + 290, + 258, + 301, + 258, + 317, + 261, + 324, + 266, + 326, + 270, + 325, + 285, + 329, + 288, + 331, + 292, + 329, + 302, + 326, + 303, + 324, + 307, + 324, + 316, + 330, + 324, + 336, + 339, + 336, + 359, + 334, + 361, + 328, + 383, + 330, + 415, + 328, + 446, + 325, + 464, + 322, + 472, + 317, + 477, + 302, + 486 + ] + ], + "image_id": "82", + "id": 230 + }, + { + "area": 50080, + "iscrowd": 0, + "bbox": [ + 327, + 200, + 159, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 424, + 506, + 337, + 504, + 335, + 500, + 327, + 457, + 330, + 428, + 330, + 396, + 334, + 366, + 336, + 361, + 336, + 351, + 350, + 253, + 350, + 243, + 351, + 240, + 366, + 226, + 367, + 210, + 370, + 206, + 375, + 203, + 414, + 204, + 432, + 206, + 466, + 206, + 473, + 209, + 475, + 212, + 470, + 231, + 470, + 238, + 480, + 266, + 483, + 282, + 479, + 293, + 452, + 404, + 436, + 462, + 428, + 496, + 428, + 503, + 424, + 506 + ] + ], + "image_id": "82", + "id": 231 + }, + { + "area": 33136, + "iscrowd": 0, + "bbox": [ + 1, + 437, + 303, + 108 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 264, + 541, + 111, + 540, + 96, + 533, + 79, + 519, + 45, + 515, + 40, + 512, + 37, + 512, + 33, + 515, + 13, + 514, + 8, + 510, + 4, + 502, + 4, + 489, + 8, + 473, + 12, + 467, + 16, + 464, + 36, + 463, + 41, + 466, + 45, + 466, + 59, + 462, + 85, + 460, + 101, + 448, + 115, + 442, + 121, + 441, + 266, + 442, + 275, + 445, + 282, + 445, + 294, + 453, + 297, + 455, + 298, + 459, + 297, + 472, + 293, + 476, + 299, + 483, + 300, + 495, + 294, + 502, + 294, + 504, + 298, + 509, + 300, + 516, + 298, + 524, + 292, + 532, + 284, + 536, + 264, + 541 + ] + ], + "image_id": "82", + "id": 232 + }, + { + "area": 43566, + "iscrowd": 0, + "bbox": [ + 53, + 212, + 136, + 317 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 91, + 526, + 83, + 526, + 81, + 522, + 78, + 478, + 64, + 372, + 56, + 284, + 58, + 281, + 65, + 277, + 86, + 254, + 104, + 246, + 105, + 226, + 111, + 218, + 117, + 214, + 121, + 219, + 122, + 230, + 126, + 237, + 131, + 237, + 136, + 232, + 145, + 233, + 157, + 239, + 170, + 249, + 172, + 252, + 172, + 283, + 174, + 294, + 178, + 363, + 178, + 392, + 182, + 448, + 182, + 479, + 177, + 516, + 173, + 523, + 128, + 523, + 91, + 526 + ] + ], + "image_id": "83", + "id": 233 + }, + { + "area": 14696, + "iscrowd": 0, + "bbox": [ + 177, + 335, + 87, + 166 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 236, + 496, + 209, + 496, + 197, + 492, + 190, + 486, + 183, + 475, + 182, + 427, + 178, + 376, + 179, + 368, + 186, + 359, + 184, + 355, + 186, + 349, + 189, + 346, + 206, + 339, + 229, + 338, + 242, + 341, + 253, + 348, + 254, + 358, + 259, + 363, + 259, + 474, + 257, + 481, + 252, + 487, + 236, + 496 + ] + ], + "image_id": "83", + "id": 234 + }, + { + "area": 26190, + "iscrowd": 0, + "bbox": [ + 254, + 246, + 96, + 269 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 306, + 512, + 296, + 511, + 290, + 505, + 288, + 501, + 286, + 504, + 281, + 506, + 272, + 502, + 261, + 477, + 259, + 469, + 259, + 348, + 264, + 337, + 279, + 317, + 283, + 284, + 283, + 259, + 286, + 255, + 293, + 252, + 316, + 251, + 327, + 254, + 331, + 256, + 329, + 299, + 332, + 323, + 343, + 336, + 345, + 344, + 348, + 348, + 348, + 372, + 345, + 391, + 345, + 418, + 341, + 469, + 338, + 478, + 337, + 488, + 332, + 498, + 326, + 504, + 323, + 506, + 319, + 506, + 314, + 503, + 313, + 506, + 306, + 512 + ] + ], + "image_id": "83", + "id": 235 + }, + { + "area": 25544, + "iscrowd": 0, + "bbox": [ + 338, + 281, + 102, + 247 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 389, + 525, + 379, + 524, + 359, + 518, + 347, + 508, + 341, + 498, + 340, + 475, + 343, + 456, + 344, + 434, + 350, + 419, + 351, + 409, + 351, + 394, + 348, + 384, + 348, + 369, + 355, + 351, + 359, + 345, + 365, + 341, + 367, + 334, + 367, + 326, + 363, + 321, + 362, + 317, + 363, + 311, + 369, + 305, + 372, + 291, + 376, + 287, + 383, + 284, + 407, + 284, + 421, + 289, + 428, + 295, + 427, + 312, + 433, + 319, + 433, + 324, + 426, + 332, + 425, + 348, + 433, + 360, + 435, + 366, + 436, + 385, + 429, + 403, + 425, + 419, + 426, + 462, + 423, + 473, + 420, + 503, + 417, + 510, + 411, + 517, + 409, + 517, + 403, + 522, + 389, + 525 + ] + ], + "image_id": "83", + "id": 236 + }, + { + "area": 41580, + "iscrowd": 0, + "bbox": [ + 88, + 150, + 134, + 307 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 123, + 447, + 117, + 446, + 104, + 341, + 92, + 227, + 100, + 218, + 107, + 203, + 109, + 201, + 120, + 193, + 143, + 180, + 143, + 157, + 144, + 153, + 146, + 152, + 153, + 171, + 155, + 175, + 165, + 177, + 168, + 171, + 176, + 170, + 202, + 184, + 209, + 190, + 210, + 193, + 205, + 203, + 205, + 215, + 206, + 225, + 209, + 230, + 209, + 260, + 214, + 315, + 213, + 340, + 217, + 395, + 217, + 421, + 190, + 424, + 174, + 432, + 163, + 441, + 154, + 444, + 146, + 443, + 138, + 438, + 133, + 438, + 127, + 445, + 123, + 447 + ] + ], + "image_id": "84", + "id": 237 + }, + { + "area": 13524, + "iscrowd": 0, + "bbox": [ + 209, + 283, + 91, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 252, + 426, + 236, + 426, + 235, + 425, + 228, + 425, + 227, + 424, + 220, + 424, + 219, + 423, + 218, + 423, + 218, + 422, + 218, + 396, + 217, + 395, + 217, + 378, + 216, + 377, + 216, + 360, + 215, + 359, + 215, + 342, + 214, + 341, + 214, + 325, + 213, + 324, + 213, + 319, + 214, + 318, + 214, + 317, + 215, + 316, + 215, + 314, + 216, + 313, + 216, + 312, + 220, + 308, + 220, + 307, + 221, + 306, + 221, + 302, + 220, + 301, + 220, + 300, + 221, + 299, + 221, + 297, + 224, + 294, + 225, + 294, + 228, + 291, + 229, + 291, + 230, + 290, + 231, + 290, + 232, + 289, + 234, + 289, + 235, + 288, + 236, + 288, + 237, + 287, + 239, + 287, + 240, + 286, + 241, + 286, + 242, + 285, + 246, + 285, + 247, + 284, + 258, + 284, + 259, + 285, + 271, + 285, + 272, + 286, + 277, + 286, + 279, + 288, + 280, + 288, + 281, + 289, + 282, + 289, + 283, + 290, + 284, + 290, + 286, + 292, + 287, + 292, + 292, + 296, + 292, + 297, + 293, + 298, + 293, + 300, + 292, + 301, + 292, + 306, + 298, + 312, + 298, + 378, + 297, + 379, + 297, + 416, + 296, + 417, + 288, + 417, + 287, + 418, + 281, + 418, + 280, + 419, + 278, + 419, + 277, + 420, + 275, + 420, + 274, + 421, + 270, + 421, + 269, + 422, + 267, + 422, + 266, + 423, + 264, + 423, + 263, + 424, + 258, + 424, + 257, + 425, + 253, + 425, + 252, + 426 + ] + ], + "image_id": "84", + "id": 238 + }, + { + "area": 28140, + "iscrowd": 0, + "bbox": [ + 293, + 185, + 104, + 267 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 375, + 441, + 369, + 424, + 361, + 415, + 297, + 415, + 299, + 294, + 302, + 289, + 303, + 282, + 319, + 262, + 325, + 234, + 325, + 225, + 328, + 222, + 328, + 217, + 326, + 215, + 327, + 196, + 329, + 191, + 335, + 188, + 360, + 187, + 376, + 191, + 380, + 194, + 379, + 215, + 375, + 219, + 375, + 223, + 377, + 226, + 377, + 257, + 380, + 269, + 389, + 280, + 392, + 286, + 394, + 313, + 385, + 379, + 382, + 418, + 380, + 429, + 375, + 441 + ] + ], + "image_id": "84", + "id": 239 + }, + { + "area": 32032, + "iscrowd": 0, + "bbox": [ + 96, + 412, + 285, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 209, + 521, + 191, + 520, + 185, + 518, + 165, + 506, + 151, + 506, + 140, + 513, + 132, + 513, + 128, + 507, + 106, + 507, + 102, + 498, + 100, + 487, + 100, + 471, + 103, + 453, + 107, + 448, + 110, + 447, + 125, + 447, + 133, + 439, + 138, + 439, + 146, + 444, + 159, + 444, + 167, + 440, + 173, + 434, + 190, + 425, + 208, + 422, + 228, + 426, + 257, + 426, + 281, + 419, + 304, + 416, + 359, + 415, + 364, + 418, + 373, + 434, + 378, + 456, + 379, + 468, + 378, + 494, + 377, + 498, + 370, + 507, + 364, + 510, + 331, + 511, + 307, + 514, + 288, + 514, + 281, + 512, + 256, + 511, + 250, + 513, + 234, + 514, + 224, + 518, + 209, + 521 + ] + ], + "image_id": "84", + "id": 240 + }, + { + "area": 61060, + "iscrowd": 0, + "bbox": [ + 26, + 195, + 214, + 283 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 110, + 473, + 43, + 442, + 33, + 439, + 32, + 435, + 122, + 259, + 129, + 246, + 133, + 242, + 135, + 236, + 148, + 218, + 152, + 215, + 196, + 216, + 202, + 203, + 205, + 224, + 208, + 228, + 218, + 226, + 224, + 231, + 233, + 248, + 235, + 258, + 222, + 267, + 220, + 288, + 204, + 317, + 123, + 451, + 113, + 471, + 110, + 473 + ] + ], + "image_id": "85", + "id": 241 + }, + { + "area": 23205, + "iscrowd": 0, + "bbox": [ + 211, + 214, + 90, + 254 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 257, + 465, + 246, + 463, + 242, + 458, + 241, + 456, + 235, + 458, + 229, + 456, + 225, + 451, + 221, + 439, + 217, + 419, + 216, + 310, + 225, + 293, + 233, + 283, + 234, + 263, + 239, + 250, + 239, + 246, + 236, + 244, + 236, + 224, + 242, + 220, + 262, + 218, + 274, + 220, + 278, + 222, + 281, + 225, + 281, + 241, + 279, + 245, + 279, + 254, + 282, + 286, + 283, + 289, + 290, + 295, + 296, + 304, + 298, + 309, + 298, + 325, + 296, + 338, + 294, + 425, + 291, + 436, + 285, + 450, + 276, + 460, + 271, + 461, + 264, + 455, + 257, + 465 + ] + ], + "image_id": "85", + "id": 242 + }, + { + "area": 22892, + "iscrowd": 0, + "bbox": [ + 287, + 245, + 96, + 235 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 341, + 476, + 319, + 475, + 318, + 473, + 312, + 472, + 297, + 460, + 293, + 449, + 295, + 425, + 295, + 400, + 301, + 376, + 301, + 363, + 298, + 349, + 298, + 327, + 304, + 315, + 312, + 306, + 314, + 301, + 314, + 292, + 311, + 288, + 310, + 277, + 316, + 273, + 318, + 258, + 322, + 254, + 332, + 251, + 350, + 251, + 364, + 255, + 369, + 259, + 369, + 277, + 373, + 279, + 374, + 288, + 368, + 294, + 367, + 305, + 376, + 324, + 378, + 335, + 378, + 348, + 370, + 370, + 371, + 409, + 367, + 455, + 364, + 462, + 358, + 469, + 341, + 476 + ] + ], + "image_id": "85", + "id": 243 + }, + { + "area": 19224, + "iscrowd": 0, + "bbox": [ + 367, + 317, + 107, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 431, + 487, + 398, + 485, + 381, + 474, + 374, + 465, + 372, + 460, + 383, + 350, + 392, + 340, + 394, + 330, + 402, + 325, + 409, + 323, + 433, + 324, + 454, + 331, + 466, + 339, + 467, + 352, + 470, + 355, + 472, + 363, + 452, + 474, + 448, + 480, + 444, + 481, + 441, + 484, + 431, + 487 + ] + ], + "image_id": "85", + "id": 244 + }, + { + "area": 71095, + "iscrowd": 0, + "bbox": [ + 9, + 238, + 294, + 240 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 70, + 472, + 14, + 415, + 14, + 411, + 16, + 408, + 36, + 389, + 57, + 365, + 77, + 354, + 94, + 340, + 105, + 334, + 230, + 245, + 262, + 259, + 275, + 267, + 279, + 267, + 284, + 264, + 290, + 256, + 292, + 254, + 294, + 254, + 290, + 278, + 290, + 294, + 296, + 296, + 299, + 299, + 301, + 309, + 301, + 327, + 298, + 337, + 293, + 339, + 278, + 339, + 276, + 345, + 276, + 358, + 271, + 368, + 155, + 434, + 109, + 433, + 105, + 436, + 95, + 437, + 87, + 440, + 80, + 446, + 80, + 455, + 72, + 462, + 70, + 472 + ] + ], + "image_id": "86", + "id": 245 + }, + { + "area": 16000, + "iscrowd": 0, + "bbox": [ + 272, + 312, + 99, + 159 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 352, + 460, + 342, + 457, + 334, + 457, + 303, + 451, + 286, + 438, + 273, + 433, + 273, + 400, + 277, + 345, + 279, + 339, + 296, + 339, + 299, + 336, + 301, + 330, + 301, + 319, + 303, + 318, + 325, + 317, + 344, + 321, + 355, + 327, + 361, + 334, + 360, + 341, + 367, + 352, + 368, + 361, + 357, + 451, + 356, + 457, + 352, + 460 + ] + ], + "image_id": "86", + "id": 246 + }, + { + "area": 28749, + "iscrowd": 0, + "bbox": [ + 355, + 238, + 110, + 258 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 405, + 493, + 392, + 492, + 388, + 491, + 386, + 488, + 386, + 472, + 382, + 461, + 377, + 457, + 357, + 457, + 364, + 395, + 368, + 380, + 367, + 335, + 368, + 329, + 375, + 315, + 389, + 300, + 390, + 288, + 386, + 281, + 386, + 273, + 394, + 266, + 397, + 250, + 401, + 247, + 410, + 244, + 431, + 244, + 450, + 250, + 457, + 256, + 455, + 276, + 460, + 280, + 460, + 287, + 459, + 290, + 451, + 298, + 450, + 310, + 458, + 325, + 460, + 348, + 458, + 359, + 447, + 379, + 445, + 393, + 445, + 426, + 434, + 476, + 430, + 482, + 423, + 487, + 405, + 493 + ] + ], + "image_id": "86", + "id": 247 + }, + { + "area": 38259, + "iscrowd": 0, + "bbox": [ + 65, + 429, + 326, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 154, + 540, + 102, + 540, + 82, + 534, + 76, + 528, + 73, + 523, + 73, + 517, + 75, + 513, + 72, + 512, + 69, + 506, + 69, + 496, + 74, + 488, + 81, + 485, + 81, + 482, + 75, + 480, + 72, + 475, + 72, + 465, + 73, + 462, + 80, + 455, + 81, + 446, + 86, + 442, + 97, + 437, + 105, + 437, + 113, + 433, + 269, + 434, + 286, + 439, + 303, + 452, + 314, + 453, + 334, + 458, + 345, + 458, + 349, + 460, + 364, + 457, + 376, + 457, + 381, + 461, + 385, + 471, + 386, + 499, + 385, + 504, + 379, + 510, + 358, + 510, + 355, + 507, + 352, + 507, + 347, + 510, + 339, + 510, + 315, + 516, + 305, + 517, + 288, + 532, + 271, + 538, + 154, + 540 + ] + ], + "image_id": "86", + "id": 248 + }, + { + "area": 59648, + "iscrowd": 0, + "bbox": [ + 2, + 235, + 255, + 232 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 65, + 462, + 63, + 462, + 50, + 448, + 39, + 440, + 3, + 406, + 5, + 400, + 41, + 362, + 48, + 358, + 109, + 306, + 146, + 277, + 181, + 247, + 185, + 242, + 200, + 245, + 229, + 259, + 237, + 254, + 244, + 245, + 246, + 247, + 241, + 258, + 240, + 280, + 248, + 282, + 252, + 287, + 254, + 295, + 254, + 316, + 252, + 319, + 238, + 321, + 239, + 327, + 235, + 331, + 232, + 343, + 229, + 346, + 186, + 377, + 125, + 418, + 76, + 454, + 70, + 457, + 65, + 462 + ] + ], + "image_id": "87", + "id": 249 + }, + { + "area": 13140, + "iscrowd": 0, + "bbox": [ + 229, + 303, + 89, + 145 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 236, + 445, + 236, + 444, + 236, + 410, + 235, + 409, + 235, + 390, + 234, + 389, + 234, + 371, + 233, + 370, + 233, + 336, + 235, + 334, + 235, + 333, + 236, + 332, + 236, + 331, + 239, + 328, + 239, + 324, + 240, + 323, + 240, + 322, + 241, + 321, + 250, + 321, + 254, + 317, + 254, + 310, + 254, + 310, + 256, + 310, + 257, + 309, + 261, + 309, + 262, + 308, + 267, + 308, + 268, + 307, + 280, + 307, + 281, + 308, + 287, + 308, + 288, + 309, + 293, + 309, + 294, + 310, + 295, + 310, + 296, + 311, + 297, + 311, + 298, + 312, + 301, + 312, + 302, + 312, + 302, + 313, + 302, + 314, + 304, + 314, + 305, + 314, + 305, + 315, + 307, + 317, + 307, + 318, + 309, + 320, + 309, + 327, + 311, + 329, + 311, + 330, + 313, + 332, + 313, + 333, + 315, + 335, + 315, + 336, + 316, + 337, + 316, + 418, + 315, + 419, + 311, + 419, + 310, + 420, + 305, + 420, + 304, + 421, + 293, + 421, + 292, + 422, + 286, + 422, + 285, + 423, + 279, + 423, + 278, + 424, + 267, + 424, + 266, + 425, + 262, + 425, + 261, + 426, + 260, + 426, + 259, + 427, + 258, + 427, + 256, + 429, + 253, + 429, + 250, + 432, + 249, + 432, + 244, + 437, + 243, + 437, + 238, + 442, + 238, + 443, + 236, + 445 + ] + ], + "image_id": "87", + "id": 250 + }, + { + "area": 19008, + "iscrowd": 0, + "bbox": [ + 311, + 231, + 95, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 320, + 419, + 316, + 418, + 316, + 383, + 320, + 374, + 322, + 359, + 321, + 342, + 318, + 334, + 318, + 322, + 322, + 306, + 331, + 294, + 335, + 285, + 334, + 278, + 330, + 270, + 331, + 263, + 337, + 258, + 337, + 247, + 339, + 241, + 342, + 238, + 359, + 234, + 384, + 237, + 392, + 243, + 392, + 261, + 395, + 262, + 397, + 267, + 396, + 274, + 390, + 284, + 390, + 292, + 399, + 306, + 403, + 324, + 403, + 331, + 394, + 358, + 396, + 410, + 394, + 412, + 350, + 414, + 320, + 419 + ] + ], + "image_id": "87", + "id": 251 + }, + { + "area": 36542, + "iscrowd": 0, + "bbox": [ + 157, + 409, + 301, + 120 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 286, + 524, + 267, + 524, + 253, + 518, + 244, + 511, + 236, + 509, + 199, + 509, + 191, + 507, + 190, + 510, + 186, + 512, + 167, + 513, + 164, + 507, + 162, + 464, + 174, + 460, + 184, + 460, + 186, + 462, + 189, + 462, + 196, + 458, + 232, + 449, + 253, + 430, + 256, + 430, + 262, + 426, + 273, + 424, + 285, + 424, + 299, + 421, + 329, + 419, + 350, + 415, + 373, + 414, + 380, + 412, + 409, + 412, + 427, + 414, + 438, + 419, + 443, + 423, + 445, + 431, + 442, + 438, + 450, + 442, + 455, + 448, + 455, + 454, + 452, + 459, + 447, + 463, + 455, + 472, + 455, + 480, + 453, + 485, + 440, + 495, + 423, + 504, + 344, + 514, + 312, + 520, + 296, + 521, + 286, + 524 + ] + ], + "image_id": "87", + "id": 252 + }, + { + "area": 30480, + "iscrowd": 0, + "bbox": [ + 24, + 260, + 119, + 253 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 92, + 510, + 77, + 510, + 65, + 506, + 55, + 497, + 51, + 489, + 46, + 456, + 43, + 446, + 44, + 410, + 42, + 397, + 31, + 375, + 30, + 361, + 32, + 348, + 37, + 336, + 42, + 329, + 42, + 321, + 33, + 306, + 34, + 297, + 37, + 294, + 36, + 276, + 45, + 268, + 65, + 263, + 79, + 263, + 89, + 265, + 95, + 270, + 98, + 285, + 100, + 289, + 104, + 290, + 107, + 297, + 107, + 300, + 102, + 308, + 102, + 317, + 106, + 325, + 116, + 334, + 119, + 339, + 121, + 349, + 124, + 355, + 124, + 368, + 120, + 379, + 120, + 388, + 124, + 407, + 129, + 418, + 129, + 431, + 134, + 462, + 133, + 483, + 115, + 501, + 102, + 508, + 92, + 510 + ] + ], + "image_id": "88", + "id": 253 + }, + { + "area": 46631, + "iscrowd": 0, + "bbox": [ + 113, + 239, + 210, + 220 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 134, + 450, + 133, + 449, + 132, + 445, + 130, + 418, + 125, + 407, + 121, + 388, + 121, + 379, + 125, + 368, + 125, + 359, + 120, + 340, + 248, + 244, + 257, + 244, + 274, + 250, + 292, + 259, + 294, + 259, + 307, + 246, + 312, + 265, + 317, + 277, + 316, + 298, + 318, + 316, + 304, + 318, + 305, + 325, + 302, + 326, + 302, + 341, + 169, + 426, + 134, + 450 + ] + ], + "image_id": "88", + "id": 254 + }, + { + "area": 14670, + "iscrowd": 0, + "bbox": [ + 289, + 302, + 89, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 341, + 460, + 315, + 459, + 303, + 453, + 294, + 443, + 290, + 434, + 297, + 345, + 302, + 342, + 302, + 330, + 303, + 326, + 305, + 325, + 305, + 318, + 317, + 317, + 318, + 309, + 327, + 306, + 344, + 307, + 365, + 314, + 372, + 321, + 370, + 330, + 375, + 335, + 376, + 339, + 366, + 440, + 364, + 446, + 358, + 453, + 341, + 460 + ] + ], + "image_id": "88", + "id": 255 + }, + { + "area": 25602, + "iscrowd": 0, + "bbox": [ + 362, + 207, + 101, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 415, + 454, + 411, + 454, + 406, + 451, + 403, + 444, + 394, + 453, + 387, + 451, + 381, + 445, + 379, + 441, + 375, + 442, + 370, + 440, + 368, + 435, + 370, + 400, + 376, + 357, + 376, + 337, + 372, + 331, + 372, + 323, + 374, + 318, + 374, + 310, + 377, + 297, + 384, + 287, + 395, + 277, + 400, + 265, + 401, + 252, + 406, + 242, + 405, + 227, + 407, + 224, + 407, + 217, + 413, + 213, + 434, + 212, + 442, + 213, + 453, + 217, + 452, + 236, + 448, + 241, + 449, + 286, + 455, + 292, + 459, + 301, + 460, + 320, + 443, + 406, + 440, + 430, + 438, + 432, + 438, + 435, + 433, + 439, + 431, + 443, + 427, + 444, + 420, + 452, + 415, + 454 + ] + ], + "image_id": "88", + "id": 256 + }, + { + "area": 55536, + "iscrowd": 0, + "bbox": [ + 31, + 159, + 155, + 355 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 81, + 508, + 73, + 507, + 73, + 499, + 45, + 304, + 35, + 248, + 35, + 242, + 39, + 230, + 39, + 224, + 42, + 218, + 42, + 209, + 46, + 194, + 45, + 172, + 46, + 169, + 50, + 166, + 62, + 165, + 161, + 168, + 165, + 169, + 169, + 173, + 168, + 198, + 171, + 213, + 173, + 216, + 174, + 281, + 178, + 345, + 178, + 409, + 180, + 463, + 180, + 483, + 178, + 497, + 175, + 502, + 171, + 504, + 81, + 508 + ] + ], + "image_id": "89", + "id": 257 + }, + { + "area": 20352, + "iscrowd": 0, + "bbox": [ + 173, + 312, + 105, + 191 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 225, + 501, + 213, + 500, + 200, + 496, + 190, + 490, + 185, + 483, + 183, + 478, + 181, + 463, + 178, + 364, + 179, + 349, + 186, + 341, + 185, + 335, + 189, + 330, + 190, + 326, + 202, + 320, + 221, + 316, + 237, + 317, + 258, + 323, + 266, + 332, + 265, + 341, + 273, + 350, + 271, + 465, + 269, + 477, + 262, + 487, + 244, + 498, + 225, + 501 + ] + ], + "image_id": "89", + "id": 258 + }, + { + "area": 28886, + "iscrowd": 0, + "bbox": [ + 258, + 192, + 100, + 285 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 308, + 473, + 297, + 473, + 294, + 470, + 289, + 461, + 282, + 467, + 278, + 467, + 271, + 461, + 274, + 350, + 265, + 339, + 266, + 330, + 261, + 324, + 261, + 307, + 263, + 303, + 264, + 294, + 268, + 290, + 269, + 286, + 273, + 281, + 278, + 277, + 283, + 265, + 285, + 246, + 288, + 238, + 288, + 232, + 290, + 229, + 288, + 222, + 288, + 205, + 293, + 200, + 309, + 197, + 322, + 197, + 332, + 199, + 338, + 202, + 341, + 207, + 339, + 215, + 339, + 225, + 336, + 228, + 340, + 278, + 343, + 280, + 343, + 282, + 352, + 293, + 355, + 302, + 355, + 318, + 349, + 368, + 347, + 402, + 342, + 439, + 334, + 459, + 325, + 467, + 319, + 467, + 314, + 465, + 308, + 473 + ] + ], + "image_id": "89", + "id": 259 + }, + { + "area": 29304, + "iscrowd": 0, + "bbox": [ + 342, + 229, + 110, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 385, + 487, + 369, + 483, + 362, + 478, + 357, + 477, + 345, + 462, + 343, + 456, + 343, + 441, + 346, + 424, + 347, + 402, + 356, + 369, + 356, + 347, + 354, + 331, + 359, + 314, + 377, + 290, + 377, + 279, + 373, + 272, + 373, + 263, + 380, + 259, + 382, + 246, + 385, + 239, + 393, + 235, + 418, + 235, + 437, + 240, + 443, + 244, + 442, + 265, + 447, + 270, + 447, + 277, + 439, + 286, + 438, + 301, + 446, + 317, + 449, + 339, + 446, + 345, + 444, + 356, + 440, + 362, + 435, + 378, + 435, + 415, + 432, + 424, + 430, + 443, + 427, + 450, + 426, + 464, + 423, + 472, + 418, + 478, + 410, + 483, + 400, + 486, + 385, + 487 + ] + ], + "image_id": "89", + "id": 260 + }, + { + "area": 38776, + "iscrowd": 0, + "bbox": [ + 33, + 228, + 130, + 295 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 115, + 521, + 111, + 521, + 101, + 512, + 92, + 520, + 86, + 520, + 82, + 518, + 73, + 506, + 61, + 487, + 58, + 475, + 56, + 454, + 49, + 424, + 42, + 376, + 38, + 364, + 38, + 351, + 40, + 341, + 46, + 328, + 53, + 319, + 54, + 312, + 55, + 271, + 51, + 267, + 48, + 240, + 61, + 233, + 72, + 231, + 90, + 231, + 99, + 233, + 105, + 236, + 109, + 259, + 107, + 267, + 113, + 281, + 120, + 312, + 123, + 314, + 136, + 326, + 141, + 335, + 144, + 345, + 150, + 429, + 153, + 451, + 152, + 482, + 147, + 499, + 144, + 501, + 144, + 503, + 141, + 506, + 134, + 508, + 128, + 507, + 127, + 512, + 122, + 518, + 115, + 521 + ] + ], + "image_id": "90", + "id": 261 + }, + { + "area": 41856, + "iscrowd": 0, + "bbox": [ + 136, + 183, + 127, + 326 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 173, + 505, + 160, + 505, + 158, + 501, + 144, + 291, + 140, + 265, + 142, + 261, + 144, + 192, + 147, + 188, + 150, + 187, + 250, + 188, + 255, + 190, + 257, + 196, + 255, + 200, + 254, + 229, + 257, + 255, + 260, + 261, + 258, + 270, + 258, + 319, + 256, + 356, + 255, + 495, + 252, + 499, + 247, + 501, + 212, + 501, + 173, + 505 + ] + ], + "image_id": "90", + "id": 262 + }, + { + "area": 18180, + "iscrowd": 0, + "bbox": [ + 251, + 322, + 100, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 304, + 498, + 282, + 496, + 271, + 491, + 265, + 486, + 256, + 473, + 257, + 355, + 265, + 344, + 265, + 337, + 269, + 332, + 273, + 329, + 288, + 325, + 315, + 325, + 320, + 326, + 336, + 334, + 341, + 340, + 341, + 349, + 345, + 354, + 348, + 362, + 346, + 401, + 340, + 453, + 340, + 470, + 336, + 482, + 332, + 487, + 320, + 494, + 304, + 498 + ] + ], + "image_id": "90", + "id": 263 + }, + { + "area": 27864, + "iscrowd": 0, + "bbox": [ + 340, + 250, + 107, + 257 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 389, + 504, + 376, + 503, + 371, + 500, + 357, + 496, + 345, + 485, + 339, + 474, + 346, + 402, + 349, + 396, + 350, + 389, + 350, + 365, + 348, + 349, + 354, + 332, + 371, + 308, + 371, + 299, + 367, + 294, + 366, + 289, + 369, + 282, + 371, + 280, + 375, + 279, + 376, + 263, + 380, + 258, + 390, + 254, + 409, + 253, + 430, + 259, + 438, + 265, + 437, + 285, + 442, + 292, + 441, + 299, + 434, + 307, + 432, + 313, + 432, + 321, + 439, + 331, + 443, + 347, + 443, + 361, + 431, + 393, + 430, + 435, + 420, + 486, + 417, + 492, + 410, + 498, + 401, + 502, + 389, + 504 + ] + ], + "image_id": "90", + "id": 264 + }, + { + "area": 69360, + "iscrowd": 0, + "bbox": [ + 43, + 384, + 407, + 169 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 427, + 548, + 338, + 546, + 117, + 546, + 97, + 528, + 78, + 505, + 56, + 504, + 51, + 500, + 50, + 496, + 77, + 436, + 79, + 434, + 88, + 431, + 103, + 431, + 108, + 415, + 122, + 393, + 126, + 390, + 280, + 390, + 410, + 388, + 418, + 395, + 447, + 456, + 432, + 528, + 428, + 539, + 427, + 548 + ] + ], + "image_id": "91", + "id": 265 + }, + { + "area": 25648, + "iscrowd": 0, + "bbox": [ + 113, + 169, + 111, + 228 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 132, + 390, + 128, + 390, + 127, + 387, + 116, + 305, + 117, + 281, + 130, + 261, + 132, + 250, + 132, + 218, + 134, + 208, + 131, + 206, + 130, + 203, + 128, + 180, + 134, + 176, + 144, + 173, + 171, + 172, + 181, + 176, + 184, + 179, + 186, + 202, + 183, + 206, + 183, + 209, + 186, + 216, + 187, + 227, + 192, + 240, + 193, + 253, + 196, + 258, + 208, + 270, + 215, + 283, + 215, + 320, + 218, + 388, + 132, + 390 + ] + ], + "image_id": "91", + "id": 266 + }, + { + "area": 12495, + "iscrowd": 0, + "bbox": [ + 211, + 275, + 104, + 118 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 286, + 389, + 218, + 389, + 218, + 388, + 218, + 357, + 217, + 356, + 217, + 323, + 216, + 322, + 216, + 315, + 217, + 314, + 217, + 313, + 219, + 311, + 219, + 310, + 223, + 306, + 223, + 305, + 226, + 302, + 226, + 300, + 225, + 299, + 225, + 296, + 226, + 295, + 226, + 294, + 227, + 293, + 227, + 291, + 227, + 291, + 228, + 291, + 230, + 289, + 231, + 289, + 233, + 287, + 235, + 287, + 236, + 286, + 237, + 286, + 238, + 285, + 239, + 285, + 241, + 283, + 245, + 283, + 246, + 282, + 251, + 282, + 252, + 281, + 256, + 281, + 257, + 280, + 269, + 280, + 270, + 281, + 276, + 281, + 277, + 282, + 281, + 282, + 282, + 283, + 283, + 283, + 284, + 284, + 286, + 284, + 287, + 285, + 288, + 285, + 289, + 286, + 291, + 286, + 292, + 287, + 294, + 287, + 295, + 287, + 295, + 288, + 295, + 289, + 297, + 289, + 298, + 289, + 298, + 290, + 298, + 291, + 299, + 291, + 300, + 291, + 300, + 292, + 302, + 294, + 302, + 295, + 303, + 296, + 303, + 300, + 302, + 301, + 302, + 303, + 304, + 305, + 304, + 306, + 305, + 307, + 305, + 308, + 307, + 310, + 307, + 311, + 309, + 313, + 309, + 334, + 308, + 335, + 308, + 376, + 307, + 377, + 307, + 387, + 306, + 388, + 287, + 388, + 286, + 389 + ] + ], + "image_id": "91", + "id": 267 + }, + { + "area": 19686, + "iscrowd": 0, + "bbox": [ + 309, + 200, + 101, + 192 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 395, + 388, + 308, + 387, + 308, + 379, + 314, + 352, + 314, + 319, + 312, + 313, + 314, + 293, + 322, + 278, + 331, + 268, + 333, + 263, + 333, + 253, + 329, + 247, + 328, + 241, + 330, + 235, + 336, + 231, + 338, + 212, + 349, + 206, + 361, + 204, + 379, + 205, + 386, + 208, + 391, + 208, + 400, + 215, + 399, + 236, + 404, + 240, + 404, + 249, + 396, + 260, + 395, + 272, + 405, + 291, + 405, + 297, + 408, + 304, + 408, + 311, + 406, + 323, + 396, + 344, + 395, + 388 + ] + ], + "image_id": "91", + "id": 268 + }, + { + "area": 25185, + "iscrowd": 0, + "bbox": [ + 200, + 292, + 114, + 218 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 260, + 504, + 235, + 500, + 222, + 493, + 213, + 481, + 209, + 471, + 209, + 439, + 208, + 418, + 205, + 398, + 203, + 338, + 212, + 325, + 212, + 316, + 216, + 309, + 230, + 301, + 246, + 297, + 265, + 297, + 277, + 299, + 296, + 306, + 304, + 315, + 303, + 326, + 310, + 332, + 313, + 339, + 307, + 478, + 304, + 484, + 292, + 494, + 270, + 503, + 260, + 504 + ] + ], + "image_id": "92", + "id": 269 + }, + { + "area": 18715, + "iscrowd": 0, + "bbox": [ + 122, + 120, + 94, + 196 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 188, + 312, + 137, + 312, + 136, + 308, + 130, + 259, + 126, + 245, + 126, + 221, + 130, + 211, + 134, + 207, + 139, + 198, + 141, + 153, + 138, + 151, + 137, + 130, + 148, + 126, + 176, + 126, + 180, + 127, + 184, + 130, + 184, + 141, + 186, + 150, + 183, + 152, + 183, + 156, + 188, + 170, + 192, + 194, + 196, + 201, + 206, + 211, + 212, + 231, + 213, + 310, + 188, + 312 + ] + ], + "image_id": "92", + "id": 270 + }, + { + "area": 14760, + "iscrowd": 0, + "bbox": [ + 292, + 152, + 89, + 163 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 334, + 310, + 301, + 310, + 296, + 305, + 300, + 288, + 300, + 260, + 298, + 252, + 298, + 238, + 305, + 220, + 309, + 217, + 316, + 205, + 316, + 196, + 311, + 190, + 310, + 185, + 318, + 179, + 318, + 166, + 321, + 158, + 324, + 156, + 337, + 154, + 362, + 156, + 370, + 161, + 370, + 180, + 374, + 182, + 375, + 186, + 373, + 193, + 368, + 198, + 368, + 209, + 370, + 217, + 374, + 223, + 378, + 238, + 378, + 252, + 372, + 264, + 369, + 277, + 369, + 308, + 334, + 310 + ] + ], + "image_id": "92", + "id": 271 + }, + { + "area": 46704, + "iscrowd": 0, + "bbox": [ + 67, + 307, + 335, + 138 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 386, + 436, + 310, + 436, + 310, + 435, + 310, + 413, + 311, + 412, + 311, + 397, + 312, + 396, + 312, + 368, + 313, + 367, + 313, + 337, + 312, + 336, + 312, + 335, + 311, + 334, + 311, + 332, + 308, + 330, + 307, + 330, + 303, + 325, + 303, + 324, + 304, + 323, + 304, + 313, + 302, + 311, + 302, + 310, + 302, + 310, + 343, + 310, + 344, + 309, + 375, + 309, + 379, + 312, + 379, + 314, + 382, + 317, + 382, + 318, + 383, + 319, + 383, + 320, + 384, + 321, + 384, + 322, + 385, + 323, + 385, + 324, + 386, + 325, + 386, + 326, + 387, + 327, + 387, + 328, + 388, + 329, + 388, + 330, + 389, + 331, + 389, + 332, + 390, + 333, + 390, + 335, + 391, + 336, + 391, + 337, + 392, + 338, + 392, + 339, + 393, + 340, + 393, + 341, + 394, + 342, + 394, + 344, + 395, + 345, + 395, + 346, + 396, + 347, + 396, + 349, + 397, + 350, + 397, + 351, + 400, + 354, + 399, + 355, + 399, + 356, + 398, + 357, + 398, + 360, + 397, + 361, + 397, + 368, + 396, + 369, + 396, + 375, + 395, + 376, + 395, + 380, + 394, + 381, + 394, + 386, + 393, + 387, + 393, + 391, + 392, + 392, + 392, + 396, + 391, + 397, + 391, + 404, + 390, + 405, + 390, + 411, + 389, + 412, + 389, + 419, + 388, + 420, + 388, + 434, + 386, + 436 + ], + [ + 136, + 439, + 129, + 439, + 117, + 431, + 99, + 407, + 95, + 401, + 77, + 400, + 72, + 396, + 72, + 392, + 80, + 378, + 90, + 354, + 97, + 350, + 114, + 349, + 117, + 344, + 118, + 337, + 126, + 323, + 130, + 317, + 137, + 312, + 212, + 311, + 211, + 316, + 212, + 324, + 203, + 335, + 203, + 375, + 205, + 388, + 207, + 435, + 136, + 439 + ] + ], + "image_id": "92", + "id": 272 + }, + { + "area": 39650, + "iscrowd": 0, + "bbox": [ + 109, + 163, + 121, + 324 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 164, + 486, + 160, + 486, + 153, + 482, + 147, + 475, + 145, + 470, + 136, + 464, + 128, + 447, + 118, + 338, + 113, + 312, + 113, + 303, + 116, + 287, + 122, + 275, + 128, + 269, + 132, + 261, + 133, + 254, + 134, + 223, + 137, + 208, + 132, + 201, + 131, + 174, + 133, + 172, + 143, + 168, + 154, + 166, + 174, + 166, + 188, + 169, + 193, + 172, + 195, + 177, + 195, + 190, + 197, + 198, + 194, + 210, + 198, + 221, + 202, + 250, + 207, + 264, + 214, + 270, + 220, + 277, + 227, + 296, + 227, + 441, + 224, + 455, + 219, + 461, + 218, + 465, + 214, + 469, + 206, + 470, + 197, + 483, + 187, + 485, + 183, + 483, + 174, + 472, + 173, + 478, + 164, + 486 + ] + ], + "image_id": "93", + "id": 273 + }, + { + "area": 23142, + "iscrowd": 0, + "bbox": [ + 222, + 285, + 113, + 202 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 285, + 484, + 269, + 484, + 251, + 479, + 235, + 469, + 228, + 455, + 227, + 334, + 232, + 321, + 238, + 314, + 237, + 306, + 239, + 300, + 251, + 292, + 255, + 292, + 266, + 288, + 294, + 289, + 306, + 292, + 311, + 295, + 320, + 301, + 324, + 305, + 325, + 317, + 329, + 322, + 332, + 331, + 321, + 438, + 321, + 460, + 318, + 466, + 309, + 475, + 285, + 484 + ] + ], + "image_id": "93", + "id": 274 + }, + { + "area": 14130, + "iscrowd": 0, + "bbox": [ + 305, + 151, + 89, + 156 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 376, + 302, + 322, + 302, + 308, + 291, + 313, + 270, + 313, + 258, + 311, + 252, + 311, + 237, + 313, + 227, + 320, + 214, + 329, + 202, + 330, + 195, + 325, + 183, + 333, + 175, + 334, + 158, + 338, + 156, + 343, + 156, + 347, + 154, + 371, + 155, + 383, + 160, + 382, + 180, + 386, + 182, + 386, + 189, + 380, + 196, + 379, + 210, + 385, + 223, + 388, + 235, + 388, + 247, + 379, + 266, + 377, + 275, + 376, + 302 + ] + ], + "image_id": "93", + "id": 275 + }, + { + "area": 43335, + "iscrowd": 0, + "bbox": [ + 91, + 296, + 320, + 134 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 227, + 331, + 227, + 330, + 227, + 329, + 227, + 328, + 227, + 327, + 227, + 326, + 227, + 325, + 227, + 324, + 227, + 323, + 227, + 322, + 227, + 321, + 227, + 320, + 227, + 319, + 227, + 318, + 227, + 317, + 227, + 316, + 227, + 315, + 227, + 314, + 227, + 313, + 227, + 312, + 227, + 311, + 227, + 310, + 227, + 309, + 227, + 308, + 227, + 307, + 227, + 306, + 227, + 305, + 227, + 304, + 227, + 303, + 227, + 302, + 227, + 302, + 228, + 302, + 229, + 302, + 230, + 302, + 231, + 302, + 232, + 302, + 233, + 302, + 234, + 302, + 235, + 302, + 236, + 302, + 237, + 302, + 238, + 302, + 237, + 303, + 237, + 303, + 237, + 304, + 237, + 305, + 237, + 306, + 237, + 307, + 237, + 308, + 237, + 309, + 237, + 310, + 237, + 311, + 237, + 312, + 237, + 313, + 237, + 314, + 237, + 315, + 236, + 316, + 235, + 316, + 235, + 316, + 234, + 317, + 234, + 317, + 234, + 318, + 233, + 319, + 233, + 319, + 232, + 320, + 232, + 320, + 231, + 321, + 231, + 321, + 231, + 322, + 230, + 323, + 230, + 323, + 230, + 324, + 229, + 325, + 229, + 325, + 229, + 326, + 228, + 327, + 228, + 327, + 228, + 328, + 228, + 329, + 228, + 330, + 227, + 331 + ], + [ + 394, + 423, + 325, + 423, + 324, + 421, + 324, + 418, + 325, + 417, + 325, + 408, + 326, + 407, + 326, + 397, + 327, + 396, + 327, + 387, + 328, + 386, + 328, + 377, + 329, + 376, + 329, + 367, + 330, + 366, + 330, + 357, + 331, + 356, + 331, + 347, + 332, + 346, + 332, + 327, + 331, + 326, + 331, + 325, + 330, + 324, + 330, + 322, + 329, + 321, + 329, + 320, + 327, + 318, + 327, + 317, + 325, + 315, + 325, + 314, + 326, + 313, + 326, + 310, + 325, + 309, + 325, + 305, + 322, + 302, + 322, + 302, + 382, + 302, + 383, + 303, + 384, + 303, + 387, + 305, + 387, + 306, + 389, + 308, + 389, + 309, + 391, + 311, + 391, + 312, + 393, + 314, + 393, + 315, + 394, + 316, + 394, + 317, + 396, + 319, + 396, + 320, + 399, + 323, + 399, + 328, + 402, + 331, + 402, + 333, + 403, + 334, + 403, + 336, + 404, + 337, + 404, + 338, + 407, + 341, + 407, + 342, + 409, + 344, + 409, + 348, + 408, + 349, + 408, + 352, + 407, + 353, + 407, + 356, + 406, + 357, + 406, + 361, + 405, + 362, + 405, + 365, + 404, + 366, + 404, + 369, + 403, + 370, + 403, + 373, + 402, + 374, + 402, + 378, + 401, + 379, + 401, + 382, + 400, + 383, + 400, + 387, + 399, + 388, + 399, + 394, + 398, + 395, + 398, + 400, + 397, + 401, + 397, + 407, + 396, + 408, + 396, + 413, + 395, + 414, + 395, + 422, + 394, + 423 + ], + [ + 121, + 394, + 121, + 393, + 121, + 392, + 119, + 390, + 119, + 389, + 117, + 387, + 117, + 386, + 115, + 385, + 100, + 385, + 99, + 384, + 98, + 384, + 98, + 383, + 98, + 382, + 96, + 380, + 96, + 377, + 97, + 376, + 97, + 375, + 98, + 374, + 98, + 372, + 99, + 371, + 99, + 369, + 100, + 368, + 100, + 367, + 101, + 366, + 101, + 364, + 102, + 363, + 102, + 361, + 103, + 360, + 103, + 359, + 104, + 358, + 104, + 357, + 105, + 356, + 105, + 355, + 106, + 354, + 106, + 353, + 107, + 352, + 107, + 351, + 108, + 350, + 108, + 348, + 109, + 347, + 109, + 346, + 110, + 345, + 110, + 343, + 111, + 342, + 111, + 341, + 111, + 341, + 112, + 341, + 114, + 339, + 116, + 339, + 117, + 339, + 117, + 348, + 118, + 349, + 118, + 357, + 119, + 358, + 119, + 366, + 120, + 367, + 120, + 375, + 121, + 376, + 121, + 384, + 122, + 385, + 122, + 393, + 121, + 394 + ], + [ + 227, + 422, + 227, + 421, + 227, + 359, + 227, + 359, + 228, + 359, + 228, + 421, + 227, + 422 + ] + ], + "image_id": "93", + "id": 276 + }, + { + "area": 54756, + "iscrowd": 0, + "bbox": [ + 18, + 202, + 161, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 99, + 533, + 79, + 533, + 77, + 529, + 77, + 523, + 69, + 495, + 51, + 412, + 24, + 300, + 26, + 290, + 42, + 274, + 31, + 258, + 33, + 254, + 50, + 241, + 59, + 236, + 64, + 231, + 67, + 231, + 73, + 236, + 77, + 236, + 87, + 225, + 90, + 216, + 95, + 207, + 99, + 210, + 101, + 224, + 104, + 230, + 120, + 235, + 133, + 243, + 140, + 245, + 153, + 253, + 156, + 257, + 157, + 273, + 164, + 319, + 164, + 328, + 167, + 338, + 168, + 371, + 173, + 408, + 179, + 472, + 179, + 485, + 182, + 492, + 182, + 497, + 176, + 520, + 171, + 530, + 99, + 533 + ] + ], + "image_id": "94", + "id": 277 + }, + { + "area": 30672, + "iscrowd": 0, + "bbox": [ + 163, + 242, + 107, + 283 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 234, + 521, + 227, + 516, + 223, + 508, + 221, + 508, + 219, + 516, + 212, + 521, + 208, + 521, + 202, + 518, + 199, + 513, + 199, + 510, + 192, + 507, + 187, + 501, + 181, + 489, + 179, + 480, + 179, + 462, + 168, + 356, + 173, + 340, + 184, + 327, + 185, + 323, + 185, + 306, + 188, + 281, + 185, + 279, + 184, + 257, + 186, + 253, + 200, + 247, + 223, + 247, + 231, + 250, + 236, + 253, + 236, + 271, + 238, + 275, + 235, + 279, + 235, + 283, + 237, + 285, + 242, + 315, + 245, + 325, + 251, + 330, + 260, + 340, + 264, + 354, + 265, + 441, + 267, + 484, + 264, + 494, + 259, + 502, + 255, + 506, + 248, + 507, + 245, + 515, + 241, + 519, + 234, + 521 + ] + ], + "image_id": "94", + "id": 278 + }, + { + "area": 19136, + "iscrowd": 0, + "bbox": [ + 260, + 335, + 103, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 318, + 512, + 308, + 512, + 293, + 509, + 283, + 505, + 275, + 497, + 269, + 488, + 268, + 483, + 268, + 417, + 266, + 370, + 273, + 360, + 272, + 354, + 276, + 348, + 284, + 343, + 301, + 339, + 318, + 339, + 328, + 341, + 341, + 347, + 348, + 353, + 349, + 363, + 357, + 377, + 357, + 388, + 355, + 395, + 354, + 446, + 351, + 491, + 345, + 500, + 341, + 503, + 331, + 508, + 318, + 512 + ] + ], + "image_id": "94", + "id": 279 + }, + { + "area": 25704, + "iscrowd": 0, + "bbox": [ + 351, + 264, + 101, + 251 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 408, + 511, + 393, + 511, + 377, + 507, + 362, + 499, + 352, + 485, + 355, + 416, + 359, + 407, + 361, + 393, + 360, + 379, + 357, + 368, + 358, + 353, + 360, + 346, + 365, + 339, + 367, + 333, + 372, + 329, + 377, + 322, + 377, + 312, + 373, + 306, + 373, + 298, + 380, + 290, + 381, + 278, + 383, + 274, + 389, + 269, + 405, + 266, + 421, + 267, + 427, + 270, + 434, + 271, + 442, + 277, + 441, + 296, + 446, + 301, + 447, + 310, + 439, + 318, + 438, + 332, + 445, + 341, + 450, + 357, + 449, + 380, + 441, + 394, + 438, + 409, + 440, + 439, + 438, + 443, + 432, + 489, + 429, + 497, + 420, + 506, + 408, + 511 + ] + ], + "image_id": "94", + "id": 280 + }, + { + "area": 64566, + "iscrowd": 0, + "bbox": [ + 104, + 238, + 305, + 210 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 207, + 445, + 184, + 442, + 179, + 439, + 152, + 433, + 138, + 435, + 130, + 440, + 128, + 440, + 125, + 435, + 123, + 430, + 117, + 391, + 111, + 343, + 116, + 338, + 127, + 337, + 138, + 332, + 136, + 312, + 138, + 304, + 153, + 301, + 228, + 276, + 251, + 270, + 312, + 249, + 331, + 244, + 335, + 241, + 391, + 259, + 401, + 263, + 405, + 266, + 404, + 283, + 399, + 307, + 395, + 343, + 393, + 346, + 361, + 361, + 333, + 377, + 289, + 399, + 271, + 410, + 213, + 440, + 207, + 445 + ] + ], + "image_id": "95", + "id": 281 + }, + { + "area": 85250, + "iscrowd": 0, + "bbox": [ + 86, + 244, + 340, + 249 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 350, + 488, + 213, + 418, + 161, + 394, + 131, + 378, + 118, + 373, + 116, + 370, + 116, + 360, + 111, + 337, + 100, + 337, + 95, + 332, + 92, + 328, + 90, + 315, + 91, + 304, + 94, + 297, + 97, + 294, + 103, + 293, + 103, + 283, + 101, + 279, + 113, + 265, + 112, + 252, + 114, + 251, + 120, + 255, + 139, + 254, + 175, + 247, + 199, + 256, + 230, + 264, + 288, + 283, + 334, + 295, + 357, + 303, + 386, + 310, + 407, + 318, + 421, + 321, + 423, + 322, + 423, + 326, + 420, + 338, + 419, + 354, + 417, + 359, + 417, + 373, + 410, + 406, + 410, + 416, + 405, + 424, + 390, + 439, + 366, + 467, + 354, + 485, + 350, + 488 + ] + ], + "image_id": "96", + "id": 282 + }, + { + "area": 90207, + "iscrowd": 0, + "bbox": [ + 86, + 245, + 350, + 256 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 346, + 493, + 175, + 388, + 126, + 361, + 106, + 310, + 98, + 304, + 94, + 303, + 91, + 298, + 93, + 296, + 109, + 290, + 114, + 274, + 117, + 270, + 143, + 265, + 153, + 260, + 164, + 259, + 179, + 253, + 190, + 251, + 195, + 248, + 314, + 292, + 333, + 297, + 346, + 303, + 356, + 305, + 395, + 320, + 430, + 331, + 433, + 334, + 430, + 341, + 423, + 377, + 416, + 402, + 412, + 432, + 388, + 456, + 346, + 493 + ] + ], + "image_id": "97", + "id": 283 + }, + { + "area": 87235, + "iscrowd": 0, + "bbox": [ + 45, + 236, + 364, + 238 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 180, + 471, + 169, + 470, + 144, + 447, + 129, + 460, + 126, + 460, + 110, + 447, + 92, + 428, + 90, + 423, + 53, + 391, + 57, + 386, + 63, + 382, + 71, + 381, + 79, + 375, + 85, + 355, + 98, + 324, + 98, + 320, + 104, + 313, + 115, + 311, + 159, + 296, + 186, + 289, + 256, + 265, + 308, + 250, + 327, + 242, + 386, + 259, + 403, + 266, + 408, + 269, + 406, + 274, + 403, + 302, + 396, + 338, + 396, + 346, + 394, + 354, + 391, + 358, + 388, + 358, + 381, + 363, + 303, + 402, + 231, + 441, + 180, + 471 + ] + ], + "image_id": "98", + "id": 284 + }, + { + "area": 41400, + "iscrowd": 0, + "bbox": [ + 152, + 249, + 224, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 213, + 426, + 203, + 426, + 191, + 419, + 180, + 409, + 167, + 391, + 160, + 375, + 156, + 359, + 156, + 343, + 161, + 333, + 166, + 329, + 175, + 325, + 179, + 315, + 185, + 308, + 313, + 253, + 332, + 254, + 351, + 266, + 362, + 277, + 369, + 291, + 372, + 301, + 373, + 320, + 366, + 339, + 359, + 345, + 252, + 413, + 245, + 419, + 238, + 421, + 220, + 421, + 219, + 423, + 213, + 426 + ] + ], + "image_id": "99", + "id": 285 + }, + { + "area": 46886, + "iscrowd": 0, + "bbox": [ + 130, + 271, + 237, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 288, + 459, + 283, + 459, + 279, + 457, + 190, + 395, + 152, + 370, + 147, + 363, + 145, + 356, + 137, + 341, + 135, + 331, + 135, + 319, + 142, + 302, + 154, + 288, + 163, + 282, + 178, + 277, + 209, + 278, + 317, + 329, + 341, + 338, + 350, + 345, + 354, + 352, + 356, + 363, + 359, + 369, + 359, + 386, + 356, + 398, + 348, + 414, + 347, + 419, + 315, + 452, + 309, + 455, + 297, + 455, + 288, + 459 + ] + ], + "image_id": "100", + "id": 286 + }, + { + "area": 46872, + "iscrowd": 0, + "bbox": [ + 65, + 289, + 371, + 125 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 302, + 410, + 129, + 410, + 115, + 408, + 106, + 404, + 101, + 404, + 92, + 401, + 86, + 397, + 83, + 397, + 75, + 384, + 76, + 373, + 82, + 366, + 77, + 365, + 72, + 358, + 72, + 344, + 77, + 339, + 83, + 337, + 78, + 332, + 75, + 325, + 76, + 317, + 80, + 309, + 92, + 300, + 118, + 293, + 197, + 295, + 288, + 295, + 302, + 296, + 315, + 300, + 337, + 317, + 346, + 320, + 386, + 325, + 392, + 328, + 394, + 328, + 397, + 324, + 420, + 325, + 428, + 329, + 434, + 346, + 434, + 363, + 429, + 377, + 422, + 383, + 396, + 383, + 393, + 380, + 389, + 380, + 381, + 383, + 370, + 383, + 360, + 386, + 348, + 386, + 337, + 389, + 326, + 399, + 315, + 404, + 314, + 406, + 310, + 406, + 309, + 408, + 302, + 410 + ] + ], + "image_id": "101", + "id": 287 + }, + { + "area": 51054, + "iscrowd": 0, + "bbox": [ + 139, + 253, + 200, + 253 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 296, + 500, + 283, + 500, + 272, + 496, + 266, + 488, + 255, + 470, + 255, + 467, + 252, + 464, + 251, + 459, + 235, + 439, + 232, + 437, + 219, + 435, + 204, + 427, + 193, + 416, + 185, + 404, + 143, + 314, + 143, + 282, + 145, + 281, + 145, + 279, + 151, + 271, + 161, + 270, + 165, + 266, + 165, + 261, + 171, + 255, + 184, + 254, + 195, + 258, + 211, + 258, + 215, + 260, + 268, + 319, + 283, + 333, + 283, + 335, + 292, + 346, + 299, + 364, + 300, + 373, + 297, + 395, + 304, + 407, + 308, + 418, + 316, + 425, + 327, + 439, + 332, + 446, + 335, + 455, + 335, + 463, + 332, + 468, + 332, + 472, + 326, + 481, + 312, + 493, + 296, + 500 + ] + ], + "image_id": "102", + "id": 288 + }, + { + "area": 29750, + "iscrowd": 0, + "bbox": [ + 144, + 260, + 174, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 208, + 426, + 191, + 425, + 171, + 414, + 163, + 405, + 154, + 393, + 148, + 376, + 148, + 363, + 150, + 355, + 156, + 349, + 158, + 340, + 171, + 323, + 180, + 318, + 243, + 269, + 254, + 264, + 260, + 263, + 277, + 264, + 295, + 274, + 302, + 280, + 311, + 293, + 314, + 299, + 315, + 306, + 315, + 313, + 312, + 325, + 306, + 334, + 244, + 408, + 235, + 414, + 226, + 418, + 221, + 418, + 217, + 422, + 208, + 426 + ] + ], + "image_id": "103", + "id": 289 + }, + { + "area": 29684, + "iscrowd": 0, + "bbox": [ + 175, + 253, + 180, + 163 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 297, + 409, + 285, + 409, + 275, + 405, + 216, + 353, + 190, + 332, + 184, + 322, + 183, + 312, + 179, + 306, + 178, + 299, + 179, + 286, + 185, + 275, + 204, + 259, + 213, + 257, + 235, + 257, + 243, + 260, + 264, + 273, + 275, + 278, + 308, + 299, + 324, + 307, + 327, + 310, + 334, + 312, + 344, + 320, + 348, + 326, + 351, + 337, + 351, + 352, + 348, + 364, + 336, + 386, + 321, + 399, + 309, + 405, + 298, + 407, + 297, + 409 + ] + ], + "image_id": "104", + "id": 290 + }, + { + "area": 52578, + "iscrowd": 0, + "bbox": [ + 142, + 257, + 253, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 328, + 459, + 321, + 459, + 311, + 455, + 307, + 455, + 280, + 431, + 250, + 408, + 239, + 396, + 226, + 380, + 224, + 380, + 217, + 373, + 208, + 371, + 197, + 365, + 181, + 350, + 174, + 338, + 172, + 329, + 168, + 325, + 164, + 324, + 157, + 317, + 154, + 313, + 151, + 303, + 146, + 296, + 145, + 283, + 147, + 277, + 154, + 269, + 163, + 263, + 178, + 260, + 193, + 261, + 200, + 264, + 207, + 270, + 227, + 270, + 239, + 273, + 254, + 280, + 269, + 296, + 277, + 301, + 310, + 310, + 331, + 323, + 371, + 343, + 386, + 355, + 391, + 369, + 392, + 383, + 386, + 403, + 377, + 421, + 373, + 425, + 372, + 429, + 357, + 445, + 343, + 453, + 342, + 455, + 328, + 459 + ] + ], + "image_id": "105", + "id": 291 + }, + { + "area": 52224, + "iscrowd": 0, + "bbox": [ + 103, + 272, + 255, + 203 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 150, + 468, + 134, + 464, + 125, + 455, + 112, + 435, + 109, + 422, + 109, + 414, + 111, + 409, + 113, + 406, + 119, + 403, + 128, + 395, + 129, + 388, + 133, + 383, + 146, + 377, + 157, + 378, + 163, + 372, + 165, + 364, + 170, + 354, + 190, + 334, + 201, + 329, + 219, + 325, + 230, + 320, + 251, + 301, + 298, + 276, + 307, + 274, + 319, + 276, + 331, + 283, + 344, + 294, + 351, + 305, + 354, + 326, + 351, + 338, + 340, + 351, + 326, + 360, + 304, + 379, + 297, + 381, + 290, + 386, + 282, + 388, + 270, + 398, + 262, + 408, + 262, + 410, + 246, + 424, + 230, + 432, + 222, + 433, + 219, + 435, + 200, + 433, + 196, + 436, + 194, + 439, + 193, + 446, + 184, + 456, + 177, + 459, + 163, + 459, + 159, + 464, + 150, + 468 + ] + ], + "image_id": "106", + "id": 292 + }, + { + "area": 30820, + "iscrowd": 0, + "bbox": [ + 107, + 272, + 133, + 229 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 162, + 497, + 148, + 497, + 125, + 488, + 119, + 480, + 115, + 472, + 113, + 466, + 115, + 453, + 113, + 451, + 112, + 441, + 115, + 427, + 122, + 420, + 122, + 413, + 118, + 401, + 118, + 392, + 127, + 365, + 141, + 349, + 142, + 328, + 146, + 322, + 147, + 317, + 151, + 312, + 157, + 294, + 161, + 289, + 176, + 279, + 194, + 276, + 211, + 281, + 221, + 288, + 232, + 300, + 235, + 309, + 235, + 320, + 233, + 326, + 230, + 353, + 226, + 364, + 222, + 370, + 222, + 376, + 225, + 382, + 225, + 398, + 220, + 415, + 203, + 436, + 204, + 446, + 201, + 458, + 195, + 466, + 195, + 468, + 190, + 471, + 188, + 480, + 184, + 486, + 177, + 491, + 162, + 497 + ] + ], + "image_id": "107", + "id": 293 + }, + { + "area": 23408, + "iscrowd": 0, + "bbox": [ + 261, + 274, + 132, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 340, + 443, + 327, + 443, + 312, + 438, + 306, + 434, + 285, + 410, + 279, + 390, + 273, + 347, + 267, + 327, + 266, + 315, + 272, + 299, + 282, + 288, + 303, + 279, + 319, + 279, + 331, + 282, + 343, + 291, + 361, + 323, + 373, + 350, + 375, + 351, + 379, + 361, + 384, + 368, + 387, + 380, + 384, + 408, + 377, + 423, + 364, + 434, + 340, + 443 + ] + ], + "image_id": "107", + "id": 294 + }, + { + "area": 29870, + "iscrowd": 0, + "bbox": [ + 35, + 314, + 289, + 102 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 158, + 414, + 144, + 414, + 134, + 412, + 129, + 409, + 126, + 409, + 110, + 399, + 103, + 397, + 92, + 397, + 83, + 402, + 82, + 404, + 76, + 404, + 68, + 397, + 56, + 398, + 49, + 396, + 42, + 385, + 40, + 370, + 41, + 356, + 46, + 343, + 50, + 338, + 70, + 338, + 73, + 333, + 77, + 330, + 83, + 330, + 87, + 334, + 94, + 336, + 104, + 336, + 113, + 334, + 121, + 327, + 129, + 323, + 145, + 319, + 161, + 319, + 173, + 323, + 184, + 324, + 206, + 324, + 219, + 323, + 236, + 319, + 308, + 318, + 317, + 325, + 321, + 341, + 322, + 384, + 319, + 401, + 313, + 410, + 307, + 412, + 248, + 413, + 225, + 411, + 215, + 407, + 190, + 407, + 173, + 409, + 158, + 414 + ] + ], + "image_id": "108", + "id": 295 + }, + { + "area": 24112, + "iscrowd": 0, + "bbox": [ + 313, + 281, + 136, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 396, + 450, + 378, + 448, + 366, + 442, + 355, + 430, + 347, + 423, + 340, + 412, + 321, + 347, + 321, + 336, + 316, + 320, + 317, + 315, + 324, + 303, + 334, + 294, + 345, + 288, + 371, + 286, + 384, + 290, + 388, + 294, + 390, + 294, + 440, + 372, + 444, + 381, + 445, + 408, + 442, + 419, + 438, + 426, + 430, + 435, + 419, + 443, + 396, + 450 + ] + ], + "image_id": "108", + "id": 296 + }, + { + "area": 34438, + "iscrowd": 0, + "bbox": [ + 97, + 272, + 133, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 155, + 523, + 135, + 522, + 124, + 517, + 112, + 506, + 108, + 498, + 107, + 492, + 109, + 486, + 109, + 479, + 105, + 471, + 104, + 462, + 106, + 452, + 111, + 443, + 114, + 442, + 114, + 437, + 108, + 421, + 107, + 398, + 113, + 383, + 128, + 362, + 127, + 352, + 130, + 334, + 135, + 323, + 140, + 304, + 146, + 291, + 153, + 286, + 169, + 279, + 189, + 278, + 211, + 289, + 219, + 297, + 225, + 307, + 225, + 352, + 223, + 362, + 217, + 377, + 217, + 382, + 222, + 398, + 222, + 408, + 218, + 428, + 211, + 437, + 207, + 446, + 201, + 452, + 204, + 461, + 202, + 478, + 191, + 492, + 191, + 498, + 189, + 502, + 183, + 511, + 178, + 515, + 167, + 521, + 155, + 523 + ] + ], + "image_id": "109", + "id": 297 + }, + { + "area": 22550, + "iscrowd": 0, + "bbox": [ + 225, + 293, + 204, + 109 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 393, + 397, + 367, + 397, + 240, + 391, + 230, + 378, + 229, + 336, + 230, + 317, + 232, + 309, + 237, + 306, + 245, + 296, + 248, + 296, + 261, + 298, + 391, + 299, + 408, + 310, + 419, + 310, + 423, + 316, + 428, + 340, + 427, + 362, + 424, + 375, + 418, + 388, + 410, + 388, + 404, + 390, + 393, + 397 + ] + ], + "image_id": "109", + "id": 298 + }, + { + "area": 33300, + "iscrowd": 0, + "bbox": [ + 47, + 308, + 299, + 110 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 247, + 414, + 225, + 414, + 212, + 409, + 200, + 407, + 169, + 407, + 154, + 412, + 76, + 412, + 67, + 410, + 62, + 405, + 58, + 398, + 53, + 381, + 52, + 364, + 57, + 334, + 63, + 322, + 70, + 316, + 79, + 313, + 95, + 313, + 147, + 315, + 175, + 321, + 190, + 322, + 217, + 321, + 222, + 318, + 242, + 318, + 262, + 324, + 276, + 334, + 282, + 336, + 295, + 336, + 305, + 331, + 310, + 331, + 316, + 338, + 330, + 338, + 339, + 341, + 342, + 351, + 342, + 378, + 340, + 392, + 335, + 398, + 315, + 398, + 311, + 404, + 303, + 403, + 294, + 398, + 279, + 398, + 260, + 408, + 259, + 410, + 248, + 412, + 247, + 414 + ] + ], + "image_id": "110", + "id": 299 + }, + { + "area": 26368, + "iscrowd": 0, + "bbox": [ + 331, + 205, + 127, + 205 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 386, + 407, + 370, + 405, + 362, + 402, + 351, + 396, + 341, + 387, + 343, + 373, + 342, + 347, + 340, + 341, + 335, + 338, + 335, + 333, + 348, + 242, + 352, + 234, + 359, + 228, + 360, + 218, + 362, + 215, + 370, + 211, + 402, + 208, + 435, + 215, + 445, + 220, + 449, + 225, + 450, + 229, + 448, + 238, + 453, + 249, + 454, + 263, + 448, + 286, + 446, + 302, + 442, + 314, + 438, + 337, + 434, + 347, + 426, + 387, + 420, + 395, + 407, + 402, + 396, + 406, + 386, + 407 + ] + ], + "image_id": "110", + "id": 300 + }, + { + "area": 39162, + "iscrowd": 0, + "bbox": [ + 98, + 176, + 121, + 320 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 158, + 494, + 149, + 492, + 142, + 482, + 132, + 481, + 125, + 473, + 121, + 464, + 117, + 448, + 115, + 418, + 102, + 317, + 102, + 303, + 105, + 294, + 111, + 283, + 115, + 279, + 120, + 266, + 121, + 226, + 123, + 217, + 121, + 216, + 119, + 211, + 117, + 187, + 119, + 184, + 126, + 181, + 146, + 178, + 160, + 178, + 172, + 180, + 178, + 185, + 180, + 211, + 177, + 217, + 180, + 224, + 186, + 257, + 190, + 269, + 201, + 280, + 209, + 292, + 212, + 310, + 212, + 367, + 215, + 440, + 213, + 458, + 208, + 468, + 203, + 473, + 200, + 473, + 194, + 484, + 187, + 489, + 183, + 490, + 179, + 488, + 175, + 484, + 174, + 479, + 171, + 477, + 168, + 487, + 158, + 494 + ] + ], + "image_id": "111", + "id": 301 + }, + { + "area": 65048, + "iscrowd": 0, + "bbox": [ + 220, + 130, + 172, + 375 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 274, + 499, + 272, + 499, + 269, + 495, + 222, + 441, + 224, + 417, + 227, + 191, + 239, + 179, + 259, + 164, + 259, + 143, + 262, + 137, + 265, + 135, + 350, + 133, + 356, + 137, + 355, + 162, + 374, + 180, + 387, + 196, + 389, + 201, + 362, + 389, + 354, + 454, + 354, + 465, + 274, + 499 + ] + ], + "image_id": "111", + "id": 302 + }, + { + "area": 39360, + "iscrowd": 0, + "bbox": [ + 29, + 415, + 327, + 119 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 322, + 531, + 223, + 527, + 150, + 526, + 134, + 520, + 117, + 505, + 109, + 502, + 93, + 499, + 81, + 499, + 74, + 497, + 71, + 494, + 68, + 494, + 65, + 497, + 41, + 496, + 37, + 490, + 34, + 480, + 35, + 463, + 41, + 448, + 46, + 443, + 70, + 443, + 73, + 446, + 76, + 446, + 78, + 444, + 93, + 444, + 117, + 440, + 123, + 438, + 137, + 427, + 156, + 420, + 323, + 423, + 337, + 430, + 342, + 431, + 350, + 440, + 349, + 448, + 353, + 454, + 354, + 468, + 351, + 473, + 346, + 474, + 345, + 481, + 348, + 481, + 353, + 485, + 354, + 500, + 350, + 505, + 351, + 516, + 345, + 523, + 340, + 526, + 322, + 531 + ] + ], + "image_id": "112", + "id": 303 + }, + { + "area": 56724, + "iscrowd": 0, + "bbox": [ + 272, + 145, + 162, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 355, + 488, + 350, + 481, + 346, + 482, + 345, + 480, + 346, + 475, + 352, + 473, + 354, + 470, + 354, + 456, + 350, + 448, + 349, + 437, + 342, + 430, + 326, + 423, + 275, + 421, + 281, + 333, + 281, + 305, + 285, + 269, + 288, + 213, + 289, + 210, + 302, + 201, + 319, + 194, + 320, + 192, + 335, + 187, + 339, + 180, + 339, + 168, + 341, + 166, + 341, + 161, + 342, + 158, + 345, + 156, + 368, + 153, + 376, + 150, + 385, + 150, + 388, + 153, + 388, + 168, + 395, + 170, + 413, + 182, + 419, + 187, + 422, + 193, + 422, + 198, + 430, + 205, + 432, + 212, + 422, + 273, + 413, + 316, + 400, + 410, + 395, + 430, + 394, + 446, + 355, + 488 + ] + ], + "image_id": "112", + "id": 304 + }, + { + "area": 29500, + "iscrowd": 0, + "bbox": [ + 82, + 128, + 117, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 100, + 374, + 99, + 373, + 85, + 255, + 86, + 247, + 90, + 236, + 102, + 218, + 103, + 178, + 106, + 173, + 106, + 166, + 101, + 163, + 101, + 137, + 104, + 135, + 112, + 134, + 150, + 135, + 155, + 136, + 158, + 143, + 158, + 163, + 156, + 166, + 156, + 171, + 161, + 186, + 165, + 211, + 169, + 220, + 182, + 234, + 188, + 248, + 191, + 360, + 100, + 374 + ] + ], + "image_id": "113", + "id": 305 + }, + { + "area": 77172, + "iscrowd": 0, + "bbox": [ + 89, + 333, + 353, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 119, + 546, + 117, + 543, + 113, + 505, + 109, + 492, + 106, + 473, + 102, + 464, + 98, + 431, + 95, + 420, + 95, + 407, + 92, + 390, + 92, + 379, + 94, + 376, + 160, + 365, + 185, + 363, + 238, + 354, + 341, + 340, + 364, + 335, + 372, + 339, + 392, + 345, + 411, + 354, + 422, + 355, + 428, + 353, + 435, + 353, + 438, + 356, + 427, + 388, + 427, + 394, + 433, + 394, + 436, + 396, + 438, + 405, + 435, + 433, + 432, + 438, + 428, + 440, + 420, + 438, + 413, + 438, + 412, + 439, + 410, + 462, + 407, + 470, + 404, + 473, + 251, + 511, + 201, + 525, + 141, + 539, + 140, + 541, + 134, + 541, + 119, + 546 + ] + ], + "image_id": "113", + "id": 306 + }, + { + "area": 31868, + "iscrowd": 0, + "bbox": [ + 74, + 114, + 123, + 256 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 99, + 363, + 98, + 362, + 97, + 358, + 79, + 250, + 79, + 234, + 93, + 205, + 93, + 160, + 95, + 157, + 95, + 152, + 92, + 152, + 90, + 147, + 88, + 123, + 93, + 119, + 99, + 118, + 115, + 116, + 139, + 117, + 146, + 121, + 149, + 145, + 149, + 147, + 146, + 149, + 146, + 153, + 151, + 163, + 159, + 201, + 174, + 217, + 182, + 235, + 185, + 282, + 191, + 337, + 191, + 352, + 99, + 363 + ] + ], + "image_id": "114", + "id": 307 + }, + { + "area": 87290, + "iscrowd": 0, + "bbox": [ + 56, + 330, + 405, + 214 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 85, + 540, + 80, + 538, + 79, + 522, + 72, + 483, + 65, + 451, + 61, + 442, + 61, + 436, + 64, + 426, + 67, + 387, + 70, + 379, + 70, + 370, + 72, + 366, + 82, + 366, + 208, + 352, + 341, + 336, + 364, + 335, + 367, + 336, + 373, + 341, + 387, + 360, + 393, + 358, + 403, + 351, + 412, + 356, + 431, + 384, + 432, + 390, + 427, + 394, + 427, + 396, + 459, + 439, + 459, + 441, + 456, + 443, + 445, + 442, + 434, + 444, + 414, + 472, + 396, + 491, + 384, + 491, + 332, + 499, + 208, + 520, + 100, + 536, + 85, + 540 + ] + ], + "image_id": "114", + "id": 308 + }, + { + "area": 40119, + "iscrowd": 0, + "bbox": [ + 229, + 118, + 128, + 310 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 330, + 420, + 313, + 411, + 285, + 402, + 237, + 384, + 234, + 381, + 234, + 170, + 239, + 156, + 239, + 128, + 242, + 122, + 278, + 121, + 337, + 123, + 340, + 124, + 344, + 129, + 342, + 134, + 341, + 155, + 344, + 159, + 353, + 191, + 345, + 248, + 332, + 401, + 332, + 416, + 330, + 420 + ] + ], + "image_id": "115", + "id": 309 + }, + { + "area": 58828, + "iscrowd": 0, + "bbox": [ + 131, + 365, + 307, + 190 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 416, + 549, + 412, + 549, + 388, + 538, + 385, + 532, + 374, + 531, + 336, + 519, + 324, + 519, + 310, + 524, + 298, + 524, + 289, + 522, + 278, + 516, + 266, + 512, + 259, + 507, + 153, + 454, + 142, + 442, + 136, + 431, + 136, + 427, + 141, + 421, + 141, + 418, + 138, + 416, + 136, + 410, + 136, + 406, + 139, + 399, + 148, + 395, + 156, + 394, + 151, + 388, + 151, + 384, + 154, + 377, + 160, + 373, + 174, + 372, + 175, + 370, + 179, + 369, + 194, + 369, + 301, + 409, + 313, + 412, + 326, + 418, + 343, + 431, + 353, + 446, + 353, + 448, + 359, + 455, + 397, + 476, + 402, + 481, + 409, + 479, + 432, + 489, + 436, + 492, + 437, + 498, + 432, + 520, + 423, + 540, + 416, + 549 + ] + ], + "image_id": "115", + "id": 310 + }, + { + "area": 37820, + "iscrowd": 0, + "bbox": [ + 65, + 169, + 121, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 144, + 476, + 139, + 476, + 133, + 468, + 130, + 462, + 127, + 471, + 120, + 476, + 112, + 475, + 109, + 472, + 107, + 472, + 105, + 465, + 102, + 463, + 98, + 463, + 91, + 453, + 87, + 445, + 84, + 433, + 81, + 395, + 69, + 307, + 69, + 290, + 71, + 282, + 84, + 264, + 86, + 256, + 88, + 206, + 84, + 203, + 83, + 179, + 84, + 177, + 100, + 173, + 126, + 172, + 133, + 173, + 141, + 177, + 144, + 201, + 140, + 205, + 140, + 209, + 142, + 211, + 146, + 224, + 152, + 257, + 168, + 275, + 174, + 290, + 176, + 309, + 180, + 436, + 175, + 452, + 172, + 454, + 168, + 461, + 164, + 463, + 159, + 462, + 154, + 471, + 145, + 474, + 144, + 476 + ] + ], + "image_id": "116", + "id": 311 + }, + { + "area": 72354, + "iscrowd": 0, + "bbox": [ + 242, + 132, + 185, + 388 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 338, + 516, + 276, + 485, + 250, + 473, + 266, + 203, + 267, + 201, + 289, + 186, + 294, + 185, + 299, + 181, + 309, + 179, + 322, + 171, + 324, + 165, + 324, + 153, + 326, + 149, + 326, + 143, + 328, + 142, + 328, + 140, + 333, + 138, + 371, + 137, + 375, + 142, + 375, + 155, + 379, + 155, + 392, + 160, + 412, + 176, + 416, + 183, + 415, + 191, + 422, + 197, + 423, + 200, + 423, + 215, + 420, + 225, + 420, + 232, + 411, + 276, + 411, + 286, + 398, + 353, + 394, + 391, + 386, + 433, + 383, + 463, + 371, + 477, + 370, + 480, + 365, + 484, + 355, + 499, + 338, + 516 + ] + ], + "image_id": "116", + "id": 312 + }, + { + "area": 54040, + "iscrowd": 0, + "bbox": [ + 140, + 167, + 139, + 385 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 221, + 548, + 204, + 547, + 198, + 541, + 194, + 535, + 183, + 536, + 175, + 528, + 166, + 511, + 160, + 479, + 156, + 428, + 152, + 404, + 150, + 369, + 146, + 348, + 147, + 316, + 154, + 300, + 158, + 296, + 168, + 278, + 168, + 242, + 172, + 216, + 168, + 214, + 166, + 209, + 166, + 180, + 168, + 177, + 172, + 175, + 185, + 172, + 224, + 172, + 233, + 174, + 237, + 176, + 239, + 180, + 240, + 211, + 236, + 214, + 236, + 218, + 238, + 224, + 240, + 225, + 240, + 233, + 246, + 260, + 248, + 278, + 267, + 301, + 270, + 311, + 272, + 313, + 275, + 327, + 275, + 490, + 273, + 495, + 273, + 501, + 270, + 509, + 265, + 514, + 261, + 528, + 255, + 535, + 245, + 541, + 242, + 541, + 239, + 540, + 231, + 530, + 229, + 540, + 221, + 548 + ] + ], + "image_id": "117", + "id": 313 + }, + { + "area": 30694, + "iscrowd": 0, + "bbox": [ + 240, + 190, + 102, + 297 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 295, + 481, + 279, + 481, + 275, + 478, + 275, + 327, + 271, + 308, + 268, + 301, + 249, + 278, + 249, + 275, + 255, + 263, + 255, + 249, + 249, + 240, + 248, + 232, + 255, + 225, + 255, + 211, + 257, + 202, + 260, + 198, + 265, + 196, + 278, + 194, + 308, + 195, + 322, + 202, + 322, + 226, + 327, + 229, + 329, + 236, + 321, + 252, + 321, + 261, + 326, + 273, + 333, + 283, + 335, + 296, + 338, + 304, + 338, + 318, + 330, + 342, + 330, + 371, + 333, + 383, + 331, + 450, + 328, + 460, + 321, + 469, + 312, + 475, + 295, + 481 + ] + ], + "image_id": "117", + "id": 314 + }, + { + "area": 23816, + "iscrowd": 0, + "bbox": [ + 196, + 200, + 103, + 228 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 203, + 418, + 202, + 388, + 203, + 378, + 206, + 370, + 206, + 338, + 200, + 316, + 200, + 307, + 206, + 287, + 214, + 276, + 218, + 267, + 217, + 255, + 214, + 252, + 210, + 243, + 211, + 240, + 217, + 234, + 217, + 214, + 218, + 212, + 229, + 207, + 259, + 206, + 272, + 209, + 279, + 214, + 279, + 234, + 283, + 237, + 286, + 241, + 285, + 248, + 282, + 251, + 279, + 258, + 278, + 267, + 285, + 279, + 294, + 301, + 295, + 317, + 288, + 338, + 287, + 347, + 287, + 370, + 289, + 375, + 291, + 394, + 290, + 413, + 288, + 416, + 236, + 416, + 203, + 418 + ] + ], + "image_id": "118", + "id": 315 + }, + { + "area": 46280, + "iscrowd": 0, + "bbox": [ + 88, + 410, + 355, + 129 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 149, + 535, + 118, + 532, + 117, + 530, + 102, + 526, + 96, + 520, + 93, + 513, + 93, + 503, + 99, + 495, + 91, + 488, + 90, + 473, + 100, + 463, + 95, + 457, + 94, + 446, + 97, + 439, + 103, + 434, + 105, + 430, + 128, + 421, + 152, + 419, + 199, + 419, + 246, + 416, + 308, + 416, + 326, + 423, + 341, + 434, + 347, + 436, + 387, + 440, + 395, + 443, + 400, + 439, + 422, + 439, + 425, + 440, + 431, + 445, + 436, + 456, + 438, + 466, + 438, + 480, + 436, + 488, + 432, + 494, + 427, + 496, + 405, + 497, + 401, + 493, + 399, + 493, + 392, + 497, + 357, + 502, + 347, + 506, + 335, + 518, + 320, + 527, + 304, + 530, + 257, + 530, + 149, + 535 + ] + ], + "image_id": "118", + "id": 316 + }, + { + "area": 35160, + "iscrowd": 0, + "bbox": [ + 139, + 116, + 119, + 292 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 247, + 398, + 211, + 394, + 155, + 393, + 155, + 376, + 149, + 309, + 149, + 285, + 145, + 266, + 145, + 245, + 147, + 238, + 150, + 234, + 150, + 231, + 163, + 213, + 165, + 204, + 166, + 174, + 167, + 165, + 169, + 163, + 169, + 155, + 166, + 152, + 165, + 127, + 169, + 124, + 202, + 123, + 214, + 124, + 224, + 127, + 224, + 155, + 220, + 157, + 220, + 159, + 224, + 169, + 229, + 209, + 231, + 211, + 231, + 214, + 245, + 232, + 250, + 246, + 250, + 390, + 247, + 398 + ] + ], + "image_id": "119", + "id": 317 + }, + { + "area": 46170, + "iscrowd": 0, + "bbox": [ + 128, + 389, + 341, + 134 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 345, + 517, + 325, + 516, + 310, + 510, + 289, + 507, + 253, + 508, + 245, + 511, + 214, + 511, + 180, + 509, + 173, + 507, + 145, + 506, + 142, + 502, + 136, + 489, + 135, + 454, + 139, + 425, + 143, + 411, + 147, + 403, + 153, + 396, + 158, + 394, + 225, + 395, + 246, + 398, + 277, + 406, + 313, + 406, + 337, + 402, + 360, + 407, + 364, + 410, + 367, + 410, + 391, + 426, + 405, + 426, + 411, + 424, + 416, + 420, + 425, + 420, + 434, + 428, + 451, + 429, + 456, + 431, + 460, + 434, + 466, + 451, + 468, + 468, + 467, + 478, + 463, + 492, + 457, + 499, + 434, + 499, + 429, + 505, + 422, + 507, + 406, + 498, + 390, + 498, + 366, + 512, + 345, + 517 + ] + ], + "image_id": "119", + "id": 318 + }, + { + "area": 34691, + "iscrowd": 0, + "bbox": [ + 150, + 139, + 112, + 306 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 194, + 441, + 188, + 434, + 179, + 434, + 168, + 416, + 167, + 407, + 165, + 403, + 165, + 389, + 154, + 283, + 153, + 261, + 155, + 254, + 172, + 226, + 172, + 187, + 174, + 183, + 175, + 174, + 171, + 174, + 170, + 170, + 171, + 146, + 177, + 143, + 207, + 141, + 221, + 143, + 224, + 144, + 226, + 146, + 227, + 171, + 224, + 175, + 225, + 182, + 227, + 184, + 231, + 216, + 234, + 227, + 244, + 239, + 250, + 249, + 254, + 262, + 254, + 278, + 256, + 290, + 257, + 402, + 255, + 408, + 252, + 411, + 241, + 413, + 225, + 421, + 209, + 433, + 203, + 435, + 194, + 441 + ] + ], + "image_id": "120", + "id": 319 + }, + { + "area": 55769, + "iscrowd": 0, + "bbox": [ + 149, + 355, + 256, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 222, + 566, + 214, + 566, + 207, + 564, + 201, + 559, + 194, + 556, + 181, + 541, + 166, + 517, + 159, + 500, + 157, + 491, + 158, + 471, + 163, + 462, + 190, + 444, + 205, + 435, + 211, + 433, + 225, + 422, + 241, + 414, + 250, + 413, + 264, + 407, + 290, + 384, + 298, + 379, + 313, + 374, + 325, + 374, + 334, + 376, + 340, + 367, + 349, + 363, + 359, + 364, + 364, + 361, + 371, + 361, + 384, + 367, + 396, + 382, + 398, + 387, + 398, + 395, + 394, + 404, + 390, + 408, + 389, + 415, + 378, + 425, + 371, + 426, + 368, + 439, + 358, + 457, + 344, + 468, + 332, + 474, + 326, + 475, + 316, + 483, + 290, + 514, + 277, + 523, + 259, + 539, + 222, + 566 + ] + ], + "image_id": "120", + "id": 320 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 36, + 294, + 303, + 110 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 96, + 402, + 69, + 400, + 56, + 394, + 51, + 388, + 50, + 376, + 54, + 369, + 50, + 369, + 46, + 362, + 46, + 352, + 48, + 348, + 52, + 345, + 52, + 342, + 48, + 339, + 46, + 330, + 51, + 322, + 64, + 313, + 75, + 311, + 84, + 307, + 149, + 305, + 174, + 302, + 231, + 299, + 242, + 302, + 258, + 313, + 273, + 315, + 292, + 315, + 298, + 317, + 303, + 317, + 305, + 314, + 323, + 314, + 330, + 320, + 333, + 332, + 333, + 349, + 328, + 358, + 309, + 360, + 305, + 357, + 296, + 361, + 267, + 367, + 246, + 384, + 182, + 388, + 176, + 393, + 172, + 394, + 162, + 394, + 133, + 398, + 106, + 399, + 96, + 402 + ] + ], + "image_id": "121", + "id": 321 + }, + { + "area": 43155, + "iscrowd": 0, + "bbox": [ + 169, + 371, + 314, + 136 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 196, + 501, + 185, + 501, + 181, + 497, + 179, + 492, + 177, + 474, + 174, + 397, + 177, + 392, + 184, + 388, + 230, + 386, + 253, + 383, + 272, + 383, + 280, + 385, + 309, + 385, + 351, + 375, + 361, + 375, + 372, + 376, + 380, + 380, + 386, + 381, + 400, + 390, + 415, + 389, + 424, + 382, + 432, + 382, + 438, + 385, + 440, + 388, + 457, + 387, + 468, + 395, + 476, + 413, + 477, + 429, + 471, + 445, + 467, + 446, + 466, + 448, + 452, + 450, + 447, + 456, + 441, + 459, + 434, + 459, + 426, + 455, + 415, + 455, + 409, + 457, + 397, + 470, + 377, + 480, + 364, + 482, + 339, + 479, + 314, + 480, + 309, + 482, + 302, + 482, + 300, + 484, + 289, + 486, + 273, + 492, + 266, + 492, + 256, + 495, + 203, + 499, + 196, + 501 + ] + ], + "image_id": "121", + "id": 322 + }, + { + "area": 38936, + "iscrowd": 0, + "bbox": [ + 31, + 296, + 313, + 123 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [ + [ + 167, + 414, + 152, + 414, + 127, + 402, + 82, + 403, + 79, + 401, + 73, + 401, + 71, + 405, + 47, + 408, + 42, + 399, + 40, + 390, + 40, + 359, + 41, + 357, + 46, + 355, + 63, + 353, + 66, + 355, + 72, + 355, + 81, + 350, + 86, + 350, + 93, + 347, + 98, + 347, + 115, + 342, + 121, + 339, + 131, + 328, + 133, + 328, + 141, + 321, + 160, + 316, + 224, + 310, + 290, + 301, + 299, + 301, + 312, + 304, + 318, + 307, + 322, + 307, + 328, + 310, + 333, + 319, + 333, + 325, + 329, + 328, + 329, + 330, + 336, + 334, + 340, + 340, + 340, + 348, + 333, + 355, + 334, + 358, + 337, + 358, + 339, + 362, + 339, + 367, + 333, + 377, + 324, + 382, + 318, + 383, + 307, + 389, + 303, + 389, + 297, + 392, + 284, + 390, + 249, + 390, + 233, + 391, + 223, + 394, + 194, + 395, + 181, + 397, + 176, + 404, + 176, + 411, + 167, + 414 + ] + ], + "image_id": "122", + "id": 323 + }, + { + "area": 47742, + "iscrowd": 0, + "bbox": [ + 171, + 373, + 326, + 145 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [ + [ + 196, + 515, + 190, + 515, + 186, + 511, + 183, + 503, + 181, + 490, + 181, + 476, + 176, + 429, + 176, + 407, + 181, + 398, + 202, + 395, + 222, + 395, + 233, + 392, + 247, + 392, + 257, + 390, + 314, + 392, + 335, + 388, + 356, + 381, + 379, + 381, + 400, + 388, + 410, + 395, + 423, + 395, + 432, + 388, + 437, + 386, + 443, + 386, + 452, + 392, + 471, + 392, + 482, + 400, + 488, + 410, + 492, + 424, + 492, + 439, + 489, + 448, + 480, + 455, + 465, + 459, + 465, + 461, + 458, + 467, + 448, + 468, + 441, + 464, + 429, + 463, + 423, + 466, + 419, + 471, + 401, + 485, + 392, + 487, + 391, + 489, + 385, + 491, + 324, + 491, + 306, + 495, + 277, + 505, + 249, + 507, + 237, + 510, + 217, + 511, + 196, + 515 + ] + ], + "image_id": "122", + "id": 324 + }, + { + "area": 25773, + "iscrowd": 0, + "bbox": [ + 107, + 288, + 120, + 212 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 175, + 494, + 156, + 494, + 148, + 492, + 143, + 490, + 131, + 480, + 124, + 468, + 119, + 423, + 112, + 334, + 115, + 327, + 121, + 320, + 121, + 309, + 124, + 303, + 133, + 297, + 155, + 291, + 182, + 291, + 193, + 293, + 202, + 297, + 211, + 303, + 212, + 314, + 221, + 326, + 223, + 449, + 222, + 462, + 219, + 469, + 201, + 486, + 185, + 492, + 175, + 494 + ] + ], + "image_id": "123", + "id": 325 + }, + { + "area": 69706, + "iscrowd": 0, + "bbox": [ + 243, + 112, + 181, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 281, + 490, + 274, + 490, + 273, + 488, + 248, + 427, + 256, + 265, + 261, + 197, + 261, + 175, + 266, + 167, + 281, + 151, + 282, + 126, + 289, + 117, + 394, + 121, + 400, + 126, + 397, + 155, + 414, + 181, + 420, + 194, + 421, + 201, + 393, + 343, + 377, + 439, + 373, + 474, + 367, + 477, + 294, + 487, + 281, + 490 + ] + ], + "image_id": "123", + "id": 326 + }, + { + "area": 26334, + "iscrowd": 0, + "bbox": [ + 50, + 263, + 125, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 115, + 466, + 104, + 466, + 87, + 461, + 77, + 452, + 73, + 444, + 63, + 372, + 53, + 315, + 55, + 306, + 61, + 294, + 61, + 282, + 67, + 277, + 76, + 273, + 95, + 268, + 125, + 268, + 127, + 269, + 128, + 279, + 132, + 283, + 141, + 284, + 140, + 304, + 146, + 313, + 164, + 325, + 165, + 331, + 165, + 353, + 170, + 430, + 169, + 437, + 161, + 447, + 147, + 457, + 133, + 462, + 115, + 466 + ] + ], + "image_id": "124", + "id": 327 + }, + { + "area": 106304, + "iscrowd": 0, + "bbox": [ + 122, + 186, + 351, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 387, + 482, + 364, + 464, + 146, + 311, + 140, + 302, + 141, + 284, + 130, + 281, + 128, + 277, + 127, + 270, + 128, + 245, + 131, + 237, + 137, + 230, + 137, + 228, + 130, + 220, + 129, + 214, + 143, + 196, + 154, + 202, + 162, + 209, + 168, + 210, + 191, + 198, + 202, + 194, + 220, + 189, + 224, + 190, + 325, + 269, + 420, + 346, + 436, + 355, + 442, + 367, + 464, + 395, + 471, + 410, + 387, + 482 + ] + ], + "image_id": "124", + "id": 328 + }, + { + "area": 23617, + "iscrowd": 0, + "bbox": [ + 86, + 371, + 208, + 112 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 260, + 477, + 218, + 477, + 217, + 476, + 148, + 476, + 147, + 475, + 111, + 475, + 110, + 474, + 109, + 474, + 107, + 471, + 107, + 470, + 105, + 468, + 105, + 467, + 104, + 466, + 104, + 465, + 102, + 463, + 102, + 462, + 100, + 460, + 100, + 458, + 99, + 457, + 99, + 456, + 98, + 455, + 98, + 454, + 95, + 451, + 95, + 450, + 94, + 449, + 94, + 448, + 93, + 447, + 93, + 445, + 92, + 444, + 92, + 423, + 93, + 422, + 93, + 416, + 94, + 415, + 94, + 409, + 95, + 408, + 95, + 403, + 96, + 402, + 96, + 401, + 97, + 400, + 97, + 398, + 98, + 397, + 98, + 394, + 101, + 391, + 101, + 389, + 101, + 389, + 102, + 389, + 104, + 387, + 105, + 387, + 108, + 384, + 108, + 383, + 115, + 376, + 130, + 376, + 131, + 377, + 219, + 377, + 220, + 378, + 257, + 378, + 258, + 379, + 260, + 379, + 261, + 380, + 262, + 380, + 263, + 381, + 264, + 381, + 269, + 386, + 270, + 386, + 271, + 387, + 272, + 387, + 273, + 388, + 274, + 388, + 275, + 389, + 279, + 389, + 280, + 388, + 283, + 388, + 284, + 388, + 284, + 389, + 285, + 390, + 285, + 396, + 286, + 397, + 286, + 458, + 285, + 459, + 285, + 466, + 284, + 467, + 284, + 468, + 283, + 469, + 281, + 469, + 280, + 468, + 272, + 468, + 269, + 471, + 268, + 471, + 266, + 473, + 265, + 473, + 263, + 475, + 261, + 475, + 261, + 475, + 261, + 476, + 260, + 477 + ] + ], + "image_id": "125", + "id": 329 + }, + { + "area": 68816, + "iscrowd": 0, + "bbox": [ + 279, + 111, + 183, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 317, + 483, + 304, + 483, + 301, + 479, + 286, + 420, + 289, + 400, + 295, + 302, + 306, + 176, + 316, + 158, + 321, + 152, + 321, + 148, + 323, + 145, + 324, + 126, + 327, + 120, + 330, + 118, + 339, + 117, + 378, + 120, + 423, + 121, + 439, + 123, + 443, + 125, + 445, + 128, + 442, + 140, + 441, + 156, + 454, + 180, + 458, + 191, + 459, + 203, + 452, + 230, + 438, + 308, + 419, + 395, + 411, + 448, + 407, + 461, + 406, + 477, + 404, + 480, + 317, + 483 + ] + ], + "image_id": "125", + "id": 330 + }, + { + "area": 19360, + "iscrowd": 0, + "bbox": [ + 111, + 206, + 109, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 131, + 378, + 129, + 376, + 128, + 370, + 116, + 250, + 121, + 239, + 121, + 236, + 124, + 232, + 122, + 224, + 128, + 218, + 154, + 212, + 177, + 212, + 199, + 217, + 205, + 221, + 204, + 229, + 213, + 244, + 214, + 250, + 215, + 345, + 131, + 378 + ] + ], + "image_id": "126", + "id": 331 + }, + { + "area": 99470, + "iscrowd": 0, + "bbox": [ + 102, + 285, + 342, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 195, + 568, + 190, + 566, + 118, + 491, + 114, + 453, + 110, + 438, + 107, + 398, + 105, + 395, + 106, + 390, + 115, + 384, + 125, + 382, + 132, + 378, + 151, + 372, + 166, + 365, + 172, + 364, + 191, + 355, + 210, + 349, + 247, + 333, + 265, + 327, + 274, + 322, + 290, + 317, + 344, + 295, + 352, + 295, + 357, + 297, + 394, + 303, + 405, + 303, + 410, + 299, + 416, + 299, + 415, + 310, + 432, + 326, + 429, + 332, + 429, + 338, + 434, + 343, + 437, + 349, + 439, + 364, + 438, + 369, + 432, + 379, + 420, + 381, + 418, + 385, + 413, + 416, + 379, + 441, + 290, + 501, + 262, + 522, + 203, + 561, + 195, + 568 + ] + ], + "image_id": "126", + "id": 332 + }, + { + "area": 40200, + "iscrowd": 0, + "bbox": [ + 103, + 300, + 149, + 267 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 178, + 559, + 160, + 557, + 147, + 552, + 136, + 542, + 128, + 529, + 125, + 520, + 123, + 504, + 123, + 489, + 109, + 361, + 111, + 354, + 113, + 353, + 117, + 343, + 120, + 340, + 117, + 331, + 118, + 327, + 127, + 317, + 145, + 309, + 150, + 309, + 156, + 306, + 169, + 304, + 188, + 304, + 206, + 306, + 217, + 311, + 220, + 311, + 226, + 315, + 234, + 324, + 233, + 333, + 240, + 341, + 245, + 351, + 246, + 515, + 240, + 528, + 225, + 544, + 218, + 547, + 217, + 549, + 201, + 554, + 199, + 556, + 178, + 559 + ] + ], + "image_id": "127", + "id": 333 + }, + { + "area": 67968, + "iscrowd": 0, + "bbox": [ + 229, + 71, + 176, + 383 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 290, + 448, + 288, + 448, + 271, + 433, + 246, + 408, + 245, + 349, + 243, + 344, + 237, + 337, + 242, + 139, + 260, + 121, + 277, + 108, + 278, + 86, + 282, + 78, + 284, + 77, + 362, + 81, + 366, + 83, + 369, + 88, + 367, + 94, + 367, + 105, + 376, + 114, + 376, + 118, + 383, + 123, + 397, + 136, + 397, + 138, + 403, + 146, + 403, + 155, + 395, + 212, + 377, + 323, + 377, + 333, + 371, + 364, + 371, + 373, + 366, + 402, + 366, + 415, + 363, + 419, + 337, + 428, + 326, + 434, + 314, + 437, + 305, + 441, + 304, + 443, + 295, + 445, + 294, + 447, + 290, + 448 + ] + ], + "image_id": "127", + "id": 334 + }, + { + "area": 14151, + "iscrowd": 0, + "bbox": [ + 134, + 257, + 88, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [ + [ + 180, + 411, + 169, + 411, + 164, + 409, + 153, + 403, + 146, + 395, + 144, + 383, + 143, + 342, + 138, + 296, + 139, + 285, + 144, + 277, + 144, + 267, + 149, + 263, + 175, + 259, + 189, + 260, + 206, + 264, + 210, + 267, + 209, + 274, + 217, + 286, + 219, + 391, + 213, + 399, + 206, + 404, + 180, + 411 + ] + ], + "image_id": "128", + "id": 335 + }, + { + "area": 70485, + "iscrowd": 0, + "bbox": [ + 244, + 139, + 184, + 380 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [ + [ + 308, + 514, + 250, + 458, + 255, + 356, + 255, + 307, + 259, + 246, + 259, + 202, + 268, + 192, + 296, + 171, + 297, + 150, + 301, + 143, + 304, + 141, + 380, + 143, + 384, + 145, + 387, + 148, + 386, + 168, + 393, + 175, + 396, + 182, + 405, + 188, + 417, + 200, + 424, + 213, + 419, + 236, + 414, + 277, + 394, + 406, + 391, + 435, + 386, + 460, + 386, + 474, + 385, + 479, + 382, + 480, + 381, + 482, + 350, + 494, + 308, + 514 + ] + ], + "image_id": "128", + "id": 336 + } + ], + "categories": [ + { + "supercategory": "none", + "id": 1, + "name": "can" + }, + { + "supercategory": "none", + "id": 2, + "name": "carton" + }, + { + "supercategory": "none", + "id": 3, + "name": "milk_bottle" + }, + { + "supercategory": "none", + "id": 4, + "name": "water_bottle" + } + ] +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco_rle.json b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco_rle.json new file mode 100644 index 0000000000..32ff65fb10 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-instance-segmentation/odFridgeObjectsMask_coco_rle.json @@ -0,0 +1,7853 @@ +{ + "images": [ + { + "file_name": "1.jpg", + "height": 666, + "width": 499, + "id": "1" + }, + { + "file_name": "2.jpg", + "height": 666, + "width": 499, + "id": "2" + }, + { + "file_name": "3.jpg", + "height": 666, + "width": 499, + "id": "3" + }, + { + "file_name": "4.jpg", + "height": 666, + "width": 499, + "id": "4" + }, + { + "file_name": "5.jpg", + "height": 666, + "width": 499, + "id": "5" + }, + { + "file_name": "6.jpg", + "height": 666, + "width": 499, + "id": "6" + }, + { + "file_name": "7.jpg", + "height": 666, + "width": 499, + "id": "7" + }, + { + "file_name": "8.jpg", + "height": 666, + "width": 499, + "id": "8" + }, + { + "file_name": "9.jpg", + "height": 666, + "width": 499, + "id": "9" + }, + { + "file_name": "10.jpg", + "height": 666, + "width": 499, + "id": "10" + }, + { + "file_name": "11.jpg", + "height": 666, + "width": 499, + "id": "11" + }, + { + "file_name": "12.jpg", + "height": 666, + "width": 499, + "id": "12" + }, + { + "file_name": "13.jpg", + "height": 666, + "width": 499, + "id": "13" + }, + { + "file_name": "14.jpg", + "height": 666, + "width": 499, + "id": "14" + }, + { + "file_name": "15.jpg", + "height": 666, + "width": 499, + "id": "15" + }, + { + "file_name": "16.jpg", + "height": 666, + "width": 499, + "id": "16" + }, + { + "file_name": "17.jpg", + "height": 666, + "width": 499, + "id": "17" + }, + { + "file_name": "18.jpg", + "height": 666, + "width": 499, + "id": "18" + }, + { + "file_name": "19.jpg", + "height": 666, + "width": 499, + "id": "19" + }, + { + "file_name": "20.jpg", + "height": 666, + "width": 499, + "id": "20" + }, + { + "file_name": "21.jpg", + "height": 666, + "width": 499, + "id": "21" + }, + { + "file_name": "22.jpg", + "height": 666, + "width": 499, + "id": "22" + }, + { + "file_name": "23.jpg", + "height": 666, + "width": 499, + "id": "23" + }, + { + "file_name": "24.jpg", + "height": 666, + "width": 499, + "id": "24" + }, + { + "file_name": "25.jpg", + "height": 666, + "width": 499, + "id": "25" + }, + { + "file_name": "26.jpg", + "height": 666, + "width": 499, + "id": "26" + }, + { + "file_name": "27.jpg", + "height": 666, + "width": 499, + "id": "27" + }, + { + "file_name": "28.jpg", + "height": 666, + "width": 499, + "id": "28" + }, + { + "file_name": "29.jpg", + "height": 666, + "width": 499, + "id": "29" + }, + { + "file_name": "30.jpg", + "height": 666, + "width": 499, + "id": "30" + }, + { + "file_name": "31.jpg", + "height": 666, + "width": 499, + "id": "31" + }, + { + "file_name": "32.jpg", + "height": 666, + "width": 499, + "id": "32" + }, + { + "file_name": "33.jpg", + "height": 666, + "width": 499, + "id": "33" + }, + { + "file_name": "34.jpg", + "height": 666, + "width": 499, + "id": "34" + }, + { + "file_name": "35.jpg", + "height": 666, + "width": 499, + "id": "35" + }, + { + "file_name": "36.jpg", + "height": 666, + "width": 499, + "id": "36" + }, + { + "file_name": "37.jpg", + "height": 666, + "width": 499, + "id": "37" + }, + { + "file_name": "38.jpg", + "height": 666, + "width": 499, + "id": "38" + }, + { + "file_name": "39.jpg", + "height": 666, + "width": 499, + "id": "39" + }, + { + "file_name": "40.jpg", + "height": 666, + "width": 499, + "id": "40" + }, + { + "file_name": "41.jpg", + "height": 666, + "width": 499, + "id": "41" + }, + { + "file_name": "42.jpg", + "height": 666, + "width": 499, + "id": "42" + }, + { + "file_name": "43.jpg", + "height": 666, + "width": 499, + "id": "43" + }, + { + "file_name": "44.jpg", + "height": 666, + "width": 499, + "id": "44" + }, + { + "file_name": "45.jpg", + "height": 666, + "width": 499, + "id": "45" + }, + { + "file_name": "46.jpg", + "height": 666, + "width": 499, + "id": "46" + }, + { + "file_name": "47.jpg", + "height": 666, + "width": 499, + "id": "47" + }, + { + "file_name": "48.jpg", + "height": 666, + "width": 499, + "id": "48" + }, + { + "file_name": "49.jpg", + "height": 666, + "width": 499, + "id": "49" + }, + { + "file_name": "50.jpg", + "height": 666, + "width": 499, + "id": "50" + }, + { + "file_name": "51.jpg", + "height": 666, + "width": 499, + "id": "51" + }, + { + "file_name": "52.jpg", + "height": 666, + "width": 499, + "id": "52" + }, + { + "file_name": "53.jpg", + "height": 666, + "width": 499, + "id": "53" + }, + { + "file_name": "54.jpg", + "height": 666, + "width": 499, + "id": "54" + }, + { + "file_name": "55.jpg", + "height": 666, + "width": 499, + "id": "55" + }, + { + "file_name": "56.jpg", + "height": 666, + "width": 499, + "id": "56" + }, + { + "file_name": "57.jpg", + "height": 666, + "width": 499, + "id": "57" + }, + { + "file_name": "58.jpg", + "height": 666, + "width": 499, + "id": "58" + }, + { + "file_name": "59.jpg", + "height": 666, + "width": 499, + "id": "59" + }, + { + "file_name": "60.jpg", + "height": 666, + "width": 499, + "id": "60" + }, + { + "file_name": "61.jpg", + "height": 666, + "width": 499, + "id": "61" + }, + { + "file_name": "62.jpg", + "height": 666, + "width": 499, + "id": "62" + }, + { + "file_name": "63.jpg", + "height": 666, + "width": 499, + "id": "63" + }, + { + "file_name": "64.jpg", + "height": 666, + "width": 499, + "id": "64" + }, + { + "file_name": "65.jpg", + "height": 666, + "width": 499, + "id": "65" + }, + { + "file_name": "66.jpg", + "height": 666, + "width": 499, + "id": "66" + }, + { + "file_name": "67.jpg", + "height": 666, + "width": 499, + "id": "67" + }, + { + "file_name": "68.jpg", + "height": 666, + "width": 499, + "id": "68" + }, + { + "file_name": "69.jpg", + "height": 666, + "width": 499, + "id": "69" + }, + { + "file_name": "70.jpg", + "height": 666, + "width": 499, + "id": "70" + }, + { + "file_name": "71.jpg", + "height": 666, + "width": 499, + "id": "71" + }, + { + "file_name": "72.jpg", + "height": 666, + "width": 499, + "id": "72" + }, + { + "file_name": "73.jpg", + "height": 666, + "width": 499, + "id": "73" + }, + { + "file_name": "74.jpg", + "height": 666, + "width": 499, + "id": "74" + }, + { + "file_name": "75.jpg", + "height": 666, + "width": 499, + "id": "75" + }, + { + "file_name": "76.jpg", + "height": 666, + "width": 499, + "id": "76" + }, + { + "file_name": "77.jpg", + "height": 666, + "width": 499, + "id": "77" + }, + { + "file_name": "78.jpg", + "height": 666, + "width": 499, + "id": "78" + }, + { + "file_name": "79.jpg", + "height": 666, + "width": 499, + "id": "79" + }, + { + "file_name": "80.jpg", + "height": 666, + "width": 499, + "id": "80" + }, + { + "file_name": "81.jpg", + "height": 666, + "width": 499, + "id": "81" + }, + { + "file_name": "82.jpg", + "height": 666, + "width": 499, + "id": "82" + }, + { + "file_name": "83.jpg", + "height": 666, + "width": 499, + "id": "83" + }, + { + "file_name": "84.jpg", + "height": 666, + "width": 499, + "id": "84" + }, + { + "file_name": "85.jpg", + "height": 666, + "width": 499, + "id": "85" + }, + { + "file_name": "86.jpg", + "height": 666, + "width": 499, + "id": "86" + }, + { + "file_name": "87.jpg", + "height": 666, + "width": 499, + "id": "87" + }, + { + "file_name": "88.jpg", + "height": 666, + "width": 499, + "id": "88" + }, + { + "file_name": "89.jpg", + "height": 666, + "width": 499, + "id": "89" + }, + { + "file_name": "90.jpg", + "height": 666, + "width": 499, + "id": "90" + }, + { + "file_name": "91.jpg", + "height": 666, + "width": 499, + "id": "91" + }, + { + "file_name": "92.jpg", + "height": 666, + "width": 499, + "id": "92" + }, + { + "file_name": "93.jpg", + "height": 666, + "width": 499, + "id": "93" + }, + { + "file_name": "94.jpg", + "height": 666, + "width": 499, + "id": "94" + }, + { + "file_name": "95.jpg", + "height": 666, + "width": 499, + "id": "95" + }, + { + "file_name": "96.jpg", + "height": 666, + "width": 499, + "id": "96" + }, + { + "file_name": "97.jpg", + "height": 666, + "width": 499, + "id": "97" + }, + { + "file_name": "98.jpg", + "height": 666, + "width": 499, + "id": "98" + }, + { + "file_name": "99.jpg", + "height": 666, + "width": 499, + "id": "99" + }, + { + "file_name": "100.jpg", + "height": 666, + "width": 499, + "id": "100" + }, + { + "file_name": "101.jpg", + "height": 666, + "width": 499, + "id": "101" + }, + { + "file_name": "102.jpg", + "height": 666, + "width": 499, + "id": "102" + }, + { + "file_name": "103.jpg", + "height": 666, + "width": 499, + "id": "103" + }, + { + "file_name": "104.jpg", + "height": 666, + "width": 499, + "id": "104" + }, + { + "file_name": "105.jpg", + "height": 666, + "width": 499, + "id": "105" + }, + { + "file_name": "106.jpg", + "height": 666, + "width": 499, + "id": "106" + }, + { + "file_name": "107.jpg", + "height": 666, + "width": 499, + "id": "107" + }, + { + "file_name": "108.jpg", + "height": 666, + "width": 499, + "id": "108" + }, + { + "file_name": "109.jpg", + "height": 666, + "width": 499, + "id": "109" + }, + { + "file_name": "110.jpg", + "height": 666, + "width": 499, + "id": "110" + }, + { + "file_name": "111.jpg", + "height": 666, + "width": 499, + "id": "111" + }, + { + "file_name": "112.jpg", + "height": 666, + "width": 499, + "id": "112" + }, + { + "file_name": "113.jpg", + "height": 666, + "width": 499, + "id": "113" + }, + { + "file_name": "114.jpg", + "height": 666, + "width": 499, + "id": "114" + }, + { + "file_name": "115.jpg", + "height": 666, + "width": 499, + "id": "115" + }, + { + "file_name": "116.jpg", + "height": 666, + "width": 499, + "id": "116" + }, + { + "file_name": "117.jpg", + "height": 666, + "width": 499, + "id": "117" + }, + { + "file_name": "118.jpg", + "height": 666, + "width": 499, + "id": "118" + }, + { + "file_name": "119.jpg", + "height": 666, + "width": 499, + "id": "119" + }, + { + "file_name": "120.jpg", + "height": 666, + "width": 499, + "id": "120" + }, + { + "file_name": "121.jpg", + "height": 666, + "width": 499, + "id": "121" + }, + { + "file_name": "122.jpg", + "height": 666, + "width": 499, + "id": "122" + }, + { + "file_name": "123.jpg", + "height": 666, + "width": 499, + "id": "123" + }, + { + "file_name": "124.jpg", + "height": 666, + "width": 499, + "id": "124" + }, + { + "file_name": "125.jpg", + "height": 666, + "width": 499, + "id": "125" + }, + { + "file_name": "126.jpg", + "height": 666, + "width": 499, + "id": "126" + }, + { + "file_name": "127.jpg", + "height": 666, + "width": 499, + "id": "127" + }, + { + "file_name": "128.jpg", + "height": 666, + "width": 499, + "id": "128" + } + ], + "type": "instances", + "annotations": [ + { + "area": 46766, + "iscrowd": 0, + "bbox": [ + 100, + 173, + 133, + 348 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "oaR25dd08H8Fb0^Oj0VOb0^O;E;kNk1POS1mN=D=D;En0ROj0VO3M2N3M2N3M2N3M2N3M2N3M2N3M2N3M2N3M2N3M1O1O1O00O1000000O1000000O10000O1000000O1000000O1000000O100000000000000O100O2O0O10000000000O1000000000000O10000O10000O10001N1000000O10000O10000O1000001O0O2O1O=C>B1N3N2N1O2N2N1N3N2N1O2M2N3N2M4`J_5mNT1lNlT\\5" + }, + "image_id": "1", + "id": 1 + }, + { + "area": 32918, + "iscrowd": 0, + "bbox": [ + 247, + 192, + 108, + 301 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PcQ5;Zd0?j]O9a>LUA\\1i=iNPB^1l=gNnA^1m=jNkA[1Q>j2M3L4M2M3N2N2bNlIRDV6m;nIoCT6o;QJkCR6S>\\AWOo>c0XAQOS?h0d2K5L5J8I7I]Pn2" + }, + "image_id": "2", + "id": 2 + }, + { + "area": 28500, + "iscrowd": 0, + "bbox": [ + 259, + 231, + 124, + 227 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lhZ5W1Xa0\\2gNZ1K4N3L4M2N3L3N3M2M3N2N1D=N2N1O2O1N1O2O1O0O2O1O001O1N10001O000O10001O000O101O0000001O000000001O00000000000000000000000000O10000O10000O10000O10000O101O0O10000O101O0O10000O101O0O1O100O1O2O0O1O1O1O1O2N1O1O1O2N1N3G8A`0CH7J6I7J7H7E;M3_Ob0J5I6G9H8GX`^1" + }, + "image_id": "8", + "id": 8 + }, + { + "area": 41538, + "iscrowd": 0, + "bbox": [ + 80, + 157, + 128, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "d_e17bd0>Be1[N6J6K9G=C:F7I7I7I7I?Af0ZOg0YO`0@:F9G:F8H7I6J7I6J7I7I;E9G1O000000000000000000O1000000000000O2O000000000O10000000001O0O10000000000O1000000000000O10000000000O1000O10000000O10000000000O1000000000000O10001O00001O0O101O1mFVET8i;O3M5J5L5K4L5K3M1OS2lMa2`Mj0VOj0UOk0UOh]o5" + }, + "image_id": "9", + "id": 9 + }, + { + "area": 23520, + "iscrowd": 0, + "bbox": [ + 299, + 220, + 95, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "[UT6m0ob0o0L5J5nM[Nj@j1R?\\Nf@i1V?^Nc@g1X?Q2K4L4M3N2N1O2N1O2N2M2nNkJ]BX5a=kJ[BX5c=lJYBU5f=nJVBT5i=P1N1L4G9L5N1O1O1O101O0O10001O0O100000000O100000000000000001O0000000O100000000O100O1O100O2O0O100O1O100O1O2N1N3N1N3N1aJYBd3o=ULYB]3T>aLoAQ3P?[LSAZ3W?cLm@a19eNP?Hj@_1`0\\Nl>3h@\\1Pa0_NS_OZ1[b0J6M4K7J6AidT2" + }, + "image_id": "9", + "id": 10 + }, + { + "area": 44278, + "iscrowd": 0, + "bbox": [ + 86, + 102, + 130, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bdj1=[d0k0Z\\OUOja0X2E:F:G9G9F:G9G9G9G>Bb0^Ob0^Ob0^O=C9G9G9G9G9H8G9G9G9G6J3M1O1O1O000000O100000000O10000000000O101O00000O10000000000O100000000O10000H8F:K5L4L4K5L4M4N1O1N2O1O1O1O1O100O1000000000000000000000000000001O0000000000000000000000001O1O1O1O1UHSDg6U=K5K5K4L2N3M2NbTk5" + }, + "image_id": "10", + "id": 11 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 150, + 377, + 295, + 113 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "TYS3>Qd0d0@:I7I7I5L4K6F9M3M2O2N1O1O2N100O1O1O10000000000000000000001O0000000000001O000000000010O00000000000000000000000000001O0000000000000000000001O000001O0001O000000000000000000000001N10000000000000001O0000000O2O000O2O001O001O001O000000001O0000000000001O000000000000000000000001O000000001O000000001O000000001O0000000O2O00001N101O1O0O2O000000000000000000001O000000000001O0000001O0O10001N10001O0O10001O0O101O1N101O1N1O2O1N1O2O1N1O2O1N2O001N2O0O2O1N10001N10001O0000000000000000000001O0O2O1N1O2O0O2O0O2O1O0O2O00000001O001N2O1N2M3N2N2N10000000000000001O0001O000000000001O001N1N3N2M3M4L5L6G?^OPPT1" + }, + "image_id": "10", + "id": 12 + }, + { + "area": 56518, + "iscrowd": 0, + "bbox": [ + 56, + 148, + 153, + 366 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "`YU15Yb0k0j^OARa0W2L6J7J6J7H7J6J6J6I7J7I6J6J6J6J6J7I6J7I7I8H8H7I8H7I8H7I6J6J7I6J6J6J7I6J6J6J6J7I6J`0@1O1O00000000000000000000O1000000O100000000O1000000O100000000000000O100000000000000000000O100000000000000O1000000O10000O1000000O1000000O1000000000000O10000000001O1O1O1Oh0XOj0UO6K5K4L2N2N2N2Ni0WOQ1oNa0_Oa0^Oc0^Oa0_Oa0_O;E3M3M;Dm1TN5Jb0^OZ^m5" + }, + "image_id": "11", + "id": 13 + }, + { + "area": 39406, + "iscrowd": 0, + "bbox": [ + 328, + 180, + 121, + 322 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Xfg6=jc0l0UOk0^M_2E8H8H7K6K5L3L3M3M3N3L3N2N2N1O2N1O1O2N1O001O0O2M2O2L5J6J9G7I6J6J6J6L3VOnGiDV8j:WHSEk7l:R1O2N1O10000O10000000O1O1O1O1N2O1O1O1O1001O2N1O1O1O001O1O000000000000O100O1O100O1O1O1O1N2O2N1N2O1O1L5M2O1N2M3M4UHYD_6i;`IYD^6h;aImDi5V;UJaES5b:fJiET5Z:_JTFY5jC?H:FTlP1" + }, + "image_id": "11", + "id": 14 + }, + { + "area": 53067, + "iscrowd": 0, + "bbox": [ + 51, + 107, + 146, + 360 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "dbR1`2Wb09I7I7I7J6J5K6J6J6J6J6J6J6J6J7I8H7I7I7I7I7I7I7I7I7I7I7I7I7I7I7I7I7J6I7I7I7I6J7I6J4LO1M3M3O1O1O1ZOWFZFj9c9[F[Fe9b9_F]Fa9c9`F[Fa9d9aF[F_9d9cF[F]9d9eFZF\\9e9fFZFZ9e9n0O1O1O1O1O1O1O1O1O10000O10000O10000O1000000O10000O1000000000000000001O00000000000000000000000000000000000000000O10000000000000001O1O1O1iGbDP7_;^HUE_7VFLZb0In]OU1oa0nNP^OR1oa0POo]OR1oa0QOo]OP1oa0ROP^Oo0oa0ROo]Oo0Pb0o0N2N2N1O1O1O2N100O1O10001N1000000O2O000O10001O0O101O000O2O00001O00001O000000000000000000000000000000000000000000001O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O000000000000000001O00000000000000000000000000000000000000000000000000000000000000000001O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O000000000000000001O000000000000001O00001O000O2O0O101N101N101O1O001N1O2O1N101N2N2O1N2N1O2N2N2O1N2N1O1O2O0O1O2N1O101O000O2O000000001N1000000000000O2O00000000001O00001O00001O000O1000000000001O0000000000000O2O0O2O0O2O0O10O1O1O101O1O1O00001O00000000000000000000000000O100000001O1O001O001O1N2N3L5L3L5L6Jghn0" + }, + "image_id": "12", + "id": 16 + }, + { + "area": 50410, + "iscrowd": 0, + "bbox": [ + 89, + 121, + 141, + 354 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mYk17bd0>^\\O5Za0i1L6K7I7I8H7I7I8G8I9G9G:F9G:F9G:F9G:F:F9G:F9G9G7I8H7I8H8H7I8H7I8H5K2N1O0000000000O10000000000O10000000000O10000000000O10000000001O0O10000000000O10000000000O10000000000O10000000000O10000000000O10000000000O1000000000000O10000000001N2O1O1TFQFk8P;O1O3L=D3M3M3M3M2Nb2^Mh0XOi0WOm1SNh1WNoMf@>>h1h>WN\\@4i0i1g>TOUAR1g>TORAQ19RNfoc0a0J6J5K4L4YNcNk_Oa1R`0fNf_O^1W`0dNf_O`1`0dNb=NkAd1BCZ>lNPBT4odKiAY4X>eKlAW4V>gKmAW4T>gKnAX4S>fKoAX4\\?N1O2M2O2N1N2O2N1N3N3YMX@6k?FY@6k?EZ@8S`0VOU@f0bb0^Oaja5" + }, + "image_id": "16", + "id": 23 + }, + { + "area": 38420, + "iscrowd": 0, + "bbox": [ + 127, + 379, + 225, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "R[d28]d0:J7I7I6J7J4L3M3L4M2N3M3L4L3L3N3M3L4M2M4M3M3M2N3N1N3N1N2O1O1N2O1N100O10O010O0O2O010000O101N10000O10000O10001N1000000O10000O101O000O1000O010O1O010O100O010O10O01O10O0100O10O01000O01000O01000O01000O0100O01000O010O10O01000O0100O010O10O0100O010O10O10O10O0100O010O10O01000O0100O010O10O0100O01000O010O10O0100O010O010O10O10O010O010O010O10O010000O100O2O0O100O101N101O1N101N101N2O1N2O1N2O1N2O1O1N101N2O1N2O1N2O1N2O1O1N2O0O3M2N3M2N3M3M2N3L5K5I7I7_OdiQ3" + }, + "image_id": "16", + "id": 24 + }, + { + "area": 43400, + "iscrowd": 0, + "bbox": [ + 95, + 156, + 123, + 349 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "U\\o1a0kc0e0F:G9G=Bb0_O`0A`0@;E7I7I8H7IY5L4M3M?A5K6J5K6J6I6K4L1N2O2N1N2O1O001O1O001O001O001O1O0000001O000000001O000000001O0000000000O2O0000001O0O2O1O001O3M5J6K5K3L2O1nNZCmIh<7PCk4:lJh<6RCk48mJh<4UC^4FYK?3h<3WCV4MaK64g<3YCV4h0eKU=X4mBfKU=X4h1N2N2O2N1N2O1O1O2N2M3N2N2N2N2eM[_O=M3M3N2N2N2O000O2O0O2O0O2O001N10001O0O2O001O001O000O2O001O0000000O1000000000001O00000000000000000000O101N10000000000O2O00000000000O2O0O100O2O0O101O0O101N1O1O2N1O2N1O1O2N1O1O2L3N3I7F9F;F:E:G:F:H8mLf^O]2ea0\\M_^O\\2Ub0G8H9G8H9G9G8Hjkj1" + }, + "image_id": "19", + "id": 30 + }, + { + "area": 68482, + "iscrowd": 0, + "bbox": [ + 74, + 358, + 352, + 193 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "i_b17mc0Le\\O8Uc0Li\\O8Qc0Ml\\O5Pc00m\\O3nb02o\\O0ob02o\\O0ob03m\\O0Qc0n0O1O2M2O1O1O1N2O1O001EoMj]OR2Rb0UNk]Ol1Tb0=O2N1O2N2N1O2O001N101O1N2O1O1N2O001O1O00001O00001O001O00001O001O00001O01O01O001O00001O00001O001O00001O001O000010O01O010O001O01O01O010O001O01O01O010O001O01O01O010O001O01O01O010O001O01O01O0010O01O010O000010O01O010O000010O01O010O000010O01O01O01O00010O00010O000010O00010O0000010O01O100O1O0001O00010O0001O010O00010O001O01O01O01O0001O01O00001O01O01O001O01O01O001O0O1000000O101O001O0O2O1O0O2O0O101N100O101N100O2O1N101O1O001O1O001O10O01O1O1O1O1O1O1O2O1N2N1O2O1N2N1O100O1O10O01O1O100O1O0010O01O00010O0010O01O0010O0001O001O001O001O000010O01O001O001O001O10O2O1O0O10O00100O00100O0010O0100O00O2N1O1010O0010O001O00001O01O010O0O2N1O2N1O2L3L4N3M2N2N2M3M4K4L4M4E;L4Lln`1" + }, + "image_id": "20", + "id": 31 + }, + { + "area": 24600, + "iscrowd": 0, + "bbox": [ + 324, + 247, + 119, + 204 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "jhc69Qd0c0^Oa0^Ob0aN^1F:E;F:I7M3M3M3N2N2N2N2N1O2I6J7N2N101N2O0O2O0O2O1O0O2O1O000O2O0000001N1000000O2O0000001O0000000000000000000000000000O10000000000O10001O0O101O0O101O0O10000O1O100O2N1O1O1O1O1O2N1O1O2M2O2K4K5J7J5K6I7J5K6F:DTN_]O_1bb0ZNe]Oe1ib0O1aNT]On0]c0O000O1N2O1H9@j`a3" + }, + "image_id": "22", + "id": 35 + }, + { + "area": 31647, + "iscrowd": 0, + "bbox": [ + 314, + 258, + 136, + 230 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Xc^6:nc0c0]Od0\\Od0\\Od0\\Oc0]Od0\\Oc0E;L4L4M3N2N2M2O2N2M3N2N2N2A>O2N2O1N2N2O1N101O001N10001O00001N10001O000O2O0000001O0O10000000000O100000001O000000000001O0000000O100O10000O100O10000O2O00000O100000000O2O000O2O0O1O2O0O1O2N1O1O1O2N1N2M4M2L4J7I6J6J7I6J6J7I6J6K6I7I7I7I7XM[^OS2la0hMZ^OP2la0lMY^Ol1_b0G9G:G:E:H9JQlP1" + }, + "image_id": "22", + "id": 36 + }, + { + "area": 51379, + "iscrowd": 0, + "bbox": [ + 49, + 282, + 268, + 190 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "WUR16ad07K4M4L4K5L5K5J6K5K5J7J5K5J6K3M1N2O1N2O1O1N2O1O1N2O1O1N2O001N2O1O1N2O1O1N2O1N2O1O1O1N2O002M2O1O1N3N1O1O1N3N1O1N2O1O0O2O00O1O00100O00100O010O100O010O10O0100O010O100O01000O010O10O0100O10O0100O010O10O0100O010O10O0100O010O10O10O10O0100O010O10O0100O010O10O01O10O010O0100O010O10O01O10O0100O010O10O0100O00100O010O10O0100O010O10O010O0100O010O10O0100O010O10O0100O010O10O01000O0100O010O10O0100O010O010O100O101N100O100O101N100O100O101N100O100O101N100O100O101N10000O100O100O100O100O100O010O10O0100O001O1L4ZOf000ZN\\]OV1eb0gN^]OX1]c0E1O00001O1N2O2M2N3L;EQPh3" + }, + "image_id": "23", + "id": 37 + }, + { + "area": 37260, + "iscrowd": 0, + "bbox": [ + 255, + 328, + 206, + 179 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lWX55cd09G7I4L3N3M3M3M2O2M3M2M3L4L4M3N2N2N2N2O1N2N2N2O001O0O2O001O0000000O10000H8M3N1N3N101O1N101O0O1000001O1O1O100O1O00100O1O1O100O1O0100O001O1O001O1O1N1M4M3N11000000O10000O100O1O1O1O1O1N2O001O1O1O1N101O1O1O0O110O001O001O01O10O0100O01O00010O0001O0O101O0O101N100O101O0O101N10001O001O001O10O01O1O010O10000O010O100O10001N1O100O1O1O1O2N1O1O1O1O2N1O2O0O2N1O2N1O2N1O2N1O2N2N2O1N2N2N1O3M2N2N2N3M2N2N2N3L5K5L4H7ETZj0" + }, + "image_id": "23", + "id": 38 + }, + { + "area": 45108, + "iscrowd": 0, + "bbox": [ + 142, + 156, + 125, + 357 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PXo2i0kc0;G9I:F=C=C=D`0_Og0YO`0@:G9G9G9G9G7I4K5L3K4nLeI`G`6^8PJoFU6n8mIfE`7X:aHbEe7]:\\H]Ek7`:Y1O1O1N2O1O1N2O1O1O1O00O10000O1000000O1001O1O1N3N1O1O1O1O1O1O000000000000000000000001O0O1O1O1N2O1O1O2K4M3001O1O100OgFdEU8[:jGgEV8Y:hGkEV8\\:aGjE[8d:UGbEf8^;K5K7I8H9G5J4M3L4L2N2N3M2N2N3M2M3M4L3N3L3J6M4K5L4L4L4K5L4L6\\MnXi4" + }, + "image_id": "24", + "id": 39 + }, + { + "area": 28785, + "iscrowd": 0, + "bbox": [ + 241, + 187, + 100, + 284 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bkR53fd03M2fNOh]O3Ub00i]O2Ub00h]O4Ub0Ni]O5Ub0Lg]O9Vb0Jf]O:Wb0Jc]O;oa0`1B>M3NU5jJ2N101N2O001O001N101O1O000000000O100000001O00000000000000000000O101O00000O1000000O100000000O10001N1O101N100O2N1O101N1O2aI`Ca4bgL\\A7i>AcAHQ?OWAoNl?i0X2J6I7J6JohW3" + }, + "image_id": "24", + "id": 40 + }, + { + "area": 36652, + "iscrowd": 0, + "bbox": [ + 101, + 171, + 118, + 307 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "iXS2>oc0`0J7J5RNnNk_OX1R`0iNk_O[1R`0gNj_O]1T`0eNi_O_1T`0cNj_Oa1R`0aNk_Oe1W?QNZ@=eMTBP2R>gMXBS2P>aMYBZ2o=ZMYBb2S`0K5K5Knoh5" + }, + "image_id": "25", + "id": 41 + }, + { + "area": 24080, + "iscrowd": 0, + "bbox": [ + 209, + 363, + 214, + 111 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "YmZ4n0hc0S1mN8H6L3N101O1N2N2M3N3L3N2N2O0O100O1000000000000000000000000000000000000000000000000000000000000000001O0000000000000000000000000000000000000000000000000000000000000000000000000000000001O00000000000000000000000000000000000000000000000000000000000001O000000000000000000000000000000000000000000000000000000000000000000000000000000000000O2O00001O1O1O1O0O2N100O2N2N101N2N2O0O1O10000O01O1000O2O1O1O1N3N1N3L3N4K7I7J7_Od0D\\ob1" + }, + "image_id": "25", + "id": 42 + }, + { + "area": 21721, + "iscrowd": 0, + "bbox": [ + 10, + 383, + 202, + 106 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "k`9g0lc0:I7J:F5L3L5K5M2N2N2N2N2O000000O101O000001O0O2N2N101N1O2O1N1O2N101N2N1000000O100000000O100000000000O1000000000000000000000000O100000000000000000O100000O1000000000000000000000000O1000000000000000000000000O10000000000000000000000O1000000000000000000000O100000000000000000000000000000000000000000000000000000000O1000O10000000O1000000000000000O100000001O1O1N1O2M3N2N1N3N2N2N2N=Dg0YOg0XOa]o5" + }, + "image_id": "26", + "id": 43 + }, + { + "area": 25662, + "iscrowd": 0, + "bbox": [ + 221, + 351, + 272, + 93 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Y]a4;nc0K\\\\O77K^b06W]O204eb0NW]Ok0fb0f0N2N2O1N2O0O2O000O2O0O10001N10001O000O101O00001N10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001N10001N10001N101O000O2O001N10001N1O2N2N2O1N2N2N2N101N1O2N1O101O0O10001O000O10001O000O1000001O0000000O2O0000000000000000000O1000001O1O0O1O1001N1O2O001O00000000000000000000O1000000000000000001O1N2N2N3M3M4J5K6J\\j4" + }, + "image_id": "26", + "id": 44 + }, + { + "area": 39390, + "iscrowd": 0, + "bbox": [ + 35, + 207, + 129, + 302 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "W\\h09Xd0:L5nM@d_Of0W`0\\Ob_OQ1V`0QOg_OU1T`0nNi_OT1U`0nNh_OU1]?gNi_O6g0W1]?E_@>_?D_@?_?B^@c0^?@]@f0`?[O\\@k0`?[2Mk0TOk0VO3L4M4L6J5J7J6J6J5K6I7J4L1O2N1N2O2N1O2N1O1O1O001O001O001O000000001O001O1O0000000000000000000001O00001O001O000O2O001O0O2O1O2N3L`0A3M1O1O0O1bH`Cb6a<[IjC\\6VZM\\A_2j>XM`Aa2f>VMaAf2[`0N4L4L5K5K4L5K;Da0^Oc0^Oa0_Ooel6" + }, + "image_id": "27", + "id": 45 + }, + { + "area": 39440, + "iscrowd": 0, + "bbox": [ + 191, + 168, + 115, + 339 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Zjm3A?D;H8G9G8I8J6N1O2N2N2M2O2N2N1O2M3J5L5N2N1O2N2N2O000O10001O0O2O1O001N100000000O1000000O1000001O00000000000001O00000000000O10000O101O0O10000O101O000O10001N10000O10001N1O1O1O101N1O1O2N1O1M4M2L5I7I6J7I6J7I6J7I7I6J7I7I7I7I7I6nMf]O^1ob0I8H7I8H9G9G^Wa0" + }, + "image_id": "27", + "id": 47 + }, + { + "area": 40467, + "iscrowd": 0, + "bbox": [ + 121, + 110, + 122, + 328 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "al`26ad0B>TM_^OU2ja0hMY^OT2Yb0L4EF9G7I5H8L3L5L4L4L3N1N3N1N2O2N1O101O0O100O10000O10000000000000000000000000000000000000000000000000000000000000000000000000001O00000000000001O000000000000000000000000000000000000000000000000000000000000000000000000000O100000000O10001O00000O101O00000O2O000000001N1000001O0O10001O00000O101O00000O10000000000000000000000000000000000000000000000001O0000000000000000000O2O00000O1000001N1000001N1000001O000O101O0000001O000O101O00000000000O100000001O0001O0000000000001O00000O1000001O00000O2N101N101O001O001N101N2N101N101N101N101N2O0O2N2O0O2O1N1O2N2N1O2N2O0O100O100O1000000000000000000000O100O100O100O101N100O2O00001O0O101O001O1O100O0001O001O1O1O1N2O1O1N1O1N2O1N2O1O1000000000000000000000000000001O001O1O1O1N2O0O3N2M4L3L4L5J6K7I7IZkj0" + }, + "image_id": "28", + "id": 50 + }, + { + "area": 28776, + "iscrowd": 0, + "bbox": [ + 123, + 180, + 108, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "[ba2d0Qd07J6XNXOX_Om0d`0UOY_Oo0d`0TOX_OP1e`0ROW_OS1f`0oNW_OV1o?cN__O:>W1P`0Am_Od0o?_Om_Og0n?[Oo_Ol08ZNU>]5H7J7I6I8I7H5L3M3L4M3M1O1O1N3N1O1OO1M3M3N2O1O100000000001O00000000O100O1O1O1O1O1O1O100O100O100O2O001O00001O001O001O3L8I7I5K1O1O0ZJmAe4T>RKVBl4j=SKYBk4g=SK\\Bl4e=QK_Bm4e=nJ]BQ5g>O1O1O2N1O1O1O2N2N2M3N3M2^Le@a1]?ZNk@a1a?PNd@n1Va0N3M2N3M5K`0_Ol0TOkV_5" + }, + "image_id": "29", + "id": 51 + }, + { + "area": 36270, + "iscrowd": 0, + "bbox": [ + 285, + 143, + 116, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "aYl5U2b`0W2F6L4N2M3N2N2N2O1O1N2O1N2O1O1N2O1O1N2O1O1N2O1O1M3K5K5K5L4K5kNeIfC`6PF:F;E:FRiP2" + }, + "image_id": "29", + "id": 52 + }, + { + "area": 30680, + "iscrowd": 0, + "bbox": [ + 148, + 413, + 235, + 129 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "UeR3W1\\c0;EO1N3N1O1N2O1N3M2N2N2O1N3N3L4M3L4]LU@Q2n?YMj@a2i`0N2N3M5K4L4L4L4L:F`0^O=B8KPec6" + }, + "image_id": "30", + "id": 54 + }, + { + "area": 20944, + "iscrowd": 0, + "bbox": [ + 324, + 257, + 111, + 186 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "kfe6>cc0j0^Oc0DQa0Ek^O?Ra0Ck^Oa0Ra0Ak^Oc0Sa0h1V_OPM^?[3T@lLg?Y4K4L6J8H8G6K1O2N2N1O2M2O1O001O0O2O001O00001O0000000010O000000000000001O001O001O3M7I4K2O1O1N2bJ\\Ad4e>YK^Af4c>XK_Af4c>WK`Ah4[?N1N2O1O2M2N2O2M3N2M2N3M3gLg_Ol1\\`0kMY@f1_a0N2N4L5K6J5K:F>A?AShR6" + }, + "image_id": "31", + "id": 57 + }, + { + "area": 27538, + "iscrowd": 0, + "bbox": [ + 215, + 181, + 97, + 280 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "dh\\4_NXAh1a>ZN]Aj1`>WN\\Ao1a>Y2L3L8I:F:F7I4K5L5K4L3M1O2N1O2N1O2N1O1O1N2O00001O1O1O1O1O001O1O0001O000010O0001O3M6RI_BV6h=cIZB[6W>K6J5J5H8N2N2O1N2N2N000O2O0O1N2O1O0O101O1N2O2M2M4M3L3N3N3M3M9G>B;D8H9G9G8H9F:G8F;DoZQ7" + }, + "image_id": "32", + "id": 60 + }, + { + "area": 24500, + "iscrowd": 0, + "bbox": [ + 162, + 218, + 97, + 249 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lc[3:Vd0=J6J6J6K5dNiNm^O\\1o`0fNo^O]18hNR?Nb@a1D]O`?UOi@`3m>cLo@h3f>[LWAP4l=fLQBc3f=o1J1O1O2N1N2O1N2O1N2O1N2O1O1O0O2O001O001N100000001O00000000000010O0000000000000O10001O0000001N10001N10001N2O4L7H8I3L2PJUBn4l=oJXBP5i=lJ[BR5g=kJ\\BT5e=hJ_BV5d=eJ`BY5c>N1N3M2N3M3M2N4`L[@d1j?SNh@_1]?ZNi@b1\\?WNj@e1[?TNl@a1]a0Km0SOidm4" + }, + "image_id": "32", + "id": 61 + }, + { + "area": 27776, + "iscrowd": 0, + "bbox": [ + 331, + 334, + 127, + 216 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mfi6;lc0e0[Oe0ZOf0[Oe0[Oe0[Oe0C;M3N2N2N101N2O1N2O0O2O0O101N101O000O2O001O00001N100000001O000O1000000000001O000000000001N1000000000000O100000001N10001N100O2O000O2O000O2N100O1O1O1O1O2N1O2N2N1O2M2M4M3I6G:G8K6I6K6I7J6I7J6I7J7H7dMn]Oi1Xb0QNn]Oh1fb0J6I7J7H9H8AZck0" + }, + "image_id": "32", + "id": 62 + }, + { + "area": 25250, + "iscrowd": 0, + "bbox": [ + 72, + 150, + 100, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "l[`1:Xd0?H8G9H8H8G9]MRNkAV2m=UNgAR2S>TNgAP2V>QNhAS2U>mMgAZ2V>gMQAh3W>c1K5K5K5K5K4K2O1O3M3M3M1N2O2N1O1O0000001O00001O100O1O1O001O00000001O001O001N101SIjBS6`=cIdBY6P>N2F;O5K4M3L4M3L2N00000O1O1O1N2O1O1O1O1N2N2N2N3M3L5L3N3M4K6K6J;Db0^Ob0^O=B9H8H9G8F:ESnf6" + }, + "image_id": "33", + "id": 63 + }, + { + "area": 35802, + "iscrowd": 0, + "bbox": [ + 192, + 229, + 116, + 305 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Sjo3:\\d0?@9H7J4L4M5W^OhNh?^1Q@]OT?k0d@F_=ZNkBP5okNkAP1[>jNkAP1\\>jNhAQ1^>iNkAb0h>ROiAJV?EQnm3" + }, + "image_id": "33", + "id": 64 + }, + { + "area": 15180, + "iscrowd": 0, + "bbox": [ + 324, + 246, + 91, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "\\\\d6>bc0k0UOl0TOk0A`0L3M3M3M3N2N2N2N2G9N2N2O1N101N101O001N101O00000O2O0000000O2O0000000O10000000000001O0000000O10000O101N100O10000O100O101O0O100O1O2N101N1O2N1O2M2K6G8H9G8H9H8aMP^Oj1Yb0PNm]Og1hb0EnNTAZ1f>iNVA^1d>cNZAc1`>_N^Ah1\\>a2J5J7J6J5K6J9G9G4L4L4L3M1O2N2M2O2N2M2O1O1O1O00001O00001O1O1O1O1O1O0001O00001O1O2RIhBV6]=dIeB[6b=]IdB^6n=M3M4L3M4I9H8M2M10001N1N1O100O1O1O1N2O1O1N2O2N1N3M2M4M4K6K5L4L7I:F:E`2L4M3M3M3N2N2N1O2M3N2N2N2N2eN_IZDc6d;_IYDd6d;`IYDa6f;bIVDa6h;aIVD`6i;cISD`6k;X100O2N1J6EC>@?A`0_Oa0@SUY6" + }, + "image_id": "35", + "id": 69 + }, + { + "area": 15308, + "iscrowd": 0, + "bbox": [ + 205, + 292, + 88, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "cYV47ad0`0_O`0A?A?B>XO`M[^On2Wa0WMd^Oc3b`0cKZA^4e>dKXA_4f>eKVA\\4i>k0O2G8H9N1O10001N100000001N100000000O10000000000000000000O101N10000O100O100O10001N1O1O2N1O1N3N1O2UK\\A]3f>aL]A\\3m>YLWA_3X?WLk@]3`?aLc@T19C]?WO^@Q1=YO`?DV@o0fa0oN]^On0jb0L4L4MbbX2" + }, + "image_id": "35", + "id": 71 + }, + { + "area": 50568, + "iscrowd": 0, + "bbox": [ + 29, + 257, + 146, + 343 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lad07[d0=D=E:I6I7J6aLUNeCQ2VCB1O1O1O000000000000000000001O000000000000000000000000000000000000000000001O000000000000000000000000000000000000000000001O000000000000000000000000000000000000000000001O00000000000000000000O1O2N1M3K6UOj0K6]Ob0TIm6VOXbR4" + }, + "image_id": "36", + "id": 73 + }, + { + "area": 19712, + "iscrowd": 0, + "bbox": [ + 308, + 220, + 87, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "UdZ6l0na0C]_O[1h?kNS@X1i?nNR@U1j?QOQ@S1j?Q2L5L3M3N3M2N2N2oNaKdA`4[>bKcA`4[>bKbAa4\\>aK`Ab4_>dKZA_4^>R1H9N2N1O1O101O0O10000O2O000O10000O100000000001O00000000000000001N10000O100O10000O2O0O1O1O101N1O2N2N1N3lJkA`3f>oK\\An3g>PL[An3g>lK_AR4c>lK`Ac3P?[LRAX15ZO_`0b0h_OUO^`0g0o1J6K6I6JfYU2" + }, + "image_id": "36", + "id": 74 + }, + { + "area": 65296, + "iscrowd": 0, + "bbox": [ + 32, + 196, + 175, + 370 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "\\\\f07`d09H9F9H8H8G:G8G9H9G8G9H8H9G7I8I6I7I7I7I7I7J6I7POP1I7J7J7H8I7I7I7I7I7I6J5K5K5K5K5K5K4LZOf0[Oe0ZOYgY3" + }, + "image_id": "37", + "id": 76 + }, + { + "area": 17595, + "iscrowd": 0, + "bbox": [ + 340, + 220, + 84, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PUn6d0bc0g0J5D;L4M3`NVNl_Om1o?^Ng_Og1S`0`Nh_Oc1T`0d1N2M3N2M2O2N1N2O2M2O2TO^K\\Ad4c>aKXAa4f>dKUA]4j>j0O1N2J6I7O2N100O10000O10000000001O0000000O01O10000O10000O1000000O2O000O100O2N1O1O1N2O2N1O1H9B>G8]LX@b0>nN`?8Z@e0cKTA^4k>i0O100O1K5K5N2N2O2O0O10000O10000O100000O10000O10000O10000O100O1O1O1O1O1N3N1O1O1O2J5G9G:I6M3M4gNY1L3oMf^O?^a0_Oe^O<_a0Be^O8_a0Fd^O5oa0ZOT^Oa0Pb0]OS^O?Pb0^OU^O>Vc0M`Xj1" + }, + "image_id": "38", + "id": 80 + }, + { + "area": 65520, + "iscrowd": 0, + "bbox": [ + 9, + 198, + 181, + 359 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]g82fd03L7J7I8H8G8I8H8H8G8I8H8H7H9H8H7I8G8I7I7I6J7POmJlA[5n=hJnA^5l=n0J6J5L5K5K4L5K5K5K6J5K6J6J6J6J5K6J6J6J6J6I6K6J6J4L1O0000001O000000000000001O00000000000001O01O0000000001O000001O000001O0000000001O00000000000000001O00000000000000001O000001O0000000001O00000000000000001O00000000000000001O01O000000001O00010O1O1Oj0UO3M2N2M3N2N2N1M3M4L4L4L4L4L4L4L4K5Ll0TOd1\\NS1mNa0_Ob0^Oi0WOR1nNR1mNgS[6" + }, + "image_id": "39", + "id": 81 + }, + { + "area": 17920, + "iscrowd": 0, + "bbox": [ + 227, + 232, + 79, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "kWe4>Wd07h]O5Y?1R@k0c?YOX@l0d?[OT@j0h?@g_Ok0U`0P2M3M2POdK_A^4]>hK_AZ4_>iK]AZ4`>iK]AZ4a>hK[A\\4c>fKYA]4W>\\1N2N2O1O1N10000O2O00000O101O000000001O000000001O00000000O100000000O1000000O2O0O100O2O000O2O1N1O2N2Nb0VJ^AY4d>eK`AW4b>gK`AW4b>gK`AW4c?M3M3M6TMT@a0n?YOZ@b0j?WO^@L]`00[2LXWm3" + }, + "image_id": "39", + "id": 82 + }, + { + "area": 19800, + "iscrowd": 0, + "bbox": [ + 333, + 186, + 87, + 224 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Vlj6i0ic0;F9@a0YOe0\\Od0C=L3L5K5L4L4N4L2N2N1O2N1O2N1O2N1O2M2O0N2O1M3J4L5N3N4M8SOi0M2N2N101O00000000000000O1O1O001O100000000O100000000O1O1O2N1O1O1N3N1M3M4_J`A^4h>aKZA[4j>cKhAi3[>SLZBU3n=aL\\BR3n?B=F;G8I8H7H9H8G8Ikhc1" + }, + "image_id": "39", + "id": 83 + }, + { + "area": 65124, + "iscrowd": 0, + "bbox": [ + 17, + 335, + 267, + 242 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bP>3fd07J6J5J5L5K4K5L4K6K4L4K5L5K4K3N1O1N2O1N2O1O1N2O1O1N2O1O1N2O1N2O1O1N2O1O1N2O2M2O1O2M2O1O2M2O1O1N3N1N2O1O1N2O1O1N2O1N2O1O1N2O1O1N2O1O1N3N1N2O1O1N2O1O1N2O1O1N2O1000000000001N10000O10000O100O10000O100O10000O101N100O10000O2O000O10000O2O00000O10001N10000O10001O0O10000O101O0O1000000O10O1O001N2O001O1N2O001N1O2N2N1O2O1N1O2N1O2N2O001O1O0010O10000O10000O010O01O1N101N2N1O2O001O1O001O001O1O0O2N2N101N1O2N2O0O2N2N101N1O2N2O0O2N2N101N1O2O1N1O2N2N1O2N1O2Ef^OSM\\a0l2g^OPM]a0l2:N3M4L4L4M3L3M4L4L4L4M3L3M4L4L4L4L3N2M2N2N2N2N2O1N2N1O2N1O2O0O1O2N1O3M]n]4" + }, + "image_id": "40", + "id": 84 + }, + { + "area": 17577, + "iscrowd": 0, + "bbox": [ + 244, + 215, + 80, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mmP55cd09m\\OR1i?UOP@Q1j?TOP@S1j?ROQ@R1k?Q2L4M3N2N2ROgKXA[4e>iKXAY4f>iKXAY4f>jKVAY4h>jKTAY4j>jKQAY4b>ZK^Aa5_>>O2N1O101N100O101N100O2O00001O000000000000000001O000O10000O10000O10000O101O0O1O2N2O1N1O2O1N2N8kJ\\Ae3n>QLTAl3o>RLSAk3P?nKWAo3m?M2ZMT@:o?CV@NX`0Nm_OXOm`0d0h1K5ATkb3" + }, + "image_id": "40", + "id": 85 + }, + { + "area": 19272, + "iscrowd": 0, + "bbox": [ + 344, + 172, + 87, + 218 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]eR7f0oc08H8F9De0M3N2O0O10001O000000O1O010O1O100O1O1000000O1O2N1O1O1O1O1O1N3N1M3L4J7I6J7[KaA\\2Q?`MWAU2o>iMTAP2S?hMUAQ2n`0I7I8H8I8G8H9GYd\\1" + }, + "image_id": "40", + "id": 86 + }, + { + "area": 71002, + "iscrowd": 0, + "bbox": [ + 195, + 307, + 270, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "gjQ49`d0a0_Ob0^Oa0@a0^O9H1N2N2O1N1O2O1N2O1N2N101N2N2O1N2O0O2N2O1N2N2O0O2O1N2N2O1N1O2O1N2O1N2N101N2N2O1N101N2N2O1N2N101N2O1N2N2O0O2N2O1N2O1N1O2O1N2N2O1N101N2N2O1N2N101N2O1N2N2O0O2N100O2OO00001O00001O001O00001O00001O0O2O000010O0001O001O00001O00001O001O00001O000010O01O00001O00001O001O00001O00001O001O0010O0001O001O001O00001O001O001O00001O001O010O00000000001O2N1O1O2N1O2N1O1O2N1O2N101N1O1O2N1O2N1O1O2N1O2N1O1O2N1O2N1O1O2N101N1O2N1O1O2N1O2N1O1O2N1O2N1O1O2N1O2N101N1O1O2N1O2N1O1O2N1O2N1O1O2N1O2N1O2L3L4M4M2N2M3N3L3N2N2M3N3M2M6K8G7J4L3M2O2N1O2N1O2NV]f0" + }, + "image_id": "41", + "id": 87 + }, + { + "area": 21762, + "iscrowd": 0, + "bbox": [ + 134, + 176, + 92, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "nQh25bd08H9F8^NWOh^Om0Va0WOd^On0Ya0UOb^OR1Ya0POe^OV1Ua0lNi^OY1;^Nm>0Z@<;Y14iNQ?`0i@g2d>[MZAk2`>n1J5J7J4L1O1N3N1O1N2O1O1O0O2O1O001N2O1O000000001O00000001O000001O0000000001N10001O0O101O001O0O101O1N3N8G8I1N2ZJhAh4X>VKkAh4W>VKkAi4V>TKnAj4R?N3N1N2N3N1N2N3M2N3jLT@Y1o?bNX@Y1k?aN]@Z1h?_N^@]1h?UNe@f1\\a0K5Jk0TOPjc5" + }, + "image_id": "41", + "id": 88 + }, + { + "area": 19270, + "iscrowd": 0, + "bbox": [ + 256, + 127, + 81, + 234 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "URX5i1Ya0k1J6J6K4M2N3M3M2M3N2N1O1O2M3M4K4L3M4D;E;[O[JQBi5f=aJVBc5h=h0O101N1000O1O1O1N1N3N2001O3M3M1O00O00100O100O1O100O2N100O100O1O2O0O1O101N2O0TJnAo4T>oJYBd4i=QKmBc4m>G4L3N1N2N2M3D<\\Od0\\Oe0[Od0C?F;Fh^Z3" + }, + "image_id": "41", + "id": 89 + }, + { + "area": 33840, + "iscrowd": 0, + "bbox": [ + 65, + 264, + 119, + 281 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mb\\19\\d0?A8H8\\NmNX_OW1c`0oNY_OU1d`0nNY_OU1d`0nNX_OU1f`0mNW_OW1f`0lNV_OY1Q`0ZNb_Oa0;Z1n?[Oo_Ol0k?VOR@P17VNU>l0aAb2Y>dMaAb2Y>U2J6J6J6K:F9F2O2N2M2O2N1O2M2O1O1O1O001O1O1O001O1O1O00001O0O10001O000000001O0000001O00000001O0000001O00001O00001N2O001N101O1O3L8I7I3L2O1O0WIlBk5V=RJRCg5P=VJSCh5nPN[Al1i>lM_AP2j`0K4K6H7Lc0\\Of0[O8@Qe_6" + }, + "image_id": "42", + "id": 90 + }, + { + "area": 53265, + "iscrowd": 0, + "bbox": [ + 144, + 308, + 264, + 200 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "__T32hd01O1N2O1N2O1O1N2O1N2O1O2M3N3L3`]O[Og`0g0o^OBPa0a0j^OCTa0R201N2O1O0O2O1N101O1N2O0O2O1O0O2O1N2O001N2O001N2O0O2O1O1N101N2O001N2O10O0100O010O100O010O10O0100O10O0100O010O100O010O10O0100O10O01O10O0100O00100O10O01O10O0100O1O010O10O01O100O010O10O01O10O0100O00100O010O10O0100O00100O010O10O0100O010O10O01O100O010O10O0100O010O10O01O10O001O001N1O2O0O2O001O0O2N100O2N1O2N1O2N1O2N1O2N1O2N1O1O2O010O0102M100O2O0O1O10O000O2N1O2N10001O001N1O1O2N1O2N1O1O2N1O1O2N1O2N1O1O2N2N4L4L3M4L4L3L5L4L3M4L4L4L5K6J4L2N2N2N1O1O2N1O2N1O1O2N1O1O1O1O1O1N2O2NnQl1" + }, + "image_id": "42", + "id": 91 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 337, + 175, + 91, + 229 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ajl6=Zd05^Oa0H8G8H8I8G8I8_O`0M3I8H7N3N1N3M2O1N3N1O2N1O1O2N1O2N1O2M2N2O2M3I8H9K4L4F;K3N2^OWJoAk5l=d0M4N101N1000O01000O1O1O1O1O1O100000000O1O1O1O1O1O1N2O2M2M3N2L4I8I6J6J7H7J7jKe@e2a?ZMVAi1R?UNPAd1V?WNQAa1V?VNSAb1Xa0H7K6K5L3@d0F_b^1" + }, + "image_id": "42", + "id": 92 + }, + { + "area": 44220, + "iscrowd": 0, + "bbox": [ + 96, + 250, + 133, + 329 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "^SP2b5O1O1O1O2N2N2N2N2N2N2N2N8ZCgH[;\\7]DjHc;V81N`0@2O1N2N2O1N2O1N1O4M2M2N2O0O2O1N1O2O1N1O2O1N2O1N2N3nNQ1fNZ1^Oc0]Ob0^Ob0bNa`P5" + }, + "image_id": "43", + "id": 94 + }, + { + "area": 34770, + "iscrowd": 0, + "bbox": [ + 281, + 184, + 113, + 304 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lhi5;nc0h0XOe0[Oc0QNn1I8I7H8J5M4M4K6K2M4L3N3L3N2N1O2N1N3N2N1O2N1O1N2M3L3L4L4L4L4L1O6L5\\O^HkCf7j;cHSDa7d;gHZD]7_;R1N2N101O1O000000000O10000000000000O1O1O1O1O1O1N10100001O000000001O01O0O1O1O1O2N1N2O1O1O2M2O1O1O2I6dHfCV6\\kMQAX2k>nMPAV2j>P2L4N2N1N3N2N1N3N1O2M2O2N2M2O2nN[JlBf5S=\\JkBe5T=^JhBe5V=]JhBd5W=_JfBb5Y=Q1O000O2G8G9O2N1O1O10000O10000O2O00000O1000000000O1000000O10000O1000000O10000O1O100O2N1O1O1O2N1O1O1O2N1O1O1O2J5G9H8K6J5K5K6J6_NdA]Lb>h0WAk0X`0SOk_Oh0Y`0VOi_Of0[`0XOh_Od0Z`0^NZ_O9?T1o`0jNT_OQ1Pa0lNS_OP1Qa0jNV_OR1\\b0L5L6I7F:DRbm0" + }, + "image_id": "44", + "id": 98 + }, + { + "area": 32301, + "iscrowd": 0, + "bbox": [ + 93, + 205, + 110, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Q]o1b0hc0e0H8I;F>A?B=C>B>B>B9G6J6J6H6J5bMRKiDS5T;oJSDk5k;WJjCS6T8UAh0f0YNX>m0UAe0``0XOc_Oe0_`0_NU_O8?U1Ra0iNQ_OS1Ra0jNQ_OT1Qa0jNR_OR1Ua0hNo^OR1ab0J6J?APRP2" + }, + "image_id": "45", + "id": 101 + }, + { + "area": 32592, + "iscrowd": 0, + "bbox": [ + 66, + 177, + 111, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "RU]1>Yd0d0\\O:F;F9H9F9H9G8G:G8VM`LkCi3l;cLfCg3S<`LcCj3Ucc0j0VOk0UOk0UOj0A`0K4L4L4L4M3N2M3N2N2M3N2N2I7K4O1O2N101N1O101N1O2O00001O001O0O101N101O0O2O00001O0000000000000000000000000000000000000000O10000000000O10000O2O001N101O0O100O1O2N100O1O2N1O2N1O2N1O2N1N3L3K6J6J5K6DaJXBY5h>J6J6K5J6K5K5K5J6K5K5K5J6K5K5K5J6K5K5K4K6K6J5K5J6K6J5K5K7H8Ikoa0" + }, + "image_id": "47", + "id": 107 + }, + { + "area": 22914, + "iscrowd": 0, + "bbox": [ + 68, + 301, + 113, + 200 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ak]1:_d0A9DTQ_6" + }, + "image_id": "48", + "id": 108 + }, + { + "area": 60214, + "iscrowd": 0, + "bbox": [ + 175, + 140, + 160, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "`Xe3Q1gc0]1cNe0[Oe0\\OZ4fK2N2N3M2N2N3M2N2N3M2N3M3M2N3L4M2VOk0L4M2N3M2O2M3N1O2N2N1O2N2N1O2N2N1O2N1O2N1O001O00O10000O10000O10000O10000O10000O100O10000O10000O10000O10000O10000O100O10000O10000O10000O10000O10000O100O1000000O10000O10000O10000O1000000O10000O101O0O101O000O2O001PFQFR9n:N1O1N2O1SOm0B>B>B>B?A>B>B>DB>DI8H7H8F:G9F:F:G=B;F:E;F=Bf_`1" + }, + "image_id": "48", + "id": 110 + }, + { + "area": 35568, + "iscrowd": 0, + "bbox": [ + 21, + 425, + 311, + 113 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Yg`0h0oc07I5K5K5M2N100O1O100O1000000000001O0000000000000000000000O1O100O2O1O0000000001N1O101O00001O0O1000000000000O10000O10000O2O000O1000000000000O10000000001O00000O101O0O100O2O0O1O2N2N2N2N2O0O2N2N2N2N2N101N2O0O2O0O2N100O2O0O100O101O00000O10000000000000000O1000000000000000O10000000000O1000000000O1000000000000000O10000000000000000000000000000000000000000000O0100000000000000000000000000000000O1000O10000000000000O1000O10000000000000O1000O100000000000000000000000000000000000000000000000O10000000O100000000000000000000000000000000000O100O10000O101O0O101O00001N10001O0O1000001O0O10000O2O0O2O1N2O1O2M2O1YNf]Ok0]b0ROe]Om0\\b0QOf]Om0\\b0POf]Oo0`b0iNd]O?FM\\c01f\\OM\\c01g\\OJ]c04e\\OI`c02Zj\\3" + }, + "image_id": "49", + "id": 111 + }, + { + "area": 12015, + "iscrowd": 0, + "bbox": [ + 228, + 306, + 88, + 134 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ame46ad0c2^M2M3O1O1N2FPMh^OR3Wa09O1O100O1O100O100O1O10000O10000O10O1000000000O10000000000000000000000000000000000001O0000000O2O00000000001O000000010O001O010O1O100O0010O02N2fLg^Oo2ca00OO3^Oa0_Oa0_Ob0^Oc0_O_ff3" + }, + "image_id": "49", + "id": 112 + }, + { + "area": 50868, + "iscrowd": 0, + "bbox": [ + 308, + 176, + 161, + 313 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "meZ66Xd0=B=D=CbJRBW5l>J6K5J6J6J6J7J5J6J6J6J6J6I7J7I6I7J6I7J6J6I8I6I8I6J8I8K`bd0" + }, + "image_id": "49", + "id": 113 + }, + { + "area": 41454, + "iscrowd": 0, + "bbox": [ + 54, + 168, + 140, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "TYU13fd04L8H:F:F;E:F:El0H9G8H9H7H=D?A8H2N1O1O1O1O1O1O1O2N1O1O1N2O1O1O1OO1O100O100000000O10000000000000000O10000000000O01000O10000O1000000O10000O1000000O10O10O100O1O1O1O1O1O001O1O1O100O2O1N2O1O:E;F1N2O1N2O1N2O001N3N1O1O1O1O2M2O1O1O1O2N1O1O1O2N3M3L^2cMP1POQ1oNP1POhmW6" + }, + "image_id": "50", + "id": 114 + }, + { + "area": 32508, + "iscrowd": 0, + "bbox": [ + 59, + 410, + 300, + 107 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "QiX1>Pd0a0I4M3I7M2N100O10000O10000000001O00000000000000000000O1O101N2N1001O00001O000O2N1000000O10000000000O100000000O100000001O0O10000000001N1000000O10001N10000O101O0O101N1O2N1O2N2N2N2N2N2O0O2O1N1O2O1N101N101N2O00000O100000000O100000001O0O100000000O100000000000000000000000O10000000000000000000000000000000O0100000000000000000000000000000000O100000000000000000000000000000000O100000000000000000000000000000000O0100000000000000000000000000000O1000000000000000000000000000000000O10000000000000000000000000000O10000000000000000001O0000001O0O10001N10001O0O10001N10001N1O2O0O2O1N2N2O1hNc]O0jb0CX]O;jb0CX]OC>B=B>H8N2N2N1O2N2N1O2M3M3K4L5M3N1O2N1O2O0O101O0O2O001O001O00001N101O00000000001O000000000O1000O1000000000001O000O10001O000O101O0O10001N10000O101N1O100O2N100O2N1O1O2M2N2O2K4I8I6I8I7H7J7H7J7H8J6J6J6J6PNc]O\\1Qc0K6I7I6J7Ig\\f0" + }, + "image_id": "50", + "id": 116 + }, + { + "area": 44092, + "iscrowd": 0, + "bbox": [ + 21, + 202, + 145, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]k?4ed08G9H8H7H9H8H8G8I8G9H8TO\\MS_Ol2d`0l0I8H8I7I6I8I7I7I6J7I7I7H8I8H9G:F5K2N1O1O1O1O2N1O1N2O1O2N1O1O1O1O2N1O1O1O1O2N1O1O1O1O2N1O1O1N3N1O1O1O1O000000O100O100O010O100O10000O010O100O100O010O100O100O10O0100O101O1N2O1N9H:E2O1N3N1N2O2M2O1N3N1N2O1O1N2O1N2O1N102M3N2M3N2M3N;De0\\Od0[Oe0\\Od0[Oe0\\Od0\\Od0[Oa0@;D=D;D_gj6" + }, + "image_id": "51", + "id": 117 + }, + { + "area": 16275, + "iscrowd": 0, + "bbox": [ + 199, + 341, + 92, + 174 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lgS4<[d0h0YOg0YOh0YOf0ZO=C4L4C=K4M2N2N2N2O1N2N2O1O0O2O1O000O2O00001O0O2O00001N101O00001O00000000000000000000000000000000O100O101O0O101N10000O2O0O101N10001N1O2N2N1O2O1N4L:F2N3L4M2N3M2L5KjkX4" + }, + "image_id": "51", + "id": 118 + }, + { + "area": 28355, + "iscrowd": 0, + "bbox": [ + 361, + 235, + 106, + 264 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Tj]7a0jc0j0VOb0^Ob0^O`0E;I7YOg0L4L4L6K3N2N4L2M3N2N2N2N2M3N2N1O1N2O1O00000M3J6K5L115K6J6K5[OZIoBh6kAUie0" + }, + "image_id": "51", + "id": 119 + }, + { + "area": 45743, + "iscrowd": 0, + "bbox": [ + 29, + 194, + 148, + 306 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "gQe04ed07I7H8I7I8G8I7I7H8I7SOeMn^Ob2j`0cMR_Od2f`0o0I8I6J6J6J7H8I8H8H7I8H8H7I8H6J5K5J6KCg0YOg0XOb0_O:E:G:E;FT1kN7Jk0TOB?A>F:L5J5K4L4L4_NgM\\@]2Z?oM`@V2[?g1M3L4M3L4M2O2N1N2O2N1N3N1O2QOjJVBX5j=iJTBY5j=iJTBX5k=oJnAR5Q>m0N1O2M2K6K4K5N2O10000O10001N10000O10000O100000O100000000O100000000O10000O1O100O2O0O1O2N1O1O2N1O1O1O2M2L4I8H7I7I8J5L4QLk@V2Y?cMPAf0e`0XO]_Oe0f`0YO\\_Od0g`0`No^O8k5O1O0O2O001O1O002N1O1O1O1O1O1O1O000001O0O1O100O1O100O100O1O1O1O1O2M2O1O2N1K6G9G8H9mKk@X2]?fMe@g04lNQ`0In_OU1ba0iNa^OR1ca0kN`^OS1ba0kNa^OR1aa0lNc^OP1fb0K6J6Ahbo0" + }, + "image_id": "53", + "id": 125 + }, + { + "area": 17576, + "iscrowd": 0, + "bbox": [ + 42, + 354, + 103, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ldm03cd07J;G:[OTOh\\OT1Qc0POk\\OV1nb0a0I7J6J7I6K5J6K7H8I8G8I5J4M2M3N1N3N1N2O1O1N2O1O001O0O10001O000O101O00000O2O0000000000000000000001O000000000O10000O101O0O101O0O101N1O2O0O2O1N2O2`Ki_OX4^`0N2O1N2N2O1N2N2N7IB>B;E7I8I4K2O1O1N101O1O001O1O001O001O1O010O00100O00010O01O1O010O1O10O0001O01O01O00010O00010O000100O1000000O1000000O1O100O1O1000O10000O01000O10000O010O0010O00010O00010O000000000000000001O001N2O00001O0000001O00001O10O0100O0101O2N000001O001N101N1O2N2N1O2M2N2N1001O0O2O001O001O10O010O00001O001N2O1N3M2N3M2N2N1O2M3N1O2M2O2M3N2L4L9GiXR4" + }, + "image_id": "54", + "id": 127 + }, + { + "area": 42340, + "iscrowd": 0, + "bbox": [ + 325, + 224, + 145, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "fhe64`d09H8D;A`0@`0A?@?B?@`0A?@`0@`0A`0_Oa0@?@a0E9L2O1N2O1O1O1O1O2N1O1O1O1O1O1I7H8O1O1O1O001O10000000000000O10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000O1O1K5G9G9J6L4L4M3L4K5J6K5J6J6J6K5J6J6J6K5J6J6K6I6J7TLj_Ol2\\`0lLn_Om2X`0kLQ@m2Sa0H8H8I8G8H8H8I8H9H7I8I7H^Wc0" + }, + "image_id": "54", + "id": 128 + }, + { + "area": 25220, + "iscrowd": 0, + "bbox": [ + 118, + 222, + 96, + 259 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "cf]2:Yd0>G7H5L5aNkNQ_OY1i`0mNS_OW1j`0lNR_OY1j`0jNS_OZ1?]Ni>;e@_17dNk>Ol@Z3X>[MfAn2Q>TMkAW3l=PMkA[3m=Q2G6K1O2M2O2N1O2M2O1O1O1O1N2O001O0O2O001O0000001O000000001O0001O0000000000000000000000001N10001O0O101O000O2TLSDiNn;U1eDXN`;c1REkMU;n1]E`Mk:W2hEWM\\:e2n3jMY^OV1ia0cN`^OY1aa0fNa^Om0la0POW^On0ka0oNX^Oo0ja0oNX^Oo0kb0N2N2N4M2M2O1N2O2N3L4M3L4JZPk5" + }, + "image_id": "55", + "id": 129 + }, + { + "area": 20790, + "iscrowd": 0, + "bbox": [ + 185, + 316, + 104, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "TZi3:_d0e0[Od0[Oe0\\Od0\\Od0[O`0A:\\OkKP@\\4i?`c0m0SOl0TOm0A>O1O2O0O2N1O2O0O2N101N2N101N2N2O2a_OmKR`0`4M2O1N2O1N2O1N2mAhLb:i6N2O0O2O1N101N2O001N2O0O2O1N101N2G8G:L4L3M4N2N101O1N101O1O001O1O0O2O1O00O1O1O100O1O1O100O1O010O1O1O100O1O100O1O1O10O01O1O100O1O100O1O1O100O1O00100O1O100O1O2N101N2Nb0^O2O0O2N1O2N1N3N1O2I6F;E:G:E;G9H9H7I7H9H7I8G8I7C=C>G8I7H8I7H8I7I7H8I7H8I7H8I7I7HmZj1" + }, + "image_id": "55", + "id": 131 + }, + { + "area": 29298, + "iscrowd": 0, + "bbox": [ + 22, + 252, + 113, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Wc`0;Vd0>\\NYOh^Oo0Qa0UOk^OP1Pa0TOk^OP1Ra0SOk^OQ1]`0lNo^O7`0Q1^`0E^_O?``0C]_Oa0``0A^_Oc0^`0_O`_Oe0\\`0]Ob_Og0Z`0P2M[1dN4M3M5J:G6J3L4M4L6I7J4L1O2M3N1O2N1O1O1O1N101O00001O00001O00001O000000000000010O0001O00001O00001N101O1O1O1O5K8G5L1O1O1N1aIbBb5_=\\JcBc5^=[JdBc5^=WJiBg5V>N2O2M2O1O2M2O1N3M2O1N3M2O1N3M4L4ULb@S2k?\\M]@`2Ra0L4L4L4L4L3M6I9H8F`0Ad0[Oel^7" + }, + "image_id": "56", + "id": 132 + }, + { + "area": 51984, + "iscrowd": 0, + "bbox": [ + 163, + 181, + 151, + 341 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Uk\\3<]d0j0VOj0VOj0VOi0XOl3SL2N2N2N101N2N2N101N2N2O0O2O1N2N101N2O1N1O2O1N2O0O2N2O1N1\\Oe0M3M3M2O2O1O1O001O1N2O001O1O1O001O1O1O001N2O1O001O1O1O001O1O1O0O01O100O1O100O1O100O1O10O01O100O1O100O1O100O10O01O100O1O100O1O100O1O010O1O100O1O101N2N2iFPEb8e;N2N2O1N2N2O0O2N2O1N2O1N2N2O0O2N2O1N2N2DB>B>B>B>A>C?A?A?A?A?@j\\i3" + }, + "image_id": "56", + "id": 133 + }, + { + "area": 21660, + "iscrowd": 0, + "bbox": [ + 345, + 328, + 113, + 189 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "RST7B?A>B?A>B>B>H8N2N2M3N2N2M3N2N2G9N1O2N2N101N101O0O2O1N100O2O000O10001O000000001O00000O101O00000000O10000000000O101O000000000O2O00000O1O101N100O1O2O0O1O2N1O2N1O1O2N1O2M3L3I8I7H8I6I8H8I7H8I7H8I9nM]]O`1Sc0I7H9H7H8J;GWXl0" + }, + "image_id": "56", + "id": 134 + }, + { + "area": 31860, + "iscrowd": 0, + "bbox": [ + 69, + 230, + 117, + 269 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ii_1Q`0Dl_Oa0Q`0@l_Od0Q`0Ee_O?Y`0S2Ng0XOi0XO5J6K5J6K5J6K5K5J6K5K4L1O2N1O2N1O1O1O001O001O1O0O2O1O001O1O00001O000000001O0000000001O00001O00001O001O1O001N2O3M6I8I3M1N2O001YIkBf5W=XJkBg5U=WJnBh5S=UJPCi5R=UJQCi5Q>O1N2O2M2O1O2M2N2O1N3M2N2N3M5K4VLc@P2a?aMPAY2T?aMQA[2Y?ZMm@b2h`0M4L6J2N4K7Jl0RO5K`0@kR]6" + }, + "image_id": "57", + "id": 135 + }, + { + "area": 32963, + "iscrowd": 0, + "bbox": [ + 167, + 313, + 276, + 118 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "am^33]d0c0D7G8[Oe0G9K7H4M4N4Lh0XO0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000O1ZNf1WOi0O1O1N2N2O100O1ET\\OFnc0:9O1O1O1O1O2N100O100O100000000O100000`Pj00`oUO00001O00001O001O00001O00001O001O1O1O1O00001O1O1O1j[OIgc0f0O1O1Z^OZOV?g0V@Lj?5j_O6V`0Ke_O9[`0I`_O:``0P20010O01O001O1O001N1O2N1O2N1O2N2N1O2N1M4L3M4L3O2O1O001O001O100O1O0000000O1O1O1O1M3M3E;L4L4L4L4L4L5K4L5K4L5KkgT1" + }, + "image_id": "57", + "id": 136 + }, + { + "area": 21384, + "iscrowd": 0, + "bbox": [ + 283, + 315, + 107, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Y]j5Q2i`0R2L3N3L4L3N3M2N2N2E;N2N2N2N2N2O1N2N2O1N101O000O2O001O001N101O00001N1000001O0O10001O0000000000000000000001O00000O100000000O10000O2O0O101N100O2O0O101O0O101N100O1O2N1N3N2M3N2M3N1O1N2O3H7F:PLb_OX3i`0bL]_OT3Za0F:^Ob0XOh0B>K6K5@akW2" + }, + "image_id": "57", + "id": 137 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 44, + 332, + 109, + 185 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lmn06_d0DoKTAT4i>nKTAV4i>mKSAV4k>lKRAW4^>YL`Ai3^>Z1O2O0O1O2O001N100000001N10000000000000001O000000000000O10001O00001N10001N1O2N100O2O0O101N`0cJn@T4S?jKPAS4R?jKSAR4o>lKSAR4o>lKSAR4l?N2M3N3YMi_Of0Z`0UOn_Oe0U`0POY@j0k?QO\\@2a`0H^2IhdQ5" + }, + "image_id": "58", + "id": 139 + }, + { + "area": 55040, + "iscrowd": 0, + "bbox": [ + 297, + 194, + 171, + 319 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "akT62ed05YOf0G9F:F:F:F:F:F:[Of0I6I7J6F:E;DjJkAo4T?J5K6K5J5L6J5K5K5K5J6K6J5J6H8I7H8J7K4K5L4L4G:F9L5K6J8Hoad0" + }, + "image_id": "58", + "id": 140 + }, + { + "area": 52456, + "iscrowd": 0, + "bbox": [ + 48, + 322, + 315, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "aTT16cd09l@4S?NZ@c0g?_Oe_OS1[`0f100000O100000O10O100000000O10O1000O100000000O010000000O10000000O0101O1O1O1N2O1O1O1N2O001O1O1N2O1O1O1O1N2O1O1O1O001O1O1O1O1O1N1O2N2DL3N2N2N2N2O0O2O1N101N101O0O2O001O0O101O0O10001O0O101O000O101O00000000000000000000000001O000000000O10000O10000O101O0O101O0O2O000O10001N100O1O1O2N1O2N1O2N1O2N2N2N3M2N3M2QK\\@e4n?M4K5L4TOk0nNS1^Ob0^Oa0@a0^OdlX4" + }, + "image_id": "59", + "id": 142 + }, + { + "area": 19040, + "iscrowd": 0, + "bbox": [ + 332, + 201, + 84, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "iij6:Y1Kfa0k0^]O_O^b0a1M3L4L4M3N2N2N1O2N2N2N2N2N2SOXMe_Oj2Y`0XMd_Ok2Z`0ZM]_Ok2b`0h0QASLoc4l@dKl>Y5L4O10000O100O10000O01000O10000000000000000000001O001O1O1O1O1O1O00100O1O1O100O0000N3M2E;C>J5K6J6\\L]@e0n`0YOT_Od0o`0ZOT_Oc0n`0eNf^O5?P1aa0nNb^Ol0da0oN`^Oo0ba0mNc^OP1gb0I9FQhR2" + }, + "image_id": "60", + "id": 146 + }, + { + "area": 48960, + "iscrowd": 0, + "bbox": [ + 34, + 260, + 305, + 159 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Q\\h07bd04M4L3M4L5K6I8I6J6J7I4L3M3M3M3M2N1N2O1OO10000O01O1O1N2O1O1N2O1O1O1O1O1O1O1O2N2N2N2N2N2N1O2N2O1O1O1O1O1N101O1O001O001O001O001N101O001O00000000O1000O010000O10000O1000000O010000000O100000000O10O100000O10000000O0100000O10O1000O10O1000O1000O100000000O010000000O100000000O1000O1000O100000000O0100000O10O100000O10O100000O100000000O100000000O10O10000O01000000O1000000O1O1O1O1O010O1O001O10O0100O100O100O100O100O10O10000000O10000000000000O10000O01000O100000O100O10000O1000O1000O10000000000O100O100O00100O100O10O01O100O1O1O1O001O100O010O010O3N1N2O1N2O1N2O1N2O1N2O2N1N2O1O1N2O1O1N2O1O1N2O2N1N2O1O1N2O1N2L4SOm0F]gY3" + }, + "image_id": "61", + "id": 147 + }, + { + "area": 44520, + "iscrowd": 0, + "bbox": [ + 144, + 331, + 264, + 167 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "QfP35bd08H9I6J5L2N2M4M2M3N2M4M2N2M2O1N3N1O1N2N1O2M2N2O1N2O1O01O1O100000000O100000000O1O1O1001O00001O000O2O0O1O2N1O001N100000000O1000000O1000O11O00001O00100O1O1O10O01O100O100O101N100O2O0O101O000O10000000000O2O000000000O100000O1000O010000O10000O01000O10000O010O100O0010O010O0010O0010O01O001O00001O000001O001O010O010O01O010O010O010O010O01000O010000O01000O10O10O1000O010000O10O10O1000O010000O01000O0100O010O10O0100O010O10O0100O010O10O0100O100O100O2O0O100O101N101N2O0O2O0O2O0O2O1N101N2O1O1N2O1O1N102M2O2M2N3M2N3M4L3M3L5J5J7I;FfSl1" + }, + "image_id": "61", + "id": 148 + }, + { + "area": 20240, + "iscrowd": 0, + "bbox": [ + 376, + 241, + 109, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "f`e74_d08H8H8H8H8H8H8H8K5N2M3N2M3N2N1O2N3M2N3L4m_OmLV>Z3gAhLV>[3hAfLW>]3fAdLY>_3dAcL[>`3aAaL^>c3\\AaLc>b3WAaLi>i4N10001N101O0O10000O1000000000000000000O1000O1000000O10000O1000000O2O00000O100O2O0O1O2N1O1O2N1O2N1N2O2L3K5K5K5L4K6J5K6K4L5K4M4K4L5K4L5L3L5K5K5L4K5cNQ]Oi0cc0K6J5L5J[T:" + }, + "image_id": "61", + "id": 149 + }, + { + "area": 26429, + "iscrowd": 0, + "bbox": [ + 67, + 255, + 106, + 246 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Z`^1?Xd0a0YNUOa^Oo0Xa0XOd^Om0Xa0UOf^On0d`0nNi^O6`0P1d`0EY_O?d`0CZ_Oa0b`0A[_Oc0b`0_O[_Oe0c`0AV_Ob0g`0l1M]1cN3L4M4L7H8I7I6I6K2N1N3N1N3N1O1O1O1O001O00001O00001O00001O00001O0000000001O00001O00001O001O00001O1N4M7I7H2O001N2nIRBV5o=hJTBV5m=hJUBW5l=gJVBW5h>O1O1N3N1O1N2O1N3N1N3M3M2N3M4L6dLl_Oh1Y`0`M]@\\2Ta0L5K4L4L5K4K5K:F>BaVf6" + }, + "image_id": "62", + "id": 150 + }, + { + "area": 17836, + "iscrowd": 0, + "bbox": [ + 191, + 333, + 97, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "nUo3;]d0e0\\Oe0ZOe0\\Oe0ZO`0@9@\\L[_Ol3]`0>I3N2N2N2N3M2O1N2N2O1O0O2O001O0O101O001N101O001O0O101O000O10001O000000000000000000000000O10000O2O000O2O000O2O0O10000O10001N101O1N101N1O3M2N2N2O1N2aKm_OT4^`0N2N2L4N2N4@`0TO_1aN_jZ4" + }, + "image_id": "62", + "id": 151 + }, + { + "area": 42280, + "iscrowd": 0, + "bbox": [ + 332, + 179, + 139, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Soj68Rd0a0@`0_Oa0_O`0A?C=F:F:F;E:G9F:F:H8I7J6I7]Oc0O2N1E;M3L4L4M3B?N1K5I7L4O2N1O10001O000000001O0000001O000000001O000001O00000000000001O00001O00001O000000000000010O0000000000010O001OO1O1O2N1L4I7J6I7J6I7I7J6I7J6I7J7H7J6I7L4M3M3L4I7J6J6J6I7J6J6I7J6J6J6I8I6K5M3M3M3E;nNi]O@Xb0=T1L4M4Dea0DW^Od0ca0^O[^Of0Pa0WO[^O5c0f0Pa0Ml^O8Qa0Jj^ORK`Ak4a>TKaAk4X?O1O1N3N1N2O1N2O2M2O1O1N3N3L4L4^Ll_OW2_a0L9G3M3M3M4L3M5K9G8H8F:G9F`no6" + }, + "image_id": "63", + "id": 153 + }, + { + "area": 13833, + "iscrowd": 0, + "bbox": [ + 172, + 326, + 86, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "XUb39`d0a0_Oa0_O=C:ZOTNj]OV2ma0e0Fi0XO2M2O2M3N2M2O1N2O1O1N2O0O101O0O2O00001O0O2O001O00001O000000000000000001O0000000000000O100O10000O2O0O2O0O2O001N101N1O2N2O2M7I3N1N2N2N2N2M5KR2oM`0_Oa0@ZXn4" + }, + "image_id": "63", + "id": 154 + }, + { + "area": 21315, + "iscrowd": 0, + "bbox": [ + 253, + 235, + 86, + 244 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "UjV5l0kc0j1VNR1oN9H6J2M4M3M2M4M3M2M4M2N1K5G:G8G9SOn0O1N2O2N1N2O1O0O101O0O1000001O0000O1O1O1N2M3M3O13M3M1O1O1O1O1O0001O000O2O0O101N2aI]Be5d=WJaBf5`>I;E;D8I4L3N1N2O1N3M2N2N2M4L3M3L4K7I8oNR1VNmRY3" + }, + "image_id": "63", + "id": 155 + }, + { + "area": 38808, + "iscrowd": 0, + "bbox": [ + 351, + 202, + 131, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "XQV76Yd0B?B=SOm0O1N2M3M3M4L3J6O2M2O1K6J5N2M4M2I7I8N1O1O2O0000001O0000001O01O000001O0000001O0000001O0000010O0000001O0000001O000000001O01O0001O0000001O0000010O00O1O1N3M2O1J6N2N2L4J6I7J6J6J6I7J6L4N2B>K5K6J5H8G9G9G9F:G9G9G9G9I7I7I7H8I7I7I8J5N2VOk0L4Lei<" + }, + "image_id": "63", + "id": 156 + }, + { + "area": 44243, + "iscrowd": 0, + "bbox": [ + 40, + 200, + 150, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "lkl08`d08H8H8I7H8H8H7I8H8I7H8H8I7I7H8I7I7I7H8I7I7I7UOj0J7J6J6I7J6J6J6J6J6J=C010O0000001O0000001O0000010O0000001O0000001O00000010O000001O0000001O0000001O01O0001O0000001O0000001O0001O01O0000001O0000001O000001O000001O000001O0O2N2Ne0[O2M3N1O2N1N3N2N1O2M3M2O2M3M2N3N2M2N4M2N2N2NV1iN;F;E\\1dNf0ZO?@:F;Eh0XOQj[6" + }, + "image_id": "64", + "id": 157 + }, + { + "area": 19624, + "iscrowd": 0, + "bbox": [ + 182, + 259, + 87, + 222 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "idh3c0Sd07J5K6L3d]OnNh?1k_OV14VOi?FQ@Z1L\\Ok?\\OV@_3X?dLe@m3j>ULSAo3[>bLcAb3Y>a1N2N2O1O1N2O1O1N2O1O001N2O00001O001O00001O000000000001O0000000000000000000O10000O2O1N101O0O2O1O^K^A`4d>]K^Ab4c>\\K_Ab4c>\\K_Ac4]?O2M2N2N2N3M4L4TMh_Oo0\\`0^NX@\\1m?RNf@i1[a0I6Jl0TOd]h4" + }, + "image_id": "64", + "id": 158 + }, + { + "area": 13770, + "iscrowd": 0, + "bbox": [ + 291, + 317, + 84, + 161 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ann5c1da0d1L5K4N3M2N2N2E[L]_Oh3a`0:N2O1N2O1N2N2O0O2O0O2O000O2O001O0O2O001O000000000000001N100000000000O10000O10001N10001N10001N10000O2O000O2O0O101N100O2N2N2N1O2L4L4[LT_OY3o`0bLV_OT3]a0_Oa0_Oa0_Oa0_Oa0_OWo`2" + }, + "image_id": "64", + "id": 159 + }, + { + "area": 25351, + "iscrowd": 0, + "bbox": [ + 369, + 227, + 100, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "P[b7P1`c0=B>C=C=C=YOe0_Oa0L4M3M3L4M3M2O1O001O1O1N3N3M3M2N2N2N1N3M3J6J5K5L4N2M4L3]OfIcB]6U=nIeBU6Y=f000001O1N1O2002N1O2N1O001O0000001N1000O100O1O100O1O1N2O1N2O2N1O100O2N1N2N3L3N2N2N3M2WJYBX4n=gKiBV3e=hL_Bl2k=QMYBf2o=PM[Bh2P`0I7H8I7H8H9H8G9G:G8GQUe0" + }, + "image_id": "64", + "id": 160 + }, + { + "area": 48513, + "iscrowd": 0, + "bbox": [ + 47, + 181, + 156, + 308 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "U]Q14cd07J6K5J7I6K7H9H8G9H9F9H8H8G7J7I6I8I6J7I7H7J7I6I8I6J7UOSJ\\BS6^=PJXB^6a=c0K6J6J5K7I8H9G4L1O00001O00001O00001O00010O001O00010O00001O01O01O00001O001O00001O000010O0010O00001O001O01O01O00001O00001O00001O010O00001O00001O00001O0001O000O1O1O1O1O2N1O1O2aGZDg7^Sd0;E:[Of0J5J6K5L4N2N2aNkMT@Y2_?VNZ@o1c?f1N2M3M3M3N2M3M2O2N1O1O2N1O2N1TOlJQBU5n=mJPBT5o=oJnAR5Q>l0O2N1O1M3K5K6M2O2N100O1O100O1O10000000000000000O1000O10000O1000000O10001N1O100O1O2N1N2O1N2O2N1M3L4M3F;F9L4M4K4L5fNo@fLT?o0_@?l`0ZO[_Ob0h`0]OZ_O>k`0_OX_O=l`0AW_OZd04L5G;J:E8bMcNRAd1g>eNo@b1l>`NQAf1i>\\NUAj1f>XNVAo1e>SNXAS2b>X2K6I6K5K5J6K5K4L3M2M4M2N3M3M2N2N1O2N2M3N2N1O1O1O1O1O00001O010O00001O00O1O2N101N4L6[IXBn5n=hIWBX6W>O001O3M4L4K4L1O1O3M3M2M2O1O1N2O0O2N2N2N2M3L5M3O0O10000O2N3M2N3L3M4L=Bb0_O9G9F:G:F9G7F8G:[O\\Sf7" + }, + "image_id": "66", + "id": 165 + }, + { + "area": 36608, + "iscrowd": 0, + "bbox": [ + 96, + 200, + 127, + 285 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "nXQ26cd0;D=C[KaAg4^>\\K_Ae4`>]K^Ad4a>l0N1O1L4J6M3N2O2O0O10000O10001N10000O1000O10000000000O1000000O101N100O100O2N1O1O1O2M2O1O1O1L5I6K5J7@?M4L4_LX@f0Pa0XOS_Od0Qa0ZOR_Oa0Ra0gNc^O5=P1ea0oN]^Ol0ga0RO\\^Oj0ga0RO]^Oj0ha0RO\\^Oi0mb0L5Kgo=" + }, + "image_id": "66", + "id": 168 + }, + { + "area": 26312, + "iscrowd": 0, + "bbox": [ + 71, + 198, + 103, + 252 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "[]`19^d0`0@XN^Ao1]>WN\\Ao1^>TN^AS2]>nMaAW2[>jMn@R3k>f1I6I8I7I4L1N3N4L4L2N2N2M2O2N2N2N2N2N2N1O1O2N1O1O1O1O00001O00001O01N1O101N1O1O2N103N5VI^BR6f=cI`B]6P>O2N2M3M4M2M3M4K4M3M1O2N1N2O1N2N2N2N2N2L4M30000O1O1O3M2N1N2N4L6Jd0\\O:F:F:E;F;D;DC=B=D=C9G5K4L5K5Kc0^O9F9G9G:TOk0EJ5J7J6I6K4M2N2N1O1O1O1N2N2N2N2N2L5L4L4L5J5L7QNYiT6" + }, + "image_id": "68", + "id": 174 + }, + { + "area": 52052, + "iscrowd": 0, + "bbox": [ + 191, + 365, + 285, + 181 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "_`P4U2eb01N2N1O2N1O100O1O2N1O1O2O0O1O2N1O1O2O0O2N1O1O2N100O2N1O2N1O101N1O2N1O1O2O00010O001O01O01O01O01O0010O0001O010O000010O00010O01O00010O000010O01O01O01O0010O0001O01O01O0010O00010O0001O010O000010O00010O01O00010O000010O01O00010O00010O000010O0001O010O00010O000010O0001O01O01O0010O00010O0001O01O01O00010O0010O0001O01O01O00010O000010O00010O01O00010O000010O0001O01O01O010O000010O0001O00010O000010O01O000010O0001O01O01O000010O0O101N100O2O0O101N100O2O0O1O2N1O1O100O1O1O2N10000001O01O1N3N1O2M2N3N1N3M2N4L5K4L3N1O2N7I1O2N1O10O01000O001O00O1O1O1O2L3L4J6K5J6J6K6I6J7Ji^`0" + }, + "image_id": "68", + "id": 175 + }, + { + "area": 17622, + "iscrowd": 0, + "bbox": [ + 382, + 271, + 88, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]ij72ed03M4L3M3M4dN[1K5M4N1O1O2M2O1O2N1O1N2O2N1O1XO[MZ_Og2c`0]MY_Oe2f`0]MV_Of2i`0]MS_Of2k`0e0O1O2L3J6L5N1O100O2O0000001N100000000O101O00001O101N1O2N1O2N1O2O0O2N4L3M3M3M3NN1K5K5J6K6J6POR@mLS`0P3n0M3K4mMi^O>]a0@e^O;`a0Cc^O:_a0oNW^O5^^OE^a0a0^^O@^a0P2M4N1N2O2N1N2O2nNVMQ@k2n?XMn_Oj2Q`0XMm_Oj2Q`0YMl_Oh2S`0P1O2G8I7O2N1O1O2O0O1O2N10001O00001O00001O1O1O2M3N1O2N2N1O2N2N1O2N3M3M3M2O0O1O2N2O2M2N3M1O10O01O0010O01O10O100N2jJmAb3U>WLRBf3P>^KkA98W4`>gKbAT4b>kK`A\\3Y?bLj@c1EWOh?SOg@`19cNY?Fd@b1Vb0J6J6J;F`0_ORgj2" + }, + "image_id": "69", + "id": 178 + }, + { + "area": 20930, + "iscrowd": 0, + "bbox": [ + 361, + 332, + 114, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bV]76Zd0;D=D;EB>G9L4M3M3N2N2N2N2N1O2N2N1I7O2N1O2N10001N101O0O2O000O2O000O10000000000000000000000000O100000000O1000001N10000O100O2O0O10000O2N100O1O2N1O1O2N1O2M2O1L5J5K6J5J7J5K5K6I6K6J6J6I7J6J5]NU]OR1^c0H8I7I7I7Ihab0" + }, + "image_id": "70", + "id": 184 + }, + { + "area": 72615, + "iscrowd": 0, + "bbox": [ + 68, + 340, + 308, + 234 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "al_12gd05K6K4K6K4L4K6K7I;DQLnA_3o?G1O100O1O2N101N1H9@`0@?Ab0^Oe0[OaUd3" + }, + "image_id": "71", + "id": 187 + }, + { + "area": 21922, + "iscrowd": 0, + "bbox": [ + 365, + 210, + 96, + 225 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "oQ_7=Zd04V\\OAib0n0U]OVOeb0m0Z]OUObb0o0\\]OSO`b0Q1^]OQO]b0T1a]OnN[b0V1d]OkNXb0Y1f]OiNVb0o1XOi0XOh0L4L4M3L4M2O2N1N3N1O1N3N1O1N3N1O1UOPKjAS5T>UKdAl4[>\\K]Ae4c>i0O2N1N2L4K5L4N2O2N100O100000O100000000O10000O010O10000O100O10000O1O1O1O1N3N1O1O1M3K6J5C=M4L3L5H7[Of0\\Oc0K6L4kMn^O=Ua0Bn^O:Ua0Do^O7Sa0HP_O3Ta0TO]^O5b0c0fa0ZO^^Ob0ea0[O`^O?ea0\\O`^O`0Yoj0" + }, + "image_id": "71", + "id": 188 + }, + { + "area": 18360, + "iscrowd": 0, + "bbox": [ + 1, + 318, + 101, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]:V2cb04L4M5J:G9F7I5L4K5L5K4K5L:F2M2O2N1O1N101O001N2O001O0O2O001N101O1O0O2O0000000000000000001O0000000000000000O100O10000O101N100O2O0O101O0O101N101N101N2O2N6I2O1N2O1N2O1O1N2O1N7I^Ob0YOmX]5" + }, + "image_id": "72", + "id": 190 + }, + { + "area": 23296, + "iscrowd": 0, + "bbox": [ + 239, + 203, + 90, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]Qm4V3_a0A:E5K3M3M3M4J5J6J6J7I6B>ZOh0XOh0YOg0XOdl`3" + }, + "image_id": "72", + "id": 191 + }, + { + "area": 27195, + "iscrowd": 0, + "bbox": [ + 372, + 245, + 110, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Sde7=Vd0:G8G8^Ob0M4K4L4L5K4L4L5K4SOm0TOl0M2M4M3M2O2N1O2N1N3N2N1O2N1O1N3SOcJZB^5c=gJYB[5f=hJWBY5i=iJSBY5l=l0N100O1I7I8N1O1O1O101N10000O10000O10000O10O10000O10000O10000O10000O2O0O1O100O2N1O1O1O2N1M3N2K6H7H8I7J6M4K4M3eN\\1K4L5dMX_Oa0k`0^OX_O?j`0_OY_O=i`0BZ_O;h`0lNh^O4b0k0k`0gNm^O;B>B\\`T7" + }, + "image_id": "73", + "id": 193 + }, + { + "area": 29606, + "iscrowd": 0, + "bbox": [ + 168, + 180, + 112, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]S`32gd07]Om0WNlNd^Ok1l`0_N^^O]2Ra0U1A?@`0Ag0YOg0YOa0_Oa0_Oa0_OO1O1O1O100O100O100O100O10O0100O100O100O1000000O10000000000000000000000000000000000001O000O10000000001O0000001O000000000000000000000000000O10000000000000O100000000O10001O001O1O2PIYCh5Z>C5Jci`4" + }, + "image_id": "73", + "id": 194 + }, + { + "area": 20430, + "iscrowd": 0, + "bbox": [ + 278, + 206, + 89, + 226 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "fTg5?_c0o0ROn0YOg0B=C=G8M2N2O0O2O1O1O1O1O001O1O1N2O1O0M4K5K5K5K5K5L4^OdJcA_5T>mJhAT5W>h000O100O10O0100000000000000000000000000001O00000000000000000O10000000001O00001O1TJnBn3T=oKnBP4o>I8L3G9A`0@?D=G9G9G9G:F9\\O\\Wf2" + }, + "image_id": "73", + "id": 195 + }, + { + "area": 27930, + "iscrowd": 0, + "bbox": [ + 118, + 418, + 265, + 104 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "hT_2o0fc0[JPBd5W?\\O7I5K3M1O1O2N101O000M4M2N2G:K4L6J7POP1VNPVd3" + }, + "image_id": "74", + "id": 199 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 344, + 310, + 110, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "c]S77Vd0?A?B>A?A>fNZ1N2M3N2N2M3N2N2M3N2N2F:N2N1O2N2N101O1N101N101O1N100000000O2O0000000000000O10001O000000000001N100000000O100000000O2O0000000O101O0O2N2N1O10000O101N1O2N2N1N3N1O2N1K6H8H7H9H8H8G9H8`MP^Om1cb0G9H9G8G:G8HUao0" + }, + "image_id": "74", + "id": 200 + }, + { + "area": 31857, + "iscrowd": 0, + "bbox": [ + 86, + 205, + 122, + 258 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bTj12fd04H:E>G9F:jN`Na^Oj1Xa0YNb^OP2Wa0ZN]^OP2\\a0n0I7I7I6I8I7I7I7I7I6J7I7I7I7I6J7I7I7I7I6J6J3M1O1O00O1O100O100O1O10O01O10O0100O100O10000O100O100O100O10000O100O100O100O10000O100O100O10000O100O100O100O10000O100O2O1N5L5J7J4L1N2O2M2O1N3N1N2OB=C>Bf[^2" + }, + "image_id": "75", + "id": 203 + }, + { + "area": 21024, + "iscrowd": 0, + "bbox": [ + 386, + 268, + 95, + 218 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PSn74ad08YOg0ZOd0L4L5K4L4L4^NoMV@U2g?aNa_Od1[`0`1M3M3N1N3N1O1N2O2M3N2N2M2WOXK_Ai4`>ZK\\Ai4b>YK\\Ah4c>[KZAf4e>i0N1O1L4I7M3O1O2O0O10000O100000000O10001O0000000000O1O1000000O100O101N100O1O1O2N1O1O1N2N3M2K5G:F9J7K5K4`LX@U1b`0gNc_O`0Ua0^Om^O?Va0_Om^O>Ua0jN_^O6?l0ea0RO^^Oj0ea0TO]^Oi0ga0TO\\^Oi0fa0SO_^Oh0Uc0A^e<" + }, + "image_id": "75", + "id": 204 + }, + { + "area": 32574, + "iscrowd": 0, + "bbox": [ + 32, + 247, + 121, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "j\\h0b0^b0Fo^Od0k`0^OQ_Og0l`0\\OP_Oh0l`0[OQ_Oi0l`0ZOP_Oj0Z`0lNR_O=`0k0[`0Jb_O;Z`0Hb_O<[`0Fb_O>[`0Ea_O?\\`0S2M3L4M3L]1dN5K6I6K5J7J5K6J5J5L1O1O1O1O2N1N2O1O2N1O1O1O1O1O00001O000010O0001O00001O000000000001O00001O00001O001O001N2O3M6J6J3M1O1N101^IeBb5]=[JgBc5Z=[JhBc5[=YJhBf5[=SJjBk5T>O2M2N2N2O1N3M2O1N2N3M2O2M2N3M2O3lKo@X2U?bMQAZ2Y?ZMm@b2i`0K5K5L4K5K5K:F=C9H4KT`T7" + }, + "image_id": "76", + "id": 205 + }, + { + "area": 39087, + "iscrowd": 0, + "bbox": [ + 110, + 157, + 128, + 302 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mfY25ad09F;F9G:F9eN]NP_On1i`0WNo^OR2k`0V1H9H9G8H8H9G5K1O1O2N1O2N1O3_AoJR=V5gBXKnl0Ta0Gh^O>Ua0Di^O`0Sa0Bk^Oa0Ra0f1N3M]1bN5L5K4K5L4L5J5L9G2M101O00O1O1O100O1O100O1O100O10000O10000O2N1O1O1O1O2N1N2M4L3N3N1O2N2M5L7I7I2N2N1nKP@Z3Q`0dLQ@Z3Q`0cLR@\\3o?bLT@[3g`0O1N3N1N2O2M2O2M2O1N3N2M4M2[NW^O4ma0UOk^Og0ib0J4M2M2O2M6K8Ggg[7" + }, + "image_id": "77", + "id": 209 + }, + { + "area": 34602, + "iscrowd": 0, + "bbox": [ + 29, + 331, + 236, + 145 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "hjg0<]d04L3M4L3M4M3L3N1O2M2O2M2O1O1N2O1N10000O1000O101N100O01O00010O0010O01O0010O01O0001O00010O0100O100O01000O100O001O1O00001O001N2M3M3O00001M3O1O1O00010O001O100O100O1O100O10000O1000000O2O000O2O0O1O2O0O100O10000O010O10000O100O01000O010O0100O0100O0100O0010O01O10O01O010O1O010O010O1O010O010O1O010O010O10O010O0100O010O1O010O010O10O010O0100O0010O0100O010O010O10O01O100O100O100O100O100O1O010O100O100O100O10000O100O10001N1O1O2N1O1O2N2N2]NP]OZ1Xc0O1O2N100O2N1O2N2N2ZO[\\O3ic0JY\\O4jc0IX\\O5Xd0NPii4" + }, + "image_id": "77", + "id": 210 + }, + { + "area": 12972, + "iscrowd": 0, + "bbox": [ + 261, + 293, + 93, + 137 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "WS\\5e0[c0k0D:G9QOP1M2N3O001O00001N1H90O0001O001O01O10O0100O1O010O100O10O01O100O010O1O100O100O1O100O101N1O100O100O100O1O100O2O0O1O2O0O101N1O101N100O2O0O1O2O0O101N1O2O0O2O1N2N3lMa]Oi1jb0M2F;DYMPAg2P?a1001O00100O01000O01O10O0100O100O1O100O100O2N100O2O0O101N1O101N101N1O101N100O2O0O1O101N100O1O100O101N1O100O100O2O0O1O100O101N1O100O100O101N1O100O100O2N100O010O01O00001O010O00001O001O010O00001O001O00001O010O00001O001O001O00001O001O00001O001O001O00001O001O00001O001O001O00001O001O01O01O001O001O00001O001O01O01O001O00001O001O0010O0001O001O1O2N1O1O2N1O101N1O1O2N1O1O2N1O1O2N1O2O0O2N1O2N1O2N1O2N2N1O2O0O2N1O1O2N1O1O2N1O1O2N100O2N1O1O2N1O1O2N1O2N101N1O2N1O2N1O2N1O2N1O2M2L5K4L5L3L5K4L4L4L5K4L4M4K5K5F^l?" + }, + "image_id": "77", + "id": 212 + }, + { + "area": 23607, + "iscrowd": 0, + "bbox": [ + 22, + 371, + 182, + 128 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "UPb0;^d04L4M3L4M3M3L4M1O2M2O2N1N2O001N10O10O0100O100O2O000O01O010O001O100O00O2O01O100O1O100O10O1O010O10O1000O01O1O1O010O1O1O010O1O1O001M3N2N101O1O1O1O1O1N200O100O1O100O10001N2O000O101O000O10001O0O10000O1000000O1000O01000O01000O0100O01000O0100O010O001O10O01000O0100O010O01000O010O10O010O10O10O0100O0100O0100O010O10O10O10O0100O010O1000O0100O010O1000O01iN_TR6" + }, + "image_id": "78", + "id": 213 + }, + { + "area": 33824, + "iscrowd": 0, + "bbox": [ + 196, + 220, + 111, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ffQ46lc0j5iIi1[Od0\\Oc0]O5L000000000000000O100000000000000000000000000000000000000000000000000000000000000000O1000000000001O000000000000000000000000000O10000000000000000000000000000000000000000000000O1O1O1POP1\\Od0]Od0[Od0[Oe0\\Oe0mKV@`2_`0]Mg_Om1l`0bMS@X1Xb0]Ob0@a0IkWm3" + }, + "image_id": "78", + "id": 214 + }, + { + "area": 23040, + "iscrowd": 0, + "bbox": [ + 291, + 281, + 95, + 239 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "eZP6K6_NTNl_OP2^?gNX@a1c?n1M3N2N2N2N2N2nNoJXBR5g=SKTBo4j=SKRBP5m=SKoAP5o=RKnAP5Q>SKjAP5U>l0K4I7L5N1O1O2N100O2O000O2O000O2O000000000000000000000000000000O10000O101O0O10000O2N100O1O1O2N1O1O2N1N3N1N3N2N2hJQB^3U>`LmAW3m>ULWAa3R?\\LQA_1J_O^?POk@\\1OWO`?YOd@\\1Wa0bNl^OY1]b0L6K5J6J7I6EnR[2" + }, + "image_id": "78", + "id": 215 + }, + { + "area": 15717, + "iscrowd": 0, + "bbox": [ + 369, + 338, + 92, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mob79i1Ne`0>d^O2Ya08Q^O6ka0_1J6L4iNSM^@o2`?UM\\@m2[?RMh_O4h0n2^?]M\\@f2c?Y101N101N100O2O0O101N1000001N1000001O000000000000000000000001O000000000000000O10000O101N10001N101O00001N1O2N1O1N3N1O2N1O1L5J5_Ob0K5L4K5H8E;E:He0^O6J7I6J7IhYj0" + }, + "image_id": "78", + "id": 216 + }, + { + "area": 33330, + "iscrowd": 0, + "bbox": [ + 53, + 391, + 201, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "nUV1>[d05K6J4M2N3L3N2N2M4M2M3M4K4M3L4M4K4M2N2M3N3M2N2N3N1N2O2M2O1N2O1N2O1N100O100O2O0O10O0O2O0010O100O100O100O100O100O010O10000O100O100O100O10O0010O010O01O010O010O0010O010O01O010O010O0010O010O01O010O010O0010O010O01O010O010O0010O010O01O010O1O010O0010O010O01O010O0010O01O010O0010O01O010O10O01O100O00100O1O10O01O101N100O2N101N1O101N1O2O1N1O2O1N101N2N2O0O2N2O1N2N2O1N2N2O1N2N3N2M4M2M3M3L5J5KhUR5" + }, + "image_id": "79", + "id": 217 + }, + { + "area": 26496, + "iscrowd": 0, + "bbox": [ + 55, + 326, + 191, + 137 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "\\_U1>[d04L4M2N3L3N3M2M2O1O2M2O2M2O1O1N1000O001N2O0O2O1O2N100O0001O010O001O010O010O010O010O0010O010O010O0100O010O010O001O010O001O010O001L301N101N101O0O2O001O0010O01O10O010O01O0100O010O10O0100O10O0100O10O0100O010O10O01000O0100O010O010O10O010O0100O010O10O010O0100O010O10O010O01000O0100O010O010O10O01000O100O10000O10000O100O2O001N10001N101N101O1N101O1N2O002M2O1O1N2O1O1O1O1O1OC=TOl0UOaVV5" + }, + "image_id": "79", + "id": 218 + }, + { + "area": 42826, + "iscrowd": 0, + "bbox": [ + 238, + 160, + 132, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "XTm4`0]c0o0POP1QOo0QOo0kMV2D;`CWIj:l6lD]IQ;g6eDbIY;P8@`0A?O1N2O1O1O10000O1000O10000000000000000000000O100000000000000000001O000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O0000000000000O1O1B>^Ob0G9G9G9G9G9G9G9H8H8H8H8I7H8H9G9RLS@e2V`0PMW@e2R`0QMZ@d2Ua0E;Fa`0jNm^O1f0Q1b`0dNP_O9a0o0Ta0nNP_Oo0Ra0oNR_Ol0Qa0QOS_Oj0Sa0ROU_Oc0nb0Al\\U1" + }, + "image_id": "79", + "id": 220 + }, + { + "area": 22852, + "iscrowd": 0, + "bbox": [ + 44, + 337, + 115, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Sco08\\d0Bg0YOa0_O:F;D;Di0WOmcn6" + }, + "image_id": "80", + "id": 221 + }, + { + "area": 34352, + "iscrowd": 0, + "bbox": [ + 142, + 228, + 112, + 303 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bno2>oc0`0K5K?@h0YOb0^Oj3\\1K5YMh_Og0[`0XOh_Oc0\\`0[Og_O`0]`0^Og_O<\\`0iNS_O5d0n0\\`0cNZ_O==m0Pa0QOS_Ok0Pa0SOS_Oj0o`0TOU_Of0o`0WOU_Oc0Ra0WO]_O9cWj0" + }, + "image_id": "80", + "id": 224 + }, + { + "area": 17430, + "iscrowd": 0, + "bbox": [ + 24, + 336, + 104, + 165 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "jma07]d0;I6K6_OWOe\\Oo0Tc0b0I6K6J6K4K6J5L5J5L5J5L5J5L5K5J5L5K2M2O1O1N2O1O1N2O1O000O2O001N10000O100000000000010O0000000000000001O00000000000O10001O0000000O3N1N2O1N2O1N2eKd_OV4a`0N2O1N2N2N10VKiAP5S>o0M3M3M3L2O1O2N1N3N1O1O1N2O1O1OO10000O10000O1001O1O1O1O1O1O001O1O01O00001O001O1N1O2M6UIaBR6h=bI]B[6U>L4K6K6J8J6J3M1N1000000O1N2O1O1N2N2N2N2N1O3M3L4L5L3J9H:Hb0^Ok0TOk0SOn0SOY\\Q6" + }, + "image_id": "81", + "id": 226 + }, + { + "area": 20025, + "iscrowd": 0, + "bbox": [ + 265, + 268, + 88, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Vc`5;h1l0d?[OT@n0e?WOU@Q1c?VOV@Q1d?UOT@Q1j?R2L3N2N2M3N2ROdK[A^4c>dKZA_4c>dK[A^4b>eK\\A]4b>n0H9H7O2N100O2N100O2N10001N10001O000O2O00000000000001O00000000000O1000000O2O0O1O100O101N101N1O2O1N1O2N:dJ]An3m>hKWAT4k>jKXAS4j>kKXAR4k>mKVAo3n>oKTAf2W`0UMo_O_1\\b0K5L9C8EN2O1N200O1O1O1O1O1O1O1O1L4H8K5O1O1O1O1O1O1000000000000000000000000000001O000000000000000000000000000000000000000000000000000001O000000000000000000000000000M3K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K5K6J5K5K6dL\\_O[2i`0aM]_OX2i`0cM]_OV2i`0eM]_OU2ha0J8H9G7I7I6K6I7I9GVT:" + }, + "image_id": "81", + "id": 228 + }, + { + "area": 15876, + "iscrowd": 0, + "bbox": [ + 29, + 323, + 107, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "d`d03bd07K9H;F8G8]Ob0J6J6J6K6I6J6J6K5J6J4M4K4M2N001N1000O01000O010000O10000O01000O10000O10000000000000O100000000000000O1O1O1O2N100O1O1O1O101N100O1O2O1N101N101N2O0O2O1O3L5L1O1N2O1O1O1O1O2N2N3M6IN1O1O2N100O1O10000O10001N101O1O0O2O001O1O001O1nAoIY=R6eBQJY=P6eBRJZ=o5dBSJ[=g6O4L001O00O2N100O100O2N100O100O2N100O1O2N2N1O2N2N2L4mJjA]3[>dKbA;6l3m>RLUAg3R?WLQAa3V?^Lk@]1FDk?kNc@\\16jNh?CY@^1]b0I6J7J5K6LmeY3" + }, + "image_id": "82", + "id": 230 + }, + { + "area": 50080, + "iscrowd": 0, + "bbox": [ + 327, + 200, + 159, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "jSe68Xd0?B>bN_1CB>AP1QOj0nNaLV_Oa3f`0dLW_O_3e`0=N3M3N1N2O1O1N2O1N2O0O2O001N100O2O000O2O00001O000000000000000O1000000000000000000000000001O000000001O0O100O2N100O2O1N101N1O2O1N101N2N6J6J2N2N2L4Ligk4" + }, + "image_id": "83", + "id": 234 + }, + { + "area": 26190, + "iscrowd": 0, + "bbox": [ + 254, + 246, + 96, + 269 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "YiX5l3l`06I6K4L5K4M3M3L5L3M3L4M4L2M3N1O2M2O1O2J5H9F9H7SOn0O1O0000010O3N1O1N2O1O1O1O1O000000001O000O1000O100O1O1O1O1O1N2O11O00100O000001O000O2N1O1O2N1[I[CT5gUd0d0]O7A`0B>K4M4K4VNoMg@T2U?RNe@R2W?TN`@S2]?g1L4M2M4M3N2M3N2N1O1O2ROeJ[B[5a=lJ[BU5d=mJZBU5d=mJYBU5f=mJVBV5i=o0N1N2K5K6L3O1O2N100O2O0O10000O10001O000000000000O100000000O100000000O10000O1O1O1O2N10001N1O1O2N1O1N3N1M3N3I6F;E;H8K5PLm@e0>dNi>=SAj0``0ZNV_O9=W1Ua0fNm^OU1Xa0iNk^OR1Ya0lNi^OP1[a0nNh^Om0\\a0POg^Om0fb0K6K=BbcX1" + }, + "image_id": "83", + "id": 236 + }, + { + "area": 41580, + "iscrowd": 0, + "bbox": [ + 88, + 150, + 134, + 307 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "jQl16cd0:F;E:F;E:F;D;F;D;EE;E;DBPQg5" + }, + "image_id": "84", + "id": 237 + }, + { + "area": 13524, + "iscrowd": 0, + "bbox": [ + 209, + 283, + 91, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PkZ46bd0c0\\Oe0\\Od0]Oc0]Om0SO1G_LW_Od3e`0:O1O100O1O1O101N100O10000O100O2O000O100O100000000O100000000000O100000000O101O0000000O10000O10000O10001O000O10000O2O1O0O2O001O001O1O0O2O1O1O1O1ZLT_O\\3Va0O1O1O1N2iNi^R4" + }, + "image_id": "84", + "id": 238 + }, + { + "area": 28140, + "iscrowd": 0, + "bbox": [ + 293, + 185, + 104, + 267 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "[aQ6n0oa0m1QOo0N2O1K5L4O1O1O1N2O1O1O1N2O1O1O1N2O1O1O1M3K5K5L4K5K5D<]O[JPBf5f=eJXB\\5e=n0O1O100O100O1000000000000000000000000O1000000000000000000000000000011N1O1O100O1O1O2O2M3M3M3N1NSITCm5kB?D;H8H8G:G9G9F`0Ad0\\OooS2" + }, + "image_id": "84", + "id": 239 + }, + { + "area": 32032, + "iscrowd": 0, + "bbox": [ + 96, + 412, + 285, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "l_Q2f0nc0;E:H6M4L3M2N1O100000000000000000000000000000000O1O1O1O2N2N3M2N2O000000000001O1O0O2N101N2N100O100O1O100000000000000000O100O100O100O2N1O2N2N1O2N101N2O0O2O0O2O1N1O2O0O2O1N100O2O0O101O000O10000000000O101O0000000O100000000001N100000001N100000001N1000000O2O000O100O10000O10000000000000000O10000000000000000O10000O10000000O10000O10000O1000000O2O000O1000000O10000O100000001O0O101O000000000O100000000000000O1000000000000000000000O100000000000000O100000000000000O100000O10000000000000000000000000000000O1000000000000000000000001O001O1O1O2M2O2M3N2M2N3M3M4K6K6J5K6H;YOac]2" + }, + "image_id": "84", + "id": 240 + }, + { + "area": 61060, + "iscrowd": 0, + "bbox": [ + 26, + 195, + 214, + 283 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bWe03ed04L2N3M2N2N3M2N2N3M2N2N3N1N3M2N2N3M2N3M2N3M2N3M2N3M2N3M2N3M2N2N3M2N3M2O2M2N3M2N3M2N3M2N2N3M2N3M2N3M2N3M2N3M2N3M2N2O2M2N3M2N3M2N3M2N3M2N3M2N2N3M2N3M2N3M2N3M2N1O100O000000000000000000000010O0001O01O100O01N10010O01O10O01O10O01O010O1O100O1O101N2N2O1N2N2O1N2O1N2N2O1N2N2O1N2N2O1N2N2O1N2N3N1N2N2O1N2N2O1N2N2O1N2O1N2N2O1N2N2O1N2N2O1N1O01N10001O04L9H8G7I3M3N2M2N1O2N2N2O1N1O2N2N2O2M3I7DD7I3M2M3N2L4M3M2M5L3L5J5L5VOi0dN]1UOl0Fm]R4" + }, + "image_id": "85", + "id": 242 + }, + { + "area": 22892, + "iscrowd": 0, + "bbox": [ + 287, + 245, + 96, + 235 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "mon57Wd0?lNT1I7I5oMcN_@b1^?eNY@`1d?gNS@^1j?k1M2N3M3N2N2N1O2N2oNTKQBn4m=ZKjAi4T>YKjAh4V>YKfAj4Y>l0O2K4I7K6N2N1O10000O10000O10000O2O0000000000000000000000O10000O100O100O10001N100O2O000O1O2N1O1O2N1N2O2L4M3RKcAV3e>cLcAP3Z?]Li@U3d?iL_@\\1OQOm?BW@X1[a0fNi^OT1^a0gNe^OT1db0L4K7I8HQ\\^2" + }, + "image_id": "85", + "id": 243 + }, + { + "area": 19224, + "iscrowd": 0, + "bbox": [ + 367, + 317, + 107, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "_\\b76Zd0=CG:L3O101O001O00001O001O1O1O001O1O1O001N2N2N1N3L4C=N2O0000001O000000001O000O10001O000000001O0000000010O0000000010O00000001O000000001O00010O0010O01O010O1O0O2N1O3K4H8G9F:RM\\^O\\2Vb0G:F9G:F:E:G=Cbkd2" + }, + "image_id": "86", + "id": 246 + }, + { + "area": 28749, + "iscrowd": 0, + "bbox": [ + 355, + 238, + 110, + 258 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "VdX75]d08G9G9G9G9G9J6L4M3ZNbNl_Ob1P`0f1N2N2N2N2N2N2N2O1O1O2N2N2N2N2N4L4L4mNSKRB`5\\=bJaB`5]=bJ`Ba5^=bJZBd5e=j0N1O1O1M3K5K5M3O1O2N100O10000O10O10O10O10000O10000O10000O10000O10000O1O1O100O1O1O1O1N3N1M3K6K4K5K6K4K5L5J5L4K6hNW1I7L4N3M2jMY_O8i`0@`_Oi0Xa0UOk^Og0Xa0WOP_O>Ua0_OX_O1kci0" + }, + "image_id": "86", + "id": 247 + }, + { + "area": 38259, + "iscrowd": 0, + "bbox": [ + 65, + 429, + 326, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "a[]1<]d03L4QOJT]O9ib0JU]O7HAfb0;_]O6HBgb0:_]Oc0^b0^Ob]Oc0\\b0_Ob]Oc0\\b0^Od]Oc0Zb0^Of]Oc0Tb0Cj]O?Qb0X1N2N1O2N100O2O0O101N10000O2O0O101O00001O000000000O100O100O100O1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000O100000000000001O00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000O100000000000000000000000000000000000000000000000000000001O0O101O0O10001N10001N10001N100O2O1N2O0O2N2N2N1O2N2N2O0O2N2N2N2N1O1O100000001O0O10000000001O0O10001O0O10001O0O10001O0O10001O0O1000000O10000000000000001O001N1O10O010000000O2O1O1O000O10000000000000000000000000000001O1O1N2N2N4L3M4L`0^OhPY2" + }, + "image_id": "86", + "id": 248 + }, + { + "area": 59648, + "iscrowd": 0, + "bbox": [ + 2, + 235, + 255, + 232 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "R[22ed04M3N2N2N2N2N2N2N2N2N2N2N2N2N2N1O2M3N2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N1O2M3N2O1N101N2N2O0O2N2O1N1O3M2N2N2O1N2N2N2N2N2N2O1N2N1O00000001O01O001O001O010O0000001O01O0001O00000010O0001O00000010O000001O0000010O00001O0001O01O0000010O00000010O0000010O0001O00010O000010O0001O00010O00001O01O0001O00010O00001O000010O0001O00001O01O01O00001O00010O00001O000010O0001O00001O00001O000100O2N1O100O1O2O0O1O1O101N1O1O2O0O2N101N1O2N101N1O2O0O1O2N101N1O2N101N1O2O0O2N1O2O0O2N1O00001N1M4L3N20000Je]OnM[b0S24^Ni]Oe0Vb0POV^Oo0ja0POY^Oo0fa0oN]^OQ1ba0nN`^OR1aa0kNa^OU1cb0O001N2O1O1O3L5KnQo4" + }, + "image_id": "87", + "id": 249 + }, + { + "area": 13140, + "iscrowd": 0, + "bbox": [ + 229, + 303, + 89, + 145 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ikg4S1fc0d0[Of0ZOU1lN00OM4O11O1O100O1O1O1O1O10O0000001I700O01O100O10O0100000000O01000000000000000000000O10001O0000000O10001O0000000O101O001O001O0000002N000O2O1O2N1O8H1N3N1O2N1O2MWff3" + }, + "image_id": "87", + "id": 250 + }, + { + "area": 19008, + "iscrowd": 0, + "bbox": [ + 311, + 231, + 95, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "fl]6T1dc02TNYOb_Ok0Y`0\\Ob_Of0Z`0A^_Od0^`0IR_O>k`0j1O001N2O1O1N2O0SO\\Le@e3X?`Ld@b3[?aLa@a3^?bL]@a3b?dLX@^3g?j001C=M3N2O1O01000O100000O0100000000O1000000O10000000O101O00000000000000001O000000000000001O00000O101O1O1O001O1nKj@^2W?_Ml@`2f?mL]@Q3c?mL`@R3a?kLc@[1H_Og?TOc@Y1c0hNn>Gf@\\1\\b0K4L6J8H7I8HQTn1" + }, + "image_id": "87", + "id": 251 + }, + { + "area": 36542, + "iscrowd": 0, + "bbox": [ + 157, + 409, + 301, + 120 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "TjY3;^d0f0[OS5M3M5J8I6J7I7H5L2N2N2M2O1O1O1N2O1O1O1N2O001O001O00001O00001O00001O0000000001O000000001O00001O1O1O1O1N3N5K5K4L2M2O001fI[B]5e=bJ^B[5d=bJ`B\\5b=`JbB]5b=_J`B`5^>N2N2O1N2O1N2O1N1O3M2N3M4L6ULX@Y2m?`M[@Z2h?aM`@Y2c?bMe@X2Ra0L3M3M4L3Mb0^O7I7I8H7_Obn\\7" + }, + "image_id": "88", + "id": 253 + }, + { + "area": 46631, + "iscrowd": 0, + "bbox": [ + 113, + 239, + 210, + 220 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "T\\^22gd05Y\\O5Vb0Od]O9Vb0Lc]OC9F3M2N01O01O0001O01O00010O000010O0001O01O01O00010O0000010O000010O0001O01O01O00010O000010O01O00010O000010O0001O01O01O0010O0001O01O01O00010O001O01O01O00010O000010O0001O010O000010O0001O01O01O0010O0001O01O01O00010O001O01O01O00010O000010O1O100O100O1O100O1O101N1O2O0O101N1O101N1O101N1O101N101N1O2O0O2N101N1O2O0O2N101N101N1O2O0O1O01O00001O001O0000B>00Jf]OnMYb0S2612M5L3M4L4L3M2N3L3N3POm\\O3Vd0G[]e3" + }, + "image_id": "88", + "id": 254 + }, + { + "area": 14670, + "iscrowd": 0, + "bbox": [ + 289, + 302, + 89, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PQm57Vd0?A`0@?B=B?A>I7N2N2O1N2A?M3N2H701O001O001N101O001O000L4L4O10000O10000O1000001O00000000000001O00000000000O10000O2O0O101N10001N100O2O000O2N1O1O2N1O1N3M2M4I7E;E;E;bMn]Og1^b0SNh]Ob1nb0E;E;E=Cge_2" + }, + "image_id": "88", + "id": 255 + }, + { + "area": 25602, + "iscrowd": 0, + "bbox": [ + 362, + 207, + 101, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Zh_7:oc0d0@>H8lMfN_@a1^?cNZ@d1[?iN\\@_1^?gNY@a1c?m1M201N3N3L3N2N2M3O1N2N2N1O2N1O1O2N1O000N2O1O1N2I7J6O1O3M4[OnI\\BW6`=c0G9N1O2O1N1O10000000O10000O1O1O1O001O1O1N20000O100O1N2O1O1O1O1O2K4O1L4H8H9H7K5K6J5K5aKUAj2Q?TMgAP2^>oMdAk1a>TNaAf1e>nMgAl1g`0J6J7I7I8H7H`0AURi0" + }, + "image_id": "88", + "id": 256 + }, + { + "area": 55536, + "iscrowd": 0, + "bbox": [ + 31, + 159, + 155, + 355 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "nof0;\\d08H9G8C>H8H7_Ob0F9H9lNXMf_OR3S`0R1H8H8H8I7I7I7I7I7I7H8I7I7I7I7I7I7I7I7I7I7I7I7I7I6J7I7Ii2N2N2N1O2L3N2N2M2K6G8K5N2N2nNeI_Cb6aK5L5J5K5L4K6]NWMm@n2o>]Mf@g2U?b1L4L3M3O2N1N2O2N2M2O2N2M3N1O1N3N1oN^JiBc5V=`JfBb5Z=_JdBc5Z=`JcBa5\\=o000O2L3I7L4M4M2O1O100O100O100O01000000000000000000O10000O10000O10000O1O100O100O1O1O1O2N1O1O1N3L3M3H8H9L3N2J7F9I7M3M4gNX1M3M4bM`_O=d`0ZOf_Oa0]`0^Of_O=^`0Ae_O<]`0fNU_O7a0o0Ra0oNQ_On0Qa0POR_Oj0Sa0TOP_Oe0Va0XOQ_O?nb0G9GWVP1" + }, + "image_id": "89", + "id": 260 + }, + { + "area": 38776, + "iscrowd": 0, + "bbox": [ + 33, + 228, + 130, + 295 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "hQi0a0Td08J6K5J8I9G9G9G9H8SM\\MUCk2d<_MQCi2i<`MmBe2neMd@a2X?c1L4L4L4M3N2M2O2N1N3N1N2O2M2O1O1TO]J_Bf5]=aJ^B`5`=cJ]B_5a=dJ]B^5a=dJ]B]5c=m001N101G9F9O1O1O1O1O10001N100O10000O100000O10000000000O0100000O100O10000O100O1O2O0O1O2N1O1O1O2M2N2L5J5K5K5K6J5K5K6J5J6YOh0YOg0^Md_Oa0``0[Od_Oa0_`0]Od_O`0_`0^Od_O=``0Ab_O;b`0gNR_O7?n0Wa0POk^Ol0Ya0ROk^Oh0Za0TOl^Of0Wa0UOQ_Od0hb0IjRT1" + }, + "image_id": "90", + "id": 264 + }, + { + "area": 69360, + "iscrowd": 0, + "bbox": [ + 43, + 384, + 407, + 169 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "SPQ13ed04K4M3M3M3L3N2N2N2N2M3N2N2N2M3N2N3M2N2M3N2N2N2M3N2N2N2O2O1N2O1O1N3N1O1N2O1O2N1O1O1O1O2N1O1O1O1O1O1O1O1O1M3L4L4L3M4L4N2M3M3N2M3N2M3N1N3M2O1N2O1O1O1O1O1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000O1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O0000000000000000000000000000000O100000000000000000000000000000000000000000000000000000001O0000000001O1O1O1O1O1O002N2N2N2N2N2N3M2N2N2I7I7K5K5K5K6H7I7I7I7J6I7I7I7I7J7H7I7I7IV\\Q1" + }, + "image_id": "91", + "id": 265 + }, + { + "area": 25648, + "iscrowd": 0, + "bbox": [ + 113, + 169, + 111, + 228 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]g[2`0mc0d0H9F9H8G:F9H9F9H9F9H6VM[LSDi3j;cLjC^3UR100O10000O10000O1000000000000000000000O100000O100000000000000000000000000001O00001O001O00001O001O1WJnAh4Y>PKjAn4a>fJcAW5V?J7I3M2N3M3M7I8H1O2N1N2O1O1O1O1O1O1O1O1O1O1O2N2N2N1O2N2N2Na1_Ng0YOg0YOa\\f5" + }, + "image_id": "91", + "id": 266 + }, + { + "area": 12495, + "iscrowd": 0, + "bbox": [ + 211, + 275, + 104, + 118 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Zi\\48`d0T1mNR1mN2O1O1O1N2O1H^MW^Oc2ga09N2O1O100O1O10000O100O100O1O100000000O10000000000O100000000O1000000000000000000000000001O0000000000001O000000001O001O000O2O001O00001O00002N00002N001O1O2VMV^O`2Sb0O2N2N1N3Cf`0n1N2N2N2N2O1N2N2N2O1O1O1O1O1oNbLe@_3X?hLc@Y3\\?iLa@Y3^?jL_@W3`?kL\\@X3d?o0O1O1K5G9K5O100O1O100O100O100O1000000O2O000000000O100000000000000000000001O0000000000000000001O00001O001O0000000000001O1O1O0VLn@V1i?bN`@e0X`0YOk_Oc0X`0ZOl_Ob0W`0^N]_O9>V1m`0hNV_OS1n`0jNV_OR1m`0lNV_OP1m`0nNV_On0^b0L:F4J7Gelj1" + }, + "image_id": "91", + "id": 268 + }, + { + "area": 25185, + "iscrowd": 0, + "bbox": [ + 200, + 292, + 114, + 218 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "_[T4`0Yd0o0POd0]O8G9H>B]1bN5L3C>K4M2M3N3M2O1N3M2O1N2O1N101N1O2O0O2O1O0O2O001O0O10001O0O1000000O2O0000000000001O00000000001O00000000000000O10001O00000O10001N100O101N10001N100O2O000O2O0O2O000O2O0O1O2N1O3M2O1N2N2N2N2jJg@h4g?N2M3M3B>XOg0YOi0WOi0WOj0UOZeh3" + }, + "image_id": "92", + "id": 269 + }, + { + "area": 18715, + "iscrowd": 0, + "bbox": [ + 122, + 120, + 94, + 196 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "XUb2k0lc06K6I6K8I9G9G9G:E:F8bMnLgBU3V=WM]Bk2c=VMPBV3P>kLXAl3g>T10000O10000O10000000000000000000000000000000000000000000000000000000000001O00001O1O1oJQAU4\\?]Kh@`4]?ZKg@c4k?M2N5K6J6J6J4L2N1N3N1O1O1O1O1O1O1O1O1O1O3M3L4M4L3M3MY1gNngi5" + }, + "image_id": "92", + "id": 270 + }, + { + "area": 14760, + "iscrowd": 0, + "bbox": [ + 292, + 152, + 89, + 163 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "oiP62dd05QN:c^OLYa0;_^OJ]a0l1M3L3N2M3O1O1O1O1O1QOTMn_On2Q`0VMk_Ok2T`0XMh_Oj2W`0XMf_Oj2Z`0WMc_Ok2\\`0WMb_Oj2]`0j0O1B>M3M3O1O1O1000000O1000000000000O100000000000000001N1000000000000000000000001O0000000O10001O1O001O001`LX@l1i?RN\\@i0Xa0cNl^OU1Za0iNh^OR1\\a0mNg^On0]a0oNf^On0^a0mNh^On0gb0J5K6JP_^2" + }, + "image_id": "92", + "id": 271 + }, + { + "area": 46704, + "iscrowd": 0, + "bbox": [ + 67, + 307, + 335, + 138 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "gV_15cd03N2M3M3M2O1N2N2M3N2N2M3N2M4M2N2M3O1O100O1O101N2O2N1O2N1O1O2N1O1N3N1O1O2N1O1O2N1O1N3L3N2J6K5M3N1N3M3M2O2M3M2O2M3N1O1O1O1O100O1O100000000000000000O10000000000000000000000000000000000O10000000000000000000O100000000000O10000000000000000000000000000000000O100000000kL^@R1b?mNf@l0Z?SOVA>j>AnAHR>6Z3O1O1O1Cl[O3XUk1LZ_UN1b[O1oc0>O1O1O1O001O1[^O2\\>0RA`0n>BS@[1m?i10000000000000000000000000000000000000000000000000000000000O100000000000000000000000000000000000000000000000000000000000000001O1O1O2N1O1O2N2N2N2N2M3M3_Oa0F;F9F:I7I8G8I8F9F9K5M_QP2" + }, + "image_id": "92", + "id": 272 + }, + { + "area": 39650, + "iscrowd": 0, + "bbox": [ + 109, + 163, + 121, + 324 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ViY2>Wd0;E:G9I7I:F=C=C=C=DPa0AS_O;Pa0lNe^O3>m0da0QO`^Oi0ca0VO`^Of0ca0WOb^Od0ob0J6JonW2" + }, + "image_id": "93", + "id": 275 + }, + { + "area": 43335, + "iscrowd": 0, + "bbox": [ + 91, + 296, + 320, + 134 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "hin14dd03L6J3N3L3M3N2N2N2N2N2M3N2M3O1O1O10000018H8H8I7H8IfVT2c0dUkMR1V`0jNo2N2N2N2O1O1N200Ommg1D`RXN1h^O3a=2R_OKh2>U>N_A=a>ESAe0m>\\Oh@n0X?TO\\@V1d?mNo_O]1Q`0eNc_Oe1]`0\\100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O001O1O1O1O2N1O2N1O2N2M2F;H7H8IB3M3Mb0^Oe0[O7I7I8G8G;E=C=CA?Ag0YO6K6I[f]6" + }, + "image_id": "94", + "id": 277 + }, + { + "area": 30672, + "iscrowd": 0, + "bbox": [ + 163, + 242, + 107, + 283 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bc]37`d0L3ZNlMa@Y2T?SNg@P2U?WNb@o1Z?]NV@l1g?e1M3N2N1M4L3O2N1O2N1O2N2POiJZBX5e=jJXBY5f=jJWBW5h=kJVBW5h=n0O1N3I6I7N2O2N1O1O1O2N1000001N100000000O100000000O10000000000000O10000O2O0O100O10000O1O1O2N1O2N1O2N1O1O1O1M4L3K5H8I8G9G9H7VLk@f02aNY?`0n@i0=VNh>o0m@e0``0\\NW_O:;V1Ua0hNn^OT1Ua0jNm^OT1Ua0jNm^OS1Va0kNm^OQ1Za0iNk^OQ1cb0L4K5@Tao0" + }, + "image_id": "94", + "id": 280 + }, + { + "area": 64566, + "iscrowd": 0, + "bbox": [ + 104, + 238, + 305, + 210 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "l`X25dd09G9G9G9H8H7I7I6J7H7J7I4L3M2N1O2M2O0O10O00100O01YOoLe_OP3X`0^M]_Ob2b`0l000O10O100000O100000O10O1000000O2O000O10001N10000O2O000O10001N10000O2O000O10001N10001N101O1N10000O101O0O10000O10000O2O000O10000O101O0O10000O01O1O001O10O0100O010O10O0100O010O1O010O100O010O100O010O10O0100O10O0100O10O0100O10O0100O010O1O010O10O0100O010O10O0100O010O10O0100O00100O010O00100O010O1O010O1O010O10O0100O010O10O0100O010O10O0100O010O10O010O0100O10O0100O10O0100O010O100O010O100O010O10O001O0100O2N100O2O0O101N1O101N100O2O0O1O2O0O101N100O2N100O101N100O2O0O101N10001N100O2O0O101N100O2O0O101N100O2O000O101N101N1O1O2I6G:F9G9J7J5K6J6J6D]ll1" + }, + "image_id": "95", + "id": 281 + }, + { + "area": 85250, + "iscrowd": 0, + "bbox": [ + 86, + 244, + 340, + 249 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "ijj19[d0=F7J3M3N2N2O1O1O1N2@fN^]OZ1ab0iN]]OW1bb0a0O1O1N2O1O1O1O1O3_OnMT^OY2fa0b0L5L4LJ5K6J5K5K6I6I8F9G:I7Ldmj1" + }, + "image_id": "98", + "id": 284 + }, + { + "area": 41400, + "iscrowd": 0, + "bbox": [ + 152, + 249, + 224, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "^iU3c0Ud06J6J6J5L3M4L3M3M3N3L3N1N2O2N1N3N1N2N3K4M3L5L3N2N2N2N2M3O1N2O1N2O1O0O2O1N101N2O001N101N101N2O000O100O100O10000O100O010O0100O001O0100O10000O100O100O10000O100O100O10000O010O10O010O10O01O001O00100O0010O01O010O10O01O010O00100O0010O010O01O10O01O010O0010O0100O0010O01O010O1O010O010O00100O0010O01O010O10O01O010O00100O00100O100O1O100O1O100O2N100O100O1O100O1O101N2O0O2N101N2N101N2N101N101N2N101N2N101N2N2O1N2O1N2N2N2O1N3M3M3M3M3M3K5K6J6K5J>Bida2" + }, + "image_id": "99", + "id": 285 + }, + { + "area": 46886, + "iscrowd": 0, + "bbox": [ + 130, + 271, + 237, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "dSh2?Xd08I6I5L4L3L5L4M3M3M4L4K5L2N2N3M2N2M3O1N1O2O1N1O2O1N1O2O1N101O0O2O1O0O2O1O0O2O1O0O2O1O001O1O001O1O001O1O001O1O001O1O010O1O001O1O1O001O1O001O1O001O1O10O0100O010O1O010O10O0100O10O0100O010O10O0100O10O01O10O0100O010O100O010O10O0100O010O1O010O100O010O10O0100O010O100O010O10O01O10O0100O010O100O010O010O01O001O00001N101N101O0O2O0O2O001O001O001O001O00001O001N101N101N1O2N1O2N1O1O2N1O1O2N1O2N1O1O2N1O1O2N1O2N1O1O2N1O1O2N1O2N2N2M2O2N2L4L4M3M4L3M4L6J7I6I5J6J\\fj2" + }, + "image_id": "100", + "id": 286 + }, + { + "area": 46872, + "iscrowd": 0, + "bbox": [ + 65, + 289, + 371, + 125 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "WU_1`0Yd02N2[OAl\\Ob01@Vb05f]O=MEZb03f]O9NGXb03h]O7OIUb03k]O4OKTb03l]O3NMSb02m]On0Qb0TOn]On0oa0P1O0O1O1O2O1N1O2N2O000O2O000O2O00001N1000000O10001O0O2O000O2O001O0O1000001O0000000000001O0000000000000000000001O00000000000000000000000000000000000000000000000000000000000000000000000000001O0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O00000000000000001N10001N100O2N10001O0O1O2N2O1N101N2O1O0O2O1N2N2O0O2N2N2N1O2N2N2N2N10001N10001N10001O0O1000001O000000000000001O0000000O10000O2O000O10000000001O000000000000001N10000O101O0O2O001O0000O2N2N2N100000000000000000000001O00000000000000000000001O0O2O0O2N1O2N2N4L4J6J6J5KUnY1" + }, + "image_id": "101", + "id": 287 + }, + { + "area": 51054, + "iscrowd": 0, + "bbox": [ + 139, + 253, + 200, + 253 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PYm2Q1hc03K5M3M4K4M3M3M3N2N2N3M2M3N2N2N2N2M4L3M3M3H8M3M3M4L3M3N2N2N2N2N3M2M3N2N2N2N2N3M2N2O1N1O2O0O2N101N1O100O1O1O1O1O1O1O1O1O1O1O1O001O001O0010O0100O02O0O100O1O1O100O1O2N1O1O1O100O1O1O101O0000000001O0001O01O0000001O0000011N2N00004L001O1O010O1O001O001O1O00001O00000000O1O100O1O100O1O013L1O1O1O1O2N1O1O1O2N3M2N3M2N3`Lg_OX2]`0^Mk_Oa2Z`0SMo_Oj2Sa0N2N1N3N2M4M3L4M1N2O1O1N2N2O1N1O3M2N2N2N3N1N2N2N3M2N2N3M2M3N3L3N3H9K5LTWZ3" + }, + "image_id": "102", + "id": 288 + }, + { + "area": 29750, + "iscrowd": 0, + "bbox": [ + 144, + 260, + 174, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "acP3`0Vd07J6L4L4L3M4L2M3J7K4N2N3L3N2N2M4M2N2M3N2N2N2N2N2O0O2N101N2O0O2O0O2N1O2N101N1O2N2O0O2N1O1O100O1O1O100O1O2N1O100O1O1O100O1O001O010O1O0010O0000000010O1O1O100O1O001O010O1O0010O01O000010O0001O01O001O001O001N2O001O001N2O1O001O1N2O1O1O1O1N2O1O1O1O2M2O1O1O1O1N2O1O1O2N1O2M2O2N2N1O2M2O2N1O2N1N3N2N1O2N1N3N2N2N2N2M2O3M2N3M2M3N3M2M4M2M4M3K5J8HV\\g3" + }, + "image_id": "103", + "id": 289 + }, + { + "area": 29684, + "iscrowd": 0, + "bbox": [ + 175, + 253, + 180, + 163 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "hQd3:Yd0O2N1N2O2N1O1N3N2N1O2M3N1O2N2N2L3M5eNV_O^No`0`1T_O[NPa0b1T_OYNPa0e1T1M3L4L4L4I7F;E[4^A]Kg>b4]ARKm>l4a0O2N1O2M2M4M2N3N2N2M3N2N2YNd_OmN^`0o0i_OiN]`0S1h_OeN^`0W1h_OaN_`0[1f_O]Na`0^1`1K6IWma5" + }, + "image_id": "109", + "id": 297 + }, + { + "area": 22550, + "iscrowd": 0, + "bbox": [ + 225, + 293, + 204, + 109 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "XXe4o0`c0Q1VO5M3N2N3N1N2N3M2N2N2M2O1O1O1O1000000000010O000000000001O0000000000000000000000000001O00000000000000000000000000000000000000001O00000000000000000000000000000000000000001O0000000000000000000001O000000000000000001O0000000000000000000000000000000000000000001O00000000000000000000000000000000000000000000000000000000000000000001O1O0O2N101N2N101N2O0O2N2O0O2O1O0O1000000000000000000O2M3L5L3M5K7H8F:G8_Obk]1" + }, + "image_id": "109", + "id": 298 + }, + { + "area": 33300, + "iscrowd": 0, + "bbox": [ + 47, + 308, + 299, + 110 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "aUR1;Yd0a0_O9G9G:H7K5K4L3M4L3M3O1N2N2N2N1O2O0O10000O2O000O10000000000000000000000000000000000000000000000000000000000001O000000000000000000000000000000000000000000000000001O00000000000000000000000000001O000000001O0O10000O2O000O101O0O10000O2O000000001O0000000000000000001O00000000000000000000000000000000000000O2O00000000001O0000001O00001O0O1O2O0O2O00001O00000000000000000000000000000000000001O00001N1O101O0O10001O000O2O000O2N1O101N2O0O2O1N2N101N2O0O2O1N2O0O101N10001O0000000000000000000000000001N101N101N2O0O2O0O1000001O000002M2N2M3N2N2O0000000000000000000000000000001O00001N1O1O2N3M4H8FlhU3" + }, + "image_id": "110", + "id": 299 + }, + { + "area": 26368, + "iscrowd": 0, + "bbox": [ + 331, + 205, + 127, + 205 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "_Vj69Zd08H7I8H8H8H:S^OZNY`0\\2Q_OlMg`0X3H8H8H8H8K5M3M2N3M3O0O2N1O2N1O2J6I6O2N1O2O0O101N100O2O000000001N100000000000001O00000O1000000000O1000000000O010000O10000O2O000O100O2O0O100O1O2O0O100O101N1O1O1O2M2O1O1L4K6J5K5K5K5K6J5M3M4M2M4K4J7J5J7J5M4L4L4J6G9YN[]OQ1nb0gNY]OS1[c0J7I6K;DfPm0" + }, + "image_id": "110", + "id": 300 + }, + { + "area": 39162, + "iscrowd": 0, + "bbox": [ + 98, + 176, + 121, + 320 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "YdR2d0Sd0;E:G:F:F:F9H9F:F:G8H9G9GbN]1dM\\2dM\\2hNX1N2N3M2N2N2N2N2N2N3M2N2O1N2N2N2O2M2N2N2O1N2N2N3N1N2N2N2O1N3M2N2YOg0M3M3N2N3M2O1O1O1O1O2N1O1O1O0000O100O10000O100O100O10O10O100O10000O100O100O10000O100O100O10000O100O100O10000O100O100O10000O100O100O10000O10O010000O100O100O10000O100O100O10000O100O100O2O1O0O2@`0bF\\E\\8f;G9F:G9G9G9G9G9H8H8I7H8H8H8H8H8H7I8H9G8H8H8H8H9G8H8H8H9G8H8H8H9G:F[[W2" + }, + "image_id": "111", + "id": 302 + }, + { + "area": 39360, + "iscrowd": 0, + "bbox": [ + 29, + 415, + 327, + 119 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "[bf0;Vd0b]OOlb0NW]O0Rc0GV]O1X^n2" + }, + "image_id": "112", + "id": 303 + }, + { + "area": 56724, + "iscrowd": 0, + "bbox": [ + 272, + 145, + 162, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "\\Xc57Td0?A?B>A?A?hNX1G9G9G9C=]Oc0]Oc0ED;E;EM3M3M5K6I8I6J4L2N3M2M2O2N1O1O1O1O1N2O1O1O1O1O1N3N2N3M2N2N3Md0[OV1kNU1kNcoW6" + }, + "image_id": "113", + "id": 305 + }, + { + "area": 77172, + "iscrowd": 0, + "bbox": [ + 89, + 333, + 353, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "bVl1?Zd06J7Jb0^O3L5L6J8H9G8H5J3N3M2N4L6J7H6K3M3M3M7I9F;F9G6J1O1OO01000O10000O01000O10000O010000000000O10O1O100O10O1000O100000O10O1000000O0100000O1000000O10O100000O1000000O1000000O10O100000O1000000O10O1000O100000O0100000000O0100000O1000O01000000O01000O100000O01000000O10O10O1000000O01000O100000O010000O100000O01000000O1000O01000000O1000O10O1000000O1000O10O1000000O10O1000O1000000O0100000O1000000O0100000O100000O01000000O1000O10O1000000O1000O10O1000000O10O1000O1000000O10O1000O1000000O0100000O100000O01000000O10O100000O10O1000O10O1000O1000O10O100000O010001O0O2O001O0O2O00001N10001O0O101O000O101O000O2O00001N10001O0O2O001O0O2O00001N101N1O2N1O2L3M4H7E;I700000001O0000000001N10000O2OZNU^O=ka0AW^O?ia0^OZ^Oa0ga0\\O\\^Od0da0YO_^Of0ba0WOa^Oh0`a0UOc^Oi0_a0TOe^Oj0\\a0SOh^Of0_a0VOf^O?da0]Od^O5TlW1" + }, + "image_id": "113", + "id": 306 + }, + { + "area": 31868, + "iscrowd": 0, + "bbox": [ + 74, + 114, + 123, + 256 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "_cc1d0Td08H8H8H8H8G9H8H8mLaM]Cg2\\N2N3M5K5J6K4L5K5K5K2N1O2N1N2O1O1O1O1O1O1O1N2O1O1O2N2N3M2N2M3N3M2N9G?A`0@4L4L4L4QOn0N2N3N10001O001O00001O00001O001O00001O000O2O001O00001O00001O001O00001O00001O001O00001O00001O00001O00001O00010O00001O00001O00001O00001O00001O0000001O001O001O001O001O010O1O001O001O001OO1N2ZOf0DE:F;E:F;E;E:Eohn2" + }, + "image_id": "115", + "id": 309 + }, + { + "area": 58828, + "iscrowd": 0, + "bbox": [ + 131, + 365, + 307, + 190 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Ukh26?0]c06_\\OM]c07`\\OK^c07`\\OL]c06a\\OM]c0j0M2O2N1N2O1N2O1O1O1C]Na]Od1[b0aNb]Oa1[b0bNd]O_1Zb0cNe]O^1Yb0dNf]O\\1Yb0d0O0O2N101O001O001O001N101O001O001O0O2N101N101O001O001O001O001O001O001O001O0010O01O010O0010O010O01O010O0010O010O01O010O0010O01O010O010O0010O01O010O010O0010O01O010O010O0010O01O010O010O0010O01O010O010O0010O01O010O10O01O100O00010O01O01O01O01O01O010O01O010O0010O0100O0010O00010O001O00010O00001O00001O0000001O0000001N10001N101O0O101O0O2O001N101O001O1O1O001O1O1O001O1O1O010O1O100O1O101N1O2O0O2N101N1O3M2O0O1O100O1O10O01O010O1O010O0010O01O00100O001O001O0010O01O001O10O2O1N100O010O01O10O010O0100O100O10O0O2O000O2O0010O01O01O001O0O2N1O2M2O1O2N1N3M2M4M2N2N3L3N3M2M4J6K5K7HRkW1" + }, + "image_id": "115", + "id": 310 + }, + { + "area": 37820, + "iscrowd": 0, + "bbox": [ + 65, + 169, + 121, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "RU]1g0oc0;F:H9F9H8H9F9H8H9F9H8GkLiKlDe4f:hKkDc4m:^KnDj4m:XKcD[5Y;fJmCV6P<\\1N2M3N2N1O1N3N1O2N1N2O000000001O1O2N3M2N00001O1O1N1000001O00000000O1O1O100O1O1N2M3M4O02N2N2O0O101N100O10_GfD`7^;[HdDd7d;SH`Dj7h;mG\\DP8ZN3H7O2M2O2O001N101O001O001OO1O1O1O1O1O1O1O1O1O1O1O1O1O001O1O1O1O1N2O1N2O1N2O1N2O1O1O1O1O1O1N3M3N2N2N?A1N2O1O1O2N1O1N3J5F:F;G8K6J5K5J7J5K6J6G9F:E:G:G9J6J6J5K6J6I7J6J5K6J6J6I7@`0K6I6J7fMg]Oj1hb0J6J6J6J6D;M5KeWa1" + }, + "image_id": "116", + "id": 312 + }, + { + "area": 54040, + "iscrowd": 0, + "bbox": [ + 140, + 167, + 139, + 385 + ], + "category_id": 4, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "PYo2c0fc0f0H8I7I>Bc0\\O?B8H8I7I:F>B>A?A;F6I7I8H7I7dLmIfGX6U8lIfGX6W8jI`F`7]9bH[Fg7c9YHWFn7g9THQFU8m9^1N2M3N1O1O1N2O1O1O1O1N2O00000000O100000000001O1O2N1O1O1O1O1O1O1O1O00000000000000001O00000000000000O1O1O1O1O2N1O1O1M3K6N11O100O2OmEcFh8]9VGgFh8Z9UGiFj8f9eF\\F[9k:F5L3L5K4L5K6I:F7J1N2O1N2N3N1N2N2N2N3M2N2M3M3L5J5L4L4N4L4L4L3M2L6J8C=Hn[a4" + }, + "image_id": "117", + "id": 313 + }, + { + "area": 30694, + "iscrowd": 0, + "bbox": [ + 240, + 190, + 102, + 297 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "g`Q55dd06]\\OJWb08f]OKXb08d]OKZb07c]OL[b07a]OL]b06`]ONna0h1J6L4N2N3M2N2O1O1N3N1O1O1N3N2N3M3M5K5K5Jj4WK1O1O1O0000000000000000000000000001O00000O10000O10000O10000O10000O2O0O2O001N1O2O0O2N101N1O2UIlCm4mYOiA0k>L\\AoNi?j0\\2F7I6J6J^]X3" + }, + "image_id": "117", + "id": 314 + }, + { + "area": 23816, + "iscrowd": 0, + "bbox": [ + 196, + 200, + 103, + 228 + ], + "category_id": 3, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Q\\R4=Zd06J7f]OJd?>R@7\\?O^@4_?3Z@0c?e2O1N2O1gNkKlAV4R>nKjAS4V>QLfAP4Y>SLdAn3[>TLbAn3]>TL`An3_>TL]Ao3n=mLiAU3V>h1O100O100O10000O100O0100000000000000000000000000000O1000000000000000000000000000000001O000000001O0000001O00001O1O001O1O1UKfAT3n>SLXAl3i>PL\\An3e>oK_Ao3b>nKbAP4_>nKcAQ4^>mKeAQ4\\>jKjAT4a?M2dMV@Dl?4]@Hg?2b@Ga?4k@XOc?b0^2K6JZd0k0VOk0UOb0^O:G6I4L2O1N2O1O1O00000000000000000O100000O10000O10000000000000000O10000000000000O1000000000O10000000000000000000O1000O10000000O100000000000000O010000000000000000O10000O10000O1000000000000000001N10000O2O000O100O10000O10000O1000000O100000000O10000O1O10000000000000000O01000O10O1000000O100000000O1000O10O1000000O1000000O1000000O1000001O0O1000000O1000001O000000000000001O000000000001N10000000001O0O2O001O0O2O0O100O2O0O100O2O1N101N101N2O0O2O1N1O2N2N1O1O1O1O1O1O1O001N200O10000O1000O1O1O1O100O1O1O100000001O001O001O010O01O001O1O1O1O000O100O100O1O001O1O1O1O10000O10001O1O001O1N2O001O1N2N2O2M4M2M3K5K6K4KC>B>B>B;D;[Oe0E;E;F7I2N3N2M3M2O2M2N2O1O1N2O1O0O2O1O1O1N2O001O0O101O0O101O000O101O00000000000000000000000000000000000000000000O100000000O10001O0O10000O2O000O101N101O0O101O0O2N1O2O1N1O2N2N1O2N2N6J8H2N2N3M2N2N3M2N2LS1nNo1kM^Sc5" + }, + "image_id": "123", + "id": 325 + }, + { + "area": 69706, + "iscrowd": 0, + "bbox": [ + 243, + 112, + 181, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "afQ5;kc0g0XOg0ZOf0ZOg0YOf0YOh0YOf0]Od0@?@a0_O`0A?POQ1L3L5K4M4K4M3M4L3M4L3M4L3M2N1O1O1O1O1N2C=C=O001N2O1O001O100000O10000000000O1000001O00000O1000000000000O1000000000000O100000000000000O2O00000000000O1000000000000O100000000000000O10000000001O0O1000000000000O100000000O100O100O1L4G9G9G9I7J6J6J7I6J6J6J6J6J6J6J6J6J6J6J6J6K6J6J6`JeAZ4a>[KjA_4\\>WKoAb4X?J7I6J7I6J7I6I8I6J7I7I6J7I6J7I7I7I7I8H7I9F]ab1" + }, + "image_id": "123", + "id": 326 + }, + { + "area": 26334, + "iscrowd": 0, + "bbox": [ + 50, + 263, + 125, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "khR15`d0:H9H8H8H7I8H8]Ob0J7I7I9G8H8I7H8I8G8I7I7H6K2M3N2N1N2O1O1O1N2O1O1N2O001O0O2O00001N1000001O00001O00001O0000000000000000000000000000O100000000O1000001N6K5K1O1O1N2O000O10001N10000jJQA`4f?O2N1N3N1O1N2O1N1O2N2O0O2N2O0O2N2N101N2N1O2N2N4LR1mNa0@`0@a0_O`0\\OYbe6" + }, + "image_id": "124", + "id": 327 + }, + { + "area": 106304, + "iscrowd": 0, + "bbox": [ + 122, + 186, + 351, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "Wkb2`0mc0b0lNROo]OS1na0QOl]OS1Rb0POj]OR1Tb0QOj]OQ1Tb0QOj]OP1Ub0ROi]Oo0Vb0SOh]On0Vb0UOg]On0Wb0k0O1N3N1T^OeMXa0P3N3M201N100O100O01000O010O1000O10000O10O100O00100O001O1N101N2O1N101N2O0O2N2O0O2O1N2O0O2O1N101N2O0O2O1N2O001N2O001N2O001N2O1O0O2O1O0O2O1O001N2O1O001N2O001N2O1O00100O001000O10O1000O1000O010000O0100000O10O10O10000O0100000O01000O1000O0100000O010000O10O1000O1000O010000O0100000O10O10O1000O01000000O01000O1000O0100000O010000O10O10O1000O10O10000O01000O10O1000O1000O01000000O01000O1000O01000000O01000O1000O01000000O10O10O10000O0100000O10O10O10000O10O1000O1000O10O100000O10O100000O0100000000O010000000N101N2N2N2N1O2N2O1N2N1O2N2N2N2O1N1O2N2N2N2N101N2N2N2N1O2N2O1N2N2N1O2N1O2O0O2N2N1O2N1O2O0O2N2N1O2N2N3N2M3M3M3M3M2N2O1N3M2N2N2N3M2O1N3M2N2N2N3M2O1N2N3M2N2N3M3N2M3M4L3M3MPja0" + }, + "image_id": "124", + "id": 328 + }, + { + "area": 23617, + "iscrowd": 0, + "bbox": [ + 86, + 371, + 208, + 112 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "nWl1f0mc0:F9H8L3L4K6M3M4K3N3M2O2M3M2N4K3N2N1O2N1O1O1000000000000000000000000000000001O0000000000000000000000000000000001O0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001O01O000000000000000000000000000000000000000000000000000000000000000000000000001O000O2N101N1O2O1N2N2O1N1O2N101O001O000000O10001O00O2M9AnTZ4" + }, + "image_id": "125", + "id": 329 + }, + { + "area": 68816, + "iscrowd": 0, + "bbox": [ + 279, + 111, + 183, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "]]j55^d0;E;A?[Oe0\\Od0\\Oc0\\Oe0\\Od0^Ob0A?@`0A?@`0A?@?BC=B:F5L3L5K8I9G:E:G5K1O2N1N2O1O1O1N2O1N2N2O1N2O1N2O1O1O1N2O1O1N2O1O1N2O2N1N2O1O1N2O1O1N2O1N2O1N2O1N2O1O1N2O1N2O1N2O1O1O2M2O1O1O1N2O1N2O1N2O1N2O1N2O1O1N2O1N2O1N2O1N2O1N10001OO010O1O001O1O00100O00100O00100O0010O01O10O01O010O00100O0010O01O010O1O010O0010O01O010O1O010O0010O0100O0010O01O10O01O10O01O10O01O10O01O10O01O1O010O000010O01O00100O001O10O01O1O010O1O00100O001O10O01O10O01O010O00100O0010O01O1O010O00100O0010O01O10O01O010O1O010O0010O01O10O01O010O1O010O00100O0010O01O10O01O100O1O1O100O1O101N1O101N1O100O2N100O1O100O2N100O1O100O1O2O0O1O100O1O2O0O1O1O100O2N1O100O1O1O2O0O1O100O1O1O100O1O1O100O1O1O01O000010O1O1O1M3J6iLh^Oe2ka0I7I7K5M3N2O1O1N2O1O1O1O1O1^NU]OR1lb0lNW]OS1jb0jNY]OU1Wc0N2M4M3L4L7J8EdeV1" + }, + "image_id": "126", + "id": 332 + }, + { + "area": 40200, + "iscrowd": 0, + "bbox": [ + 103, + 300, + 149, + 267 + ], + "category_id": 1, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "iWW26ad0=D;F:F:DM2N2N2N2N2M4M3L4K5L4Le2[MSTT5" + }, + "image_id": "127", + "id": 333 + }, + { + "area": 67968, + "iscrowd": 0, + "bbox": [ + 229, + 71, + 176, + 383 + ], + "category_id": 2, + "ignore": 0, + "segmentation": { + "size": [ + 666, + 499 + ], + "counts": "_^j4d0ob0Y1fNY1gNY1hNX1ZOf0N3M4Lo0QOo0QO2N2N2N2N2N2N2N2N2N2N2N2N2O1N2N2N2N2O1N2N2N2O1N2N2N2O1N2N2N2D | ["mean_average_precision", "recall", "precision", "per_label_metrics", "image_level_binary_classsifier_metrics", "confusion_matrices_per_score_threshold"] | +| iou_threshold | IOU threshold used during inference in non-maximum suppression post processing. | float | 0.5 | +| box_score_threshold | During inference, only return proposals with a score greater than `box_score_threshold`. The score is the multiplication of the objectness score and classification probability. | float | 0.3 | + + +### List of supported metrics: + +* mean_average_precision +* recall +* precision +* per_label_metrics +* image_level_binary_classsifier_metrics +* confusion_matrices_per_score_threshold diff --git a/sdk/python/foundation-models/system/evaluation/image-object-detection/fridge-eval-config.json b/sdk/python/foundation-models/system/evaluation/image-object-detection/fridge-eval-config.json new file mode 100644 index 0000000000..018c304c54 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-object-detection/fridge-eval-config.json @@ -0,0 +1,5 @@ +{ + "metrics": ["mean_average_precision", "recall", "precision", "per_label_metrics", "image_level_binary_classsifier_metrics", "confusion_matrices_per_score_threshold"], + "iou_threshold" : 0.5, + "box_score_threshold" : 0.3 +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/evaluation/image-object-detection/image-object-detection.ipynb b/sdk/python/foundation-models/system/evaluation/image-object-detection/image-object-detection.ipynb new file mode 100644 index 0000000000..37dd2d5885 --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-object-detection/image-object-detection.ipynb @@ -0,0 +1,730 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Object-Detection Evaluation\n", + "\n", + "This sample shows how use the evaluate a group of models against a given set of metrics for the `image-object-detection` task. \n", + "\n", + "### Evaluation dataset\n", + "We will use the [odfridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip) dataset.\n", + "\n", + "### Model\n", + "The goal of evaluating models is to compare their performance on a variety of metrics. `image-object-detection` is a generic task type. As such, the models you pick to compare must be finetuned for the same scenario. Given that we have the dataset, we would like to look for models finetuned for this specific scenario. We will compare `yolof_r50_c5_8x8_1x_coco` and `sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco` in this sample, which are available in the `azureml` system registry.\n", + "\n", + "If you'd like to evaluate models that are not in the system registry, you can import those models to your workspace or organization registry and then evaluate them using the approach outlined in this sample. Review the sample notebook for [importing models](../../../import/import_model_into_registry.ipynb).\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites\n", + "3. Pick the models to evaluate\n", + "4. Prepare the dataset for fine-tuning the model\n", + "5. Submit the evaluation jobs using the model and data as inputs\n", + "6. Review evaluation metrics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip install azure-ai-ml\n", + "%pip install azure-identity" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace `AML_WORKSPACE_NAME`, `RESOURCE_GROUP` and `SUBSCRIPTION_ID` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-OD-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"SUBSCRIPTION_ID\"\n", + " resource_group = \"RESOURCE_GROUP\"\n", + " workspace_name = \"AML_WORKSPACE_NAME\"\n", + "\n", + " workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + " )\n", + "\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import warnings\n", + "\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_evaluation_cluster_name = \"sample-model-evaluation-compute\"\n", + "\n", + "try:\n", + " model_evaluation_compute = workspace_ml_client.compute.get(\n", + " model_evaluation_cluster_name\n", + " )\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " model_evaluation_compute = AmlCompute(\n", + " name=model_evaluation_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(model_evaluation_compute).result()\n", + "\n", + "compute_instance_type = model_evaluation_compute.size\n", + "print(f\"Instance type: {compute_instance_type}\")\n", + "\n", + "if compute_instance_type != \"STANDARD_NC6S_V3\":\n", + " # Print a warning message if compute type is not 'STANDARD_NC6S_V3', i.e. Single GPU V100\n", + " warning_message = (\n", + " \"Warning! Currently evaluation is only supported on STANDARD_NC6S_V3 compute type.\"\n", + " \" Please change the compute type to STANDARD_NC6S_V3 if you want to run evaluation.\"\n", + " )\n", + " warnings.warn(warning_message, category=Warning)\n", + "# generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below snippet will allow us to query number of GPU's present on the compute. We can use it to set `gpu_per_node` to ensure utilization of all GPUs in the node." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is the number of GPUs in a single node of the selected 'vm_size' compute.\n", + "# Setting this to less than the number of GPUs will result in underutilized GPUs, taking longer to train.\n", + "# Setting this to more than the number of GPUs will result in an error.\n", + "gpus_per_node = 1 # default value\n", + "gpu_count_found = False\n", + "ws_computes = workspace_ml_client.compute.list_sizes()\n", + "for ws_compute in ws_computes:\n", + " if ws_compute.name.lower() == model_evaluation_compute.size.lower():\n", + " gpus_per_node = ws_compute.gpus\n", + " print(f\"Number of GPUs in compute {ws_compute.name} are {ws_compute.gpus}\")\n", + "# if gpu_count_found not found, then print an error\n", + "if gpus_per_node > 0:\n", + " gpu_count_found = True\n", + "else:\n", + " gpu_count_found = False\n", + " print(\n", + " f\"No GPUs found in compute. Number of GPUs in compute {model_evaluation_compute.size} 0.\"\n", + " )" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick the models to evaluate\n", + "\n", + "You can evaluate the pretrained models on the repective datasets. Verify that the models selected for evaluation are available in system registry using the below code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "registry_models = [\n", + " {\"name\": \"yolof_r50_c5_8x8_1x_coco\"},\n", + " {\"name\": \"sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco\"},\n", + "]\n", + "for model in registry_models:\n", + " all_models = registry_ml_client.models.list(model[\"name\"])\n", + " latest_model = max(all_models, key=lambda x: x.version)\n", + " print(latest_model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this demo notebook, we are using fridge objects dataset. Due to the differences in the labels of the dataset used for pretrained models and that of fridge object dataset, the pretrained models can't be evalauted on the fridge dataset.\n", + "\n", + "Therefore, for the scope of this notebook, we request you to finetune model(s) for fridge objects dataset using [mmdetection-fridgeobjects-object-detection.ipynb](../../finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb). To finetune and register the model(s), you need to run the above notebook upto \"7. Register the fine tuned model with the workspace\" Once you have finetuned and registered the model(s) using above notebook, you can proceed further. \n", + "- Replace `REGISTERED_MODEL_NAME_1/REGISTERED_MODEL_NAME_2` and `REGISTERED_MODEL_VERSION_1/REGISTERED_MODEL_VERSION_2` with that of the registered models from above." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetuned_registered_models = [\n", + " {\"name\": \"REGISTERED_MODEL_NAME_1\", \"version\": \"REGISTERED_MODEL_VERSION_1\"},\n", + " {\"name\": \"REGISTERED_MODEL_NAME_2\", \"version\": \"REGISTERED_MODEL_VERSION_2\"},\n", + "]\n", + "\n", + "for model in finetuned_registered_models:\n", + " model = workspace_ml_client.models.get(model[\"name\"], version=model[\"version\"])\n", + " print(model.id)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [odfridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip), a toy dataset called Fridge Objects, which consists of 128 images of 4 labels of beverage container {`can`, `carton`, `milk bottle`, `water bottle`} photos taken on different backgrounds.\n", + "\n", + "All images in this notebook are hosted in [this repository](https://github.com/microsoft/computervision-recipes) and are made available under the [MIT license](https://github.com/microsoft/computervision-recipes/blob/master/LICENSE).\n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"31.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images Object detection\",\n", + " name=\"fridge-items-images-object-detection\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "In this example, the fridge object dataset is annotated in Pascal VOC format, where each image corresponds to an xml file. Each xml file contains information on where its corresponding image file is located and also contains information about the bounding boxes and the object labels. \n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. In this example, 20% of the data is kept for validation. For further details on jsonl file used for image object detection task in automated ml, please refer to the [data schema documentation for image object-detection task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#object-detection)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install pycocotools\n", + "!pip install simplification\n", + "!pip install scikit-image" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "sys.path.insert(0, \"../../../../jobs/automl-standalone-jobs/jsonl-conversion/\")\n", + "from base_jsonl_converter import write_json_lines\n", + "from voc_jsonl_converter import VOCJSONLConverter\n", + "\n", + "base_url = os.path.join(uri_folder_data_asset.path, \"images/\")\n", + "converter = VOCJSONLConverter(base_url, os.path.join(dataset_dir, \"annotations\"))\n", + "jsonl_annotations = os.path.join(dataset_dir, \"annotations_voc.jsonl\")\n", + "write_json_lines(converter, jsonl_annotations)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If you want to try with a dataset in COCO format, the scripts below shows how to convert it to `jsonl` format. The file \"odFridgeObjects_coco.json\" consists of annotation information for the `odFridgeObjects` dataset.\n", + "\n", + "# import sys\n", + "# sys.path.insert(0, \"../../../../jobs/automl-standalone-jobs/jsonl-conversion/\")\n", + "# from base_jsonl_converter import write_json_lines\n", + "# from coco_jsonl_converter import COCOJSONLConverter\n", + "\n", + "# base_url = os.path.join(uri_folder_data_asset.path, \"images/\")\n", + "# print(base_url)\n", + "# converter = COCOJSONLConverter(base_url, \"./odFridgeObjects_coco.json\")\n", + "# jsonl_annotations = os.path.join(dataset_dir, \"annotations_coco.jsonl\")\n", + "# write_json_lines(converter, jsonl_annotations)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Now split the annotations into train and validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# We'll copy each JSONL file within its related MLTable folder\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# First, let's create the folders if they don't exist\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the validation files\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "with open(jsonl_annotations, \"r\") as annot_f:\n", + " json_lines = annot_f.readlines()\n", + "\n", + "index = 0\n", + "with open(validation_annotations_file, \"w\") as validation_f:\n", + " for json_line in json_lines:\n", + " if index % train_validation_ratio == 0:\n", + " # validation annotation\n", + " validation_f.write(json_line)\n", + " else:\n", + " # train annotation\n", + " pass\n", + " index += 1" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# Create and save validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the evaluation jobs using the model and data as inputs\n", + " \n", + "Create the job that uses the `model_evaluation_pipeline` component. We will submit one job per model. \n", + "\n", + "Note that the metrics that the evaluation jobs need to calculate are specified in the [fridge-eval-config.json](./fridge-eval-config.json) file.\n", + "\n", + "All supported evaluation configurations for `image-object-detection` can be found in [README](./README.md)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# fetch the pipeline component\n", + "pipeline_component_func = registry_ml_client.components.get(\n", + " name=\"model_evaluation_pipeline\", label=\"latest\"\n", + ")\n", + "\n", + "# define the pipeline job\n", + "@pipeline()\n", + "def evaluation_pipeline(mlflow_model):\n", + " evaluation_job = pipeline_component_func(\n", + " # specify the foundation model available in the azureml system registry or a model from the workspace\n", + " # mlflow_model = Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{mlflow_model_path}\"),\n", + " mlflow_model=mlflow_model,\n", + " # test data\n", + " test_data=Input(type=AssetTypes.MLTABLE, path=validation_mltable_path),\n", + " # The following parameters map to the dataset fields\n", + " label_column_name=\"label\",\n", + " input_column_names=\"image_url\",\n", + " # Evaluation settings\n", + " task=\"image-object-detection\",\n", + " # config file containing the details of evaluation metrics to calculate\n", + " evaluation_config=Input(\n", + " type=AssetTypes.URI_FILE, path=\"./fridge-eval-config.json\"\n", + " ),\n", + " # config cluster/device job is running on\n", + " # set device to GPU/CPU on basis if GPU count was found\n", + " compute_name=model_evaluation_cluster_name,\n", + " instance_type=compute_instance_type,\n", + " device=\"gpu\" if gpu_count_found else \"cpu\",\n", + " )\n", + " return {\"evaluation_result\": evaluation_job.outputs.evaluation_result}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Submit the jobs, passing the model as a parameter to the pipeline created in the above step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# submit the pipeline job for each model that we want to evaluate\n", + "# you could consider submitting the pipeline jobs in parallel, provided your cluster has multiple nodes\n", + "pipeline_jobs = []\n", + "\n", + "for model in finetuned_registered_models:\n", + "\n", + " # # For each model, fetch the model object from the registry\n", + " # model_object = registry_ml_client.models.get(\n", + " # model[\"name\"], version=model[\"version\"]\n", + " # )\n", + "\n", + " # Fetch the model from workspace\n", + " model_object = workspace_ml_client.models.get(\n", + " model[\"name\"], version=model[\"version\"]\n", + " )\n", + "\n", + " pipeline_object = evaluation_pipeline(\n", + " mlflow_model=Input(type=AssetTypes.MLFLOW_MODEL, path=f\"{model_object.id}\"),\n", + " )\n", + " # don't reuse cached results from previous jobs\n", + " pipeline_object.settings.force_rerun = True\n", + " pipeline_object.settings.default_compute = model_evaluation_cluster_name\n", + " pipeline_object.display_name = f\"eval-{model['name']}-{timestamp}\"\n", + " pipeline_job = workspace_ml_client.jobs.create_or_update(\n", + " pipeline_object, experiment_name=experiment_name\n", + " )\n", + " # add model['name'] and pipeline_job.name as key value pairs to a dictionary\n", + " pipeline_jobs.append({\"model_name\": model[\"name\"], \"job_name\": pipeline_job.name})\n", + " # wait for the pipeline job to complete\n", + " workspace_ml_client.jobs.stream(pipeline_job.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Review evaluation metrics\n", + "Viewing the job in AzureML studio is the best way to analyze logs, metrics and outputs of jobs. You can create custom charts and compare metics across different jobs. See https://learn.microsoft.com/en-us/azure/machine-learning/how-to-log-view-metrics?tabs=interactive#view-jobsruns-information-in-the-studio to learn more. \n", + "\n", + "However, we may need to access and review metrics programmatically for which we will use MLflow, which is the recommended client for logging and querying metrics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by Azure ML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)\n", + "\n", + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")\n", + "\n", + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.2 Get the evaluation metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "metrics_df = pd.DataFrame()\n", + "\n", + "for job in pipeline_jobs:\n", + " # Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + " filter = \"tags.mlflow.rootRunId='\" + job[\"job_name\"] + \"'\"\n", + " runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + " )\n", + "\n", + " # Get the training and evaluation runs.\n", + " for run in runs:\n", + " # else, check if run.data.metrics.accuracy exists\n", + " if \"mean_average_precision\" in run.data.metrics:\n", + " # get the metrics from the mlflow run\n", + " run_metric = run.data.metrics\n", + " # add the model name to the run_metric dictionary\n", + " run_metric[\"model_name\"] = job[\"model_name\"]\n", + " # convert the run_metric dictionary to a pandas dataframe\n", + " temp_df = pd.DataFrame(run_metric, index=[0])\n", + " # concat the temp_df to the metrics_df\n", + " metrics_df = pd.concat([metrics_df, temp_df], ignore_index=True)\n", + "\n", + "# move the model_name columns to the first column\n", + "cols = metrics_df.columns.tolist()\n", + "cols = cols[-1:] + cols[:-1]\n", + "metrics_df = metrics_df[cols]\n", + "metrics_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/evaluation/image-object-detection/odFridgeObjects_coco.json b/sdk/python/foundation-models/system/evaluation/image-object-detection/odFridgeObjects_coco.json new file mode 100644 index 0000000000..9c0f8374ad --- /dev/null +++ b/sdk/python/foundation-models/system/evaluation/image-object-detection/odFridgeObjects_coco.json @@ -0,0 +1,5837 @@ +{ + "images": [ + { + "file_name": "1.jpg", + "height": 666, + "width": 499, + "id": "1" + }, + { + "file_name": "2.jpg", + "height": 666, + "width": 499, + "id": "2" + }, + { + "file_name": "3.jpg", + "height": 666, + "width": 499, + "id": "3" + }, + { + "file_name": "4.jpg", + "height": 666, + "width": 499, + "id": "4" + }, + { + "file_name": "5.jpg", + "height": 666, + "width": 499, + "id": "5" + }, + { + "file_name": "6.jpg", + "height": 666, + "width": 499, + "id": "6" + }, + { + "file_name": "7.jpg", + "height": 666, + "width": 499, + "id": "7" + }, + { + "file_name": "8.jpg", + "height": 666, + "width": 499, + "id": "8" + }, + { + "file_name": "9.jpg", + "height": 666, + "width": 499, + "id": "9" + }, + { + "file_name": "10.jpg", + "height": 666, + "width": 499, + "id": "10" + }, + { + "file_name": "11.jpg", + "height": 666, + "width": 499, + "id": "11" + }, + { + "file_name": "12.jpg", + "height": 666, + "width": 499, + "id": "12" + }, + { + "file_name": "13.jpg", + "height": 666, + "width": 499, + "id": "13" + }, + { + "file_name": "14.jpg", + "height": 666, + "width": 499, + "id": "14" + }, + { + "file_name": "15.jpg", + "height": 666, + "width": 499, + "id": "15" + }, + { + "file_name": "16.jpg", + "height": 666, + "width": 499, + "id": "16" + }, + { + "file_name": "17.jpg", + "height": 666, + "width": 499, + "id": "17" + }, + { + "file_name": "18.jpg", + "height": 666, + "width": 499, + "id": "18" + }, + { + "file_name": "19.jpg", + "height": 666, + "width": 499, + "id": "19" + }, + { + "file_name": "20.jpg", + "height": 666, + "width": 499, + "id": "20" + }, + { + "file_name": "21.jpg", + "height": 666, + "width": 499, + "id": "21" + }, + { + "file_name": "22.jpg", + "height": 666, + "width": 499, + "id": "22" + }, + { + "file_name": "23.jpg", + "height": 666, + "width": 499, + "id": "23" + }, + { + "file_name": "24.jpg", + "height": 666, + "width": 499, + "id": "24" + }, + { + "file_name": "25.jpg", + "height": 666, + "width": 499, + "id": "25" + }, + { + "file_name": "26.jpg", + "height": 666, + "width": 499, + "id": "26" + }, + { + "file_name": "27.jpg", + "height": 666, + "width": 499, + "id": "27" + }, + { + "file_name": "28.jpg", + "height": 666, + "width": 499, + "id": "28" + }, + { + "file_name": "29.jpg", + "height": 666, + "width": 499, + "id": "29" + }, + { + "file_name": "30.jpg", + "height": 666, + "width": 499, + "id": "30" + }, + { + "file_name": "31.jpg", + "height": 666, + "width": 499, + "id": "31" + }, + { + "file_name": "32.jpg", + "height": 666, + "width": 499, + "id": "32" + }, + { + "file_name": "33.jpg", + "height": 666, + "width": 499, + "id": "33" + }, + { + "file_name": "34.jpg", + "height": 666, + "width": 499, + "id": "34" + }, + { + "file_name": "35.jpg", + "height": 666, + "width": 499, + "id": "35" + }, + { + "file_name": "36.jpg", + "height": 666, + "width": 499, + "id": "36" + }, + { + "file_name": "37.jpg", + "height": 666, + "width": 499, + "id": "37" + }, + { + "file_name": "38.jpg", + "height": 666, + "width": 499, + "id": "38" + }, + { + "file_name": "39.jpg", + "height": 666, + "width": 499, + "id": "39" + }, + { + "file_name": "40.jpg", + "height": 666, + "width": 499, + "id": "40" + }, + { + "file_name": "41.jpg", + "height": 666, + "width": 499, + "id": "41" + }, + { + "file_name": "42.jpg", + "height": 666, + "width": 499, + "id": "42" + }, + { + "file_name": "43.jpg", + "height": 666, + "width": 499, + "id": "43" + }, + { + "file_name": "44.jpg", + "height": 666, + "width": 499, + "id": "44" + }, + { + "file_name": "45.jpg", + "height": 666, + "width": 499, + "id": "45" + }, + { + "file_name": "46.jpg", + "height": 666, + "width": 499, + "id": "46" + }, + { + "file_name": "47.jpg", + "height": 666, + "width": 499, + "id": "47" + }, + { + "file_name": "48.jpg", + "height": 666, + "width": 499, + "id": "48" + }, + { + "file_name": "49.jpg", + "height": 666, + "width": 499, + "id": "49" + }, + { + "file_name": "50.jpg", + "height": 666, + "width": 499, + "id": "50" + }, + { + "file_name": "51.jpg", + "height": 666, + "width": 499, + "id": "51" + }, + { + "file_name": "52.jpg", + "height": 666, + "width": 499, + "id": "52" + }, + { + "file_name": "53.jpg", + "height": 666, + "width": 499, + "id": "53" + }, + { + "file_name": "54.jpg", + "height": 666, + "width": 499, + "id": "54" + }, + { + "file_name": "55.jpg", + "height": 666, + "width": 499, + "id": "55" + }, + { + "file_name": "56.jpg", + "height": 666, + "width": 499, + "id": "56" + }, + { + "file_name": "57.jpg", + "height": 666, + "width": 499, + "id": "57" + }, + { + "file_name": "58.jpg", + "height": 666, + "width": 499, + "id": "58" + }, + { + "file_name": "59.jpg", + "height": 666, + "width": 499, + "id": "59" + }, + { + "file_name": "60.jpg", + "height": 666, + "width": 499, + "id": "60" + }, + { + "file_name": "61.jpg", + "height": 666, + "width": 499, + "id": "61" + }, + { + "file_name": "62.jpg", + "height": 666, + "width": 499, + "id": "62" + }, + { + "file_name": "63.jpg", + "height": 666, + "width": 499, + "id": "63" + }, + { + "file_name": "64.jpg", + "height": 666, + "width": 499, + "id": "64" + }, + { + "file_name": "65.jpg", + "height": 666, + "width": 499, + "id": "65" + }, + { + "file_name": "66.jpg", + "height": 666, + "width": 499, + "id": "66" + }, + { + "file_name": "67.jpg", + "height": 666, + "width": 499, + "id": "67" + }, + { + "file_name": "68.jpg", + "height": 666, + "width": 499, + "id": "68" + }, + { + "file_name": "69.jpg", + "height": 666, + "width": 499, + "id": "69" + }, + { + "file_name": "70.jpg", + "height": 666, + "width": 499, + "id": "70" + }, + { + "file_name": "71.jpg", + "height": 666, + "width": 499, + "id": "71" + }, + { + "file_name": "72.jpg", + "height": 666, + "width": 499, + "id": "72" + }, + { + "file_name": "73.jpg", + "height": 666, + "width": 499, + "id": "73" + }, + { + "file_name": "74.jpg", + "height": 666, + "width": 499, + "id": "74" + }, + { + "file_name": "75.jpg", + "height": 666, + "width": 499, + "id": "75" + }, + { + "file_name": "76.jpg", + "height": 666, + "width": 499, + "id": "76" + }, + { + "file_name": "77.jpg", + "height": 666, + "width": 499, + "id": "77" + }, + { + "file_name": "78.jpg", + "height": 666, + "width": 499, + "id": "78" + }, + { + "file_name": "79.jpg", + "height": 666, + "width": 499, + "id": "79" + }, + { + "file_name": "80.jpg", + "height": 666, + "width": 499, + "id": "80" + }, + { + "file_name": "81.jpg", + "height": 666, + "width": 499, + "id": "81" + }, + { + "file_name": "82.jpg", + "height": 666, + "width": 499, + "id": "82" + }, + { + "file_name": "83.jpg", + "height": 666, + "width": 499, + "id": "83" + }, + { + "file_name": "84.jpg", + "height": 666, + "width": 499, + "id": "84" + }, + { + "file_name": "85.jpg", + "height": 666, + "width": 499, + "id": "85" + }, + { + "file_name": "86.jpg", + "height": 666, + "width": 499, + "id": "86" + }, + { + "file_name": "87.jpg", + "height": 666, + "width": 499, + "id": "87" + }, + { + "file_name": "88.jpg", + "height": 666, + "width": 499, + "id": "88" + }, + { + "file_name": "89.jpg", + "height": 666, + "width": 499, + "id": "89" + }, + { + "file_name": "90.jpg", + "height": 666, + "width": 499, + "id": "90" + }, + { + "file_name": "91.jpg", + "height": 666, + "width": 499, + "id": "91" + }, + { + "file_name": "92.jpg", + "height": 666, + "width": 499, + "id": "92" + }, + { + "file_name": "93.jpg", + "height": 666, + "width": 499, + "id": "93" + }, + { + "file_name": "94.jpg", + "height": 666, + "width": 499, + "id": "94" + }, + { + "file_name": "95.jpg", + "height": 666, + "width": 499, + "id": "95" + }, + { + "file_name": "96.jpg", + "height": 666, + "width": 499, + "id": "96" + }, + { + "file_name": "97.jpg", + "height": 666, + "width": 499, + "id": "97" + }, + { + "file_name": "98.jpg", + "height": 666, + "width": 499, + "id": "98" + }, + { + "file_name": "99.jpg", + "height": 666, + "width": 499, + "id": "99" + }, + { + "file_name": "100.jpg", + "height": 666, + "width": 499, + "id": "100" + }, + { + "file_name": "101.jpg", + "height": 666, + "width": 499, + "id": "101" + }, + { + "file_name": "102.jpg", + "height": 666, + "width": 499, + "id": "102" + }, + { + "file_name": "103.jpg", + "height": 666, + "width": 499, + "id": "103" + }, + { + "file_name": "104.jpg", + "height": 666, + "width": 499, + "id": "104" + }, + { + "file_name": "105.jpg", + "height": 666, + "width": 499, + "id": "105" + }, + { + "file_name": "106.jpg", + "height": 666, + "width": 499, + "id": "106" + }, + { + "file_name": "107.jpg", + "height": 666, + "width": 499, + "id": "107" + }, + { + "file_name": "108.jpg", + "height": 666, + "width": 499, + "id": "108" + }, + { + "file_name": "109.jpg", + "height": 666, + "width": 499, + "id": "109" + }, + { + "file_name": "110.jpg", + "height": 666, + "width": 499, + "id": "110" + }, + { + "file_name": "111.jpg", + "height": 666, + "width": 499, + "id": "111" + }, + { + "file_name": "112.jpg", + "height": 666, + "width": 499, + "id": "112" + }, + { + "file_name": "113.jpg", + "height": 666, + "width": 499, + "id": "113" + }, + { + "file_name": "114.jpg", + "height": 666, + "width": 499, + "id": "114" + }, + { + "file_name": "115.jpg", + "height": 666, + "width": 499, + "id": "115" + }, + { + "file_name": "116.jpg", + "height": 666, + "width": 499, + "id": "116" + }, + { + "file_name": "117.jpg", + "height": 666, + "width": 499, + "id": "117" + }, + { + "file_name": "118.jpg", + "height": 666, + "width": 499, + "id": "118" + }, + { + "file_name": "119.jpg", + "height": 666, + "width": 499, + "id": "119" + }, + { + "file_name": "120.jpg", + "height": 666, + "width": 499, + "id": "120" + }, + { + "file_name": "121.jpg", + "height": 666, + "width": 499, + "id": "121" + }, + { + "file_name": "122.jpg", + "height": 666, + "width": 499, + "id": "122" + }, + { + "file_name": "123.jpg", + "height": 666, + "width": 499, + "id": "123" + }, + { + "file_name": "124.jpg", + "height": 666, + "width": 499, + "id": "124" + }, + { + "file_name": "125.jpg", + "height": 666, + "width": 499, + "id": "125" + }, + { + "file_name": "126.jpg", + "height": 666, + "width": 499, + "id": "126" + }, + { + "file_name": "127.jpg", + "height": 666, + "width": 499, + "id": "127" + }, + { + "file_name": "128.jpg", + "height": 666, + "width": 499, + "id": "128" + } + ], + "type": "instances", + "annotations": [ + { + "area": 46766, + "iscrowd": 0, + "bbox": [ + 100, + 173, + 133, + 348 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "1", + "id": 1 + }, + { + "area": 32918, + "iscrowd": 0, + "bbox": [ + 247, + 192, + 108, + 301 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "2", + "id": 2 + }, + { + "area": 28500, + "iscrowd": 0, + "bbox": [ + 259, + 231, + 124, + 227 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "3", + "id": 3 + }, + { + "area": 58000, + "iscrowd": 0, + "bbox": [ + 245, + 119, + 144, + 399 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "4", + "id": 4 + }, + { + "area": 44132, + "iscrowd": 0, + "bbox": [ + 39, + 278, + 373, + 117 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "5", + "id": 5 + }, + { + "area": 30380, + "iscrowd": 0, + "bbox": [ + 125, + 316, + 244, + 123 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "6", + "id": 6 + }, + { + "area": 39195, + "iscrowd": 0, + "bbox": [ + 86, + 298, + 334, + 116 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "7", + "id": 7 + }, + { + "area": 60514, + "iscrowd": 0, + "bbox": [ + 47, + 280, + 382, + 157 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "8", + "id": 8 + }, + { + "area": 41538, + "iscrowd": 0, + "bbox": [ + 80, + 157, + 128, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "9", + "id": 9 + }, + { + "area": 23520, + "iscrowd": 0, + "bbox": [ + 299, + 220, + 95, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "9", + "id": 10 + }, + { + "area": 44278, + "iscrowd": 0, + "bbox": [ + 86, + 102, + 130, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "10", + "id": 11 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 150, + 377, + 295, + 113 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "10", + "id": 12 + }, + { + "area": 56518, + "iscrowd": 0, + "bbox": [ + 56, + 148, + 153, + 366 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "11", + "id": 13 + }, + { + "area": 39406, + "iscrowd": 0, + "bbox": [ + 328, + 180, + 121, + 322 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "11", + "id": 14 + }, + { + "area": 53067, + "iscrowd": 0, + "bbox": [ + 51, + 107, + 146, + 360 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "12", + "id": 15 + }, + { + "area": 44764, + "iscrowd": 0, + "bbox": [ + 94, + 402, + 360, + 123 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "12", + "id": 16 + }, + { + "area": 50410, + "iscrowd": 0, + "bbox": [ + 89, + 121, + 141, + 354 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "13", + "id": 17 + }, + { + "area": 20370, + "iscrowd": 0, + "bbox": [ + 273, + 278, + 104, + 193 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "13", + "id": 18 + }, + { + "area": 76368, + "iscrowd": 0, + "bbox": [ + 62, + 323, + 343, + 221 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "14", + "id": 19 + }, + { + "area": 18564, + "iscrowd": 0, + "bbox": [ + 320, + 268, + 101, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "14", + "id": 20 + }, + { + "area": 42828, + "iscrowd": 0, + "bbox": [ + 95, + 140, + 128, + 331 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "15", + "id": 21 + }, + { + "area": 33499, + "iscrowd": 0, + "bbox": [ + 289, + 248, + 138, + 240 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "15", + "id": 22 + }, + { + "area": 30520, + "iscrowd": 0, + "bbox": [ + 120, + 185, + 108, + 279 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "16", + "id": 23 + }, + { + "area": 38420, + "iscrowd": 0, + "bbox": [ + 127, + 379, + 225, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "16", + "id": 24 + }, + { + "area": 43400, + "iscrowd": 0, + "bbox": [ + 95, + 156, + 123, + 349 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "17", + "id": 25 + }, + { + "area": 34384, + "iscrowd": 0, + "bbox": [ + 228, + 196, + 111, + 306 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "17", + "id": 26 + }, + { + "area": 31414, + "iscrowd": 0, + "bbox": [ + 65, + 180, + 112, + 277 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "18", + "id": 27 + }, + { + "area": 40014, + "iscrowd": 0, + "bbox": [ + 141, + 375, + 341, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "18", + "id": 28 + }, + { + "area": 45666, + "iscrowd": 0, + "bbox": [ + 122, + 150, + 128, + 353 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "19", + "id": 29 + }, + { + "area": 29056, + "iscrowd": 0, + "bbox": [ + 284, + 286, + 127, + 226 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "19", + "id": 30 + }, + { + "area": 68482, + "iscrowd": 0, + "bbox": [ + 74, + 358, + 352, + 193 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "20", + "id": 31 + }, + { + "area": 24600, + "iscrowd": 0, + "bbox": [ + 324, + 247, + 119, + 204 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "20", + "id": 32 + }, + { + "area": 47696, + "iscrowd": 0, + "bbox": [ + 4, + 339, + 270, + 175 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "21", + "id": 33 + }, + { + "area": 54812, + "iscrowd": 0, + "bbox": [ + 157, + 275, + 283, + 192 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "21", + "id": 34 + }, + { + "area": 67144, + "iscrowd": 0, + "bbox": [ + 22, + 276, + 307, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "22", + "id": 35 + }, + { + "area": 31647, + "iscrowd": 0, + "bbox": [ + 314, + 258, + 136, + 230 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "22", + "id": 36 + }, + { + "area": 51379, + "iscrowd": 0, + "bbox": [ + 49, + 282, + 268, + 190 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "23", + "id": 37 + }, + { + "area": 37260, + "iscrowd": 0, + "bbox": [ + 255, + 328, + 206, + 179 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "23", + "id": 38 + }, + { + "area": 45108, + "iscrowd": 0, + "bbox": [ + 142, + 156, + 125, + 357 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "24", + "id": 39 + }, + { + "area": 28785, + "iscrowd": 0, + "bbox": [ + 241, + 187, + 100, + 284 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "24", + "id": 40 + }, + { + "area": 36652, + "iscrowd": 0, + "bbox": [ + 101, + 171, + 118, + 307 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "25", + "id": 41 + }, + { + "area": 24080, + "iscrowd": 0, + "bbox": [ + 209, + 363, + 214, + 111 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "25", + "id": 42 + }, + { + "area": 21721, + "iscrowd": 0, + "bbox": [ + 10, + 383, + 202, + 106 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "26", + "id": 43 + }, + { + "area": 25662, + "iscrowd": 0, + "bbox": [ + 221, + 351, + 272, + 93 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "26", + "id": 44 + }, + { + "area": 39390, + "iscrowd": 0, + "bbox": [ + 35, + 207, + 129, + 302 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "27", + "id": 45 + }, + { + "area": 39440, + "iscrowd": 0, + "bbox": [ + 191, + 168, + 115, + 339 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "27", + "id": 46 + }, + { + "area": 27392, + "iscrowd": 0, + "bbox": [ + 346, + 295, + 127, + 213 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "27", + "id": 47 + }, + { + "area": 40467, + "iscrowd": 0, + "bbox": [ + 121, + 110, + 122, + 328 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "28", + "id": 48 + }, + { + "area": 24442, + "iscrowd": 0, + "bbox": [ + 285, + 243, + 120, + 201 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "28", + "id": 49 + }, + { + "area": 49476, + "iscrowd": 0, + "bbox": [ + 89, + 415, + 371, + 132 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "28", + "id": 50 + }, + { + "area": 28776, + "iscrowd": 0, + "bbox": [ + 123, + 180, + 108, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "29", + "id": 51 + }, + { + "area": 36270, + "iscrowd": 0, + "bbox": [ + 285, + 143, + 116, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "29", + "id": 52 + }, + { + "area": 30680, + "iscrowd": 0, + "bbox": [ + 148, + 413, + 235, + 129 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "29", + "id": 53 + }, + { + "area": 29670, + "iscrowd": 0, + "bbox": [ + 64, + 177, + 114, + 257 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "30", + "id": 54 + }, + { + "area": 20944, + "iscrowd": 0, + "bbox": [ + 324, + 257, + 111, + 186 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "30", + "id": 55 + }, + { + "area": 50895, + "iscrowd": 0, + "bbox": [ + 43, + 434, + 376, + 134 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "30", + "id": 56 + }, + { + "area": 19530, + "iscrowd": 0, + "bbox": [ + 112, + 193, + 89, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "31", + "id": 57 + }, + { + "area": 27538, + "iscrowd": 0, + "bbox": [ + 215, + 181, + 97, + 280 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "31", + "id": 58 + }, + { + "area": 27216, + "iscrowd": 0, + "bbox": [ + 343, + 327, + 125, + 215 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "31", + "id": 59 + }, + { + "area": 24786, + "iscrowd": 0, + "bbox": [ + 55, + 167, + 101, + 242 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "32", + "id": 60 + }, + { + "area": 24500, + "iscrowd": 0, + "bbox": [ + 162, + 218, + 97, + 249 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "32", + "id": 61 + }, + { + "area": 27776, + "iscrowd": 0, + "bbox": [ + 331, + 334, + 127, + 216 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "32", + "id": 62 + }, + { + "area": 25250, + "iscrowd": 0, + "bbox": [ + 72, + 150, + 100, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "33", + "id": 63 + }, + { + "area": 35802, + "iscrowd": 0, + "bbox": [ + 192, + 229, + 116, + 305 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "33", + "id": 64 + }, + { + "area": 15180, + "iscrowd": 0, + "bbox": [ + 324, + 246, + 91, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "33", + "id": 65 + }, + { + "area": 25500, + "iscrowd": 0, + "bbox": [ + 80, + 149, + 101, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "34", + "id": 66 + }, + { + "area": 18300, + "iscrowd": 0, + "bbox": [ + 186, + 271, + 99, + 182 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "34", + "id": 67 + }, + { + "area": 42108, + "iscrowd": 0, + "bbox": [ + 339, + 226, + 131, + 318 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "34", + "id": 68 + }, + { + "area": 45560, + "iscrowd": 0, + "bbox": [ + 58, + 222, + 135, + 334 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "35", + "id": 69 + }, + { + "area": 15308, + "iscrowd": 0, + "bbox": [ + 205, + 292, + 88, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "35", + "id": 70 + }, + { + "area": 18144, + "iscrowd": 0, + "bbox": [ + 306, + 200, + 83, + 215 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "35", + "id": 71 + }, + { + "area": 50568, + "iscrowd": 0, + "bbox": [ + 29, + 257, + 146, + 343 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "36", + "id": 72 + }, + { + "area": 42900, + "iscrowd": 0, + "bbox": [ + 173, + 180, + 129, + 329 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "36", + "id": 73 + }, + { + "area": 19712, + "iscrowd": 0, + "bbox": [ + 308, + 220, + 87, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "36", + "id": 74 + }, + { + "area": 65296, + "iscrowd": 0, + "bbox": [ + 32, + 196, + 175, + 370 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "37", + "id": 75 + }, + { + "area": 24534, + "iscrowd": 0, + "bbox": [ + 244, + 212, + 93, + 260 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "37", + "id": 76 + }, + { + "area": 17595, + "iscrowd": 0, + "bbox": [ + 340, + 220, + 84, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "37", + "id": 77 + }, + { + "area": 63318, + "iscrowd": 0, + "bbox": [ + 26, + 191, + 172, + 365 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "38", + "id": 78 + }, + { + "area": 37022, + "iscrowd": 0, + "bbox": [ + 193, + 334, + 213, + 172 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "38", + "id": 79 + }, + { + "area": 17458, + "iscrowd": 0, + "bbox": [ + 326, + 207, + 85, + 202 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "38", + "id": 80 + }, + { + "area": 65520, + "iscrowd": 0, + "bbox": [ + 9, + 198, + 181, + 359 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "39", + "id": 81 + }, + { + "area": 17920, + "iscrowd": 0, + "bbox": [ + 227, + 232, + 79, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "39", + "id": 82 + }, + { + "area": 19800, + "iscrowd": 0, + "bbox": [ + 333, + 186, + 87, + 224 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "39", + "id": 83 + }, + { + "area": 65124, + "iscrowd": 0, + "bbox": [ + 17, + 335, + 267, + 242 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "40", + "id": 84 + }, + { + "area": 17577, + "iscrowd": 0, + "bbox": [ + 244, + 215, + 80, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "40", + "id": 85 + }, + { + "area": 19272, + "iscrowd": 0, + "bbox": [ + 344, + 172, + 87, + 218 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "40", + "id": 86 + }, + { + "area": 71002, + "iscrowd": 0, + "bbox": [ + 195, + 307, + 270, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "41", + "id": 87 + }, + { + "area": 21762, + "iscrowd": 0, + "bbox": [ + 134, + 176, + 92, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "41", + "id": 88 + }, + { + "area": 19270, + "iscrowd": 0, + "bbox": [ + 256, + 127, + 81, + 234 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "41", + "id": 89 + }, + { + "area": 33840, + "iscrowd": 0, + "bbox": [ + 65, + 264, + 119, + 281 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "42", + "id": 90 + }, + { + "area": 53265, + "iscrowd": 0, + "bbox": [ + 144, + 308, + 264, + 200 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "42", + "id": 91 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 337, + 175, + 91, + 229 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "42", + "id": 92 + }, + { + "area": 44220, + "iscrowd": 0, + "bbox": [ + 96, + 250, + 133, + 329 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "43", + "id": 93 + }, + { + "area": 37356, + "iscrowd": 0, + "bbox": [ + 124, + 127, + 131, + 282 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "43", + "id": 94 + }, + { + "area": 34770, + "iscrowd": 0, + "bbox": [ + 281, + 184, + 113, + 304 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "43", + "id": 95 + }, + { + "area": 45188, + "iscrowd": 0, + "bbox": [ + 19, + 188, + 142, + 315 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "44", + "id": 96 + }, + { + "area": 29744, + "iscrowd": 0, + "bbox": [ + 203, + 231, + 103, + 285 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "44", + "id": 97 + }, + { + "area": 29568, + "iscrowd": 0, + "bbox": [ + 344, + 266, + 111, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "44", + "id": 98 + }, + { + "area": 32301, + "iscrowd": 0, + "bbox": [ + 93, + 205, + 110, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "45", + "id": 99 + }, + { + "area": 44756, + "iscrowd": 0, + "bbox": [ + 198, + 171, + 133, + 333 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "45", + "id": 100 + }, + { + "area": 24735, + "iscrowd": 0, + "bbox": [ + 306, + 238, + 96, + 254 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "45", + "id": 101 + }, + { + "area": 32592, + "iscrowd": 0, + "bbox": [ + 66, + 177, + 111, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "46", + "id": 102 + }, + { + "area": 66642, + "iscrowd": 0, + "bbox": [ + 161, + 149, + 173, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "46", + "id": 103 + }, + { + "area": 25620, + "iscrowd": 0, + "bbox": [ + 307, + 316, + 121, + 209 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "46", + "id": 104 + }, + { + "area": 33900, + "iscrowd": 0, + "bbox": [ + 77, + 190, + 112, + 299 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "47", + "id": 105 + }, + { + "area": 18988, + "iscrowd": 0, + "bbox": [ + 202, + 303, + 100, + 187 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "47", + "id": 106 + }, + { + "area": 64032, + "iscrowd": 0, + "bbox": [ + 290, + 157, + 183, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "47", + "id": 107 + }, + { + "area": 22914, + "iscrowd": 0, + "bbox": [ + 68, + 301, + 113, + 200 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "48", + "id": 108 + }, + { + "area": 60214, + "iscrowd": 0, + "bbox": [ + 175, + 140, + 160, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "48", + "id": 109 + }, + { + "area": 38430, + "iscrowd": 0, + "bbox": [ + 308, + 182, + 121, + 314 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "48", + "id": 110 + }, + { + "area": 35568, + "iscrowd": 0, + "bbox": [ + 21, + 425, + 311, + 113 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "49", + "id": 111 + }, + { + "area": 12015, + "iscrowd": 0, + "bbox": [ + 228, + 306, + 88, + 134 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "49", + "id": 112 + }, + { + "area": 50868, + "iscrowd": 0, + "bbox": [ + 308, + 176, + 161, + 313 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "49", + "id": 113 + }, + { + "area": 41454, + "iscrowd": 0, + "bbox": [ + 54, + 168, + 140, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "50", + "id": 114 + }, + { + "area": 32508, + "iscrowd": 0, + "bbox": [ + 59, + 410, + 300, + 107 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "50", + "id": 115 + }, + { + "area": 22425, + "iscrowd": 0, + "bbox": [ + 353, + 338, + 114, + 194 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "50", + "id": 116 + }, + { + "area": 44092, + "iscrowd": 0, + "bbox": [ + 21, + 202, + 145, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "51", + "id": 117 + }, + { + "area": 16275, + "iscrowd": 0, + "bbox": [ + 199, + 341, + 92, + 174 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "51", + "id": 118 + }, + { + "area": 28355, + "iscrowd": 0, + "bbox": [ + 361, + 235, + 106, + 264 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "51", + "id": 119 + }, + { + "area": 45743, + "iscrowd": 0, + "bbox": [ + 29, + 194, + 148, + 306 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "52", + "id": 120 + }, + { + "area": 17088, + "iscrowd": 0, + "bbox": [ + 209, + 337, + 95, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "52", + "id": 121 + }, + { + "area": 25132, + "iscrowd": 0, + "bbox": [ + 369, + 261, + 102, + 243 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "52", + "id": 122 + }, + { + "area": 22967, + "iscrowd": 0, + "bbox": [ + 47, + 333, + 118, + 192 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "53", + "id": 123 + }, + { + "area": 49288, + "iscrowd": 0, + "bbox": [ + 172, + 319, + 243, + 201 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "53", + "id": 124 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 362, + 225, + 90, + 221 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "53", + "id": 125 + }, + { + "area": 17576, + "iscrowd": 0, + "bbox": [ + 42, + 354, + 103, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "54", + "id": 126 + }, + { + "area": 23674, + "iscrowd": 0, + "bbox": [ + 122, + 374, + 177, + 132 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "54", + "id": 127 + }, + { + "area": 42340, + "iscrowd": 0, + "bbox": [ + 325, + 224, + 145, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "54", + "id": 128 + }, + { + "area": 25220, + "iscrowd": 0, + "bbox": [ + 118, + 222, + 96, + 259 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "55", + "id": 129 + }, + { + "area": 20790, + "iscrowd": 0, + "bbox": [ + 185, + 316, + 104, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "55", + "id": 130 + }, + { + "area": 54880, + "iscrowd": 0, + "bbox": [ + 251, + 147, + 159, + 342 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "55", + "id": 131 + }, + { + "area": 29298, + "iscrowd": 0, + "bbox": [ + 22, + 252, + 113, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "56", + "id": 132 + }, + { + "area": 51984, + "iscrowd": 0, + "bbox": [ + 163, + 181, + 151, + 341 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "56", + "id": 133 + }, + { + "area": 21660, + "iscrowd": 0, + "bbox": [ + 345, + 328, + 113, + 189 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "56", + "id": 134 + }, + { + "area": 31860, + "iscrowd": 0, + "bbox": [ + 69, + 230, + 117, + 269 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "57", + "id": 135 + }, + { + "area": 32963, + "iscrowd": 0, + "bbox": [ + 167, + 313, + 276, + 118 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "57", + "id": 136 + }, + { + "area": 21384, + "iscrowd": 0, + "bbox": [ + 283, + 315, + 107, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "57", + "id": 137 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 44, + 332, + 109, + 185 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "58", + "id": 138 + }, + { + "area": 15808, + "iscrowd": 0, + "bbox": [ + 175, + 231, + 75, + 207 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "58", + "id": 139 + }, + { + "area": 55040, + "iscrowd": 0, + "bbox": [ + 297, + 194, + 171, + 319 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "58", + "id": 140 + }, + { + "area": 52456, + "iscrowd": 0, + "bbox": [ + 48, + 322, + 315, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "59", + "id": 141 + }, + { + "area": 22781, + "iscrowd": 0, + "bbox": [ + 182, + 318, + 108, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "59", + "id": 142 + }, + { + "area": 19040, + "iscrowd": 0, + "bbox": [ + 332, + 201, + 84, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "59", + "id": 143 + }, + { + "area": 51958, + "iscrowd": 0, + "bbox": [ + 30, + 296, + 312, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "60", + "id": 144 + }, + { + "area": 23353, + "iscrowd": 0, + "bbox": [ + 203, + 360, + 192, + 120 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "60", + "id": 145 + }, + { + "area": 19314, + "iscrowd": 0, + "bbox": [ + 312, + 170, + 86, + 221 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "60", + "id": 146 + }, + { + "area": 48960, + "iscrowd": 0, + "bbox": [ + 34, + 260, + 305, + 159 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "61", + "id": 147 + }, + { + "area": 44520, + "iscrowd": 0, + "bbox": [ + 144, + 331, + 264, + 167 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "61", + "id": 148 + }, + { + "area": 20240, + "iscrowd": 0, + "bbox": [ + 376, + 241, + 109, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "61", + "id": 149 + }, + { + "area": 26429, + "iscrowd": 0, + "bbox": [ + 67, + 255, + 106, + 246 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "62", + "id": 150 + }, + { + "area": 17836, + "iscrowd": 0, + "bbox": [ + 191, + 333, + 97, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "62", + "id": 151 + }, + { + "area": 42280, + "iscrowd": 0, + "bbox": [ + 332, + 179, + 139, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "62", + "id": 152 + }, + { + "area": 22321, + "iscrowd": 0, + "bbox": [ + 59, + 269, + 100, + 220 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 153 + }, + { + "area": 13833, + "iscrowd": 0, + "bbox": [ + 172, + 326, + 86, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 154 + }, + { + "area": 21315, + "iscrowd": 0, + "bbox": [ + 253, + 235, + 86, + 244 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 155 + }, + { + "area": 38808, + "iscrowd": 0, + "bbox": [ + 351, + 202, + 131, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 156 + }, + { + "area": 44243, + "iscrowd": 0, + "bbox": [ + 40, + 200, + 150, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 157 + }, + { + "area": 19624, + "iscrowd": 0, + "bbox": [ + 182, + 259, + 87, + 222 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 158 + }, + { + "area": 13770, + "iscrowd": 0, + "bbox": [ + 291, + 317, + 84, + 161 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 159 + }, + { + "area": 25351, + "iscrowd": 0, + "bbox": [ + 369, + 227, + 100, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 160 + }, + { + "area": 48513, + "iscrowd": 0, + "bbox": [ + 47, + 181, + 156, + 308 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 161 + }, + { + "area": 14520, + "iscrowd": 0, + "bbox": [ + 192, + 304, + 87, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 162 + }, + { + "area": 24832, + "iscrowd": 0, + "bbox": [ + 274, + 211, + 96, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 163 + }, + { + "area": 25334, + "iscrowd": 0, + "bbox": [ + 376, + 247, + 105, + 238 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 164 + }, + { + "area": 26001, + "iscrowd": 0, + "bbox": [ + 19, + 239, + 106, + 242 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 165 + }, + { + "area": 36608, + "iscrowd": 0, + "bbox": [ + 96, + 200, + 127, + 285 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 166 + }, + { + "area": 12000, + "iscrowd": 0, + "bbox": [ + 217, + 314, + 79, + 149 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 167 + }, + { + "area": 20774, + "iscrowd": 0, + "bbox": [ + 386, + 254, + 93, + 220 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 168 + }, + { + "area": 26312, + "iscrowd": 0, + "bbox": [ + 71, + 198, + 103, + 252 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 169 + }, + { + "area": 38645, + "iscrowd": 0, + "bbox": [ + 149, + 160, + 130, + 294 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 170 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 234, + 392, + 183, + 114 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 171 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 356, + 217, + 92, + 219 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 172 + }, + { + "area": 16300, + "iscrowd": 0, + "bbox": [ + 22, + 341, + 99, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 173 + }, + { + "area": 21736, + "iscrowd": 0, + "bbox": [ + 110, + 249, + 87, + 246 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 174 + }, + { + "area": 52052, + "iscrowd": 0, + "bbox": [ + 191, + 365, + 285, + 181 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 175 + }, + { + "area": 17622, + "iscrowd": 0, + "bbox": [ + 382, + 271, + 88, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 176 + }, + { + "area": 37089, + "iscrowd": 0, + "bbox": [ + 107, + 109, + 116, + 316 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 177 + }, + { + "area": 20250, + "iscrowd": 0, + "bbox": [ + 272, + 248, + 89, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 178 + }, + { + "area": 20930, + "iscrowd": 0, + "bbox": [ + 361, + 332, + 114, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 179 + }, + { + "area": 64581, + "iscrowd": 0, + "bbox": [ + 47, + 357, + 308, + 208 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 180 + }, + { + "area": 38560, + "iscrowd": 0, + "bbox": [ + 21, + 378, + 240, + 159 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 181 + }, + { + "area": 56240, + "iscrowd": 0, + "bbox": [ + 60, + 305, + 295, + 189 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 182 + }, + { + "area": 17640, + "iscrowd": 0, + "bbox": [ + 201, + 162, + 89, + 195 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 183 + }, + { + "area": 19264, + "iscrowd": 0, + "bbox": [ + 361, + 280, + 111, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 184 + }, + { + "area": 72615, + "iscrowd": 0, + "bbox": [ + 68, + 340, + 308, + 234 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 185 + }, + { + "area": 17201, + "iscrowd": 0, + "bbox": [ + 9, + 273, + 102, + 166 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 186 + }, + { + "area": 16856, + "iscrowd": 0, + "bbox": [ + 236, + 171, + 85, + 195 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 187 + }, + { + "area": 21922, + "iscrowd": 0, + "bbox": [ + 365, + 210, + 96, + 225 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 188 + }, + { + "area": 18360, + "iscrowd": 0, + "bbox": [ + 1, + 318, + 101, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 189 + }, + { + "area": 40690, + "iscrowd": 0, + "bbox": [ + 106, + 178, + 129, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 190 + }, + { + "area": 23296, + "iscrowd": 0, + "bbox": [ + 239, + 203, + 90, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 191 + }, + { + "area": 27195, + "iscrowd": 0, + "bbox": [ + 372, + 245, + 110, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 192 + }, + { + "area": 17200, + "iscrowd": 0, + "bbox": [ + 50, + 312, + 99, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 193 + }, + { + "area": 29606, + "iscrowd": 0, + "bbox": [ + 168, + 180, + 112, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 194 + }, + { + "area": 20430, + "iscrowd": 0, + "bbox": [ + 278, + 206, + 89, + 226 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 195 + }, + { + "area": 27930, + "iscrowd": 0, + "bbox": [ + 118, + 418, + 265, + 104 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 196 + }, + { + "area": 31024, + "iscrowd": 0, + "bbox": [ + 51, + 418, + 276, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 197 + }, + { + "area": 37812, + "iscrowd": 0, + "bbox": [ + 96, + 170, + 137, + 273 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 198 + }, + { + "area": 22204, + "iscrowd": 0, + "bbox": [ + 233, + 193, + 90, + 243 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 199 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 344, + 310, + 110, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 200 + }, + { + "area": 31857, + "iscrowd": 0, + "bbox": [ + 86, + 205, + 122, + 258 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 201 + }, + { + "area": 44548, + "iscrowd": 0, + "bbox": [ + 36, + 402, + 258, + 171 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 202 + }, + { + "area": 12920, + "iscrowd": 0, + "bbox": [ + 297, + 323, + 84, + 151 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 203 + }, + { + "area": 21024, + "iscrowd": 0, + "bbox": [ + 386, + 268, + 95, + 218 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 204 + }, + { + "area": 32574, + "iscrowd": 0, + "bbox": [ + 32, + 247, + 121, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 205 + }, + { + "area": 39087, + "iscrowd": 0, + "bbox": [ + 110, + 157, + 128, + 302 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 206 + }, + { + "area": 60680, + "iscrowd": 0, + "bbox": [ + 57, + 393, + 295, + 204 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 207 + }, + { + "area": 18656, + "iscrowd": 0, + "bbox": [ + 348, + 300, + 105, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 208 + }, + { + "area": 19530, + "iscrowd": 0, + "bbox": [ + 47, + 209, + 92, + 209 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 209 + }, + { + "area": 34602, + "iscrowd": 0, + "bbox": [ + 29, + 331, + 236, + 145 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 210 + }, + { + "area": 12972, + "iscrowd": 0, + "bbox": [ + 261, + 293, + 93, + 137 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 211 + }, + { + "area": 69402, + "iscrowd": 0, + "bbox": [ + 209, + 352, + 268, + 257 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 212 + }, + { + "area": 23607, + "iscrowd": 0, + "bbox": [ + 22, + 371, + 182, + 128 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 213 + }, + { + "area": 33824, + "iscrowd": 0, + "bbox": [ + 196, + 220, + 111, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 214 + }, + { + "area": 23040, + "iscrowd": 0, + "bbox": [ + 291, + 281, + 95, + 239 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 215 + }, + { + "area": 15717, + "iscrowd": 0, + "bbox": [ + 369, + 338, + 92, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 216 + }, + { + "area": 33330, + "iscrowd": 0, + "bbox": [ + 53, + 391, + 201, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 217 + }, + { + "area": 26496, + "iscrowd": 0, + "bbox": [ + 55, + 326, + 191, + 137 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 218 + }, + { + "area": 42826, + "iscrowd": 0, + "bbox": [ + 238, + 160, + 132, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 219 + }, + { + "area": 27904, + "iscrowd": 0, + "bbox": [ + 337, + 229, + 108, + 255 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 220 + }, + { + "area": 22852, + "iscrowd": 0, + "bbox": [ + 44, + 337, + 115, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 221 + }, + { + "area": 34352, + "iscrowd": 0, + "bbox": [ + 142, + 228, + 112, + 303 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 222 + }, + { + "area": 48422, + "iscrowd": 0, + "bbox": [ + 245, + 192, + 141, + 340 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 223 + }, + { + "area": 30705, + "iscrowd": 0, + "bbox": [ + 349, + 266, + 114, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 224 + }, + { + "area": 17430, + "iscrowd": 0, + "bbox": [ + 24, + 336, + 104, + 165 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 225 + }, + { + "area": 25900, + "iscrowd": 0, + "bbox": [ + 106, + 244, + 99, + 258 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 226 + }, + { + "area": 20025, + "iscrowd": 0, + "bbox": [ + 265, + 268, + 88, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 227 + }, + { + "area": 43071, + "iscrowd": 0, + "bbox": [ + 340, + 217, + 146, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 228 + }, + { + "area": 15876, + "iscrowd": 0, + "bbox": [ + 29, + 323, + 107, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 229 + }, + { + "area": 21528, + "iscrowd": 0, + "bbox": [ + 248, + 256, + 91, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 230 + }, + { + "area": 50080, + "iscrowd": 0, + "bbox": [ + 327, + 200, + 159, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 231 + }, + { + "area": 33136, + "iscrowd": 0, + "bbox": [ + 1, + 437, + 303, + 108 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 232 + }, + { + "area": 43566, + "iscrowd": 0, + "bbox": [ + 53, + 212, + 136, + 317 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 233 + }, + { + "area": 14696, + "iscrowd": 0, + "bbox": [ + 177, + 335, + 87, + 166 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 234 + }, + { + "area": 26190, + "iscrowd": 0, + "bbox": [ + 254, + 246, + 96, + 269 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 235 + }, + { + "area": 25544, + "iscrowd": 0, + "bbox": [ + 338, + 281, + 102, + 247 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 236 + }, + { + "area": 41580, + "iscrowd": 0, + "bbox": [ + 88, + 150, + 134, + 307 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 237 + }, + { + "area": 13524, + "iscrowd": 0, + "bbox": [ + 209, + 283, + 91, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 238 + }, + { + "area": 28140, + "iscrowd": 0, + "bbox": [ + 293, + 185, + 104, + 267 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 239 + }, + { + "area": 32032, + "iscrowd": 0, + "bbox": [ + 96, + 412, + 285, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 240 + }, + { + "area": 61060, + "iscrowd": 0, + "bbox": [ + 26, + 195, + 214, + 283 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 241 + }, + { + "area": 23205, + "iscrowd": 0, + "bbox": [ + 211, + 214, + 90, + 254 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 242 + }, + { + "area": 22892, + "iscrowd": 0, + "bbox": [ + 287, + 245, + 96, + 235 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 243 + }, + { + "area": 19224, + "iscrowd": 0, + "bbox": [ + 367, + 317, + 107, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 244 + }, + { + "area": 71095, + "iscrowd": 0, + "bbox": [ + 9, + 238, + 294, + 240 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 245 + }, + { + "area": 16000, + "iscrowd": 0, + "bbox": [ + 272, + 312, + 99, + 159 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 246 + }, + { + "area": 28749, + "iscrowd": 0, + "bbox": [ + 355, + 238, + 110, + 258 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 247 + }, + { + "area": 38259, + "iscrowd": 0, + "bbox": [ + 65, + 429, + 326, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 248 + }, + { + "area": 59648, + "iscrowd": 0, + "bbox": [ + 2, + 235, + 255, + 232 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 249 + }, + { + "area": 13140, + "iscrowd": 0, + "bbox": [ + 229, + 303, + 89, + 145 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 250 + }, + { + "area": 19008, + "iscrowd": 0, + "bbox": [ + 311, + 231, + 95, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 251 + }, + { + "area": 36542, + "iscrowd": 0, + "bbox": [ + 157, + 409, + 301, + 120 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 252 + }, + { + "area": 30480, + "iscrowd": 0, + "bbox": [ + 24, + 260, + 119, + 253 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 253 + }, + { + "area": 46631, + "iscrowd": 0, + "bbox": [ + 113, + 239, + 210, + 220 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 254 + }, + { + "area": 14670, + "iscrowd": 0, + "bbox": [ + 289, + 302, + 89, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 255 + }, + { + "area": 25602, + "iscrowd": 0, + "bbox": [ + 362, + 207, + 101, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 256 + }, + { + "area": 55536, + "iscrowd": 0, + "bbox": [ + 31, + 159, + 155, + 355 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 257 + }, + { + "area": 20352, + "iscrowd": 0, + "bbox": [ + 173, + 312, + 105, + 191 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 258 + }, + { + "area": 28886, + "iscrowd": 0, + "bbox": [ + 258, + 192, + 100, + 285 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 259 + }, + { + "area": 29304, + "iscrowd": 0, + "bbox": [ + 342, + 229, + 110, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 260 + }, + { + "area": 38776, + "iscrowd": 0, + "bbox": [ + 33, + 228, + 130, + 295 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 261 + }, + { + "area": 41856, + "iscrowd": 0, + "bbox": [ + 136, + 183, + 127, + 326 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 262 + }, + { + "area": 18180, + "iscrowd": 0, + "bbox": [ + 251, + 322, + 100, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 263 + }, + { + "area": 27864, + "iscrowd": 0, + "bbox": [ + 340, + 250, + 107, + 257 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 264 + }, + { + "area": 69360, + "iscrowd": 0, + "bbox": [ + 43, + 384, + 407, + 169 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 265 + }, + { + "area": 25648, + "iscrowd": 0, + "bbox": [ + 113, + 169, + 111, + 228 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 266 + }, + { + "area": 12495, + "iscrowd": 0, + "bbox": [ + 211, + 275, + 104, + 118 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 267 + }, + { + "area": 19686, + "iscrowd": 0, + "bbox": [ + 309, + 200, + 101, + 192 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 268 + }, + { + "area": 25185, + "iscrowd": 0, + "bbox": [ + 200, + 292, + 114, + 218 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 269 + }, + { + "area": 18715, + "iscrowd": 0, + "bbox": [ + 122, + 120, + 94, + 196 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 270 + }, + { + "area": 14760, + "iscrowd": 0, + "bbox": [ + 292, + 152, + 89, + 163 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 271 + }, + { + "area": 46704, + "iscrowd": 0, + "bbox": [ + 67, + 307, + 335, + 138 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 272 + }, + { + "area": 39650, + "iscrowd": 0, + "bbox": [ + 109, + 163, + 121, + 324 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 273 + }, + { + "area": 23142, + "iscrowd": 0, + "bbox": [ + 222, + 285, + 113, + 202 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 274 + }, + { + "area": 14130, + "iscrowd": 0, + "bbox": [ + 305, + 151, + 89, + 156 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 275 + }, + { + "area": 43335, + "iscrowd": 0, + "bbox": [ + 91, + 296, + 320, + 134 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 276 + }, + { + "area": 54756, + "iscrowd": 0, + "bbox": [ + 18, + 202, + 161, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 277 + }, + { + "area": 30672, + "iscrowd": 0, + "bbox": [ + 163, + 242, + 107, + 283 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 278 + }, + { + "area": 19136, + "iscrowd": 0, + "bbox": [ + 260, + 335, + 103, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 279 + }, + { + "area": 25704, + "iscrowd": 0, + "bbox": [ + 351, + 264, + 101, + 251 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 280 + }, + { + "area": 64566, + "iscrowd": 0, + "bbox": [ + 104, + 238, + 305, + 210 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "95", + "id": 281 + }, + { + "area": 85250, + "iscrowd": 0, + "bbox": [ + 86, + 244, + 340, + 249 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "96", + "id": 282 + }, + { + "area": 90207, + "iscrowd": 0, + "bbox": [ + 86, + 245, + 350, + 256 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "97", + "id": 283 + }, + { + "area": 87235, + "iscrowd": 0, + "bbox": [ + 45, + 236, + 364, + 238 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "98", + "id": 284 + }, + { + "area": 41400, + "iscrowd": 0, + "bbox": [ + 152, + 249, + 224, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "99", + "id": 285 + }, + { + "area": 46886, + "iscrowd": 0, + "bbox": [ + 130, + 271, + 237, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "100", + "id": 286 + }, + { + "area": 46872, + "iscrowd": 0, + "bbox": [ + 65, + 289, + 371, + 125 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "101", + "id": 287 + }, + { + "area": 51054, + "iscrowd": 0, + "bbox": [ + 139, + 253, + 200, + 253 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "102", + "id": 288 + }, + { + "area": 29750, + "iscrowd": 0, + "bbox": [ + 144, + 260, + 174, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "103", + "id": 289 + }, + { + "area": 29684, + "iscrowd": 0, + "bbox": [ + 175, + 253, + 180, + 163 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "104", + "id": 290 + }, + { + "area": 52578, + "iscrowd": 0, + "bbox": [ + 142, + 257, + 253, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "105", + "id": 291 + }, + { + "area": 52224, + "iscrowd": 0, + "bbox": [ + 103, + 272, + 255, + 203 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "106", + "id": 292 + }, + { + "area": 30820, + "iscrowd": 0, + "bbox": [ + 107, + 272, + 133, + 229 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "107", + "id": 293 + }, + { + "area": 23408, + "iscrowd": 0, + "bbox": [ + 261, + 274, + 132, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "107", + "id": 294 + }, + { + "area": 29870, + "iscrowd": 0, + "bbox": [ + 35, + 314, + 289, + 102 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "108", + "id": 295 + }, + { + "area": 24112, + "iscrowd": 0, + "bbox": [ + 313, + 281, + 136, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "108", + "id": 296 + }, + { + "area": 34438, + "iscrowd": 0, + "bbox": [ + 97, + 272, + 133, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "109", + "id": 297 + }, + { + "area": 22550, + "iscrowd": 0, + "bbox": [ + 225, + 293, + 204, + 109 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "109", + "id": 298 + }, + { + "area": 33300, + "iscrowd": 0, + "bbox": [ + 47, + 308, + 299, + 110 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "110", + "id": 299 + }, + { + "area": 26368, + "iscrowd": 0, + "bbox": [ + 331, + 205, + 127, + 205 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "110", + "id": 300 + }, + { + "area": 39162, + "iscrowd": 0, + "bbox": [ + 98, + 176, + 121, + 320 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "111", + "id": 301 + }, + { + "area": 65048, + "iscrowd": 0, + "bbox": [ + 220, + 130, + 172, + 375 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "111", + "id": 302 + }, + { + "area": 39360, + "iscrowd": 0, + "bbox": [ + 29, + 415, + 327, + 119 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "112", + "id": 303 + }, + { + "area": 56724, + "iscrowd": 0, + "bbox": [ + 272, + 145, + 162, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "112", + "id": 304 + }, + { + "area": 29500, + "iscrowd": 0, + "bbox": [ + 82, + 128, + 117, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "113", + "id": 305 + }, + { + "area": 77172, + "iscrowd": 0, + "bbox": [ + 89, + 333, + 353, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "113", + "id": 306 + }, + { + "area": 31868, + "iscrowd": 0, + "bbox": [ + 74, + 114, + 123, + 256 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "114", + "id": 307 + }, + { + "area": 87290, + "iscrowd": 0, + "bbox": [ + 56, + 330, + 405, + 214 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "114", + "id": 308 + }, + { + "area": 40119, + "iscrowd": 0, + "bbox": [ + 229, + 118, + 128, + 310 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "115", + "id": 309 + }, + { + "area": 58828, + "iscrowd": 0, + "bbox": [ + 131, + 365, + 307, + 190 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "115", + "id": 310 + }, + { + "area": 37820, + "iscrowd": 0, + "bbox": [ + 65, + 169, + 121, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "116", + "id": 311 + }, + { + "area": 72354, + "iscrowd": 0, + "bbox": [ + 242, + 132, + 185, + 388 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "116", + "id": 312 + }, + { + "area": 54040, + "iscrowd": 0, + "bbox": [ + 140, + 167, + 139, + 385 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "117", + "id": 313 + }, + { + "area": 30694, + "iscrowd": 0, + "bbox": [ + 240, + 190, + 102, + 297 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "117", + "id": 314 + }, + { + "area": 23816, + "iscrowd": 0, + "bbox": [ + 196, + 200, + 103, + 228 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "118", + "id": 315 + }, + { + "area": 46280, + "iscrowd": 0, + "bbox": [ + 88, + 410, + 355, + 129 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "118", + "id": 316 + }, + { + "area": 35160, + "iscrowd": 0, + "bbox": [ + 139, + 116, + 119, + 292 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "119", + "id": 317 + }, + { + "area": 46170, + "iscrowd": 0, + "bbox": [ + 128, + 389, + 341, + 134 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "119", + "id": 318 + }, + { + "area": 34691, + "iscrowd": 0, + "bbox": [ + 150, + 139, + 112, + 306 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "120", + "id": 319 + }, + { + "area": 55769, + "iscrowd": 0, + "bbox": [ + 149, + 355, + 256, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "120", + "id": 320 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 36, + 294, + 303, + 110 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "121", + "id": 321 + }, + { + "area": 43155, + "iscrowd": 0, + "bbox": [ + 169, + 371, + 314, + 136 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "121", + "id": 322 + }, + { + "area": 38936, + "iscrowd": 0, + "bbox": [ + 31, + 296, + 313, + 123 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "122", + "id": 323 + }, + { + "area": 47742, + "iscrowd": 0, + "bbox": [ + 171, + 373, + 326, + 145 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "122", + "id": 324 + }, + { + "area": 25773, + "iscrowd": 0, + "bbox": [ + 107, + 288, + 120, + 212 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "123", + "id": 325 + }, + { + "area": 69706, + "iscrowd": 0, + "bbox": [ + 243, + 112, + 181, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "123", + "id": 326 + }, + { + "area": 26334, + "iscrowd": 0, + "bbox": [ + 50, + 263, + 125, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "124", + "id": 327 + }, + { + "area": 106304, + "iscrowd": 0, + "bbox": [ + 122, + 186, + 351, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "124", + "id": 328 + }, + { + "area": 23617, + "iscrowd": 0, + "bbox": [ + 86, + 371, + 208, + 112 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "125", + "id": 329 + }, + { + "area": 68816, + "iscrowd": 0, + "bbox": [ + 279, + 111, + 183, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "125", + "id": 330 + }, + { + "area": 19360, + "iscrowd": 0, + "bbox": [ + 111, + 206, + 109, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "126", + "id": 331 + }, + { + "area": 99470, + "iscrowd": 0, + "bbox": [ + 102, + 285, + 342, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "126", + "id": 332 + }, + { + "area": 40200, + "iscrowd": 0, + "bbox": [ + 103, + 300, + 149, + 267 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "127", + "id": 333 + }, + { + "area": 67968, + "iscrowd": 0, + "bbox": [ + 229, + 71, + 176, + 383 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "127", + "id": 334 + }, + { + "area": 14151, + "iscrowd": 0, + "bbox": [ + 134, + 257, + 88, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "128", + "id": 335 + }, + { + "area": 70485, + "iscrowd": 0, + "bbox": [ + 244, + 139, + 184, + 380 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "128", + "id": 336 + } + ], + "categories": [ + { + "supercategory": "none", + "id": 1, + "name": "can" + }, + { + "supercategory": "none", + "id": 2, + "name": "carton" + }, + { + "supercategory": "none", + "id": 3, + "name": "milk_bottle" + }, + { + "supercategory": "none", + "id": 4, + "name": "water_bottle" + } + ] +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json b/sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb b/sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb new file mode 100644 index 0000000000..5843af5eea --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb @@ -0,0 +1,1135 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multi-class Image Classification using transformers specific pipeline component\n", + "\n", + "This sample shows how to use `transformers_image_classification_pipeline` component from the `azureml` system registry to fine tune a model for multi-class image classification task using fridgeObjects Dataset. We then deploy the fine tuned model to an online endpoint for real time inference.\n", + "\n", + "### Training data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset.\n", + "\n", + "### Model\n", + "We will use the `microsoft-beit-base-patch16-224-pt22k-ft22k` model in this notebook. If you need to fine tune a model that is available on HuggingFace, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from HuggingFace.\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites such as compute\n", + "3. Pick a model to fine tune\n", + "4. Prepare dataset for finetuning the model\n", + "5. Submit the fine tuning job using transformers specific image-classification component\n", + "6. Review training and evaluation metrics\n", + "7. Register the fine tuned model\n", + "8. Deploy the fine tuned model for real time inference\n", + "9. Test deployed end point\n", + "9. Clean up resources" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install azure-ai-ml==1.8.0\n", + "! pip install azure-identity==1.13.0" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace `AML_WORKSPACE_NAME`, `RESOURCE_GROUP` and `SUBSCRIPTION_ID` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-MultiClass-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"SUBSCRIPTION_ID\"\n", + " resource_group = \"RESOURCE_GROUP\"\n", + " workspace_name = \"AML_WORKSPACE_NAME\"\n", + "\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create CPU compute for model selection component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_import_cluster_name = \"sample-model-import-cluster\"\n", + "try:\n", + " _ = workspace_ml_client.compute.get(model_import_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=model_import_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_D12_v2\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create GPU compute for finetune component\n", + "\n", + "The list of GPU machines can be found [here](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes-gpu)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetune_cluster_name = \"sample-finetune-cluster-gpu\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(finetune_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=finetune_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick a foundation model to fine tune\n", + "\n", + "We will use the `microsoft-beit-base-patch16-224-pt22k-ft22k` model in this notebook. If you need to fine tune a model that is available on HuggingFace, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from HuggingFace.\n", + "\n", + "Currently following models are supported:\n", + "\n", + "| Model Name | Source |\n", + "| ------ | ---------- |\n", + "| [microsoft-beit-base-patch16-224-pt22k-ft22k](https://ml.azure.com/registries/azureml/models/microsoft-beit-base-patch16-224-pt22k-ft22k/version/5) | azureml registry |\n", + "| [microsoft-swinv2-base-patch4-window12-192-22k](https://ml.azure.com/registries/azureml/models/microsoft-swinv2-base-patch4-window12-192-22k/version/5) | azureml registry |\n", + "| [facebook-deit-base-patch16-224](https://ml.azure.com/registries/azureml/models/facebook-deit-base-patch16-224/version/5) | azureml registry |\n", + "| [google-vit-base-patch16-224](https://ml.azure.com/registries/azureml/models/google-vit-base-patch16-224/version/5) | azureml registry |\n", + "| [Image classification models from Huggingface's Transformer library](https://huggingface.co/models?pipeline_tag=image-classification&library=transformers)| HuggingFace |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "huggingface_model_name = \"microsoft/beit-base-patch16-224-pt22k-ft22k\"\n", + "\n", + "aml_registry_model_name = \"microsoft-beit-base-patch16-224-pt22k-ft22k\"\n", + "foundation_models = registry_ml_client.models.list(aml_registry_model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for fine tuning\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset. The fridge object dataset is stored in a directory. There are four different folders inside:\n", + "- /water_bottle\n", + "- /milk_bottle\n", + "- /carton\n", + "- /can\n", + "\n", + "This is the most common data format for multiclass image classification. Each folder's title corresponds to the image label for the images contained inside. \n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"milk_bottle\", \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images\",\n", + " name=\"fridge-items-images-multiclass-classif\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "For documentation on preparing the datasets beyond this notebook, refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. In this example, 20% of the data is kept for validation. For further details on jsonl file used for image classification task in automated ml, please refer to the [data schema documentation for multi-class image classification task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#image-classification-binarymulti-class)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "\n", + "# We will copy each JSONL file within its related MLTable folder\n", + "training_mltable_path = os.path.join(dataset_parent_dir, \"training-mltable-folder\")\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# Create the folders if they don't exist\n", + "os.makedirs(training_mltable_path, exist_ok=True)\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the training and validation files\n", + "train_annotations_file = os.path.join(training_mltable_path, \"train_annotations.jsonl\")\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "# Baseline of json line dictionary\n", + "json_line_sample = {\n", + " \"image_url\": uri_folder_data_asset.path,\n", + " \"label\": \"\",\n", + "}\n", + "\n", + "index = 0\n", + "# Scan each sub directary and generate a jsonl line per image, distributed on train and valid JSONL files\n", + "with open(train_annotations_file, \"w\") as train_f:\n", + " with open(validation_annotations_file, \"w\") as validation_f:\n", + " for class_name in os.listdir(dataset_dir):\n", + " sub_dir = os.path.join(dataset_dir, class_name)\n", + " if not os.path.isdir(sub_dir):\n", + " continue\n", + " # Scan each sub directary\n", + " print(f\"Parsing {sub_dir}\")\n", + " for image in os.listdir(sub_dir):\n", + " json_line = dict(json_line_sample)\n", + " json_line[\"image_url\"] += f\"{class_name}/{image}\"\n", + " json_line[\"label\"] = class_name\n", + "\n", + " if index % train_validation_ratio == 0:\n", + " # Validation annotation\n", + " validation_f.write(json.dumps(json_line) + \"\\n\")\n", + " else:\n", + " # Train annotation\n", + " train_f.write(json.dumps(json_line) + \"\\n\")\n", + " index += 1" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# Create and save train mltable\n", + "train_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(train_annotations_file)\n", + ")\n", + "save_ml_table_file(training_mltable_path, train_mltable_file_contents)\n", + "\n", + "# Create and save validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the fine tuning job using `transformers_image_classification_pipeline` component\n", + " \n", + "Create the job that uses the `transformers_image_classification_pipeline` component for multi-class image-classification task. Learn more in 5.2 about all the parameters supported for fine tuning." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Create component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "FINETUNE_PIPELINE_COMPONENT_NAME = \"transformers_image_classification_pipeline\"\n", + "pipeline_component_transformers_func = registry_ml_client.components.get(\n", + " name=FINETUNE_PIPELINE_COMPONENT_NAME, label=\"latest\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Create arguments to be passed to `transformers_image_classification_pipeline` component\n", + "\n", + "The `transformers_image_classification_pipeline` component consists of model selection and finetuning components. The detailed arguments for each component can be found at following README files:\n", + "- [Model Import Component](../../../docs/component_docs/image_finetune/transformers_model_import_component.md)\n", + "- [Finetune Component](../../../docs/component_docs/image_finetune/transformers_finetune_component.md)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deepspeed_config_path = \"./deepspeed_configs/zero1.json\"\n", + "if not os.path.exists(deepspeed_config_path):\n", + " print(\"DeepSpeed config file not found\")\n", + " deepspeed_config_path = None\n", + "\n", + "pipeline_component_args = {\n", + " # # Model import args\n", + " \"model_family\": \"HuggingFaceImage\",\n", + " \"mlflow_model\": foundation_model.id, # foundation_model.id is provided, only foundation_model gives UserErrorException: only path input is supported now but get: ...\n", + " # \"model_name\": huggingface_model_name, # specify the model_name instead of mlflow_model if you want to use a model from the huggingface hub\n", + " # # Finetune_args\n", + " \"image_width\": -1, # Default value is -1 which means it would be overwritten by default image width in Hugging Face feature extractor\n", + " \"image_height\": -1, # Default value is -1 which means it would be overwritten by default image height in Hugging Face feature extractor\n", + " \"task_name\": \"image-classification\",\n", + " \"apply_augmentations\": True,\n", + " \"number_of_workers\": 8,\n", + " \"apply_deepspeed\": False,\n", + " \"deepspeed_config\": deepspeed_config_path,\n", + " \"apply_ort\": False,\n", + " \"auto_find_batch_size\": False,\n", + " \"precision\": \"32\",\n", + " \"random_seed\": 42,\n", + " \"evaluation_strategy\": \"epoch\",\n", + " \"evaluation_steps\": 500,\n", + " \"logging_strategy\": \"epoch\",\n", + " \"logging_steps\": 500,\n", + " \"save_strategy\": \"epoch\",\n", + " \"save_steps\": 500,\n", + " \"save_total_limit\": -1,\n", + " \"early_stopping\": False,\n", + " \"early_stopping_patience\": 1,\n", + " \"resume_from_checkpoint\": False,\n", + " \"save_as_mlflow_model\": True,\n", + " # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values.\n", + " # \"metric_for_best_model\": \"accuracy\",\n", + " # \"number_of_epochs\": 15,\n", + " # \"max_steps\": -1,\n", + " # \"training_batch_size\": 4,\n", + " # \"validation_batch_size\": 4,\n", + " # \"learning_rate\": 5e-5,\n", + " # \"learning_rate_scheduler\": \"warmup_linear\",\n", + " # \"warmup_steps\": 0,\n", + " # \"optimizer\": \"adamw_hf\",\n", + " # \"weight_decay\": 0.0,\n", + " # \"gradient_accumulation_step\": 1,\n", + " # \"label_smoothing_factor\": 0.0,\n", + " # \"max_grad_norm\": 1.0,\n", + "}\n", + "process_count_per_instance = 1\n", + "instance_count = 1\n", + "\n", + "# Ensure that the user provides only one of mlflow_model or model_name\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify either mlflow_model or model_name for the model to finetune\"\n", + " )\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify ONLY one of mlflow_model and model_name for the model to finetune\"\n", + " )\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " use_model_name = huggingface_model_name\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " use_model_name = aml_registry_model_name\n", + "print(f\"Finetuning model {use_model_name}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.3 Utility function to create pipeline using `transformers_image_classification_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml.entities import PipelineComponent\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "\n", + "@pipeline()\n", + "def create_pipeline_transformers():\n", + " \"\"\"Create pipeline.\"\"\"\n", + "\n", + " transformers_pipeline_component: PipelineComponent = (\n", + " pipeline_component_transformers_func(\n", + " compute_model_import=model_import_cluster_name,\n", + " compute_finetune=finetune_cluster_name,\n", + " training_data=Input(type=AssetTypes.MLTABLE, path=training_mltable_path),\n", + " validation_data=Input(\n", + " type=AssetTypes.MLTABLE, path=validation_mltable_path\n", + " ),\n", + " instance_count=instance_count,\n", + " process_count_per_instance=process_count_per_instance,\n", + " **pipeline_component_args,\n", + " )\n", + " )\n", + " return {\n", + " # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint.\n", + " \"trained_model\": transformers_pipeline_component.outputs.mlflow_model_folder,\n", + " }" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.4 Run the fine tuning job using `transformers_image_classification_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "transformers_pipeline_object = create_pipeline_transformers()\n", + "\n", + "transformers_pipeline_object.display_name = (\n", + " use_model_name + \"_transformers_pipeline_component_run_\" + \"multiclass\"\n", + ")\n", + "# Don't use cached results from previous jobs\n", + "transformers_pipeline_object.settings.force_rerun = True\n", + "\n", + "print(\"Submitting pipeline\")\n", + "\n", + "transformers_pipeline_run = workspace_ml_client.jobs.create_or_update(\n", + " transformers_pipeline_object, experiment_name=experiment_name\n", + ")\n", + "\n", + "print(f\"Pipeline created. URL: {transformers_pipeline_run.studio_url}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.jobs.stream(transformers_pipeline_run.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Get metrics from finetune component\n", + "\n", + "The model training happens as part of the finetune component. Please follow below steps to extract validation metrics from the run." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by AutoML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.2 Get the training and evaluation run" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + "filter = \"tags.mlflow.rootRunId='\" + transformers_pipeline_run.name + \"'\"\n", + "runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + ")\n", + "\n", + "# Get the training and evaluation runs.\n", + "# Using a hacky way till 'Bug 2320997: not able to show eval metrics in FT notebooks - mlflow client now showing display names' is fixed\n", + "for run in runs:\n", + " # Check if run.data.metrics.epoch exists\n", + " if \"epoch\" in run.data.metrics:\n", + " training_run = run\n", + " # Else, check if run.data.metrics.accuracy exists\n", + " elif \"accuracy\" in run.data.metrics:\n", + " evaluation_run = run" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.3 Get training metrics\n", + "\n", + "Access the results (such as Models, Artifacts, Metrics) of a previously completed run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame(training_run.data.metrics, index=[0]).T" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. Register the fine tuned model with the workspace\n", + "\n", + "We will register the model from the output of the fine tuning job. This will track lineage between the fine tuned model and the fine tuning job. The fine tuning job, further, tracks lineage to the foundation model, data and training code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import Model\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# Check if the `trained_model` output is available\n", + "print(\n", + " f\"Pipeline job outputs: {workspace_ml_client.jobs.get(transformers_pipeline_run.name).outputs}\"\n", + ")\n", + "\n", + "# Fetch the model from pipeline job output - not working, hence fetching from fine tune child job\n", + "model_path_from_job = (\n", + " f\"azureml://jobs/{transformers_pipeline_run.name}/outputs/trained_model\"\n", + ")\n", + "print(f\"Path to register model: {model_path_from_job}\")\n", + "\n", + "finetuned_model_name = (\n", + " f\"{use_model_name.replace('/', '-')}-fridge-objects-multiclass-classification\"\n", + ")\n", + "finetuned_model_description = f\"{use_model_name.replace('/', '-')} fine tuned model for fridge objects multiclass classification\"\n", + "prepare_to_register_model = Model(\n", + " path=model_path_from_job,\n", + " type=AssetTypes.MLFLOW_MODEL,\n", + " name=finetuned_model_name,\n", + " version=timestamp, # use timestamp as version to avoid version conflict\n", + " description=finetuned_model_description,\n", + ")\n", + "print(f\"Prepare to register model: \\n{prepare_to_register_model}\")\n", + "\n", + "# Register the model from pipeline job output\n", + "registered_model = workspace_ml_client.models.create_or_update(\n", + " prepare_to_register_model\n", + ")\n", + "print(f\"Registered model: {registered_model}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8. Deploy the fine tuned model to an online endpoint\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "online_endpoint_name = \"hf-mc-fridge-items-\" + datetime.datetime.now().strftime(\n", + " \"%m%d%H%M\"\n", + ")\n", + "online_endpoint_description = f\"Online endpoint for {registered_model.name}, finetuned for fridge objects multiclass classification\"\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=online_endpoint_description,\n", + " auth_mode=\"key\",\n", + " tags={\"foo\": \"bar\"},\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"hf-mc-fridge-mlflow-deploy\"\n", + "print(registered_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=registered_model.id,\n", + " instance_type=\"Standard_DS3_V2\", # Use GPU instance type like STANDARD_NC6s_v3 for faster explanations\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=2000,\n", + " ),\n", + ")\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 9. Test the endpoint with sample data\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference. We will then show the display the scored labels alongside the ground truth labels" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# Existing traffic details\n", + "print(endpoint.traffic)\n", + "\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create request json\n", + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"milk_bottle\", \"99.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "request_file_name = \"sample_request_data.json\"\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualize detections\n", + "Now that we have scored a test image, we can visualize the prediction for this image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install matplotlib\n", + "! pip install seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import json\n", + "import numpy as np\n", + "import seaborn as sns\n", + "from PIL import Image\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.image as mpimg\n", + "\n", + "img_np = mpimg.imread(sample_image)\n", + "img = Image.fromarray(img_np.astype(\"uint8\"), \"RGB\")\n", + "x, y = img.size\n", + "\n", + "# Set a compact figure size\n", + "fig_width = 12\n", + "fig_height = 12\n", + "\n", + "# Initialize figure and axes\n", + "fig = plt.figure(figsize=(fig_width, fig_height))\n", + "gs = fig.add_gridspec(2, 1, height_ratios=[16, 1], hspace=0.2)\n", + "ax1 = fig.add_subplot(gs[0])\n", + "ax2 = fig.add_subplot(gs[1])\n", + "ax1.imshow(img_np)\n", + "ax1.axis(\"off\")\n", + "\n", + "prediction = json.loads(resp)[0]\n", + "label_index = np.argmax(prediction[\"probs\"])\n", + "label = prediction[\"labels\"][label_index]\n", + "conf_score = prediction[\"probs\"][label_index]\n", + "display_text = f\"{label} ({round(conf_score, 3)})\"\n", + "print(display_text)\n", + "\n", + "color = np.random.rand(3)\n", + "\n", + "# Set a stylish color palette\n", + "sns.set_palette(\"pastel\")\n", + "\n", + "# Create the bar plot without x-axis and y-axis markings\n", + "barplot = sns.barplot(x=[conf_score], y=[label], palette=[color], ax=ax2)\n", + "ax2.set_xlabel(\"\") # Remove x-axis label\n", + "ax2.set_ylabel(\"\") # Remove y-axis label\n", + "ax2.set_title(f\"Top Object Scores\", fontsize=12)\n", + "\n", + "# Add scores in front of the bars\n", + "barplot.text(\n", + " conf_score + 0.001, 0, f\"{conf_score:.2f}\", va=\"center\", color=\"black\", fontsize=10\n", + ")\n", + "\n", + "# Remove spines and ticks from the bar plot\n", + "barplot.spines[\"left\"].set_visible(False)\n", + "barplot.spines[\"top\"].set_visible(False)\n", + "barplot.spines[\"right\"].set_visible(False)\n", + "barplot.spines[\"bottom\"].set_visible(False)\n", + "barplot.tick_params(left=False, top=False, right=False, bottom=False)\n", + "barplot.xaxis.set_visible(False) # Remove x-axis\n", + "barplot.yaxis.grid(False) # Remove y-axis grid\n", + "\n", + "# Customize bar plot lines for a fading effect\n", + "for container in barplot.containers:\n", + " for bar in container:\n", + " bar.set_linewidth(0.5)\n", + " bar.set_edgecolor(\"gray\")\n", + " bar.set_alpha(0.7)\n", + "\n", + "# Set plot background color\n", + "fig.patch.set_facecolor(\"#F7F7F7\") # Light gray\n", + "\n", + "plt.tight_layout()\n", + "# fig.savefig(\"plot.png\", bbox_inches=\"tight\")\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 10. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json b/sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.ipynb b/sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.ipynb new file mode 100644 index 0000000000..4ef5092d01 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-classification/multilabel-classification/hftransformers-fridgeobjects-multilabel-classification.ipynb @@ -0,0 +1,1149 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mult-label Image Classification using transformers specific pipeline component\n", + "\n", + "This sample shows how to use `transformers_image_classification_pipeline` component from the `azureml` system registry to fine tune a model for multi-label image classification task using fridgeObjects Dataset. We then deploy the fine tuned model to an online endpoint for real time inference.\n", + "\n", + "### Training data\n", + "We will use the [multi-label fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip) dataset.\n", + "\n", + "### Model\n", + "We will use the `microsoft-beit-base-patch16-224-pt22k-ft22k` model in this notebook. If you need to fine tune a model that is available on HuggingFace, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from HuggingFace.\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites such as compute\n", + "3. Pick a model to fine tune\n", + "4. Prepare dataset for finetuning the model\n", + "5. Submit the fine tuning job using transformers specific image-classification component\n", + "6. Review training and evaluation metrics\n", + "7. Register the fine tuned model\n", + "8. Deploy the fine tuned model for real time inference\n", + "9. Test deployed end point\n", + "9. Clean up resources" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install azure-ai-ml==1.8.0\n", + "! pip install azure-identity==1.13.0" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace `AML_WORKSPACE_NAME`, `RESOURCE_GROUP` and `SUBSCRIPTION_ID` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-MultiLabel-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"SUBSCRIPTION_ID\"\n", + " resource_group = \"RESOURCE_GROUP\"\n", + " workspace_name = \"AML_WORKSPACE_NAME\"\n", + "\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create CPU compute for model selection component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_import_cluster_name = \"sample-model-import-cluster\"\n", + "try:\n", + " _ = workspace_ml_client.compute.get(model_import_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=model_import_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_D12_v2\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create GPU compute for finetune component\n", + "\n", + "The list of GPU machines can be found [here](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes-gpu)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetune_cluster_name = \"sample-finetune-cluster-gpu\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(finetune_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=finetune_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"STANDARD_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick a foundation model to fine tune\n", + "\n", + "We will use the `microsoft-beit-base-patch16-224-pt22k-ft22k` model in this notebook. If you need to fine tune a model that is available on HuggingFace, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from HuggingFace.\n", + "\n", + "Currently following models are supported:\n", + "\n", + "| Model Name | Source |\n", + "| ------ | ---------- |\n", + "| [microsoft-beit-base-patch16-224-pt22k-ft22k](https://ml.azure.com/registries/azureml/models/microsoft-beit-base-patch16-224-pt22k-ft22k/version/5) | azureml registry |\n", + "| [microsoft-swinv2-base-patch4-window12-192-22k](https://ml.azure.com/registries/azureml/models/microsoft-swinv2-base-patch4-window12-192-22k/version/5) | azureml registry |\n", + "| [facebook-deit-base-patch16-224](https://ml.azure.com/registries/azureml/models/facebook-deit-base-patch16-224/version/5) | azureml registry |\n", + "| [google-vit-base-patch16-224](https://ml.azure.com/registries/azureml/models/google-vit-base-patch16-224/version/5) | azureml registry |\n", + "| [Image classification models from Huggingface's Transformer library](https://huggingface.co/models?pipeline_tag=image-classification&library=transformers)| HuggingFace |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "huggingface_model_name = \"microsoft/beit-base-patch16-224-pt22k-ft22k\"\n", + "\n", + "aml_registry_model_name = \"microsoft-beit-base-patch16-224-pt22k-ft22k\"\n", + "foundation_models = registry_ml_client.models.list(aml_registry_model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for fine tuning\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [multi-label fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip) dataset. The fridge object dataset is annotated in the CSV file, where each image corresponds to a line. It defines a mapping of the filename to the labels. Since this is a multi-label classification problem, each image can be associated to multiple labels.\n", + "\n", + "This is the most common data format for multilabel image classification. Each folder title corresponds to the image label for the images contained inside. \n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/multilabelFridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"56.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images multilabel\",\n", + " name=\"fridge-items-images-multilabel-classification\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. In this example, 20% of the data is kept for validation. For further details on jsonl file used for image classification task in automated ml, please refer to the [data schema documentation for multi-label image classification task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#image-classification-multi-label)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "\n", + "# We will copy each JSONL file within its related MLTable folder\n", + "training_mltable_path = os.path.join(dataset_parent_dir, \"training-mltable-folder\")\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# Create the folders if they don't exist\n", + "os.makedirs(training_mltable_path, exist_ok=True)\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the training and validation files\n", + "train_annotations_file = os.path.join(training_mltable_path, \"train_annotations.jsonl\")\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "# Baseline of json line dictionary\n", + "json_line_sample = {\n", + " \"image_url\": uri_folder_data_asset.path,\n", + " \"label\": [],\n", + "}\n", + "\n", + "# Path to the labels file\n", + "labelFile = os.path.join(dataset_dir, \"labels.csv\")\n", + "\n", + "# Read each annotation and convert it to jsonl line\n", + "with open(train_annotations_file, \"w\") as train_f:\n", + " with open(validation_annotations_file, \"w\") as validation_f:\n", + " with open(labelFile, \"r\") as labels:\n", + " for i, line in enumerate(labels):\n", + " # Skipping the title line and any empty lines.\n", + " if i == 0 or len(line.strip()) == 0:\n", + " continue\n", + " line_split = line.strip().split(\",\")\n", + " if len(line_split) != 2:\n", + " print(f\"Skipping the invalid line: {line}\")\n", + " continue\n", + " json_line = dict(json_line_sample)\n", + " json_line[\"image_url\"] += f\"images/{line_split[0]}\"\n", + " json_line[\"label\"] = line_split[1].strip().split(\" \")\n", + "\n", + " if i % train_validation_ratio == 0:\n", + " # Validation annotation\n", + " validation_f.write(json.dumps(json_line) + \"\\n\")\n", + " else:\n", + " # Train annotation\n", + " train_f.write(json.dumps(json_line) + \"\\n\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# Create and save train mltable\n", + "train_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(train_annotations_file)\n", + ")\n", + "save_ml_table_file(training_mltable_path, train_mltable_file_contents)\n", + "\n", + "# Save train and validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the fine tuning job using `transformers_image_classification_pipeline` component\n", + " \n", + "Create the job that uses the `transformers_image_classification_pipeline` component for multi-label image-classification task. Learn more in 5.2 about all the parameters supported for fine tuning." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Create component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "FINETUNE_PIPELINE_COMPONENT_NAME = \"transformers_image_classification_pipeline\"\n", + "pipeline_component_transformers_func = registry_ml_client.components.get(\n", + " name=FINETUNE_PIPELINE_COMPONENT_NAME, label=\"latest\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Create arguments to be passed to `transformers_image_classification_pipeline` component\n", + "\n", + "The `transformers_image_classification_pipeline` component consists of model selection and finetuning components. The detailed arguments for each component can be found at following README files:\n", + "- [Model Import Component](../../../docs/component_docs/image_finetune/transformers_model_import_component.md)\n", + "- [Finetune Component](../../../docs/component_docs/image_finetune/transformers_finetune_component.md)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deepspeed_config_path = \"./deepspeed_configs/zero1.json\"\n", + "if not os.path.exists(deepspeed_config_path):\n", + " print(\"DeepSpeed config file not found\")\n", + " deepspeed_config_path = None\n", + "\n", + "pipeline_component_args = {\n", + " # # Model import args\n", + " \"model_family\": \"HuggingFaceImage\",\n", + " \"mlflow_model\": foundation_model.id, # foundation_model.id is provided, only foundation_model gives UserErrorException: only path input is supported now but get: ...\n", + " # \"model_name\": huggingface_model_name, # specify the model_name instead of mlflow_model if you want to use a model from the huggingface hub\n", + " # # Finetune_args\n", + " \"image_width\": -1, # Default value is -1 which means it would be overwritten by default image width in Hugging Face feature extractor\n", + " \"image_height\": -1, # Default value is -1 which means it would be overwritten by default image height in Hugging Face feature extractor\n", + " \"task_name\": \"image-classification-multilabel\",\n", + " \"apply_augmentations\": True,\n", + " \"number_of_workers\": 8,\n", + " \"apply_deepspeed\": False,\n", + " \"deepspeed_config\": deepspeed_config_path,\n", + " \"apply_ort\": False,\n", + " \"auto_find_batch_size\": False,\n", + " \"precision\": \"32\",\n", + " \"random_seed\": 42,\n", + " \"evaluation_strategy\": \"epoch\",\n", + " \"evaluation_steps\": 500,\n", + " \"logging_strategy\": \"epoch\",\n", + " \"logging_steps\": 500,\n", + " \"save_strategy\": \"epoch\",\n", + " \"save_steps\": 500,\n", + " \"save_total_limit\": -1,\n", + " \"early_stopping\": False,\n", + " \"early_stopping_patience\": 1,\n", + " \"resume_from_checkpoint\": False,\n", + " \"save_as_mlflow_model\": True,\n", + " # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values.\n", + " # \"metric_for_best_model\": \"iou\",\n", + " # \"number_of_epochs\": 15,\n", + " # \"max_steps\": -1,\n", + " # \"training_batch_size\": 4,\n", + " # \"validation_batch_size\": 4,\n", + " # \"learning_rate\": 5e-5,\n", + " # \"learning_rate_scheduler\": \"warmup_linear\",\n", + " # \"warmup_steps\": 0,\n", + " # \"optimizer\": \"adamw_hf\",\n", + " # \"weight_decay\": 0.0,\n", + " # \"gradient_accumulation_step\": 1,\n", + " # \"label_smoothing_factor\": 0.0,\n", + " # \"max_grad_norm\": 1.0,\n", + "}\n", + "process_count_per_instance = 1\n", + "instance_count = 1\n", + "\n", + "# Ensure that the user provides only one of mlflow_model or model_name\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify either mlflow_model or model_name for the model to finetune\"\n", + " )\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify ONLY one of mlflow_model and model_name for the model to finetune\"\n", + " )\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " use_model_name = huggingface_model_name\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " use_model_name = aml_registry_model_name\n", + "print(f\"Finetuning model {use_model_name}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.3 Utility function to create pipeline using `transformers_image_classification_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml.entities import PipelineComponent\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "\n", + "@pipeline()\n", + "def create_pipeline_transformers():\n", + " \"\"\"Create pipeline.\"\"\"\n", + "\n", + " transformers_pipeline_component: PipelineComponent = (\n", + " pipeline_component_transformers_func(\n", + " compute_model_import=model_import_cluster_name,\n", + " compute_finetune=finetune_cluster_name,\n", + " training_data=Input(type=AssetTypes.MLTABLE, path=training_mltable_path),\n", + " validation_data=Input(\n", + " type=AssetTypes.MLTABLE, path=validation_mltable_path\n", + " ),\n", + " instance_count=instance_count,\n", + " process_count_per_instance=process_count_per_instance,\n", + " **pipeline_component_args,\n", + " )\n", + " )\n", + " return {\n", + " # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint.\n", + " \"trained_model\": transformers_pipeline_component.outputs.mlflow_model_folder,\n", + " }" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.4 Run the fine tuning job using `transformers_image_classification_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "transformers_pipeline_object = create_pipeline_transformers()\n", + "\n", + "transformers_pipeline_object.display_name = (\n", + " use_model_name + \"_transformers_pipeline_component_run_\" + \"multilabel\"\n", + ")\n", + "# Don't use cached results from previous jobs\n", + "transformers_pipeline_object.settings.force_rerun = True\n", + "\n", + "print(\"Submitting pipeline\")\n", + "\n", + "transformers_pipeline_run = workspace_ml_client.jobs.create_or_update(\n", + " transformers_pipeline_object, experiment_name=experiment_name\n", + ")\n", + "\n", + "print(f\"Pipeline created. URL: {transformers_pipeline_run.studio_url}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.jobs.stream(transformers_pipeline_run.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Get metrics from finetune component\n", + "\n", + "The model training happens as part of the finetune component. Please follow below steps to extract validation metrics from the run." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by AutoML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.2 Get the training and evaluation run" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + "filter = \"tags.mlflow.rootRunId='\" + transformers_pipeline_run.name + \"'\"\n", + "runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + ")\n", + "\n", + "# Get the training and evaluation runs.\n", + "# Using a hacky way till 'Bug 2320997: not able to show eval metrics in FT notebooks - mlflow client now showing display names' is fixed\n", + "for run in runs:\n", + " # Check if run.data.metrics.epoch exists\n", + " if \"epoch\" in run.data.metrics:\n", + " training_run = run\n", + " # Else, check if run.data.metrics.accuracy exists\n", + " elif \"iou\" in run.data.metrics:\n", + " evaluation_run = run" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.3 Get training metrics\n", + "\n", + "Access the results (such as Models, Artifacts, Metrics) of a previously completed run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame(training_run.data.metrics, index=[0]).T" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. Register the fine tuned model with the workspace\n", + "\n", + "We will register the model from the output of the fine tuning job. This will track lineage between the fine tuned model and the fine tuning job. The fine tuning job, further, tracks lineage to the foundation model, data and training code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import Model\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# Check if the `trained_model` output is available\n", + "print(\n", + " f\"Pipeline job outputs: {workspace_ml_client.jobs.get(transformers_pipeline_run.name).outputs}\"\n", + ")\n", + "\n", + "# Fetch the model from pipeline job output - not working, hence fetching from fine tune child job\n", + "model_path_from_job = (\n", + " f\"azureml://jobs/{transformers_pipeline_run.name}/outputs/trained_model\"\n", + ")\n", + "print(f\"Path to register model: {model_path_from_job}\")\n", + "\n", + "finetuned_model_name = (\n", + " f\"{use_model_name.replace('/', '-')}-fridge-objects-multilabel-classification\"\n", + ")\n", + "finetuned_model_description = f\"{use_model_name.replace('/', '-')} fine tuned model for fridge objects multilabel classification\"\n", + "prepare_to_register_model = Model(\n", + " path=model_path_from_job,\n", + " type=AssetTypes.MLFLOW_MODEL,\n", + " name=finetuned_model_name,\n", + " version=timestamp, # Use timestamp as version to avoid version conflict\n", + " description=finetuned_model_description,\n", + ")\n", + "print(f\"Prepare to register model: \\n{prepare_to_register_model}\")\n", + "\n", + "# Register the model from pipeline job output\n", + "registered_model = workspace_ml_client.models.create_or_update(\n", + " prepare_to_register_model\n", + ")\n", + "print(f\"Registered model: {registered_model}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8. Deploy the fine tuned model to an online endpoint\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "online_endpoint_name = \"hf-ml-fridge-items-\" + datetime.datetime.now().strftime(\n", + " \"%m%d%H%M\"\n", + ")\n", + "online_endpoint_description = f\"Online endpoint for {registered_model.name}, finetuned for fridge objects multilabel classification\"\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=online_endpoint_description,\n", + " auth_mode=\"key\",\n", + " tags={\"foo\": \"bar\"},\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"hf-ml-fridge-items-mlflow-deploy\"\n", + "print(registered_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=registered_model.id,\n", + " instance_type=\"Standard_DS3_V2\", # Use GPU instance type like STANDARD_NC6s_v3 for faster explanations\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=2000,\n", + " ),\n", + ")\n", + "\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 9. Test the endpoint with sample data\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference. We will then display the scored labels alongside the ground truth labels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# Existing traffic details\n", + "print(endpoint.traffic)\n", + "\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create request json\n", + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"56.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "request_file_name = \"sample_request_data.json\"\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualize detections\n", + "Now that we have scored a test image, we can visualize the prediction for this image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install matplotlib\n", + "! pip install seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import json\n", + "import numpy as np\n", + "import seaborn as sns\n", + "from PIL import Image\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.image as mpimg\n", + "\n", + "img_np = mpimg.imread(sample_image)\n", + "img = Image.fromarray(img_np.astype(\"uint8\"), \"RGB\")\n", + "x, y = img.size\n", + "score_threshold = 0.5 # display top objects with confidence score > 0.5\n", + "\n", + "# Set a compact figure size\n", + "fig_width = 12\n", + "fig_height = 12\n", + "\n", + "# Initialize figure and axes\n", + "fig = plt.figure(figsize=(fig_width, fig_height))\n", + "gs = fig.add_gridspec(2, 1, height_ratios=[4, 1], hspace=0.2)\n", + "ax1 = fig.add_subplot(gs[0])\n", + "ax2 = fig.add_subplot(gs[1])\n", + "ax1.imshow(img_np)\n", + "ax1.axis(\"off\")\n", + "prediction_list = json.loads(resp)\n", + "prediction = prediction_list[0]\n", + "top_indices = np.argsort(prediction[\"probs\"])[::-1]\n", + "prediction[\"probs\"] = [prediction[\"probs\"][index] for index in top_indices]\n", + "prediction[\"labels\"] = [prediction[\"labels\"][index] for index in top_indices]\n", + "\n", + "sorted_scores = []\n", + "sorted_labels = []\n", + "sorted_colors = []\n", + "\n", + "for index, score in enumerate(prediction[\"probs\"]):\n", + " if score > score_threshold:\n", + " label = prediction[\"labels\"][index]\n", + " display_text = f\"{label} ({round(score, 3)})\"\n", + " print(display_text)\n", + "\n", + " color = np.random.rand(3)\n", + " sorted_scores.append(score)\n", + " sorted_colors.append(color)\n", + " sorted_labels.append(label)\n", + "\n", + "# Set a stylish color palette\n", + "sns.set_palette(\"pastel\")\n", + "\n", + "# Create the bar plot without x-axis and y-axis markings\n", + "barplot = sns.barplot(x=sorted_scores, y=sorted_labels, palette=sorted_colors, ax=ax2)\n", + "ax2.set_xlabel(\"\") # Remove x-axis label\n", + "ax2.set_ylabel(\"\") # Remove y-axis label\n", + "ax2.set_title(f\"Top {len(sorted_scores)} Object Scores\", fontsize=12)\n", + "\n", + "# Add scores in front of the bars\n", + "for index, value in enumerate(sorted_scores):\n", + " barplot.text(\n", + " value + 0.001, index, f\"{value:.2f}\", va=\"center\", color=\"black\", fontsize=10\n", + " )\n", + "\n", + "# Remove spines and ticks from the bar plot\n", + "barplot.spines[\"left\"].set_visible(False)\n", + "barplot.spines[\"top\"].set_visible(False)\n", + "barplot.spines[\"right\"].set_visible(False)\n", + "barplot.spines[\"bottom\"].set_visible(False)\n", + "barplot.tick_params(left=False, top=False, right=False, bottom=False)\n", + "barplot.xaxis.set_visible(False) # Remove x-axis\n", + "barplot.yaxis.grid(False) # Remove y-axis grid\n", + "\n", + "# Customize bar plot lines for a fading effect\n", + "for container in barplot.containers:\n", + " for bar in container:\n", + " bar.set_linewidth(0.5)\n", + " bar.set_edgecolor(\"gray\")\n", + " bar.set_alpha(0.7)\n", + "\n", + "# Set plot background color\n", + "fig.patch.set_facecolor(\"#F7F7F7\") # Light gray\n", + "\n", + "plt.tight_layout()\n", + "# fig.savefig(\"plot.png\", bbox_inches=\"tight\")\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 10. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json b/sdk/python/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-instance-segmentation/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/sdk/python/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py b/sdk/python/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py new file mode 100644 index 0000000000..3149a48459 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-instance-segmentation/jsonl_converter.py @@ -0,0 +1,227 @@ +import argparse +import os +import json +import numpy as np +import PIL.Image as Image +import xml.etree.ElementTree as ET + +from simplification.cutil import simplify_coords +from skimage import measure + + +def convert_mask_to_polygon( + mask, + max_polygon_points=100, + score_threshold=0.5, + max_refinement_iterations=25, + edge_safety_padding=1, +): + """Convert a numpy mask to a polygon outline in normalized coordinates. + + :param mask: Pixel mask, where each pixel has an object (float) score in [0, 1], in size ([1, height, width]) + :type: mask: + :param max_polygon_points: Maximum number of (x, y) coordinate pairs in polygon + :type: max_polygon_points: Int + :param score_threshold: Score cutoff for considering a pixel as in object. + :type: score_threshold: Float + :param max_refinement_iterations: Maximum number of times to refine the polygon + trying to reduce the number of pixels to meet max polygon points. + :type: max_refinement_iterations: Int + :param edge_safety_padding: Number of pixels to pad the mask with + :type edge_safety_padding: Int + :return: normalized polygon coordinates + :rtype: list of list + """ + # Convert to numpy bitmask + mask = mask[0] + mask_array = np.array((mask > score_threshold), dtype=np.uint8) + image_shape = mask_array.shape + + # Pad the mask to avoid errors at the edge of the mask + embedded_mask = np.zeros( + ( + image_shape[0] + 2 * edge_safety_padding, + image_shape[1] + 2 * edge_safety_padding, + ), + dtype=np.uint8, + ) + embedded_mask[ + edge_safety_padding : image_shape[0] + edge_safety_padding, + edge_safety_padding : image_shape[1] + edge_safety_padding, + ] = mask_array + + # Find Image Contours + contours = measure.find_contours(embedded_mask, 0.5) + simplified_contours = [] + + for contour in contours: + + # Iteratively reduce polygon points, if necessary + if max_polygon_points is not None: + simplify_factor = 0 + while ( + len(contour) > max_polygon_points + and simplify_factor < max_refinement_iterations + ): + contour = simplify_coords(contour, simplify_factor) + simplify_factor += 1 + + # Convert to [x, y, x, y, ....] coordinates and correct for padding + unwrapped_contour = [0] * (2 * len(contour)) + unwrapped_contour[::2] = np.ceil(contour[:, 1]) - edge_safety_padding + unwrapped_contour[1::2] = np.ceil(contour[:, 0]) - edge_safety_padding + + simplified_contours.append(unwrapped_contour) + + return _normalize_contour(simplified_contours, image_shape) + + +def _normalize_contour(contours, image_shape): + + height, width = image_shape[0], image_shape[1] + + for contour in contours: + contour[::2] = [x * 1.0 / width for x in contour[::2]] + contour[1::2] = [y * 1.0 / height for y in contour[1::2]] + + return contours + + +def binarise_mask(mask_fname): + + mask = Image.open(mask_fname) + mask = np.array(mask) + # instances are encoded as different colors + obj_ids = np.unique(mask) + # first id is the background, so remove it + obj_ids = obj_ids[1:] + + # split the color-encoded mask into a set of binary masks + binary_masks = mask == obj_ids[:, None, None] + return binary_masks + + +def parsing_mask(mask_fname): + + # For this particular dataset, initially each mask was merged (based on binary mask of each object) + # in the order of the bounding boxes described in the corresponding PASCAL VOC annotation file. + # Therefore, we have to extract each binary mask which is in the order of objects in the annotation file. + # https://github.com/microsoft/computervision-recipes/blob/master/utils_cv/detection/dataset.py + binary_masks = binarise_mask(mask_fname) + polygons = [] + for bi_mask in binary_masks: + + if len(bi_mask.shape) == 2: + bi_mask = bi_mask[np.newaxis, :] + polygon = convert_mask_to_polygon(bi_mask) + polygons.append(polygon) + + return polygons + + +def convert_mask_in_VOC_to_jsonl(dataset_dir: str, remote_path: str) -> None: + """ + :param dataset_dir: Path to dataset directory, where user has images and anotations + :type: dataset_dir: String + :param remote_path: Remote path for dataset + :type: remote_path: String + """ + + dataset_parent_dir = os.path.dirname(dataset_dir) + print(dataset_dir, dataset_parent_dir) + + # We'll copy each JSONL file within its related MLTable folder + training_mltable_path = os.path.join(dataset_parent_dir, "training-mltable-folder") + validation_mltable_path = os.path.join( + dataset_parent_dir, "validation-mltable-folder" + ) + + # First, let's create the folders if they don't exist + os.makedirs(training_mltable_path, exist_ok=True) + os.makedirs(validation_mltable_path, exist_ok=True) + + train_validation_ratio = 5 + + # Path to the training and validation files + train_annotations_file = os.path.join( + training_mltable_path, "train_annotations.jsonl" + ) + validation_annotations_file = os.path.join( + validation_mltable_path, "validation_annotations.jsonl" + ) + + # Path to the annotations + annotations_folder = os.path.join(dataset_dir, "annotations") + mask_folder = os.path.join(dataset_dir, "segmentation-masks") + + # sample json line dictionary + json_line_sample = { + "image_url": remote_path, + "image_details": {"format": None, "width": None, "height": None}, + "label": [], + } + + # Read each annotation and convert it to jsonl line + with open(train_annotations_file, "w") as train_f: + with open(validation_annotations_file, "w") as validation_f: + for i, filename in enumerate(os.listdir(annotations_folder)): + if not filename.endswith(".xml"): + print(f"Skipping unknown file: {filename}") + continue + + annotation_file_path = os.path.join(annotations_folder, filename) + print(f"Parsing {annotation_file_path}") + + root = ET.parse(annotation_file_path).getroot() + width = int(root.find("size/width").text) + height = int(root.find("size/height").text) + + # convert mask into polygon + mask_fname = os.path.join(mask_folder, filename[:-4] + ".png") + polygons = parsing_mask(mask_fname) + + labels = [] + for index, object in enumerate(root.findall("object")): + name = object.find("name").text + isCrowd = int(object.find("difficult").text) + labels.append( + { + "label": name, + "bbox": "null", + "isCrowd": isCrowd, + "polygon": polygons[index], + } + ) + + # build the jsonl file + image_filename = root.find("filename").text + _, file_extension = os.path.splitext(image_filename) + json_line = dict(json_line_sample) + json_line["image_url"] = ( + json_line["image_url"] + "images/" + image_filename + ) + json_line["image_details"]["format"] = file_extension[1:] + json_line["image_details"]["width"] = width + json_line["image_details"]["height"] = height + json_line["label"] = labels + + if i % train_validation_ratio == 0: + # validation annotation + validation_f.write(json.dumps(json_line) + "\n") + else: + # train annotation + train_f.write(json.dumps(json_line) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(allow_abbrev=False) + parser.add_argument( + "--data_path", + type=str, + help="The directory contains images, annotations, and masks.", + ) + + args, remaining_args = parser.parse_known_args() + data_path = args.data_path + + convert_mask_in_VOC_to_jsonl(data_path, None) diff --git a/sdk/python/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb b/sdk/python/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb new file mode 100644 index 0000000000..ddcf33fa40 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb @@ -0,0 +1,1162 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image instance-segmentation using MMDetection specific pipeline component\n", + "\n", + "This sample shows how to use `mmdetection_image_objectdetection_instancesegmentation_pipeline` component from the `azureml` system registry to fine tune a model for image instance-segmentation task using fridgeObjects Dataset. We then deploy the fine tuned model to an online endpoint for real time inference.\n", + "\n", + "### Training data\n", + "We will use the [odfridgeObjectsMask](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip) dataset.\n", + "\n", + "### Model\n", + "We will use the `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` model in this notebook. If you need to fine tune a model that is available on MMDetection model zoo, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from MMDetection model zoo.\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites such as compute\n", + "3. Pick a model to fine tune\n", + "4. Prepare dataset for finetuning the model\n", + "5. Submit the fine tuning job using MMDetection specific image instance-segmentation and instance-segmentation component\n", + "6. Review training and evaluation metrics\n", + "7. Register the fine tuned model\n", + "8. Deploy the fine tuned model for real time inference\n", + "9. Test deployed end point\n", + "9. Clean up resources" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install azure-ai-ml==1.8.0\n", + "! pip install azure-identity==1.13.0" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace ``, `` and `` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-IS-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + " workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + " )\n", + "\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create CPU compute for model selection component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_import_cluster_name = \"sample-model-import-cluster\"\n", + "try:\n", + " _ = workspace_ml_client.compute.get(model_import_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=model_import_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_D12_v2\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create GPU compute for finetune component\n", + "\n", + "The list of GPU machines can be found [here](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes-gpu)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetune_cluster_name = \"sample-finetune-cluster-gpu\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(finetune_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=finetune_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"STANDARD_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick a foundation model to fine tune\n", + "\n", + "We will use the `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` model in this notebook. If you need to fine tune a model that is available on MMDetection model zoo, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from MMDetection model zoo.\n", + "\n", + "Currently following models are supported:\n", + "\n", + "| Model Name | Source |\n", + "| :------------: | :-------: |\n", + "| [mask_rcnn_swin-t-p4-w7_fpn_1x_coco](https://ml.azure.com/registries/azureml/models/mask_rcnn_swin-t-p4-w7_fpn_1x_coco/version/3) | azureml registry |\n", + "| [Image instance-segmentation models from MMDetection](https://github.com/open-mmlab/mmdetection/blob/v2.28.2/docs/en/model_zoo.md) | MMDetection |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mmdetection_model_name = \"mask_rcnn_swin-t-p4-w7_fpn_1x_coco\"\n", + "\n", + "aml_registry_model_name = \"mask_rcnn_swin-t-p4-w7_fpn_1x_coco\"\n", + "foundation_models = registry_ml_client.models.list(name=aml_registry_model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [odfridgeObjectsMask](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip), a toy dataset called Fridge Objects, which consists of 128 images of 4 labels of beverage container {`can`, `carton`, `milk bottle`, `water bottle`} photos taken on different backgrounds.\n", + "\n", + "All images in this notebook are hosted in [this repository](https://github.com/microsoft/computervision-recipes) and are made available under the [MIT license](https://github.com/microsoft/computervision-recipes/blob/master/LICENSE).\n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"31.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images instance segmentation\",\n", + " name=\"fridge-items-images-instance-segmentation\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "In this example, the fridge object dataset is annotated in Pascal VOC format, where each image corresponds to an xml file. Each xml file contains information on where its corresponding image file is located and also contains information about the bounding boxes and the object labels. \n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. In this example, 20% of the data is kept for validation. For further details on jsonl file used for image classification task in automated ml, please refer to the [data schema documentation for image instance segmentation task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#instance-segmentation)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The jsonl_converter below relies on scikit-image and simplification.\n", + "# If you don't have them installed, install them before converting data by runing this cell.\n", + "%pip install \"scikit-image\" \"simplification\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from jsonl_converter import convert_mask_in_VOC_to_jsonl\n", + "\n", + "convert_mask_in_VOC_to_jsonl(dataset_dir, uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.5 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# We will copy each JSONL file within its related MLTable folder\n", + "training_mltable_path = os.path.join(dataset_parent_dir, \"training-mltable-folder\")\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# Create the folders if they don't exist\n", + "os.makedirs(training_mltable_path, exist_ok=True)\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "# Path to the training and validation files\n", + "train_annotations_file = os.path.join(training_mltable_path, \"train_annotations.jsonl\")\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "# Create and save train mltable\n", + "train_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(train_annotations_file)\n", + ")\n", + "save_ml_table_file(training_mltable_path, train_mltable_file_contents)\n", + "\n", + "# Save train and validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the fine tuning job using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component\n", + " \n", + "Create the job that uses the `mmdetection_image_objectdetection_instancesegmentation_pipeline` component for image instance segmentation and instance segmentation tasks. Learn more in 5.2 about all the parameters supported for fine tuning." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Create component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "FINETUNE_PIPELINE_COMPONENT_NAME = (\n", + " \"mmdetection_image_objectdetection_instancesegmentation_pipeline\"\n", + ")\n", + "pipeline_component_mmdetection_func = registry_ml_client.components.get(\n", + " name=FINETUNE_PIPELINE_COMPONENT_NAME, label=\"latest\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Create arguments to be passed to `mmdetection_image_objectdetection_instancesegmentation_pipeline` component\n", + "\n", + "The `mmdetection_image_objectdetection_instancesegmentation_pipeline` component consists of model selection and finetuning components. The detailed arguments for each component can be found at following README files:\n", + "- [Model Import Component](../../docs/component_docs/image_finetune/mmd_model_import_component.md)\n", + "- [Finetune Component](../../docs/component_docs/image_finetune/mmd_finetune_component.md)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deepspeed_config_path = \"./deepspeed_configs/zero1.json\"\n", + "if not os.path.exists(deepspeed_config_path):\n", + " print(\"DeepSpeed config file not found\")\n", + " deepspeed_config_path = None\n", + "\n", + "pipeline_component_args = {\n", + " # # Model import args\n", + " \"model_family\": \"MmDetectionImage\",\n", + " \"mlflow_model\": foundation_model.id, # foundation_model.id is provided, only foundation_model gives UserErrorException: only path input is supported now but get: ...\n", + " # \"model_name\": mmdetection_model_name, # specify the model_name instead of mlflow_model if you want to use a model from the mmdetection model zoo\n", + " # Finetune args\n", + " \"task_name\": \"image-instance-segmentation\",\n", + " \"apply_augmentations\": True,\n", + " \"number_of_workers\": 8,\n", + " \"apply_deepspeed\": False,\n", + " \"deepspeed_config\": deepspeed_config_path,\n", + " \"apply_ort\": False,\n", + " \"auto_find_batch_size\": False,\n", + " \"extra_optim_args\": \"\",\n", + " \"precision\": \"32\",\n", + " \"random_seed\": 42,\n", + " \"evaluation_strategy\": \"epoch\",\n", + " \"evaluation_steps\": 500,\n", + " \"logging_strategy\": \"epoch\",\n", + " \"logging_steps\": 500,\n", + " \"save_strategy\": \"epoch\",\n", + " \"save_steps\": 500,\n", + " \"save_total_limit\": -1,\n", + " \"early_stopping\": False,\n", + " \"early_stopping_patience\": 1,\n", + " \"resume_from_checkpoint\": False,\n", + " \"save_as_mlflow_model\": True,\n", + " # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values.\n", + " # \"image_min_size\": -1,\n", + " # \"image_max_size\": -1,\n", + " # \"metric_for_best_model\": \"mean_average_precision\",\n", + " # \"number_of_epochs\": 15,\n", + " # \"max_steps\": -1,\n", + " # \"training_batch_size\": 4,\n", + " # \"validation_batch_size\": 4,\n", + " # \"learning_rate\": 5e-5,\n", + " # \"learning_rate_scheduler\": \"warmup_linear\",\n", + " # \"warmup_steps\": 0,\n", + " # \"optimizer\": \"adamw_hf\",\n", + " # \"weight_decay\": 0.0,\n", + " # \"gradient_accumulation_step\": 1,\n", + " # \"max_grad_norm\": 1.0,\n", + " # \"iou_threshold\": 0.5,\n", + " # \"box_score_threshold\": 0.3,\n", + "}\n", + "instance_count = 1\n", + "process_count_per_instance = 1\n", + "\n", + "# Ensure that the user provides only one of mlflow_model or model_name\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify either mlflow_model or model_name for the model to finetune\"\n", + " )\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify ONLY one of mlflow_model and model_name for the model to finetune\"\n", + " )\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " use_model_name = mmdetection_model_name\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " use_model_name = aml_registry_model_name\n", + "print(f\"Finetuning model {use_model_name}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.3 Utility function to create pipeline using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml.entities import PipelineComponent\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "\n", + "@pipeline()\n", + "def create_pipeline_mmdetection():\n", + " \"\"\"Create pipeline.\"\"\"\n", + "\n", + " mmdetection_pipeline_component: PipelineComponent = (\n", + " pipeline_component_mmdetection_func(\n", + " compute_model_import=model_import_cluster_name,\n", + " compute_finetune=finetune_cluster_name,\n", + " training_data=Input(type=AssetTypes.MLTABLE, path=training_mltable_path),\n", + " validation_data=Input(\n", + " type=AssetTypes.MLTABLE, path=validation_mltable_path\n", + " ),\n", + " instance_count=instance_count,\n", + " process_count_per_instance=process_count_per_instance,\n", + " **pipeline_component_args,\n", + " )\n", + " )\n", + " return {\n", + " # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint.\n", + " \"trained_model\": mmdetection_pipeline_component.outputs.mlflow_model_folder,\n", + " }" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.4 Run the fine tuning job using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mmdetection_pipeline_object = create_pipeline_mmdetection()\n", + "\n", + "mmdetection_pipeline_object.display_name = (\n", + " use_model_name + \"_mmdetection_pipeline_component_run_\" + \"is\"\n", + ")\n", + "# Don't use cached results from previous jobs\n", + "mmdetection_pipeline_object.settings.force_rerun = True\n", + "\n", + "print(\"Submitting pipeline\")\n", + "\n", + "mmdetection_pipeline_run = workspace_ml_client.jobs.create_or_update(\n", + " mmdetection_pipeline_object, experiment_name=experiment_name\n", + ")\n", + "\n", + "print(f\"Pipeline created. URL: {mmdetection_pipeline_run.studio_url}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.jobs.stream(mmdetection_pipeline_run.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Get metrics from finetune component\n", + "\n", + "The model training happens as part of the finetune component. Please follow below steps to extract validation metrics from the run." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by AutoML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.2 Get the training and evaluation run\n", + "\n", + "Fetch the training and evaluation run ids from the above pipeline run. We will later use these run ids to fetch the metrics. We will use the training run id to register the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + "filter = \"tags.mlflow.rootRunId='\" + mmdetection_pipeline_run.name + \"'\"\n", + "runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + ")\n", + "\n", + "# Get the training and evaluation runs.\n", + "# Using a hacky way till 'Bug 2320997: not able to show eval metrics in FT notebooks - mlflow client now showing display names' is fixed\n", + "for run in runs:\n", + " # Check if run.data.metrics.epoch exists\n", + " if \"epoch\" in run.data.metrics:\n", + " training_run = run\n", + " # Else, check if run.data.metrics.accuracy exists\n", + " elif \"mean_average_precision\" in run.data.metrics:\n", + " evaluation_run = run" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.3 Get training metrics\n", + "\n", + "Access the results (such as Models, Artifacts, Metrics) of a previously completed run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame(training_run.data.metrics, index=[0]).T" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. Register the fine tuned model with the workspace\n", + "\n", + "We will register the model from the output of the fine tuning job. This will track lineage between the fine tuned model and the fine tuning job. The fine tuning job, further, tracks lineage to the foundation model, data and training code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import Model\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# Check if the `trained_model` output is available\n", + "print(\n", + " f\"Pipeline job outputs: {workspace_ml_client.jobs.get(mmdetection_pipeline_run.name).outputs}\"\n", + ")\n", + "\n", + "# Fetch the model from pipeline job output - not working, hence fetching from fine tune child job\n", + "model_path_from_job = (\n", + " f\"azureml://jobs/{mmdetection_pipeline_run.name}/outputs/trained_model\"\n", + ")\n", + "print(f\"Path to register model: {model_path_from_job}\")\n", + "\n", + "finetuned_model_name = f\"{use_model_name.replace('/', '-')}-fridge-objects-is\"\n", + "finetuned_model_description = f\"{use_model_name.replace('/', '-')} fine tuned model for fridge objects instance segmentation\"\n", + "prepare_to_register_model = Model(\n", + " path=model_path_from_job,\n", + " type=AssetTypes.MLFLOW_MODEL,\n", + " name=finetuned_model_name,\n", + " version=timestamp, # Use timestamp as version to avoid version conflict\n", + " description=finetuned_model_description,\n", + ")\n", + "print(f\"Prepare to register model: \\n{prepare_to_register_model}\")\n", + "\n", + "# Register the model from pipeline job output\n", + "registered_model = workspace_ml_client.models.create_or_update(\n", + " prepare_to_register_model\n", + ")\n", + "print(f\"Registered model: {registered_model}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8. Deploy the fine tuned model to an online endpoint\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "online_endpoint_name = \"mmd-is-fridge-items-\" + datetime.datetime.now().strftime(\n", + " \"%m%d%H%M\"\n", + ")\n", + "online_endpoint_description = f\"Online endpoint for {registered_model.name}, finetuned for fridge objects instance segmentation\"\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=online_endpoint_description,\n", + " auth_mode=\"key\",\n", + " tags={\"foo\": \"bar\"},\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"mmd-is-fridge-mlflow-deploy\"\n", + "print(registered_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=registered_model.id,\n", + " instance_type=\"Standard_DS3_V2\",\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=10,\n", + " ),\n", + ")\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 9. Test the endpoint with sample data\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference. We will then display the scored labels alongside the ground truth labels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# Existing traffic details\n", + "print(endpoint.traffic)\n", + "\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create request json\n", + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"99.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "request_file_name = \"sample_request_data.json\"\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualize detections\n", + "Now that we have scored a test image, we can visualize the bounding boxes and masks for this image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import json\n", + "import numpy as np\n", + "from PIL import Image\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.image as mpimg\n", + "import matplotlib.patches as patches\n", + "from matplotlib.lines import Line2D\n", + "\n", + "\n", + "img_np = mpimg.imread(sample_image)\n", + "img = Image.fromarray(img_np.astype(\"uint8\"), \"RGB\")\n", + "x, y = img.size\n", + "conf_threshold = 0.6 # display top objects with confidence score > 0.6\n", + "\n", + "# Set a compact figure size\n", + "fig_width = 12\n", + "fig_height = 12\n", + "\n", + "# Initialize figure and axes\n", + "fig = plt.figure(figsize=(fig_width, fig_height))\n", + "gs = fig.add_gridspec(2, 1, height_ratios=[4, 1], hspace=0.2)\n", + "ax1 = fig.add_subplot(gs[0])\n", + "ax2 = fig.add_subplot(gs[1])\n", + "\n", + "# Display the image with bounding boxes and segmentation maps\n", + "ax1.imshow(img_np)\n", + "ax1.axis(\"off\")\n", + "\n", + "# Draw bounding boxes and segmentation maps for each detection\n", + "detections = json.loads(resp)[0]\n", + "sorted_data = sorted(detections[\"boxes\"], key=lambda x: x[\"score\"], reverse=True)\n", + "sorted_scores = []\n", + "sorted_colors = []\n", + "unique_labels = []\n", + "label_counter = {}\n", + "\n", + "for i, detect in enumerate(sorted_data):\n", + " label = detect[\"label\"]\n", + " box = detect[\"box\"]\n", + " polygon = detect[\"polygon\"]\n", + " conf_score = detect[\"score\"]\n", + "\n", + " if conf_score > conf_threshold:\n", + " # Modify labels to make them unique with numbering\n", + " if label not in label_counter:\n", + " label_counter[label] = 1\n", + " unique_labels.append(f\"{label} {label_counter[label]}\")\n", + " else:\n", + " label_counter[label] += 1\n", + " unique_labels.append(f\"{label} {label_counter[label]}\")\n", + "\n", + " current_label = unique_labels[-1]\n", + "\n", + " ymin, xmin, ymax, xmax = (\n", + " box[\"topY\"],\n", + " box[\"topX\"],\n", + " box[\"bottomY\"],\n", + " box[\"bottomX\"],\n", + " )\n", + " topleft_x, topleft_y = x * xmin, y * ymin\n", + " width, height = x * (xmax - xmin), y * (ymax - ymin)\n", + "\n", + " color = np.random.rand(3)\n", + " rect = patches.Rectangle(\n", + " (topleft_x, topleft_y),\n", + " width,\n", + " height,\n", + " linewidth=2,\n", + " edgecolor=color,\n", + " facecolor=\"none\",\n", + " )\n", + "\n", + " ax1.add_patch(rect)\n", + " ax1.text(topleft_x, topleft_y - 10, current_label, color=color, fontsize=20)\n", + "\n", + " polygon_np = np.array(polygon[0])\n", + " polygon_np = polygon_np.reshape(-1, 2)\n", + " polygon_np[:, 0] *= x\n", + " polygon_np[:, 1] *= y\n", + " poly = plt.Polygon(polygon_np, True, facecolor=color, alpha=0.4)\n", + " ax1.add_patch(poly)\n", + " # Draw polyline\n", + " poly_line = Line2D(\n", + " polygon_np[:, 0],\n", + " polygon_np[:, 1],\n", + " linewidth=0.4, # Adjust the line width for the polyline\n", + " color=color, # Set polyline color to match bounding box\n", + " marker=\"o\",\n", + " markersize=2, # Smaller markers for the polyline\n", + " markerfacecolor=color,\n", + " )\n", + " ax1.add_line(poly_line)\n", + " sorted_scores.append(conf_score)\n", + " sorted_colors.append(color)\n", + "\n", + "# Set a stylish color palette\n", + "sns.set_palette(\"pastel\")\n", + "# Create the bar plot without x-axis and y-axis markings\n", + "barplot = sns.barplot(x=sorted_scores, y=unique_labels, palette=sorted_colors, ax=ax2)\n", + "ax2.set_xlabel(\"\") # Remove x-axis label\n", + "ax2.set_ylabel(\"\") # Remove y-axis label\n", + "ax2.set_title(f\"Top {len(sorted_scores)} Object Scores\", fontsize=12)\n", + "\n", + "# Add scores in front of the bars\n", + "for index, value in enumerate(sorted_scores):\n", + " barplot.text(\n", + " value + 0.01, index, f\"{value:.2f}\", va=\"center\", color=\"black\", fontsize=10\n", + " )\n", + "\n", + "# Remove spines and ticks from the bar plot\n", + "barplot.spines[\"left\"].set_visible(False)\n", + "barplot.spines[\"top\"].set_visible(False)\n", + "barplot.spines[\"right\"].set_visible(False)\n", + "barplot.spines[\"bottom\"].set_visible(False)\n", + "barplot.tick_params(left=False, top=False, right=False, bottom=False)\n", + "barplot.xaxis.set_visible(False) # Remove x-axis\n", + "barplot.yaxis.grid(False) # Remove y-axis grid\n", + "\n", + "# Set plot background color\n", + "fig.patch.set_facecolor(\"#F7F7F7\") # Light gray\n", + "\n", + "plt.tight_layout()\n", + "# fig.savefig(\"plot.png\", bbox_inches=\"tight\")\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 10. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/finetune/image-object-detection/coco2jsonl.py b/sdk/python/foundation-models/system/finetune/image-object-detection/coco2jsonl.py new file mode 100644 index 0000000000..8f4c9d1ae1 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-object-detection/coco2jsonl.py @@ -0,0 +1,127 @@ +import json +import os +import sys +import argparse + +# Define Converters + + +class CocoToJSONLinesConverter: + def convert(self): + raise NotImplementedError + + +class BoundingBoxConverter(CocoToJSONLinesConverter): + def __init__(self, coco_data): + self.json_lines_data = [] + self.categories = {} + self.coco_data = coco_data + self.image_id_to_data_index = {} + for i in range(0, len(coco_data["images"])): + self.json_lines_data.append({}) + self.json_lines_data[i]["image_url"] = "" + self.json_lines_data[i]["image_details"] = {} + self.json_lines_data[i]["label"] = [] + for i in range(0, len(coco_data["categories"])): + self.categories[coco_data["categories"][i]["id"]] = coco_data["categories"][ + i + ]["name"] + + def _populate_image_url(self, index, coco_image): + self.json_lines_data[index]["image_url"] = coco_image["file_name"] + self.image_id_to_data_index[coco_image["id"]] = index + + def _populate_image_details(self, index, coco_image): + file_name = coco_image["file_name"] + self.json_lines_data[index]["image_details"]["format"] = file_name[ + file_name.rfind(".") + 1 : + ] + self.json_lines_data[index]["image_details"]["width"] = coco_image["width"] + self.json_lines_data[index]["image_details"]["height"] = coco_image["height"] + + def _populate_bbox_in_label(self, label, annotation, image_details): + # if bbox comes as normalized, skip normalization. + if max(annotation["bbox"]) < 1.5: + width = 1 + height = 1 + else: + width = image_details["width"] + height = image_details["height"] + label["topX"] = annotation["bbox"][0] / width + label["topY"] = annotation["bbox"][1] / height + label["bottomX"] = (annotation["bbox"][0] + annotation["bbox"][2]) / width + label["bottomY"] = (annotation["bbox"][1] + annotation["bbox"][3]) / height + + def _populate_label(self, annotation): + index = self.image_id_to_data_index[annotation["image_id"]] + image_details = self.json_lines_data[index]["image_details"] + label = {"label": self.categories[annotation["category_id"]]} + self._populate_bbox_in_label(label, annotation, image_details) + self._populate_isCrowd(label, annotation) + self.json_lines_data[index]["label"].append(label) + + def _populate_isCrowd(self, label, annotation): + if "iscrowd" in annotation.keys(): + label["isCrowd"] = annotation["iscrowd"] + + def convert(self): + for i in range(0, len(self.coco_data["images"])): + self._populate_image_url(i, self.coco_data["images"][i]) + self._populate_image_details(i, self.coco_data["images"][i]) + for i in range(0, len(self.coco_data["annotations"])): + self._populate_label(self.coco_data["annotations"][i]) + return self.json_lines_data + + +if __name__ == "__main__": + # Parse arguments that are passed into the script + parser = argparse.ArgumentParser() + parser.add_argument("--input_coco_file_path", type=str, required=True) + parser.add_argument("--output_dir", type=str, required=True) + parser.add_argument("--output_file_name", type=str, required=True) + parser.add_argument( + "--task_type", + type=str, + required=True, + choices=["ObjectDetection"], + default="ObjectDetection", + ) + parser.add_argument("--base_url", type=str, default=None) + + args = parser.parse_args() + + input_coco_file_path = args.input_coco_file_path + output_dir = args.output_dir + output_file_path = output_dir + "/" + args.output_file_name + task_type = args.task_type + base_url = args.base_url + + def read_coco_file(coco_file): + with open(coco_file) as f_in: + return json.load(f_in) + + def write_json_lines(converter, filename, base_url=None): + json_lines_data = converter.convert() + with open(filename, "w") as outfile: + for json_line in json_lines_data: + if base_url is not None: + image_url = json_line["image_url"] + json_line["image_url"] = ( + base_url + image_url[image_url.rfind("/") + 1 :] + ) + json.dump(json_line, outfile, separators=(",", ":")) + outfile.write("\n") + print(f"Conversion completed. Converted {len(json_lines_data)} lines.") + + coco_data = read_coco_file(input_coco_file_path) + + print(f"Converting for {task_type}") + + # Defined in azureml.contrib.dataset.labeled_dataset.LabeledDatasetTask.OBJECT_DETECTION.value + if task_type == "ObjectDetection": + converter = BoundingBoxConverter(coco_data) + write_json_lines(converter, output_file_path, base_url) + + else: + print("ERROR: Invalid Task Type") + pass diff --git a/sdk/python/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json b/sdk/python/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json new file mode 100644 index 0000000000..1d2b843bf9 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-object-detection/deepspeed_configs/zero1.json @@ -0,0 +1,42 @@ +{ + "fp16": { + "enabled": true, + "loss_scale": 0, + "loss_scale_window": 1000, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "zero_optimization": { + "stage": 1, + "allgather_partitions": true, + "allgather_bucket_size": 200000000, + "overlap_comm": true, + "reduce_scatter": true, + "reduce_bucket_size": 200000000, + "contiguous_gradients": false, + "cpu_offload": false + }, + "zero_allow_untested_optimizer": true, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "steps_per_print": 2000, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "gradient_accumulation_steps": "auto", + "wall_clock_breakdown": false +} diff --git a/sdk/python/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb b/sdk/python/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb new file mode 100644 index 0000000000..0346bb3ab2 --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb @@ -0,0 +1,1242 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image object-detection using MMDetection specific pipeline component\n", + "\n", + "This sample shows how to use `mmdetection_image_objectdetection_instancesegmentation_pipeline` component from the `azureml` system registry to fine tune a model for image object-detection task using fridgeObjects Dataset. We then deploy the fine tuned model to an online endpoint for real time inference.\n", + "\n", + "### Training data\n", + "We will use the [odfridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip) dataset.\n", + "\n", + "### Model\n", + "We will use the `yolof_r50_c5_8x8_1x_coco` model in this notebook. If you need to fine tune a model that is available on MMDetection model zoo, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from MMDetection model zoo.\n", + "\n", + "### Outline\n", + "1. Install dependencies\n", + "2. Setup pre-requisites such as compute\n", + "3. Pick a model to fine tune\n", + "4. Prepare dataset for finetuning the model\n", + "5. Submit the fine tuning job using MMDetection specific image object-detection and instance-segmentation component\n", + "6. Review training and evaluation metrics\n", + "7. Register the fine tuned model\n", + "8. Deploy the fine tuned model for real time inference\n", + "9. Test deployed end point\n", + "9. Clean up resources" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Install dependencies\n", + "Before starting off, if you are running the notebook on Azure Machine Learning Studio or running first time locally, you will need the following packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install azure-ai-ml==1.8.0\n", + "! pip install azure-identity==1.13.0" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Setup pre-requisites" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.1 Connect to Azure Machine Learning workspace\n", + "\n", + "Before we dive in the code, you'll need to connect to your workspace. The workspace is the top-level resource for Azure Machine Learning, providing a centralized place to work with all the artifacts you create when you use Azure Machine Learning.\n", + "\n", + "We are using `DefaultAzureCredential` to get access to workspace. `DefaultAzureCredential` should be capable of handling most scenarios. If you want to learn more about other available credentials, go to [set up authentication doc](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk), [azure-identity reference doc](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity?view=azure-python).\n", + "\n", + "Replace ``, `` and `` with their respective values in the below cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import DefaultAzureCredential\n", + "\n", + "\n", + "experiment_name = (\n", + " \"AzureML-Train-Finetune-Vision-OD-Samples\" # can rename to any valid name\n", + ")\n", + "\n", + "credential = DefaultAzureCredential()\n", + "workspace_ml_client = None\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2.2 Create compute\n", + "\n", + "In order to finetune a model on Azure Machine Learning studio, you will need to create a compute resource first. **Creating a compute will take 3-4 minutes.** \n", + "\n", + "For additional references, see [Azure Machine Learning in a Day](https://github.com/Azure/azureml-examples/blob/main/tutorials/azureml-in-a-day/azureml-in-a-day.ipynb). " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create CPU compute for model selection component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "model_import_cluster_name = \"sample-model-import-cluster\"\n", + "try:\n", + " _ = workspace_ml_client.compute.get(model_import_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=model_import_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"Standard_D12_v2\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create GPU compute for finetune component\n", + "\n", + "The list of GPU machines can be found [here](https://learn.microsoft.com/en-us/azure/virtual-machines/sizes-gpu)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "finetune_cluster_name = \"sample-finetune-cluster-gpu\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(finetune_cluster_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=finetune_cluster_name,\n", + " type=\"amlcompute\",\n", + " size=\"STANDARD_NC6s_v3\",\n", + " idle_time_before_scale_down=120,\n", + " min_instances=0,\n", + " max_instances=4,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Pick a foundation model to fine tune\n", + "\n", + "We will use the `yolof_r50_c5_8x8_1x_coco` model in this notebook. If you need to fine tune a model that is available on MMDetection model zoo, but not available in `azureml` system registry, you can either register the model and use the registered model or use the `model_name` parameter to instruct the components to pull the model directly from MMDetection model zoo.\n", + "\n", + "Currently following models are supported:\n", + "\n", + "| Model Name | Source |\n", + "| :------------: | :-------: |\n", + "| [deformable_detr_twostage_refine_r50_16x2_50e_coco](https://ml.azure.com/registries/azureml/models/deformable_detr_twostage_refine_r50_16x2_50e_coco/version/3) | azureml registry |\n", + "| [sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco](https://ml.azure.com/registries/azureml/models/sparse_rcnn_r50_fpn_300_proposals_crop_mstrain_480-800_3x_coco/version/3) | azureml registry |\n", + "| [sparse_rcnn_r101_fpn_300_proposals_crop_mstrain_480-800_3x_coco](https://ml.azure.com/registries/azureml/models/sparse_rcnn_r101_fpn_300_proposals_crop_mstrain_480-800_3x_coco/version/3) | azureml registry |\n", + "| [vfnet_r50_fpn_mdconv_c3-c5_mstrain_2x_coco](https://ml.azure.com/registries/azureml/models/vfnet_r50_fpn_mdconv_c3-c5_mstrain_2x_coco/version/3) | azureml registry |\n", + "| [vfnet_x101_64x4d_fpn_mdconv_c3-c5_mstrain_2x_coco](https://ml.azure.com/registries/azureml/models/vfnet_x101_64x4d_fpn_mdconv_c3-c5_mstrain_2x_coco/version/3) | azureml registry |\n", + "| [yolof_r50_c5_8x8_1x_coco](https://ml.azure.com/registries/azureml/models/yolof_r50_c5_8x8_1x_coco/version/3) | azureml registry |\n", + "| [Image object detection models from MMDetection](https://github.com/open-mmlab/mmdetection/blob/v2.28.2/docs/en/model_zoo.md) | MMDetection |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mmdetection_model_name = \"yolof_r50_c5_8x8_1x_coco\"\n", + "\n", + "aml_registry_model_name = \"yolof_r50_c5_8x8_1x_coco\"\n", + "foundation_models = registry_ml_client.models.list(name=aml_registry_model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Prepare the dataset for fine-tuning the model\n", + "\n", + "We will use the [odfridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip), a toy dataset called Fridge Objects, which consists of 128 images of 4 labels of beverage container {`can`, `carton`, `milk bottle`, `water bottle`} photos taken on different backgrounds.\n", + "\n", + "All images in this notebook are hosted in [this repository](https://github.com/microsoft/computervision-recipes) and are made available under the [MIT license](https://github.com/microsoft/computervision-recipes/blob/master/LICENSE).\n", + "\n", + "#### 4.1 Download the Data\n", + "We first download and unzip the data locally. By default, the data would be downloaded in `./data` folder in current directory. \n", + "If you prefer to download the data at a different location, update it in `dataset_parent_dir = ...` in the following cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"31.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 Upload the images to Datastore through an AML Data asset (URI Folder)\n", + "\n", + "In order to use the data for training in Azure ML, we upload it to our default Azure Blob Storage of our Azure ML Workspace." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Uploading image files by creating a 'data asset URI FOLDER':\n", + "\n", + "from azure.ai.ml.entities import Data\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "my_data = Data(\n", + " path=dataset_dir,\n", + " type=AssetTypes.URI_FOLDER,\n", + " description=\"Fridge-items images Object detection\",\n", + " name=\"fridge-items-images-object-detection\",\n", + ")\n", + "\n", + "uri_folder_data_asset = workspace_ml_client.data.create_or_update(my_data)\n", + "\n", + "print(uri_folder_data_asset)\n", + "print(\"\")\n", + "print(\"Path to folder in Blob Storage:\")\n", + "print(uri_folder_data_asset.path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Convert the downloaded data to JSONL\n", + "\n", + "In this example, the fridge object dataset is annotated in Pascal VOC format, where each image corresponds to an xml file. Each xml file contains information on where its corresponding image file is located and also contains information about the bounding boxes and the object labels. \n", + "\n", + "For documentation on preparing the datasets beyond this notebook, please refer to the [documentation on how to prepare datasets](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-prepare-datasets-for-automl-images).\n", + "\n", + "\n", + "In order to use this data to create an AzureML MLTable, we first need to convert it to the required JSONL format. The following script is creating two `.jsonl` files (one for training and one for validation) in the corresponding MLTable folder. In this example, 20% of the data is kept for validation. For further details on jsonl file used for image object detection task in automated ml, please refer to the [data schema documentation for image object-detection task](https://learn.microsoft.com/en-us/azure/machine-learning/reference-automl-images-schema#object-detection)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "import xml.etree.ElementTree as ET\n", + "\n", + "# We will copy each JSONL file within its related MLTable folder\n", + "training_mltable_path = os.path.join(dataset_parent_dir, \"training-mltable-folder\")\n", + "validation_mltable_path = os.path.join(dataset_parent_dir, \"validation-mltable-folder\")\n", + "\n", + "# Create the folders if they don't exist\n", + "os.makedirs(training_mltable_path, exist_ok=True)\n", + "os.makedirs(validation_mltable_path, exist_ok=True)\n", + "\n", + "train_validation_ratio = 5\n", + "\n", + "# Path to the training and validation files\n", + "train_annotations_file = os.path.join(training_mltable_path, \"train_annotations.jsonl\")\n", + "validation_annotations_file = os.path.join(\n", + " validation_mltable_path, \"validation_annotations.jsonl\"\n", + ")\n", + "\n", + "# Baseline of json line dictionary\n", + "json_line_sample = {\n", + " \"image_url\": uri_folder_data_asset.path,\n", + " \"image_details\": {\"format\": None, \"width\": None, \"height\": None},\n", + " \"label\": [],\n", + "}\n", + "\n", + "# Path to the annotations\n", + "annotations_folder = os.path.join(dataset_dir, \"annotations\")\n", + "\n", + "# Read each annotation and convert it to jsonl line\n", + "with open(train_annotations_file, \"w\") as train_f:\n", + " with open(validation_annotations_file, \"w\") as validation_f:\n", + " for i, filename in enumerate(os.listdir(annotations_folder)):\n", + " if not filename.endswith(\".xml\"):\n", + " print(f\"Skipping unknown file: {filename}\")\n", + " continue\n", + "\n", + " annotation_filename = os.path.join(annotations_folder, filename)\n", + " if i % 100 == 0:\n", + " print(f\"Parsing {annotation_filename}\")\n", + "\n", + " root = ET.parse(annotation_filename).getroot()\n", + " width = int(root.find(\"size/width\").text)\n", + " height = int(root.find(\"size/height\").text)\n", + "\n", + " labels = []\n", + " for object in root.findall(\"object\"):\n", + " name = object.find(\"name\").text\n", + " xmin = object.find(\"bndbox/xmin\").text\n", + " ymin = object.find(\"bndbox/ymin\").text\n", + " xmax = object.find(\"bndbox/xmax\").text\n", + " ymax = object.find(\"bndbox/ymax\").text\n", + " isCrowd = int(object.find(\"difficult\").text)\n", + " labels.append(\n", + " {\n", + " \"label\": name,\n", + " \"topX\": float(xmin) / width,\n", + " \"topY\": float(ymin) / height,\n", + " \"bottomX\": float(xmax) / width,\n", + " \"bottomY\": float(ymax) / height,\n", + " \"isCrowd\": isCrowd,\n", + " }\n", + " )\n", + " # Build the jsonl file\n", + " image_filename = root.find(\"filename\").text\n", + " _, file_extension = os.path.splitext(image_filename)\n", + " json_line = dict(json_line_sample)\n", + " json_line[\"image_url\"] = json_line[\"image_url\"] + \"images/\" + image_filename\n", + " json_line[\"image_details\"][\"format\"] = file_extension[1:]\n", + " json_line[\"image_details\"][\"width\"] = width\n", + " json_line[\"image_details\"][\"height\"] = height\n", + " json_line[\"label\"] = labels\n", + "\n", + " if i % train_validation_ratio == 0:\n", + " # Validation annotation\n", + " validation_f.write(json.dumps(json_line) + \"\\n\")\n", + " else:\n", + " # Train annotation\n", + " train_f.write(json.dumps(json_line) + \"\\n\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.4 Convert annotation file from COCO to JSONL\n", + "If you want to try with a dataset in COCO format, the scripts below shows how to convert it to `jsonl` format. The file \"odFridgeObjects_coco.json\" consists of annotation information for the `odFridgeObjects` dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate jsonl file from coco file\n", + "base_url = uri_folder_data_asset.path + \"/images/\"\n", + "\n", + "!python coco2jsonl.py \\\n", + "--input_coco_file_path \"./odFridgeObjects_coco.json\" \\\n", + "--output_dir \"./data/odFridgeObjects\" \\\n", + "--output_file_name \"odFridgeObjects_from_coco.jsonl\" \\\n", + "--task_type \"ObjectDetection\" \\\n", + "--base_url $base_url" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.5 Create MLTable data input\n", + "\n", + "Create MLTable data input using the jsonl files created above.\n", + "\n", + "For documentation on creating your own MLTable assets for jobs beyond this notebook, please refer to below resources\n", + "- [MLTable YAML Schema](https://learn.microsoft.com/en-us/azure/machine-learning/reference-yaml-mltable) - covers how to write MLTable YAML, which is required for each MLTable asset.\n", + "- [Create MLTable data asset](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-data-assets?tabs=Python-SDK#create-a-mltable-data-asset) - covers how to create MLTable data asset. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_ml_table_file(filename):\n", + " \"\"\"Create ML Table definition\"\"\"\n", + "\n", + " return (\n", + " \"paths:\\n\"\n", + " \" - file: ./{0}\\n\"\n", + " \"transformations:\\n\"\n", + " \" - read_json_lines:\\n\"\n", + " \" encoding: utf8\\n\"\n", + " \" invalid_lines: error\\n\"\n", + " \" include_path_column: false\\n\"\n", + " \" - convert_column_types:\\n\"\n", + " \" - columns: image_url\\n\"\n", + " \" column_type: stream_info\"\n", + " ).format(filename)\n", + "\n", + "\n", + "def save_ml_table_file(output_path, mltable_file_contents):\n", + " with open(os.path.join(output_path, \"MLTable\"), \"w\") as f:\n", + " f.write(mltable_file_contents)\n", + "\n", + "\n", + "# Create and save train mltable\n", + "train_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(train_annotations_file)\n", + ")\n", + "save_ml_table_file(training_mltable_path, train_mltable_file_contents)\n", + "\n", + "# Save train and validation mltable\n", + "validation_mltable_file_contents = create_ml_table_file(\n", + " os.path.basename(validation_annotations_file)\n", + ")\n", + "save_ml_table_file(validation_mltable_path, validation_mltable_file_contents)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Submit the fine tuning job using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component\n", + " \n", + "Create the job that uses the `mmdetection_image_objectdetection_instancesegmentation_pipeline` component for image object detection and instance segmentation tasks. Learn more in 5.2 about all the parameters supported for fine tuning." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Create component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "FINETUNE_PIPELINE_COMPONENT_NAME = (\n", + " \"mmdetection_image_objectdetection_instancesegmentation_pipeline\"\n", + ")\n", + "pipeline_component_mmdetection_func = registry_ml_client.components.get(\n", + " name=FINETUNE_PIPELINE_COMPONENT_NAME, label=\"latest\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Create arguments to be passed to `mmdetection_image_objectdetection_instancesegmentation_pipeline` component\n", + "\n", + "The `mmdetection_image_objectdetection_instancesegmentation_pipeline` component consists of model selection and finetuning components. The detailed arguments for each component can be found at following README files:\n", + "- [Model Import Component](../../docs/component_docs/image_finetune/mmd_model_import_component.md)\n", + "- [Finetune Component](../../docs/component_docs/image_finetune/mmd_finetune_component.md)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deepspeed_config_path = \"./deepspeed_configs/zero1.json\"\n", + "if not os.path.exists(deepspeed_config_path):\n", + " print(\"DeepSpeed config file not found\")\n", + " deepspeed_config_path = None\n", + "\n", + "pipeline_component_args = {\n", + " # # Model import args\n", + " \"model_family\": \"MmDetectionImage\",\n", + " \"mlflow_model\": foundation_model.id, # foundation_model.id is provided, only foundation_model gives UserErrorException: only path input is supported now but get: ...\n", + " # \"model_name\": mmdetection_model_name, # specify the model_name instead of mlflow_model if you want to use a model from the mmdetection model zoo\n", + " # Finetune args\n", + " \"task_name\": \"image-object-detection\",\n", + " \"apply_augmentations\": True,\n", + " \"number_of_workers\": 8,\n", + " \"apply_deepspeed\": False,\n", + " \"deepspeed_config\": deepspeed_config_path,\n", + " \"apply_ort\": False,\n", + " \"auto_find_batch_size\": False,\n", + " \"extra_optim_args\": \"\",\n", + " \"precision\": \"32\",\n", + " \"random_seed\": 42,\n", + " \"evaluation_strategy\": \"epoch\",\n", + " \"evaluation_steps\": 500,\n", + " \"logging_strategy\": \"epoch\",\n", + " \"logging_steps\": 500,\n", + " \"save_strategy\": \"epoch\",\n", + " \"save_steps\": 500,\n", + " \"save_total_limit\": -1,\n", + " \"early_stopping\": False,\n", + " \"early_stopping_patience\": 1,\n", + " \"resume_from_checkpoint\": False,\n", + " \"save_as_mlflow_model\": True,\n", + " # # Uncomment one or more lines below to provide specific values, if you wish you override the autoselected default values.\n", + " # \"image_min_size\": -1,\n", + " # \"image_max_size\": -1,\n", + " # \"metric_for_best_model\": \"mean_average_precision\",\n", + " # \"number_of_epochs\": 15,\n", + " # \"max_steps\": -1,\n", + " # \"training_batch_size\": 4,\n", + " # \"validation_batch_size\": 4,\n", + " # \"learning_rate\": 5e-5,\n", + " # \"learning_rate_scheduler\": \"warmup_linear\",\n", + " # \"warmup_steps\": 0,\n", + " # \"optimizer\": \"adamw_hf\",\n", + " # \"weight_decay\": 0.0,\n", + " # \"gradient_accumulation_step\": 1,\n", + " # \"max_grad_norm\": 1.0,\n", + " # \"iou_threshold\": 0.5,\n", + " # \"box_score_threshold\": 0.3,\n", + "}\n", + "instance_count = 1\n", + "process_count_per_instance = 1\n", + "\n", + "# Ensure that the user provides only one of mlflow_model or model_name\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify either mlflow_model or model_name for the model to finetune\"\n", + " )\n", + "if (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " raise ValueError(\n", + " \"You must specify ONLY one of mlflow_model and model_name for the model to finetune\"\n", + " )\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is None\n", + " and pipeline_component_args.get(\"model_name\") is not None\n", + "):\n", + " use_model_name = mmdetection_model_name\n", + "elif (\n", + " pipeline_component_args.get(\"mlflow_model\") is not None\n", + " and pipeline_component_args.get(\"model_name\") is None\n", + "):\n", + " use_model_name = aml_registry_model_name\n", + "print(f\"Finetuning model {use_model_name}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.3 Utility function to create pipeline using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.dsl import pipeline\n", + "from azure.ai.ml.entities import PipelineComponent\n", + "from azure.ai.ml import Input\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "\n", + "@pipeline()\n", + "def create_pipeline_mmdetection():\n", + " \"\"\"Create pipeline.\"\"\"\n", + "\n", + " mmdetection_pipeline_component: PipelineComponent = (\n", + " pipeline_component_mmdetection_func(\n", + " compute_model_import=model_import_cluster_name,\n", + " compute_finetune=finetune_cluster_name,\n", + " training_data=Input(type=AssetTypes.MLTABLE, path=training_mltable_path),\n", + " validation_data=Input(\n", + " type=AssetTypes.MLTABLE, path=validation_mltable_path\n", + " ),\n", + " instance_count=instance_count,\n", + " process_count_per_instance=process_count_per_instance,\n", + " **pipeline_component_args,\n", + " )\n", + " )\n", + " return {\n", + " # Map the output of the fine tuning job to the output of pipeline job so that we can easily register the fine tuned model. Registering the model is required to deploy the model to an online or batch endpoint.\n", + " \"trained_model\": mmdetection_pipeline_component.outputs.mlflow_model_folder,\n", + " }" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.4 Run the fine tuning job using `mmdetection_image_objectdetection_instancesegmentation_pipeline` component" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mmdetection_pipeline_object = create_pipeline_mmdetection()\n", + "\n", + "mmdetection_pipeline_object.display_name = (\n", + " use_model_name + \"_mmdetection_pipeline_component_run_\" + \"od\"\n", + ")\n", + "# Don't use cached results from previous jobs\n", + "mmdetection_pipeline_object.settings.force_rerun = True\n", + "\n", + "print(\"Submitting pipeline\")\n", + "\n", + "mmdetection_pipeline_run = workspace_ml_client.jobs.create_or_update(\n", + " mmdetection_pipeline_object, experiment_name=experiment_name\n", + ")\n", + "\n", + "print(f\"Pipeline created. URL: {mmdetection_pipeline_run.studio_url}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.jobs.stream(mmdetection_pipeline_run.name)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Get metrics from finetune component\n", + "\n", + "The model training happens as part of the finetune component. Please follow below steps to extract validation metrics from the run." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 6.1 Initialize MLFlow Client\n", + "\n", + "The models and artifacts that are produced by AutoML can be accessed via the MLFlow interface.\n", + "Initialize the MLFlow client here, and set the backend as Azure ML, via. the MLFlow Client.\n", + "\n", + "IMPORTANT - You need to have installed the latest MLFlow packages with:\n", + "\n", + " pip install azureml-mlflow\n", + " pip install mlflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mlflow\n", + "\n", + "# Obtain the tracking URL from MLClient\n", + "MLFLOW_TRACKING_URI = workspace_ml_client.workspaces.get(\n", + " name=workspace_ml_client.workspace_name\n", + ").mlflow_tracking_uri\n", + "\n", + "print(MLFLOW_TRACKING_URI)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set the MLFLOW TRACKING URI\n", + "mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)\n", + "print(f\"\\nCurrent tracking uri: {mlflow.get_tracking_uri()}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from mlflow.tracking.client import MlflowClient\n", + "\n", + "# Initialize MLFlow client\n", + "mlflow_client = MlflowClient()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.2 Get the training and evaluation run\n", + "\n", + "Fetch the training and evaluation run ids from the above pipeline run. We will later use these run ids to fetch the metrics. We will use the training run id to register the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Concat 'tags.mlflow.rootRunId=' and pipeline_job.name in single quotes as filter variable\n", + "filter = \"tags.mlflow.rootRunId='\" + mmdetection_pipeline_run.name + \"'\"\n", + "runs = mlflow.search_runs(\n", + " experiment_names=[experiment_name], filter_string=filter, output_format=\"list\"\n", + ")\n", + "\n", + "# Get the training and evaluation runs.\n", + "# Using a hacky way till 'Bug 2320997: not able to show eval metrics in FT notebooks - mlflow client now showing display names' is fixed\n", + "for run in runs:\n", + " # Check if run.data.metrics.epoch exists\n", + " if \"epoch\" in run.data.metrics:\n", + " training_run = run\n", + " # Else, check if run.data.metrics.accuracy exists\n", + " elif \"mean_average_precision\" in run.data.metrics:\n", + " evaluation_run = run" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 6.3 Get training metrics\n", + "\n", + "Access the results (such as Models, Artifacts, Metrics) of a previously completed run." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame(training_run.data.metrics, index=[0]).T" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. Register the fine tuned model with the workspace\n", + "\n", + "We will register the model from the output of the fine tuning job. This will track lineage between the fine tuned model and the fine tuning job. The fine tuning job, further, tracks lineage to the foundation model, data and training code." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import Model\n", + "from azure.ai.ml.constants import AssetTypes\n", + "\n", + "# Check if the `trained_model` output is available\n", + "print(\n", + " f\"Pipeline job outputs: {workspace_ml_client.jobs.get(mmdetection_pipeline_run.name).outputs}\"\n", + ")\n", + "\n", + "# Fetch the model from pipeline job output - not working, hence fetching from fine tune child job\n", + "model_path_from_job = (\n", + " f\"azureml://jobs/{mmdetection_pipeline_run.name}/outputs/trained_model\"\n", + ")\n", + "print(f\"Path to register model: {model_path_from_job}\")\n", + "\n", + "finetuned_model_name = f\"{use_model_name.replace('/', '-')}-fridge-objects-od\"\n", + "finetuned_model_description = f\"{use_model_name.replace('/', '-')} fine tuned model for fridge objects object detection\"\n", + "prepare_to_register_model = Model(\n", + " path=model_path_from_job,\n", + " type=AssetTypes.MLFLOW_MODEL,\n", + " name=finetuned_model_name,\n", + " version=timestamp, # Use timestamp as version to avoid version conflict\n", + " description=finetuned_model_description,\n", + ")\n", + "print(f\"Prepare to register model: \\n{prepare_to_register_model}\")\n", + "\n", + "# Register the model from pipeline job output\n", + "registered_model = workspace_ml_client.models.create_or_update(\n", + " prepare_to_register_model\n", + ")\n", + "print(f\"Registered model: {registered_model}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8. Deploy the fine tuned model to an online endpoint\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import datetime\n", + "from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "online_endpoint_name = \"mmd-od-fridge-items-\" + datetime.datetime.now().strftime(\n", + " \"%m%d%H%M\"\n", + ")\n", + "online_endpoint_description = f\"Online endpoint for {registered_model.name}, finetuned for fridge objects object detection\"\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=online_endpoint_description,\n", + " auth_mode=\"key\",\n", + " tags={\"foo\": \"bar\"},\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"mmd-od-fridge-mlflow-deploy\"\n", + "print(registered_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=registered_model.id,\n", + " instance_type=\"Standard_DS3_V2\",\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=10,\n", + " ),\n", + ")\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 9. Test the endpoint with sample data\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference. We will then display the scored labels alongside the ground truth labels." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# existing traffic details\n", + "print(endpoint.traffic)\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create request json\n", + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"99.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "request_file_name = \"sample_request_data.json\"\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "resp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visualize detections\n", + "Now that we have scored a test image, we can visualize the prediction for this image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install matplotlib\n", + "! pip install seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import json\n", + "import numpy as np\n", + "from PIL import Image\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.image as mpimg\n", + "import matplotlib.patches as patches\n", + "\n", + "\n", + "img_np = mpimg.imread(sample_image)\n", + "img = Image.fromarray(img_np.astype(\"uint8\"), \"RGB\")\n", + "x, y = img.size\n", + "conf_threshold = 0.6 # display top objects with confidence score > 0.6\n", + "\n", + "# Set a compact figure size\n", + "fig_width = 12\n", + "fig_height = 12\n", + "\n", + "# Initialize figure and axes\n", + "fig = plt.figure(figsize=(fig_width, fig_height))\n", + "gs = fig.add_gridspec(2, 1, height_ratios=[4, 1], hspace=0.2)\n", + "ax1 = fig.add_subplot(gs[0])\n", + "ax2 = fig.add_subplot(gs[1])\n", + "\n", + "# Display the image with bounding boxes and segmentation maps\n", + "ax1.imshow(img_np)\n", + "ax1.axis(\"off\")\n", + "\n", + "# Draw bounding boxes and segmentation maps for each detection\n", + "detections = json.loads(resp)\n", + "sorted_data = sorted(detections[0][\"boxes\"], key=lambda x: x[\"score\"], reverse=True)\n", + "sorted_scores = []\n", + "sorted_colors = []\n", + "unique_labels = []\n", + "label_counter = {}\n", + "\n", + "# draw box and label for each detection\n", + "for detect in sorted_data:\n", + " label = detect[\"label\"]\n", + " box = detect[\"box\"]\n", + " conf_score = detect[\"score\"]\n", + "\n", + " if conf_score > conf_threshold:\n", + " # Modify labels to make them unique with numbering\n", + " if label not in label_counter:\n", + " label_counter[label] = 1\n", + " unique_labels.append(f\"{label} {label_counter[label]}\")\n", + " else:\n", + " label_counter[label] += 1\n", + " unique_labels.append(f\"{label} {label_counter[label]}\")\n", + "\n", + " current_label = unique_labels[-1]\n", + "\n", + " ymin, xmin, ymax, xmax = (\n", + " box[\"topY\"],\n", + " box[\"topX\"],\n", + " box[\"bottomY\"],\n", + " box[\"bottomX\"],\n", + " )\n", + " topleft_x, topleft_y = x * xmin, y * ymin\n", + " width, height = x * (xmax - xmin), y * (ymax - ymin)\n", + " print(\n", + " f\"{current_label}: [{round(topleft_x, 3)}, {round(topleft_y, 3)}, \"\n", + " f\"{round(width, 3)}, {round(height, 3)}], {round(conf_score, 3)}\"\n", + " )\n", + "\n", + " color = np.random.rand(3)\n", + " rect = patches.Rectangle(\n", + " (topleft_x, topleft_y),\n", + " width,\n", + " height,\n", + " linewidth=2,\n", + " edgecolor=color,\n", + " facecolor=\"none\",\n", + " )\n", + " ax1.add_patch(rect)\n", + " ax1.text(topleft_x, topleft_y - 10, current_label, color=color, fontsize=20)\n", + " sorted_scores.append(conf_score)\n", + " sorted_colors.append(color)\n", + "\n", + "# Set a stylish color palette\n", + "sns.set_palette(\"pastel\")\n", + "\n", + "# Create the bar plot without x-axis and y-axis markings\n", + "barplot = sns.barplot(x=sorted_scores, y=unique_labels, palette=sorted_colors, ax=ax2)\n", + "ax2.set_xlabel(\"\") # Remove x-axis label\n", + "ax2.set_ylabel(\"\") # Remove y-axis label\n", + "ax2.set_title(f\"Top {len(sorted_scores)} Object Scores\", fontsize=12)\n", + "\n", + "# Add scores in front of the bars\n", + "for index, value in enumerate(sorted_scores):\n", + " barplot.text(\n", + " value + 0.01, index, f\"{value:.2f}\", va=\"center\", color=\"black\", fontsize=10\n", + " )\n", + "\n", + "# Remove spines and ticks from the bar plot\n", + "barplot.spines[\"left\"].set_visible(False)\n", + "barplot.spines[\"top\"].set_visible(False)\n", + "barplot.spines[\"right\"].set_visible(False)\n", + "barplot.spines[\"bottom\"].set_visible(False)\n", + "barplot.tick_params(left=False, top=False, right=False, bottom=False)\n", + "barplot.xaxis.set_visible(False) # Remove x-axis\n", + "barplot.yaxis.grid(False) # Remove y-axis grid\n", + "\n", + "# Set plot background color\n", + "fig.patch.set_facecolor(\"#F7F7F7\") # Light gray\n", + "\n", + "plt.tight_layout()\n", + "# fig.savefig(\"plot.png\", bbox_inches=\"tight\")\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 10. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/finetune/image-object-detection/odFridgeObjects_coco.json b/sdk/python/foundation-models/system/finetune/image-object-detection/odFridgeObjects_coco.json new file mode 100644 index 0000000000..9c0f8374ad --- /dev/null +++ b/sdk/python/foundation-models/system/finetune/image-object-detection/odFridgeObjects_coco.json @@ -0,0 +1,5837 @@ +{ + "images": [ + { + "file_name": "1.jpg", + "height": 666, + "width": 499, + "id": "1" + }, + { + "file_name": "2.jpg", + "height": 666, + "width": 499, + "id": "2" + }, + { + "file_name": "3.jpg", + "height": 666, + "width": 499, + "id": "3" + }, + { + "file_name": "4.jpg", + "height": 666, + "width": 499, + "id": "4" + }, + { + "file_name": "5.jpg", + "height": 666, + "width": 499, + "id": "5" + }, + { + "file_name": "6.jpg", + "height": 666, + "width": 499, + "id": "6" + }, + { + "file_name": "7.jpg", + "height": 666, + "width": 499, + "id": "7" + }, + { + "file_name": "8.jpg", + "height": 666, + "width": 499, + "id": "8" + }, + { + "file_name": "9.jpg", + "height": 666, + "width": 499, + "id": "9" + }, + { + "file_name": "10.jpg", + "height": 666, + "width": 499, + "id": "10" + }, + { + "file_name": "11.jpg", + "height": 666, + "width": 499, + "id": "11" + }, + { + "file_name": "12.jpg", + "height": 666, + "width": 499, + "id": "12" + }, + { + "file_name": "13.jpg", + "height": 666, + "width": 499, + "id": "13" + }, + { + "file_name": "14.jpg", + "height": 666, + "width": 499, + "id": "14" + }, + { + "file_name": "15.jpg", + "height": 666, + "width": 499, + "id": "15" + }, + { + "file_name": "16.jpg", + "height": 666, + "width": 499, + "id": "16" + }, + { + "file_name": "17.jpg", + "height": 666, + "width": 499, + "id": "17" + }, + { + "file_name": "18.jpg", + "height": 666, + "width": 499, + "id": "18" + }, + { + "file_name": "19.jpg", + "height": 666, + "width": 499, + "id": "19" + }, + { + "file_name": "20.jpg", + "height": 666, + "width": 499, + "id": "20" + }, + { + "file_name": "21.jpg", + "height": 666, + "width": 499, + "id": "21" + }, + { + "file_name": "22.jpg", + "height": 666, + "width": 499, + "id": "22" + }, + { + "file_name": "23.jpg", + "height": 666, + "width": 499, + "id": "23" + }, + { + "file_name": "24.jpg", + "height": 666, + "width": 499, + "id": "24" + }, + { + "file_name": "25.jpg", + "height": 666, + "width": 499, + "id": "25" + }, + { + "file_name": "26.jpg", + "height": 666, + "width": 499, + "id": "26" + }, + { + "file_name": "27.jpg", + "height": 666, + "width": 499, + "id": "27" + }, + { + "file_name": "28.jpg", + "height": 666, + "width": 499, + "id": "28" + }, + { + "file_name": "29.jpg", + "height": 666, + "width": 499, + "id": "29" + }, + { + "file_name": "30.jpg", + "height": 666, + "width": 499, + "id": "30" + }, + { + "file_name": "31.jpg", + "height": 666, + "width": 499, + "id": "31" + }, + { + "file_name": "32.jpg", + "height": 666, + "width": 499, + "id": "32" + }, + { + "file_name": "33.jpg", + "height": 666, + "width": 499, + "id": "33" + }, + { + "file_name": "34.jpg", + "height": 666, + "width": 499, + "id": "34" + }, + { + "file_name": "35.jpg", + "height": 666, + "width": 499, + "id": "35" + }, + { + "file_name": "36.jpg", + "height": 666, + "width": 499, + "id": "36" + }, + { + "file_name": "37.jpg", + "height": 666, + "width": 499, + "id": "37" + }, + { + "file_name": "38.jpg", + "height": 666, + "width": 499, + "id": "38" + }, + { + "file_name": "39.jpg", + "height": 666, + "width": 499, + "id": "39" + }, + { + "file_name": "40.jpg", + "height": 666, + "width": 499, + "id": "40" + }, + { + "file_name": "41.jpg", + "height": 666, + "width": 499, + "id": "41" + }, + { + "file_name": "42.jpg", + "height": 666, + "width": 499, + "id": "42" + }, + { + "file_name": "43.jpg", + "height": 666, + "width": 499, + "id": "43" + }, + { + "file_name": "44.jpg", + "height": 666, + "width": 499, + "id": "44" + }, + { + "file_name": "45.jpg", + "height": 666, + "width": 499, + "id": "45" + }, + { + "file_name": "46.jpg", + "height": 666, + "width": 499, + "id": "46" + }, + { + "file_name": "47.jpg", + "height": 666, + "width": 499, + "id": "47" + }, + { + "file_name": "48.jpg", + "height": 666, + "width": 499, + "id": "48" + }, + { + "file_name": "49.jpg", + "height": 666, + "width": 499, + "id": "49" + }, + { + "file_name": "50.jpg", + "height": 666, + "width": 499, + "id": "50" + }, + { + "file_name": "51.jpg", + "height": 666, + "width": 499, + "id": "51" + }, + { + "file_name": "52.jpg", + "height": 666, + "width": 499, + "id": "52" + }, + { + "file_name": "53.jpg", + "height": 666, + "width": 499, + "id": "53" + }, + { + "file_name": "54.jpg", + "height": 666, + "width": 499, + "id": "54" + }, + { + "file_name": "55.jpg", + "height": 666, + "width": 499, + "id": "55" + }, + { + "file_name": "56.jpg", + "height": 666, + "width": 499, + "id": "56" + }, + { + "file_name": "57.jpg", + "height": 666, + "width": 499, + "id": "57" + }, + { + "file_name": "58.jpg", + "height": 666, + "width": 499, + "id": "58" + }, + { + "file_name": "59.jpg", + "height": 666, + "width": 499, + "id": "59" + }, + { + "file_name": "60.jpg", + "height": 666, + "width": 499, + "id": "60" + }, + { + "file_name": "61.jpg", + "height": 666, + "width": 499, + "id": "61" + }, + { + "file_name": "62.jpg", + "height": 666, + "width": 499, + "id": "62" + }, + { + "file_name": "63.jpg", + "height": 666, + "width": 499, + "id": "63" + }, + { + "file_name": "64.jpg", + "height": 666, + "width": 499, + "id": "64" + }, + { + "file_name": "65.jpg", + "height": 666, + "width": 499, + "id": "65" + }, + { + "file_name": "66.jpg", + "height": 666, + "width": 499, + "id": "66" + }, + { + "file_name": "67.jpg", + "height": 666, + "width": 499, + "id": "67" + }, + { + "file_name": "68.jpg", + "height": 666, + "width": 499, + "id": "68" + }, + { + "file_name": "69.jpg", + "height": 666, + "width": 499, + "id": "69" + }, + { + "file_name": "70.jpg", + "height": 666, + "width": 499, + "id": "70" + }, + { + "file_name": "71.jpg", + "height": 666, + "width": 499, + "id": "71" + }, + { + "file_name": "72.jpg", + "height": 666, + "width": 499, + "id": "72" + }, + { + "file_name": "73.jpg", + "height": 666, + "width": 499, + "id": "73" + }, + { + "file_name": "74.jpg", + "height": 666, + "width": 499, + "id": "74" + }, + { + "file_name": "75.jpg", + "height": 666, + "width": 499, + "id": "75" + }, + { + "file_name": "76.jpg", + "height": 666, + "width": 499, + "id": "76" + }, + { + "file_name": "77.jpg", + "height": 666, + "width": 499, + "id": "77" + }, + { + "file_name": "78.jpg", + "height": 666, + "width": 499, + "id": "78" + }, + { + "file_name": "79.jpg", + "height": 666, + "width": 499, + "id": "79" + }, + { + "file_name": "80.jpg", + "height": 666, + "width": 499, + "id": "80" + }, + { + "file_name": "81.jpg", + "height": 666, + "width": 499, + "id": "81" + }, + { + "file_name": "82.jpg", + "height": 666, + "width": 499, + "id": "82" + }, + { + "file_name": "83.jpg", + "height": 666, + "width": 499, + "id": "83" + }, + { + "file_name": "84.jpg", + "height": 666, + "width": 499, + "id": "84" + }, + { + "file_name": "85.jpg", + "height": 666, + "width": 499, + "id": "85" + }, + { + "file_name": "86.jpg", + "height": 666, + "width": 499, + "id": "86" + }, + { + "file_name": "87.jpg", + "height": 666, + "width": 499, + "id": "87" + }, + { + "file_name": "88.jpg", + "height": 666, + "width": 499, + "id": "88" + }, + { + "file_name": "89.jpg", + "height": 666, + "width": 499, + "id": "89" + }, + { + "file_name": "90.jpg", + "height": 666, + "width": 499, + "id": "90" + }, + { + "file_name": "91.jpg", + "height": 666, + "width": 499, + "id": "91" + }, + { + "file_name": "92.jpg", + "height": 666, + "width": 499, + "id": "92" + }, + { + "file_name": "93.jpg", + "height": 666, + "width": 499, + "id": "93" + }, + { + "file_name": "94.jpg", + "height": 666, + "width": 499, + "id": "94" + }, + { + "file_name": "95.jpg", + "height": 666, + "width": 499, + "id": "95" + }, + { + "file_name": "96.jpg", + "height": 666, + "width": 499, + "id": "96" + }, + { + "file_name": "97.jpg", + "height": 666, + "width": 499, + "id": "97" + }, + { + "file_name": "98.jpg", + "height": 666, + "width": 499, + "id": "98" + }, + { + "file_name": "99.jpg", + "height": 666, + "width": 499, + "id": "99" + }, + { + "file_name": "100.jpg", + "height": 666, + "width": 499, + "id": "100" + }, + { + "file_name": "101.jpg", + "height": 666, + "width": 499, + "id": "101" + }, + { + "file_name": "102.jpg", + "height": 666, + "width": 499, + "id": "102" + }, + { + "file_name": "103.jpg", + "height": 666, + "width": 499, + "id": "103" + }, + { + "file_name": "104.jpg", + "height": 666, + "width": 499, + "id": "104" + }, + { + "file_name": "105.jpg", + "height": 666, + "width": 499, + "id": "105" + }, + { + "file_name": "106.jpg", + "height": 666, + "width": 499, + "id": "106" + }, + { + "file_name": "107.jpg", + "height": 666, + "width": 499, + "id": "107" + }, + { + "file_name": "108.jpg", + "height": 666, + "width": 499, + "id": "108" + }, + { + "file_name": "109.jpg", + "height": 666, + "width": 499, + "id": "109" + }, + { + "file_name": "110.jpg", + "height": 666, + "width": 499, + "id": "110" + }, + { + "file_name": "111.jpg", + "height": 666, + "width": 499, + "id": "111" + }, + { + "file_name": "112.jpg", + "height": 666, + "width": 499, + "id": "112" + }, + { + "file_name": "113.jpg", + "height": 666, + "width": 499, + "id": "113" + }, + { + "file_name": "114.jpg", + "height": 666, + "width": 499, + "id": "114" + }, + { + "file_name": "115.jpg", + "height": 666, + "width": 499, + "id": "115" + }, + { + "file_name": "116.jpg", + "height": 666, + "width": 499, + "id": "116" + }, + { + "file_name": "117.jpg", + "height": 666, + "width": 499, + "id": "117" + }, + { + "file_name": "118.jpg", + "height": 666, + "width": 499, + "id": "118" + }, + { + "file_name": "119.jpg", + "height": 666, + "width": 499, + "id": "119" + }, + { + "file_name": "120.jpg", + "height": 666, + "width": 499, + "id": "120" + }, + { + "file_name": "121.jpg", + "height": 666, + "width": 499, + "id": "121" + }, + { + "file_name": "122.jpg", + "height": 666, + "width": 499, + "id": "122" + }, + { + "file_name": "123.jpg", + "height": 666, + "width": 499, + "id": "123" + }, + { + "file_name": "124.jpg", + "height": 666, + "width": 499, + "id": "124" + }, + { + "file_name": "125.jpg", + "height": 666, + "width": 499, + "id": "125" + }, + { + "file_name": "126.jpg", + "height": 666, + "width": 499, + "id": "126" + }, + { + "file_name": "127.jpg", + "height": 666, + "width": 499, + "id": "127" + }, + { + "file_name": "128.jpg", + "height": 666, + "width": 499, + "id": "128" + } + ], + "type": "instances", + "annotations": [ + { + "area": 46766, + "iscrowd": 0, + "bbox": [ + 100, + 173, + 133, + 348 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "1", + "id": 1 + }, + { + "area": 32918, + "iscrowd": 0, + "bbox": [ + 247, + 192, + 108, + 301 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "2", + "id": 2 + }, + { + "area": 28500, + "iscrowd": 0, + "bbox": [ + 259, + 231, + 124, + 227 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "3", + "id": 3 + }, + { + "area": 58000, + "iscrowd": 0, + "bbox": [ + 245, + 119, + 144, + 399 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "4", + "id": 4 + }, + { + "area": 44132, + "iscrowd": 0, + "bbox": [ + 39, + 278, + 373, + 117 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "5", + "id": 5 + }, + { + "area": 30380, + "iscrowd": 0, + "bbox": [ + 125, + 316, + 244, + 123 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "6", + "id": 6 + }, + { + "area": 39195, + "iscrowd": 0, + "bbox": [ + 86, + 298, + 334, + 116 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "7", + "id": 7 + }, + { + "area": 60514, + "iscrowd": 0, + "bbox": [ + 47, + 280, + 382, + 157 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "8", + "id": 8 + }, + { + "area": 41538, + "iscrowd": 0, + "bbox": [ + 80, + 157, + 128, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "9", + "id": 9 + }, + { + "area": 23520, + "iscrowd": 0, + "bbox": [ + 299, + 220, + 95, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "9", + "id": 10 + }, + { + "area": 44278, + "iscrowd": 0, + "bbox": [ + 86, + 102, + 130, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "10", + "id": 11 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 150, + 377, + 295, + 113 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "10", + "id": 12 + }, + { + "area": 56518, + "iscrowd": 0, + "bbox": [ + 56, + 148, + 153, + 366 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "11", + "id": 13 + }, + { + "area": 39406, + "iscrowd": 0, + "bbox": [ + 328, + 180, + 121, + 322 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "11", + "id": 14 + }, + { + "area": 53067, + "iscrowd": 0, + "bbox": [ + 51, + 107, + 146, + 360 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "12", + "id": 15 + }, + { + "area": 44764, + "iscrowd": 0, + "bbox": [ + 94, + 402, + 360, + 123 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "12", + "id": 16 + }, + { + "area": 50410, + "iscrowd": 0, + "bbox": [ + 89, + 121, + 141, + 354 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "13", + "id": 17 + }, + { + "area": 20370, + "iscrowd": 0, + "bbox": [ + 273, + 278, + 104, + 193 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "13", + "id": 18 + }, + { + "area": 76368, + "iscrowd": 0, + "bbox": [ + 62, + 323, + 343, + 221 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "14", + "id": 19 + }, + { + "area": 18564, + "iscrowd": 0, + "bbox": [ + 320, + 268, + 101, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "14", + "id": 20 + }, + { + "area": 42828, + "iscrowd": 0, + "bbox": [ + 95, + 140, + 128, + 331 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "15", + "id": 21 + }, + { + "area": 33499, + "iscrowd": 0, + "bbox": [ + 289, + 248, + 138, + 240 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "15", + "id": 22 + }, + { + "area": 30520, + "iscrowd": 0, + "bbox": [ + 120, + 185, + 108, + 279 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "16", + "id": 23 + }, + { + "area": 38420, + "iscrowd": 0, + "bbox": [ + 127, + 379, + 225, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "16", + "id": 24 + }, + { + "area": 43400, + "iscrowd": 0, + "bbox": [ + 95, + 156, + 123, + 349 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "17", + "id": 25 + }, + { + "area": 34384, + "iscrowd": 0, + "bbox": [ + 228, + 196, + 111, + 306 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "17", + "id": 26 + }, + { + "area": 31414, + "iscrowd": 0, + "bbox": [ + 65, + 180, + 112, + 277 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "18", + "id": 27 + }, + { + "area": 40014, + "iscrowd": 0, + "bbox": [ + 141, + 375, + 341, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "18", + "id": 28 + }, + { + "area": 45666, + "iscrowd": 0, + "bbox": [ + 122, + 150, + 128, + 353 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "19", + "id": 29 + }, + { + "area": 29056, + "iscrowd": 0, + "bbox": [ + 284, + 286, + 127, + 226 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "19", + "id": 30 + }, + { + "area": 68482, + "iscrowd": 0, + "bbox": [ + 74, + 358, + 352, + 193 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "20", + "id": 31 + }, + { + "area": 24600, + "iscrowd": 0, + "bbox": [ + 324, + 247, + 119, + 204 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "20", + "id": 32 + }, + { + "area": 47696, + "iscrowd": 0, + "bbox": [ + 4, + 339, + 270, + 175 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "21", + "id": 33 + }, + { + "area": 54812, + "iscrowd": 0, + "bbox": [ + 157, + 275, + 283, + 192 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "21", + "id": 34 + }, + { + "area": 67144, + "iscrowd": 0, + "bbox": [ + 22, + 276, + 307, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "22", + "id": 35 + }, + { + "area": 31647, + "iscrowd": 0, + "bbox": [ + 314, + 258, + 136, + 230 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "22", + "id": 36 + }, + { + "area": 51379, + "iscrowd": 0, + "bbox": [ + 49, + 282, + 268, + 190 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "23", + "id": 37 + }, + { + "area": 37260, + "iscrowd": 0, + "bbox": [ + 255, + 328, + 206, + 179 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "23", + "id": 38 + }, + { + "area": 45108, + "iscrowd": 0, + "bbox": [ + 142, + 156, + 125, + 357 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "24", + "id": 39 + }, + { + "area": 28785, + "iscrowd": 0, + "bbox": [ + 241, + 187, + 100, + 284 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "24", + "id": 40 + }, + { + "area": 36652, + "iscrowd": 0, + "bbox": [ + 101, + 171, + 118, + 307 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "25", + "id": 41 + }, + { + "area": 24080, + "iscrowd": 0, + "bbox": [ + 209, + 363, + 214, + 111 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "25", + "id": 42 + }, + { + "area": 21721, + "iscrowd": 0, + "bbox": [ + 10, + 383, + 202, + 106 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "26", + "id": 43 + }, + { + "area": 25662, + "iscrowd": 0, + "bbox": [ + 221, + 351, + 272, + 93 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "26", + "id": 44 + }, + { + "area": 39390, + "iscrowd": 0, + "bbox": [ + 35, + 207, + 129, + 302 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "27", + "id": 45 + }, + { + "area": 39440, + "iscrowd": 0, + "bbox": [ + 191, + 168, + 115, + 339 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "27", + "id": 46 + }, + { + "area": 27392, + "iscrowd": 0, + "bbox": [ + 346, + 295, + 127, + 213 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "27", + "id": 47 + }, + { + "area": 40467, + "iscrowd": 0, + "bbox": [ + 121, + 110, + 122, + 328 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "28", + "id": 48 + }, + { + "area": 24442, + "iscrowd": 0, + "bbox": [ + 285, + 243, + 120, + 201 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "28", + "id": 49 + }, + { + "area": 49476, + "iscrowd": 0, + "bbox": [ + 89, + 415, + 371, + 132 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "28", + "id": 50 + }, + { + "area": 28776, + "iscrowd": 0, + "bbox": [ + 123, + 180, + 108, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "29", + "id": 51 + }, + { + "area": 36270, + "iscrowd": 0, + "bbox": [ + 285, + 143, + 116, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "29", + "id": 52 + }, + { + "area": 30680, + "iscrowd": 0, + "bbox": [ + 148, + 413, + 235, + 129 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "29", + "id": 53 + }, + { + "area": 29670, + "iscrowd": 0, + "bbox": [ + 64, + 177, + 114, + 257 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "30", + "id": 54 + }, + { + "area": 20944, + "iscrowd": 0, + "bbox": [ + 324, + 257, + 111, + 186 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "30", + "id": 55 + }, + { + "area": 50895, + "iscrowd": 0, + "bbox": [ + 43, + 434, + 376, + 134 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "30", + "id": 56 + }, + { + "area": 19530, + "iscrowd": 0, + "bbox": [ + 112, + 193, + 89, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "31", + "id": 57 + }, + { + "area": 27538, + "iscrowd": 0, + "bbox": [ + 215, + 181, + 97, + 280 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "31", + "id": 58 + }, + { + "area": 27216, + "iscrowd": 0, + "bbox": [ + 343, + 327, + 125, + 215 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "31", + "id": 59 + }, + { + "area": 24786, + "iscrowd": 0, + "bbox": [ + 55, + 167, + 101, + 242 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "32", + "id": 60 + }, + { + "area": 24500, + "iscrowd": 0, + "bbox": [ + 162, + 218, + 97, + 249 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "32", + "id": 61 + }, + { + "area": 27776, + "iscrowd": 0, + "bbox": [ + 331, + 334, + 127, + 216 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "32", + "id": 62 + }, + { + "area": 25250, + "iscrowd": 0, + "bbox": [ + 72, + 150, + 100, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "33", + "id": 63 + }, + { + "area": 35802, + "iscrowd": 0, + "bbox": [ + 192, + 229, + 116, + 305 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "33", + "id": 64 + }, + { + "area": 15180, + "iscrowd": 0, + "bbox": [ + 324, + 246, + 91, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "33", + "id": 65 + }, + { + "area": 25500, + "iscrowd": 0, + "bbox": [ + 80, + 149, + 101, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "34", + "id": 66 + }, + { + "area": 18300, + "iscrowd": 0, + "bbox": [ + 186, + 271, + 99, + 182 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "34", + "id": 67 + }, + { + "area": 42108, + "iscrowd": 0, + "bbox": [ + 339, + 226, + 131, + 318 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "34", + "id": 68 + }, + { + "area": 45560, + "iscrowd": 0, + "bbox": [ + 58, + 222, + 135, + 334 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "35", + "id": 69 + }, + { + "area": 15308, + "iscrowd": 0, + "bbox": [ + 205, + 292, + 88, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "35", + "id": 70 + }, + { + "area": 18144, + "iscrowd": 0, + "bbox": [ + 306, + 200, + 83, + 215 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "35", + "id": 71 + }, + { + "area": 50568, + "iscrowd": 0, + "bbox": [ + 29, + 257, + 146, + 343 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "36", + "id": 72 + }, + { + "area": 42900, + "iscrowd": 0, + "bbox": [ + 173, + 180, + 129, + 329 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "36", + "id": 73 + }, + { + "area": 19712, + "iscrowd": 0, + "bbox": [ + 308, + 220, + 87, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "36", + "id": 74 + }, + { + "area": 65296, + "iscrowd": 0, + "bbox": [ + 32, + 196, + 175, + 370 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "37", + "id": 75 + }, + { + "area": 24534, + "iscrowd": 0, + "bbox": [ + 244, + 212, + 93, + 260 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "37", + "id": 76 + }, + { + "area": 17595, + "iscrowd": 0, + "bbox": [ + 340, + 220, + 84, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "37", + "id": 77 + }, + { + "area": 63318, + "iscrowd": 0, + "bbox": [ + 26, + 191, + 172, + 365 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "38", + "id": 78 + }, + { + "area": 37022, + "iscrowd": 0, + "bbox": [ + 193, + 334, + 213, + 172 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "38", + "id": 79 + }, + { + "area": 17458, + "iscrowd": 0, + "bbox": [ + 326, + 207, + 85, + 202 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "38", + "id": 80 + }, + { + "area": 65520, + "iscrowd": 0, + "bbox": [ + 9, + 198, + 181, + 359 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "39", + "id": 81 + }, + { + "area": 17920, + "iscrowd": 0, + "bbox": [ + 227, + 232, + 79, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "39", + "id": 82 + }, + { + "area": 19800, + "iscrowd": 0, + "bbox": [ + 333, + 186, + 87, + 224 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "39", + "id": 83 + }, + { + "area": 65124, + "iscrowd": 0, + "bbox": [ + 17, + 335, + 267, + 242 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "40", + "id": 84 + }, + { + "area": 17577, + "iscrowd": 0, + "bbox": [ + 244, + 215, + 80, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "40", + "id": 85 + }, + { + "area": 19272, + "iscrowd": 0, + "bbox": [ + 344, + 172, + 87, + 218 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "40", + "id": 86 + }, + { + "area": 71002, + "iscrowd": 0, + "bbox": [ + 195, + 307, + 270, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "41", + "id": 87 + }, + { + "area": 21762, + "iscrowd": 0, + "bbox": [ + 134, + 176, + 92, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "41", + "id": 88 + }, + { + "area": 19270, + "iscrowd": 0, + "bbox": [ + 256, + 127, + 81, + 234 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "41", + "id": 89 + }, + { + "area": 33840, + "iscrowd": 0, + "bbox": [ + 65, + 264, + 119, + 281 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "42", + "id": 90 + }, + { + "area": 53265, + "iscrowd": 0, + "bbox": [ + 144, + 308, + 264, + 200 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "42", + "id": 91 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 337, + 175, + 91, + 229 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "42", + "id": 92 + }, + { + "area": 44220, + "iscrowd": 0, + "bbox": [ + 96, + 250, + 133, + 329 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "43", + "id": 93 + }, + { + "area": 37356, + "iscrowd": 0, + "bbox": [ + 124, + 127, + 131, + 282 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "43", + "id": 94 + }, + { + "area": 34770, + "iscrowd": 0, + "bbox": [ + 281, + 184, + 113, + 304 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "43", + "id": 95 + }, + { + "area": 45188, + "iscrowd": 0, + "bbox": [ + 19, + 188, + 142, + 315 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "44", + "id": 96 + }, + { + "area": 29744, + "iscrowd": 0, + "bbox": [ + 203, + 231, + 103, + 285 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "44", + "id": 97 + }, + { + "area": 29568, + "iscrowd": 0, + "bbox": [ + 344, + 266, + 111, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "44", + "id": 98 + }, + { + "area": 32301, + "iscrowd": 0, + "bbox": [ + 93, + 205, + 110, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "45", + "id": 99 + }, + { + "area": 44756, + "iscrowd": 0, + "bbox": [ + 198, + 171, + 133, + 333 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "45", + "id": 100 + }, + { + "area": 24735, + "iscrowd": 0, + "bbox": [ + 306, + 238, + 96, + 254 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "45", + "id": 101 + }, + { + "area": 32592, + "iscrowd": 0, + "bbox": [ + 66, + 177, + 111, + 290 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "46", + "id": 102 + }, + { + "area": 66642, + "iscrowd": 0, + "bbox": [ + 161, + 149, + 173, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "46", + "id": 103 + }, + { + "area": 25620, + "iscrowd": 0, + "bbox": [ + 307, + 316, + 121, + 209 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "46", + "id": 104 + }, + { + "area": 33900, + "iscrowd": 0, + "bbox": [ + 77, + 190, + 112, + 299 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "47", + "id": 105 + }, + { + "area": 18988, + "iscrowd": 0, + "bbox": [ + 202, + 303, + 100, + 187 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "47", + "id": 106 + }, + { + "area": 64032, + "iscrowd": 0, + "bbox": [ + 290, + 157, + 183, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "47", + "id": 107 + }, + { + "area": 22914, + "iscrowd": 0, + "bbox": [ + 68, + 301, + 113, + 200 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "48", + "id": 108 + }, + { + "area": 60214, + "iscrowd": 0, + "bbox": [ + 175, + 140, + 160, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "48", + "id": 109 + }, + { + "area": 38430, + "iscrowd": 0, + "bbox": [ + 308, + 182, + 121, + 314 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "48", + "id": 110 + }, + { + "area": 35568, + "iscrowd": 0, + "bbox": [ + 21, + 425, + 311, + 113 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "49", + "id": 111 + }, + { + "area": 12015, + "iscrowd": 0, + "bbox": [ + 228, + 306, + 88, + 134 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "49", + "id": 112 + }, + { + "area": 50868, + "iscrowd": 0, + "bbox": [ + 308, + 176, + 161, + 313 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "49", + "id": 113 + }, + { + "area": 41454, + "iscrowd": 0, + "bbox": [ + 54, + 168, + 140, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "50", + "id": 114 + }, + { + "area": 32508, + "iscrowd": 0, + "bbox": [ + 59, + 410, + 300, + 107 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "50", + "id": 115 + }, + { + "area": 22425, + "iscrowd": 0, + "bbox": [ + 353, + 338, + 114, + 194 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "50", + "id": 116 + }, + { + "area": 44092, + "iscrowd": 0, + "bbox": [ + 21, + 202, + 145, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "51", + "id": 117 + }, + { + "area": 16275, + "iscrowd": 0, + "bbox": [ + 199, + 341, + 92, + 174 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "51", + "id": 118 + }, + { + "area": 28355, + "iscrowd": 0, + "bbox": [ + 361, + 235, + 106, + 264 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "51", + "id": 119 + }, + { + "area": 45743, + "iscrowd": 0, + "bbox": [ + 29, + 194, + 148, + 306 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "52", + "id": 120 + }, + { + "area": 17088, + "iscrowd": 0, + "bbox": [ + 209, + 337, + 95, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "52", + "id": 121 + }, + { + "area": 25132, + "iscrowd": 0, + "bbox": [ + 369, + 261, + 102, + 243 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "52", + "id": 122 + }, + { + "area": 22967, + "iscrowd": 0, + "bbox": [ + 47, + 333, + 118, + 192 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "53", + "id": 123 + }, + { + "area": 49288, + "iscrowd": 0, + "bbox": [ + 172, + 319, + 243, + 201 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "53", + "id": 124 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 362, + 225, + 90, + 221 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "53", + "id": 125 + }, + { + "area": 17576, + "iscrowd": 0, + "bbox": [ + 42, + 354, + 103, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "54", + "id": 126 + }, + { + "area": 23674, + "iscrowd": 0, + "bbox": [ + 122, + 374, + 177, + 132 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "54", + "id": 127 + }, + { + "area": 42340, + "iscrowd": 0, + "bbox": [ + 325, + 224, + 145, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "54", + "id": 128 + }, + { + "area": 25220, + "iscrowd": 0, + "bbox": [ + 118, + 222, + 96, + 259 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "55", + "id": 129 + }, + { + "area": 20790, + "iscrowd": 0, + "bbox": [ + 185, + 316, + 104, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "55", + "id": 130 + }, + { + "area": 54880, + "iscrowd": 0, + "bbox": [ + 251, + 147, + 159, + 342 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "55", + "id": 131 + }, + { + "area": 29298, + "iscrowd": 0, + "bbox": [ + 22, + 252, + 113, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "56", + "id": 132 + }, + { + "area": 51984, + "iscrowd": 0, + "bbox": [ + 163, + 181, + 151, + 341 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "56", + "id": 133 + }, + { + "area": 21660, + "iscrowd": 0, + "bbox": [ + 345, + 328, + 113, + 189 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "56", + "id": 134 + }, + { + "area": 31860, + "iscrowd": 0, + "bbox": [ + 69, + 230, + 117, + 269 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "57", + "id": 135 + }, + { + "area": 32963, + "iscrowd": 0, + "bbox": [ + 167, + 313, + 276, + 118 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "57", + "id": 136 + }, + { + "area": 21384, + "iscrowd": 0, + "bbox": [ + 283, + 315, + 107, + 197 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "57", + "id": 137 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 44, + 332, + 109, + 185 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "58", + "id": 138 + }, + { + "area": 15808, + "iscrowd": 0, + "bbox": [ + 175, + 231, + 75, + 207 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "58", + "id": 139 + }, + { + "area": 55040, + "iscrowd": 0, + "bbox": [ + 297, + 194, + 171, + 319 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "58", + "id": 140 + }, + { + "area": 52456, + "iscrowd": 0, + "bbox": [ + 48, + 322, + 315, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "59", + "id": 141 + }, + { + "area": 22781, + "iscrowd": 0, + "bbox": [ + 182, + 318, + 108, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "59", + "id": 142 + }, + { + "area": 19040, + "iscrowd": 0, + "bbox": [ + 332, + 201, + 84, + 223 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "59", + "id": 143 + }, + { + "area": 51958, + "iscrowd": 0, + "bbox": [ + 30, + 296, + 312, + 165 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "60", + "id": 144 + }, + { + "area": 23353, + "iscrowd": 0, + "bbox": [ + 203, + 360, + 192, + 120 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "60", + "id": 145 + }, + { + "area": 19314, + "iscrowd": 0, + "bbox": [ + 312, + 170, + 86, + 221 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "60", + "id": 146 + }, + { + "area": 48960, + "iscrowd": 0, + "bbox": [ + 34, + 260, + 305, + 159 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "61", + "id": 147 + }, + { + "area": 44520, + "iscrowd": 0, + "bbox": [ + 144, + 331, + 264, + 167 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "61", + "id": 148 + }, + { + "area": 20240, + "iscrowd": 0, + "bbox": [ + 376, + 241, + 109, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "61", + "id": 149 + }, + { + "area": 26429, + "iscrowd": 0, + "bbox": [ + 67, + 255, + 106, + 246 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "62", + "id": 150 + }, + { + "area": 17836, + "iscrowd": 0, + "bbox": [ + 191, + 333, + 97, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "62", + "id": 151 + }, + { + "area": 42280, + "iscrowd": 0, + "bbox": [ + 332, + 179, + 139, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "62", + "id": 152 + }, + { + "area": 22321, + "iscrowd": 0, + "bbox": [ + 59, + 269, + 100, + 220 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 153 + }, + { + "area": 13833, + "iscrowd": 0, + "bbox": [ + 172, + 326, + 86, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 154 + }, + { + "area": 21315, + "iscrowd": 0, + "bbox": [ + 253, + 235, + 86, + 244 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 155 + }, + { + "area": 38808, + "iscrowd": 0, + "bbox": [ + 351, + 202, + 131, + 293 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "63", + "id": 156 + }, + { + "area": 44243, + "iscrowd": 0, + "bbox": [ + 40, + 200, + 150, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 157 + }, + { + "area": 19624, + "iscrowd": 0, + "bbox": [ + 182, + 259, + 87, + 222 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 158 + }, + { + "area": 13770, + "iscrowd": 0, + "bbox": [ + 291, + 317, + 84, + 161 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 159 + }, + { + "area": 25351, + "iscrowd": 0, + "bbox": [ + 369, + 227, + 100, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "64", + "id": 160 + }, + { + "area": 48513, + "iscrowd": 0, + "bbox": [ + 47, + 181, + 156, + 308 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 161 + }, + { + "area": 14520, + "iscrowd": 0, + "bbox": [ + 192, + 304, + 87, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 162 + }, + { + "area": 24832, + "iscrowd": 0, + "bbox": [ + 274, + 211, + 96, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 163 + }, + { + "area": 25334, + "iscrowd": 0, + "bbox": [ + 376, + 247, + 105, + 238 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "65", + "id": 164 + }, + { + "area": 26001, + "iscrowd": 0, + "bbox": [ + 19, + 239, + 106, + 242 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 165 + }, + { + "area": 36608, + "iscrowd": 0, + "bbox": [ + 96, + 200, + 127, + 285 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 166 + }, + { + "area": 12000, + "iscrowd": 0, + "bbox": [ + 217, + 314, + 79, + 149 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 167 + }, + { + "area": 20774, + "iscrowd": 0, + "bbox": [ + 386, + 254, + 93, + 220 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "66", + "id": 168 + }, + { + "area": 26312, + "iscrowd": 0, + "bbox": [ + 71, + 198, + 103, + 252 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 169 + }, + { + "area": 38645, + "iscrowd": 0, + "bbox": [ + 149, + 160, + 130, + 294 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 170 + }, + { + "area": 21160, + "iscrowd": 0, + "bbox": [ + 234, + 392, + 183, + 114 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 171 + }, + { + "area": 20460, + "iscrowd": 0, + "bbox": [ + 356, + 217, + 92, + 219 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "67", + "id": 172 + }, + { + "area": 16300, + "iscrowd": 0, + "bbox": [ + 22, + 341, + 99, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 173 + }, + { + "area": 21736, + "iscrowd": 0, + "bbox": [ + 110, + 249, + 87, + 246 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 174 + }, + { + "area": 52052, + "iscrowd": 0, + "bbox": [ + 191, + 365, + 285, + 181 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 175 + }, + { + "area": 17622, + "iscrowd": 0, + "bbox": [ + 382, + 271, + 88, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "68", + "id": 176 + }, + { + "area": 37089, + "iscrowd": 0, + "bbox": [ + 107, + 109, + 116, + 316 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 177 + }, + { + "area": 20250, + "iscrowd": 0, + "bbox": [ + 272, + 248, + 89, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 178 + }, + { + "area": 20930, + "iscrowd": 0, + "bbox": [ + 361, + 332, + 114, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 179 + }, + { + "area": 64581, + "iscrowd": 0, + "bbox": [ + 47, + 357, + 308, + 208 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "69", + "id": 180 + }, + { + "area": 38560, + "iscrowd": 0, + "bbox": [ + 21, + 378, + 240, + 159 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 181 + }, + { + "area": 56240, + "iscrowd": 0, + "bbox": [ + 60, + 305, + 295, + 189 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 182 + }, + { + "area": 17640, + "iscrowd": 0, + "bbox": [ + 201, + 162, + 89, + 195 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 183 + }, + { + "area": 19264, + "iscrowd": 0, + "bbox": [ + 361, + 280, + 111, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "70", + "id": 184 + }, + { + "area": 72615, + "iscrowd": 0, + "bbox": [ + 68, + 340, + 308, + 234 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 185 + }, + { + "area": 17201, + "iscrowd": 0, + "bbox": [ + 9, + 273, + 102, + 166 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 186 + }, + { + "area": 16856, + "iscrowd": 0, + "bbox": [ + 236, + 171, + 85, + 195 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 187 + }, + { + "area": 21922, + "iscrowd": 0, + "bbox": [ + 365, + 210, + 96, + 225 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "71", + "id": 188 + }, + { + "area": 18360, + "iscrowd": 0, + "bbox": [ + 1, + 318, + 101, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 189 + }, + { + "area": 40690, + "iscrowd": 0, + "bbox": [ + 106, + 178, + 129, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 190 + }, + { + "area": 23296, + "iscrowd": 0, + "bbox": [ + 239, + 203, + 90, + 255 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 191 + }, + { + "area": 27195, + "iscrowd": 0, + "bbox": [ + 372, + 245, + 110, + 244 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "72", + "id": 192 + }, + { + "area": 17200, + "iscrowd": 0, + "bbox": [ + 50, + 312, + 99, + 171 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 193 + }, + { + "area": 29606, + "iscrowd": 0, + "bbox": [ + 168, + 180, + 112, + 261 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 194 + }, + { + "area": 20430, + "iscrowd": 0, + "bbox": [ + 278, + 206, + 89, + 226 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 195 + }, + { + "area": 27930, + "iscrowd": 0, + "bbox": [ + 118, + 418, + 265, + 104 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "73", + "id": 196 + }, + { + "area": 31024, + "iscrowd": 0, + "bbox": [ + 51, + 418, + 276, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 197 + }, + { + "area": 37812, + "iscrowd": 0, + "bbox": [ + 96, + 170, + 137, + 273 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 198 + }, + { + "area": 22204, + "iscrowd": 0, + "bbox": [ + 233, + 193, + 90, + 243 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 199 + }, + { + "area": 20202, + "iscrowd": 0, + "bbox": [ + 344, + 310, + 110, + 181 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "74", + "id": 200 + }, + { + "area": 31857, + "iscrowd": 0, + "bbox": [ + 86, + 205, + 122, + 258 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 201 + }, + { + "area": 44548, + "iscrowd": 0, + "bbox": [ + 36, + 402, + 258, + 171 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 202 + }, + { + "area": 12920, + "iscrowd": 0, + "bbox": [ + 297, + 323, + 84, + 151 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 203 + }, + { + "area": 21024, + "iscrowd": 0, + "bbox": [ + 386, + 268, + 95, + 218 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "75", + "id": 204 + }, + { + "area": 32574, + "iscrowd": 0, + "bbox": [ + 32, + 247, + 121, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 205 + }, + { + "area": 39087, + "iscrowd": 0, + "bbox": [ + 110, + 157, + 128, + 302 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 206 + }, + { + "area": 60680, + "iscrowd": 0, + "bbox": [ + 57, + 393, + 295, + 204 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 207 + }, + { + "area": 18656, + "iscrowd": 0, + "bbox": [ + 348, + 300, + 105, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "76", + "id": 208 + }, + { + "area": 19530, + "iscrowd": 0, + "bbox": [ + 47, + 209, + 92, + 209 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 209 + }, + { + "area": 34602, + "iscrowd": 0, + "bbox": [ + 29, + 331, + 236, + 145 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 210 + }, + { + "area": 12972, + "iscrowd": 0, + "bbox": [ + 261, + 293, + 93, + 137 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 211 + }, + { + "area": 69402, + "iscrowd": 0, + "bbox": [ + 209, + 352, + 268, + 257 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "77", + "id": 212 + }, + { + "area": 23607, + "iscrowd": 0, + "bbox": [ + 22, + 371, + 182, + 128 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 213 + }, + { + "area": 33824, + "iscrowd": 0, + "bbox": [ + 196, + 220, + 111, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 214 + }, + { + "area": 23040, + "iscrowd": 0, + "bbox": [ + 291, + 281, + 95, + 239 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 215 + }, + { + "area": 15717, + "iscrowd": 0, + "bbox": [ + 369, + 338, + 92, + 168 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "78", + "id": 216 + }, + { + "area": 33330, + "iscrowd": 0, + "bbox": [ + 53, + 391, + 201, + 164 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 217 + }, + { + "area": 26496, + "iscrowd": 0, + "bbox": [ + 55, + 326, + 191, + 137 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 218 + }, + { + "area": 42826, + "iscrowd": 0, + "bbox": [ + 238, + 160, + 132, + 321 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 219 + }, + { + "area": 27904, + "iscrowd": 0, + "bbox": [ + 337, + 229, + 108, + 255 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "79", + "id": 220 + }, + { + "area": 22852, + "iscrowd": 0, + "bbox": [ + 44, + 337, + 115, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 221 + }, + { + "area": 34352, + "iscrowd": 0, + "bbox": [ + 142, + 228, + 112, + 303 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 222 + }, + { + "area": 48422, + "iscrowd": 0, + "bbox": [ + 245, + 192, + 141, + 340 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 223 + }, + { + "area": 30705, + "iscrowd": 0, + "bbox": [ + 349, + 266, + 114, + 266 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "80", + "id": 224 + }, + { + "area": 17430, + "iscrowd": 0, + "bbox": [ + 24, + 336, + 104, + 165 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 225 + }, + { + "area": 25900, + "iscrowd": 0, + "bbox": [ + 106, + 244, + 99, + 258 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 226 + }, + { + "area": 20025, + "iscrowd": 0, + "bbox": [ + 265, + 268, + 88, + 224 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 227 + }, + { + "area": 43071, + "iscrowd": 0, + "bbox": [ + 340, + 217, + 146, + 292 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "81", + "id": 228 + }, + { + "area": 15876, + "iscrowd": 0, + "bbox": [ + 29, + 323, + 107, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 229 + }, + { + "area": 21528, + "iscrowd": 0, + "bbox": [ + 248, + 256, + 91, + 233 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 230 + }, + { + "area": 50080, + "iscrowd": 0, + "bbox": [ + 327, + 200, + 159, + 312 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 231 + }, + { + "area": 33136, + "iscrowd": 0, + "bbox": [ + 1, + 437, + 303, + 108 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "82", + "id": 232 + }, + { + "area": 43566, + "iscrowd": 0, + "bbox": [ + 53, + 212, + 136, + 317 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 233 + }, + { + "area": 14696, + "iscrowd": 0, + "bbox": [ + 177, + 335, + 87, + 166 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 234 + }, + { + "area": 26190, + "iscrowd": 0, + "bbox": [ + 254, + 246, + 96, + 269 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 235 + }, + { + "area": 25544, + "iscrowd": 0, + "bbox": [ + 338, + 281, + 102, + 247 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "83", + "id": 236 + }, + { + "area": 41580, + "iscrowd": 0, + "bbox": [ + 88, + 150, + 134, + 307 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 237 + }, + { + "area": 13524, + "iscrowd": 0, + "bbox": [ + 209, + 283, + 91, + 146 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 238 + }, + { + "area": 28140, + "iscrowd": 0, + "bbox": [ + 293, + 185, + 104, + 267 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 239 + }, + { + "area": 32032, + "iscrowd": 0, + "bbox": [ + 96, + 412, + 285, + 111 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "84", + "id": 240 + }, + { + "area": 61060, + "iscrowd": 0, + "bbox": [ + 26, + 195, + 214, + 283 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 241 + }, + { + "area": 23205, + "iscrowd": 0, + "bbox": [ + 211, + 214, + 90, + 254 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 242 + }, + { + "area": 22892, + "iscrowd": 0, + "bbox": [ + 287, + 245, + 96, + 235 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 243 + }, + { + "area": 19224, + "iscrowd": 0, + "bbox": [ + 367, + 317, + 107, + 177 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "85", + "id": 244 + }, + { + "area": 71095, + "iscrowd": 0, + "bbox": [ + 9, + 238, + 294, + 240 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 245 + }, + { + "area": 16000, + "iscrowd": 0, + "bbox": [ + 272, + 312, + 99, + 159 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 246 + }, + { + "area": 28749, + "iscrowd": 0, + "bbox": [ + 355, + 238, + 110, + 258 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 247 + }, + { + "area": 38259, + "iscrowd": 0, + "bbox": [ + 65, + 429, + 326, + 116 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "86", + "id": 248 + }, + { + "area": 59648, + "iscrowd": 0, + "bbox": [ + 2, + 235, + 255, + 232 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 249 + }, + { + "area": 13140, + "iscrowd": 0, + "bbox": [ + 229, + 303, + 89, + 145 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 250 + }, + { + "area": 19008, + "iscrowd": 0, + "bbox": [ + 311, + 231, + 95, + 197 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 251 + }, + { + "area": 36542, + "iscrowd": 0, + "bbox": [ + 157, + 409, + 301, + 120 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "87", + "id": 252 + }, + { + "area": 30480, + "iscrowd": 0, + "bbox": [ + 24, + 260, + 119, + 253 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 253 + }, + { + "area": 46631, + "iscrowd": 0, + "bbox": [ + 113, + 239, + 210, + 220 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 254 + }, + { + "area": 14670, + "iscrowd": 0, + "bbox": [ + 289, + 302, + 89, + 162 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 255 + }, + { + "area": 25602, + "iscrowd": 0, + "bbox": [ + 362, + 207, + 101, + 250 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "88", + "id": 256 + }, + { + "area": 55536, + "iscrowd": 0, + "bbox": [ + 31, + 159, + 155, + 355 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 257 + }, + { + "area": 20352, + "iscrowd": 0, + "bbox": [ + 173, + 312, + 105, + 191 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 258 + }, + { + "area": 28886, + "iscrowd": 0, + "bbox": [ + 258, + 192, + 100, + 285 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 259 + }, + { + "area": 29304, + "iscrowd": 0, + "bbox": [ + 342, + 229, + 110, + 263 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "89", + "id": 260 + }, + { + "area": 38776, + "iscrowd": 0, + "bbox": [ + 33, + 228, + 130, + 295 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 261 + }, + { + "area": 41856, + "iscrowd": 0, + "bbox": [ + 136, + 183, + 127, + 326 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 262 + }, + { + "area": 18180, + "iscrowd": 0, + "bbox": [ + 251, + 322, + 100, + 179 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 263 + }, + { + "area": 27864, + "iscrowd": 0, + "bbox": [ + 340, + 250, + 107, + 257 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "90", + "id": 264 + }, + { + "area": 69360, + "iscrowd": 0, + "bbox": [ + 43, + 384, + 407, + 169 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 265 + }, + { + "area": 25648, + "iscrowd": 0, + "bbox": [ + 113, + 169, + 111, + 228 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 266 + }, + { + "area": 12495, + "iscrowd": 0, + "bbox": [ + 211, + 275, + 104, + 118 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 267 + }, + { + "area": 19686, + "iscrowd": 0, + "bbox": [ + 309, + 200, + 101, + 192 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "91", + "id": 268 + }, + { + "area": 25185, + "iscrowd": 0, + "bbox": [ + 200, + 292, + 114, + 218 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 269 + }, + { + "area": 18715, + "iscrowd": 0, + "bbox": [ + 122, + 120, + 94, + 196 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 270 + }, + { + "area": 14760, + "iscrowd": 0, + "bbox": [ + 292, + 152, + 89, + 163 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 271 + }, + { + "area": 46704, + "iscrowd": 0, + "bbox": [ + 67, + 307, + 335, + 138 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "92", + "id": 272 + }, + { + "area": 39650, + "iscrowd": 0, + "bbox": [ + 109, + 163, + 121, + 324 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 273 + }, + { + "area": 23142, + "iscrowd": 0, + "bbox": [ + 222, + 285, + 113, + 202 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 274 + }, + { + "area": 14130, + "iscrowd": 0, + "bbox": [ + 305, + 151, + 89, + 156 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 275 + }, + { + "area": 43335, + "iscrowd": 0, + "bbox": [ + 91, + 296, + 320, + 134 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "93", + "id": 276 + }, + { + "area": 54756, + "iscrowd": 0, + "bbox": [ + 18, + 202, + 161, + 337 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 277 + }, + { + "area": 30672, + "iscrowd": 0, + "bbox": [ + 163, + 242, + 107, + 283 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 278 + }, + { + "area": 19136, + "iscrowd": 0, + "bbox": [ + 260, + 335, + 103, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 279 + }, + { + "area": 25704, + "iscrowd": 0, + "bbox": [ + 351, + 264, + 101, + 251 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "94", + "id": 280 + }, + { + "area": 64566, + "iscrowd": 0, + "bbox": [ + 104, + 238, + 305, + 210 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "95", + "id": 281 + }, + { + "area": 85250, + "iscrowd": 0, + "bbox": [ + 86, + 244, + 340, + 249 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "96", + "id": 282 + }, + { + "area": 90207, + "iscrowd": 0, + "bbox": [ + 86, + 245, + 350, + 256 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "97", + "id": 283 + }, + { + "area": 87235, + "iscrowd": 0, + "bbox": [ + 45, + 236, + 364, + 238 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "98", + "id": 284 + }, + { + "area": 41400, + "iscrowd": 0, + "bbox": [ + 152, + 249, + 224, + 183 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "99", + "id": 285 + }, + { + "area": 46886, + "iscrowd": 0, + "bbox": [ + 130, + 271, + 237, + 196 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "100", + "id": 286 + }, + { + "area": 46872, + "iscrowd": 0, + "bbox": [ + 65, + 289, + 371, + 125 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "101", + "id": 287 + }, + { + "area": 51054, + "iscrowd": 0, + "bbox": [ + 139, + 253, + 200, + 253 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "102", + "id": 288 + }, + { + "area": 29750, + "iscrowd": 0, + "bbox": [ + 144, + 260, + 174, + 169 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "103", + "id": 289 + }, + { + "area": 29684, + "iscrowd": 0, + "bbox": [ + 175, + 253, + 180, + 163 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "104", + "id": 290 + }, + { + "area": 52578, + "iscrowd": 0, + "bbox": [ + 142, + 257, + 253, + 206 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "105", + "id": 291 + }, + { + "area": 52224, + "iscrowd": 0, + "bbox": [ + 103, + 272, + 255, + 203 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "106", + "id": 292 + }, + { + "area": 30820, + "iscrowd": 0, + "bbox": [ + 107, + 272, + 133, + 229 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "107", + "id": 293 + }, + { + "area": 23408, + "iscrowd": 0, + "bbox": [ + 261, + 274, + 132, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "107", + "id": 294 + }, + { + "area": 29870, + "iscrowd": 0, + "bbox": [ + 35, + 314, + 289, + 102 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "108", + "id": 295 + }, + { + "area": 24112, + "iscrowd": 0, + "bbox": [ + 313, + 281, + 136, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "108", + "id": 296 + }, + { + "area": 34438, + "iscrowd": 0, + "bbox": [ + 97, + 272, + 133, + 256 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "109", + "id": 297 + }, + { + "area": 22550, + "iscrowd": 0, + "bbox": [ + 225, + 293, + 204, + 109 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "109", + "id": 298 + }, + { + "area": 33300, + "iscrowd": 0, + "bbox": [ + 47, + 308, + 299, + 110 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "110", + "id": 299 + }, + { + "area": 26368, + "iscrowd": 0, + "bbox": [ + 331, + 205, + 127, + 205 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "110", + "id": 300 + }, + { + "area": 39162, + "iscrowd": 0, + "bbox": [ + 98, + 176, + 121, + 320 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "111", + "id": 301 + }, + { + "area": 65048, + "iscrowd": 0, + "bbox": [ + 220, + 130, + 172, + 375 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "111", + "id": 302 + }, + { + "area": 39360, + "iscrowd": 0, + "bbox": [ + 29, + 415, + 327, + 119 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "112", + "id": 303 + }, + { + "area": 56724, + "iscrowd": 0, + "bbox": [ + 272, + 145, + 162, + 347 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "112", + "id": 304 + }, + { + "area": 29500, + "iscrowd": 0, + "bbox": [ + 82, + 128, + 117, + 249 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "113", + "id": 305 + }, + { + "area": 77172, + "iscrowd": 0, + "bbox": [ + 89, + 333, + 353, + 217 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "113", + "id": 306 + }, + { + "area": 31868, + "iscrowd": 0, + "bbox": [ + 74, + 114, + 123, + 256 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "114", + "id": 307 + }, + { + "area": 87290, + "iscrowd": 0, + "bbox": [ + 56, + 330, + 405, + 214 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "114", + "id": 308 + }, + { + "area": 40119, + "iscrowd": 0, + "bbox": [ + 229, + 118, + 128, + 310 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "115", + "id": 309 + }, + { + "area": 58828, + "iscrowd": 0, + "bbox": [ + 131, + 365, + 307, + 190 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "115", + "id": 310 + }, + { + "area": 37820, + "iscrowd": 0, + "bbox": [ + 65, + 169, + 121, + 309 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "116", + "id": 311 + }, + { + "area": 72354, + "iscrowd": 0, + "bbox": [ + 242, + 132, + 185, + 388 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "116", + "id": 312 + }, + { + "area": 54040, + "iscrowd": 0, + "bbox": [ + 140, + 167, + 139, + 385 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "117", + "id": 313 + }, + { + "area": 30694, + "iscrowd": 0, + "bbox": [ + 240, + 190, + 102, + 297 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "117", + "id": 314 + }, + { + "area": 23816, + "iscrowd": 0, + "bbox": [ + 196, + 200, + 103, + 228 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "118", + "id": 315 + }, + { + "area": 46280, + "iscrowd": 0, + "bbox": [ + 88, + 410, + 355, + 129 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "118", + "id": 316 + }, + { + "area": 35160, + "iscrowd": 0, + "bbox": [ + 139, + 116, + 119, + 292 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "119", + "id": 317 + }, + { + "area": 46170, + "iscrowd": 0, + "bbox": [ + 128, + 389, + 341, + 134 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "119", + "id": 318 + }, + { + "area": 34691, + "iscrowd": 0, + "bbox": [ + 150, + 139, + 112, + 306 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "120", + "id": 319 + }, + { + "area": 55769, + "iscrowd": 0, + "bbox": [ + 149, + 355, + 256, + 216 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "120", + "id": 320 + }, + { + "area": 33744, + "iscrowd": 0, + "bbox": [ + 36, + 294, + 303, + 110 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "121", + "id": 321 + }, + { + "area": 43155, + "iscrowd": 0, + "bbox": [ + 169, + 371, + 314, + 136 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "121", + "id": 322 + }, + { + "area": 38936, + "iscrowd": 0, + "bbox": [ + 31, + 296, + 313, + 123 + ], + "category_id": 4, + "ignore": 0, + "segmentation": [], + "image_id": "122", + "id": 323 + }, + { + "area": 47742, + "iscrowd": 0, + "bbox": [ + 171, + 373, + 326, + 145 + ], + "category_id": 3, + "ignore": 0, + "segmentation": [], + "image_id": "122", + "id": 324 + }, + { + "area": 25773, + "iscrowd": 0, + "bbox": [ + 107, + 288, + 120, + 212 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "123", + "id": 325 + }, + { + "area": 69706, + "iscrowd": 0, + "bbox": [ + 243, + 112, + 181, + 382 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "123", + "id": 326 + }, + { + "area": 26334, + "iscrowd": 0, + "bbox": [ + 50, + 263, + 125, + 208 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "124", + "id": 327 + }, + { + "area": 106304, + "iscrowd": 0, + "bbox": [ + 122, + 186, + 351, + 301 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "124", + "id": 328 + }, + { + "area": 23617, + "iscrowd": 0, + "bbox": [ + 86, + 371, + 208, + 112 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "125", + "id": 329 + }, + { + "area": 68816, + "iscrowd": 0, + "bbox": [ + 279, + 111, + 183, + 373 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "125", + "id": 330 + }, + { + "area": 19360, + "iscrowd": 0, + "bbox": [ + 111, + 206, + 109, + 175 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "126", + "id": 331 + }, + { + "area": 99470, + "iscrowd": 0, + "bbox": [ + 102, + 285, + 342, + 289 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "126", + "id": 332 + }, + { + "area": 40200, + "iscrowd": 0, + "bbox": [ + 103, + 300, + 149, + 267 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "127", + "id": 333 + }, + { + "area": 67968, + "iscrowd": 0, + "bbox": [ + 229, + 71, + 176, + 383 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "127", + "id": 334 + }, + { + "area": 14151, + "iscrowd": 0, + "bbox": [ + 134, + 257, + 88, + 158 + ], + "category_id": 1, + "ignore": 0, + "segmentation": [], + "image_id": "128", + "id": 335 + }, + { + "area": 70485, + "iscrowd": 0, + "bbox": [ + 244, + 139, + 184, + 380 + ], + "category_id": 2, + "ignore": 0, + "segmentation": [], + "image_id": "128", + "id": 336 + } + ], + "categories": [ + { + "supercategory": "none", + "id": 1, + "name": "can" + }, + { + "supercategory": "none", + "id": 2, + "name": "carton" + }, + { + "supercategory": "none", + "id": 3, + "name": "milk_bottle" + }, + { + "supercategory": "none", + "id": 4, + "name": "water_bottle" + } + ] +} \ No newline at end of file diff --git a/sdk/python/foundation-models/system/import/import_model_into_registry.ipynb b/sdk/python/foundation-models/system/import/import_model_into_registry.ipynb index 433306fde9..c11af9dabd 100644 --- a/sdk/python/foundation-models/system/import/import_model_into_registry.ipynb +++ b/sdk/python/foundation-models/system/import/import_model_into_registry.ipynb @@ -25,6 +25,7 @@ "* text-generation\n", "* text-classification\n", "* translation\n", + "* image-classification\n", "\n", "### Limitations of Model Import component where MLFlow conversion of model(s) would fail: \n", "1. If you attempt to download a model that has a task type other than the above with error - `Exception: Unsupported task {task name}`. \n", diff --git a/sdk/python/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.ipynb b/sdk/python/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.ipynb new file mode 100644 index 0000000000..a71e870ccc --- /dev/null +++ b/sdk/python/foundation-models/system/inference/image-classification/image-classification-batch-endpoint.ipynb @@ -0,0 +1,540 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Classification Inference using Batch Endpoints\n", + "\n", + "This sample shows how deploy `image-classification` type models to an batch endpoint for inference.\n", + "\n", + "### Task\n", + "`image-classification` tasks assign label(s) or class(es) to an image. There are two common types of `image-classification` tasks:\n", + "\n", + "* MultiClass: An image is categorised into one of the classes.\n", + "* MultiLabel: An image can be categorised into more than one class.\n", + " \n", + "### Model\n", + "Models that can perform the `image-classification` task are tagged with `image-classification`. We will use the `microsoft-beit-base-patch16-224-pt22k-ft22k` model in this notebook. If you opened this notebook from a specific model card, remember to replace the specific model name. If you don't find a model that suits your scenario or domain, you can discover and [import models from HuggingFace hub](../../import/import_model_into_registry.ipynb) and then use them for inference. \n", + "\n", + "### Inference data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset for image multi-class classification.\n", + "\n", + "\n", + "### Outline\n", + "1. Setup pre-requisites\n", + "2. Pick a model to deploy\n", + "3. Prepare data for inference - Using a folder of images; Using a csv file with base64 images\n", + "4. Deploy the model to a batch endpoint\n", + "5. Test the endpoint - Using a folder of images; Using a csv file with base64 images\n", + "6. Clean up resources - delete the endpoint" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup pre-requisites\n", + "* Install dependencies\n", + "* Connect to AzureML Workspace. Learn more at [set up SDK authentication](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk). Replace ``, `` and `` below.\n", + "* Connect to `azureml-staging` system registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient, Input\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.ai.ml.constants import AssetTypes\n", + "from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential\n", + "import time\n", + "\n", + "try:\n", + " credential = DefaultAzureCredential()\n", + " credential.get_token(\"https://management.azure.com/.default\")\n", + "except Exception as ex:\n", + " credential = InteractiveBrowserCredential()\n", + "\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "# The models, fine tuning pipelines and environments are available in the AzureML system registry, \"azureml\"\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a compute cluster\n", + "Use the model card from the AzureML system registry to check the minimum required inferencing SKU, referenced as size below. If you already have a sufficient compute cluster, you can simply define the name in compute_name in the following code block." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "compute_name = \"cpu-cluster\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(compute_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=compute_name,\n", + " description=\"An AML compute cluster\",\n", + " size=\"Standard_DS3_V2\",\n", + " min_instances=0,\n", + " max_instances=3,\n", + " idle_time_before_scale_down=120,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Pick a model to deploy\n", + "\n", + "Browse models in the Model Catalog in the AzureML Studio, filtering by the `image-classification` task. In this example, we use the `microsoft-beit-base-patch16-224-pt22k-ft22k ` model. If you have opened this notebook for a different model, replace the model name accordingly. This is a pre-trained model and may not give correct prediction for your dataset. We strongly recommend to finetune this model on a down-stream task to be able to use it for predictions and inference. Please refer to the [multi-class classification finetuning notebook](../../finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"microsoft-beit-base-patch16-224-pt22k-ft22k\"\n", + "\n", + "foundation_models = registry_ml_client.models.list(name=model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Prepare data for inference - Using a folder of images; Using a csv file with base64 images\n", + "\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset for multi-class classification. The fridge object dataset is stored in a directory. There are four different folders inside:\n", + "- /water_bottle\n", + "- /milk_bottle\n", + "- /carton\n", + "- /can\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "import shutil\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "if os.path.exists(dataset_dir):\n", + " shutil.rmtree(dataset_dir)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.1 Arrange images in common folder for batch inference input" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for dir_name in os.listdir(dataset_dir):\n", + " dir_path = os.path.join(dataset_dir, dir_name)\n", + " for path, subdirs, files in os.walk(dir_path):\n", + " for file in files:\n", + " shutil.move(os.path.join(path, file), dataset_dir)\n", + "\n", + " shutil.rmtree(dir_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.2 Prepare CSV file with base64 images for batch inference input\n", + "\n", + "We can provide input images to batch inference either in a folder containing images or in a csv file containing \"image\" named column having images in base64 format.\n", + "\n", + "Note: If job failed with error Assertion Error (`The actual length exceeded max length 100 MB`) then please try with less number of input images or use ImageFolder Input mode." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import base64\n", + "import pandas as pd\n", + "\n", + "image_list = []\n", + "csv_file_path = os.path.join(dataset_parent_dir, \"image_list.csv\")\n", + "\n", + "for image in os.listdir(dataset_dir):\n", + " with open(os.path.join(dataset_dir, image), \"rb\") as f:\n", + " data = f.read()\n", + " data = base64.encodebytes(data).decode(\"utf-8\")\n", + " image_list.append(data)\n", + "\n", + "df = pd.DataFrame(image_list, columns=[\"image\"]).sample(10)\n", + "df.to_csv(csv_file_path, index=False, header=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Deploy the model to a batch endpoint\n", + "Batch endpoints are endpoints that are used to do batch inferencing on large volumes of data over a period of time. The endpoints receive pointers to data and run jobs asynchronously to process the data in parallel on compute clusters. Batch endpoints store outputs to a data store for further analysis. For more information on batch endpoints and deployments see [What are batch endpoints?](https://learn.microsoft.com/en-us/azure/machine-learning/concept-endpoints?view=azureml-api-2#what-are-batch-endpoints).\n", + "\n", + "* Create a batch endpoint.\n", + "* Create a batch deployment.\n", + "* Set the deployment as default; doing so allows invoking the endpoint without specifying the deployment's name." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a batch endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time, sys\n", + "from azure.ai.ml.entities import (\n", + " BatchEndpoint,\n", + " BatchDeployment,\n", + " BatchRetrySettings,\n", + " AmlCompute,\n", + ")\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "endpoint_name = \"hf-image-classif-\" + str(timestamp)\n", + "# Create a batch endpoint\n", + "endpoint = BatchEndpoint(\n", + " name=endpoint_name,\n", + " description=\"Batch endpoint for \"\n", + " + foundation_model.name\n", + " + \", for image-classification task\",\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a batch deployment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deployment_name = \"demo\"\n", + "\n", + "deployment = BatchDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=endpoint_name,\n", + " model=foundation_model.id,\n", + " compute=compute_name,\n", + " error_threshold=0,\n", + " instance_count=1,\n", + " logging_level=\"info\",\n", + " max_concurrency_per_instance=1,\n", + " mini_batch_size=2,\n", + " output_file_name=\"predictions.csv\",\n", + " retry_settings=BatchRetrySettings(max_retries=3, timeout=600),\n", + ")\n", + "workspace_ml_client.begin_create_or_update(deployment).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Set the deployment as default" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "endpoint = workspace_ml_client.batch_endpoints.get(endpoint_name)\n", + "endpoint.defaults.deployment_name = deployment_name\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()\n", + "\n", + "endpoint = workspace_ml_client.batch_endpoints.get(endpoint_name)\n", + "print(f\"The default deployment is {endpoint.defaults.deployment_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Test the endpoint - Using a folder of images; Using a csv file with base64 images\n", + "\n", + "We will fetch some sample data from the test dataset and invoke batch endpoint for inference." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Test the endpoint - Using folder of images from 3.1\n", + "\n", + "Invoke the batch endpoint with the input parameter pointing to the folder containing the batch inference input. This creates a pipeline job using the default deployment in the endpoint. Wait for the job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "input = Input(path=dataset_dir, type=AssetTypes.URI_FOLDER)\n", + "\n", + "job = workspace_ml_client.batch_endpoints.invoke(\n", + " endpoint_name=endpoint.name, input=input\n", + ")\n", + "\n", + "workspace_ml_client.jobs.stream(job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scoring_job = list(workspace_ml_client.jobs.list(parent_job_name=job.name))[0]\n", + "\n", + "workspace_ml_client.jobs.download(\n", + " name=scoring_job.name,\n", + " download_path=os.path.join(dataset_parent_dir, \"image-folder-output\"),\n", + " output_name=\"score\",\n", + ")\n", + "\n", + "predictions_file = os.path.join(\n", + " dataset_parent_dir,\n", + " \"image-folder-output\",\n", + " \"named-outputs\",\n", + " \"score\",\n", + " \"predictions.csv\",\n", + ")\n", + "\n", + "# Load the batch predictions file with no headers into a dataframe and set your column names\n", + "score_df = pd.read_csv(\n", + " predictions_file,\n", + " header=None,\n", + " names=[\"row_number_per_file\", \"preds\", \"labels\", \"file_name\"],\n", + ")\n", + "score_df.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Test the endpoint - Using CSV input with base64 images from 3.2\n", + "\n", + "Invoke the batch endpoint with the input parameter pointing to the csv file containing the batch inference input. This creates a pipeline job using the default deployment in the endpoint. Wait for the job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "job = None\n", + "input = Input(path=csv_file_path, type=AssetTypes.URI_FILE)\n", + "num_retries = 3\n", + "for i in range(num_retries):\n", + " try:\n", + " job = workspace_ml_client.batch_endpoints.invoke(\n", + " endpoint_name=endpoint.name, input=input\n", + " )\n", + " break\n", + " except Exception as e:\n", + " if i == num_retries - 1:\n", + " raise e\n", + " else:\n", + " print(\"Endpoint invocation failed. Retrying after 5 seconds...\")\n", + " time.sleep(5)\n", + "if job is not None:\n", + " workspace_ml_client.jobs.stream(job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scoring_job = list(workspace_ml_client.jobs.list(parent_job_name=job.name))[0]\n", + "\n", + "workspace_ml_client.jobs.download(\n", + " name=scoring_job.name,\n", + " download_path=os.path.join(dataset_parent_dir, \"csv-output\"),\n", + " output_name=\"score\",\n", + ")\n", + "\n", + "predictions_file = os.path.join(\n", + " dataset_parent_dir, \"csv-output\", \"named-outputs\", \"score\", \"predictions.csv\"\n", + ")\n", + "\n", + "# Load the batch predictions file with no headers into a dataframe and set your column names\n", + "score_df = pd.read_csv(\n", + " predictions_file,\n", + " header=None,\n", + " names=[\"row_number_per_file\", \"preds\", \"labels\", \"file_name\"],\n", + ")\n", + "score_df.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Clean up resources - delete the endpoint\n", + "Batch endpoints use compute resources only when jobs are submitted. You can keep the batch endpoint for your reference without worrying about compute bills, or choose to delete the endpoint. If you created your compute cluster to have zero minimum instances and scale down soon after being idle, you won't be charged for an unused compute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.batch_endpoints.begin_delete(name=endpoint_name).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/inference/image-classification/image-classification-online-endpoint.ipynb b/sdk/python/foundation-models/system/inference/image-classification/image-classification-online-endpoint.ipynb new file mode 100644 index 0000000000..b88ed01fdc --- /dev/null +++ b/sdk/python/foundation-models/system/inference/image-classification/image-classification-online-endpoint.ipynb @@ -0,0 +1,376 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Classification Inference using Online Endpoints\n", + "\n", + "This sample shows how deploy `image-classification` type models to an online endpoint for inference.\n", + "\n", + "### Task\n", + "`image-classification` tasks assign label(s) or class(es) to an image. There are two common types of `image-classification` tasks:\n", + "\n", + "* MultiClass: An image is categorised into one of the three or more classes.\n", + "* MultiLabel: An image can be categorised into more than one class.\n", + " \n", + "### Model\n", + "Models that can perform the `image-classification` task are tagged with `image-classification`. We will use the `microsoft-beit-base-patch16-224-pt22k-ft22k` model in this notebook. If you opened this notebook from a specific model card, remember to replace the specific model name. If you don't find a model that suits your scenario or domain, you can discover and [import models from HuggingFace hub](../../import/import_model_into_registry.ipynb) and then use them for inference.\n", + "\n", + "### Inference data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset.\n", + "\n", + "\n", + "### Outline\n", + "1. Setup pre-requisites\n", + "2. Pick a model to deploy\n", + "3. Prepare data for inference\n", + "4. Deploy the model to an online endpoint for real time inference\n", + "5. Test the endpoint\n", + "6. Clean up resources - delete the online endpoint" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup pre-requisites\n", + "* Install dependencies\n", + "* Connect to AzureML Workspace. Learn more at [set up SDK authentication](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk). Replace ``, `` and `` below.\n", + "* Connect to `azureml` system registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import (\n", + " DefaultAzureCredential,\n", + " InteractiveBrowserCredential,\n", + " ClientSecretCredential,\n", + ")\n", + "from azure.ai.ml.entities import AmlCompute\n", + "import time\n", + "\n", + "try:\n", + " credential = DefaultAzureCredential()\n", + " credential.get_token(\"https://management.azure.com/.default\")\n", + "except Exception as ex:\n", + " credential = InteractiveBrowserCredential()\n", + "\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "# The models, fine tuning pipelines and environments are available in the AzureML system registry, \"azureml\"\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Pick a model to deploy\n", + "\n", + "Browse models in the Model Catalog in the AzureML Studio, filtering by the `image-classification` task. In this example, we use the `microsoft-beit-base-patch16-224-pt22k-ft22k ` model. If you have opened this notebook for a different model, replace the model name accordingly. This is a pre-trained model and may not give correct prediction for your dataset. We strongly recommend to finetune this model on a down-stream task to be able to use it for predictions and inference. Please refer to the [multi-class classification finetuning notebook](../../finetune/image-classification/multiclass-classification/hftransformers-fridgeobjects-multiclass-classification.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"microsoft-beit-base-patch16-224-pt22k-ft22k\"\n", + "foundation_models = registry_ml_client.models.list(name=model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Prepare data for inference\n", + "\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip) dataset for multi-class classification task. The fridge object dataset is stored in a directory. There are four different folders inside:\n", + "- /water_bottle\n", + "- /milk_bottle\n", + "- /carton\n", + "- /can\n", + "\n", + "This is the most common data format for multiclass image classification. Each folder title corresponds to the image label for the images contained inside. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/image_classification/fridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"milk_bottle\", \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Deploy the model to an online endpoint for real time inference\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time, sys\n", + "from azure.ai.ml.entities import (\n", + " ManagedOnlineEndpoint,\n", + " ManagedOnlineDeployment,\n", + " OnlineRequestSettings,\n", + ")\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "timestamp = int(time.time())\n", + "online_endpoint_name = \"hf-image-classif-\" + str(timestamp)\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=\"Online endpoint for \"\n", + " + foundation_model.name\n", + " + \", for image-classification task\",\n", + " auth_mode=\"key\",\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"hf-image-classif-mlflow-deploy\"\n", + "\n", + "print(foundation_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=foundation_model.id,\n", + " instance_type=\"Standard_DS3_V2\", # Use GPU instance type like Standard_NC6s_v3 for faster inference\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=10,\n", + " ),\n", + ")\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Test the endpoint\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# Existing traffic details\n", + "print(endpoint.traffic)\n", + "\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"milk_bottle\", \"99.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"index\": [0],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "# Create request json\n", + "request_file_name = \"sample_request_data.json\"\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Score the sample_score.json file using the online endpoint with the azureml endpoint invoke method\n", + "response = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")\n", + "print(f\"raw response: {response}\\n\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.ipynb b/sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.ipynb new file mode 100644 index 0000000000..c5e4404c42 --- /dev/null +++ b/sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-batch-endpoint.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Instance Segmentation Inference using Batch Endpoints\n", + "\n", + "This sample shows how deploy `image-instance-segmentation` type models to an batch endpoint for inference.\n", + "\n", + "### Task\n", + "`image-instance-segmentation` tasks assign box(es), polygon(s) with their scaled top-left and bottom-right coordinates along with box label and confidence score to an image.\n", + " \n", + "### Model\n", + "Models that can perform the `image-instance-segmentation` task are tagged with `image-instance-segmentation`. We will use the `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` model in this notebook. If you opened this notebook from a specific model card, remember to replace the specific model name.\n", + "\n", + "### Inference data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip) dataset for image instance segmentation.\n", + "\n", + "\n", + "### Outline\n", + "1. Setup pre-requisites\n", + "2. Pick a model to deploy\n", + "3. Prepare data for inference - Using a folder of images; Using a csv file with base64 images\n", + "4. Deploy the model to a batch endpoint\n", + "5. Test the endpoint - Using a folder of images; Using a csv file with base64 images\n", + "6. Clean up resources - delete the endpoint" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup pre-requisites\n", + "* Install dependencies\n", + "* Connect to AzureML Workspace. Learn more at [set up SDK authentication](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk). Replace ``, `` and `` below.\n", + "* Connect to `azureml-staging` system registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient, Input\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.ai.ml.constants import AssetTypes\n", + "from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential\n", + "import time\n", + "\n", + "try:\n", + " credential = DefaultAzureCredential()\n", + " credential.get_token(\"https://management.azure.com/.default\")\n", + "except Exception as ex:\n", + " credential = InteractiveBrowserCredential()\n", + "\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "# The models, fine tuning pipelines and environments are available in the AzureML system registry, \"azureml\"\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a compute cluster.\n", + "Use the model card from the AzureML system registry to check the minimum required inferencing SKU, referenced as size below. If you already have a sufficient compute cluster, you can simply define the name in compute_name in the following code block." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "compute_name = \"cpu-cluster\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(compute_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=compute_name,\n", + " description=\"An AML compute cluster\",\n", + " size=\"Standard_DS3_V2\",\n", + " min_instances=0,\n", + " max_instances=3,\n", + " idle_time_before_scale_down=120,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Pick a model to deploy\n", + "\n", + "Browse models in the Model Catalog in the AzureML Studio, filtering by the `image-segmentation` task or `image-instance-segmentation` finetuning task. In this example, we use the `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` model. If you have opened this notebook for a different model, replace the model name accordingly. This is a pre-trained model and may not give correct prediction for your dataset. We strongly recommend to finetune this model on a down-stream task to be able to use it for predictions and inference. Please refer to the [image instance segmentation finetuning notebook](../../finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"mask_rcnn_swin-t-p4-w7_fpn_1x_coco\"\n", + "foundation_models = registry_ml_client.models.list(name=model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Prepare data for inference - Using a folder of images; Using a csv file with base64 images\n", + "\n", + "We will use the [odFridgeObjectsMask](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip) dataset for image instance segmentation.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "import shutil\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "if os.path.exists(dataset_dir):\n", + " shutil.rmtree(dataset_dir)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.1 Arrange images in common folder for batch inference input" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_directory = os.path.join(dataset_dir, \"images\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.2 Prepare CSV file with base64 images for batch inference input\n", + "\n", + "We can provide input images to batch inference either in a folder containing images or in a csv file containing \"image\" named column having images in base64 format.\n", + "\n", + "Note: If job failed with error Assertion Error (`The actual length exceeded max length 100 MB`) then please try with less number of input images or use ImageFolder Input mode." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import base64\n", + "import pandas as pd\n", + "\n", + "image_list = []\n", + "csv_file_path = os.path.join(dataset_parent_dir, \"image_list.csv\")\n", + "\n", + "for image in os.listdir(image_directory):\n", + " with open(os.path.join(image_directory, image), \"rb\") as f:\n", + " data = f.read()\n", + " data = base64.encodebytes(data).decode(\"utf-8\")\n", + " image_list.append(data)\n", + "\n", + "df = pd.DataFrame(image_list, columns=[\"image\"]).sample(10)\n", + "df.to_csv(csv_file_path, index=False, header=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(image_directory, \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Deploy the model to an batch endpoint\n", + "Batch endpoints are endpoints that are used to do batch inferencing on large volumes of data over a period of time. The endpoints receive pointers to data and run jobs asynchronously to process the data in parallel on compute clusters. Batch endpoints store outputs to a data store for further analysis. For more information on batch endpoints and deployments see [What are batch endpoints?](https://learn.microsoft.com/en-us/azure/machine-learning/concept-endpoints?view=azureml-api-2#what-are-batch-endpoints).\n", + "\n", + "* Create a batch endpoint.\n", + "* Create a batch deployment.\n", + "* Set the deployment as default; doing so allows invoking the endpoint without specifying the deployment's name." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a batch endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time, sys\n", + "from azure.ai.ml.entities import (\n", + " BatchEndpoint,\n", + " BatchDeployment,\n", + " BatchRetrySettings,\n", + " AmlCompute,\n", + ")\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "endpoint_name = \"mmd-image-is-\" + str(timestamp)\n", + "# Create a batch endpoint\n", + "endpoint = BatchEndpoint(\n", + " name=endpoint_name,\n", + " description=\"Batch endpoint for \"\n", + " + foundation_model.name\n", + " + \", for image-instance-segmentation task\",\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a batch deployment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deployment_name = \"demo\"\n", + "\n", + "deployment = BatchDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=endpoint_name,\n", + " model=foundation_model.id,\n", + " compute=compute_name,\n", + " error_threshold=0,\n", + " instance_count=1,\n", + " logging_level=\"info\",\n", + " max_concurrency_per_instance=1,\n", + " mini_batch_size=2,\n", + " output_file_name=\"predictions.csv\",\n", + " retry_settings=BatchRetrySettings(max_retries=3, timeout=600),\n", + ")\n", + "workspace_ml_client.begin_create_or_update(deployment).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Set the deployment as default" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "endpoint = workspace_ml_client.batch_endpoints.get(endpoint_name)\n", + "endpoint.defaults.deployment_name = deployment_name\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()\n", + "\n", + "endpoint = workspace_ml_client.batch_endpoints.get(endpoint_name)\n", + "print(f\"The default deployment is {endpoint.defaults.deployment_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Test the endpoint - Using a folder of images; Using a csv file with base64 images\n", + "\n", + "We will fetch some sample data from the test dataset and invoke batch endpoint for inference." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Test the endpoint - Using folder of images from 3.1\n", + "\n", + "Invoke the batch endpoint with the input parameter pointing to the folder containing the batch inference input. This creates a pipeline job using the default deployment in the endpoint. Wait for the job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "input = Input(path=image_directory, type=AssetTypes.URI_FOLDER)\n", + "\n", + "job = workspace_ml_client.batch_endpoints.invoke(\n", + " endpoint_name=endpoint.name, input=input\n", + ")\n", + "\n", + "workspace_ml_client.jobs.stream(job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scoring_job = list(workspace_ml_client.jobs.list(parent_job_name=job.name))[0]\n", + "\n", + "workspace_ml_client.jobs.download(\n", + " name=scoring_job.name,\n", + " download_path=os.path.join(dataset_parent_dir, \"image-folder-output\"),\n", + " output_name=\"score\",\n", + ")\n", + "\n", + "predictions_file = os.path.join(\n", + " dataset_parent_dir,\n", + " \"image-folder-output\",\n", + " \"named-outputs\",\n", + " \"score\",\n", + " \"predictions.csv\",\n", + ")\n", + "\n", + "# Load the batch predictions file with no headers into a dataframe and set your column names\n", + "score_df = pd.read_csv(\n", + " predictions_file,\n", + " header=None,\n", + " names=[\"row_number_per_file\", \"preds\", \"file_name\"],\n", + ")\n", + "score_df.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Test the endpoint - Using CSV input with base64 images from 3.2\n", + "\n", + "Invoke the batch endpoint with the input parameter pointing to the csv file containing the batch inference input. This creates a pipeline job using the default deployment in the endpoint. Wait for the job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "job = None\n", + "input = Input(path=csv_file_path, type=AssetTypes.URI_FILE)\n", + "num_retries = 3\n", + "for i in range(num_retries):\n", + " try:\n", + " job = workspace_ml_client.batch_endpoints.invoke(\n", + " endpoint_name=endpoint.name, input=input\n", + " )\n", + " break\n", + " except Exception as e:\n", + " if i == num_retries - 1:\n", + " raise e\n", + " else:\n", + " print(\"Endpoint invocation failed. Retrying after 5 seconds...\")\n", + " time.sleep(5)\n", + "if job is not None:\n", + " workspace_ml_client.jobs.stream(job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scoring_job = list(workspace_ml_client.jobs.list(parent_job_name=job.name))[0]\n", + "\n", + "workspace_ml_client.jobs.download(\n", + " name=scoring_job.name,\n", + " download_path=os.path.join(dataset_parent_dir, \"csv-output\"),\n", + " output_name=\"score\",\n", + ")\n", + "\n", + "predictions_file = os.path.join(\n", + " dataset_parent_dir, \"csv-output\", \"named-outputs\", \"score\", \"predictions.csv\"\n", + ")\n", + "\n", + "# Load the batch predictions file with no headers into a dataframe and set your column names\n", + "score_df = pd.read_csv(\n", + " predictions_file,\n", + " header=None,\n", + " names=[\"row_number_per_file\", \"preds\", \"file_name\"],\n", + ")\n", + "score_df.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Clean up resources - delete the endpoint\n", + "Batch endpoints use compute resources only when jobs are submitted. You can keep the batch endpoint for your reference without worrying about compute bills, or choose to delete the endpoint. If you created your compute cluster to have zero minimum instances and scale down soon after being idle, you won't be charged for an unused compute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.batch_endpoints.begin_delete(name=endpoint_name).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.ipynb b/sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.ipynb new file mode 100644 index 0000000000..9dc9a671b5 --- /dev/null +++ b/sdk/python/foundation-models/system/inference/image-instance-segmentation/image-instance-segmentation-online-endpoint.ipynb @@ -0,0 +1,363 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Instance Segmentation Inference using Online Endpoints\n", + "\n", + "This sample shows how deploy `image-instance-segmentation` type models to an online endpoint for inference.\n", + "\n", + "### Task\n", + "`image-instance-segmentation` tasks assign box(es), polygon(s) with their scaled top-left and bottom-right coordinates along with box label and confidence score to an image.\n", + " \n", + "### Model\n", + "Models that can perform the `image-instance-segmentation` task are tagged with `image-instance-segmentation`. We will use the `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` model in this notebook. If you opened this notebook from a specific model card, remember to replace the specific model name.\n", + "\n", + "### Inference data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip) dataset for instance segemntation.\n", + "\n", + "\n", + "### Outline\n", + "1. Setup pre-requisites\n", + "2. Pick a model to deploy\n", + "3. Prepare data for inference\n", + "4. Deploy the model to an online endpoint for real time inference\n", + "5. Test the endpoint\n", + "6. Clean up resources - delete the online endpoint" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup pre-requisites\n", + "* Install dependencies\n", + "* Connect to AzureML Workspace. Learn more at [set up SDK authentication](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk). Replace ``, `` and `` below.\n", + "* Connect to `azureml` system registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import (\n", + " DefaultAzureCredential,\n", + " InteractiveBrowserCredential,\n", + " ClientSecretCredential,\n", + ")\n", + "from azure.ai.ml.entities import AmlCompute\n", + "import time\n", + "\n", + "try:\n", + " credential = DefaultAzureCredential()\n", + " credential.get_token(\"https://management.azure.com/.default\")\n", + "except Exception as ex:\n", + " credential = InteractiveBrowserCredential()\n", + "\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "# The models, fine tuning pipelines and environments are available in the AzureML system registry, \"azureml\"\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Pick a model to deploy\n", + "\n", + "Browse models in the Model Catalog in the AzureML Studio, filtering by the `image-instance-segmentation` task. In this example, we use the `mask_rcnn_swin-t-p4-w7_fpn_1x_coco` model. If you have opened this notebook for a different model, replace the model name accordingly. This is a pre-trained model and may not give correct prediction for your dataset. We strongly recommend to finetune this model on a down-stream task to be able to use it for predictions and inference. Please refer to the [image instance segmentation finetuning notebook](../../finetune/image-instance-segmentation/mmdetection-fridgeobjects-instance-segmentation.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"mask_rcnn_swin-t-p4-w7_fpn_1x_coco\"\n", + "foundation_models = registry_ml_client.models.list(name=model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Prepare data for inference\n", + "\n", + "We will use the [odFridgeObjectsMask](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip) dataset for instance segmentation task." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjectsMask.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Deploy the model to an online endpoint for real time inference\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "timestamp = int(time.time())\n", + "online_endpoint_name = \"mmd-image-is-\" + str(timestamp)\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=\"Online endpoint for \"\n", + " + foundation_model.name\n", + " + \", for image-instance-segmentation task\",\n", + " auth_mode=\"key\",\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"mmd-image-is-mlflow-deploy\"\n", + "\n", + "print(foundation_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=foundation_model.id,\n", + " instance_type=\"Standard_DS3_v2\", # Use GPU instance type like Standard_NC6s_v3 for faster inference\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=10,\n", + " ),\n", + ")\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Test the endpoint\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# Existing traffic details\n", + "print(endpoint.traffic)\n", + "\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"99.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"index\": [0],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "# Create request json\n", + "request_file_name = \"sample_request_data.json\"\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Score the sample_score.json file using the online endpoint with the azureml endpoint invoke method\n", + "response = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")\n", + "print(f\"raw response: {response}\\n\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.ipynb b/sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.ipynb new file mode 100644 index 0000000000..42b28805ff --- /dev/null +++ b/sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-batch-endpoint.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Object Detection Inference using Batch Endpoints\n", + "\n", + "This sample shows how deploy `image-object-detection` type models to an batch endpoint for inference.\n", + "\n", + "### Task\n", + "`image-object-detection` tasks assign box(es) with their scaled top-left and bottom-right coordinates along with box label and confidence score to an image.\n", + " \n", + "### Model\n", + "Models that can perform the `image-object-detection` task are tagged with `image-object-detection`. We will use the `yolof_r50_c5_8x8_1x_coco` model in this notebook. If you opened this notebook from a specific model card, remember to replace the specific model name.\n", + "\n", + "### Inference data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip) dataset for image object detection.\n", + "\n", + "\n", + "### Outline\n", + "1. Setup pre-requisites\n", + "2. Pick a model to deploy\n", + "3. Prepare data for inference - Using a folder of images; Using a csv file with base64 images\n", + "4. Deploy the model to a batch endpoint\n", + "5. Test the endpoint - Using a folder of images; Using a csv file with base64 images\n", + "6. Clean up resources - delete the endpoint" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup pre-requisites\n", + "* Install dependencies\n", + "* Connect to AzureML Workspace. Learn more at [set up SDK authentication](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk). Replace ``, `` and `` below.\n", + "* Connect to `azureml` system registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient, Input\n", + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.ai.ml.constants import AssetTypes\n", + "from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential\n", + "import time\n", + "\n", + "try:\n", + " credential = DefaultAzureCredential()\n", + " credential.get_token(\"https://management.azure.com/.default\")\n", + "except Exception as ex:\n", + " credential = InteractiveBrowserCredential()\n", + "\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "# The models, fine tuning pipelines and environments are available in the AzureML system registry, \"azureml\"\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a compute cluster\n", + "Use the model card from the AzureML system registry to check the minimum required inferencing SKU, referenced as size below. If you already have a sufficient compute cluster, you can simply define the name in compute_name in the following code block." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import AmlCompute\n", + "from azure.core.exceptions import ResourceNotFoundError\n", + "\n", + "compute_name = \"cpu-cluster\"\n", + "\n", + "try:\n", + " _ = workspace_ml_client.compute.get(compute_name)\n", + " print(\"Found existing compute target.\")\n", + "except ResourceNotFoundError:\n", + " print(\"Creating a new compute target...\")\n", + " compute_config = AmlCompute(\n", + " name=compute_name,\n", + " description=\"An AML compute cluster\",\n", + " size=\"Standard_DS3_V2\",\n", + " min_instances=0,\n", + " max_instances=3,\n", + " idle_time_before_scale_down=120,\n", + " )\n", + " workspace_ml_client.begin_create_or_update(compute_config).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Pick a model to deploy\n", + "\n", + "Browse models in the Model Catalog in the AzureML Studio, filtering by the `image-object-detection` task. In this example, we use the `yolof_r50_c5_8x8_1x_coco ` model. If you have opened this notebook for a different model, replace the model name accordingly. This is a pre-trained model and may not give correct prediction for your dataset. We strongly recommend to finetune this model on a down-stream task to be able to use it for predictions and inference. Please refer to the [image object detection finetuning notebook](../../finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"yolof_r50_c5_8x8_1x_coco\"\n", + "foundation_models = registry_ml_client.models.list(name=model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Prepare data for inference - Using a folder of images; Using a csv file with base64 images\n", + "\n", + "We will use the [odFridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip) dataset for image object detection.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "import shutil\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "if os.path.exists(dataset_dir):\n", + " shutil.rmtree(dataset_dir)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.1 Arrange images in common folder for batch inference input" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "image_directory = os.path.join(dataset_dir, \"images\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.2 Prepare CSV file with base64 images for batch inference input\n", + "\n", + "We can provide input images to batch inference either in a folder containing images or in a csv file containing \"image\" named column having images in base64 format.\n", + "\n", + "Note: If job failed with error Assertion Error (`The actual length exceeded max length 100 MB`) then please try with less number of input images or use ImageFolder Input mode." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import base64\n", + "import pandas as pd\n", + "\n", + "image_list = []\n", + "csv_file_path = os.path.join(dataset_parent_dir, \"image_list.csv\")\n", + "\n", + "for image in os.listdir(image_directory):\n", + " with open(os.path.join(image_directory, image), \"rb\") as f:\n", + " data = f.read()\n", + " data = base64.encodebytes(data).decode(\"utf-8\")\n", + " image_list.append(data)\n", + "\n", + "df = pd.DataFrame(image_list, columns=[\"image\"]).sample(10)\n", + "df.to_csv(csv_file_path, index=False, header=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(image_directory, \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Deploy the model to an batch endpoint\n", + "Batch endpoints are endpoints that are used to do batch inferencing on large volumes of data over a period of time. The endpoints receive pointers to data and run jobs asynchronously to process the data in parallel on compute clusters. Batch endpoints store outputs to a data store for further analysis. For more information on batch endpoints and deployments see [What are batch endpoints?](https://learn.microsoft.com/en-us/azure/machine-learning/concept-endpoints?view=azureml-api-2#what-are-batch-endpoints).\n", + "\n", + "* Create a batch endpoint.\n", + "* Create a batch deployment.\n", + "* Set the deployment as default; doing so allows invoking the endpoint without specifying the deployment's name." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Create a batch endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time, sys\n", + "from azure.ai.ml.entities import (\n", + " BatchEndpoint,\n", + " BatchDeployment,\n", + " BatchRetrySettings,\n", + " AmlCompute,\n", + ")\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "endpoint_name = \"mmd-image-od-\" + str(timestamp)\n", + "# Create a batch endpoint\n", + "endpoint = BatchEndpoint(\n", + " name=endpoint_name,\n", + " description=\"Batch endpoint for \"\n", + " + foundation_model.name\n", + " + \", for image-object-detection task\",\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Create a batch deployment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "deployment_name = \"demo\"\n", + "\n", + "deployment = BatchDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=endpoint_name,\n", + " model=foundation_model.id,\n", + " compute=compute_name,\n", + " error_threshold=0,\n", + " instance_count=1,\n", + " logging_level=\"info\",\n", + " max_concurrency_per_instance=1,\n", + " mini_batch_size=2,\n", + " output_file_name=\"predictions.csv\",\n", + " retry_settings=BatchRetrySettings(max_retries=3, timeout=600),\n", + ")\n", + "workspace_ml_client.begin_create_or_update(deployment).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Set the deployment as default" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "endpoint = workspace_ml_client.batch_endpoints.get(endpoint_name)\n", + "endpoint.defaults.deployment_name = deployment_name\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()\n", + "\n", + "endpoint = workspace_ml_client.batch_endpoints.get(endpoint_name)\n", + "print(f\"The default deployment is {endpoint.defaults.deployment_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Test the endpoint - Using a folder of images; Using a csv file with base64 images\n", + "\n", + "We will fetch some sample data from the test dataset and invoke batch endpoint for inference." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.1 Test the endpoint - Using folder of images from 3.1\n", + "\n", + "Invoke the batch endpoint with the input parameter pointing to the folder containing the batch inference input. This creates a pipeline job using the default deployment in the endpoint. Wait for the job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "input = Input(path=image_directory, type=AssetTypes.URI_FOLDER)\n", + "\n", + "job = workspace_ml_client.batch_endpoints.invoke(\n", + " endpoint_name=endpoint.name, input=input\n", + ")\n", + "\n", + "workspace_ml_client.jobs.stream(job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scoring_job = list(workspace_ml_client.jobs.list(parent_job_name=job.name))[0]\n", + "\n", + "workspace_ml_client.jobs.download(\n", + " name=scoring_job.name,\n", + " download_path=os.path.join(dataset_parent_dir, \"image-folder-output\"),\n", + " output_name=\"score\",\n", + ")\n", + "\n", + "predictions_file = os.path.join(\n", + " dataset_parent_dir,\n", + " \"image-folder-output\",\n", + " \"named-outputs\",\n", + " \"score\",\n", + " \"predictions.csv\",\n", + ")\n", + "\n", + "# Load the batch predictions file with no headers into a dataframe and set your column names\n", + "score_df = pd.read_csv(\n", + " predictions_file,\n", + " header=None,\n", + " names=[\"row_number_per_file\", \"preds\", \"file_name\"],\n", + ")\n", + "score_df.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 5.2 Test the endpoint - Using CSV input with base64 images from 3.2\n", + "\n", + "Invoke the batch endpoint with the input parameter pointing to the csv file containing the batch inference input. This creates a pipeline job using the default deployment in the endpoint. Wait for the job to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "job = None\n", + "input = Input(path=csv_file_path, type=AssetTypes.URI_FILE)\n", + "num_retries = 3\n", + "for i in range(num_retries):\n", + " try:\n", + " job = workspace_ml_client.batch_endpoints.invoke(\n", + " endpoint_name=endpoint.name, input=input\n", + " )\n", + " break\n", + " except Exception as e:\n", + " if i == num_retries - 1:\n", + " raise e\n", + " else:\n", + " print(\"Endpoint invocation failed. Retrying after 5 seconds...\")\n", + " time.sleep(5)\n", + "if job is not None:\n", + " workspace_ml_client.jobs.stream(job.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scoring_job = list(workspace_ml_client.jobs.list(parent_job_name=job.name))[0]\n", + "\n", + "workspace_ml_client.jobs.download(\n", + " name=scoring_job.name,\n", + " download_path=os.path.join(dataset_parent_dir, \"csv-output\"),\n", + " output_name=\"score\",\n", + ")\n", + "\n", + "predictions_file = os.path.join(\n", + " dataset_parent_dir, \"csv-output\", \"named-outputs\", \"score\", \"predictions.csv\"\n", + ")\n", + "\n", + "# Load the batch predictions file with no headers into a dataframe and set your column names\n", + "score_df = pd.read_csv(\n", + " predictions_file,\n", + " header=None,\n", + " names=[\"row_number_per_file\", \"preds\", \"file_name\"],\n", + ")\n", + "score_df.head()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Clean up resources - delete the endpoint\n", + "Batch endpoints use compute resources only when jobs are submitted. You can keep the batch endpoint for your reference without worrying about compute bills, or choose to delete the endpoint. If you created your compute cluster to have zero minimum instances and scale down soon after being idle, you won't be charged for an unused compute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.batch_endpoints.begin_delete(name=endpoint_name).result()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.ipynb b/sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.ipynb new file mode 100644 index 0000000000..418a9e250e --- /dev/null +++ b/sdk/python/foundation-models/system/inference/image-object-detection/image-object-detection-online-endpoint.ipynb @@ -0,0 +1,364 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Image Object Detection Inference using Online Endpoints\n", + "\n", + "This sample shows how deploy `image-object-detection` type models to an online endpoint for inference.\n", + "\n", + "### Task\n", + "`image-object-detection` tasks assign box(es) with their scaled top-left and bottom-right coordinates along with box label and confidence score to an image.\n", + " \n", + "### Model\n", + "Models that can perform the `image-object-detection` task are tagged with `image-object-detection`. We will use the `yolof_r50_c5_8x8_1x_coco` model in this notebook. If you opened this notebook from a specific model card, remember to replace the specific model name.\n", + "\n", + "### Inference data\n", + "We will use the [fridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip) dataset for object detection.\n", + "\n", + "\n", + "### Outline\n", + "1. Setup pre-requisites\n", + "2. Pick a model to deploy\n", + "3. Prepare data for inference\n", + "4. Deploy the model to an online endpoint for real time inference\n", + "5. Test the endpoint\n", + "6. Clean up resources - delete the online endpoint" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Setup pre-requisites\n", + "* Install dependencies\n", + "* Connect to AzureML Workspace. Learn more at [set up SDK authentication](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-authentication?tabs=sdk). Replace ``, `` and `` below.\n", + "* Connect to `azureml` system registry" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml import MLClient\n", + "from azure.identity import (\n", + " DefaultAzureCredential,\n", + " InteractiveBrowserCredential,\n", + " ClientSecretCredential,\n", + ")\n", + "from azure.ai.ml.entities import AmlCompute\n", + "import time\n", + "\n", + "try:\n", + " credential = DefaultAzureCredential()\n", + " credential.get_token(\"https://management.azure.com/.default\")\n", + "except Exception as ex:\n", + " credential = InteractiveBrowserCredential()\n", + "\n", + "try:\n", + " workspace_ml_client = MLClient.from_config(credential)\n", + " subscription_id = workspace_ml_client.subscription_id\n", + " resource_group = workspace_ml_client.resource_group_name\n", + " workspace_name = workspace_ml_client.workspace_name\n", + "except Exception as ex:\n", + " print(ex)\n", + " # Enter details of your AML workspace\n", + " subscription_id = \"\"\n", + " resource_group = \"\"\n", + " workspace_name = \"\"\n", + "workspace_ml_client = MLClient(\n", + " credential, subscription_id, resource_group, workspace_name\n", + ")\n", + "\n", + "# The models, fine tuning pipelines and environments are available in the AzureML system registry, \"azureml\"\n", + "registry_ml_client = MLClient(\n", + " credential,\n", + " subscription_id,\n", + " resource_group,\n", + " registry_name=\"azureml\",\n", + ")\n", + "# Generating a unique timestamp that can be used for names and versions that need to be unique\n", + "timestamp = str(int(time.time()))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. Pick a model to deploy\n", + "\n", + "Browse models in the Model Catalog in the AzureML Studio, filtering by the `image-object-detection` task. In this example, we use the `yolof_r50_c5_8x8_1x_coco ` model. If you have opened this notebook for a different model, replace the model name accordingly. This is a pre-trained model and may not give correct prediction for your dataset. We strongly recommend to finetune this model on a down-stream task to be able to use it for predictions and inference. Please refer to the [image object detection finetuning notebook](../../finetune/image-object-detection/mmdetection-fridgeobjects-object-detection.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model_name = \"yolof_r50_c5_8x8_1x_coco\"\n", + "foundation_models = registry_ml_client.models.list(name=model_name)\n", + "foundation_model = max(foundation_models, key=lambda x: x.version)\n", + "print(\n", + " f\"\\n\\nUsing model name: {foundation_model.name}, version: {foundation_model.version}, id: {foundation_model.id} for inferencing\"\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Prepare data for inference\n", + "\n", + "We will use the [odFridgeObjects](https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip) dataset for object detection." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib\n", + "from zipfile import ZipFile\n", + "\n", + "# Change to a different location if you prefer\n", + "dataset_parent_dir = \"./data\"\n", + "\n", + "# Create data folder if it doesnt exist.\n", + "os.makedirs(dataset_parent_dir, exist_ok=True)\n", + "\n", + "# Download data\n", + "download_url = \"https://cvbp-secondary.z19.web.core.windows.net/datasets/object_detection/odFridgeObjects.zip\"\n", + "\n", + "# Extract current dataset name from dataset url\n", + "dataset_name = os.path.split(download_url)[-1].split(\".\")[0]\n", + "# Get dataset path for later use\n", + "dataset_dir = os.path.join(dataset_parent_dir, dataset_name)\n", + "\n", + "# Get the data zip file path\n", + "data_file = os.path.join(dataset_parent_dir, f\"{dataset_name}.zip\")\n", + "\n", + "# Download the dataset\n", + "urllib.request.urlretrieve(download_url, filename=data_file)\n", + "\n", + "# Extract files\n", + "with ZipFile(data_file, \"r\") as zip:\n", + " print(\"extracting files...\")\n", + " zip.extractall(path=dataset_parent_dir)\n", + " print(\"done\")\n", + "# Delete zip file\n", + "os.remove(data_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import Image\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"99.jpg\")\n", + "Image(filename=sample_image)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Deploy the model to an online endpoint for real time inference\n", + "Online endpoints give a durable REST API that can be used to integrate with applications that need to use the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment\n", + "\n", + "# Endpoint names need to be unique in a region, hence using timestamp to create unique endpoint name\n", + "timestamp = int(time.time())\n", + "online_endpoint_name = \"mmd-image-od-\" + str(timestamp)\n", + "# Create an online endpoint\n", + "endpoint = ManagedOnlineEndpoint(\n", + " name=online_endpoint_name,\n", + " description=\"Online endpoint for \"\n", + " + foundation_model.name\n", + " + \", for image-object-detection task\",\n", + " auth_mode=\"key\",\n", + ")\n", + "workspace_ml_client.begin_create_or_update(endpoint).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from azure.ai.ml.entities import OnlineRequestSettings, ProbeSettings\n", + "\n", + "deployment_name = \"mmd-image-od-mlflow-deploy\"\n", + "\n", + "print(foundation_model.id)\n", + "print(online_endpoint_name)\n", + "print(deployment_name)\n", + "\n", + "# Create a deployment\n", + "demo_deployment = ManagedOnlineDeployment(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + " model=foundation_model.id,\n", + " instance_type=\"Standard_DS3_v2\", # Use GPU instance type like Standard_NC6s_v3 for faster inference\n", + " instance_count=1,\n", + " request_settings=OnlineRequestSettings(\n", + " max_concurrent_requests_per_instance=1,\n", + " request_timeout_ms=90000,\n", + " max_queue_wait_ms=500,\n", + " ),\n", + " liveness_probe=ProbeSettings(\n", + " failure_threshold=49,\n", + " success_threshold=1,\n", + " timeout=299,\n", + " period=180,\n", + " initial_delay=180,\n", + " ),\n", + " readiness_probe=ProbeSettings(\n", + " failure_threshold=10,\n", + " success_threshold=1,\n", + " timeout=10,\n", + " period=10,\n", + " initial_delay=10,\n", + " ),\n", + ")\n", + "workspace_ml_client.online_deployments.begin_create_or_update(demo_deployment).wait()\n", + "endpoint.traffic = {deployment_name: 100}\n", + "workspace_ml_client.begin_create_or_update(endpoint).result()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Test the endpoint\n", + "\n", + "We will fetch some sample data from the test dataset and submit to online endpoint for inference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "demo_deployment = workspace_ml_client.online_deployments.get(\n", + " name=deployment_name,\n", + " endpoint_name=online_endpoint_name,\n", + ")\n", + "\n", + "# Get the details for online endpoint\n", + "endpoint = workspace_ml_client.online_endpoints.get(name=online_endpoint_name)\n", + "\n", + "# Existing traffic details\n", + "print(endpoint.traffic)\n", + "\n", + "# Get the scoring URI\n", + "print(endpoint.scoring_uri)\n", + "print(demo_deployment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create request json\n", + "import base64\n", + "import json\n", + "\n", + "sample_image = os.path.join(dataset_dir, \"images\", \"99.jpg\")\n", + "\n", + "\n", + "def read_image(image_path):\n", + " with open(image_path, \"rb\") as f:\n", + " return f.read()\n", + "\n", + "\n", + "request_json = {\n", + " \"input_data\": {\n", + " \"columns\": [\"image\"],\n", + " \"index\": [0],\n", + " \"data\": [base64.encodebytes(read_image(sample_image)).decode(\"utf-8\")],\n", + " }\n", + "}\n", + "\n", + "request_file_name = \"sample_request_data.json\"\n", + "\n", + "with open(request_file_name, \"w\") as request_file:\n", + " json.dump(request_json, request_file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Score the sample_score.json file using the online endpoint with the azureml endpoint invoke method\n", + "response = workspace_ml_client.online_endpoints.invoke(\n", + " endpoint_name=online_endpoint_name,\n", + " deployment_name=demo_deployment.name,\n", + " request_file=request_file_name,\n", + ")\n", + "print(f\"raw response: {response}\\n\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6. Clean up resources - delete the online endpoint\n", + "Don't forget to delete the online endpoint, else you will leave the billing meter running for the compute used by the endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "workspace_ml_client.online_endpoints.begin_delete(name=online_endpoint_name).wait()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}