From b2724da80bf2dc203b3db69497541ad52ce74ba0 Mon Sep 17 00:00:00 2001 From: Jiarui XU Date: Tue, 7 Jul 2020 20:52:19 +0800 Subject: [PATCH] init commit --- .dev/clean_models.py | 125 + .dev/gather_models.py | 197 ++ .dev/generate_table.py | 152 + .dev/modelzoo_json2md.py | 58 + .github/CODE_OF_CONDUCT.md | 76 + .github/CONTRIBUTING.md | 53 + .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/error-report.md | 41 + .github/ISSUE_TEMPLATE/feature_request.md | 22 + .github/ISSUE_TEMPLATE/general_questions.md | 8 + .github/workflows/build.yml | 101 + .gitignore | 118 + .pre-commit-config.yaml | 35 + .style.yapf | 4 + LICENSE | 2 +- README.md | 96 + configs/_base_/datasets/ade20k.py | 54 + configs/_base_/datasets/cityscapes.py | 54 + configs/_base_/datasets/cityscapes_769x769.py | 35 + configs/_base_/datasets/pascal_voc12.py | 57 + configs/_base_/datasets/pascal_voc12_aug.py | 9 + configs/_base_/default_runtime.py | 14 + configs/_base_/models/ann_r50-d8.py | 46 + configs/_base_/models/ccnet_r50-d8.py | 44 + configs/_base_/models/danet_r50-d8.py | 44 + configs/_base_/models/deeplabv3_r50-d8.py | 44 + configs/_base_/models/deeplabv3plus_r50-d8.py | 46 + configs/_base_/models/encnet_r50-d8.py | 48 + configs/_base_/models/fcn_hr18.py | 52 + configs/_base_/models/fcn_r50-d8.py | 45 + configs/_base_/models/gcnet_r50-d8.py | 46 + configs/_base_/models/nonlocal_r50-d8.py | 46 + configs/_base_/models/ocrnet_hr18.py | 68 + configs/_base_/models/psanet_r50-d8.py | 49 + configs/_base_/models/pspnet_r50-d8.py | 44 + configs/_base_/models/upernet_r50.py | 44 + configs/_base_/schedules/schedule_160k.py | 9 + configs/_base_/schedules/schedule_20k.py | 9 + configs/_base_/schedules/schedule_40k.py | 9 + configs/_base_/schedules/schedule_80k.py | 9 + configs/ann/README.md | 46 + .../ann_r101-d8_512x1024_40k_cityscapes.py | 2 + .../ann_r101-d8_512x1024_80k_cityscapes.py | 2 + .../ann/ann_r101-d8_512x512_160k_ade20k.py | 2 + .../ann/ann_r101-d8_512x512_20k_voc12aug.py | 2 + .../ann/ann_r101-d8_512x512_40k_voc12aug.py | 2 + configs/ann/ann_r101-d8_512x512_80k_ade20k.py | 2 + .../ann/ann_r101-d8_769x769_40k_cityscapes.py | 2 + .../ann/ann_r101-d8_769x769_80k_cityscapes.py | 2 + .../ann/ann_r50-d8_512x1024_40k_cityscapes.py | 4 + .../ann/ann_r50-d8_512x1024_80k_cityscapes.py | 4 + configs/ann/ann_r50-d8_512x512_160k_ade20k.py | 6 + .../ann/ann_r50-d8_512x512_20k_voc12aug.py | 6 + .../ann/ann_r50-d8_512x512_40k_voc12aug.py | 6 + configs/ann/ann_r50-d8_512x512_80k_ade20k.py | 6 + .../ann/ann_r50-d8_769x769_40k_cityscapes.py | 9 + .../ann/ann_r50-d8_769x769_80k_cityscapes.py | 9 + configs/ccnet/README.md | 41 + .../ccnet_r101-d8_512x1024_40k_cityscapes.py | 2 + .../ccnet_r101-d8_512x1024_80k_cityscapes.py | 2 + .../ccnet_r101-d8_512x512_160k_ade20k.py | 2 + .../ccnet_r101-d8_512x512_20k_voc12aug.py | 2 + .../ccnet_r101-d8_512x512_40k_voc12aug.py | 2 + .../ccnet/ccnet_r101-d8_512x512_80k_ade20k.py | 2 + .../ccnet_r101-d8_769x769_40k_cityscapes.py | 2 + .../ccnet_r101-d8_769x769_80k_cityscapes.py | 2 + .../ccnet_r50-d8_512x1024_40k_cityscapes.py | 4 + .../ccnet_r50-d8_512x1024_80k_cityscapes.py | 4 + .../ccnet/ccnet_r50-d8_512x512_160k_ade20k.py | 6 + .../ccnet_r50-d8_512x512_20k_voc12aug.py | 7 + .../ccnet_r50-d8_512x512_40k_voc12aug.py | 7 + .../ccnet/ccnet_r50-d8_512x512_80k_ade20k.py | 6 + .../ccnet_r50-d8_769x769_40k_cityscapes.py | 9 + .../ccnet_r50-d8_769x769_80k_cityscapes.py | 9 + configs/danet/README.md | 41 + .../danet_r101-d8_512x1024_40k_cityscapes.py | 2 + .../danet_r101-d8_512x1024_80k_cityscapes.py | 2 + .../danet_r101-d8_512x512_160k_ade20k.py | 2 + .../danet_r101-d8_512x512_20k_voc12aug.py | 2 + .../danet_r101-d8_512x512_40k_voc12aug.py | 2 + .../danet/danet_r101-d8_512x512_80k_ade20k.py | 2 + .../danet_r101-d8_769x769_40k_cityscapes.py | 2 + .../danet_r101-d8_769x769_80k_cityscapes.py | 2 + .../danet_r50-d8_512x1024_40k_cityscapes.py | 4 + .../danet_r50-d8_512x1024_80k_cityscapes.py | 4 + .../danet/danet_r50-d8_512x512_160k_ade20k.py | 6 + .../danet_r50-d8_512x512_20k_voc12aug.py | 7 + .../danet_r50-d8_512x512_40k_voc12aug.py | 7 + .../danet/danet_r50-d8_512x512_80k_ade20k.py | 6 + .../danet_r50-d8_769x769_40k_cityscapes.py | 9 + .../danet_r50-d8_769x769_80k_cityscapes.py | 9 + configs/deeplabv3/README.md | 43 + ...eplabv3_r101-d8_512x1024_40k_cityscapes.py | 2 + ...eplabv3_r101-d8_512x1024_80k_cityscapes.py | 2 + .../deeplabv3_r101-d8_512x512_160k_ade20k.py | 2 + .../deeplabv3_r101-d8_512x512_20k_voc12aug.py | 2 + .../deeplabv3_r101-d8_512x512_40k_voc12aug.py | 2 + .../deeplabv3_r101-d8_512x512_80k_ade20k.py | 2 + ...eeplabv3_r101-d8_769x769_40k_cityscapes.py | 2 + ...eeplabv3_r101-d8_769x769_80k_cityscapes.py | 2 + ...eeplabv3_r50-d8_512x1024_40k_cityscapes.py | 4 + ...eeplabv3_r50-d8_512x1024_80k_cityscapes.py | 4 + .../deeplabv3_r50-d8_512x512_160k_ade20k.py | 7 + .../deeplabv3_r50-d8_512x512_20k_voc12aug.py | 7 + .../deeplabv3_r50-d8_512x512_40k_voc12aug.py | 7 + .../deeplabv3_r50-d8_512x512_80k_ade20k.py | 7 + ...deeplabv3_r50-d8_769x769_40k_cityscapes.py | 9 + ...deeplabv3_r50-d8_769x769_80k_cityscapes.py | 9 + configs/deeplabv3plus/README.md | 43 + ...bv3plus_r101-d8_512x1024_40k_cityscapes.py | 2 + ...bv3plus_r101-d8_512x1024_80k_cityscapes.py | 2 + ...eplabv3plus_r101-d8_512x512_160k_ade20k.py | 2 + ...plabv3plus_r101-d8_512x512_20k_voc12aug.py | 2 + ...plabv3plus_r101-d8_512x512_40k_voc12aug.py | 2 + ...eeplabv3plus_r101-d8_512x512_80k_ade20k.py | 2 + ...abv3plus_r101-d8_769x769_40k_cityscapes.py | 2 + ...abv3plus_r101-d8_769x769_80k_cityscapes.py | 2 + ...abv3plus_r50-d8_512x1024_40k_cityscapes.py | 5 + ...abv3plus_r50-d8_512x1024_80k_cityscapes.py | 5 + ...eeplabv3plus_r50-d8_512x512_160k_ade20k.py | 7 + ...eplabv3plus_r50-d8_512x512_20k_voc12aug.py | 7 + ...eplabv3plus_r50-d8_512x512_40k_voc12aug.py | 7 + ...deeplabv3plus_r50-d8_512x512_80k_ade20k.py | 7 + ...labv3plus_r50-d8_769x769_40k_cityscapes.py | 9 + ...labv3plus_r50-d8_769x769_80k_cityscapes.py | 9 + configs/encnet/README.md | 34 + .../encnet_r101-d8_512x1024_40k_cityscapes.py | 2 + .../encnet_r101-d8_512x1024_80k_cityscapes.py | 2 + .../encnet_r101-d8_512x512_160k_ade20k.py | 2 + .../encnet_r101-d8_512x512_20k_voc12aug.py | 2 + .../encnet_r101-d8_512x512_40k_voc12aug.py | 2 + .../encnet_r101-d8_512x512_80k_ade20k.py | 2 + .../encnet_r101-d8_769x769_40k_cityscapes.py | 2 + .../encnet_r101-d8_769x769_80k_cityscapes.py | 2 + .../encnet_r50-d8_512x1024_40k_cityscapes.py | 4 + .../encnet_r50-d8_512x1024_80k_cityscapes.py | 4 + .../encnet_r50-d8_512x512_160k_ade20k.py | 6 + .../encnet_r50-d8_512x512_20k_voc12aug.py | 7 + .../encnet_r50-d8_512x512_40k_voc12aug.py | 7 + .../encnet_r50-d8_512x512_80k_ade20k.py | 6 + .../encnet_r50-d8_769x769_40k_cityscapes.py | 9 + .../encnet_r50-d8_769x769_80k_cityscapes.py | 9 + .../encnet_r50s-d8_512x512_80k_ade20k.py | 8 + configs/fcn/README.md | 45 + .../fcn_r101-d8_512x1024_40k_cityscapes.py | 2 + .../fcn_r101-d8_512x1024_80k_cityscapes.py | 2 + .../fcn/fcn_r101-d8_512x512_160k_ade20k.py | 2 + .../fcn/fcn_r101-d8_512x512_20k_voc12aug.py | 2 + .../fcn/fcn_r101-d8_512x512_40k_voc12aug.py | 2 + configs/fcn/fcn_r101-d8_512x512_80k_ade20k.py | 2 + .../fcn/fcn_r101-d8_769x769_40k_cityscapes.py | 2 + .../fcn/fcn_r101-d8_769x769_80k_cityscapes.py | 2 + .../fcn/fcn_r50-d8_512x1024_40k_cityscapes.py | 4 + .../fcn/fcn_r50-d8_512x1024_80k_cityscapes.py | 4 + configs/fcn/fcn_r50-d8_512x512_160k_ade20k.py | 7 + .../fcn/fcn_r50-d8_512x512_20k_voc12aug.py | 6 + .../fcn/fcn_r50-d8_512x512_40k_voc12aug.py | 6 + configs/fcn/fcn_r50-d8_512x512_80k_ade20k.py | 7 + .../fcn/fcn_r50-d8_769x769_40k_cityscapes.py | 9 + .../fcn/fcn_r50-d8_769x769_80k_cityscapes.py | 9 + configs/gcnet/README.md | 42 + .../gcnet_r101-d8_512x1024_40k_cityscapes.py | 2 + .../gcnet_r101-d8_512x1024_80k_cityscapes.py | 2 + .../gcnet_r101-d8_512x512_160k_ade20k.py | 2 + .../gcnet_r101-d8_512x512_20k_voc12aug.py | 2 + .../gcnet_r101-d8_512x512_40k_voc12aug.py | 2 + .../gcnet/gcnet_r101-d8_512x512_80k_ade20k.py | 2 + .../gcnet_r101-d8_769x769_40k_cityscapes.py | 2 + .../gcnet_r101-d8_769x769_80k_cityscapes.py | 2 + .../gcnet_r50-d8_512x1024_40k_cityscapes.py | 4 + .../gcnet_r50-d8_512x1024_80k_cityscapes.py | 4 + .../gcnet/gcnet_r50-d8_512x512_160k_ade20k.py | 6 + .../gcnet_r50-d8_512x512_20k_voc12aug.py | 7 + .../gcnet_r50-d8_512x512_40k_voc12aug.py | 7 + .../gcnet/gcnet_r50-d8_512x512_80k_ade20k.py | 6 + .../gcnet_r50-d8_769x769_40k_cityscapes.py | 9 + .../gcnet_r50-d8_769x769_80k_cityscapes.py | 9 + configs/hrnet/README.md | 46 + .../fcn_hr18_512x1024_160k_cityscapes.py | 4 + .../hrnet/fcn_hr18_512x1024_40k_cityscapes.py | 4 + .../hrnet/fcn_hr18_512x1024_80k_cityscapes.py | 4 + configs/hrnet/fcn_hr18_512x512_160k_ade20k.py | 5 + .../hrnet/fcn_hr18_512x512_20k_voc12aug.py | 5 + .../hrnet/fcn_hr18_512x512_40k_voc12aug.py | 5 + configs/hrnet/fcn_hr18_512x512_80k_ade20k.py | 5 + .../fcn_hr18s_512x1024_160k_cityscapes.py | 9 + .../fcn_hr18s_512x1024_40k_cityscapes.py | 9 + .../fcn_hr18s_512x1024_80k_cityscapes.py | 9 + .../hrnet/fcn_hr18s_512x512_160k_ade20k.py | 9 + .../hrnet/fcn_hr18s_512x512_20k_voc12aug.py | 9 + .../hrnet/fcn_hr18s_512x512_40k_voc12aug.py | 9 + configs/hrnet/fcn_hr18s_512x512_80k_ade20k.py | 9 + .../fcn_hr48_512x1024_160k_cityscapes.py | 10 + .../hrnet/fcn_hr48_512x1024_40k_cityscapes.py | 10 + .../hrnet/fcn_hr48_512x1024_80k_cityscapes.py | 10 + configs/hrnet/fcn_hr48_512x512_160k_ade20k.py | 10 + .../hrnet/fcn_hr48_512x512_20k_voc12aug.py | 10 + .../hrnet/fcn_hr48_512x512_40k_voc12aug.py | 10 + configs/hrnet/fcn_hr48_512x512_80k_ade20k.py | 10 + configs/nonlocal_net/README.md | 42 + ...onlocal_r101-d8_512x1024_40k_cityscapes.py | 2 + ...onlocal_r101-d8_512x1024_80k_cityscapes.py | 2 + .../nonlocal_r101-d8_512x512_160k_ade20k.py | 2 + .../nonlocal_r101-d8_512x512_20k_voc12aug.py | 2 + .../nonlocal_r101-d8_512x512_40k_voc12aug.py | 2 + .../nonlocal_r101-d8_512x512_80k_ade20k.py | 2 + ...nonlocal_r101-d8_769x769_40k_cityscapes.py | 2 + ...nonlocal_r101-d8_769x769_80k_cityscapes.py | 2 + ...nonlocal_r50-d8_512x1024_40k_cityscapes.py | 4 + ...nonlocal_r50-d8_512x1024_80k_cityscapes.py | 4 + .../nonlocal_r50-d8_512x512_160k_ade20k.py | 6 + .../nonlocal_r50-d8_512x512_20k_voc12aug.py | 7 + .../nonlocal_r50-d8_512x512_40k_voc12aug.py | 7 + .../nonlocal_r50-d8_512x512_80k_ade20k.py | 6 + .../nonlocal_r50-d8_769x769_40k_cityscapes.py | 9 + .../nonlocal_r50-d8_769x769_80k_cityscapes.py | 9 + configs/ocrnet/README.md | 46 + .../ocrnet_hr18_512x1024_160k_cityscapes.py | 4 + .../ocrnet_hr18_512x1024_40k_cityscapes.py | 4 + .../ocrnet_hr18_512x1024_80k_cityscapes.py | 4 + .../ocrnet/ocrnet_hr18_512x512_160k_ade20k.py | 35 + .../ocrnet_hr18_512x512_20k_voc12aug.py | 36 + .../ocrnet_hr18_512x512_40k_voc12aug.py | 36 + .../ocrnet/ocrnet_hr18_512x512_80k_ade20k.py | 35 + .../ocrnet_hr18s_512x1024_160k_cityscapes.py | 9 + .../ocrnet_hr18s_512x1024_40k_cityscapes.py | 9 + .../ocrnet_hr18s_512x1024_80k_cityscapes.py | 9 + .../ocrnet_hr18s_512x512_160k_ade20k.py | 9 + .../ocrnet_hr18s_512x512_20k_voc12aug.py | 9 + .../ocrnet_hr18s_512x512_40k_voc12aug.py | 9 + .../ocrnet/ocrnet_hr18s_512x512_80k_ade20k.py | 9 + .../ocrnet_hr48_512x1024_160k_cityscapes.py | 39 + .../ocrnet_hr48_512x1024_40k_cityscapes.py | 39 + .../ocrnet_hr48_512x1024_80k_cityscapes.py | 39 + .../ocrnet/ocrnet_hr48_512x512_160k_ade20k.py | 39 + .../ocrnet_hr48_512x512_20k_voc12aug.py | 39 + .../ocrnet_hr48_512x512_40k_voc12aug.py | 39 + .../ocrnet/ocrnet_hr48_512x512_80k_ade20k.py | 39 + configs/psanet/README.md | 42 + .../psanet_r101-d8_512x1024_40k_cityscapes.py | 2 + .../psanet_r101-d8_512x1024_80k_cityscapes.py | 2 + .../psanet_r101-d8_512x512_160k_ade20k.py | 2 + .../psanet_r101-d8_512x512_20k_voc12aug.py | 2 + .../psanet_r101-d8_512x512_40k_voc12aug.py | 2 + .../psanet_r101-d8_512x512_80k_ade20k.py | 2 + .../psanet_r101-d8_769x769_40k_cityscapes.py | 2 + .../psanet_r101-d8_769x769_80k_cityscapes.py | 2 + .../psanet_r50-d8_512x1024_40k_cityscapes.py | 4 + .../psanet_r50-d8_512x1024_80k_cityscapes.py | 4 + .../psanet_r50-d8_512x512_160k_ade20k.py | 8 + .../psanet_r50-d8_512x512_20k_voc12aug.py | 7 + .../psanet_r50-d8_512x512_40k_voc12aug.py | 7 + .../psanet_r50-d8_512x512_80k_ade20k.py | 8 + .../psanet_r50-d8_769x769_40k_cityscapes.py | 9 + .../psanet_r50-d8_769x769_80k_cityscapes.py | 9 + configs/pspnet/README.md | 41 + .../pspnet_r101-d8_512x1024_40k_cityscapes.py | 2 + .../pspnet_r101-d8_512x1024_80k_cityscapes.py | 2 + .../pspnet_r101-d8_512x512_160k_ade20k.py | 2 + .../pspnet_r101-d8_512x512_20k_voc12aug.py | 2 + .../pspnet_r101-d8_512x512_40k_voc12aug.py | 2 + .../pspnet_r101-d8_512x512_80k_ade20k.py | 2 + .../pspnet_r101-d8_769x769_40k_cityscapes.py | 2 + .../pspnet_r101-d8_769x769_80k_cityscapes.py | 2 + .../pspnet_r50-d8_512x1024_40k_cityscapes.py | 4 + .../pspnet_r50-d8_512x1024_80k_cityscapes.py | 4 + .../pspnet_r50-d8_512x512_160k_ade20k.py | 7 + .../pspnet_r50-d8_512x512_20k_voc12aug.py | 7 + .../pspnet_r50-d8_512x512_40k_voc12aug.py | 7 + .../pspnet_r50-d8_512x512_80k_ade20k.py | 7 + .../pspnet_r50-d8_769x769_40k_cityscapes.py | 9 + .../pspnet_r50-d8_769x769_80k_cityscapes.py | 9 + configs/upernet/README.md | 42 + .../upernet_r101_512x1024_40k_cityscapes.py | 2 + .../upernet_r101_512x1024_80k_cityscapes.py | 2 + .../upernet_r101_512x512_160k_ade20k.py | 2 + .../upernet_r101_512x512_20k_voc12aug.py | 2 + .../upernet_r101_512x512_40k_voc12aug.py | 2 + .../upernet_r101_512x512_80k_ade20k.py | 2 + .../upernet_r101_769x769_40k_cityscapes.py | 2 + .../upernet_r101_769x769_80k_cityscapes.py | 2 + .../upernet_r50_512x1024_40k_cityscapes.py | 4 + .../upernet_r50_512x1024_80k_cityscapes.py | 4 + .../upernet_r50_512x512_160k_ade20k.py | 7 + .../upernet_r50_512x512_20k_voc12aug.py | 7 + .../upernet_r50_512x512_40k_voc12aug.py | 7 + .../upernet/upernet_r50_512x512_80k_ade20k.py | 7 + .../upernet_r50_769x769_40k_cityscapes.py | 9 + .../upernet_r50_769x769_80k_cityscapes.py | 9 + demo/demo.png | Bin 0 -> 307861 bytes demo/image_demo.py | 29 + demo/inference_demo.ipynb | 150 + docker/Dockerfile | 20 + docs/Makefile | 20 + docs/api.rst | 61 + docs/conf.py | 72 + docs/config.md | 365 +++ docs/getting_started.md | 332 ++ docs/index.rst | 28 + docs/install.md | 89 + docs/make.bat | 35 + docs/model_zoo.json | 2724 +++++++++++++++++ docs/model_zoo.md | 107 + docs/tutorials/data_pipeline.md | 156 + docs/tutorials/index.rst | 6 + docs/tutorials/new_dataset.md | 161 + docs/tutorials/new_modules.md | 234 ++ docs/tutorials/training_tricks.md | 28 + mmseg/VERSION | 1 + mmseg/__init__.py | 3 + mmseg/apis/__init__.py | 9 + mmseg/apis/inference.py | 116 + mmseg/apis/test.py | 191 ++ mmseg/apis/train.py | 106 + mmseg/core/__init__.py | 3 + mmseg/core/evaluation/__init__.py | 7 + mmseg/core/evaluation/class_names.py | 152 + mmseg/core/evaluation/eval_hooks.py | 80 + mmseg/core/evaluation/mean_iou.py | 70 + mmseg/core/seg/__init__.py | 4 + mmseg/core/seg/builder.py | 8 + mmseg/core/seg/sampler/__init__.py | 4 + mmseg/core/seg/sampler/base_pixel_sampler.py | 13 + mmseg/core/seg/sampler/ohem_pixel_sampler.py | 64 + mmseg/core/utils/__init__.py | 3 + mmseg/core/utils/misc.py | 17 + mmseg/datasets/__init__.py | 12 + mmseg/datasets/ade.py | 84 + mmseg/datasets/builder.py | 169 + mmseg/datasets/cityscapes.py | 213 ++ mmseg/datasets/custom.py | 291 ++ mmseg/datasets/dataset_wrappers.py | 50 + mmseg/datasets/pipelines/__init__.py | 14 + mmseg/datasets/pipelines/compose.py | 51 + mmseg/datasets/pipelines/formating.py | 288 ++ mmseg/datasets/pipelines/loading.py | 149 + mmseg/datasets/pipelines/test_time_aug.py | 120 + mmseg/datasets/pipelines/transforms.py | 610 ++++ mmseg/datasets/voc.py | 29 + mmseg/models/__init__.py | 11 + mmseg/models/backbones/__init__.py | 5 + mmseg/models/backbones/hrnet.py | 555 ++++ mmseg/models/backbones/resnet.py | 689 +++++ mmseg/models/backbones/resnext.py | 145 + mmseg/models/builder.py | 56 + mmseg/models/decode_heads/__init__.py | 19 + mmseg/models/decode_heads/ann_head.py | 245 ++ mmseg/models/decode_heads/aspp_head.py | 107 + .../decode_heads/cascade_decode_head.py | 57 + mmseg/models/decode_heads/cc_head.py | 42 + mmseg/models/decode_heads/da_head.py | 178 ++ mmseg/models/decode_heads/decode_head.py | 229 ++ mmseg/models/decode_heads/enc_head.py | 187 ++ mmseg/models/decode_heads/fcn_head.py | 69 + mmseg/models/decode_heads/gc_head.py | 47 + mmseg/models/decode_heads/nl_head.py | 49 + mmseg/models/decode_heads/ocr_head.py | 127 + mmseg/models/decode_heads/psa_head.py | 196 ++ mmseg/models/decode_heads/psp_head.py | 101 + mmseg/models/decode_heads/sep_aspp_head.py | 101 + mmseg/models/decode_heads/uper_head.py | 126 + mmseg/models/losses/__init__.py | 10 + mmseg/models/losses/accuracy.py | 78 + mmseg/models/losses/cross_entropy_loss.py | 179 ++ mmseg/models/losses/utils.py | 101 + mmseg/models/segmentors/__init__.py | 4 + mmseg/models/segmentors/base.py | 267 ++ .../segmentors/cascade_encoder_decoder.py | 98 + mmseg/models/segmentors/encoder_decoder.py | 282 ++ mmseg/models/utils/__init__.py | 4 + mmseg/models/utils/res_layer.py | 95 + mmseg/models/utils/self_attention_block.py | 159 + mmseg/ops/__init__.py | 5 + mmseg/ops/encoding.py | 74 + mmseg/ops/separable_conv_module.py | 88 + mmseg/ops/wrappers.py | 25 + mmseg/utils/__init__.py | 7 + mmseg/utils/collect_env.py | 70 + mmseg/utils/logger.py | 27 + pytest.ini | 7 + requirements.txt | 4 + requirements/build.txt | 3 + requirements/optional.txt | 1 + requirements/runtime.txt | 4 + requirements/tests.txt | 8 + resources/mmseg-logo.png | Bin 0 -> 44728 bytes resources/seg_demo.gif | Bin 0 -> 951973 bytes setup.cfg | 13 + setup.py | 223 ++ tests/data/color.jpg | Bin 0 -> 35851 bytes tests/data/gray.jpg | Bin 0 -> 39088 bytes tests/data/pseudo_dataset/gts/00000_gt.png | Bin 0 -> 188 bytes tests/data/pseudo_dataset/gts/00001_gt.png | Bin 0 -> 186 bytes tests/data/pseudo_dataset/gts/00002_gt.png | Bin 0 -> 193 bytes tests/data/pseudo_dataset/gts/00003_gt.png | Bin 0 -> 198 bytes tests/data/pseudo_dataset/gts/00004_gt.png | Bin 0 -> 206 bytes tests/data/pseudo_dataset/imgs/00000_img.jpg | Bin 0 -> 1633 bytes tests/data/pseudo_dataset/imgs/00001_img.jpg | Bin 0 -> 2356 bytes tests/data/pseudo_dataset/imgs/00002_img.jpg | Bin 0 -> 1643 bytes tests/data/pseudo_dataset/imgs/00003_img.jpg | Bin 0 -> 1859 bytes tests/data/pseudo_dataset/imgs/00004_img.jpg | Bin 0 -> 1902 bytes tests/data/pseudo_dataset/splits/train.txt | 4 + tests/data/pseudo_dataset/splits/val.txt | 1 + tests/data/seg.png | Bin 0 -> 5075 bytes tests/test_config.py | 165 + tests/test_data/test_dataset.py | 173 ++ tests/test_data/test_dataset_builder.py | 192 ++ tests/test_data/test_loading.py | 100 + tests/test_data/test_transform.py | 242 ++ tests/test_eval_hook.py | 118 + tests/test_mean_iou.py | 56 + tests/test_models/test_backbone.py | 666 ++++ tests/test_models/test_forward.py | 229 ++ tests/test_models/test_heads.py | 541 ++++ tests/test_models/test_losses.py | 134 + tests/test_models/test_segmentor.py | 212 ++ tests/test_ops/test_sep_conv_module.py | 71 + tests/test_sampler.py | 21 + tools/benchmark.py | 81 + tools/convert_datasets/cityscapes.py | 55 + tools/convert_datasets/voc_aug.py | 87 + tools/dist_test.sh | 10 + tools/dist_train.sh | 9 + tools/get_flops.py | 55 + tools/print_config.py | 28 + tools/publish_model.py | 35 + tools/slurm_test.sh | 24 + tools/slurm_train.sh | 23 + tools/test.py | 142 + tools/train.py | 157 + 430 files changed, 20454 insertions(+), 1 deletion(-) create mode 100644 .dev/clean_models.py create mode 100644 .dev/gather_models.py create mode 100644 .dev/generate_table.py create mode 100644 .dev/modelzoo_json2md.py create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/error-report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/general_questions.md create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 .style.yapf create mode 100644 README.md create mode 100644 configs/_base_/datasets/ade20k.py create mode 100644 configs/_base_/datasets/cityscapes.py create mode 100644 configs/_base_/datasets/cityscapes_769x769.py create mode 100644 configs/_base_/datasets/pascal_voc12.py create mode 100644 configs/_base_/datasets/pascal_voc12_aug.py create mode 100644 configs/_base_/default_runtime.py create mode 100644 configs/_base_/models/ann_r50-d8.py create mode 100644 configs/_base_/models/ccnet_r50-d8.py create mode 100644 configs/_base_/models/danet_r50-d8.py create mode 100644 configs/_base_/models/deeplabv3_r50-d8.py create mode 100644 configs/_base_/models/deeplabv3plus_r50-d8.py create mode 100644 configs/_base_/models/encnet_r50-d8.py create mode 100644 configs/_base_/models/fcn_hr18.py create mode 100644 configs/_base_/models/fcn_r50-d8.py create mode 100644 configs/_base_/models/gcnet_r50-d8.py create mode 100644 configs/_base_/models/nonlocal_r50-d8.py create mode 100644 configs/_base_/models/ocrnet_hr18.py create mode 100644 configs/_base_/models/psanet_r50-d8.py create mode 100644 configs/_base_/models/pspnet_r50-d8.py create mode 100644 configs/_base_/models/upernet_r50.py create mode 100644 configs/_base_/schedules/schedule_160k.py create mode 100644 configs/_base_/schedules/schedule_20k.py create mode 100644 configs/_base_/schedules/schedule_40k.py create mode 100644 configs/_base_/schedules/schedule_80k.py create mode 100644 configs/ann/README.md create mode 100644 configs/ann/ann_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/ann/ann_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/ann/ann_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/ann/ann_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/ann/ann_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/ann/ann_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/ann/ann_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/ann/ann_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/ann/ann_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/ann/ann_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/ann/ann_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/ann/ann_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/ann/ann_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/ann/ann_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/ann/ann_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/ann/ann_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/ccnet/README.md create mode 100644 configs/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/ccnet/ccnet_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/ccnet/ccnet_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/ccnet/ccnet_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/ccnet/ccnet_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/ccnet/ccnet_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/ccnet/ccnet_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/ccnet/ccnet_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/ccnet/ccnet_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/ccnet/ccnet_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/danet/README.md create mode 100644 configs/danet/danet_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/danet/danet_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/danet/danet_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/danet/danet_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/danet/danet_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/danet/danet_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/danet/danet_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/danet/danet_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/danet/danet_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/danet/danet_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/danet/danet_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/danet/danet_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/danet/danet_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/danet/danet_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/danet/danet_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/danet/danet_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/deeplabv3/README.md create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/deeplabv3plus/README.md create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/encnet/README.md create mode 100644 configs/encnet/encnet_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/encnet/encnet_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/encnet/encnet_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/encnet/encnet_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/encnet/encnet_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/encnet/encnet_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/encnet/encnet_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/encnet/encnet_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/encnet/encnet_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/encnet/encnet_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/encnet/encnet_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/encnet/encnet_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/encnet/encnet_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/encnet/encnet_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/encnet/encnet_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/encnet/encnet_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/encnet/encnet_r50s-d8_512x512_80k_ade20k.py create mode 100644 configs/fcn/README.md create mode 100644 configs/fcn/fcn_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/fcn/fcn_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/fcn/fcn_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/fcn/fcn_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/fcn/fcn_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/fcn/fcn_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/fcn/fcn_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/fcn/fcn_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/fcn/fcn_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/fcn/fcn_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/fcn/fcn_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/fcn/fcn_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/fcn/fcn_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/fcn/fcn_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/fcn/fcn_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/fcn/fcn_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/gcnet/README.md create mode 100644 configs/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/gcnet/gcnet_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/gcnet/gcnet_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/gcnet/gcnet_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/gcnet/gcnet_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/gcnet/gcnet_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/gcnet/gcnet_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/gcnet/gcnet_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/gcnet/gcnet_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/gcnet/gcnet_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/hrnet/README.md create mode 100644 configs/hrnet/fcn_hr18_512x1024_160k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr18_512x1024_40k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr18_512x1024_80k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr18_512x512_160k_ade20k.py create mode 100644 configs/hrnet/fcn_hr18_512x512_20k_voc12aug.py create mode 100644 configs/hrnet/fcn_hr18_512x512_40k_voc12aug.py create mode 100644 configs/hrnet/fcn_hr18_512x512_80k_ade20k.py create mode 100644 configs/hrnet/fcn_hr18s_512x1024_160k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr18s_512x1024_40k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr18s_512x1024_80k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr18s_512x512_160k_ade20k.py create mode 100644 configs/hrnet/fcn_hr18s_512x512_20k_voc12aug.py create mode 100644 configs/hrnet/fcn_hr18s_512x512_40k_voc12aug.py create mode 100644 configs/hrnet/fcn_hr18s_512x512_80k_ade20k.py create mode 100644 configs/hrnet/fcn_hr48_512x1024_160k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr48_512x1024_40k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr48_512x1024_80k_cityscapes.py create mode 100644 configs/hrnet/fcn_hr48_512x512_160k_ade20k.py create mode 100644 configs/hrnet/fcn_hr48_512x512_20k_voc12aug.py create mode 100644 configs/hrnet/fcn_hr48_512x512_40k_voc12aug.py create mode 100644 configs/hrnet/fcn_hr48_512x512_80k_ade20k.py create mode 100644 configs/nonlocal_net/README.md create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/ocrnet/README.md create mode 100644 configs/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr18_512x512_160k_ade20k.py create mode 100644 configs/ocrnet/ocrnet_hr18_512x512_20k_voc12aug.py create mode 100644 configs/ocrnet/ocrnet_hr18_512x512_40k_voc12aug.py create mode 100644 configs/ocrnet/ocrnet_hr18_512x512_80k_ade20k.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x512_160k_ade20k.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug.py create mode 100644 configs/ocrnet/ocrnet_hr18s_512x512_80k_ade20k.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x512_160k_ade20k.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x512_20k_voc12aug.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x512_40k_voc12aug.py create mode 100644 configs/ocrnet/ocrnet_hr48_512x512_80k_ade20k.py create mode 100644 configs/psanet/README.md create mode 100644 configs/psanet/psanet_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/psanet/psanet_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/psanet/psanet_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/psanet/psanet_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/psanet/psanet_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/psanet/psanet_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/psanet/psanet_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/psanet/psanet_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/psanet/psanet_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/psanet/psanet_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/psanet/psanet_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/psanet/psanet_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/psanet/psanet_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/psanet/psanet_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/psanet/psanet_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/psanet/psanet_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/pspnet/README.md create mode 100644 configs/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r101-d8_512x512_160k_ade20k.py create mode 100644 configs/pspnet/pspnet_r101-d8_512x512_20k_voc12aug.py create mode 100644 configs/pspnet/pspnet_r101-d8_512x512_40k_voc12aug.py create mode 100644 configs/pspnet/pspnet_r101-d8_512x512_80k_ade20k.py create mode 100644 configs/pspnet/pspnet_r101-d8_769x769_40k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r101-d8_769x769_80k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r50-d8_512x512_160k_ade20k.py create mode 100644 configs/pspnet/pspnet_r50-d8_512x512_20k_voc12aug.py create mode 100644 configs/pspnet/pspnet_r50-d8_512x512_40k_voc12aug.py create mode 100644 configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py create mode 100644 configs/pspnet/pspnet_r50-d8_769x769_40k_cityscapes.py create mode 100644 configs/pspnet/pspnet_r50-d8_769x769_80k_cityscapes.py create mode 100644 configs/upernet/README.md create mode 100644 configs/upernet/upernet_r101_512x1024_40k_cityscapes.py create mode 100644 configs/upernet/upernet_r101_512x1024_80k_cityscapes.py create mode 100644 configs/upernet/upernet_r101_512x512_160k_ade20k.py create mode 100644 configs/upernet/upernet_r101_512x512_20k_voc12aug.py create mode 100644 configs/upernet/upernet_r101_512x512_40k_voc12aug.py create mode 100644 configs/upernet/upernet_r101_512x512_80k_ade20k.py create mode 100644 configs/upernet/upernet_r101_769x769_40k_cityscapes.py create mode 100644 configs/upernet/upernet_r101_769x769_80k_cityscapes.py create mode 100644 configs/upernet/upernet_r50_512x1024_40k_cityscapes.py create mode 100644 configs/upernet/upernet_r50_512x1024_80k_cityscapes.py create mode 100644 configs/upernet/upernet_r50_512x512_160k_ade20k.py create mode 100644 configs/upernet/upernet_r50_512x512_20k_voc12aug.py create mode 100644 configs/upernet/upernet_r50_512x512_40k_voc12aug.py create mode 100644 configs/upernet/upernet_r50_512x512_80k_ade20k.py create mode 100644 configs/upernet/upernet_r50_769x769_40k_cityscapes.py create mode 100644 configs/upernet/upernet_r50_769x769_80k_cityscapes.py create mode 100644 demo/demo.png create mode 100644 demo/image_demo.py create mode 100644 demo/inference_demo.ipynb create mode 100644 docker/Dockerfile create mode 100644 docs/Makefile create mode 100644 docs/api.rst create mode 100644 docs/conf.py create mode 100644 docs/config.md create mode 100644 docs/getting_started.md create mode 100644 docs/index.rst create mode 100644 docs/install.md create mode 100644 docs/make.bat create mode 100644 docs/model_zoo.json create mode 100644 docs/model_zoo.md create mode 100644 docs/tutorials/data_pipeline.md create mode 100644 docs/tutorials/index.rst create mode 100644 docs/tutorials/new_dataset.md create mode 100644 docs/tutorials/new_modules.md create mode 100644 docs/tutorials/training_tricks.md create mode 100644 mmseg/VERSION create mode 100644 mmseg/__init__.py create mode 100644 mmseg/apis/__init__.py create mode 100644 mmseg/apis/inference.py create mode 100644 mmseg/apis/test.py create mode 100644 mmseg/apis/train.py create mode 100644 mmseg/core/__init__.py create mode 100644 mmseg/core/evaluation/__init__.py create mode 100644 mmseg/core/evaluation/class_names.py create mode 100644 mmseg/core/evaluation/eval_hooks.py create mode 100644 mmseg/core/evaluation/mean_iou.py create mode 100644 mmseg/core/seg/__init__.py create mode 100644 mmseg/core/seg/builder.py create mode 100644 mmseg/core/seg/sampler/__init__.py create mode 100644 mmseg/core/seg/sampler/base_pixel_sampler.py create mode 100644 mmseg/core/seg/sampler/ohem_pixel_sampler.py create mode 100644 mmseg/core/utils/__init__.py create mode 100644 mmseg/core/utils/misc.py create mode 100644 mmseg/datasets/__init__.py create mode 100644 mmseg/datasets/ade.py create mode 100644 mmseg/datasets/builder.py create mode 100644 mmseg/datasets/cityscapes.py create mode 100644 mmseg/datasets/custom.py create mode 100644 mmseg/datasets/dataset_wrappers.py create mode 100644 mmseg/datasets/pipelines/__init__.py create mode 100644 mmseg/datasets/pipelines/compose.py create mode 100644 mmseg/datasets/pipelines/formating.py create mode 100644 mmseg/datasets/pipelines/loading.py create mode 100644 mmseg/datasets/pipelines/test_time_aug.py create mode 100644 mmseg/datasets/pipelines/transforms.py create mode 100644 mmseg/datasets/voc.py create mode 100644 mmseg/models/__init__.py create mode 100644 mmseg/models/backbones/__init__.py create mode 100644 mmseg/models/backbones/hrnet.py create mode 100644 mmseg/models/backbones/resnet.py create mode 100644 mmseg/models/backbones/resnext.py create mode 100644 mmseg/models/builder.py create mode 100644 mmseg/models/decode_heads/__init__.py create mode 100644 mmseg/models/decode_heads/ann_head.py create mode 100644 mmseg/models/decode_heads/aspp_head.py create mode 100644 mmseg/models/decode_heads/cascade_decode_head.py create mode 100644 mmseg/models/decode_heads/cc_head.py create mode 100644 mmseg/models/decode_heads/da_head.py create mode 100644 mmseg/models/decode_heads/decode_head.py create mode 100644 mmseg/models/decode_heads/enc_head.py create mode 100644 mmseg/models/decode_heads/fcn_head.py create mode 100644 mmseg/models/decode_heads/gc_head.py create mode 100644 mmseg/models/decode_heads/nl_head.py create mode 100644 mmseg/models/decode_heads/ocr_head.py create mode 100644 mmseg/models/decode_heads/psa_head.py create mode 100644 mmseg/models/decode_heads/psp_head.py create mode 100644 mmseg/models/decode_heads/sep_aspp_head.py create mode 100644 mmseg/models/decode_heads/uper_head.py create mode 100644 mmseg/models/losses/__init__.py create mode 100644 mmseg/models/losses/accuracy.py create mode 100644 mmseg/models/losses/cross_entropy_loss.py create mode 100644 mmseg/models/losses/utils.py create mode 100644 mmseg/models/segmentors/__init__.py create mode 100644 mmseg/models/segmentors/base.py create mode 100644 mmseg/models/segmentors/cascade_encoder_decoder.py create mode 100644 mmseg/models/segmentors/encoder_decoder.py create mode 100644 mmseg/models/utils/__init__.py create mode 100644 mmseg/models/utils/res_layer.py create mode 100644 mmseg/models/utils/self_attention_block.py create mode 100644 mmseg/ops/__init__.py create mode 100644 mmseg/ops/encoding.py create mode 100644 mmseg/ops/separable_conv_module.py create mode 100644 mmseg/ops/wrappers.py create mode 100644 mmseg/utils/__init__.py create mode 100644 mmseg/utils/collect_env.py create mode 100644 mmseg/utils/logger.py create mode 100644 pytest.ini create mode 100644 requirements.txt create mode 100644 requirements/build.txt create mode 100644 requirements/optional.txt create mode 100644 requirements/runtime.txt create mode 100644 requirements/tests.txt create mode 100644 resources/mmseg-logo.png create mode 100644 resources/seg_demo.gif create mode 100644 setup.cfg create mode 100755 setup.py create mode 100644 tests/data/color.jpg create mode 100644 tests/data/gray.jpg create mode 100644 tests/data/pseudo_dataset/gts/00000_gt.png create mode 100644 tests/data/pseudo_dataset/gts/00001_gt.png create mode 100644 tests/data/pseudo_dataset/gts/00002_gt.png create mode 100644 tests/data/pseudo_dataset/gts/00003_gt.png create mode 100644 tests/data/pseudo_dataset/gts/00004_gt.png create mode 100644 tests/data/pseudo_dataset/imgs/00000_img.jpg create mode 100644 tests/data/pseudo_dataset/imgs/00001_img.jpg create mode 100644 tests/data/pseudo_dataset/imgs/00002_img.jpg create mode 100644 tests/data/pseudo_dataset/imgs/00003_img.jpg create mode 100644 tests/data/pseudo_dataset/imgs/00004_img.jpg create mode 100644 tests/data/pseudo_dataset/splits/train.txt create mode 100644 tests/data/pseudo_dataset/splits/val.txt create mode 100644 tests/data/seg.png create mode 100644 tests/test_config.py create mode 100644 tests/test_data/test_dataset.py create mode 100644 tests/test_data/test_dataset_builder.py create mode 100644 tests/test_data/test_loading.py create mode 100644 tests/test_data/test_transform.py create mode 100644 tests/test_eval_hook.py create mode 100644 tests/test_mean_iou.py create mode 100644 tests/test_models/test_backbone.py create mode 100644 tests/test_models/test_forward.py create mode 100644 tests/test_models/test_heads.py create mode 100644 tests/test_models/test_losses.py create mode 100644 tests/test_models/test_segmentor.py create mode 100644 tests/test_ops/test_sep_conv_module.py create mode 100644 tests/test_sampler.py create mode 100644 tools/benchmark.py create mode 100644 tools/convert_datasets/cityscapes.py create mode 100644 tools/convert_datasets/voc_aug.py create mode 100755 tools/dist_test.sh create mode 100755 tools/dist_train.sh create mode 100644 tools/get_flops.py create mode 100644 tools/print_config.py create mode 100644 tools/publish_model.py create mode 100755 tools/slurm_test.sh create mode 100755 tools/slurm_train.sh create mode 100644 tools/test.py create mode 100644 tools/train.py diff --git a/.dev/clean_models.py b/.dev/clean_models.py new file mode 100644 index 000000000..c9ac2acbc --- /dev/null +++ b/.dev/clean_models.py @@ -0,0 +1,125 @@ +import argparse +import glob +import json +import os +import os.path as osp + +import mmcv + +# build schedule look-up table to automatically find the final model +SCHEDULES_LUT = { + '20ki': 20000, + '40ki': 40000, + '60ki': 60000, + '80ki': 80000, + '160ki': 160000 +} +RESULTS_LUT = ['mIoU', 'mAcc', 'aAcc'] + + +def get_final_iter(config): + iter_num = SCHEDULES_LUT[config.split('_')[-2]] + return iter_num + + +def get_final_results(log_json_path, iter_num): + result_dict = dict() + with open(log_json_path, 'r') as f: + for line in f.readlines(): + log_line = json.loads(line) + if 'mode' not in log_line.keys(): + continue + + if log_line['mode'] == 'train' and log_line['iter'] == iter_num: + result_dict['memory'] = log_line['memory'] + + if log_line['iter'] == iter_num: + result_dict.update({ + key: log_line[key] + for key in RESULTS_LUT if key in log_line + }) + return result_dict + + +def parse_args(): + parser = argparse.ArgumentParser(description='Gather benchmarked models') + parser.add_argument( + 'root', + type=str, + help='root path of benchmarked models to be gathered') + parser.add_argument( + 'config', + type=str, + help='root path of benchmarked configs to be gathered') + + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + models_root = args.root + config_name = args.config + + # find all models in the root directory to be gathered + raw_configs = list(mmcv.scandir(config_name, '.py', recursive=True)) + + # filter configs that is not trained in the experiments dir + used_configs = [] + for raw_config in raw_configs: + work_dir = osp.splitext(osp.basename(raw_config))[0] + if osp.exists(osp.join(models_root, work_dir)): + used_configs.append(work_dir) + print(f'Find {len(used_configs)} models to be gathered') + + # find final_ckpt and log file for trained each config + # and parse the best performance + model_infos = [] + for used_config in used_configs: + exp_dir = osp.join(models_root, used_config) + # check whether the exps is finished + final_iter = get_final_iter(used_config) + final_model = 'iter_{}.pth'.format(final_iter) + model_path = osp.join(exp_dir, final_model) + + # skip if the model is still training + if not osp.exists(model_path): + print(f'{used_config} not finished yet') + continue + + # get logs + log_json_path = glob.glob(osp.join(exp_dir, '*.log.json'))[0] + log_txt_path = glob.glob(osp.join(exp_dir, '*.log'))[0] + model_performance = get_final_results(log_json_path, final_iter) + + if model_performance is None: + print(f'{used_config} does not have performance') + continue + + model_time = osp.split(log_txt_path)[-1].split('.')[0] + model_infos.append( + dict( + config=used_config, + results=model_performance, + iters=final_iter, + model_time=model_time, + log_json_path=osp.split(log_json_path)[-1])) + + # publish model for each checkpoint + for model in model_infos: + + model_name = osp.split(model['config'])[-1].split('.')[0] + + model_name += '_' + model['model_time'] + for checkpoints in mmcv.scandir( + osp.join(models_root, model['config']), suffix='.pth'): + if checkpoints.endswith(f"iter_{model['iters']}.pth" + ) or checkpoints.endswith('latest.pth'): + continue + print('removing {}'.format( + osp.join(models_root, model['config'], checkpoints))) + os.remove(osp.join(models_root, model['config'], checkpoints)) + + +if __name__ == '__main__': + main() diff --git a/.dev/gather_models.py b/.dev/gather_models.py new file mode 100644 index 000000000..1899195d7 --- /dev/null +++ b/.dev/gather_models.py @@ -0,0 +1,197 @@ +import argparse +import glob +import json +import os +import os.path as osp +import shutil +import subprocess + +import mmcv +import torch + +# build schedule look-up table to automatically find the final model +RESULTS_LUT = ['mIoU', 'mAcc', 'aAcc'] + + +def process_checkpoint(in_file, out_file): + checkpoint = torch.load(in_file, map_location='cpu') + # remove optimizer for smaller file size + if 'optimizer' in checkpoint: + del checkpoint['optimizer'] + # if it is necessary to remove some sensitive data in checkpoint['meta'], + # add the code here. + torch.save(checkpoint, out_file) + sha = subprocess.check_output(['sha256sum', out_file]).decode() + final_file = out_file.rstrip('.pth') + '-{}.pth'.format(sha[:8]) + subprocess.Popen(['mv', out_file, final_file]) + return final_file + + +def get_final_iter(config): + iter_num = config.split('_')[-2] + assert iter_num.endswith('k') + return int(iter_num[:-1]) * 1000 + + +def get_final_results(log_json_path, iter_num): + result_dict = dict() + with open(log_json_path, 'r') as f: + for line in f.readlines(): + log_line = json.loads(line) + if 'mode' not in log_line.keys(): + continue + + if log_line['mode'] == 'train' and log_line['iter'] == iter_num: + result_dict['memory'] = log_line['memory'] + + if log_line['iter'] == iter_num: + result_dict.update({ + key: log_line[key] + for key in RESULTS_LUT if key in log_line + }) + return result_dict + + +def parse_args(): + parser = argparse.ArgumentParser(description='Gather benchmarked models') + parser.add_argument( + 'root', + type=str, + help='root path of benchmarked models to be gathered') + parser.add_argument( + 'config', + type=str, + help='root path of benchmarked configs to be gathered') + parser.add_argument( + 'out_dir', + type=str, + help='output path of gathered models to be stored') + parser.add_argument('out_file', type=str, help='the output json file name') + parser.add_argument( + '--filter', type=str, nargs='+', default=[], help='config filter') + parser.add_argument( + '--all', action='store_true', help='whether include .py and .log') + + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + models_root = args.root + models_out = args.out_dir + config_name = args.config + mmcv.mkdir_or_exist(models_out) + + # find all models in the root directory to be gathered + raw_configs = list(mmcv.scandir(config_name, '.py', recursive=True)) + + # filter configs that is not trained in the experiments dir + used_configs = [] + for raw_config in raw_configs: + work_dir = osp.splitext(osp.basename(raw_config))[0] + if osp.exists(osp.join(models_root, work_dir)): + used_configs.append((work_dir, raw_config)) + print(f'Find {len(used_configs)} models to be gathered') + + # find final_ckpt and log file for trained each config + # and parse the best performance + model_infos = [] + for used_config, raw_config in used_configs: + bypass = True + for p in args.filter: + if p in used_config: + bypass = False + break + if bypass: + continue + exp_dir = osp.join(models_root, used_config) + # check whether the exps is finished + final_iter = get_final_iter(used_config) + final_model = 'iter_{}.pth'.format(final_iter) + model_path = osp.join(exp_dir, final_model) + + # skip if the model is still training + if not osp.exists(model_path): + print(f'{used_config} train not finished yet') + continue + + # get logs + log_json_paths = glob.glob(osp.join(exp_dir, '*.log.json')) + log_json_path = log_json_paths[0] + model_performance = None + for idx, _log_json_path in enumerate(log_json_paths): + model_performance = get_final_results(_log_json_path, final_iter) + if model_performance is not None: + log_json_path = _log_json_path + break + + if model_performance is None: + print(f'{used_config} model_performance is None') + continue + + model_time = osp.split(log_json_path)[-1].split('.')[0] + model_infos.append( + dict( + config=used_config, + raw_config=raw_config, + results=model_performance, + iters=final_iter, + model_time=model_time, + log_json_path=osp.split(log_json_path)[-1])) + + # publish model for each checkpoint + publish_model_infos = [] + for model in model_infos: + model_publish_dir = osp.join(models_out, + model['raw_config'].rstrip('.py')) + model_name = osp.split(model['config'])[-1].split('.')[0] + + publish_model_path = osp.join(model_publish_dir, + model_name + '_' + model['model_time']) + trained_model_path = osp.join(models_root, model['config'], + 'iter_{}.pth'.format(model['iters'])) + if osp.exists(model_publish_dir): + for file in os.listdir(model_publish_dir): + if file.endswith('.pth'): + print(f'model {file} found') + model['model_path'] = osp.abspath( + osp.join(model_publish_dir, file)) + break + if 'model_path' not in model: + print(f'dir {model_publish_dir} exists, no model found') + + else: + mmcv.mkdir_or_exist(model_publish_dir) + + # convert model + final_model_path = process_checkpoint(trained_model_path, + publish_model_path) + model['model_path'] = final_model_path + + new_json_path = f'{model_name}-{model["log_json_path"]}' + # copy log + shutil.copy( + osp.join(models_root, model['config'], model['log_json_path']), + osp.join(model_publish_dir, new_json_path)) + if args.all: + new_txt_path = new_json_path.rstrip('.json') + shutil.copy( + osp.join(models_root, model['config'], + model['log_json_path'].rstrip('.json')), + osp.join(model_publish_dir, new_txt_path)) + + if args.all: + # copy config to guarantee reproducibility + raw_config = osp.join(config_name, model['raw_config']) + mmcv.Config.fromfile(raw_config).dump( + osp.join(model_publish_dir, osp.basename(raw_config))) + + publish_model_infos.append(model) + + models = dict(models=publish_model_infos) + mmcv.dump(models, osp.join(models_out, args.out_file)) + + +if __name__ == '__main__': + main() diff --git a/.dev/generate_table.py b/.dev/generate_table.py new file mode 100644 index 000000000..25142caee --- /dev/null +++ b/.dev/generate_table.py @@ -0,0 +1,152 @@ +import argparse +import csv +import glob +import json +import os.path as osp +from collections import OrderedDict + +import mmcv + +# build schedule look-up table to automatically find the final model +RESULTS_LUT = ['mIoU', 'mAcc', 'aAcc'] + + +def get_final_iter(config): + iter_num = config.split('_')[-2] + assert iter_num.endswith('ki') + return int(iter_num[:-2]) * 1000 + + +def get_final_results(log_json_path, iter_num): + result_dict = dict() + with open(log_json_path, 'r') as f: + for line in f.readlines(): + log_line = json.loads(line) + if 'mode' not in log_line.keys(): + continue + + if log_line['mode'] == 'train' and log_line[ + 'iter'] == iter_num - 50: + result_dict['memory'] = log_line['memory'] + + if log_line['iter'] == iter_num: + result_dict.update({ + key: log_line[key] * 100 + for key in RESULTS_LUT if key in log_line + }) + return result_dict + + +def get_total_time(log_json_path, iter_num): + + def convert(seconds): + hour = seconds // 3600 + seconds %= 3600 + minutes = seconds // 60 + seconds %= 60 + + return f'{hour:d}:{minutes:2d}:{seconds:2d}' + + time_dict = dict() + with open(log_json_path, 'r') as f: + last_iter = 0 + total_sec = 0 + for line in f.readlines(): + log_line = json.loads(line) + if 'mode' not in log_line.keys(): + continue + + if log_line['mode'] == 'train': + cur_iter = log_line['iter'] + total_sec += (cur_iter - last_iter) * log_line['time'] + last_iter = cur_iter + time_dict['time'] = convert(int(total_sec)) + + return time_dict + + +def parse_args(): + parser = argparse.ArgumentParser(description='Gather benchmarked models') + parser.add_argument( + 'root', + type=str, + help='root path of benchmarked models to be gathered') + parser.add_argument( + 'config', + type=str, + help='root path of benchmarked configs to be gathered') + parser.add_argument( + 'out', type=str, help='output path of gathered models to be stored') + + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + models_root = args.root + models_out = args.out + config_name = args.config + mmcv.mkdir_or_exist(models_out) + + # find all models in the root directory to be gathered + raw_configs = list(mmcv.scandir(config_name, '.py', recursive=True)) + + # filter configs that is not trained in the experiments dir + exp_dirs = [] + for raw_config in raw_configs: + work_dir = osp.splitext(osp.basename(raw_config))[0] + if osp.exists(osp.join(models_root, work_dir)): + exp_dirs.append(work_dir) + print(f'Find {len(exp_dirs)} models to be gathered') + + # find final_ckpt and log file for trained each config + # and parse the best performance + model_infos = [] + for work_dir in exp_dirs: + exp_dir = osp.join(models_root, work_dir) + # check whether the exps is finished + final_iter = get_final_iter(work_dir) + final_model = 'iter_{}.pth'.format(final_iter) + model_path = osp.join(exp_dir, final_model) + + # skip if the model is still training + if not osp.exists(model_path): + print(f'{model_path} not finished yet') + continue + + # get logs + log_json_path = glob.glob(osp.join(exp_dir, '*.log.json'))[0] + model_performance = get_final_results(log_json_path, final_iter) + + if model_performance is None: + continue + + head = work_dir.split('_')[0] + backbone = work_dir.split('_')[1] + crop_size = work_dir.split('_')[-3] + dataset = work_dir.split('_')[-1] + model_info = OrderedDict( + head=head, + backbone=backbone, + crop_size=crop_size, + dataset=dataset, + iters=f'{final_iter//1000}ki') + model_info.update(model_performance) + model_time = get_total_time(log_json_path, final_iter) + model_info.update(model_time) + model_info['config'] = work_dir + model_infos.append(model_info) + + with open( + osp.join(models_out, 'models_table.csv'), 'w', + newline='') as csvfile: + writer = csv.writer( + csvfile, delimiter='\t', quotechar='|', quoting=csv.QUOTE_MINIMAL) + writer.writerow(model_infos[0].keys()) + for model_info in model_infos: + writer.writerow(model_info.values()) + + +if __name__ == '__main__': + main() diff --git a/.dev/modelzoo_json2md.py b/.dev/modelzoo_json2md.py new file mode 100644 index 000000000..7cb44bffa --- /dev/null +++ b/.dev/modelzoo_json2md.py @@ -0,0 +1,58 @@ +import argparse +import os +import os.path as osp + +import mmcv +from pytablewriter import Align, MarkdownTableWriter + + +def parse_args(): + parser = argparse.ArgumentParser(description='Gather benchmarked models') + parser.add_argument('table_cache', type=str, help='table_cache input') + parser.add_argument('out', type=str, help='output path md') + + args = parser.parse_args() + return args + + +def main(): + args = parse_args() + table_cache = mmcv.load(args.table_cache) + output_dir = args.out + + writer = MarkdownTableWriter() + writer.headers = [ + 'Method', 'Backbone', 'Crop Size', 'Lr schd', 'Mem (GB)', + 'Inf time (fps)', 'mIoU', 'mIoU(ms+flip)', 'download' + ] + writer.margin = 1 + writer.align_list = [Align.CENTER] * len(writer.headers) + dataset_maps = { + 'cityscapes': 'Cityscapes', + 'ade20k': 'ADE20K', + 'voc12aug': 'Pascal VOC 2012 + Aug' + } + for directory in table_cache: + for dataset in table_cache[directory]: + table = table_cache[directory][dataset][0] + writer.table_name = dataset_maps[dataset] + writer.value_matrix = table + for i in range(len(table)): + if table[i][-4] != '-': + table[i][-4] = f'{table[i][-4]:.2f}' + mmcv.mkdir_or_exist(osp.join(output_dir, directory)) + writer.dump( + osp.join(output_dir, directory, f'README_{dataset}.md')) + with open(osp.join(output_dir, directory, 'README.md'), 'w') as dst_f: + for dataset in dataset_maps: + dataset_md_file = osp.join(output_dir, directory, + f'README_{dataset}.md') + with open(dataset_md_file) as src_f: + for line in src_f: + dst_f.write(line) + dst_f.write('\n') + os.remove(dataset_md_file) + + +if __name__ == '__main__': + main() diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..efd430579 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at chenkaidev@gmail.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..6ffa7b2e6 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,53 @@ +# Contributing to mmsegmentation + +All kinds of contributions are welcome, including but not limited to the following. + +- Fixes (typo, bugs) +- New features and components + +## Workflow + +1. fork and pull the latest mmsegmentation +2. checkout a new branch (do not use master branch for PRs) +3. commit your changes +4. create a PR + +Note +- If you plan to add some new features that involve large changes, it is encouraged to open an issue for discussion first. +- If you are the author of some papers and would like to include your method to mmsegmentation, +please contact Kai Chen (chenkaidev[at]gmail[dot]com). We will much appreciate your contribution. + +## Code style + +### Python +We adopt [PEP8](https://www.python.org/dev/peps/pep-0008/) as the preferred code style. + +We use the following tools for linting and formatting: +- [flake8](http://flake8.pycqa.org/en/latest/): linter +- [yapf](https://github.com/google/yapf): formatter +- [isort](https://github.com/timothycrosley/isort): sort imports + +Style configurations of yapf and isort can be found in [.style.yapf](../.style.yapf) and [.isort.cfg](../.isort.cfg). + +We use [pre-commit hook](https://pre-commit.com/) that checks and formats for `flake8`, `yapf`, `isort`, `trailing whitespaces`, + fixes `end-of-files`, sorts `requirments.txt` automatically on every commit. +The config for a pre-commit hook is stored in [.pre-commit-config](../.pre-commit-config.yaml). + +After you clone the repository, you will need to install initialize pre-commit hook. + +``` +pip install -U pre-commit +``` + +From the repository folder +``` +pre-commit install +``` + +After this on every commit check code linters and formatter will be enforced. + + +>Before you create a PR, make sure that your code lints and is formatted by yapf. + +### C++ and CUDA +We follow the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..3ba13e0ce --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/error-report.md b/.github/ISSUE_TEMPLATE/error-report.md new file mode 100644 index 000000000..1b129c157 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/error-report.md @@ -0,0 +1,41 @@ +--- +name: Error report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +Thanks for your error report and we appreciate it a lot. + +**Checklist** +1. I have searched related issues but cannot get the expected help. +2. The bug has not been fixed in the latest version. + +**Describe the bug** +A clear and concise description of what the bug is. + +**Reproduction** +1. What command or script did you run? +``` +A placeholder for the command. +``` +2. Did you make any modifications on the code or config? Did you understand what you have modified? +3. What dataset did you use? + +**Environment** + +1. Please run `python mmseg/utils/collect_env.py` to collect necessary environment infomation and paste it here. +2. You may add addition that may be helpful for locating the problem, such as + - How you installed PyTorch [e.g., pip, conda, source] + - Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.) + +**Error traceback** +If applicable, paste the error trackback here. +``` +A placeholder for trackback. +``` + +**Bug fix** +If you have already identified the reason, you can provide the information here. If you are willing to create a PR to fix it, please also leave a comment here and that would be much appreciated! diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..33f9d5f23 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Describe the feature** + +**Motivation** +A clear and concise description of the motivation of the feature. +Ex1. It is inconvenient when [....]. +Ex2. There is a recent paper [....], which is very helpful for [....]. + +**Related resources** +If there is an official code release or third-party implementations, please also provide the information here, which would be very helpful. + +**Additional context** +Add any other context or screenshots about the feature request here. +If you would like to implement the feature and create a PR, please leave a comment here and that would be much appreciated. diff --git a/.github/ISSUE_TEMPLATE/general_questions.md b/.github/ISSUE_TEMPLATE/general_questions.md new file mode 100644 index 000000000..b5a6451a6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/general_questions.md @@ -0,0 +1,8 @@ +--- +name: General questions +about: Ask general questions to get help +title: '' +labels: '' +assignees: '' + +--- diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..68afd6e5e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,101 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: build + +on: [push, pull_request] + +jobs: + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Install linting dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 isort==4.3.21 yapf interrogate + - name: Lint with flake8 + run: flake8 . + - name: Lint with isort + run: isort --recursive --check-only --diff mmseg/ tests/ examples/ + - name: Format python codes with yapf + run: yapf -r -d mmseg/ tests/ examples/ + - name: Check docstring + run: interrogate -v --ignore-init-method --ignore-module --ignore-nested-functions --exclude mmseg/ops --ignore-regex "__repr__" --fail-under 80 mmseg + + build: + env: + CUDA: 10.1.105-1 + CUDA_SHORT: 10.1 + UBUNTU_VERSION: ubuntu1804 + FORCE_CUDA: 1 + MMCV_CUDA_ARGS: -gencode=arch=compute_61,code=sm_61 + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6, 3.7] + torch: [1.3.0+cpu, 1.5.0+cpu] + include: + - torch: 1.3.0+cpu + torchvision: 0.4.2+cpu + - torch: 1.5.0+cpu + torchvision: 0.6.0+cpu + - torch: 1.5.0+cpu + torchvision: 0.6.0+cpu + python-version: 3.8 + - torch: 1.5.0+cu101 + torchvision: 0.6.0+cu101 + python-version: 3.7 + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install CUDA + if: ${{matrix.torch == '1.5.0+cu101'}} + run: | + export INSTALLER=cuda-repo-${UBUNTU_VERSION}_${CUDA}_amd64.deb + wget http://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/${INSTALLER} + sudo dpkg -i ${INSTALLER} + wget https://developer.download.nvidia.com/compute/cuda/repos/${UBUNTU_VERSION}/x86_64/7fa2af80.pub + sudo apt-key add 7fa2af80.pub + sudo apt update -qq + sudo apt install -y cuda-${CUDA_SHORT/./-} cuda-cufft-dev-${CUDA_SHORT/./-} + sudo apt clean + export CUDA_HOME=/usr/local/cuda-${CUDA_SHORT} + export LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${CUDA_HOME}/include:${LD_LIBRARY_PATH} + export PATH=${CUDA_HOME}/bin:${PATH} + sudo apt-get install -y ninja-build + - name: Install Pillow + if: ${{matrix.torchvision == '0.4.2+cpu'}} + run: pip install Pillow==6.2.2 + - name: Install PyTorch + run: pip install torch==${{matrix.torch}} torchvision==${{matrix.torchvision}} -f https://download.pytorch.org/whl/torch_stable.html + - name: Install mmseg dependencies + run: | + pip install mmcv-full==latest+torch${{matrix.torch}} -f https://openmmlab.oss-accelerate.aliyuncs.com/mmcv/dist/index.html + pip install -r requirements.txt + - name: Build and install + run: rm -rf .eggs && pip install -e . + - name: Run unittests and generate coverage report + run: | + coverage run --branch --source mmseg -m pytest tests/ + coverage xml + coverage report -m --omit="mmseg/utils/*","mmseg/apis/*" + # Only upload coverage report for python3.7 && pytorch1.5 + - name: Upload coverage to Codecov + if: ${{matrix.torch == '1.5.0+cu101' && matrix.python-version == '3.7'}} + uses: codecov/codecov-action@v1.0.10 + with: + file: ./coverage.xml + flags: unittests + env_vars: OS,PYTHON + name: codecov-umbrella + fail_ci_if_error: false diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..77824a97a --- /dev/null +++ b/.gitignore @@ -0,0 +1,118 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +mmseg/version.py +data +.vscode +.idea + +# custom +*.pkl +*.pkl.json +*.log.json +work_dirs/ + +# Pytorch +*.pth diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..9e6d30895 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +repos: + - repo: https://gitlab.com/pycqa/flake8.git + rev: 3.8.3 + hooks: + - id: flake8 + - repo: https://github.com/asottile/seed-isort-config + rev: v2.2.0 + hooks: + - id: seed-isort-config + - repo: https://github.com/timothycrosley/isort + rev: 4.3.21 + hooks: + - id: isort + - repo: https://github.com/pre-commit/mirrors-yapf + rev: v0.30.0 + hooks: + - id: yapf + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.1.0 + hooks: + - id: trailing-whitespace + - id: check-yaml + - id: end-of-file-fixer + - id: requirements-txt-fixer + - id: double-quote-string-fixer + - id: check-merge-conflict + - id: fix-encoding-pragma + args: ["--remove"] + - id: mixed-line-ending + args: ["--fix=lf"] + - repo: https://github.com/myint/docformatter + rev: v1.3.1 + hooks: + - id: docformatter + args: ["--in-place", "--wrap-descriptions", "79"] diff --git a/.style.yapf b/.style.yapf new file mode 100644 index 000000000..286a3f1d7 --- /dev/null +++ b/.style.yapf @@ -0,0 +1,4 @@ +[style] +BASED_ON_STYLE = pep8 +BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = true +SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN = true diff --git a/LICENSE b/LICENSE index 080fc4ea8..38e625bf5 100644 --- a/LICENSE +++ b/LICENSE @@ -200,4 +200,4 @@ Copyright 2020 The MMSegmentation Authors. All rights reserved. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 000000000..9e7cf39b3 --- /dev/null +++ b/README.md @@ -0,0 +1,96 @@ +
+ +
+ +## Introduction + +MMSegmentation is an open source semantic segmentation toolbox based on PyTorch. +It is a part of the OpenMMLab project. + +The master branch works with **PyTorch 1.3 to 1.5**. + +![demo image](resources/seg_demo.gif) + +### Major features + +- **Unified Benchmark** + + We provide a unified benchmark toolbox for various semantic segmentation methods. + +- **Modular Design** + + We decompose the semantic segmentation framework into different components and one can easily construct a customized semantic segmentation framework by combining different modules. + +- **Support of multiple methods out of box** + + The toolbox directly supports popular and contemporary semantic segmentation frameworks, *e.g.* PSPNet, DeepLabV3, PSANet, DeepLabV3+, etc. + +- **High efficiency** + + The training speed is faster than or comparable to other codebases. + +## License + +This project is released under the [Apache 2.0 license](LICENSE). + +## Benchmark and model zoo + +Results and models are available in the [model zoo](docs/model_zoo.md). + +Supported backbones: +- [x] ResNet +- [x] ResNeXt +- [x] HRNet + +Supported methods: +- [x] [FCN](configs/fcn) +- [x] [PSPNet](configs/pspnet) +- [x] [DeepLabV3](configs/deeplabv3) +- [x] [PSANet](configs/psanet) +- [x] [DeepLabV3+](configs/deeplabv3plus) +- [x] [UPerNet](configs/upernet) +- [x] [NonLocal Net](configs/nonlocal_net) +- [x] [CCNet](configs/ccnet) +- [x] [DANet](configs/danet) +- [x] [GCNet](configs/gcnet) +- [x] [ANN](configs/ann) +- [x] [OCRNet](configs/ocrnet) + +## Installation + +Please refer to [INSTALL.md](docs/install.md) for installation and dataset preparation. + +## Get Started + +Please see [getting_started.md](docs/getting_started.md) for the basic usage of MMSegmentation. +There are also tutorials for [adding new dataset](docs/tutorials/new_dataset.md), [designing data pipeline](docs/tutorials/data_pipeline.md), and [adding new modules](docs/tutorials/new_modules.md). + +## Contributing + +We appreciate all contributions to improve MMSegmentation. Please refer to [CONTRIBUTING.md](.github/CONTRIBUTING.md) for the contributing guideline. + +## Acknowledgement + +MMSegmentation is an open source project that welcome any contribution and feedback. +We wish that the toolbox and benchmark could serve the growing research +community by providing a flexible as well as standardized toolkit to reimplement existing methods +and develop their own new semantic segmentation methods. + +Many thanks to Ruobing Han ([@drcut](https://github.com/drcut)), Xiaoming Ma([@aishangmaxiaoming](https://github.com/aishangmaxiaoming)), Shiguang Wang ([@sunnyxiaohu](https://github.com/sunnyxiaohu)) for deployment support. + +## Citation + +If you use this toolbox or benchmark in your research, please cite this project. + +``` +@misc{mmseg2020, + author={Xu, Jiarui and Chen, Kai and Lin, Dahua}, + title={{MMSegmenation}}, + howpublished={\url{https://github.com/open-mmlab/mmsegmentation}}, + year={2020} +} +``` + +## Contact + +This repo is currently maintained by Jiarui Xu ([@xvjiarui](https://github.com/xvjiarui)), Kai Chen ([@hellock](http://github.com/hellock)). diff --git a/configs/_base_/datasets/ade20k.py b/configs/_base_/datasets/ade20k.py new file mode 100644 index 000000000..a1d9baba7 --- /dev/null +++ b/configs/_base_/datasets/ade20k.py @@ -0,0 +1,54 @@ +# dataset settings +dataset_type = 'ADE20KDataset' +data_root = 'data/ade/ADEChallengeData2016' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +crop_size = (512, 512) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations', reduce_zero_label=True), + dict(type='Resize', img_scale=(2048, 512), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 512), + # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=4, + workers_per_gpu=4, + train=dict( + type=dataset_type, + data_root=data_root, + img_dir='images/training', + ann_dir='annotations/training', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + data_root=data_root, + img_dir='images/validation', + ann_dir='annotations/validation', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + data_root=data_root, + img_dir='images/validation', + ann_dir='annotations/validation', + pipeline=test_pipeline)) diff --git a/configs/_base_/datasets/cityscapes.py b/configs/_base_/datasets/cityscapes.py new file mode 100644 index 000000000..21cf5c395 --- /dev/null +++ b/configs/_base_/datasets/cityscapes.py @@ -0,0 +1,54 @@ +# dataset settings +dataset_type = 'CityscapesDataset' +data_root = 'data/cityscapes/' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +crop_size = (512, 1024) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict(type='Resize', img_scale=(2048, 1024), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + type=dataset_type, + data_root=data_root, + img_dir='leftImg8bit/train', + ann_dir='gtFine/train', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + data_root=data_root, + img_dir='leftImg8bit/val', + ann_dir='gtFine/val', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + data_root=data_root, + img_dir='leftImg8bit/val', + ann_dir='gtFine/val', + pipeline=test_pipeline)) diff --git a/configs/_base_/datasets/cityscapes_769x769.py b/configs/_base_/datasets/cityscapes_769x769.py new file mode 100644 index 000000000..a5bcff371 --- /dev/null +++ b/configs/_base_/datasets/cityscapes_769x769.py @@ -0,0 +1,35 @@ +_base_ = './cityscapes.py' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +crop_size = (769, 769) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict(type='Resize', img_scale=(2049, 1025), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2049, 1025), + # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) diff --git a/configs/_base_/datasets/pascal_voc12.py b/configs/_base_/datasets/pascal_voc12.py new file mode 100644 index 000000000..6a367c7f1 --- /dev/null +++ b/configs/_base_/datasets/pascal_voc12.py @@ -0,0 +1,57 @@ +# dataset settings +dataset_type = 'PascalVOCDataset' +data_root = 'data/VOCdevkit/VOC2012' +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +crop_size = (512, 512) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict(type='Resize', img_scale=(2048, 512), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 512), + # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + samples_per_gpu=4, + workers_per_gpu=4, + train=dict( + type=dataset_type, + data_root=data_root, + img_dir='JPEGImages', + ann_dir='SegmentationClass', + split='ImageSets/Segmentation/train.txt', + pipeline=train_pipeline), + val=dict( + type=dataset_type, + data_root=data_root, + img_dir='JPEGImages', + ann_dir='SegmentationClass', + split='ImageSets/Segmentation/val.txt', + pipeline=test_pipeline), + test=dict( + type=dataset_type, + data_root=data_root, + img_dir='JPEGImages', + ann_dir='SegmentationClass', + split='ImageSets/Segmentation/val.txt', + pipeline=test_pipeline)) diff --git a/configs/_base_/datasets/pascal_voc12_aug.py b/configs/_base_/datasets/pascal_voc12_aug.py new file mode 100644 index 000000000..3f23b6717 --- /dev/null +++ b/configs/_base_/datasets/pascal_voc12_aug.py @@ -0,0 +1,9 @@ +_base_ = './pascal_voc12.py' +# dataset settings +data = dict( + train=dict( + ann_dir=['SegmentationClass', 'SegmentationClassAug'], + split=[ + 'ImageSets/Segmentation/train.txt', + 'ImageSets/Segmentation/aug.txt' + ])) diff --git a/configs/_base_/default_runtime.py b/configs/_base_/default_runtime.py new file mode 100644 index 000000000..b564cc4e7 --- /dev/null +++ b/configs/_base_/default_runtime.py @@ -0,0 +1,14 @@ +# yapf:disable +log_config = dict( + interval=50, + hooks=[ + dict(type='TextLoggerHook', by_epoch=False), + # dict(type='TensorboardLoggerHook') + ]) +# yapf:enable +dist_params = dict(backend='nccl') +log_level = 'INFO' +load_from = None +resume_from = None +workflow = [('train', 1)] +cudnn_benchmark = True diff --git a/configs/_base_/models/ann_r50-d8.py b/configs/_base_/models/ann_r50-d8.py new file mode 100644 index 000000000..c2287b479 --- /dev/null +++ b/configs/_base_/models/ann_r50-d8.py @@ -0,0 +1,46 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='ANNHead', + in_channels=[1024, 2048], + in_index=[2, 3], + channels=512, + project_channels=256, + query_scales=(1, ), + key_pool_scales=(1, 3, 6, 8), + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/ccnet_r50-d8.py b/configs/_base_/models/ccnet_r50-d8.py new file mode 100644 index 000000000..9f2794c33 --- /dev/null +++ b/configs/_base_/models/ccnet_r50-d8.py @@ -0,0 +1,44 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='CCHead', + in_channels=2048, + in_index=3, + channels=512, + recurrence=2, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/danet_r50-d8.py b/configs/_base_/models/danet_r50-d8.py new file mode 100644 index 000000000..76a27054e --- /dev/null +++ b/configs/_base_/models/danet_r50-d8.py @@ -0,0 +1,44 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='DAHead', + in_channels=2048, + in_index=3, + channels=512, + pam_channels=64, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/deeplabv3_r50-d8.py b/configs/_base_/models/deeplabv3_r50-d8.py new file mode 100644 index 000000000..00c1f8796 --- /dev/null +++ b/configs/_base_/models/deeplabv3_r50-d8.py @@ -0,0 +1,44 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='ASPPHead', + in_channels=2048, + in_index=3, + channels=512, + dilations=(1, 12, 24, 36), + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/deeplabv3plus_r50-d8.py b/configs/_base_/models/deeplabv3plus_r50-d8.py new file mode 100644 index 000000000..f930b154f --- /dev/null +++ b/configs/_base_/models/deeplabv3plus_r50-d8.py @@ -0,0 +1,46 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='DepthwiseSeparableASPPHead', + in_channels=2048, + in_index=3, + channels=512, + dilations=(1, 12, 24, 36), + c1_in_channels=256, + c1_channels=48, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/encnet_r50-d8.py b/configs/_base_/models/encnet_r50-d8.py new file mode 100644 index 000000000..46fffa1f8 --- /dev/null +++ b/configs/_base_/models/encnet_r50-d8.py @@ -0,0 +1,48 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='EncHead', + in_channels=[512, 1024, 2048], + in_index=(1, 2, 3), + channels=512, + num_codes=32, + use_se_loss=True, + add_lateral=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), + loss_se_decode=dict( + type='CrossEntropyLoss', use_sigmoid=True, loss_weight=0.2)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/fcn_hr18.py b/configs/_base_/models/fcn_hr18.py new file mode 100644 index 000000000..e2583a2ac --- /dev/null +++ b/configs/_base_/models/fcn_hr18.py @@ -0,0 +1,52 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://msra/hrnetv2_w18', + backbone=dict( + type='HRNet', + norm_cfg=norm_cfg, + norm_eval=False, + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(18, 36)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(18, 36, 72)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(18, 36, 72, 144)))), + decode_head=dict( + type='FCNHead', + in_channels=[18, 36, 72, 144], + in_index=(0, 1, 2, 3), + channels=sum([18, 36, 72, 144]), + input_transform='resize_concat', + kernel_size=1, + num_convs=1, + concat_input=False, + drop_out_ratio=-1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/fcn_r50-d8.py b/configs/_base_/models/fcn_r50-d8.py new file mode 100644 index 000000000..08546755c --- /dev/null +++ b/configs/_base_/models/fcn_r50-d8.py @@ -0,0 +1,45 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='FCNHead', + in_channels=2048, + in_index=3, + channels=512, + num_convs=2, + concat_input=True, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/gcnet_r50-d8.py b/configs/_base_/models/gcnet_r50-d8.py new file mode 100644 index 000000000..9057687c0 --- /dev/null +++ b/configs/_base_/models/gcnet_r50-d8.py @@ -0,0 +1,46 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='GCHead', + in_channels=2048, + in_index=3, + channels=512, + ratio=1 / 4., + pooling_type='att', + fusion_types=('channel_add', ), + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/nonlocal_r50-d8.py b/configs/_base_/models/nonlocal_r50-d8.py new file mode 100644 index 000000000..7fa88f9a5 --- /dev/null +++ b/configs/_base_/models/nonlocal_r50-d8.py @@ -0,0 +1,46 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='NLHead', + in_channels=2048, + in_index=3, + channels=512, + drop_out_ratio=0.1, + reduction=2, + use_scale=True, + mode='embedded_gaussian', + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/ocrnet_hr18.py b/configs/_base_/models/ocrnet_hr18.py new file mode 100644 index 000000000..4053daa0b --- /dev/null +++ b/configs/_base_/models/ocrnet_hr18.py @@ -0,0 +1,68 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='CascadeEncoderDecoder', + num_stages=2, + pretrained='open-mmlab://msra/hrnetv2_w18', + backbone=dict( + type='HRNet', + norm_cfg=norm_cfg, + norm_eval=False, + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(18, 36)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(18, 36, 72)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(18, 36, 72, 144)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[18, 36, 72, 144], + channels=sum([18, 36, 72, 144]), + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + kernel_size=1, + num_convs=1, + concat_input=False, + drop_out_ratio=-1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[18, 36, 72, 144], + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + channels=512, + ocr_channels=256, + drop_out_ratio=-1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + ]) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/psanet_r50-d8.py b/configs/_base_/models/psanet_r50-d8.py new file mode 100644 index 000000000..170b48f45 --- /dev/null +++ b/configs/_base_/models/psanet_r50-d8.py @@ -0,0 +1,49 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='PSAHead', + in_channels=2048, + in_index=3, + channels=512, + mask_size=(97, 97), + psa_type='bi-direction', + compact=False, + shrink_factor=2, + normalization_factor=1.0, + psa_softmax=True, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/pspnet_r50-d8.py b/configs/_base_/models/pspnet_r50-d8.py new file mode 100644 index 000000000..c5bb885c5 --- /dev/null +++ b/configs/_base_/models/pspnet_r50-d8.py @@ -0,0 +1,44 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='PSPHead', + in_channels=2048, + in_index=3, + channels=512, + pool_scales=(1, 2, 3, 6), + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/models/upernet_r50.py b/configs/_base_/models/upernet_r50.py new file mode 100644 index 000000000..7d736f6bc --- /dev/null +++ b/configs/_base_/models/upernet_r50.py @@ -0,0 +1,44 @@ +# model settings +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='open-mmlab://resnet50_v1c', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 1, 1), + strides=(1, 2, 2, 2), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='UPerHead', + in_channels=[256, 512, 1024, 2048], + in_index=[0, 1, 2, 3], + pool_scales=(1, 2, 3, 6), + channels=512, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), + auxiliary_head=dict( + type='FCNHead', + in_channels=1024, + in_index=2, + channels=256, + num_convs=1, + concat_input=False, + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) +# model training and testing settings +train_cfg = dict() +test_cfg = dict(mode='whole') diff --git a/configs/_base_/schedules/schedule_160k.py b/configs/_base_/schedules/schedule_160k.py new file mode 100644 index 000000000..8fe4b04d2 --- /dev/null +++ b/configs/_base_/schedules/schedule_160k.py @@ -0,0 +1,9 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) +optimizer_config = dict() +# learning policy +lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) +# runtime settings +total_iters = 160000 +checkpoint_config = dict(by_epoch=False, interval=16000) +evaluation = dict(interval=16000, metric='mIoU') diff --git a/configs/_base_/schedules/schedule_20k.py b/configs/_base_/schedules/schedule_20k.py new file mode 100644 index 000000000..d3903d645 --- /dev/null +++ b/configs/_base_/schedules/schedule_20k.py @@ -0,0 +1,9 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) +optimizer_config = dict() +# learning policy +lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) +# runtime settings +total_iters = 20000 +checkpoint_config = dict(by_epoch=False, interval=2000) +evaluation = dict(interval=2000, metric='mIoU') diff --git a/configs/_base_/schedules/schedule_40k.py b/configs/_base_/schedules/schedule_40k.py new file mode 100644 index 000000000..b1449219c --- /dev/null +++ b/configs/_base_/schedules/schedule_40k.py @@ -0,0 +1,9 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) +optimizer_config = dict() +# learning policy +lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) +# runtime settings +total_iters = 40000 +checkpoint_config = dict(by_epoch=False, interval=4000) +evaluation = dict(interval=4000, metric='mIoU') diff --git a/configs/_base_/schedules/schedule_80k.py b/configs/_base_/schedules/schedule_80k.py new file mode 100644 index 000000000..3a77b41d4 --- /dev/null +++ b/configs/_base_/schedules/schedule_80k.py @@ -0,0 +1,9 @@ +# optimizer +optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) +optimizer_config = dict() +# learning policy +lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) +# runtime settings +total_iters = 80000 +checkpoint_config = dict(by_epoch=False, interval=8000) +evaluation = dict(interval=8000, metric='mIoU') diff --git a/configs/ann/README.md b/configs/ann/README.md new file mode 100644 index 000000000..e3e217c4b --- /dev/null +++ b/configs/ann/README.md @@ -0,0 +1,46 @@ +# Asymmetric Non-local Neural Networks for Semantic Segmentation + +## Introduction +``` +@inproceedings{annn, + author = {Zhen Zhu and + Mengde Xu and + Song Bai and + Tengteng Huang and + Xiang Bai}, + title = {Asymmetric Non-local Neural Networks for Semantic Segmentation}, + booktitle={International Conference on Computer Vision}, + year = {2019}, + url = {http://arxiv.org/abs/1908.07678}, +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ANN | R-50-D8 | 512x1024 | 40000 | 6 | 3.71 | 77.40 | 78.57 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211-049fc292.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211.log.json) | +| ANN | R-101-D8 | 512x1024 | 40000 | 9.5 | 2.55 | 76.55 | 78.85 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243-adf6eece.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243.log.json) | +| ANN | R-50-D8 | 769x769 | 40000 | 6.8 | 1.70 | 78.89 | 80.46 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712-2b46b04d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712.log.json) | +| ANN | R-101-D8 | 769x769 | 40000 | 10.7 | 1.15 | 79.32 | 80.94 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720-059bff28.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720.log.json) | +| ANN | R-50-D8 | 512x1024 | 80000 | - | - | 77.34 | 78.65 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911-5a9ad545.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911.log.json) | +| ANN | R-101-D8 | 512x1024 | 80000 | - | - | 77.14 | 78.81 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728-aceccc6e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728.log.json) | +| ANN | R-50-D8 | 769x769 | 80000 | - | - | 78.88 | 80.57 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426-cc7ff323.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426.log.json) | +| ANN | R-101-D8 | 769x769 | 80000 | - | - | 78.80 | 80.34 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713-a9d4be8d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ANN | R-50-D8 | 512x512 | 80000 | 9.1 | 21.01 | 41.01 | 42.30 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818-26f75e11.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818.log.json) | +| ANN | R-101-D8 | 512x512 | 80000 | 12.5 | 14.12 | 42.94 | 44.18 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818-c0153543.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818.log.json) | +| ANN | R-50-D8 | 512x512 | 160000 | - | - | 41.74 | 42.62 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733-892247bc.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733.log.json) | +| ANN | R-101-D8 | 512x512 | 160000 | - | - | 42.94 | 44.06 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733-955eb1ec.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ANN | R-50-D8 | 512x512 | 20000 | 6 | 20.92 | 74.86 | 76.13 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246-dfcb1c62.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246.log.json) | +| ANN | R-101-D8 | 512x512 | 20000 | 9.5 | 13.94 | 77.47 | 78.70 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246-2fad0042.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246.log.json) | +| ANN | R-50-D8 | 512x512 | 40000 | - | - | 76.56 | 77.51 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314-b5dac322.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314.log.json) | +| ANN | R-101-D8 | 512x512 | 40000 | - | - | 76.70 | 78.06 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314-bd205bbe.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314.log.json) | diff --git a/configs/ann/ann_r101-d8_512x1024_40k_cityscapes.py b/configs/ann/ann_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..d494e0733 --- /dev/null +++ b/configs/ann/ann_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_512x1024_80k_cityscapes.py b/configs/ann/ann_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..1eeff0b03 --- /dev/null +++ b/configs/ann/ann_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_512x512_160k_ade20k.py b/configs/ann/ann_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..9e43af541 --- /dev/null +++ b/configs/ann/ann_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_512x512_20k_voc12aug.py b/configs/ann/ann_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..d854f2e42 --- /dev/null +++ b/configs/ann/ann_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_512x512_40k_voc12aug.py b/configs/ann/ann_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..893c53b1c --- /dev/null +++ b/configs/ann/ann_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_512x512_80k_ade20k.py b/configs/ann/ann_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..a64dac670 --- /dev/null +++ b/configs/ann/ann_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_769x769_40k_cityscapes.py b/configs/ann/ann_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..595082484 --- /dev/null +++ b/configs/ann/ann_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r101-d8_769x769_80k_cityscapes.py b/configs/ann/ann_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..a9c712d1c --- /dev/null +++ b/configs/ann/ann_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ann_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ann/ann_r50-d8_512x1024_40k_cityscapes.py b/configs/ann/ann_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..00b2594ba --- /dev/null +++ b/configs/ann/ann_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/ann/ann_r50-d8_512x1024_80k_cityscapes.py b/configs/ann/ann_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..ef7b369dd --- /dev/null +++ b/configs/ann/ann_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/ann/ann_r50-d8_512x512_160k_ade20k.py b/configs/ann/ann_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..ca6bb248a --- /dev/null +++ b/configs/ann/ann_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/ann/ann_r50-d8_512x512_20k_voc12aug.py b/configs/ann/ann_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..071f19026 --- /dev/null +++ b/configs/ann/ann_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/ann/ann_r50-d8_512x512_40k_voc12aug.py b/configs/ann/ann_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..82a1c9386 --- /dev/null +++ b/configs/ann/ann_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/ann/ann_r50-d8_512x512_80k_ade20k.py b/configs/ann/ann_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..5e04aa7c6 --- /dev/null +++ b/configs/ann/ann_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/ann/ann_r50-d8_769x769_40k_cityscapes.py b/configs/ann/ann_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..393a400be --- /dev/null +++ b/configs/ann/ann_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/ann/ann_r50-d8_769x769_80k_cityscapes.py b/configs/ann/ann_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..7861a372e --- /dev/null +++ b/configs/ann/ann_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/ann_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/ccnet/README.md b/configs/ccnet/README.md new file mode 100644 index 000000000..436a96234 --- /dev/null +++ b/configs/ccnet/README.md @@ -0,0 +1,41 @@ +# CCNet: Criss-Cross Attention for Semantic Segmentation + +## Introduction +``` +@article{huang2018ccnet, + title={CCNet: Criss-Cross Attention for Semantic Segmentation}, + author={Huang, Zilong and Wang, Xinggang and Huang, Lichao and Huang, Chang and Wei, Yunchao and Liu, Wenyu}, + booktitle={ICCV}, + year={2019} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| CCNet | R-50-D8 | 512x1024 | 40000 | 6 | 3.32 | 77.76 | 78.87 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517-4123f401.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517.log.json) | +| CCNet | R-101-D8 | 512x1024 | 40000 | 9.5 | 2.31 | 76.35 | 78.19 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540-a3b84ba6.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540.log.json) | +| CCNet | R-50-D8 | 769x769 | 40000 | 6.8 | 1.43 | 78.46 | 79.93 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125-76d11884.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125.log.json) | +| CCNet | R-101-D8 | 769x769 | 40000 | 10.7 | 1.01 | 76.94 | 78.62 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428-4f57c8d0.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428.log.json) | +| CCNet | R-50-D8 | 512x1024 | 80000 | - | - | 79.03 | 80.16 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421-869a3423.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421.log.json) | +| CCNet | R-101-D8 | 512x1024 | 80000 | - | - | 78.87 | 79.90 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935-ffae8917.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935.log.json) | +| CCNet | R-50-D8 | 769x769 | 80000 | - | - | 79.29 | 81.08 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421-73eed8ca.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421.log.json) | +| CCNet | R-101-D8 | 769x769 | 80000 | - | - | 79.45 | 80.66 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502-ad3cd481.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| CCNet | R-50-D8 | 512x512 | 80000 | 8.8 | 20.89 | 41.78 | 42.98 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848-aa37f61e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848.log.json) | +| CCNet | R-101-D8 | 512x512 | 80000 | 12.2 | 14.11 | 43.97 | 45.13 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848-1f4929a3.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848.log.json) | +| CCNet | R-50-D8 | 512x512 | 160000 | - | - | 42.08 | 43.13 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435-7c97193b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435.log.json) | +| CCNet | R-101-D8 | 512x512 | 160000 | - | - | 43.71 | 45.04 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644-e849e007.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| CCNet | R-50-D8 | 512x512 | 20000 | 6 | 20.45 | 76.17 | 77.51 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212-fad81784.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212.log.json) | +| CCNet | R-101-D8 | 512x512 | 20000 | 9.5 | 13.64 | 77.27 | 79.02 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212-0007b61d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212.log.json) | +| CCNet | R-50-D8 | 512x512 | 40000 | - | - | 75.96 | 77.04 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127-c2a15f02.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127.log.json) | +| CCNet | R-101-D8 | 512x512 | 40000 | - | - | 77.87 | 78.90 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127-c30da577.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127.log.json) | diff --git a/configs/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes.py b/configs/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..d2bac38ca --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes.py b/configs/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..989928ab7 --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_512x512_160k_ade20k.py b/configs/ccnet/ccnet_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..c32bf4875 --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_512x512_20k_voc12aug.py b/configs/ccnet/ccnet_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..53eb77c0c --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_512x512_40k_voc12aug.py b/configs/ccnet/ccnet_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..d7eb668f3 --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_512x512_80k_ade20k.py b/configs/ccnet/ccnet_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..029c1d525 --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_769x769_40k_cityscapes.py b/configs/ccnet/ccnet_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..43f05fab0 --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r101-d8_769x769_80k_cityscapes.py b/configs/ccnet/ccnet_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..654f377b6 --- /dev/null +++ b/configs/ccnet/ccnet_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './ccnet_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes.py b/configs/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..6a4316dde --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes.py b/configs/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..16e34356e --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/ccnet/ccnet_r50-d8_512x512_160k_ade20k.py b/configs/ccnet/ccnet_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..1ad94d898 --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/ccnet/ccnet_r50-d8_512x512_20k_voc12aug.py b/configs/ccnet/ccnet_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..bbcd29cce --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/ccnet/ccnet_r50-d8_512x512_40k_voc12aug.py b/configs/ccnet/ccnet_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..947b8ac8c --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/ccnet/ccnet_r50-d8_512x512_80k_ade20k.py b/configs/ccnet/ccnet_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..1a1f49cf6 --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/ccnet/ccnet_r50-d8_769x769_40k_cityscapes.py b/configs/ccnet/ccnet_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..d7fd8ccc5 --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/ccnet/ccnet_r50-d8_769x769_80k_cityscapes.py b/configs/ccnet/ccnet_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..6d3b3498b --- /dev/null +++ b/configs/ccnet/ccnet_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/ccnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/danet/README.md b/configs/danet/README.md new file mode 100644 index 000000000..5550890de --- /dev/null +++ b/configs/danet/README.md @@ -0,0 +1,41 @@ +# Dual Attention Network for Scene Segmentation + +## Introduction +``` +@article{fu2018dual, + title={Dual Attention Network for Scene Segmentation}, + author={Jun Fu, Jing Liu, Haijie Tian, Yong Li, Yongjun Bao, Zhiwei Fang,and Hanqing Lu}, + booktitle={The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, + year={2019} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DANet | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.66 | 78.74 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324-c0dbfa5f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324.log.json) | +| DANet | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.99 | 80.52 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831-c57a7157.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831.log.json) | +| DANet | R-50-D8 | 769x769 | 40000 | 8.8 | 1.56 | 78.88 | 80.62 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703-76681c60.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703.log.json) | +| DANet | R-101-D8 | 769x769 | 40000 | 12.8 | 1.07 | 79.88 | 81.47 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717-dcb7fd4e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717.log.json) | +| DANet | R-50-D8 | 512x1024 | 80000 | - | - | 79.34 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029-2bfa2293.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029.log.json) | +| DANet | R-101-D8 | 512x1024 | 80000 | - | - | 80.41 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918-955e6350.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918.log.json) | +| DANet | R-50-D8 | 769x769 | 80000 | - | - | 79.27 | 80.96 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954-495689b4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954.log.json) | +| DANet | R-101-D8 | 769x769 | 80000 | - | - | 80.47 | 82.02 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918-f3a929e7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DANet | R-50-D8 | 512x512 | 80000 | 11.5 | 21.20 | 41.66 | 42.90 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125-edb18e08.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125.log.json) | +| DANet | R-101-D8 | 512x512 | 80000 | 15 | 14.18 | 43.64 | 45.19 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126-d0357c73.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126.log.json) | +| DANet | R-50-D8 | 512x512 | 160000 | - | - | 42.45 | 43.25 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340-9cb35dcd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340.log.json) | +| DANet | R-101-D8 | 512x512 | 160000 | - | - | 44.17 | 45.02 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348-23bf12f9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DANet | R-50-D8 | 512x512 | 20000 | 6.5 | 20.94 | 74.45 | 75.69 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026-9e9e3ab3.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026.log.json) | +| DANet | R-101-D8 | 512x512 | 20000 | 9.9 | 13.76 | 76.02 | 77.23 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026-d48d23b2.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026.log.json) | +| DANet | R-50-D8 | 512x512 | 40000 | - | - | 76.37 | 77.29 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526-426e3a64.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526.log.json) | +| DANet | R-101-D8 | 512x512 | 40000 | - | - | 76.51 | 77.32 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031-788e232a.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031.log.json) | diff --git a/configs/danet/danet_r101-d8_512x1024_40k_cityscapes.py b/configs/danet/danet_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..3bfb9bdb3 --- /dev/null +++ b/configs/danet/danet_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_512x1024_80k_cityscapes.py b/configs/danet/danet_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..d80b2ec16 --- /dev/null +++ b/configs/danet/danet_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_512x512_160k_ade20k.py b/configs/danet/danet_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..0f22d0fb6 --- /dev/null +++ b/configs/danet/danet_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_512x512_20k_voc12aug.py b/configs/danet/danet_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..709f93cba --- /dev/null +++ b/configs/danet/danet_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_512x512_40k_voc12aug.py b/configs/danet/danet_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..5c623eb56 --- /dev/null +++ b/configs/danet/danet_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_512x512_80k_ade20k.py b/configs/danet/danet_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..bd31bc8f2 --- /dev/null +++ b/configs/danet/danet_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_769x769_40k_cityscapes.py b/configs/danet/danet_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..597d76de7 --- /dev/null +++ b/configs/danet/danet_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r101-d8_769x769_80k_cityscapes.py b/configs/danet/danet_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..70f9b3196 --- /dev/null +++ b/configs/danet/danet_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './danet_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/danet/danet_r50-d8_512x1024_40k_cityscapes.py b/configs/danet/danet_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..1b70c5b8d --- /dev/null +++ b/configs/danet/danet_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/danet/danet_r50-d8_512x1024_80k_cityscapes.py b/configs/danet/danet_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..03734310d --- /dev/null +++ b/configs/danet/danet_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/danet/danet_r50-d8_512x512_160k_ade20k.py b/configs/danet/danet_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..22aaf857c --- /dev/null +++ b/configs/danet/danet_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/danet/danet_r50-d8_512x512_20k_voc12aug.py b/configs/danet/danet_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..010f86f1a --- /dev/null +++ b/configs/danet/danet_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/danet/danet_r50-d8_512x512_40k_voc12aug.py b/configs/danet/danet_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..0cef0f09b --- /dev/null +++ b/configs/danet/danet_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/danet/danet_r50-d8_512x512_80k_ade20k.py b/configs/danet/danet_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..154e84890 --- /dev/null +++ b/configs/danet/danet_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/danet/danet_r50-d8_769x769_40k_cityscapes.py b/configs/danet/danet_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..b8fba930a --- /dev/null +++ b/configs/danet/danet_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/danet/danet_r50-d8_769x769_80k_cityscapes.py b/configs/danet/danet_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..8b8915d85 --- /dev/null +++ b/configs/danet/danet_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/danet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/deeplabv3/README.md b/configs/deeplabv3/README.md new file mode 100644 index 000000000..37e2ee6ba --- /dev/null +++ b/configs/deeplabv3/README.md @@ -0,0 +1,43 @@ +# Rethinking atrous convolution for semantic image segmentation + +## Introduction +``` +@article{chen2017rethinking, + title={Rethinking atrous convolution for semantic image segmentation}, + author={Chen, Liang-Chieh and Papandreou, George and Schroff, Florian and Adam, Hartwig}, + journal={arXiv preprint arXiv:1706.05587}, + year={2017} +} +``` + +## Results and models + +Note: `D-8` here corresponding to the output stride 8 setting for DeepLab series. + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|-----------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DeepLabV3 | R-50-D8 | 512x1024 | 40000 | 6.1 | 2.57 | 79.09 | 80.45 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json) | +| DeepLabV3 | R-101-D8 | 512x1024 | 40000 | 9.6 | 1.92 | 77.12 | 79.61 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json) | +| DeepLabV3 | R-50-D8 | 769x769 | 40000 | 6.9 | 1.11 | 78.58 | 79.89 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json) | +| DeepLabV3 | R-101-D8 | 769x769 | 40000 | 10.9 | 0.83 | 79.27 | 80.11 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json) | +| DeepLabV3 | R-50-D8 | 512x1024 | 80000 | - | - | 79.32 | 80.57 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json) | +| DeepLabV3 | R-101-D8 | 512x1024 | 80000 | - | - | 80.20 | 81.21 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json) | +| DeepLabV3 | R-50-D8 | 769x769 | 80000 | - | - | 79.89 | 81.06 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json) | +| DeepLabV3 | R-101-D8 | 769x769 | 80000 | - | - | 79.67 | 80.81 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|-----------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DeepLabV3 | R-50-D8 | 512x512 | 80000 | 8.9 | 14.76 | 42.42 | 43.28 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 80000 | 12.4 | 10.14 | 44.08 | 45.19 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 160000 | - | - | 42.66 | 44.09 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 160000 | - | - | 45.00 | 46.66 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|-----------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DeepLabV3 | R-50-D8 | 512x512 | 20000 | 6.1 | 13.88 | 76.17 | 77.42 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 20000 | 9.6 | 9.81 | 78.70 | 79.95 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json) | +| DeepLabV3 | R-50-D8 | 512x512 | 40000 | - | - | 77.68 | 78.78 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json) | +| DeepLabV3 | R-101-D8 | 512x512 | 40000 | - | - | 77.92 | 79.18 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json) | diff --git a/configs/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes.py b/configs/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..8c707c79d --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py b/configs/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..6804a5781 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k.py b/configs/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..df6f36ef7 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug.py b/configs/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..40f5f6237 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug.py b/configs/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..fb2be22f8 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k.py b/configs/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..796ba3fb1 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes.py b/configs/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..e6d58a67b --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes.py b/configs/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..13094a98e --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes.py b/configs/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..8e7420d24 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes.py b/configs/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..132787db9 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k.py b/configs/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..742e17d74 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py b/configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..f62da1a80 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug.py b/configs/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..492bd3dfd --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k.py b/configs/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..5ddef212f --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes.py b/configs/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..fb067d211 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes.py b/configs/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..8b8692140 --- /dev/null +++ b/configs/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/deeplabv3_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/deeplabv3plus/README.md b/configs/deeplabv3plus/README.md new file mode 100644 index 000000000..591554dae --- /dev/null +++ b/configs/deeplabv3plus/README.md @@ -0,0 +1,43 @@ +# Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation + +## Introduction +``` +@inproceedings{deeplabv3plus2018, + title={Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation}, + author={Liang-Chieh Chen and Yukun Zhu and George Papandreou and Florian Schroff and Hartwig Adam}, + booktitle={ECCV}, + year={2018} +} +``` + +## Results and models + +Note: `D-8` here corresponding to the output stride 8 setting for DeepLab series. + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|------------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DeepLabV3+ | R-50-D8 | 512x1024 | 40000 | 7.5 | 3.94 | 79.61 | 81.01 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json) | +| DeepLabV3+ | R-101-D8 | 512x1024 | 40000 | 11 | 2.60 | 80.21 | 81.82 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json) | +| DeepLabV3+ | R-50-D8 | 769x769 | 40000 | 8.5 | 1.72 | 78.97 | 80.46 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json) | +| DeepLabV3+ | R-101-D8 | 769x769 | 40000 | 12.5 | 1.15 | 79.46 | 80.50 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json) | +| DeepLabV3+ | R-50-D8 | 512x1024 | 80000 | - | - | 80.09 | 81.13 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json) | +| DeepLabV3+ | R-101-D8 | 512x1024 | 80000 | - | - | 80.97 | 82.03 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json) | +| DeepLabV3+ | R-50-D8 | 769x769 | 80000 | - | - | 79.83 | 81.48 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json) | +| DeepLabV3+ | R-101-D8 | 769x769 | 80000 | - | - | 80.98 | 82.18 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20200607_000405-a7573d20.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20200607_000405.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|------------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DeepLabV3+ | R-50-D8 | 512x512 | 80000 | 10.6 | 21.01 | 42.72 | 43.75 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 80000 | 14.1 | 14.16 | 44.60 | 46.06 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 160000 | - | - | 43.95 | 44.93 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 160000 | - | - | 45.47 | 46.35 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json) | + +#### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|------------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| DeepLabV3+ | R-50-D8 | 512x512 | 20000 | 7.6 | 21 | 75.93 | 77.50 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 20000 | 11 | 13.88 | 77.22 | 78.59 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json) | +| DeepLabV3+ | R-50-D8 | 512x512 | 40000 | - | - | 76.81 | 77.57 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json) | +| DeepLabV3+ | R-101-D8 | 512x512 | 40000 | - | - | 78.62 | 79.53 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json) | diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..d6ce85aea --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..0ebbd3c70 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..a75c9d301 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..ebb1a8eae --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..3caa6cf8a --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..53fd3a909 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..c3c92eb26 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..5ea9cdb5b --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './deeplabv3plus_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..7243d0390 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/cityscapes.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..3304d3677 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/cityscapes.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..e73488095 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..1056ad4d1 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..e36c83ba6 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..870597263 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..4fcc062ca --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes.py b/configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..e0bfa9457 --- /dev/null +++ b/configs/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/deeplabv3plus_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/encnet/README.md b/configs/encnet/README.md new file mode 100644 index 000000000..9f1edde82 --- /dev/null +++ b/configs/encnet/README.md @@ -0,0 +1,34 @@ +# Context Encoding for Semantic Segmentation + +## Introduction +``` +@InProceedings{Zhang_2018_CVPR, +author = {Zhang, Hang and Dana, Kristin and Shi, Jianping and Zhang, Zhongyue and Wang, Xiaogang and Tyagi, Ambrish and Agrawal, Amit}, +title = {Context Encoding for Semantic Segmentation}, +booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, +month = {June}, +year = {2018} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| encnet | R-50-D8 | 512x1024 | 40000 | 8.6 | 4.58 | 75.67 | 77.08 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json) | +| encnet | R-101-D8 | 512x1024 | 40000 | 12.1 | 2.66 | 75.81 | 77.21 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json) | +| encnet | R-50-D8 | 769x769 | 40000 | 9.8 | 1.82 | 76.24 | 77.85 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json) | +| encnet | R-101-D8 | 769x769 | 40000 | 13.7 | 1.26 | 74.25 | 76.25 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json) | +| encnet | R-50-D8 | 512x1024 | 80000 | - | - | 77.94 | 79.13 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json) | +| encnet | R-101-D8 | 512x1024 | 80000 | - | - | 78.55 | 79.47 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json) | +| encnet | R-50-D8 | 769x769 | 80000 | - | - | 77.44 | 78.72 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json) | +| encnet | R-101-D8 | 769x769 | 80000 | - | - | 76.10 | 76.97 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| encnet | R-50-D8 | 512x512 | 80000 | 10.1 | 22.81 | 39.53 | 41.17 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json) | +| encnet | R-101-D8 | 512x512 | 80000 | 13.6 | 14.87 | 42.11 | 43.61 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json) | +| encnet | R-50-D8 | 512x512 | 160000 | - | - | 40.10 | 41.71 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json) | +| encnet | R-101-D8 | 512x512 | 160000 | - | - | 42.61 | 44.01 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json) | diff --git a/configs/encnet/encnet_r101-d8_512x1024_40k_cityscapes.py b/configs/encnet/encnet_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..f34373d9e --- /dev/null +++ b/configs/encnet/encnet_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_512x1024_80k_cityscapes.py b/configs/encnet/encnet_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..0b0207b31 --- /dev/null +++ b/configs/encnet/encnet_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_512x512_160k_ade20k.py b/configs/encnet/encnet_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..8fec6ba25 --- /dev/null +++ b/configs/encnet/encnet_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_512x512_20k_voc12aug.py b/configs/encnet/encnet_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..c264af998 --- /dev/null +++ b/configs/encnet/encnet_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_512x512_40k_voc12aug.py b/configs/encnet/encnet_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..8a6968ea5 --- /dev/null +++ b/configs/encnet/encnet_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_512x512_80k_ade20k.py b/configs/encnet/encnet_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..94151004e --- /dev/null +++ b/configs/encnet/encnet_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_769x769_40k_cityscapes.py b/configs/encnet/encnet_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..d6ade67b7 --- /dev/null +++ b/configs/encnet/encnet_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r101-d8_769x769_80k_cityscapes.py b/configs/encnet/encnet_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..55648c08b --- /dev/null +++ b/configs/encnet/encnet_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './encnet_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/encnet/encnet_r50-d8_512x1024_40k_cityscapes.py b/configs/encnet/encnet_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..4ea6ed0e8 --- /dev/null +++ b/configs/encnet/encnet_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/encnet/encnet_r50-d8_512x1024_80k_cityscapes.py b/configs/encnet/encnet_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..d2feeef7e --- /dev/null +++ b/configs/encnet/encnet_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/encnet/encnet_r50-d8_512x512_160k_ade20k.py b/configs/encnet/encnet_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..2a5dc203c --- /dev/null +++ b/configs/encnet/encnet_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/encnet/encnet_r50-d8_512x512_20k_voc12aug.py b/configs/encnet/encnet_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..9cb7952ce --- /dev/null +++ b/configs/encnet/encnet_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/encnet/encnet_r50-d8_512x512_40k_voc12aug.py b/configs/encnet/encnet_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..81f3cbfbf --- /dev/null +++ b/configs/encnet/encnet_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/encnet/encnet_r50-d8_512x512_80k_ade20k.py b/configs/encnet/encnet_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..835375cb0 --- /dev/null +++ b/configs/encnet/encnet_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/encnet/encnet_r50-d8_769x769_40k_cityscapes.py b/configs/encnet/encnet_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..9f44b425d --- /dev/null +++ b/configs/encnet/encnet_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/encnet/encnet_r50-d8_769x769_80k_cityscapes.py b/configs/encnet/encnet_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..aac7f2d44 --- /dev/null +++ b/configs/encnet/encnet_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/encnet/encnet_r50s-d8_512x512_80k_ade20k.py b/configs/encnet/encnet_r50s-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..600b701a7 --- /dev/null +++ b/configs/encnet/encnet_r50s-d8_512x512_80k_ade20k.py @@ -0,0 +1,8 @@ +_base_ = [ + '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + backbone=dict(stem_channels=128), + decode_head=dict(num_classes=150), + auxiliary_head=dict(num_classes=150)) diff --git a/configs/fcn/README.md b/configs/fcn/README.md new file mode 100644 index 000000000..6ec208012 --- /dev/null +++ b/configs/fcn/README.md @@ -0,0 +1,45 @@ +# Fully Convolutional Networks for Semantic Segmentation + +## Introduction +``` +@article{shelhamer2017fully, + title={Fully convolutional networks for semantic segmentation}, + author={Shelhamer, Evan and Long, Jonathan and Darrell, Trevor}, + journal={IEEE transactions on pattern analysis and machine intelligence}, + volume={39}, + number={4}, + pages={640--651}, + year={2017}, + publisher={IEEE Trans Pattern Anal Mach Intell} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FCN | R-50-D8 | 512x1024 | 40000 | 5.7 | 4.17 | 72.25 | 73.36 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json) | +| FCN | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.66 | 75.45 | 76.58 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json) | +| FCN | R-50-D8 | 769x769 | 40000 | 6.5 | 1.80 | 71.47 | 72.54 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json) | +| FCN | R-101-D8 | 769x769 | 40000 | 10.4 | 1.19 | 73.93 | 75.14 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json) | +| FCN | R-50-D8 | 512x1024 | 80000 | - | - | 73.61 | 74.24 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json) | +| FCN | R-101-D8 | 512x1024 | 80000 | - | - | 75.13 | 75.94 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json) | +| FCN | R-50-D8 | 769x769 | 80000 | - | - | 72.64 | 73.32 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json) | +| FCN | R-101-D8 | 769x769 | 80000 | - | - | 75.52 | 76.61 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FCN | R-50-D8 | 512x512 | 80000 | 8.5 | 23.49 | 35.94 | 37.94 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json) | +| FCN | R-101-D8 | 512x512 | 80000 | 12 | 14.78 | 39.61 | 40.83 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json) | +| FCN | R-50-D8 | 512x512 | 160000 | - | - | 36.10 | 38.08 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json) | +| FCN | R-101-D8 | 512x512 | 160000 | - | - | 39.91 | 41.40 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FCN | R-50-D8 | 512x512 | 20000 | 5.7 | 23.28 | 67.08 | 69.94 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json) | +| FCN | R-101-D8 | 512x512 | 20000 | 9.2 | 14.81 | 71.16 | 73.57 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json) | +| FCN | R-50-D8 | 512x512 | 40000 | - | - | 66.97 | 69.04 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| FCN | R-101-D8 | 512x512 | 40000 | - | - | 69.91 | 72.38 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json) | diff --git a/configs/fcn/fcn_r101-d8_512x1024_40k_cityscapes.py b/configs/fcn/fcn_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..7918dd10d --- /dev/null +++ b/configs/fcn/fcn_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_512x1024_80k_cityscapes.py b/configs/fcn/fcn_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..528110dc7 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_512x512_160k_ade20k.py b/configs/fcn/fcn_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..1bf6780f2 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_512x512_20k_voc12aug.py b/configs/fcn/fcn_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..09a5fe546 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_512x512_40k_voc12aug.py b/configs/fcn/fcn_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..eafefaa67 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_512x512_80k_ade20k.py b/configs/fcn/fcn_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..6d0294530 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_769x769_40k_cityscapes.py b/configs/fcn/fcn_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..6b4cc5712 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r101-d8_769x769_80k_cityscapes.py b/configs/fcn/fcn_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..3503c7693 --- /dev/null +++ b/configs/fcn/fcn_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './fcn_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/fcn/fcn_r50-d8_512x1024_40k_cityscapes.py b/configs/fcn/fcn_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..401c6ea73 --- /dev/null +++ b/configs/fcn/fcn_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/fcn/fcn_r50-d8_512x1024_80k_cityscapes.py b/configs/fcn/fcn_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..990a085ed --- /dev/null +++ b/configs/fcn/fcn_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/fcn/fcn_r50-d8_512x512_160k_ade20k.py b/configs/fcn/fcn_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..db272d6b5 --- /dev/null +++ b/configs/fcn/fcn_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/fcn/fcn_r50-d8_512x512_20k_voc12aug.py b/configs/fcn/fcn_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..17206a517 --- /dev/null +++ b/configs/fcn/fcn_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/fcn/fcn_r50-d8_512x512_40k_voc12aug.py b/configs/fcn/fcn_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..8cec429c3 --- /dev/null +++ b/configs/fcn/fcn_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/fcn/fcn_r50-d8_512x512_80k_ade20k.py b/configs/fcn/fcn_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..64997c26f --- /dev/null +++ b/configs/fcn/fcn_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/fcn/fcn_r50-d8_769x769_40k_cityscapes.py b/configs/fcn/fcn_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..9a91f9cc9 --- /dev/null +++ b/configs/fcn/fcn_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/fcn/fcn_r50-d8_769x769_80k_cityscapes.py b/configs/fcn/fcn_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..bbde29e8e --- /dev/null +++ b/configs/fcn/fcn_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/fcn_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/gcnet/README.md b/configs/gcnet/README.md new file mode 100644 index 000000000..44c4a4051 --- /dev/null +++ b/configs/gcnet/README.md @@ -0,0 +1,42 @@ +# GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond + +## Introduction +``` +@inproceedings{cao2019gcnet, + title={Gcnet: Non-local networks meet squeeze-excitation networks and beyond}, + author={Cao, Yue and Xu, Jiarui and Lin, Stephen and Wei, Fangyun and Hu, Han}, + booktitle={Proceedings of the IEEE International Conference on Computer Vision Workshops}, + pages={0--0}, + year={2019} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| GCNet | R-50-D8 | 512x1024 | 40000 | 5.8 | 3.93 | 77.69 | 78.56 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | +| GCNet | R-101-D8 | 512x1024 | 40000 | 9.2 | 2.61 | 78.28 | 79.34 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json) | +| GCNet | R-50-D8 | 769x769 | 40000 | 6.5 | 1.67 | 78.12 | 80.09 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json) | +| GCNet | R-101-D8 | 769x769 | 40000 | 10.5 | 1.13 | 78.95 | 80.71 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json) | +| GCNet | R-50-D8 | 512x1024 | 80000 | - | - | 78.48 | 80.01 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | +| GCNet | R-101-D8 | 512x1024 | 80000 | - | - | 79.03 | 79.84 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json) | +| GCNet | R-50-D8 | 769x769 | 80000 | - | - | 78.68 | 80.66 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json) | +| GCNet | R-101-D8 | 769x769 | 80000 | - | - | 79.18 | 80.71 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| GCNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.38 | 41.47 | 42.85 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json) | +| GCNet | R-101-D8 | 512x512 | 80000 | 12 | 15.20 | 42.82 | 44.54 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json) | +| GCNet | R-50-D8 | 512x512 | 160000 | - | - | 42.37 | 43.52 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json) | +| GCNet | R-101-D8 | 512x512 | 160000 | - | - | 43.69 | 45.21 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| GCNet | R-50-D8 | 512x512 | 20000 | 5.8 | 23.35 | 76.42 | 77.51 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json) | +| GCNet | R-101-D8 | 512x512 | 20000 | 9.2 | 14.80 | 77.41 | 78.56 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json) | +| GCNet | R-50-D8 | 512x512 | 40000 | - | - | 76.24 | 77.63 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json) | +| GCNet | R-101-D8 | 512x512 | 40000 | - | - | 77.84 | 78.59 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json) | diff --git a/configs/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes.py b/configs/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..27bd9422d --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes.py b/configs/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..7f0f83fe3 --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_512x512_160k_ade20k.py b/configs/gcnet/gcnet_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..9888120f6 --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_512x512_20k_voc12aug.py b/configs/gcnet/gcnet_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..1b70ca8e4 --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_512x512_40k_voc12aug.py b/configs/gcnet/gcnet_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..b17c7a12b --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_512x512_80k_ade20k.py b/configs/gcnet/gcnet_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..a2183fc2d --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_769x769_40k_cityscapes.py b/configs/gcnet/gcnet_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..08a6031f2 --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r101-d8_769x769_80k_cityscapes.py b/configs/gcnet/gcnet_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..5efb61339 --- /dev/null +++ b/configs/gcnet/gcnet_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './gcnet_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes.py b/configs/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..610467c07 --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes.py b/configs/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..155e28f42 --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/gcnet/gcnet_r50-d8_512x512_160k_ade20k.py b/configs/gcnet/gcnet_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..1549a4d5b --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/gcnet/gcnet_r50-d8_512x512_20k_voc12aug.py b/configs/gcnet/gcnet_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..a496204bd --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/gcnet/gcnet_r50-d8_512x512_40k_voc12aug.py b/configs/gcnet/gcnet_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..d85cf6550 --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/gcnet/gcnet_r50-d8_512x512_80k_ade20k.py b/configs/gcnet/gcnet_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..89d5e1ae0 --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/gcnet/gcnet_r50-d8_769x769_40k_cityscapes.py b/configs/gcnet/gcnet_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..ac9826ad9 --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/gcnet/gcnet_r50-d8_769x769_80k_cityscapes.py b/configs/gcnet/gcnet_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..cacf24e4f --- /dev/null +++ b/configs/gcnet/gcnet_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/gcnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/hrnet/README.md b/configs/hrnet/README.md new file mode 100644 index 000000000..4bb016e44 --- /dev/null +++ b/configs/hrnet/README.md @@ -0,0 +1,46 @@ +# Deep High-Resolution Representation Learning for Human Pose Estimation + +## Introduction +``` +@inproceedings{SunXLW19, + title={Deep High-Resolution Representation Learning for Human Pose Estimation}, + author={Ke Sun and Bin Xiao and Dong Liu and Jingdong Wang}, + booktitle={CVPR}, + year={2019} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|--------------------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FCN | HRNetV2p-W18-Small | 512x1024 | 40000 | 1.7 | 23.74 | 73.86 | 75.91 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 40000 | 2.9 | 12.97 | 77.19 | 78.92 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 40000 | 6.2 | 6.42 | 78.48 | 79.69 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json) | +| FCN | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | 75.31 | 77.48 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 80000 | - | - | 78.65 | 80.35 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 80000 | - | - | 79.93 | 80.72 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json) | +| FCN | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | 76.31 | 78.31 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json) | +| FCN | HRNetV2p-W18 | 512x1024 | 160000 | - | - | 78.80 | 80.74 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json) | +| FCN | HRNetV2p-W48 | 512x1024 | 160000 | - | - | 80.65 | 81.92 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|--------------------|-----------|--------:|----------|----------------|------:|--------------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FCN | HRNetV2p-W18-Small | 512x512 | 80000 | 3.8 | 38.66 | 31.38 | 32.45 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 80000 | 4.9 | 22.57 | 35.51 | 36.80 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20200614_185145-66f20cb7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20200614_185145.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 80000 | 8.2 | 21.23 | 41.90 | 43.27 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json) | +| FCN | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | 33.00 | 34.55 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20200614_214413-870f65ac.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20200614_214413.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 160000 | - | - | 36.79 | 38.58 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 160000 | - | - | 42.02 | 43.86 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|--------------------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| FCN | HRNetV2p-W18-Small | 512x512 | 20000 | 1.8 | 43.36 | 65.20 | 68.55 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20200617_224503-56e36088.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20200617_224503.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 20000 | 2.9 | 23.48 | 72.30 | 74.71 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 20000 | 6.2 | 22.05 | 75.87 | 78.58 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json) | +| FCN | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | 66.61 | 70.00 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json) | +| FCN | HRNetV2p-W18 | 512x512 | 40000 | - | - | 72.90 | 75.59 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json) | +| FCN | HRNetV2p-W48 | 512x512 | 40000 | - | - | 76.24 | 78.49 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json) | diff --git a/configs/hrnet/fcn_hr18_512x1024_160k_cityscapes.py b/configs/hrnet/fcn_hr18_512x1024_160k_cityscapes.py new file mode 100644 index 000000000..9f04e935c --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x1024_160k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] diff --git a/configs/hrnet/fcn_hr18_512x1024_40k_cityscapes.py b/configs/hrnet/fcn_hr18_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..99760c36d --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/hrnet/fcn_hr18_512x1024_80k_cityscapes.py b/configs/hrnet/fcn_hr18_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..a653dda19 --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/hrnet/fcn_hr18_512x512_160k_ade20k.py b/configs/hrnet/fcn_hr18_512x512_160k_ade20k.py new file mode 100644 index 000000000..45ed99b68 --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x512_160k_ade20k.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict(decode_head=dict(num_classes=150)) diff --git a/configs/hrnet/fcn_hr18_512x512_20k_voc12aug.py b/configs/hrnet/fcn_hr18_512x512_20k_voc12aug.py new file mode 100644 index 000000000..f06448b16 --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x512_20k_voc12aug.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/pascal_voc12_aug.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_20k.py' +] +model = dict(decode_head=dict(num_classes=21)) diff --git a/configs/hrnet/fcn_hr18_512x512_40k_voc12aug.py b/configs/hrnet/fcn_hr18_512x512_40k_voc12aug.py new file mode 100644 index 000000000..d74e95943 --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x512_40k_voc12aug.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/pascal_voc12_aug.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] +model = dict(decode_head=dict(num_classes=21)) diff --git a/configs/hrnet/fcn_hr18_512x512_80k_ade20k.py b/configs/hrnet/fcn_hr18_512x512_80k_ade20k.py new file mode 100644 index 000000000..52bc9f5e9 --- /dev/null +++ b/configs/hrnet/fcn_hr18_512x512_80k_ade20k.py @@ -0,0 +1,5 @@ +_base_ = [ + '../_base_/models/fcn_hr18.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict(decode_head=dict(num_classes=150)) diff --git a/configs/hrnet/fcn_hr18s_512x1024_160k_cityscapes.py b/configs/hrnet/fcn_hr18s_512x1024_160k_cityscapes.py new file mode 100644 index 000000000..ddbe3801f --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x1024_160k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x1024_160k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr18s_512x1024_40k_cityscapes.py b/configs/hrnet/fcn_hr18s_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..4e31d26e0 --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x1024_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x1024_40k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr18s_512x1024_80k_cityscapes.py b/configs/hrnet/fcn_hr18s_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..ee2831d99 --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x1024_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x1024_80k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr18s_512x512_160k_ade20k.py b/configs/hrnet/fcn_hr18s_512x512_160k_ade20k.py new file mode 100644 index 000000000..22a3ce0b3 --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x512_160k_ade20k.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x512_160k_ade20k.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr18s_512x512_20k_voc12aug.py b/configs/hrnet/fcn_hr18s_512x512_20k_voc12aug.py new file mode 100644 index 000000000..d0de5df75 --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x512_20k_voc12aug.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x512_20k_voc12aug.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr18s_512x512_40k_voc12aug.py b/configs/hrnet/fcn_hr18s_512x512_40k_voc12aug.py new file mode 100644 index 000000000..409db3c62 --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x512_40k_voc12aug.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x512_40k_voc12aug.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr18s_512x512_80k_ade20k.py b/configs/hrnet/fcn_hr18s_512x512_80k_ade20k.py new file mode 100644 index 000000000..a8400979b --- /dev/null +++ b/configs/hrnet/fcn_hr18s_512x512_80k_ade20k.py @@ -0,0 +1,9 @@ +_base_ = './fcn_hr18_512x512_80k_ade20k.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/hrnet/fcn_hr48_512x1024_160k_cityscapes.py b/configs/hrnet/fcn_hr48_512x1024_160k_cityscapes.py new file mode 100644 index 000000000..394a61c99 --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x1024_160k_cityscapes.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x1024_160k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/hrnet/fcn_hr48_512x1024_40k_cityscapes.py b/configs/hrnet/fcn_hr48_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..d37ab1d09 --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x1024_40k_cityscapes.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x1024_40k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/hrnet/fcn_hr48_512x1024_80k_cityscapes.py b/configs/hrnet/fcn_hr48_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..a9bab32b5 --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x1024_80k_cityscapes.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x1024_80k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/hrnet/fcn_hr48_512x512_160k_ade20k.py b/configs/hrnet/fcn_hr48_512x512_160k_ade20k.py new file mode 100644 index 000000000..dff4fea85 --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x512_160k_ade20k.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x512_160k_ade20k.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/hrnet/fcn_hr48_512x512_20k_voc12aug.py b/configs/hrnet/fcn_hr48_512x512_20k_voc12aug.py new file mode 100644 index 000000000..a8d1deb98 --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x512_20k_voc12aug.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x512_20k_voc12aug.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/hrnet/fcn_hr48_512x512_40k_voc12aug.py b/configs/hrnet/fcn_hr48_512x512_40k_voc12aug.py new file mode 100644 index 000000000..1084a57e9 --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x512_40k_voc12aug.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x512_40k_voc12aug.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/hrnet/fcn_hr48_512x512_80k_ade20k.py b/configs/hrnet/fcn_hr48_512x512_80k_ade20k.py new file mode 100644 index 000000000..7eca7fa4b --- /dev/null +++ b/configs/hrnet/fcn_hr48_512x512_80k_ade20k.py @@ -0,0 +1,10 @@ +_base_ = './fcn_hr18_512x512_80k_ade20k.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=dict( + in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) diff --git a/configs/nonlocal_net/README.md b/configs/nonlocal_net/README.md new file mode 100644 index 000000000..dbd924dfe --- /dev/null +++ b/configs/nonlocal_net/README.md @@ -0,0 +1,42 @@ +# Non-local Neural Networks + +## Introduction +``` +@inproceedings{wang2018non, + title={Non-local neural networks}, + author={Wang, Xiaolong and Girshick, Ross and Gupta, Abhinav and He, Kaiming}, + booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition}, + pages={7794--7803}, + year={2018} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|----------|----------|-----------|--------:|----------|----------------|------:|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| NonLocal | R-50-D8 | 512x1024 | 40000 | 7.4 | 2.72 | 78.24 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | +| NonLocal | R-101-D8 | 512x1024 | 40000 | 10.9 | 1.95 | 78.66 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json) | +| NonLocal | R-50-D8 | 769x769 | 40000 | 8.9 | 1.52 | 78.33 | 79.92 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json) | +| NonLocal | R-101-D8 | 769x769 | 40000 | 12.8 | 1.05 | 78.57 | 80.29 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json) | +| NonLocal | R-50-D8 | 512x1024 | 80000 | - | - | 78.01 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json) | +| NonLocal | R-101-D8 | 512x1024 | 80000 | - | - | 78.93 | - | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json) | +| NonLocal | R-50-D8 | 769x769 | 80000 | - | - | 79.05 | 80.68 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json) | +| NonLocal | R-101-D8 | 769x769 | 80000 | - | - | 79.40 | 80.85 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|----------|----------|-----------|--------:|----------|----------------|------:|--------------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| NonLocal | R-50-D8 | 512x512 | 80000 | 9.1 | 21.37 | 40.75 | 42.05 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json) | +| NonLocal | R-101-D8 | 512x512 | 80000 | 12.6 | 13.97 | 42.90 | 44.27 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json) | +| NonLocal | R-50-D8 | 512x512 | 160000 | - | - | 42.03 | 43.04 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json) | +| NonLocal | R-101-D8 | 512x512 | 160000 | - | - | 43.36 | 44.83 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20200616_003422-affd0f8d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20200616_003422.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|----------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| NonLocal | R-50-D8 | 512x512 | 20000 | 6.4 | 21.21 | 76.20 | 77.12 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json) | +| NonLocal | R-101-D8 | 512x512 | 20000 | 9.8 | 14.01 | 78.15 | 78.86 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json) | +| NonLocal | R-50-D8 | 512x512 | 40000 | - | - | 76.65 | 77.47 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json) | +| NonLocal | R-101-D8 | 512x512 | 40000 | - | - | 78.27 | 79.12 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json) | diff --git a/configs/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes.py b/configs/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..ef7b06dd3 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes.py b/configs/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..7a1e66cf1 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k.py b/configs/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..df9c2aca9 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug.py b/configs/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..490f9873a --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug.py b/configs/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..40d9190fb --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k.py b/configs/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..0c6f60dac --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes.py b/configs/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..23e6da7f2 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes.py b/configs/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..0627e2b5a --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './nonlocal_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes.py b/configs/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..9d4dc7390 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes.py b/configs/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..b0672b687 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k.py b/configs/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..b1adfbab8 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug.py b/configs/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..2e808d807 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug.py b/configs/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..66b443abe --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k.py b/configs/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..8a7a2f509 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,6 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) diff --git a/configs/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes.py b/configs/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..3f0d47238 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes.py b/configs/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..5d448c730 --- /dev/null +++ b/configs/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/nonlocal_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/ocrnet/README.md b/configs/ocrnet/README.md new file mode 100644 index 000000000..fe9e05aaa --- /dev/null +++ b/configs/ocrnet/README.md @@ -0,0 +1,46 @@ +# Object-Contextual Representations for Semantic Segmentation + +## Introduction +``` +@article{yuan2019ocr, + title={Object-Contextual Representations for Semantic Segmentation}, + author={Yuan Yuhui and Chen Xilin and Wang Jingdong}, + journal={arXiv preprint arXiv:1909.11065}, + year={2019} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|--------------------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 40000 | 3.5 | 10.45 | 74.30 | 75.95 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes/ocrnet_hr18s_512x1024_40k_cityscapes_20200601_033304-fa2436c2.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes/ocrnet_hr18s_512x1024_40k_cityscapes_20200601_033304.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 40000 | 4.7 | 7.50 | 77.72 | 79.49 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 40000 | 8 | 4.22 | 80.58 | 81.79 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 80000 | - | - | 77.16 | 78.66 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 80000 | - | - | 78.57 | 80.46 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 80000 | - | - | 80.70 | 81.87 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x1024 | 160000 | - | - | 78.45 | 79.97 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json) | +| OCRNet | HRNetV2p-W18 | 512x1024 | 160000 | - | - | 79.47 | 80.91 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json) | +| OCRNet | HRNetV2p-W48 | 512x1024 | 160000 | - | - | 81.35 | 82.70 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|--------------------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OCRNet | HRNetV2p-W18-Small | 512x512 | 80000 | 6.7 | 28.98 | 35.06 | 35.80 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 80000 | 7.9 | 18.93 | 37.79 | 39.16 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 80000 | 11.2 | 16.99 | 43.00 | 44.30 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 160000 | - | - | 37.19 | 38.40 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 160000 | - | - | 39.32 | 40.80 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 160000 | - | - | 43.25 | 44.88 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|--------------------|-----------|--------:|----------|----------------|------:|--------------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OCRNet | HRNetV2p-W18-Small | 512x512 | 20000 | 3.5 | 31.55 | 71.70 | 73.84 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 20000 | 4.7 | 19.91 | 74.75 | 77.11 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 20000 | 8.1 | 17.83 | 77.72 | 79.87 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json) | +| OCRNet | HRNetV2p-W18-Small | 512x512 | 40000 | - | - | 72.76 | 74.60 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json) | +| OCRNet | HRNetV2p-W18 | 512x512 | 40000 | - | - | 74.98 | 77.40 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json) | +| OCRNet | HRNetV2p-W48 | 512x512 | 40000 | - | - | 77.14 | 79.71 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json) | diff --git a/configs/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes.py b/configs/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes.py new file mode 100644 index 000000000..1c86eba17 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] diff --git a/configs/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes.py b/configs/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..2c73b3839 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes.py b/configs/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..506ad9319 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/ocrnet/ocrnet_hr18_512x512_160k_ade20k.py b/configs/ocrnet/ocrnet_hr18_512x512_160k_ade20k.py new file mode 100644 index 000000000..fe5d20ffb --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x512_160k_ade20k.py @@ -0,0 +1,35 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict(decode_head=[ + dict( + type='FCNHead', + in_channels=[18, 36, 72, 144], + channels=sum([18, 36, 72, 144]), + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + kernel_size=1, + num_convs=1, + concat_input=False, + drop_out_ratio=-1, + num_classes=150, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[18, 36, 72, 144], + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + channels=512, + ocr_channels=256, + drop_out_ratio=-1, + num_classes=150, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), +]) diff --git a/configs/ocrnet/ocrnet_hr18_512x512_20k_voc12aug.py b/configs/ocrnet/ocrnet_hr18_512x512_20k_voc12aug.py new file mode 100644 index 000000000..71e70dcec --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x512_20k_voc12aug.py @@ -0,0 +1,36 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict(decode_head=[ + dict( + type='FCNHead', + in_channels=[18, 36, 72, 144], + channels=sum([18, 36, 72, 144]), + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + kernel_size=1, + num_convs=1, + concat_input=False, + drop_out_ratio=-1, + num_classes=21, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[18, 36, 72, 144], + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + channels=512, + ocr_channels=256, + drop_out_ratio=-1, + num_classes=21, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), +]) diff --git a/configs/ocrnet/ocrnet_hr18_512x512_40k_voc12aug.py b/configs/ocrnet/ocrnet_hr18_512x512_40k_voc12aug.py new file mode 100644 index 000000000..b3fd74721 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x512_40k_voc12aug.py @@ -0,0 +1,36 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict(decode_head=[ + dict( + type='FCNHead', + in_channels=[18, 36, 72, 144], + channels=sum([18, 36, 72, 144]), + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + kernel_size=1, + num_convs=1, + concat_input=False, + drop_out_ratio=-1, + num_classes=21, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[18, 36, 72, 144], + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + channels=512, + ocr_channels=256, + drop_out_ratio=-1, + num_classes=21, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), +]) diff --git a/configs/ocrnet/ocrnet_hr18_512x512_80k_ade20k.py b/configs/ocrnet/ocrnet_hr18_512x512_80k_ade20k.py new file mode 100644 index 000000000..e41eaf8ac --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18_512x512_80k_ade20k.py @@ -0,0 +1,35 @@ +_base_ = [ + '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict(decode_head=[ + dict( + type='FCNHead', + in_channels=[18, 36, 72, 144], + channels=sum([18, 36, 72, 144]), + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + kernel_size=1, + num_convs=1, + concat_input=False, + drop_out_ratio=-1, + num_classes=150, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[18, 36, 72, 144], + in_index=(0, 1, 2, 3), + input_transform='resize_concat', + channels=512, + ocr_channels=256, + drop_out_ratio=-1, + num_classes=150, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), +]) diff --git a/configs/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes.py b/configs/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes.py new file mode 100644 index 000000000..fc7909785 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x1024_160k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes.py b/configs/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..923731f74 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x1024_40k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes.py b/configs/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..be6bf16a2 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x1024_80k_cityscapes.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr18s_512x512_160k_ade20k.py b/configs/ocrnet/ocrnet_hr18s_512x512_160k_ade20k.py new file mode 100644 index 000000000..81f3d5cb9 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x512_160k_ade20k.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x512_160k_ade20k.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug.py b/configs/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug.py new file mode 100644 index 000000000..ceb944815 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x512_20k_voc12aug.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug.py b/configs/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug.py new file mode 100644 index 000000000..70babc91c --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x512_40k_voc12aug.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr18s_512x512_80k_ade20k.py b/configs/ocrnet/ocrnet_hr18s_512x512_80k_ade20k.py new file mode 100644 index 000000000..36e77219a --- /dev/null +++ b/configs/ocrnet/ocrnet_hr18s_512x512_80k_ade20k.py @@ -0,0 +1,9 @@ +_base_ = './ocrnet_hr18_512x512_80k_ade20k.py' +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w18_small', + backbone=dict( + extra=dict( + stage1=dict(num_blocks=(2, )), + stage2=dict(num_blocks=(2, 2)), + stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), + stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) diff --git a/configs/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes.py b/configs/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes.py new file mode 100644 index 000000000..70c1ce5b5 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x1024_160k_cityscapes.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=19, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=19, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes.py b/configs/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..cd777e89b --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x1024_40k_cityscapes.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=19, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=19, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes.py b/configs/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..6ed60096a --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x1024_80k_cityscapes.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=19, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=19, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/ocrnet/ocrnet_hr48_512x512_160k_ade20k.py b/configs/ocrnet/ocrnet_hr48_512x512_160k_ade20k.py new file mode 100644 index 000000000..f6cd20e64 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x512_160k_ade20k.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x512_160k_ade20k.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=150, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=150, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/ocrnet/ocrnet_hr48_512x512_20k_voc12aug.py b/configs/ocrnet/ocrnet_hr48_512x512_20k_voc12aug.py new file mode 100644 index 000000000..3149cfc37 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x512_20k_voc12aug.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x512_20k_voc12aug.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=21, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=21, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/ocrnet/ocrnet_hr48_512x512_40k_voc12aug.py b/configs/ocrnet/ocrnet_hr48_512x512_40k_voc12aug.py new file mode 100644 index 000000000..f97260039 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x512_40k_voc12aug.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x512_40k_voc12aug.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=21, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=21, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/ocrnet/ocrnet_hr48_512x512_80k_ade20k.py b/configs/ocrnet/ocrnet_hr48_512x512_80k_ade20k.py new file mode 100644 index 000000000..94dbe9029 --- /dev/null +++ b/configs/ocrnet/ocrnet_hr48_512x512_80k_ade20k.py @@ -0,0 +1,39 @@ +_base_ = './ocrnet_hr18_512x512_80k_ade20k.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w48', + backbone=dict( + extra=dict( + stage2=dict(num_channels=(48, 96)), + stage3=dict(num_channels=(48, 96, 192)), + stage4=dict(num_channels=(48, 96, 192, 384)))), + decode_head=[ + dict( + type='FCNHead', + in_channels=[48, 96, 192, 384], + channels=sum([48, 96, 192, 384]), + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + kernel_size=1, + num_convs=1, + norm_cfg=norm_cfg, + concat_input=False, + drop_out_ratio=-1, + num_classes=150, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), + dict( + type='OCRHead', + in_channels=[48, 96, 192, 384], + channels=512, + ocr_channels=256, + input_transform='resize_concat', + in_index=(0, 1, 2, 3), + norm_cfg=norm_cfg, + drop_out_ratio=-1, + num_classes=150, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) + ]) diff --git a/configs/psanet/README.md b/configs/psanet/README.md new file mode 100644 index 000000000..d6d94e36d --- /dev/null +++ b/configs/psanet/README.md @@ -0,0 +1,42 @@ +# PSANet: Point-wise Spatial Attention Network for Scene Parsing + +## Introduction +``` +@inproceedings{zhao2018psanet, + title={Psanet: Point-wise spatial attention network for scene parsing}, + author={Zhao, Hengshuang and Zhang, Yi and Liu, Shu and Shi, Jianping and Change Loy, Chen and Lin, Dahua and Jia, Jiaya}, + booktitle={Proceedings of the European Conference on Computer Vision (ECCV)}, + pages={267--283}, + year={2018} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PSANet | R-50-D8 | 512x1024 | 40000 | 7 | 3.17 | 77.63 | 79.04 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json) | +| PSANet | R-101-D8 | 512x1024 | 40000 | 10.5 | 2.20 | 79.14 | 80.19 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json) | +| PSANet | R-50-D8 | 769x769 | 40000 | 7.9 | 1.40 | 77.99 | 79.64 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json) | +| PSANet | R-101-D8 | 769x769 | 40000 | 11.9 | 0.98 | 78.43 | 80.26 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json) | +| PSANet | R-50-D8 | 512x1024 | 80000 | - | - | 77.24 | 78.69 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json) | +| PSANet | R-101-D8 | 512x1024 | 80000 | - | - | 79.31 | 80.53 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json) | +| PSANet | R-50-D8 | 769x769 | 80000 | - | - | 79.31 | 80.91 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json) | +| PSANet | R-101-D8 | 769x769 | 80000 | - | - | 79.69 | 80.89 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PSANet | R-50-D8 | 512x512 | 80000 | 9 | 18.91 | 41.14 | 41.91 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json) | +| PSANet | R-101-D8 | 512x512 | 80000 | 12.5 | 13.13 | 43.80 | 44.75 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json) | +| PSANet | R-50-D8 | 512x512 | 160000 | - | - | 41.67 | 42.95 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json) | +| PSANet | R-101-D8 | 512x512 | 160000 | - | - | 43.74 | 45.38 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PSANet | R-50-D8 | 512x512 | 20000 | 6.9 | 18.24 | 76.39 | 77.34 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json) | +| PSANet | R-101-D8 | 512x512 | 20000 | 10.4 | 12.63 | 77.91 | 79.30 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json) | +| PSANet | R-50-D8 | 512x512 | 40000 | - | - | 76.30 | 77.35 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json) | +| PSANet | R-101-D8 | 512x512 | 40000 | - | - | 77.73 | 79.05 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json) | diff --git a/configs/psanet/psanet_r101-d8_512x1024_40k_cityscapes.py b/configs/psanet/psanet_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..69d212f15 --- /dev/null +++ b/configs/psanet/psanet_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_512x1024_80k_cityscapes.py b/configs/psanet/psanet_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..bc25d6aaf --- /dev/null +++ b/configs/psanet/psanet_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_512x512_160k_ade20k.py b/configs/psanet/psanet_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..7f6795e5e --- /dev/null +++ b/configs/psanet/psanet_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_512x512_20k_voc12aug.py b/configs/psanet/psanet_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..1a3c43495 --- /dev/null +++ b/configs/psanet/psanet_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_512x512_40k_voc12aug.py b/configs/psanet/psanet_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..f62eef977 --- /dev/null +++ b/configs/psanet/psanet_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_512x512_80k_ade20k.py b/configs/psanet/psanet_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..f8865a7c4 --- /dev/null +++ b/configs/psanet/psanet_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_769x769_40k_cityscapes.py b/configs/psanet/psanet_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..ffc99f010 --- /dev/null +++ b/configs/psanet/psanet_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r101-d8_769x769_80k_cityscapes.py b/configs/psanet/psanet_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..6a9efc55a --- /dev/null +++ b/configs/psanet/psanet_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './psanet_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/psanet/psanet_r50-d8_512x1024_40k_cityscapes.py b/configs/psanet/psanet_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..6671fcb4b --- /dev/null +++ b/configs/psanet/psanet_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/psanet/psanet_r50-d8_512x1024_80k_cityscapes.py b/configs/psanet/psanet_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..a441013a4 --- /dev/null +++ b/configs/psanet/psanet_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/psanet/psanet_r50-d8_512x512_160k_ade20k.py b/configs/psanet/psanet_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..d177d17e1 --- /dev/null +++ b/configs/psanet/psanet_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,8 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(mask_size=(66, 66), num_classes=150), + auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/psanet/psanet_r50-d8_512x512_20k_voc12aug.py b/configs/psanet/psanet_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..af06cb66c --- /dev/null +++ b/configs/psanet/psanet_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/psanet/psanet_r50-d8_512x512_40k_voc12aug.py b/configs/psanet/psanet_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..803c42da3 --- /dev/null +++ b/configs/psanet/psanet_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/psanet/psanet_r50-d8_512x512_80k_ade20k.py b/configs/psanet/psanet_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..58a18a043 --- /dev/null +++ b/configs/psanet/psanet_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,8 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(mask_size=(66, 66), num_classes=150), + auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/psanet/psanet_r50-d8_769x769_40k_cityscapes.py b/configs/psanet/psanet_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..2068667b0 --- /dev/null +++ b/configs/psanet/psanet_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/psanet/psanet_r50-d8_769x769_80k_cityscapes.py b/configs/psanet/psanet_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..8745f5dba --- /dev/null +++ b/configs/psanet/psanet_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/psanet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/pspnet/README.md b/configs/pspnet/README.md new file mode 100644 index 000000000..ec31feeb8 --- /dev/null +++ b/configs/pspnet/README.md @@ -0,0 +1,41 @@ +# Pyramid Scene Parsing Network + +## Introduction +``` +@inproceedings{zhao2017pspnet, + title={Pyramid Scene Parsing Network}, + author={Zhao, Hengshuang and Shi, Jianping and Qi, Xiaojuan and Wang, Xiaogang and Jia, Jiaya}, + booktitle={CVPR}, + year={2017} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PSPNet | R-50-D8 | 512x1024 | 40000 | 6.1 | 4.07 | 77.85 | 79.18 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json) | +| PSPNet | R-101-D8 | 512x1024 | 40000 | 9.6 | 2.68 | 78.34 | 79.74 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json) | +| PSPNet | R-50-D8 | 769x769 | 40000 | 6.9 | 1.76 | 78.26 | 79.88 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json) | +| PSPNet | R-101-D8 | 769x769 | 40000 | 10.9 | 1.15 | 79.08 | 80.28 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json) | +| PSPNet | R-50-D8 | 512x1024 | 80000 | - | - | 78.55 | 79.79 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json) | +| PSPNet | R-101-D8 | 512x1024 | 80000 | - | - | 79.76 | 81.01 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json) | +| PSPNet | R-50-D8 | 769x769 | 80000 | - | - | 79.59 | 80.69 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json) | +| PSPNet | R-101-D8 | 769x769 | 80000 | - | - | 79.77 | 81.06 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PSPNet | R-50-D8 | 512x512 | 80000 | 8.5 | 23.53 | 41.13 | 41.94 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json) | +| PSPNet | R-101-D8 | 512x512 | 80000 | 12 | 15.30 | 43.57 | 44.35 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json) | +| PSPNet | R-50-D8 | 512x512 | 160000 | - | - | 42.48 | 43.44 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json) | +| PSPNet | R-101-D8 | 512x512 | 160000 | - | - | 44.39 | 45.35 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|--------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PSPNet | R-50-D8 | 512x512 | 20000 | 6.1 | 23.59 | 76.78 | 77.61 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json) | +| PSPNet | R-101-D8 | 512x512 | 20000 | 9.6 | 15.02 | 78.47 | 79.25 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json) | +| PSPNet | R-50-D8 | 512x512 | 40000 | - | - | 77.29 | 78.48 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json) | +| PSPNet | R-101-D8 | 512x512 | 40000 | - | - | 78.52 | 79.57 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json) | diff --git a/configs/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes.py b/configs/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..38fee11bc --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py b/configs/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..9931a07bc --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_512x512_160k_ade20k.py b/configs/pspnet/pspnet_r101-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..6107b4154 --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_512x512_20k_voc12aug.py b/configs/pspnet/pspnet_r101-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..2221b202d --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_512x512_40k_voc12aug.py b/configs/pspnet/pspnet_r101-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..15f578b60 --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_512x512_80k_ade20k.py b/configs/pspnet/pspnet_r101-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..fb7c3d55d --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_769x769_40k_cityscapes.py b/configs/pspnet/pspnet_r101-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..c6e7e5850 --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r101-d8_769x769_80k_cityscapes.py b/configs/pspnet/pspnet_r101-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..59b8c6dd5 --- /dev/null +++ b/configs/pspnet/pspnet_r101-d8_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './pspnet_r50-d8_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py b/configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..5deb5872b --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes.py b/configs/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..4e9972849 --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/pspnet/pspnet_r50-d8_512x512_160k_ade20k.py b/configs/pspnet/pspnet_r50-d8_512x512_160k_ade20k.py new file mode 100644 index 000000000..c34b66aaf --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_512x512_160k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/pspnet/pspnet_r50-d8_512x512_20k_voc12aug.py b/configs/pspnet/pspnet_r50-d8_512x512_20k_voc12aug.py new file mode 100644 index 000000000..cd88154d5 --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/pspnet/pspnet_r50-d8_512x512_40k_voc12aug.py b/configs/pspnet/pspnet_r50-d8_512x512_40k_voc12aug.py new file mode 100644 index 000000000..f0c20c12f --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py b/configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py new file mode 100644 index 000000000..6922cc6d1 --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/pspnet/pspnet_r50-d8_769x769_40k_cityscapes.py b/configs/pspnet/pspnet_r50-d8_769x769_40k_cityscapes.py new file mode 100644 index 000000000..e1026e006 --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/pspnet/pspnet_r50-d8_769x769_80k_cityscapes.py b/configs/pspnet/pspnet_r50-d8_769x769_80k_cityscapes.py new file mode 100644 index 000000000..c1215c5c4 --- /dev/null +++ b/configs/pspnet/pspnet_r50-d8_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/pspnet_r50-d8.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/upernet/README.md b/configs/upernet/README.md new file mode 100644 index 000000000..88a64d848 --- /dev/null +++ b/configs/upernet/README.md @@ -0,0 +1,42 @@ +# Unified Perceptual Parsing for Scene Understanding + +## Introduction +``` +@inproceedings{xiao2018unified, + title={Unified perceptual parsing for scene understanding}, + author={Xiao, Tete and Liu, Yingcheng and Zhou, Bolei and Jiang, Yuning and Sun, Jian}, + booktitle={Proceedings of the European Conference on Computer Vision (ECCV)}, + pages={418--434}, + year={2018} +} +``` + +## Results and models + +### Cityscapes +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|---------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| UPerNet | R-50 | 512x1024 | 40000 | 6.4 | 4.25 | 77.10 | 78.37 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json) | +| UPerNet | R-101 | 512x1024 | 40000 | 7.4 | 3.79 | 78.69 | 80.11 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json) | +| UPerNet | R-50 | 769x769 | 40000 | 7.2 | 1.76 | 77.98 | 79.70 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json) | +| UPerNet | R-101 | 769x769 | 40000 | 8.4 | 1.56 | 79.03 | 80.77 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json) | +| UPerNet | R-50 | 512x1024 | 80000 | - | - | 78.19 | 79.19 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json) | +| UPerNet | R-101 | 512x1024 | 80000 | - | - | 79.40 | 80.46 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json) | +| UPerNet | R-50 | 769x769 | 80000 | - | - | 79.39 | 80.92 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json) | +| UPerNet | R-101 | 769x769 | 80000 | - | - | 80.10 | 81.49 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json) | + +### ADE20K +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|---------|----------|-----------|--------:|----------|----------------|------:|--------------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| UPerNet | R-50 | 512x512 | 80000 | 8.1 | 23.40 | 40.70 | 41.81 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json) | +| UPerNet | R-101 | 512x512 | 80000 | 9.1 | 20.34 | 42.91 | 43.96 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json) | +| UPerNet | R-50 | 512x512 | 160000 | - | - | 42.05 | 42.78 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json) | +| UPerNet | R-101 | 512x512 | 160000 | - | - | 43.82 | 44.85 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json) | + +### Pascal VOC 2012 + Aug +| Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | +|---------|----------|-----------|--------:|----------|----------------|------:|--------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| UPerNet | R-50 | 512x512 | 20000 | 6.4 | 23.17 | 74.82 | 76.35 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json) | +| UPerNet | R-101 | 512x512 | 20000 | 7.5 | 19.98 | 77.10 | 78.29 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json) | +| UPerNet | R-50 | 512x512 | 40000 | - | - | 75.92 | 77.44 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json) | +| UPerNet | R-101 | 512x512 | 40000 | - | - | 77.43 | 78.56 | [model](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth) | [log](https://openmmlab.oss-accelerate.aliyuncs.com/mmsegmentation/v0.5/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json) | diff --git a/configs/upernet/upernet_r101_512x1024_40k_cityscapes.py b/configs/upernet/upernet_r101_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..b90b597d8 --- /dev/null +++ b/configs/upernet/upernet_r101_512x1024_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_512x1024_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_512x1024_80k_cityscapes.py b/configs/upernet/upernet_r101_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..420ca2e42 --- /dev/null +++ b/configs/upernet/upernet_r101_512x1024_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_512x1024_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_512x512_160k_ade20k.py b/configs/upernet/upernet_r101_512x512_160k_ade20k.py new file mode 100644 index 000000000..146f13eb7 --- /dev/null +++ b/configs/upernet/upernet_r101_512x512_160k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_512x512_160k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_512x512_20k_voc12aug.py b/configs/upernet/upernet_r101_512x512_20k_voc12aug.py new file mode 100644 index 000000000..56345d180 --- /dev/null +++ b/configs/upernet/upernet_r101_512x512_20k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_512x512_20k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_512x512_40k_voc12aug.py b/configs/upernet/upernet_r101_512x512_40k_voc12aug.py new file mode 100644 index 000000000..0669b741b --- /dev/null +++ b/configs/upernet/upernet_r101_512x512_40k_voc12aug.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_512x512_40k_voc12aug.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_512x512_80k_ade20k.py b/configs/upernet/upernet_r101_512x512_80k_ade20k.py new file mode 100644 index 000000000..abfb9c5d9 --- /dev/null +++ b/configs/upernet/upernet_r101_512x512_80k_ade20k.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_512x512_80k_ade20k.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_769x769_40k_cityscapes.py b/configs/upernet/upernet_r101_769x769_40k_cityscapes.py new file mode 100644 index 000000000..e5f3a3fae --- /dev/null +++ b/configs/upernet/upernet_r101_769x769_40k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_769x769_40k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r101_769x769_80k_cityscapes.py b/configs/upernet/upernet_r101_769x769_80k_cityscapes.py new file mode 100644 index 000000000..a70916565 --- /dev/null +++ b/configs/upernet/upernet_r101_769x769_80k_cityscapes.py @@ -0,0 +1,2 @@ +_base_ = './upernet_r50_769x769_80k_cityscapes.py' +model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) diff --git a/configs/upernet/upernet_r50_512x1024_40k_cityscapes.py b/configs/upernet/upernet_r50_512x1024_40k_cityscapes.py new file mode 100644 index 000000000..d621e89ce --- /dev/null +++ b/configs/upernet/upernet_r50_512x1024_40k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' +] diff --git a/configs/upernet/upernet_r50_512x1024_80k_cityscapes.py b/configs/upernet/upernet_r50_512x1024_80k_cityscapes.py new file mode 100644 index 000000000..95fffcc76 --- /dev/null +++ b/configs/upernet/upernet_r50_512x1024_80k_cityscapes.py @@ -0,0 +1,4 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', '../_base_/datasets/cityscapes.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] diff --git a/configs/upernet/upernet_r50_512x512_160k_ade20k.py b/configs/upernet/upernet_r50_512x512_160k_ade20k.py new file mode 100644 index 000000000..f259165fc --- /dev/null +++ b/configs/upernet/upernet_r50_512x512_160k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/upernet/upernet_r50_512x512_20k_voc12aug.py b/configs/upernet/upernet_r50_512x512_20k_voc12aug.py new file mode 100644 index 000000000..95f5c0956 --- /dev/null +++ b/configs/upernet/upernet_r50_512x512_20k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_20k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/upernet/upernet_r50_512x512_40k_voc12aug.py b/configs/upernet/upernet_r50_512x512_40k_voc12aug.py new file mode 100644 index 000000000..9621fd1f5 --- /dev/null +++ b/configs/upernet/upernet_r50_512x512_40k_voc12aug.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', + '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) diff --git a/configs/upernet/upernet_r50_512x512_80k_ade20k.py b/configs/upernet/upernet_r50_512x512_80k_ade20k.py new file mode 100644 index 000000000..ce5d71f56 --- /dev/null +++ b/configs/upernet/upernet_r50_512x512_80k_ade20k.py @@ -0,0 +1,7 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', '../_base_/datasets/ade20k.py', + '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) +test_cfg = dict(mode='whole') diff --git a/configs/upernet/upernet_r50_769x769_40k_cityscapes.py b/configs/upernet/upernet_r50_769x769_40k_cityscapes.py new file mode 100644 index 000000000..590ab61b7 --- /dev/null +++ b/configs/upernet/upernet_r50_769x769_40k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_40k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/configs/upernet/upernet_r50_769x769_80k_cityscapes.py b/configs/upernet/upernet_r50_769x769_80k_cityscapes.py new file mode 100644 index 000000000..b3a610758 --- /dev/null +++ b/configs/upernet/upernet_r50_769x769_80k_cityscapes.py @@ -0,0 +1,9 @@ +_base_ = [ + '../_base_/models/upernet_r50.py', + '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', + '../_base_/schedules/schedule_80k.py' +] +model = dict( + decode_head=dict(align_corners=True), + auxiliary_head=dict(align_corners=True)) +test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) diff --git a/demo/demo.png b/demo/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e82d7a0773cea14b36f0021fea603de0961b5d8 GIT binary patch literal 307861 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

CeI$Uf8Z)!yVnLuX0)p^){@cOks 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%0DAaIhctdwc#J^2Kd$x9(%c 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] 187.12M 16.5MB/s in 13s \n", + "\n", + "2020-07-07 08:54:38 (14.8 MB/s) - ‘../checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth.1’ saved [196205945/196205945]\n", + "\n" + ] + } + ], + "source": [ + "!mkdir ../checkpoints\n", + "!wget https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth -P ../checkpoints" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "pycharm": { + "is_executing": true + } + }, + "outputs": [], + "source": [ + "from mmseg.apis import init_segmentor, inference_segmentor, show_result_pyplot\n", + "from mmseg.core.evaluation import get_palette" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "pycharm": { + "is_executing": true + } + }, + "outputs": [], + "source": [ + "config_file = '../configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py'\n", + "checkpoint_file = '../checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth'" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# build the model from a config file and a checkpoint file\n", + "model = init_segmentor(config_file, checkpoint_file, device='cuda:0')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# test a single image\n", + "img = 'demo.png'\n", + "result = inference_segmentor(model, img)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/v-liubin/code/mmsegmentation/mmseg/models/segmentors/base.py:265: UserWarning: show==False and out_file is not specified, only result image will be returned\n", + " warnings.warn('show==False and out_file is not specified, only '\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# show the results\n", + "show_result_pyplot(model, img, result, get_palette('cityscapes'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "open-mmlab", + "language": "python", + "name": "open-mmlab" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..700ac15de --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,20 @@ +ARG PYTORCH="1.3" +ARG CUDA="10.1" +ARG CUDNN="7" + +FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel + +ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX" +ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" +ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" + +RUN apt-get update && apt-get install -y libglib2.0-0 libsm6 libxrender-dev libxext6 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install mmsegmentation +RUN conda clean --all +RUN git clone https://github.com/open-mmlab/mmsegmenation.git /mmsegmentation +WORKDIR /mmsegmentation +ENV FORCE_CUDA="1" +RUN pip install --no-cache-dir -e . diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 000000000..d4bb2cbb9 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/api.rst b/docs/api.rst new file mode 100644 index 000000000..9c14a6756 --- /dev/null +++ b/docs/api.rst @@ -0,0 +1,61 @@ +API Reference +============== + +mmseg.apis +-------------- +.. automodule:: mmseg.apis + :members: + +mmseg.core +-------------- + +seg +^^^^^^^^^^ +.. automodule:: mmseg.core.seg + :members: + +evaluation +^^^^^^^^^^ +.. automodule:: mmseg.core.evaluation + :members: + +utils +^^^^^^^^^^ +.. automodule:: mmseg.core.utils + :members: + +mmseg.datasets +-------------- + +datasets +^^^^^^^^^^ +.. automodule:: mmseg.datasets + :members: + +pipelines +^^^^^^^^^^ +.. automodule:: mmseg.datasets.pipelines + :members: + +mmseg.models +-------------- + +segmentors +^^^^^^^^^^ +.. automodule:: mmseg.models.segmentors + :members: + +backbones +^^^^^^^^^^ +.. automodule:: mmseg.models.backbones + :members: + +decode_heads +^^^^^^^^^^^^ +.. automodule:: mmseg.models.decode_heads + :members: + +losses +^^^^^^^^^^ +.. automodule:: mmseg.models.losses + :members: diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 000000000..20f2534de --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,72 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('..')) + +# -- Project information ----------------------------------------------------- + +project = 'MMSegmentation' +copyright = '2020-2020, OpenMMLab' +author = 'MMSegmentation Authors' + +# The full version, including alpha/beta/rc tags +with open('../mmseg/VERSION', 'r') as f: + release = f.read().strip() + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'recommonmark', + 'sphinx_markdown_tables', +] + +autodoc_mock_imports = ['matplotlib', 'pycocotools', 'mmseg.version'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = { + '.rst': 'restructuredtext', + '.md': 'markdown', +} + +# The master toctree document. +master_doc = 'index' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] diff --git a/docs/config.md b/docs/config.md new file mode 100644 index 000000000..e07fdfee8 --- /dev/null +++ b/docs/config.md @@ -0,0 +1,365 @@ +# Config System +We incorporate modular and inheritance design into our config system, which is convenient to conduct various experiments. +If you wish to inspect the config file, you may run `python tools/print_config.py /PATH/TO/CONFIG` to see the complete config. +You may also pass `--options xxx.yyy=zzz` to see updated config. + +## Config File Structure + +There are 4 basic component types under `config/_base_`, dataset, model, schedule, default_runtime. +Many methods could be easily constructed with one of each like DeepLabV3, PSPNet. +The configs that are composed by components from `_base_` are called _primitive_. + +For all configs under the same folder, it is recommended to have only **one** _primitive_ config. All other configs should inherit from the _primitive_ config. In this way, the maximum of inheritance level is 3. + +For easy understanding, we recommend contributors to inherit from exiting methods. +For example, if some modification is made base on DeepLabV3, user may first inherit the basic DeepLabV3 structure by specifying `_base_ = ../deeplabv3/deeplabv3_r50_512x1024_40ki_cityscapes.py`, then modify the necessary fields in the config files. + +If you are building an entirely new method that does not share the structure with any of the existing methods, you may create a folder `xxxnet` under `configs`, + +Please refer to [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#config) for detailed documentation. + +## Config Name Style + +We follow the below style to name config files. Contributors are advised to follow the same style. + +``` +{model}_{backbone}_[misc]_[gpu x batch_per_gpu]_{resolution}_{schedule}_{dataset} +``` + +`{xxx}` is required field and `[yyy]` is optional. + +- `{model}`: model type like `psp`, `deeplabv3`, etc. +- `{backbone}`: backbone type like `r50` (ResNet-50), `x101` (ResNeXt-101). +- `[misc]`: miscellaneous setting/plugins of model, e.g. `dconv`, `gcb`, `attention`, `mstrain`. +- `[gpu x batch_per_gpu]`: GPUs and samples per GPU, `8x2` is used by default. +- `{schedule}`: training schedule, `20ki` means 20k iterations. +- `{dataset}`: dataset like `cityscapes`, `voc12aug`, `ade`. + +## An Example of PSPNet + +To help the users have a basic idea of a complete config and the modules in a modern semantic segmentation system, +we make brief comments on the config of PSPNet using ResNet50V1c as the following. +For more detailed usage and the corresponding alternative for each modules, please refer to the API documentation. + +```python +norm_cfg = dict(type='SyncBN', requires_grad=True) # Segmentation usually uses SyncBN +model = dict( + type='EncoderDecoder', # Name of segmentor + pretrained='open-mmlab://resnet50_v1c', # The ImageNet pretrained backbone to be loaded + backbone=dict( + type='ResNetV1c', # The type of backbone. Please refer to mmseg/backbone/resnet.py for details. + depth=50, # Depth of backbone. Normally 50, 101 are used. + num_stages=4, # Number of stages of backbone. + out_indices=(0, 1, 2, 3), # The index of output feature maps produced in each stages. + dilations=(1, 1, 2, 4), # The dilation rate of each layer. + strides=(1, 2, 1, 1), # The stride of each layer. + norm_cfg=dict( # The configuration of norm layer. + type='SyncBN', # Type of norm layer. Usually it is SyncBN. + requires_grad=True), # Whether to train the gamma and beta in norm + norm_eval=False, # Whether to freeze the statistics in BN + style='pytorch', # The style of backbone, 'pytorch' means that stride 2 layers are in 3x3 conv, 'caffe' means stride 2 layers are in 1x1 convs. + contract_dilation=True), # When dilation > 1, whether contract first layer of dilation. + decode_head=dict( + type='PSPHead', # Type of decode head. Please refer to mmseg/models/decode_heads for available options. + in_channels=2048, # Input channel of decode head. + in_index=3, # The index of feature map to select. + channels=512, # The intermediate channels of decode head. + pool_scales=(1, 2, 3, 6), # The avg pooling scales of PSPHead. Please refer to paper for details. + drop_out_ratio=0.1, # The dropout ratio before final classification layer. + num_classes=19, # Number of segmentation classs. Usually 19 for cityscapes, 21 for VOC, 150 for ADE20k. + norm_cfg=dict(type='SyncBN', requires_grad=True), # The configuration of norm layer. + align_corners=False, # The align_corners argument for resize in decoding. + loss_decode=dict( # Config of loss function for the decode_head. + type='CrossEntropyLoss', # Type of loss used for segmentation. + use_sigmoid=False, # Whether use sigmoid activation for segmentation. + loss_weight=1.0)), # Loss weight of decode head. + auxiliary_head=dict( + type='FCNHead', # Type of auxiliary head. Please refer to mmseg/models/decode_heads for available options. + in_channels=1024, # Input channel of auxiliary head. + in_index=2, # The index of feature map to select. + channels=256, # The intermediate channels of decode head. + num_convs=1, # Number of convs in FCNHead. It is usually 1 in auxiliary head. + concat_input=False, # Whether concat output of convs with input before classification layer. + drop_out_ratio=0.1, # The dropout ratio before final classification layer. + num_classes=19, # Number of segmentation classs. Usually 19 for cityscapes, 21 for VOC, 150 for ADE20k. + norm_cfg=dict(type='SyncBN', requires_grad=True), # The configuration of norm layer. + align_corners=False, # The align_corners argument for resize in decoding. + loss_decode=dict( # Config of loss function for the decode_head. + type='CrossEntropyLoss', # Type of loss used for segmentation. + use_sigmoid=False, # Whether use sigmoid activation for segmentation. + loss_weight=0.4))) # Loss weight of auxiliary head, which is usually 0.4 of decode head. +train_cfg = dict() # train_cfg is just a place holder for now. +test_cfg = dict(mode='whole') # The test mode, options are 'whole' and 'sliding'. 'whole': whole image fully-convolutional test. 'sliding': sliding crop window on the image. +dataset_type = 'CityscapesDataset' # Dataset type, this will be used to define the dataset. +data_root = 'data/cityscapes/' # Root path of data. +img_norm_cfg = dict( # Image normalization config to normalize the input images. + mean=[123.675, 116.28, 103.53], # Mean values used to pre-training the pre-trained backbone models. + std=[58.395, 57.12, 57.375], # Standard variance used to pre-training the pre-trained backbone models. + to_rgb=True) # The channel orders of image used to pre-training the pre-trained backbone models. +crop_size = (512, 1024) # The crop size during training. +train_pipeline = [ # Training pipeline. + dict(type='LoadImageFromFile'), # First pipeline to load images from file path. + dict(type='LoadAnnotations'), # Second pipeline to load annotations for current image. + dict(type='Resize', # Augmentation pipeline that resize the images and their annotations. + img_scale=(2048, 1024), # The largest scale of image. + ratio_range=(0.5, 2.0)), # The augmented scale range as ratio. + dict(type='RandomCrop', # Augmentation pipeline that randomly crop a patch from current image. + crop_size=(512, 1024), # The crop size of patch. + cat_max_ratio=0.75), # The max area ratio that could be occupied by single category. + dict( + type='RandomFlip', # Augmentation pipeline that flip the images and their annotations + flip_ratio=0.5), # The ratio or probability to flip + dict(type='PhotoMetricDistortion'), # Augmentation pipeline that distort current image with several photo metric methods. + dict( + type='Normalize', # Augmentation pipeline that normalize the input images + mean=[123.675, 116.28, 103.53], # These keys are the same of img_norm_cfg since the + std=[58.395, 57.12, 57.375], # keys of img_norm_cfg are used here as arguments + to_rgb=True), + dict(type='Pad', # Augmentation pipeline that pad the image to specified size. + size=(512, 1024), # The output size of padding. + pad_val=0, # The padding value for image. + seg_pad_val=255), # The padding value of 'gt_semantic_seg'. + dict(type='DefaultFormatBundle'), # Default format bundle to gather data in the pipeline + dict(type='Collect', # Pipeline that decides which keys in the data should be passed to the segmentor + keys=['img', 'gt_semantic_seg']) +] +test_pipeline = [ + dict(type='LoadImageFromFile'), # First pipeline to load images from file path + dict( + type='MultiScaleFlipAug', # An encapsulation that encapsulates the test time augmentations + img_scale=(2048, 1024), # Decides the largest scale for testing, used for the Resize pipeline + flip=False, # Whether to flip images during testing + transforms=[ + dict(type='Resize', # Use resize augmentation + keep_ratio=True), # Whether to keep the ratio between height and width, the img_scale set here will be supressed by the img_scale set above. + dict(type='RandomFlip'), # Thought RandomFlip is added in pipeline, it is not used when flip=False + dict( + type='Normalize', # Normalization config, the values are from img_norm_cfg + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='ImageToTensor', # Convert image to tensor + keys=['img']), + dict(type='Collect', # Collect pipeline that collect necessary keys for testing. + keys=['img']) + ]) +] +data = dict( + samples_per_gpu=2, # Batch size of a single GPU + workers_per_gpu=2, # Worker to pre-fetch data for each single GPU + train=dict( # Train dataset config + type='CityscapesDataset', # Type of dataset, refer to mmseg/datasets/ for details. + data_root='data/cityscapes/', # The root of dataset. + img_dir='leftImg8bit/train', # The image directory of dataset. + ann_dir='gtFine/train', # The annotation directory of dataset. + pipeline=[ # pipeline, this is passed by the train_pipeline created before. + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict( + type='Resize', img_scale=(2048, 1024), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=(512, 1024), cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='Pad', size=(512, 1024), pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']) + ]), + val=dict( # Validation dataset config + type='CityscapesDataset', + data_root='data/cityscapes/', + img_dir='leftImg8bit/val', + ann_dir='gtFine/val', + pipeline=[ # Pipeline is passed by test_pipeline created before + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) + ]), + test=dict( + type='CityscapesDataset', + data_root='data/cityscapes/', + img_dir='leftImg8bit/val', + ann_dir='gtFine/val', + pipeline=[ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict( + type='Normalize', + mean=[123.675, 116.28, 103.53], + std=[58.395, 57.12, 57.375], + to_rgb=True), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']) + ]) + ])) +log_config = dict( # config to register logger hook + interval=50, # Interval to print the log + hooks=[ + # dict(type='TensorboardLoggerHook') # The Tensorboard logger is also supported + dict(type='TextLoggerHook', by_epoch=False) + ]) +dist_params = dict(backend='nccl') # Parameters to setup distributed training, the port can also be set. +log_level = 'INFO' # The level of logging. +load_from = None # load models as a pre-trained model from a given path. This will not resume training. +resume_from = None # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved. +workflow = [('train', 1)] # Workflow for runner. [('train', 1)] means there is only one workflow and the workflow named 'train' is executed once. The workflow trains the model by 12 epochs according to the total_epochs. +cudnn_benchmark = True # Whether use cudnn_benchmark to speed up, which is fast for fixed input size. +optimizer = dict( # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch + type='SGD', # Type of optimizers, refer to https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/optimizer/default_constructor.py#L13 for more details + lr=0.01, # Learning rate of optimizers, see detail usages of the parameters in the documentation of PyTorch + momentum=0.9, # Momentum + weight_decay=0.0005) # Weight decay of SGD +optimizer_config = dict() # Config used to build the optimizer hook, refer to https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/optimizer.py#L8 for implementation details. +lr_config = dict( + policy='poly', # The policy of scheduler, also support Step, CosineAnnealing, Cyclic, etc. Refer to details of supported LrUpdater from https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/lr_updater.py#L9. + power=0.9, # The power of polynomial decay. + min_lr=0.0001, # The minimum learning rate to stable the training. + by_epoch=False) # Whethe count by epoch or not. +total_iters = 40000 # Total number of iterations. +checkpoint_config = dict( # Config to set the checkpoint hook, Refer to https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/checkpoint.py for implementation. + by_epoch=False, # Whethe count by epoch or not. + interval=4000) # The save interval. +evaluation = dict( # The config to build the evaluation hook. Please refer to mmseg/core/evaulation/eval_hook.py for details. + interval=4000, # The interval of evaluation. + metric='mIoU') # The evaluation metric. + + +``` + +## FAQ + +### Ignore some fields in the base configs + +Sometimes, you may set `_delete_=True` to ignore some of fields in base configs. +You may refer to [mmcv](https://mmcv.readthedocs.io/en/latest/utils.html#inherit-from-base-config-with-ignored-fields) for simple inllustration. + +In MMSegmentation, for example, to change the backbone of PSPNet with the following config. + +```python +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='MaskRCNN', + pretrained='torchvision://resnet50', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict(...), + auxiliary_head=dict(...)) +``` + +`ResNet` and `HRNet` use different keywords to construct. + +```python +_base_ = '../pspnet/psp_r50_512x1024_40ki_cityscpaes.py' +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + pretrained='open-mmlab://msra/hrnetv2_w32', + backbone=dict( + _delete_=True, + type='HRNet', + norm_cfg=norm_cfg, + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(32, 64)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(32, 64, 128)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(32, 64, 128, 256)))), + decode_head=dict(...), + auxiliary_head=dict(...)) +``` + +The `_delete_=True` would replace all old keys in `backbone` field with new keys new keys. + +### Use intermediate variables in configs + +Some intermediate variables are used in the configs files, like `train_pipeline`/`test_pipeline` in datasets. +It's worth noting that when modifying intermediate variables in the children configs, user need to pass the intermediate variables into corresponding fields again. +For example, we would like to change multi scale strategy to train/test a PSPNet. `train_pipeline`/`test_pipeline` are intermediate variable we would like modify. +```python +_base_ = '../pspnet/psp_r50_512x1024_40ki_cityscapes.py' +crop_size = (512, 1024) +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict(type='Resize', img_scale=(2048, 1024), ratio_range=(1.0, 2.0)), # change to [1., 2.] + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], # change to multi scale testing + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +data = dict( + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline)) +``` +We first define the new `train_pipeline`/`test_pipeline` and pass them into `data`. diff --git a/docs/getting_started.md b/docs/getting_started.md new file mode 100644 index 000000000..a5ad9b888 --- /dev/null +++ b/docs/getting_started.md @@ -0,0 +1,332 @@ +# Getting Started + +This page provides basic tutorials about the usage of MMSegmentation. +For installation instructions, please see [install.md](install.md). + +## Prepare datasets + +It is recommended to symlink the dataset root to `$MMSEGMENTATION/data`. +If your folder structure is different, you may need to change the corresponding paths in config files. + +``` +mmsegmentation +├── mmseg +├── tools +├── configs +├── data +│ ├── cityscapes +│ │ ├── leftImg8bit +│ │ │ ├── train +│ │ │ ├── val +│ │ ├── gtFine +│ │ │ ├── train +│ │ │ ├── val +│ ├── VOCdevkit +│ │ ├── VOC2012 +│ │ │ ├── JPEGImages +│ │ │ ├── SegmentationClass +│ │ │ ├── ImageSets +│ │ │ │ ├── Segmentation +│ │ ├── VOCaug +│ │ │ ├── dataset +│ │ │ │ ├── cls +│ ├── ade +│ │ ├── ADEChallengeData2016 +│ │ │ ├── annotations +│ │ │ │ ├── training +│ │ │ │ ├── validation +│ │ │ ├── images +│ │ │ │ ├── training +│ │ │ │ ├── validation + +``` + +### Cityscapes +The data could be found [here](https://www.cityscapes-dataset.com/downloads/) after registration. + +By convention, `**labelTrainIds.png` are used for cityscapes training. +We provided a [scripts](../tools/convert_datasets/cityscapes.py) based on [cityscapesscripts](https://github.com/mcordts/cityscapesScripts) +to generate `**labelTrainIds.png`. +```shell +# --nproc means 8 process for conversion, which could be omitted as well. +python tools/convert_datasets/cityscapes.py data/cityscapes --nproc 8 +``` + +### Pascal VOC +Pascal VOC 2012 could be downloaded from [here](http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar). +Beside, most recent works on Pascal VOC dataset usually exploit extra augmentation data, which could be found [here](http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz). + +If you would like to use augmented VOC dataset, please run following command to convert augmentation annotations into proper format. +```shell +# --nproc means 8 process for conversion, which could be omitted as well. +python tools/convert_datasets/voc_aug.py data/VOCdevkit data/VOCdevkit/VOCaug --nproc 8 +``` + +Please refer to [concat dataset](tutorials/new_dataset.md#concatenate-dataset) for details about how to concatenate them and train them together. + + +### ADE20K +The training and validation set of ADE20K could be download from this [link](http://data.csail.mit.edu/places/ADEchallenge/ADEChallengeData2016.zip). +We may also download test set from [here](http://data.csail.mit.edu/places/ADEchallenge/ADEChallengeData2016.zip). + +## Inference with pretrained models + +We provide testing scripts to evaluate a whole dataset (Cityscapes, PASCAL VOC, ADE20k, etc.), +and also some high-level apis for easier integration to other projects. + +### Test a dataset + +- single GPU +- single node multiple GPU +- multiple node + +You can use the following commands to test a dataset. + +```shell +# single-gpu testing +python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] [--show] + +# multi-gpu testing +./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] +``` + +Optional arguments: +- `RESULT_FILE`: Filename of the output results in pickle format. If not specified, the results will not be saved to a file. +- `EVAL_METRICS`: Items to be evaluated on the results. Allowed values depend on the dataset, e.g., `mIoU` is available for all dataset. Cityscapes could be evaluated by `cityscapes` as well as standard `mIoU` metrics. +- `--show`: If specified, segmentation results will be plotted on the images and shown in a new window. It is only applicable to single GPU testing and used for debugging and visualization. Please make sure that GUI is available in your environment, otherwise you may encounter the error like `cannot connect to X server`. +- `--show-dir`: If specified, segmentation results will be plotted on the images and saved to the specified directory. It is only applicable to single GPU testing and used for debugging and visualization. You do NOT need a GUI available in your environment for using this option. + + +Examples: + +Assume that you have already downloaded the checkpoints to the directory `checkpoints/`. + +1. Test PSPNet and visualize the results. Press any key for the next image. + + ```shell + python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ + checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \ + --show + ``` + +2. Test PSPNet and save the painted images for latter visualization. + + ```shell + python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ + checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \ + --show-dir psp_r50_512x1024_40ki_cityscapes_results + ``` + +3. Test PSPNet on PASCAL VOC (without saving the test results) and evaluate the mIoU. + + ```shell + python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_20k_voc12aug.py \ + checkpoints/pspnet_r50-d8_512x1024_20k_voc12aug_20200605_003338-c57ef100.pth \ + --eval mAP + ``` + +4. Test PSPNet with 8 GPUs, and evaluate the standard mIoU and cityscapes metric. + + ```shell + ./tools/dist_test.sh configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ + checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \ + 8 --out results.pkl --eval mIoU cityscapes + ``` + +5. Test PSPNet on cityscapes test split with 8 GPUs, and generate the png files to be submit to the official evaluation server. + + ```shell + ./tools/dist_test.sh configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ + checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \ + 8 --format-only --options "imgfile_prefix=./pspnet_test_results" + ``` + +You will get png files under `./pspnet_test_results` directory. + + +### Image demo + +We provide a demo script to test a single image. + +```shell +python demo/image_demo.py ${IMAGE_FILE} ${CONFIG_FILE} ${CHECKPOINT_FILE} [--device ${DEVICE_NAME}] [--palette-thr ${PALETTE}] +``` + +Examples: + +```shell +python demo/image_demo.py demo/demo.jpg configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ + checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --palette cityscapes +``` + + +### High-level APIs for testing images + +Here is an example of building the model and test given images. + +```python +from mmseg.apis import inference_segmentor, init_segmentor +import mmcv + +config_file = 'configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py' +checkpoint_file = 'checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth' + +# build the model from a config file and a checkpoint file +model = init_segmentor(config_file, checkpoint_file, device='cuda:0') + +# test a single image and show the results +img = 'test.jpg' # or img = mmcv.imread(img), which will only load it once +result = inference_segmentor(model, img) +# visualize the results in a new window +model.show_result(img, result, show=True) +# or save the visualization results to image files +model.show_result(img, result, out_file='result.jpg') + +# test a video and show the results +video = mmcv.VideoReader('video.mp4') +for frame in video: + result = inference_segmentor(model, frame) + model.show_result(frame, result, wait_time=1) +``` + +A notebook demo can be found in [demo/inference_demo.ipynb](../demo/inference_demo.ipynb). + + +## Train a model + +MMSegmentation implements distributed training and non-distributed training, +which uses `MMDistributedDataParallel` and `MMDataParallel` respectively. + +All outputs (log files and checkpoints) will be saved to the working directory, +which is specified by `work_dir` in the config file. + +By default we evaluate the model on the validation set after some iterations, you can change the evaluation interval by adding the interval argument in the training config. +```python +evaluation = dict(interval=4000) # This evaluate the model per 4000 iterations. +``` + +**\*Important\***: The default learning rate in config files is for 8 GPUs and 1 img/gpu (batch size = 8x1 = 8). +Equivalently, you may also use 4 GPUs and 2 imgs/gpu since all models using cross-GPU SyncBN. + +### Train with a single GPU + +```shell +python tools/train.py ${CONFIG_FILE} [optional arguments] +``` + +If you want to specify the working directory in the command, you can add an argument `--work_dir ${YOUR_WORK_DIR}`. + +### Train with multiple GPUs + +```shell +./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments] +``` + +Optional arguments are: + +- `--no-validate` (**not suggested**): By default, the codebase will perform evaluation at every k iterations during the training. To disable this behavior, use `--no-validate`. +- `--work-dir ${WORK_DIR}`: Override the working directory specified in the config file. +- `--resume-from ${CHECKPOINT_FILE}`: Resume from a previous checkpoint file. + +Difference between `resume-from` and `load-from`: +`resume-from` loads both the model weights and optimizer status, and the iteration number is also inherited from the specified checkpoint. It is usually used for resuming the training process that is interrupted accidentally. +`load-from` only loads the model weights and the training iteration starts from 0. It is usually used for finetuning. + +### Train with multiple machines + +If you run MMSegmentation on a cluster managed with [slurm](https://slurm.schedmd.com/), you can use the script `slurm_train.sh`. (This script also supports single machine training.) + +```shell +[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR} +``` + +Here is an example of using 16 GPUs to train PSPNet on the dev partition. + +```shell +GPUS=16 ./tools/slurm_train.sh dev pspr50 configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py /nfs/xxxx/psp_r50_512x1024_40ki_cityscapes +``` + +You can check [slurm_train.sh](../tools/slurm_train.sh) for full arguments and environment variables. + +If you have just multiple machines connected with ethernet, you can refer to +PyTorch [launch utility](https://pytorch.org/docs/stable/distributed_deprecated.html#launch-utility). +Usually it is slow if you do not have high speed networking like InfiniBand. + +### Launch multiple jobs on a single machine + +If you launch multiple jobs on a single machine, e.g., 2 jobs of 4-GPU training on a machine with 8 GPUs, +you need to specify different ports (29500 by default) for each job to avoid communication conflict. + +If you use `dist_train.sh` to launch training jobs, you can set the port in commands. + +```shell +CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 ./tools/dist_train.sh ${CONFIG_FILE} 4 +CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 ./tools/dist_train.sh ${CONFIG_FILE} 4 +``` + +If you use launch training jobs with Slurm, you need to modify the config files (usually the 6th line from the bottom in config files) to set different communication ports. + +In `config1.py`, +```python +dist_params = dict(backend='nccl', port=29500) +``` + +In `config2.py`, +```python +dist_params = dict(backend='nccl', port=29501) +``` + +Then you can launch two jobs with `config1.py` ang `config2.py`. + +```shell +CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config1.py ${WORK_DIR} +CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} config2.py ${WORK_DIR} +``` + +Or you could specify port by `---options dist_params.port=29501` + +## Useful tools + +We provide lots of useful tools under `tools/` directory. + +### Get the FLOPs and params (experimental) + +We provide a script adapted from [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) to compute the FLOPs and params of a given model. + +```shell +python tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}] +``` + +You will get the result like this. + +``` +============================== +Input shape: (3, 2048, 1024) +Flops: 1429.68 GMac +Params: 48.98 M +============================== +``` + +**Note**: This tool is still experimental and we do not guarantee that the number is correct. You may well use the result for simple comparisons, but double check it before you adopt it in technical reports or papers. + +(1) FLOPs are related to the input shape while parameters are not. The default input shape is (1, 3, 1280, 800). +(2) Some operators are not counted into FLOPs like GN and custom operators. +You can add support for new operators by modifying [`mmseg/utils/flops_counter.py`](../mmseg/utils/flops_counter.py). + +### Publish a model + +Before you upload a model to AWS, you may want to +(1) convert model weights to CPU tensors, (2) delete the optimizer states and +(3) compute the hash of the checkpoint file and append the hash id to the filename. + +```shell +python tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME} +``` + +E.g., + +```shell +python tools/publish_model.py work_dirs/pspnet/latest.pth psp_r50_hszhao_200ep.pth +``` + +The final output filename will be `psp_r50_512x1024_40ki_cityscapes-{hash id}.pth`. diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 000000000..caa667724 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,28 @@ +Welcome to MMSegmenation's documentation! +========================================= + +.. toctree:: + :maxdepth: 2 + + install.md + getting_started.md + config.md + model_zoo.md + +.. toctree:: + :maxdepth: 2 + :caption: Tutorials + + tutorials/index.rst + +.. toctree:: + :caption: API Reference + + api.rst + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` diff --git a/docs/install.md b/docs/install.md new file mode 100644 index 000000000..5d6a2d9bc --- /dev/null +++ b/docs/install.md @@ -0,0 +1,89 @@ +## Installation + +### Requirements + +- Linux (Windows is not officially supported) +- Python 3.6+ +- PyTorch 1.3 or higher +- [mmcv](https://github.com/open-mmlab/mmcv) + +### Install mmsegmentation + +a. Create a conda virtual environment and activate it. + +```shell +conda create -n open-mmlab python=3.7 -y +conda activate open-mmlab +``` + +b. Install PyTorch and torchvision following the [official instructions](https://pytorch.org/). +Here we use PyTorch 1.5.0 and CUDA 10.1. +You may also switch to other version by specifying version number. + +```shell +conda install pytorch=1.5.0 torchvision cudatoolkit=10.1 -c pytorch +``` + +c. Clone the mmsegmentation repository. + +```shell +git clone http://github.com/open-mmlab/mmsegmentation +cd mmsegmentation +``` + +d. Install [MMCV](https://mmcv.readthedocs.io/en/latest/). +Either *mmcv* or *mmcv-full* is compatible with MMSegmentation, but for methods like CCNet and PSANet, CUDA ops in *mmcv-full* is required + +The pre-build *mmcv-full* could be installed by running: (available versions could be found [here](https://mmcv.readthedocs.io/en/latest/#install-with-pip)) +``` +pip install mmcv-full==latest+torch1.5.0+cu101 -f https://openmmlab.oss-accelerate.aliyuncs.com/mmcv/dist/index.html +``` + +Optionally, you could also install lite version by running: +``` +pip install mmcv +``` +or build full version from source: +``` +pip install mmcv-full +``` + +e. Install build requirements and then install MMSegmentation. + +```shell +pip install -r requirements/build.txt # or "pip install -r requirements.txt" for everything. +pip install -e . # or "python setup.py develop" +``` + +Note: + +1. The git commit id will be written to the version number with step *e*, e.g. 0.5.0+c415a2e. The version will also be saved in trained models. +It is recommended that you run step *e* each time you pull some updates from github. If C++/CUDA codes are modified, then this step is compulsory. + +2. Following the above instructions, mmsegmentation is installed on `dev` mode, any local modifications made to the code will take effect without the need to reinstall it (unless you submit some commits and want to update the version number). + +3. If you would like to use `opencv-python-headless` instead of `opencv-python`, +you can install it before installing MMCV. + +4. Some dependencies are optional. Simply running `pip install -e .` will only install the minimum runtime requirements. +To use optional dependencies like `cityscapessripts` either install them manually with `pip install -r requirements/optional.txt` or specify desired extras when calling `pip` (e.g. `pip install -e .[optional]`). Valid keys for the extras field are: `all`, `tests`, `build`, and `optional`. + + +### A from-scratch setup script + +Here is a full script for setting up mmsegmentation with conda and link the dataset path (supposing that your dataset path is $DATA_ROOT). + +```shell +conda create -n open-mmlab python=3.7 -y +conda activate open-mmlab + +conda install pytorch=1.5.0 torchvision cudatoolkit=10.1 -c pytorch +git clone http://github.com/open-mmlab/mmsegmentation +cd mmsegmentation +pip install mmcv-full==latest+torch1.5.0+cu101 -f https://openmmlab.oss-accelerate.aliyuncs.com/mmcv/dist/index.html +pip install -r requirements/build.txt +pip install -e . + +mkdir data +ln -s $DATA_ROOT data +``` diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 000000000..922152e96 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/model_zoo.json b/docs/model_zoo.json new file mode 100644 index 000000000..cc14cce04 --- /dev/null +++ b/docs/model_zoo.json @@ -0,0 +1,2724 @@ +{ + "ccnet": { + "voc12aug": [ + [ + [ + "CCNet", + "R-50-D8", + "512x512", + 20000, + "6.0", + 20.446969644812683, + 76.168, + 77.51245728562927, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212-fad81784.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_20k_voc12aug/ccnet_r50-d8_512x512_20k_voc12aug_20200617_193212.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "512x512", + 20000, + "9.5", + 13.637111132708073, + 77.274, + 79.02193536016937, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212-0007b61d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_20k_voc12aug/ccnet_r101-d8_512x512_20k_voc12aug_20200617_193212.log.json)" + ], + [ + "CCNet", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 75.96300000000001, + 77.03666314173265, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127-c2a15f02.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_40k_voc12aug/ccnet_r50-d8_512x512_40k_voc12aug_20200613_232127.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 77.86800000000001, + 78.90226783309761, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127-c30da577.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_40k_voc12aug/ccnet_r101-d8_512x512_40k_voc12aug_20200613_232127.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "CCNet", + "R-50-D8", + "512x1024", + 40000, + "6.0", + 3.321448861645321, + 77.757, + 78.87281569371032, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517-4123f401.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes/ccnet_r50-d8_512x1024_40k_cityscapes_20200616_142517.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "512x1024", + 40000, + "9.5", + 2.3057084889880533, + 76.346, + 78.19477535704155, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540-a3b84ba6.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes/ccnet_r101-d8_512x1024_40k_cityscapes_20200616_142540.log.json)" + ], + [ + "CCNet", + "R-50-D8", + "769x769", + 40000, + "6.8", + 1.4297640908184566, + 78.461, + 79.9288478571096, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125-76d11884.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_769x769_40k_cityscapes/ccnet_r50-d8_769x769_40k_cityscapes_20200616_145125.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "769x769", + 40000, + "10.7", + 1.0054480750692631, + 76.941, + 78.62346948358564, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428-4f57c8d0.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_769x769_40k_cityscapes/ccnet_r101-d8_769x769_40k_cityscapes_20200617_101428.log.json)" + ], + [ + "CCNet", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 79.035, + 80.1605485551008, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421-869a3423.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes/ccnet_r50-d8_512x1024_80k_cityscapes_20200617_010421.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 78.86800000000001, + 79.89770560760813, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935-ffae8917.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes/ccnet_r101-d8_512x1024_80k_cityscapes_20200617_203935.log.json)" + ], + [ + "CCNet", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.295, + 81.07581708289482, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421-73eed8ca.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_769x769_80k_cityscapes/ccnet_r50-d8_769x769_80k_cityscapes_20200617_010421.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 79.449, + 80.65765062513057, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502-ad3cd481.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_769x769_80k_cityscapes/ccnet_r101-d8_769x769_80k_cityscapes_20200618_011502.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "CCNet", + "R-50-D8", + "512x512", + 80000, + "8.8", + 20.889847025344185, + 41.776, + 42.980388602332184, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848-aa37f61e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_80k_ade20k/ccnet_r50-d8_512x512_80k_ade20k_20200615_014848.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "512x512", + 80000, + "12.2", + 14.108705519350595, + 43.972, + 45.13437368692854, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848-1f4929a3.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_80k_ade20k/ccnet_r101-d8_512x512_80k_ade20k_20200615_014848.log.json)" + ], + [ + "CCNet", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 42.079, + 43.131354987778764, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435-7c97193b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r50-d8_512x512_160k_ade20k/ccnet_r50-d8_512x512_160k_ade20k_20200616_084435.log.json)" + ], + [ + "CCNet", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 43.706, + 45.043400185988624, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644-e849e007.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ccnet/ccnet_r101-d8_512x512_160k_ade20k/ccnet_r101-d8_512x512_160k_ade20k_20200616_000644.log.json)" + ] + ] + ] + }, + "ocrnet": { + "cityscapes": [ + [ + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x1024", + 40000, + "3.5", + 10.452887853499684, + 74.30099999999999, + 75.94532264911325, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes/ocrnet_hr18s_512x1024_40k_cityscapes_20200601_033304-fa2436c2.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes/ocrnet_hr18s_512x1024_40k_cityscapes_20200601_033304.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x1024", + 40000, + "4.7", + 7.504321415510909, + 77.71900000000001, + 79.49233034088692, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320-401c5bdd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes/ocrnet_hr18_512x1024_40k_cityscapes_20200601_033320.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x1024", + 40000, + "8.0", + 4.215373853142414, + 80.58, + 81.79213277409706, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336-55b32491.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x1024_40k_cityscapes/ocrnet_hr48_512x1024_40k_cityscapes_20200601_033336.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x1024", + 80000, + "-", + "-", + 77.157, + 78.66157171766707, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735-55979e63.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes/ocrnet_hr18s_512x1024_80k_cityscapes_20200601_222735.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x1024", + 80000, + "-", + "-", + 78.568, + 80.45534029123633, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521-c2e1dd4a.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes/ocrnet_hr18_512x1024_80k_cityscapes_20200614_230521.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x1024", + 80000, + "-", + "-", + 80.704, + 81.87462053536443, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752-9076bcdf.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x1024_80k_cityscapes/ocrnet_hr48_512x1024_80k_cityscapes_20200601_222752.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x1024", + 160000, + "-", + "-", + 78.448, + 79.9684406563932, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005-f4a7af28.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes/ocrnet_hr18s_512x1024_160k_cityscapes_20200602_191005.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x1024", + 160000, + "-", + "-", + 79.473, + 80.91408916940453, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001-b9172d0c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes/ocrnet_hr18_512x1024_160k_cityscapes_20200602_191001.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x1024", + 160000, + "-", + "-", + 81.34599999999999, + 82.69728960882979, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037-dfbf1b0c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x1024_160k_cityscapes/ocrnet_hr48_512x1024_160k_cityscapes_20200602_191037.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x512", + 20000, + "3.5", + 31.554844022107428, + 71.7, + 73.83921653423745, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913-02b04fcb.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug/ocrnet_hr18s_512x512_20k_voc12aug_20200617_233913.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x512", + 20000, + "4.7", + 19.90720967998522, + 74.749, + 77.1105042314631, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932-8954cbb7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_20k_voc12aug/ocrnet_hr18_512x512_20k_voc12aug_20200617_233932.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x512", + 20000, + "8.1", + 17.82942134961672, + 77.72, + 79.87183377075576, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932-9e82080a.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_20k_voc12aug/ocrnet_hr48_512x512_20k_voc12aug_20200617_233932.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x512", + 40000, + "-", + "-", + 72.761, + 74.6014601681293, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025-42b587ac.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug/ocrnet_hr18s_512x512_40k_voc12aug_20200614_002025.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x512", + 40000, + "-", + "-", + 74.982, + 77.39817842813225, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958-714302be.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_40k_voc12aug/ocrnet_hr18_512x512_40k_voc12aug_20200614_015958.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x512", + 40000, + "-", + "-", + 77.143, + 79.70754598517257, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958-255bc5ce.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_40k_voc12aug/ocrnet_hr48_512x512_40k_voc12aug_20200614_015958.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x512", + 80000, + "6.7", + 28.980094398974657, + 35.056, + 35.797050387137105, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600-e80b62af.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_80k_ade20k/ocrnet_hr18s_512x512_80k_ade20k_20200615_055600.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x512", + 80000, + "7.9", + 18.928971854245283, + 37.789, + 39.155377232744, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157-d173d83b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_80k_ade20k/ocrnet_hr18_512x512_80k_ade20k_20200615_053157.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x512", + 80000, + "11.2", + 16.991178423144667, + 43.0, + 44.299600723103225, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518-d168c2d1.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_80k_ade20k/ocrnet_hr48_512x512_80k_ade20k_20200615_021518.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18-Small", + "512x512", + 160000, + "-", + "-", + 37.191, + 38.40331034259458, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505-8e913058.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18s_512x512_160k_ade20k/ocrnet_hr18s_512x512_160k_ade20k_20200615_184505.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W18", + "512x512", + 160000, + "-", + "-", + 39.322, + 40.80220494656125, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940-d8fcd9d1.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr18_512x512_160k_ade20k/ocrnet_hr18_512x512_160k_ade20k_20200615_200940.log.json)" + ], + [ + "OCRNet", + "HRNetV2p-W48", + "512x512", + 160000, + "-", + "-", + 43.254, + 44.87655360616251, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705-a073726d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ocrnet/ocrnet_hr48_512x512_160k_ade20k/ocrnet_hr48_512x512_160k_ade20k_20200615_184705.log.json)" + ] + ] + ] + }, + "fcn": { + "ade20k": [ + [ + [ + "FCN", + "R-50-D8", + "512x512", + 80000, + "8.5", + 23.4864501408415, + 35.94, + 37.93716647334422, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016-f8ac5082.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_80k_ade20k/fcn_r50-d8_512x512_80k_ade20k_20200614_144016.log.json)" + ], + [ + "FCN", + "R-101-D8", + "512x512", + 80000, + "12.0", + 14.780950192500319, + 39.614, + 40.827367113582405, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143-bc1809f7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_80k_ade20k/fcn_r101-d8_512x512_80k_ade20k_20200615_014143.log.json)" + ], + [ + "FCN", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 36.105, + 38.078772436420934, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713-4edbc3b4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_160k_ade20k/fcn_r50-d8_512x512_160k_ade20k_20200615_100713.log.json)" + ], + [ + "FCN", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 39.914, + 41.39843118160508, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816-fd192bd5.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_160k_ade20k/fcn_r101-d8_512x512_160k_ade20k_20200615_105816.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "FCN", + "R-50-D8", + "512x1024", + 40000, + "5.7", + 4.169686275718568, + 72.246, + 73.35990418338677, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608-efe53f0d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x1024_40k_cityscapes/fcn_r50-d8_512x1024_40k_cityscapes_20200604_192608.log.json)" + ], + [ + "FCN", + "R-101-D8", + "512x1024", + 40000, + "9.2", + 2.6579467518998623, + 75.44999999999999, + 76.58052712300109, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852-a883d3a1.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x1024_40k_cityscapes/fcn_r101-d8_512x1024_40k_cityscapes_20200604_181852.log.json)" + ], + [ + "FCN", + "R-50-D8", + "769x769", + 40000, + "6.5", + 1.796476680257555, + 71.47099999999999, + 72.53595679063739, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104-977b5d02.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_769x769_40k_cityscapes/fcn_r50-d8_769x769_40k_cityscapes_20200606_113104.log.json)" + ], + [ + "FCN", + "R-101-D8", + "769x769", + 40000, + "10.4", + 1.1858280952855258, + 73.929, + 75.13723386002961, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208-7d4ab69c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_769x769_40k_cityscapes/fcn_r101-d8_769x769_40k_cityscapes_20200606_113208.log.json)" + ], + [ + "FCN", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 73.61, + 74.23620409061135, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019-03aa804d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x1024_80k_cityscapes/fcn_r50-d8_512x1024_80k_cityscapes_20200606_113019.log.json)" + ], + [ + "FCN", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 75.13300000000001, + 75.93619310604196, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038-3fb937eb.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x1024_80k_cityscapes/fcn_r101-d8_512x1024_80k_cityscapes_20200606_113038.log.json)" + ], + [ + "FCN", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 72.643, + 73.31626041581089, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749-f5caeabc.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_769x769_80k_cityscapes/fcn_r50-d8_769x769_80k_cityscapes_20200606_195749.log.json)" + ], + [ + "FCN", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 75.519, + 76.60857360886911, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354-45cbac68.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_769x769_80k_cityscapes/fcn_r101-d8_769x769_80k_cityscapes_20200606_214354.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "FCN", + "R-50-D8", + "512x512", + 20000, + "5.7", + 23.28063707693325, + 67.085, + 69.9383574378687, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715-52dc5306.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_20k_voc12aug/fcn_r50-d8_512x512_20k_voc12aug_20200617_010715.log.json)" + ], + [ + "FCN", + "R-101-D8", + "512x512", + 20000, + "9.2", + 14.80917380811037, + 71.16, + 73.56633022724682, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842-0bb4e798.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_20k_voc12aug/fcn_r101-d8_512x512_20k_voc12aug_20200617_010842.log.json)" + ], + [ + "FCN", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 66.971, + 69.03918575643368, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222-5e2dbf40.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r50-d8_512x512_40k_voc12aug/fcn_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json)" + ], + [ + "FCN", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 69.90899999999999, + 72.3822015171163, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240-4c8bcefd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/fcn/fcn_r101-d8_512x512_40k_voc12aug/fcn_r101-d8_512x512_40k_voc12aug_20200613_161240.log.json)" + ] + ] + ] + }, + "upernet": { + "cityscapes": [ + [ + [ + "UPerNet", + "R-50", + "512x1024", + 40000, + "6.4", + 4.250181636943019, + 77.096, + 78.3708722046974, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827-aa54cb54.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x1024_40k_cityscapes/upernet_r50_512x1024_40k_cityscapes_20200605_094827.log.json)" + ], + [ + "UPerNet", + "R-101", + "512x1024", + 40000, + "7.4", + 3.7930291329191848, + 78.689, + 80.10934950511658, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933-ebce3b10.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x1024_40k_cityscapes/upernet_r101_512x1024_40k_cityscapes_20200605_094933.log.json)" + ], + [ + "UPerNet", + "R-50", + "769x769", + 40000, + "7.2", + 1.7640659185483825, + 77.97699999999999, + 79.70262909350413, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048-92d21539.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_769x769_40k_cityscapes/upernet_r50_769x769_40k_cityscapes_20200530_033048.log.json)" + ], + [ + "UPerNet", + "R-101", + "769x769", + 40000, + "8.4", + 1.5620856953198976, + 79.03099999999999, + 80.76684306267266, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819-83c95d01.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_769x769_40k_cityscapes/upernet_r101_769x769_40k_cityscapes_20200530_040819.log.json)" + ], + [ + "UPerNet", + "R-50", + "512x1024", + 80000, + "-", + "-", + 78.193, + 79.18874361591651, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207-848beca8.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x1024_80k_cityscapes/upernet_r50_512x1024_80k_cityscapes_20200607_052207.log.json)" + ], + [ + "UPerNet", + "R-101", + "512x1024", + 80000, + "-", + "-", + 79.396, + 80.45737464738971, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403-f05f2345.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x1024_80k_cityscapes/upernet_r101_512x1024_80k_cityscapes_20200607_002403.log.json)" + ], + [ + "UPerNet", + "R-50", + "769x769", + 80000, + "-", + "-", + 79.389, + 80.91628431360874, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107-82ae7d15.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_769x769_80k_cityscapes/upernet_r50_769x769_80k_cityscapes_20200607_005107.log.json)" + ], + [ + "UPerNet", + "R-101", + "769x769", + 80000, + "-", + "-", + 80.096, + 81.49282902181865, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014-082fc334.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_769x769_80k_cityscapes/upernet_r101_769x769_80k_cityscapes_20200607_001014.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "UPerNet", + "R-50", + "512x512", + 20000, + "6.4", + 23.173912855179744, + 74.823, + 76.3452508971145, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330-5b5890a7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_20k_voc12aug/upernet_r50_512x512_20k_voc12aug_20200617_165330.log.json)" + ], + [ + "UPerNet", + "R-101", + "512x512", + 20000, + "7.5", + 19.980025806149488, + 77.096, + 78.28805607216208, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629-f14e7f27.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_20k_voc12aug/upernet_r101_512x512_20k_voc12aug_20200617_165629.log.json)" + ], + [ + "UPerNet", + "R-50", + "512x512", + 40000, + "-", + "-", + 75.921, + 77.43852589851066, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257-ca9bcc6b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_40k_voc12aug/upernet_r50_512x512_40k_voc12aug_20200613_162257.log.json)" + ], + [ + "UPerNet", + "R-101", + "512x512", + 40000, + "-", + "-", + 77.432, + 78.55592324577675, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549-e26476ac.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_40k_voc12aug/upernet_r101_512x512_40k_voc12aug_20200613_163549.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "UPerNet", + "R-50", + "512x512", + 80000, + "8.1", + 23.404934213597443, + 40.704, + 41.80915610272295, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127-ecc8377b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_80k_ade20k/upernet_r50_512x512_80k_ade20k_20200614_144127.log.json)" + ], + [ + "UPerNet", + "R-101", + "512x512", + 80000, + "9.1", + 20.336544682582634, + 42.91, + 43.95794963214672, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117-32e4db94.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_80k_ade20k/upernet_r101_512x512_80k_ade20k_20200614_185117.log.json)" + ], + [ + "UPerNet", + "R-50", + "512x512", + 160000, + "-", + "-", + 42.05, + 42.784926632807014, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328-8534de8d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r50_512x512_160k_ade20k/upernet_r50_512x512_160k_ade20k_20200615_184328.log.json)" + ], + [ + "UPerNet", + "R-101", + "512x512", + 160000, + "-", + "-", + 43.824999999999996, + 44.84822175137515, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951-91b32684.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/upernet/upernet_r101_512x512_160k_ade20k/upernet_r101_512x512_160k_ade20k_20200615_161951.log.json)" + ] + ] + ] + }, + "encnet": { + "ade20k": [ + [ + [ + "encnet", + "R-50-D8", + "512x512", + 80000, + "10.1", + 22.81234693333879, + 39.53, + 41.174465044693534, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k_20200622_042412-44b46b04.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x512_80k_ade20k/encnet_r50-d8_512x512_80k_ade20k-20200622_042412.log.json)" + ], + [ + "encnet", + "R-101-D8", + "512x512", + 80000, + "13.6", + 14.8713593833497, + 42.108000000000004, + 43.60970109562513, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k_20200622_101128-dd35e237.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x512_80k_ade20k/encnet_r101-d8_512x512_80k_ade20k-20200622_101128.log.json)" + ], + [ + "encnet", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 40.096, + 41.71317203062112, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k_20200622_101059-b2db95e0.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x512_160k_ade20k/encnet_r50-d8_512x512_160k_ade20k-20200622_101059.log.json)" + ], + [ + "encnet", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 42.61, + 44.01125617918497, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k_20200622_073348-7989641f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x512_160k_ade20k/encnet_r101-d8_512x512_160k_ade20k-20200622_073348.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "encnet", + "R-50-D8", + "512x1024", + 40000, + "8.6", + 4.579766763724604, + 75.672, + 77.08129779577173, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes_20200621_220958-68638a47.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x1024_40k_cityscapes/encnet_r50-d8_512x1024_40k_cityscapes-20200621_220958.log.json)" + ], + [ + "encnet", + "R-101-D8", + "512x1024", + 40000, + "12.1", + 2.6579084094229293, + 75.81099999999999, + 77.20722229497062, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes_20200621_220933-35e0a3e8.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x1024_40k_cityscapes/encnet_r101-d8_512x1024_40k_cityscapes-20200621_220933.log.json)" + ], + [ + "encnet", + "R-50-D8", + "769x769", + 40000, + "9.8", + 1.815523577456311, + 76.244, + 77.8544931191627, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes_20200621_220958-3bcd2884.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_769x769_40k_cityscapes/encnet_r50-d8_769x769_40k_cityscapes-20200621_220958.log.json)" + ], + [ + "encnet", + "R-101-D8", + "769x769", + 40000, + "13.7", + 1.2586694727171592, + 74.248, + 76.2517491915298, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes_20200621_220933-2fafed55.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_769x769_40k_cityscapes/encnet_r101-d8_769x769_40k_cityscapes-20200621_220933.log.json)" + ], + [ + "encnet", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 77.93900000000001, + 79.12604738206694, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes_20200622_003554-fc5c5624.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_512x1024_80k_cityscapes/encnet_r50-d8_512x1024_80k_cityscapes-20200622_003554.log.json)" + ], + [ + "encnet", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 78.55499999999999, + 79.46808306901366, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes_20200622_003555-1de64bec.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_512x1024_80k_cityscapes/encnet_r101-d8_512x1024_80k_cityscapes-20200622_003555.log.json)" + ], + [ + "encnet", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 77.444, + 78.71857972971966, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes_20200622_003554-55096dcb.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r50-d8_769x769_80k_cityscapes/encnet_r50-d8_769x769_80k_cityscapes-20200622_003554.log.json)" + ], + [ + "encnet", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 76.099, + 76.97183988185541, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes_20200622_003555-470ef79d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/encnet/encnet_r101-d8_769x769_80k_cityscapes/encnet_r101-d8_769x769_80k_cityscapes-20200622_003555.log.json)" + ] + ] + ] + }, + "psanet": { + "voc12aug": [ + [ + [ + "PSANet", + "R-50-D8", + "512x512", + 20000, + "6.9", + 18.243332440478824, + 76.393, + 77.3406686160825, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413-2f1bbaa1.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_20k_voc12aug/psanet_r50-d8_512x512_20k_voc12aug_20200617_102413.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "512x512", + 20000, + "10.4", + 12.62519076615176, + 77.90700000000001, + 79.30352112599553, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624-946fef11.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_20k_voc12aug/psanet_r101-d8_512x512_20k_voc12aug_20200617_110624.log.json)" + ], + [ + "PSANet", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 76.305, + 77.35064085992029, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946-f596afb5.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_40k_voc12aug/psanet_r50-d8_512x512_40k_voc12aug_20200613_161946.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 77.73400000000001, + 79.0523901742458, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946-1f560f9e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_40k_voc12aug/psanet_r101-d8_512x512_40k_voc12aug_20200613_161946.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "PSANet", + "R-50-D8", + "512x1024", + 40000, + "7.0", + 3.1667705694500796, + 77.628, + 79.0422496865149, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117-99fac37c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x1024_40k_cityscapes/psanet_r50-d8_512x1024_40k_cityscapes_20200606_103117.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "512x1024", + 40000, + "10.5", + 2.2037021448307477, + 79.13900000000001, + 80.19378817152979, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418-27b9cfa7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x1024_40k_cityscapes/psanet_r101-d8_512x1024_40k_cityscapes_20200606_001418.log.json)" + ], + [ + "PSANet", + "R-50-D8", + "769x769", + 40000, + "7.9", + 1.4027260879051224, + 77.991, + 79.63690034167004, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717-d5365506.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_769x769_40k_cityscapes/psanet_r50-d8_769x769_40k_cityscapes_20200530_033717.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "769x769", + 40000, + "11.9", + 0.9842023985382289, + 78.432, + 80.26050149532226, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107-997da1e6.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_769x769_40k_cityscapes/psanet_r101-d8_769x769_40k_cityscapes_20200530_035107.log.json)" + ], + [ + "PSANet", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 77.239, + 78.69336591221833, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842-ab60a24f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x1024_80k_cityscapes/psanet_r50-d8_512x1024_80k_cityscapes_20200606_161842.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 79.315, + 80.53461181920574, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823-0f73a169.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x1024_80k_cityscapes/psanet_r101-d8_512x1024_80k_cityscapes_20200606_161823.log.json)" + ], + [ + "PSANet", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.315, + 80.91271206157141, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134-fe42f49e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_769x769_80k_cityscapes/psanet_r50-d8_769x769_80k_cityscapes_20200606_225134.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 79.687, + 80.88962393764702, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550-7665827b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_769x769_80k_cityscapes/psanet_r101-d8_769x769_80k_cityscapes_20200606_214550.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "PSANet", + "R-50-D8", + "512x512", + 80000, + "9.0", + 18.906812073042055, + 41.141, + 41.91306881085375, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141-835e4b97.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_80k_ade20k/psanet_r50-d8_512x512_80k_ade20k_20200614_144141.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "512x512", + 80000, + "12.5", + 13.12564520230877, + 43.797999999999995, + 44.751736929040355, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117-1fab60d4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_80k_ade20k/psanet_r101-d8_512x512_80k_ade20k_20200614_185117.log.json)" + ], + [ + "PSANet", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 41.668, + 42.950020936188984, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258-148077dd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r50-d8_512x512_160k_ade20k/psanet_r50-d8_512x512_160k_ade20k_20200615_161258.log.json)" + ], + [ + "PSANet", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 43.742999999999995, + 45.37610124877713, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537-dbfa564c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/psanet/psanet_r101-d8_512x512_160k_ade20k/psanet_r101-d8_512x512_160k_ade20k_20200615_161537.log.json)" + ] + ] + ] + }, + "danet": { + "voc12aug": [ + [ + [ + "DANet", + "R-50-D8", + "512x512", + 20000, + "6.5", + 20.943311686542472, + 74.455, + 75.68810367906634, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026-9e9e3ab3.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_20k_voc12aug/danet_r50-d8_512x512_20k_voc12aug_20200618_070026.log.json)" + ], + [ + "DANet", + "R-101-D8", + "512x512", + 20000, + "9.9", + 13.758801929101844, + 76.024, + 77.22605579984322, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026-d48d23b2.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_20k_voc12aug/danet_r101-d8_512x512_20k_voc12aug_20200618_070026.log.json)" + ], + [ + "DANet", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 76.371, + 77.29119104649632, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526-426e3a64.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_40k_voc12aug/danet_r50-d8_512x512_40k_voc12aug_20200613_235526.log.json)" + ], + [ + "DANet", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 76.508, + 77.31718399039389, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031-788e232a.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_40k_voc12aug/danet_r101-d8_512x512_40k_voc12aug_20200613_223031.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "DANet", + "R-50-D8", + "512x512", + 80000, + "11.5", + 21.197953173726543, + 41.662, + 42.90219783063448, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125-edb18e08.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_80k_ade20k/danet_r50-d8_512x512_80k_ade20k_20200615_015125.log.json)" + ], + [ + "DANet", + "R-101-D8", + "512x512", + 80000, + "15.0", + 14.176784169645225, + 43.645, + 45.19098849554861, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126-d0357c73.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_80k_ade20k/danet_r101-d8_512x512_80k_ade20k_20200615_015126.log.json)" + ], + [ + "DANet", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 42.449999999999996, + 43.251880532863545, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340-9cb35dcd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x512_160k_ade20k/danet_r50-d8_512x512_160k_ade20k_20200616_082340.log.json)" + ], + [ + "DANet", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 44.171, + 45.016860694179314, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348-23bf12f9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x512_160k_ade20k/danet_r101-d8_512x512_160k_ade20k_20200616_082348.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "DANet", + "R-50-D8", + "512x1024", + 40000, + "7.4", + 2.655504792992914, + 78.741, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324-c0dbfa5f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x1024_40k_cityscapes/danet_r50-d8_512x1024_40k_cityscapes_20200605_191324.log.json)" + ], + [ + "DANet", + "R-101-D8", + "512x1024", + 40000, + "10.9", + 1.9939886829099438, + 80.521, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831-c57a7157.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x1024_40k_cityscapes/danet_r101-d8_512x1024_40k_cityscapes_20200605_200831.log.json)" + ], + [ + "DANet", + "R-50-D8", + "769x769", + 40000, + "8.8", + 1.5557926799730137, + 78.88, + 80.61866776927825, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703-76681c60.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_769x769_40k_cityscapes/danet_r50-d8_769x769_40k_cityscapes_20200530_025703.log.json)" + ], + [ + "DANet", + "R-101-D8", + "769x769", + 40000, + "12.8", + 1.0655867297959223, + 79.88199999999999, + 81.46525733416875, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717-dcb7fd4e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_769x769_40k_cityscapes/danet_r101-d8_769x769_40k_cityscapes_20200530_025717.log.json)" + ], + [ + "DANet", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 79.336, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029-2bfa2293.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_512x1024_80k_cityscapes/danet_r50-d8_512x1024_80k_cityscapes_20200607_133029.log.json)" + ], + [ + "DANet", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 80.413, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918-955e6350.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_512x1024_80k_cityscapes/danet_r101-d8_512x1024_80k_cityscapes_20200607_132918.log.json)" + ], + [ + "DANet", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.274, + 80.96441839831498, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954-495689b4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r50-d8_769x769_80k_cityscapes/danet_r50-d8_769x769_80k_cityscapes_20200607_132954.log.json)" + ], + [ + "DANet", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 80.471, + 82.020171090948, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918-f3a929e7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/danet/danet_r101-d8_769x769_80k_cityscapes/danet_r101-d8_769x769_80k_cityscapes_20200607_132918.log.json)" + ] + ] + ] + }, + "hrnet": { + "voc12aug": [ + [ + [ + "FCN", + "HRNetV2p-W18-Small", + "512x512", + 20000, + "1.8", + 43.364505532130885, + 65.201, + 68.55284135943813, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20200617_224503-56e36088.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_20k_voc12aug/fcn_hr18s_512x512_20k_voc12aug_20200617_224503.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x512", + 20000, + "2.9", + 23.482760884011036, + 72.303, + 74.70589725240711, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503-488d45f7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_20k_voc12aug/fcn_hr18_512x512_20k_voc12aug_20200617_224503.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x512", + 20000, + "6.2", + 22.047745500601465, + 75.87, + 78.57597654496765, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419-89de05cd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_20k_voc12aug/fcn_hr48_512x512_20k_voc12aug_20200617_224419.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18-Small", + "512x512", + 40000, + "-", + "-", + 66.61200000000001, + 70.0031319918366, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648-4f8d6e7f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_40k_voc12aug/fcn_hr18s_512x512_40k_voc12aug_20200614_000648.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x512", + 40000, + "-", + "-", + 72.904, + 75.58601750093821, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401-1b4b76cd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_40k_voc12aug/fcn_hr18_512x512_40k_voc12aug_20200613_224401.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x512", + 40000, + "-", + "-", + 76.237, + 78.48754167864209, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111-1b0f18bc.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_40k_voc12aug/fcn_hr48_512x512_40k_voc12aug_20200613_222111.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "FCN", + "HRNetV2p-W18-Small", + "512x1024", + 40000, + "1.7", + 23.74297838183743, + 73.859, + 75.90997145624684, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216-93db27d0.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x1024_40k_cityscapes/fcn_hr18s_512x1024_40k_cityscapes_20200601_014216.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x1024", + 40000, + "2.9", + 12.96853348364565, + 77.188, + 78.91665724639267, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216-f196fb4e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x1024_40k_cityscapes/fcn_hr18_512x1024_40k_cityscapes_20200601_014216.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x1024", + 40000, + "6.2", + 6.421700443191522, + 78.483, + 79.69458922303686, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240-a989b146.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x1024_40k_cityscapes/fcn_hr48_512x1024_40k_cityscapes_20200601_014240.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18-Small", + "512x1024", + 80000, + "-", + "-", + 75.306, + 77.47890927385332, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700-1462b75d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x1024_80k_cityscapes/fcn_hr18s_512x1024_80k_cityscapes_20200601_202700.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x1024", + 80000, + "-", + "-", + 78.64999999999999, + 80.35059171130018, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255-4e7b345e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x1024_80k_cityscapes/fcn_hr18_512x1024_80k_cityscapes_20200601_223255.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x1024", + 80000, + "-", + "-", + 79.928, + 80.71977327982115, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606-58ea95d6.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x1024_80k_cityscapes/fcn_hr48_512x1024_80k_cityscapes_20200601_202606.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18-Small", + "512x1024", + 160000, + "-", + "-", + 76.312, + 78.31118288010825, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901-4a0797ea.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x1024_160k_cityscapes/fcn_hr18s_512x1024_160k_cityscapes_20200602_190901.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x1024", + 160000, + "-", + "-", + 78.797, + 80.74329822797024, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822-221e4a4f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x1024_160k_cityscapes/fcn_hr18_512x1024_160k_cityscapes_20200602_190822.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x1024", + 160000, + "-", + "-", + 80.651, + 81.92482068666172, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946-59b7973e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x1024_160k_cityscapes/fcn_hr48_512x1024_160k_cityscapes_20200602_190946.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "FCN", + "HRNetV2p-W18-Small", + "512x512", + 80000, + "3.8", + 38.65539699852906, + 31.384, + 32.452806656988855, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345-77fc814a.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_80k_ade20k/fcn_hr18s_512x512_80k_ade20k_20200614_144345.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x512", + 80000, + "4.9", + 22.569194335083992, + 35.515, + 36.804822066348805, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20200614_185145-66f20cb7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_80k_ade20k/fcn_hr18_512x512_80k_ade20k_20200614_185145.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x512", + 80000, + "8.2", + 21.234892591194093, + 41.897, + 43.26888294374513, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946-7ba5258d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_80k_ade20k/fcn_hr48_512x512_80k_ade20k_20200614_193946.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18-Small", + "512x512", + 160000, + "-", + "-", + 32.995000000000005, + 34.547964211800654, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20200614_214413-870f65ac.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18s_512x512_160k_ade20k/fcn_hr18s_512x512_160k_ade20k_20200614_214413.log.json)" + ], + [ + "FCN", + "HRNetV2p-W18", + "512x512", + 160000, + "-", + "-", + 36.786, + 38.58485577782462, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426-ca961836.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr18_512x512_160k_ade20k/fcn_hr18_512x512_160k_ade20k_20200614_214426.log.json)" + ], + [ + "FCN", + "HRNetV2p-W48", + "512x512", + 160000, + "-", + "-", + 42.018, + 43.86047333076445, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407-a52fc02c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/hrnet/fcn_hr48_512x512_160k_ade20k/fcn_hr48_512x512_160k_ade20k_20200614_214407.log.json)" + ] + ] + ] + }, + "ann": { + "ade20k": [ + [ + [ + "ANN", + "R-50-D8", + "512x512", + 80000, + "9.1", + 21.01150654479224, + 41.008, + 42.299370248011755, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818-26f75e11.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_80k_ade20k/ann_r50-d8_512x512_80k_ade20k_20200615_014818.log.json)" + ], + [ + "ANN", + "R-101-D8", + "512x512", + 80000, + "12.5", + 14.116439500308603, + 42.939, + 44.180116688803125, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818-c0153543.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_80k_ade20k/ann_r101-d8_512x512_80k_ade20k_20200615_014818.log.json)" + ], + [ + "ANN", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 41.744, + 42.61939537832803, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733-892247bc.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_160k_ade20k/ann_r50-d8_512x512_160k_ade20k_20200615_231733.log.json)" + ], + [ + "ANN", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 42.936, + 44.05749393457835, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733-955eb1ec.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_160k_ade20k/ann_r101-d8_512x512_160k_ade20k_20200615_231733.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "ANN", + "R-50-D8", + "512x1024", + 40000, + "6.0", + 3.7066015347562153, + 77.402, + 78.56666466963291, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211-049fc292.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x1024_40k_cityscapes/ann_r50-d8_512x1024_40k_cityscapes_20200605_095211.log.json)" + ], + [ + "ANN", + "R-101-D8", + "512x1024", + 40000, + "9.5", + 2.5468121299522504, + 76.553, + 78.85000230335912, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243-adf6eece.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x1024_40k_cityscapes/ann_r101-d8_512x1024_40k_cityscapes_20200605_095243.log.json)" + ], + [ + "ANN", + "R-50-D8", + "769x769", + 40000, + "6.8", + 1.6951337367703907, + 78.89399999999999, + 80.45833256780746, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712-2b46b04d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_769x769_40k_cityscapes/ann_r50-d8_769x769_40k_cityscapes_20200530_025712.log.json)" + ], + [ + "ANN", + "R-101-D8", + "769x769", + 40000, + "10.7", + 1.1484480822281227, + 79.325, + 80.94411938511638, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720-059bff28.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_769x769_40k_cityscapes/ann_r101-d8_769x769_40k_cityscapes_20200530_025720.log.json)" + ], + [ + "ANN", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 77.345, + 78.65222072634322, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911-5a9ad545.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x1024_80k_cityscapes/ann_r50-d8_512x1024_80k_cityscapes_20200607_101911.log.json)" + ], + [ + "ANN", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 77.137, + 78.81361594500169, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728-aceccc6e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x1024_80k_cityscapes/ann_r101-d8_512x1024_80k_cityscapes_20200607_013728.log.json)" + ], + [ + "ANN", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 78.879, + 80.5665089108356, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426-cc7ff323.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_769x769_80k_cityscapes/ann_r50-d8_769x769_80k_cityscapes_20200607_044426.log.json)" + ], + [ + "ANN", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 78.803, + 80.34287446616453, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713-a9d4be8d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_769x769_80k_cityscapes/ann_r101-d8_769x769_80k_cityscapes_20200607_013713.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "ANN", + "R-50-D8", + "512x512", + 20000, + "6.0", + 20.919551932584206, + 74.86, + 76.12674212435266, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246-dfcb1c62.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_20k_voc12aug/ann_r50-d8_512x512_20k_voc12aug_20200617_222246.log.json)" + ], + [ + "ANN", + "R-101-D8", + "512x512", + 20000, + "9.5", + 13.944150769190673, + 77.47, + 78.69711736662727, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246-2fad0042.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_20k_voc12aug/ann_r101-d8_512x512_20k_voc12aug_20200617_222246.log.json)" + ], + [ + "ANN", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 76.556, + 77.5139251733015, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314-b5dac322.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r50-d8_512x512_40k_voc12aug/ann_r50-d8_512x512_40k_voc12aug_20200613_231314.log.json)" + ], + [ + "ANN", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 76.69500000000001, + 78.05579776330663, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314-bd205bbe.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/ann/ann_r101-d8_512x512_40k_voc12aug/ann_r101-d8_512x512_40k_voc12aug_20200613_231314.log.json)" + ] + ] + ] + }, + "pspnet": { + "ade20k": [ + [ + [ + "PSPNet", + "R-50-D8", + "512x512", + 80000, + "8.5", + 23.526579373672153, + 41.134, + 41.941132390638955, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128-15a8b914.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k_20200615_014128.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "512x512", + 80000, + "12.0", + 15.301938618847755, + 43.57, + 44.354975719492394, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423-b6e782f0.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_80k_ade20k/pspnet_r101-d8_512x512_80k_ade20k_20200614_031423.log.json)" + ], + [ + "PSPNet", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 42.477, + 43.441892719742064, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358-1890b0bd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_160k_ade20k/pspnet_r50-d8_512x512_160k_ade20k_20200615_184358.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 44.39, + 45.34825070704653, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650-967c316f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_160k_ade20k/pspnet_r101-d8_512x512_160k_ade20k_20200615_100650.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "PSPNet", + "R-50-D8", + "512x1024", + 40000, + "6.1", + 4.072768293326251, + 77.848, + 79.18377782829393, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "512x1024", + 40000, + "9.6", + 2.6817753401497195, + 78.34, + 79.74414521564499, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751-467e7cf4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes/pspnet_r101-d8_512x1024_40k_cityscapes_20200604_232751.log.json)" + ], + [ + "PSPNet", + "R-50-D8", + "769x769", + 40000, + "6.9", + 1.7590560538055864, + 78.262, + 79.88301952959716, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725-86638686.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_769x769_40k_cityscapes/pspnet_r50-d8_769x769_40k_cityscapes_20200606_112725.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "769x769", + 40000, + "10.9", + 1.1539857289832562, + 79.082, + 80.2847015735947, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753-61c6f5be.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_769x769_40k_cityscapes/pspnet_r101-d8_769x769_40k_cityscapes_20200606_112753.log.json)" + ], + [ + "PSPNet", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 78.55199999999999, + 79.79089188640063, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131-2376f12b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes/pspnet_r50-d8_512x1024_80k_cityscapes_20200606_112131.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 79.756, + 81.01164255858869, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211-e1e1100f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes/pspnet_r101-d8_512x1024_80k_cityscapes_20200606_112211.log.json)" + ], + [ + "PSPNet", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.58800000000001, + 80.68588581173638, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121-5ccf03dd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_769x769_80k_cityscapes/pspnet_r50-d8_769x769_80k_cityscapes_20200606_210121.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 79.77499999999999, + 81.05734239329955, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055-dba412fa.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_769x769_80k_cityscapes/pspnet_r101-d8_769x769_80k_cityscapes_20200606_225055.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "PSPNet", + "R-50-D8", + "512x512", + 20000, + "6.1", + 23.594295286990285, + 76.778, + 77.61449930304435, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958-ed5dfbd9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_20k_voc12aug/pspnet_r50-d8_512x512_20k_voc12aug_20200617_101958.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "512x512", + 20000, + "9.6", + 15.016859227435978, + 78.472, + 79.24767235924098, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003-4aef3c9a.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_20k_voc12aug/pspnet_r101-d8_512x512_20k_voc12aug_20200617_102003.log.json)" + ], + [ + "PSPNet", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 77.294, + 78.48376581837772, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222-ae9c1b8c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r50-d8_512x512_40k_voc12aug/pspnet_r50-d8_512x512_40k_voc12aug_20200613_161222.log.json)" + ], + [ + "PSPNet", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 78.524, + 79.56722327765866, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222-bc933b18.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/pspnet/pspnet_r101-d8_512x512_40k_voc12aug/pspnet_r101-d8_512x512_40k_voc12aug_20200613_161222.log.json)" + ] + ] + ] + }, + "deeplabv3": { + "voc12aug": [ + [ + [ + "DeepLabV3", + "R-50-D8", + "512x512", + 20000, + "6.1", + 13.882586968538902, + 76.17, + 77.42428903363798, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906-596905ef.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug/deeplabv3_r50-d8_512x512_20k_voc12aug_20200617_010906.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "512x512", + 20000, + "9.6", + 9.81331369081087, + 78.704, + 79.9523799897917, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932-8d13832f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug/deeplabv3_r101-d8_512x512_20k_voc12aug_20200617_010932.log.json)" + ], + [ + "DeepLabV3", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 77.676, + 78.78389817782097, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546-2ae96e7e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug/deeplabv3_r50-d8_512x512_40k_voc12aug_20200613_161546.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 77.923, + 79.17787250140825, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432-0017d784.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug/deeplabv3_r101-d8_512x512_40k_voc12aug_20200613_161432.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "DeepLabV3", + "R-50-D8", + "512x1024", + 40000, + "6.1", + 2.57047659861635, + 79.091, + 80.4506523590434, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449-acadc2f8.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes/deeplabv3_r50-d8_512x1024_40k_cityscapes_20200605_022449.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "512x1024", + 40000, + "9.6", + 1.9222440928636317, + 77.121, + 79.61407891260694, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241-7fd3f799.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes/deeplabv3_r101-d8_512x1024_40k_cityscapes_20200605_012241.log.json)" + ], + [ + "DeepLabV3", + "R-50-D8", + "769x769", + 40000, + "6.9", + 1.1119590479409436, + 78.581, + 79.89433614719104, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723-7eda553c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes/deeplabv3_r50-d8_769x769_40k_cityscapes_20200606_113723.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "769x769", + 40000, + "10.9", + 0.832582701195375, + 79.27300000000001, + 80.11177730128428, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809-c64f889f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes/deeplabv3_r101-d8_769x769_40k_cityscapes_20200606_113809.log.json)" + ], + [ + "DeepLabV3", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 79.31700000000001, + 80.56867900987751, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404-b92cfdd4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes/deeplabv3_r50-d8_512x1024_80k_cityscapes_20200606_113404.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 80.19500000000001, + 81.21365141510776, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503-9e428899.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes/deeplabv3_r101-d8_512x1024_80k_cityscapes_20200606_113503.log.json)" + ], + [ + "DeepLabV3", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.893, + 81.0599984851973, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338-788d6228.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes/deeplabv3_r50-d8_769x769_80k_cityscapes_20200606_221338.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 79.668, + 80.81226045958836, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353-60e95418.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes/deeplabv3_r101-d8_769x769_80k_cityscapes_20200607_013353.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "DeepLabV3", + "R-50-D8", + "512x512", + 80000, + "8.9", + 14.763588319372595, + 42.422, + 43.27846378978279, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028-0bb3f844.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k/deeplabv3_r50-d8_512x512_80k_ade20k_20200614_185028.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "512x512", + 80000, + "12.4", + 10.144087811258307, + 44.080999999999996, + 45.19313139034226, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256-d89c7fa4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k/deeplabv3_r101-d8_512x512_80k_ade20k_20200615_021256.log.json)" + ], + [ + "DeepLabV3", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 42.657000000000004, + 44.08872105809725, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227-5d0ee427.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k/deeplabv3_r50-d8_512x512_160k_ade20k_20200615_123227.log.json)" + ], + [ + "DeepLabV3", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 44.999, + 46.65804362786369, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816-b1f72b3b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k/deeplabv3_r101-d8_512x512_160k_ade20k_20200615_105816.log.json)" + ] + ] + ] + }, + "nonlocal_net": { + "ade20k": [ + [ + [ + "NonLocal", + "R-50-D8", + "512x512", + 80000, + "9.1", + 21.37048896225747, + 40.752, + 42.053557458158075, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801-5ae0aa33.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k/nonlocal_r50-d8_512x512_80k_ade20k_20200615_015801.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "512x512", + 80000, + "12.6", + 13.965079302337752, + 42.896, + 44.26894963193766, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758-24105919.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k/nonlocal_r101-d8_512x512_80k_ade20k_20200615_015758.log.json)" + ], + [ + "NonLocal", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 42.028, + 43.03561642742581, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410-baef45e3.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k/nonlocal_r50-d8_512x512_160k_ade20k_20200616_005410.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 43.361, + 44.82970596168541, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20200616_003422-affd0f8d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k/nonlocal_r101-d8_512x512_160k_ade20k_20200616_003422.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "NonLocal", + "R-50-D8", + "512x512", + 20000, + "6.4", + 21.213895119736144, + 76.199, + 77.11520756528137, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613-07f2a57c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug/nonlocal_r50-d8_512x512_20k_voc12aug_20200617_222613.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "512x512", + 20000, + "9.8", + 14.009331593316489, + 78.146, + 78.86433067761453, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615-948c68ab.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug/nonlocal_r101-d8_512x512_20k_voc12aug_20200617_222615.log.json)" + ], + [ + "NonLocal", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 76.646, + 77.47020448125416, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028-0139d4a9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug/nonlocal_r50-d8_512x512_40k_voc12aug_20200614_000028.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 78.27300000000001, + 79.11788410243086, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028-7e5ff470.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug/nonlocal_r101-d8_512x512_40k_voc12aug_20200614_000028.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "NonLocal", + "R-50-D8", + "512x1024", + 40000, + "7.4", + 2.7236662742933437, + 78.237, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748-c75e81e3.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes/nonlocal_r50-d8_512x1024_40k_cityscapes_20200605_210748.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "512x1024", + 40000, + "10.9", + 1.9480966751075284, + 78.657, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748-d63729fa.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes/nonlocal_r101-d8_512x1024_40k_cityscapes_20200605_210748.log.json)" + ], + [ + "NonLocal", + "R-50-D8", + "769x769", + 40000, + "8.9", + 1.5246259413816563, + 78.327, + 79.92096670245425, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243-82ef6749.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes/nonlocal_r50-d8_769x769_40k_cityscapes_20200530_045243.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "769x769", + 40000, + "12.8", + 1.0477751460724616, + 78.569, + 80.29003703614515, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348-8fe9a9dc.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes/nonlocal_r101-d8_769x769_40k_cityscapes_20200530_045348.log.json)" + ], + [ + "NonLocal", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 78.009, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518-d6839fae.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes/nonlocal_r50-d8_512x1024_80k_cityscapes_20200607_193518.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 78.93, + "-", + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411-32700183.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes/nonlocal_r101-d8_512x1024_80k_cityscapes_20200607_183411.log.json)" + ], + [ + "NonLocal", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.052, + 80.67913947439877, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506-1f9792f6.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes/nonlocal_r50-d8_769x769_80k_cityscapes_20200607_193506.log.json)" + ], + [ + "NonLocal", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 79.4, + 80.85278857807543, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428-0e1fa4f9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes/nonlocal_r101-d8_769x769_80k_cityscapes_20200607_183428.log.json)" + ] + ] + ] + }, + "gcnet": { + "voc12aug": [ + [ + [ + "GCNet", + "R-50-D8", + "512x512", + 20000, + "5.8", + 23.350259534912006, + 76.42099999999999, + 77.50740243914798, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701-3cbfdab1.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_20k_voc12aug/gcnet_r50-d8_512x512_20k_voc12aug_20200617_165701.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "512x512", + 20000, + "9.2", + 14.799942609024914, + 77.40700000000001, + 78.56005567821165, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713-6c720aa9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_20k_voc12aug/gcnet_r101-d8_512x512_20k_voc12aug_20200617_165713.log.json)" + ], + [ + "GCNet", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 76.238, + 77.63464439678829, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105-9797336d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_40k_voc12aug/gcnet_r50-d8_512x512_40k_voc12aug_20200613_195105.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 77.84299999999999, + 78.59489046439079, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806-1e38208d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_40k_voc12aug/gcnet_r101-d8_512x512_40k_voc12aug_20200613_185806.log.json)" + ] + ] + ], + "ade20k": [ + [ + [ + "GCNet", + "R-50-D8", + "512x512", + 80000, + "8.5", + 23.37990361060126, + 41.465999999999994, + 42.853494172834885, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146-91a6da41.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_80k_ade20k/gcnet_r50-d8_512x512_80k_ade20k_20200614_185146.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "512x512", + 80000, + "12.0", + 15.198333955746829, + 42.824, + 44.54431618918491, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811-c3fcb6dd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_80k_ade20k/gcnet_r101-d8_512x512_80k_ade20k_20200615_020811.log.json)" + ], + [ + "GCNet", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 42.367, + 43.51941132800723, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122-d95f3e1f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x512_160k_ade20k/gcnet_r50-d8_512x512_160k_ade20k_20200615_224122.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 43.686, + 45.21077897100608, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406-615528d7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x512_160k_ade20k/gcnet_r101-d8_512x512_160k_ade20k_20200615_225406.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "GCNet", + "R-50-D8", + "512x1024", + 40000, + "5.8", + 3.9294375140356674, + 77.691, + 78.55901060780846, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436-4b0fd17b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes/gcnet_r50-d8_512x1024_40k_cityscapes_20200618_074436.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "512x1024", + 40000, + "9.2", + 2.613929250881175, + 78.276, + 79.34154953801408, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436-5e62567f.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes/gcnet_r101-d8_512x1024_40k_cityscapes_20200618_074436.log.json)" + ], + [ + "GCNet", + "R-50-D8", + "769x769", + 40000, + "6.5", + 1.6665314351879814, + 78.117, + 80.08636386919896, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814-a26f4471.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_769x769_40k_cityscapes/gcnet_r50-d8_769x769_40k_cityscapes_20200618_182814.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "769x769", + 40000, + "10.5", + 1.130548704280006, + 78.949, + 80.70740508232963, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550-ca4f0a84.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_769x769_40k_cityscapes/gcnet_r101-d8_769x769_40k_cityscapes_20200619_092550.log.json)" + ], + [ + "GCNet", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 78.481, + 80.00715692663934, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450-ef8f069b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes/gcnet_r50-d8_512x1024_80k_cityscapes_20200618_074450.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 79.02900000000001, + 79.8389342161561, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450-778ebf69.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes/gcnet_r101-d8_512x1024_80k_cityscapes_20200618_074450.log.json)" + ], + [ + "GCNet", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 78.682, + 80.66434566958863, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516-4839565b.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r50-d8_769x769_80k_cityscapes/gcnet_r50-d8_769x769_80k_cityscapes_20200619_092516.log.json)" + ], + [ + "GCNet", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 79.184, + 80.70740508232963, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628-8e043423.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/gcnet/gcnet_r101-d8_769x769_80k_cityscapes/gcnet_r101-d8_769x769_80k_cityscapes_20200619_092628.log.json)" + ] + ] + ] + }, + "deeplabv3plus": { + "ade20k": [ + [ + [ + "DeepLabV3+", + "R-50-D8", + "512x512", + 80000, + "10.6", + 21.009967570414005, + 42.725, + 43.750872665309245, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028-bf1400d8.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_ade20k/deeplabv3plus_r50-d8_512x512_80k_ade20k_20200614_185028.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "512x512", + 80000, + "14.1", + 14.156578683381744, + 44.604, + 46.057602920856496, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139-d5730af7.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_ade20k/deeplabv3plus_r101-d8_512x512_80k_ade20k_20200615_014139.log.json)" + ], + [ + "DeepLabV3+", + "R-50-D8", + "512x512", + 160000, + "-", + "-", + 43.952999999999996, + 44.9257356479825, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504-6135c7e0.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_160k_ade20k/deeplabv3plus_r50-d8_512x512_160k_ade20k_20200615_124504.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "512x512", + 160000, + "-", + "-", + 45.467999999999996, + 46.35142741219229, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232-38ed86bb.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k/deeplabv3plus_r101-d8_512x512_160k_ade20k_20200615_123232.log.json)" + ] + ] + ], + "voc12aug": [ + [ + [ + "DeepLabV3+", + "R-50-D8", + "512x512", + 20000, + "7.6", + 20.995826216517777, + 75.932, + 77.49501357998696, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323-aad58ef1.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_20k_voc12aug/deeplabv3plus_r50-d8_512x512_20k_voc12aug_20200617_102323.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "512x512", + 20000, + "11.0", + 13.877644753051397, + 77.216, + 78.59404066425819, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345-c7ff3d56.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_20k_voc12aug/deeplabv3plus_r101-d8_512x512_20k_voc12aug_20200617_102345.log.json)" + ], + [ + "DeepLabV3+", + "R-50-D8", + "512x512", + 40000, + "-", + "-", + 76.80799999999999, + 77.56956435172417, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759-e1b43aa9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x512_40k_voc12aug/deeplabv3plus_r50-d8_512x512_40k_voc12aug_20200613_161759.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "512x512", + 40000, + "-", + "-", + 78.618, + 79.5312727643948, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333-faf03387.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x512_40k_voc12aug/deeplabv3plus_r101-d8_512x512_40k_voc12aug_20200613_205333.log.json)" + ] + ] + ], + "cityscapes": [ + [ + [ + "DeepLabV3+", + "R-50-D8", + "512x1024", + 40000, + "7.5", + 3.937852781596224, + 79.606, + 81.0126987140963, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610-d222ffcd.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_40k_cityscapes/deeplabv3plus_r50-d8_512x1024_40k_cityscapes_20200605_094610.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "512x1024", + 40000, + "11.0", + 2.6029196398088135, + 80.208, + 81.81580429286755, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614-3769eecf.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_40k_cityscapes/deeplabv3plus_r101-d8_512x1024_40k_cityscapes_20200605_094614.log.json)" + ], + [ + "DeepLabV3+", + "R-50-D8", + "769x769", + 40000, + "8.5", + 1.7219797309503193, + 78.972, + 80.46092552803746, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143-1dcb0e3c.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_769x769_40k_cityscapes/deeplabv3plus_r50-d8_769x769_40k_cityscapes_20200606_114143.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "769x769", + 40000, + "12.5", + 1.1546806682489152, + 79.461, + 80.5005593465169, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304-ff414b9e.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_769x769_40k_cityscapes/deeplabv3plus_r101-d8_769x769_40k_cityscapes_20200606_114304.log.json)" + ], + [ + "DeepLabV3+", + "R-50-D8", + "512x1024", + 80000, + "-", + "-", + 80.08800000000001, + 81.13450865498024, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049-f9fb496d.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_512x1024_80k_cityscapes/deeplabv3plus_r50-d8_512x1024_80k_cityscapes_20200606_114049.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "512x1024", + 80000, + "-", + "-", + 80.972, + 82.02915734982798, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143-068fcfe9.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes/deeplabv3plus_r101-d8_512x1024_80k_cityscapes_20200606_114143.log.json)" + ], + [ + "DeepLabV3+", + "R-50-D8", + "769x769", + 80000, + "-", + "-", + 79.827, + 81.47591334418544, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233-0e9dfdc4.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r50-d8_769x769_80k_cityscapes/deeplabv3plus_r50-d8_769x769_80k_cityscapes_20200606_210233.log.json)" + ], + [ + "DeepLabV3+", + "R-101-D8", + "769x769", + 80000, + "-", + "-", + 80.97999999999999, + 82.17610990719812, + "[model](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20200607_000405-a7573d20.pth) | [log](https://open-mmlab.s3.ap-northeast-2.amazonaws.com/mmsegmentation/models/deeplabv3plus/deeplabv3plus_r101-d8_769x769_80k_cityscapes/deeplabv3plus_r101-d8_769x769_80k_cityscapes_20200607_000405.log.json)" + ] + ] + ] + } +} diff --git a/docs/model_zoo.md b/docs/model_zoo.md new file mode 100644 index 000000000..8f39928e7 --- /dev/null +++ b/docs/model_zoo.md @@ -0,0 +1,107 @@ +# Benchmark and Model Zoo + +## Common settings + +* We use distributed training with 4 GPUs by default. +* All pytorch-style pretrained backbones on ImageNet are train by ourselves, with the same procedure in the [paper](https://arxiv.org/pdf/1812.01187.pdf). +Our ResNet style backbone are based on ResNetV1c variant, where the 7x7 conv in the input stem is replaced with three 3x3 convs. +* For the consistency across different hardwares, we report the GPU memory as the maximum value of `torch.cuda.max_memory_allocated()` for all 4 GPUs with `torch.backends.cudnn.benchmark=False`. + Note that this value is usually less than what `nvidia-smi` shows. +* We report the inference time as the total time of network forwarding and post-processing, excluding the data loading time. +Results are obtained with the script `tools/benchmark.py` which computes the average time on 200 images with `torch.backends.cudnn.benchmark=False`. +* There are two inference modes in this framework. + * `slide` mode: The `test_cfg` will be like `dict(mode='slide', crop_size=(769, 769), stride=(513, 513))`. + + In this mode, multiple patches will be cropped from input image, passed into network individually. + The crop size and stride between patches are specified by `crop_size` and `stride`. + The overlapping area will be merged by average + * `whole` mode: The `test_cfg` will be like `dict(mode='whole')`. + + In this mode, the whole imaged will be passed into network directly. +* For input size of 8x+1 (e.g. 769), `align_corner=True` is adopted as a traditional practice. +Otherwise, for input size of 8x (e.g. 512, 1024), `align_corner=False` is adopted. + +## Baselines + +### FCN + +Please refer to [FCN](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/fcn) for details. + +### PSPNet + +Please refer to [PSPNet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/pspnet) for details. + +### DeepLabV3 + +Please refer to [DeepLabV3](https://github.com/open-mmlab/mmsegmentatio/tree/master/configs/deeplabv3) for details. + +### PSANet + +Please refer to [PSANet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/psanet) for details. + +### DeepLabV3+ + +Please refer to [DeepLabV3+](https://github.com/open-mmlab/mmsegmentatio/tree/master/configs/deeplabv3plus) for details. + +### UPerNet + +Please refer to [UPerNet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/upernet) for details. + +### NonLocal Net + +Please refer to [NonLocal Net](https://github.com/open-mmlab/mmsegmentatio/tree/master/configs/nlnet) for details. + +### CCNet + +Please refer to [CCNet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/ccnet) for details. + +### DANet + +Please refer to [DANet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/danet) for details. + +### HRNet + +Please refer to [HRNet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/hrnet) for details. + +### GCNet + +Please refer to [GCNet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/gcnet) for details. + +### ANN + +Please refer to [ANN](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/ann) for details. + +### OCRNet + +Please refer to [OCRNet](https://github.com/open-mmlab/mmsegmentation/tree/master/configs/ocrnet) for details. + +## Speed benchmark + +### Hardware + +- 8 NVIDIA Tesla V100 (32G) GPUs +- Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz + +### Software environment + +- Python 3.7 +- PyTorch 1.5 +- CUDA 10.1 +- CUDNN 7.6.03 +- NCCL 2.4.08 + +### Training speed + +For fair comparison, we benchmark all implementations with ResNet-101V1c. +The input size is fixed to 1024x512 with batch size 2. + +The training speed is reported as followed, in terms of second per iter (s/iter). The lower, the better. + +| Implementation | PSPNet (s/iter) | DeepLabV3+ (s/iter) | +|----------------|-----------------|---------------------| +| [MMSegmentation](https://github.com/open-mmlab/mmsegmentation) | **0.83** | **0.85** | +| [SegmenTron](https://github.com/LikeLy-Journey/SegmenTron) | 0.84 | 0.85 | +| [CASILVision](https://github.com/CSAILVision/semantic-segmentation-pytorch) | 1.15 | N/A | +| [vedaseg](https://github.com/Media-Smart/vedaseg) | 0.95 | 1.25 | + +Note: The output stride of DeepLabV3+ is 8. diff --git a/docs/tutorials/data_pipeline.md b/docs/tutorials/data_pipeline.md new file mode 100644 index 000000000..825260d32 --- /dev/null +++ b/docs/tutorials/data_pipeline.md @@ -0,0 +1,156 @@ +# 2. Custom Data Pipelines + +## Design of Data pipelines + +Following typical conventions, we use `Dataset` and `DataLoader` for data loading +with multiple workers. `Dataset` returns a dict of data items corresponding +the arguments of models' forward method. +Since the data in semantic segmentation may not be the same size, +we introduce a new `DataContainer` type in MMCV to help collect and distribute +data of different size. +See [here](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py) for more details. + +The data preparation pipeline and the dataset is decomposed. Usually a dataset +defines how to process the annotations and a data pipeline defines all the steps to prepare a data dict. +A pipeline consists of a sequence of operations. Each operation takes a dict as input and also output a dict for the next transform. + +The operations are categorized into data loading, pre-processing, formatting and test-time augmentation. + +Here is an pipeline example for PSPNet. + +```python +img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) +crop_size = (512, 1024) +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict(type='Resize', img_scale=(2048, 1024), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), +] +test_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='MultiScaleFlipAug', + img_scale=(2048, 1024), + # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], + flip=False, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ]) +] +``` + +For each operation, we list the related dict fields that are added/updated/removed. + +### Data loading + +`LoadImageFromFile` +- add: img, img_shape, ori_shape + +`LoadAnnotations` +- add: gt_semantic_seg, seg_fields + +### Pre-processing + +`Resize` +- add: scale, scale_idx, pad_shape, scale_factor, keep_ratio +- update: img, img_shape, *seg_fields + +`RandomFlip` +- add: flip +- update: img, *seg_fields + +`Pad` +- add: pad_fixed_size, pad_size_divisor +- update: img, pad_shape, *seg_fields + +`RandomCrop` +- update: img, pad_shape, *seg_fields + +`Normalize` +- add: img_norm_cfg +- update: img + +`SegRescale` +- update: gt_semantic_seg + +`PhotoMetricDistortion` +- update: img + +### Formatting + +`ToTensor` +- update: specified by `keys`. + +`ImageToTensor` +- update: specified by `keys`. + +`Transpose` +- update: specified by `keys`. + +`ToDataContainer` +- update: specified by `fields`. + +`DefaultFormatBundle` +- update: img, gt_semantic_seg + +`Collect` +- add: img_meta (the keys of img_meta is specified by `meta_keys`) +- remove: all other keys except for those specified by `keys` + +### Test time augmentation + +`MultiScaleFlipAug` + +## Extend and use custom pipelines + +1. Write a new pipeline in any file, e.g., `my_pipeline.py`. It takes a dict as input and return a dict. + + ```python + from mmseg.datasets import PIPELINES + + @PIPELINES.register_module() + class MyTransform: + + def __call__(self, results): + results['dummy'] = True + return results + ``` + +2. Import the new class. + + ```python + from .my_pipeline import MyTransform + ``` + +3. Use it in config files. + + ```python + img_norm_cfg = dict( + mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) + crop_size = (512, 1024) + train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='LoadAnnotations'), + dict(type='Resize', img_scale=(2048, 1024), ratio_range=(0.5, 2.0)), + dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), + dict(type='RandomFlip', flip_ratio=0.5), + dict(type='PhotoMetricDistortion'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), + dict(type='MyTransform'), + dict(type='DefaultFormatBundle'), + dict(type='Collect', keys=['img', 'gt_semantic_seg']), + ] + ``` diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst new file mode 100644 index 000000000..778191bb4 --- /dev/null +++ b/docs/tutorials/index.rst @@ -0,0 +1,6 @@ +.. toctree:: + :maxdepth: 2 + + new_dataset.md + data_pipeline.md + new_modules.md diff --git a/docs/tutorials/new_dataset.md b/docs/tutorials/new_dataset.md new file mode 100644 index 000000000..0ad1019e0 --- /dev/null +++ b/docs/tutorials/new_dataset.md @@ -0,0 +1,161 @@ +# 1. Adding New Dataset + +## Customize datasets by reorganizing data + +The simplest way is to convert your dataset to organize your data into folders. + +An example of file structure is as followed. +``` +├── data +│ ├── my_dataset +│ │ ├── img_dir +│ │ │ ├── train +│ │ │ │ ├── xxx{img_suffix} +│ │ │ │ ├── yyy{img_suffix} +│ │ │ │ ├── zzz{img_suffix} +│ │ │ ├── val +│ │ ├── ann_dir +│ │ │ ├── train +│ │ │ │ ├── xxx{seg_map_suffix} +│ │ │ │ ├── yyy{seg_map_suffix} +│ │ │ │ ├── zzz{seg_map_suffix} +│ │ │ ├── val + +``` +A training pair will consist of the files with same suffix in img_dir/ann_dir. + +If `split` argument is given, only part of the files in img_dir/ann_dir will be loaded. +We may specify the prefix of files we would like to be included in the split txt. + +More specifically, for a split txt like following, +``` +xxx +zzz +``` +Only +`data/my_dataset/img_dir/train/xxx{img_suffix}`, +`data/my_dataset/img_dir/train/zzz{img_suffix}`, +`data/my_dataset/ann_dir/train/xxx{seg_map_suffix}`, +`data/my_dataset/ann_dir/train/zzz{seg_map_suffix}` will be loaded. + +## Customize datasets by mixing dataset + +MMSegmentation also supports to mix dataset for training. +Currently it supports to concat and repeat datasets. + +### Repeat dataset + +We use `RepeatDataset` as wrapper to repeat the dataset. +For example, suppose the original dataset is `Dataset_A`, to repeat it, the config looks like the following +```python +dataset_A_train = dict( + type='RepeatDataset', + times=N, + dataset=dict( # This is the original config of Dataset_A + type='Dataset_A', + ... + pipeline=train_pipeline + ) + ) +``` + +### Concatenate dataset + +There 2 ways to concatenate the dataset. + +1. If the datasets you want to concatenate are in the same type with different annotation files, + you can concatenate the dataset configs like the following. + + 1. You may concatenate two `ann_dir`. + ```python + dataset_A_train = dict( + type='Dataset_A', + img_dir = 'img_dir', + ann_dir = ['anno_dir_1', 'anno_dir_2'], + pipeline=train_pipeline + ) + ``` + 2. You may concatenate two `split`. + + ```python + dataset_A_train = dict( + type='Dataset_A', + img_dir = 'img_dir', + ann_dir = 'anno_dir', + split = ['split_1.txt', 'split_2.txt'], + pipeline=train_pipeline + ) + ``` + 3. You may concatenate two `ann_dir` and `split` simultaneously. + + ```python + dataset_A_train = dict( + type='Dataset_A', + img_dir = 'img_dir', + ann_dir = ['anno_dir_1', 'anno_dir_2'], + split = ['split_1.txt', 'split_2.txt'], + pipeline=train_pipeline + ) + ``` + In this case, `ann_dir_1` and `ann_dir_2` are corresponding to `split_1.txt` and `split_2.txt`. + +2. In case the dataset you want to concatenate is different, you can concatenate the dataset configs like the following. + + ```python + dataset_A_train = dict() + dataset_B_train = dict() + + data = dict( + imgs_per_gpu=2, + workers_per_gpu=2, + train = [ + dataset_A_train, + dataset_B_train + ], + val = dataset_A_val, + test = dataset_A_test + ) + ``` + + +A more complex example that repeats `Dataset_A` and `Dataset_B` by N and M times, respectively, and then concatenates the repeated datasets is as the following. + +```python +dataset_A_train = dict( + type='RepeatDataset', + times=N, + dataset=dict( + type='Dataset_A', + ... + pipeline=train_pipeline + ) +) +dataset_A_val = dict( + ... + pipeline=test_pipeline +) +dataset_A_test = dict( + ... + pipeline=test_pipeline +) +dataset_B_train = dict( + type='RepeatDataset', + times=M, + dataset=dict( + type='Dataset_B', + ... + pipeline=train_pipeline + ) +) +data = dict( + imgs_per_gpu=2, + workers_per_gpu=2, + train = [ + dataset_A_train, + dataset_B_train + ], + val = dataset_A_val, + test = dataset_A_test +) + +``` diff --git a/docs/tutorials/new_modules.md b/docs/tutorials/new_modules.md new file mode 100644 index 000000000..594088090 --- /dev/null +++ b/docs/tutorials/new_modules.md @@ -0,0 +1,234 @@ +# 3. Adding New Modules + +## Customize optimizer + +Assume you want to add a optimizer named as `MyOptimizer`, which has arguments `a`, `b`, and `c`. +You need to first implement the new optimizer in a file, e.g., in `mmseg/core/optimizer/my_optimizer.py`: + +```python +from mmcv.runner import OPTIMIZERS +from torch.optim import Optimizer + + +@OPTIMIZERS.register_module +class MyOptimizer(Optimizer): + + def __init__(self, a, b, c) + +``` + +Then add this module in `mmseg/core/optimizer/__init__.py` thus the registry will +find the new module and add it: + +```python +from .my_optimizer import MyOptimizer +``` + +Then you can use `MyOptimizer` in `optimizer` field of config files. +In the configs, the optimizers are defined by the field `optimizer` like the following: + +```python +optimizer = dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001) +``` + +To use your own optimizer, the field can be changed as + +```python +optimizer = dict(type='MyOptimizer', a=a_value, b=b_value, c=c_value) +``` + +We already support to use all the optimizers implemented by PyTorch, and the only modification is to change the `optimizer` field of config files. +For example, if you want to use `ADAM`, though the performance will drop a lot, the modification could be as the following. + +```python +optimizer = dict(type='Adam', lr=0.0003, weight_decay=0.0001) +``` + +The users can directly set arguments following the [API doc](https://pytorch.org/docs/stable/optim.html?highlight=optim#module-torch.optim) of PyTorch. + +## Customize optimizer constructor + +Some models may have some parameter-specific settings for optimization, e.g. weight decay for BatchNoarm layers. +The users can do those fine-grained parameter tuning through customizing optimizer constructor. + +``` +from mmcv.utils import build_from_cfg + +from mmcv.runner import OPTIMIZER_BUILDERS +from .cocktail_optimizer import CocktailOptimizer + + +@OPTIMIZER_BUILDERS.register_module +class CocktailOptimizerConstructor(object): + + def __init__(self, optimizer_cfg, paramwise_cfg=None): + + def __call__(self, model): + + return my_optimizer + +``` + +## Develop new components + +There are mainly 2 types of components in MMSegmentation. + +- backbone: usually stacks of convolutional network to extract feature maps, e.g., ResNet, HRNet. +- head: the component for semantic segmentation map decoding. + +### Add new backbones + +Here we show how to develop new components with an example of MobileNet. + +1. Create a new file `mmseg/models/backbones/mobilenet.py`. + +```python +import torch.nn as nn + +from ..registry import BACKBONES + + +@BACKBONES.register_module +class MobileNet(nn.Module): + + def __init__(self, arg1, arg2): + pass + + def forward(self, x): # should return a tuple + pass + + def init_weights(self, pretrained=None): + pass +``` + +2. Import the module in `mmseg/models/backbones/__init__.py`. + +```python +from .mobilenet import MobileNet +``` + +3. Use it in your config file. + +```python +model = dict( + ... + backbone=dict( + type='MobileNet', + arg1=xxx, + arg2=xxx), + ... +``` + +### Add new heads + +In MMSegmentation, we provide a base [BaseDecodeHead](../../mmseg/models/decode_heads/decode_head.py) for all segmentation head. +All newly implemented decode heads should be derived from it. +Here we show how to develop a new head with the example of [PSPNet](https://arxiv.org/abs/1612.01105) as the following. + +First, add a new decode head in `mmseg/models/decode_heads/psp_head.py`. +PSPNet implements a decode head for segmentation decode. +To implement a decode head, basically we need to implement three functions of the new module as the following. + +```python +@HEADS.register_module() +class PSPHead(BaseDecodeHead): + + def __init__(self, pool_scales=(1, 2, 3, 6), **kwargs): + super(PSPHead, self).__init__(**kwargs) + + def init_weights(self): + + def forward(self, inputs): + +``` + +Next, the users need to add the module in the `mmseg/models/decode_heads/__init__.py` thus the corresponding registry could find and load them. + +To config file of PSPNet is as the following + +```python +norm_cfg = dict(type='SyncBN', requires_grad=True) +model = dict( + type='EncoderDecoder', + pretrained='pretrain_model/resnet50_v1c_trick-2cccc1ad.pth', + backbone=dict( + type='ResNetV1c', + depth=50, + num_stages=4, + out_indices=(0, 1, 2, 3), + dilations=(1, 1, 2, 4), + strides=(1, 2, 1, 1), + norm_cfg=norm_cfg, + norm_eval=False, + style='pytorch', + contract_dilation=True), + decode_head=dict( + type='PSPHead', + in_channels=2048, + in_index=3, + channels=512, + pool_scales=(1, 2, 3, 6), + drop_out_ratio=0.1, + num_classes=19, + norm_cfg=norm_cfg, + align_corners=False, + loss_decode=dict( + type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0))) + +``` + +### Add new loss + +Assume you want to add a new loss as `MyLoss` for segmentation decode. +To add a new loss function, the users need implement it in `mmseg/models/losses/my_loss.py`. +The decorator `weighted_loss` enable the loss to be weighted for each element. + +```python +import torch +import torch.nn as nn + +from ..builder import LOSSES +from .utils import weighted_loss + +@weighted_loss +def my_loss(pred, target): + assert pred.size() == target.size() and target.numel() > 0 + loss = torch.abs(pred - target) + return loss + +@LOSSES.register_module +class MyLoss(nn.Module): + + def __init__(self, reduction='mean', loss_weight=1.0): + super(MyLoss, self).__init__() + self.reduction = reduction + self.loss_weight = loss_weight + + def forward(self, + pred, + target, + weight=None, + avg_factor=None, + reduction_override=None): + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + loss = self.loss_weight * my_loss( + pred, target, weight, reduction=reduction, avg_factor=avg_factor) + return loss +``` + +Then the users need to add it in the `mmseg/models/losses/__init__.py`. + +```python +from .my_loss import MyLoss, my_loss + +``` + +To use it, modify the `loss_xxx` field. +Then you need to modify the `loss_decode` field in the head. +`loss_weight` could be used to balance multiple losses. + +```python +loss_decode=dict(type='MyLoss', loss_weight=1.0)) +``` diff --git a/docs/tutorials/training_tricks.md b/docs/tutorials/training_tricks.md new file mode 100644 index 000000000..5ff4b18a7 --- /dev/null +++ b/docs/tutorials/training_tricks.md @@ -0,0 +1,28 @@ +# 4. Training Tricks + +MMSegmentation support following training tricks out of box. + +## Different Learning Rate(LR) for Backbone and Heads + +In semantic segmentation, some methods make the LR of heads larger than backbone to achieve better performance or faster convergence. + +In MMSegmentation, you may add following lines to config to make the LR of heads 10 times of backbone. +```python +optimizer_config=dict( + paramwise_cfg = dict( + custom_keys={ + 'head': dict(lr_mult=10.)})) +``` +With this modification, the LR of any parameter group with `'head'` in name will be multiplied by 10. +You may refer to [MMCV doc](https://mmcv.readthedocs.io/en/latest/api.html#mmcv.runner.DefaultOptimizerConstructor) for further details. + +## Online Hard Example Mining (OHEM) +We implement pixel sampler [here](https://github.com/open-mmlab/mmsegmentation/tree/master/mmseg/core/seg/sampler) for training sampling. +Here is an example config of training PSPNet with OHEM enabled. +```python +_base_ = './pspnet_r50-d8_512x1024_40k_cityscapes.py' +model=dict( + decode_head=dict( + sampler=dict(type='OHEMPixelSampler', thresh=0.7, min_kept=100000)) ) +``` +In this way, only pixels with confidence score under 0.7 are used to train. And we keep at least 100000 pixels during training. diff --git a/mmseg/VERSION b/mmseg/VERSION new file mode 100644 index 000000000..8f0916f76 --- /dev/null +++ b/mmseg/VERSION @@ -0,0 +1 @@ +0.5.0 diff --git a/mmseg/__init__.py b/mmseg/__init__.py new file mode 100644 index 000000000..1c4f7e8fc --- /dev/null +++ b/mmseg/__init__.py @@ -0,0 +1,3 @@ +from .version import __version__, short_version + +__all__ = ['__version__', 'short_version'] diff --git a/mmseg/apis/__init__.py b/mmseg/apis/__init__.py new file mode 100644 index 000000000..170724be3 --- /dev/null +++ b/mmseg/apis/__init__.py @@ -0,0 +1,9 @@ +from .inference import inference_segmentor, init_segmentor, show_result_pyplot +from .test import multi_gpu_test, single_gpu_test +from .train import get_root_logger, set_random_seed, train_segmentor + +__all__ = [ + 'get_root_logger', 'set_random_seed', 'train_segmentor', 'init_segmentor', + 'inference_segmentor', 'multi_gpu_test', 'single_gpu_test', + 'show_result_pyplot' +] diff --git a/mmseg/apis/inference.py b/mmseg/apis/inference.py new file mode 100644 index 000000000..3ba6b62ce --- /dev/null +++ b/mmseg/apis/inference.py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +import mmcv +import torch +from mmcv.parallel import collate, scatter +from mmcv.runner import load_checkpoint + +from mmseg.datasets.pipelines import Compose +from mmseg.models import build_segmentor + + +def init_segmentor(config, checkpoint=None, device='cuda:0'): + """Initialize a segmentor from config file. + + Args: + config (str or :obj:`mmcv.Config`): Config file path or the config + object. + checkpoint (str, optional): Checkpoint path. If left as None, the model + will not load any weights. + + Returns: + nn.Module: The constructed segmentor. + """ + if isinstance(config, str): + config = mmcv.Config.fromfile(config) + elif not isinstance(config, mmcv.Config): + raise TypeError('config must be a filename or Config object, ' + 'but got {}'.format(type(config))) + config.model.pretrained = None + model = build_segmentor(config.model, test_cfg=config.test_cfg) + if checkpoint is not None: + checkpoint = load_checkpoint(model, checkpoint) + model.CLASSES = checkpoint['meta']['CLASSES'] + model.PALETTE = checkpoint['meta']['PALETTE'] + model.cfg = config # save the config in the model for convenience + model.to(device) + model.eval() + return model + + +class LoadImage: + """A simple pipeline to load image.""" + + def __call__(self, results): + """Call function to load images into results. + + Args: + results (dict): A result dict contains the file name + of the image to be read. + + Returns: + dict: ``results`` will be returned containing loaded image. + """ + + if isinstance(results['img'], str): + results['filename'] = results['img'] + results['ori_filename'] = results['img'] + else: + results['filename'] = None + results['ori_filename'] = None + img = mmcv.imread(results['img']) + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + return results + + +def inference_segmentor(model, img): + """Inference image(s) with the segmentor. + + Args: + model (nn.Module): The loaded segmentor. + imgs (str/ndarray or list[str/ndarray]): Either image files or loaded + images. + + Returns: + (list[Tensor]): The segmentation result. + """ + cfg = model.cfg + device = next(model.parameters()).device # model device + # build the data pipeline + test_pipeline = [LoadImage()] + cfg.data.test.pipeline[1:] + test_pipeline = Compose(test_pipeline) + # prepare data + data = dict(img=img) + data = test_pipeline(data) + data = collate([data], samples_per_gpu=1) + if next(model.parameters()).is_cuda: + # scatter to specified GPU + data = scatter(data, [device])[0] + else: + data['img_metas'] = data['img_metas'][0].data + + # forward the model + with torch.no_grad(): + result = model(return_loss=False, rescale=True, **data) + return result + + +def show_result_pyplot(model, img, result, palette=None, fig_size=(15, 10)): + """Visualize the segmentation results on the image. + + Args: + model (nn.Module): The loaded segmentor. + img (str or np.ndarray): Image filename or loaded image. + result (list): The segmentation result. + palette (list[list[int]]] | None): The palette of segmentation + map. If None is given, random palette will be generated. + Default: None + fig_size (tuple): Figure size of the pyplot figure. + """ + if hasattr(model, 'module'): + model = model.module + img = model.show_result(img, result, palette=palette, show=False) + plt.figure(figsize=fig_size) + plt.imshow(mmcv.bgr2rgb(img)) + plt.show() diff --git a/mmseg/apis/test.py b/mmseg/apis/test.py new file mode 100644 index 000000000..8cbf236f0 --- /dev/null +++ b/mmseg/apis/test.py @@ -0,0 +1,191 @@ +import os.path as osp +import pickle +import shutil +import tempfile + +import mmcv +import torch +import torch.distributed as dist +from mmcv.image import tensor2imgs +from mmcv.runner import get_dist_info + + +def single_gpu_test(model, data_loader, show=False, out_dir=None): + """Test with single GPU. + + Args: + model (nn.Module): Model to be tested. + data_loader (nn.Dataloader): Pytorch data loader. + show (bool): Whether show results during infernece. Default: False. + out_dir (str, optional): If specified, the results will be dumped + into the directory to save output results. + + Returns: + list: The prediction results. + """ + + model.eval() + results = [] + dataset = data_loader.dataset + prog_bar = mmcv.ProgressBar(len(dataset)) + for i, data in enumerate(data_loader): + with torch.no_grad(): + result = model(return_loss=False, rescale=not show, **data) + if isinstance(results, list): + results.extend(result) + else: + results.append(result) + + if show or out_dir: + img_tensor = data['img'][0] + img_metas = data['img_metas'][0].data[0] + imgs = tensor2imgs(img_tensor, **img_metas[0]['img_norm_cfg']) + assert len(imgs) == len(img_metas) + + for img, img_meta in zip(imgs, img_metas): + h, w, _ = img_meta['img_shape'] + img_show = img[:h, :w, :] + + ori_h, ori_w = img_meta['ori_shape'][:-1] + img_show = mmcv.imresize(img_show, (ori_w, ori_h)) + + if out_dir: + out_file = osp.join(out_dir, img_meta['ori_filename']) + else: + out_file = None + + model.module.show_result( + img_show, + result, + palette=dataset.PALETTE, + show=show, + out_file=out_file) + + batch_size = data['img'][0].size(0) + for _ in range(batch_size): + prog_bar.update() + return results + + +def multi_gpu_test(model, data_loader, tmpdir=None, gpu_collect=False): + """Test model with multiple gpus. + + This method tests model with multiple gpus and collects the results + under two different modes: gpu and cpu modes. By setting 'gpu_collect=True' + it encodes results to gpu tensors and use gpu communication for results + collection. On cpu mode it saves the results on different gpus to 'tmpdir' + and collects them by the rank 0 worker. + + Args: + model (nn.Module): Model to be tested. + data_loader (nn.Dataloader): Pytorch data loader. + tmpdir (str): Path of directory to save the temporary results from + different gpus under cpu mode. + gpu_collect (bool): Option to use either gpu or cpu to collect results. + + Returns: + list: The prediction results. + """ + + model.eval() + results = [] + dataset = data_loader.dataset + rank, world_size = get_dist_info() + if rank == 0: + prog_bar = mmcv.ProgressBar(len(dataset)) + for i, data in enumerate(data_loader): + with torch.no_grad(): + result = model(return_loss=False, rescale=True, **data) + if isinstance(results, list): + results.extend(result) + else: + results.append(result) + + if rank == 0: + batch_size = data['img'][0].size(0) + for _ in range(batch_size * world_size): + prog_bar.update() + + # collect results from all ranks + if gpu_collect: + results = collect_results_gpu(results, len(dataset)) + else: + results = collect_results_cpu(results, len(dataset), tmpdir) + return results + + +def collect_results_cpu(result_part, size, tmpdir=None): + """Collect results with CPU.""" + rank, world_size = get_dist_info() + # create a tmp dir if it is not specified + if tmpdir is None: + MAX_LEN = 512 + # 32 is whitespace + dir_tensor = torch.full((MAX_LEN, ), + 32, + dtype=torch.uint8, + device='cuda') + if rank == 0: + tmpdir = tempfile.mkdtemp() + tmpdir = torch.tensor( + bytearray(tmpdir.encode()), dtype=torch.uint8, device='cuda') + dir_tensor[:len(tmpdir)] = tmpdir + dist.broadcast(dir_tensor, 0) + tmpdir = dir_tensor.cpu().numpy().tobytes().decode().rstrip() + else: + mmcv.mkdir_or_exist(tmpdir) + # dump the part result to the dir + mmcv.dump(result_part, osp.join(tmpdir, 'part_{}.pkl'.format(rank))) + dist.barrier() + # collect all parts + if rank != 0: + return None + else: + # load results of all parts from tmp dir + part_list = [] + for i in range(world_size): + part_file = osp.join(tmpdir, 'part_{}.pkl'.format(i)) + part_list.append(mmcv.load(part_file)) + # sort the results + ordered_results = [] + for res in zip(*part_list): + ordered_results.extend(list(res)) + # the dataloader may pad some samples + ordered_results = ordered_results[:size] + # remove tmp dir + shutil.rmtree(tmpdir) + return ordered_results + + +def collect_results_gpu(result_part, size): + """Collect results with GPU.""" + rank, world_size = get_dist_info() + # dump result part to tensor with pickle + part_tensor = torch.tensor( + bytearray(pickle.dumps(result_part)), dtype=torch.uint8, device='cuda') + # gather all result part tensor shape + shape_tensor = torch.tensor(part_tensor.shape, device='cuda') + shape_list = [shape_tensor.clone() for _ in range(world_size)] + dist.all_gather(shape_list, shape_tensor) + # padding result part tensor to max length + shape_max = torch.tensor(shape_list).max() + part_send = torch.zeros(shape_max, dtype=torch.uint8, device='cuda') + part_send[:shape_tensor[0]] = part_tensor + part_recv_list = [ + part_tensor.new_zeros(shape_max) for _ in range(world_size) + ] + # gather all result part + dist.all_gather(part_recv_list, part_send) + + if rank == 0: + part_list = [] + for recv, shape in zip(part_recv_list, shape_list): + part_list.append( + pickle.loads(recv[:shape[0]].cpu().numpy().tobytes())) + # sort the results + ordered_results = [] + for res in zip(*part_list): + ordered_results.extend(list(res)) + # the dataloader may pad some samples + ordered_results = ordered_results[:size] + return ordered_results diff --git a/mmseg/apis/train.py b/mmseg/apis/train.py new file mode 100644 index 000000000..b70314358 --- /dev/null +++ b/mmseg/apis/train.py @@ -0,0 +1,106 @@ +import random + +import numpy as np +import torch +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import IterBasedRunner, build_optimizer + +from mmseg.core import DistEvalHook, EvalHook +from mmseg.datasets import build_dataloader, build_dataset +from mmseg.utils import get_root_logger + + +def set_random_seed(seed, deterministic=False): + """Set random seed. + + Args: + seed (int): Seed to be used. + deterministic (bool): Whether to set the deterministic option for + CUDNN backend, i.e., set `torch.backends.cudnn.deterministic` + to True and `torch.backends.cudnn.benchmark` to False. + Default: False. + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + if deterministic: + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def train_segmentor(model, + dataset, + cfg, + distributed=False, + validate=False, + timestamp=None, + meta=None): + """Launch segmentor training.""" + logger = get_root_logger(cfg.log_level) + + # prepare data loaders + dataset = dataset if isinstance(dataset, (list, tuple)) else [dataset] + data_loaders = [ + build_dataloader( + ds, + cfg.data.samples_per_gpu, + cfg.data.workers_per_gpu, + # cfg.gpus will be ignored if distributed + len(cfg.gpu_ids), + dist=distributed, + seed=cfg.seed, + drop_last=True) for ds in dataset + ] + + # put model on gpus + if distributed: + find_unused_parameters = cfg.get('find_unused_parameters', False) + # Sets the `find_unused_parameters` parameter in + # torch.nn.parallel.DistributedDataParallel + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False, + find_unused_parameters=find_unused_parameters) + else: + model = MMDataParallel( + model.cuda(cfg.gpu_ids[0]), device_ids=cfg.gpu_ids) + + # build runner + optimizer = build_optimizer(model, cfg.optimizer) + + runner = IterBasedRunner( + model=model, + batch_processor=None, + optimizer=optimizer, + work_dir=cfg.work_dir, + logger=logger, + meta=meta) + + # register hooks + runner.register_training_hooks(cfg.lr_config, cfg.optimizer_config, + cfg.checkpoint_config, cfg.log_config, + cfg.get('momentum_config', None)) + + # an ugly walkaround to make the .log and .log.json filenames the same + runner.timestamp = timestamp + + # register eval hooks + if validate: + val_dataset = build_dataset(cfg.data.val, dict(test_mode=True)) + val_dataloader = build_dataloader( + val_dataset, + samples_per_gpu=1, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False) + eval_cfg = cfg.get('evaluation', {}) + eval_hook = DistEvalHook if distributed else EvalHook + runner.register_hook(eval_hook(val_dataloader, **eval_cfg)) + + if cfg.resume_from: + runner.resume(cfg.resume_from) + elif cfg.load_from: + runner.load_checkpoint(cfg.load_from) + runner.run(data_loaders, cfg.workflow, cfg.total_iters) diff --git a/mmseg/core/__init__.py b/mmseg/core/__init__.py new file mode 100644 index 000000000..965605587 --- /dev/null +++ b/mmseg/core/__init__.py @@ -0,0 +1,3 @@ +from .evaluation import * # noqa: F401, F403 +from .seg import * # noqa: F401, F403 +from .utils import * # noqa: F401, F403 diff --git a/mmseg/core/evaluation/__init__.py b/mmseg/core/evaluation/__init__.py new file mode 100644 index 000000000..f169d1bf1 --- /dev/null +++ b/mmseg/core/evaluation/__init__.py @@ -0,0 +1,7 @@ +from .class_names import get_classes, get_palette +from .eval_hooks import DistEvalHook, EvalHook +from .mean_iou import mean_iou + +__all__ = [ + 'EvalHook', 'DistEvalHook', 'mean_iou', 'get_classes', 'get_palette' +] diff --git a/mmseg/core/evaluation/class_names.py b/mmseg/core/evaluation/class_names.py new file mode 100644 index 000000000..0d8e66d54 --- /dev/null +++ b/mmseg/core/evaluation/class_names.py @@ -0,0 +1,152 @@ +import mmcv + + +def cityscapes_classes(): + """Cityscapes class names for external use.""" + return [ + 'road', 'sidewalk', 'building', 'wall', 'fence', 'pole', + 'traffic light', 'traffic sign', 'vegetation', 'terrain', 'sky', + 'person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', + 'bicycle' + ] + + +def ade_classes(): + """ADE20K class names for external use.""" + return [ + 'wall', 'building', 'sky', 'floor', 'tree', 'ceiling', 'road', 'bed ', + 'windowpane', 'grass', 'cabinet', 'sidewalk', 'person', 'earth', + 'door', 'table', 'mountain', 'plant', 'curtain', 'chair', 'car', + 'water', 'painting', 'sofa', 'shelf', 'house', 'sea', 'mirror', 'rug', + 'field', 'armchair', 'seat', 'fence', 'desk', 'rock', 'wardrobe', + 'lamp', 'bathtub', 'railing', 'cushion', 'base', 'box', 'column', + 'signboard', 'chest of drawers', 'counter', 'sand', 'sink', + 'skyscraper', 'fireplace', 'refrigerator', 'grandstand', 'path', + 'stairs', 'runway', 'case', 'pool table', 'pillow', 'screen door', + 'stairway', 'river', 'bridge', 'bookcase', 'blind', 'coffee table', + 'toilet', 'flower', 'book', 'hill', 'bench', 'countertop', 'stove', + 'palm', 'kitchen island', 'computer', 'swivel chair', 'boat', 'bar', + 'arcade machine', 'hovel', 'bus', 'towel', 'light', 'truck', 'tower', + 'chandelier', 'awning', 'streetlight', 'booth', 'television receiver', + 'airplane', 'dirt track', 'apparel', 'pole', 'land', 'bannister', + 'escalator', 'ottoman', 'bottle', 'buffet', 'poster', 'stage', 'van', + 'ship', 'fountain', 'conveyer belt', 'canopy', 'washer', 'plaything', + 'swimming pool', 'stool', 'barrel', 'basket', 'waterfall', 'tent', + 'bag', 'minibike', 'cradle', 'oven', 'ball', 'food', 'step', 'tank', + 'trade name', 'microwave', 'pot', 'animal', 'bicycle', 'lake', + 'dishwasher', 'screen', 'blanket', 'sculpture', 'hood', 'sconce', + 'vase', 'traffic light', 'tray', 'ashcan', 'fan', 'pier', 'crt screen', + 'plate', 'monitor', 'bulletin board', 'shower', 'radiator', 'glass', + 'clock', 'flag' + ] + + +def voc_classes(): + """Pascal VOC class names for external use.""" + return [ + 'background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', + 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', + 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', + 'tvmonitor' + ] + + +def cityscapes_palette(): + """Cityscapes palette for external use.""" + return [[128, 64, 128], [244, 35, 232], [70, 70, 70], [102, 102, 156], + [190, 153, 153], [153, 153, 153], [250, 170, 30], [220, 220, 0], + [107, 142, 35], [152, 251, 152], [70, 130, 180], [220, 20, 60], + [255, 0, 0], [0, 0, 142], [0, 0, 70], [0, 60, 100], [0, 80, 100], + [0, 0, 230], [119, 11, 32]] + + +def ade_palette(): + """ADE20K palette for external use.""" + return [[120, 120, 120], [180, 120, 120], [6, 230, 230], [80, 50, 50], + [4, 200, 3], [120, 120, 80], [140, 140, 140], [204, 5, 255], + [230, 230, 230], [4, 250, 7], [224, 5, 255], [235, 255, 7], + [150, 5, 61], [120, 120, 70], [8, 255, 51], [255, 6, 82], + [143, 255, 140], [204, 255, 4], [255, 51, 7], [204, 70, 3], + [0, 102, 200], [61, 230, 250], [255, 6, 51], [11, 102, 255], + [255, 7, 71], [255, 9, 224], [9, 7, 230], [220, 220, 220], + [255, 9, 92], [112, 9, 255], [8, 255, 214], [7, 255, 224], + [255, 184, 6], [10, 255, 71], [255, 41, 10], [7, 255, 255], + [224, 255, 8], [102, 8, 255], [255, 61, 6], [255, 194, 7], + [255, 122, 8], [0, 255, 20], [255, 8, 41], [255, 5, 153], + [6, 51, 255], [235, 12, 255], [160, 150, 20], [0, 163, 255], + [140, 140, 140], [250, 10, 15], [20, 255, 0], [31, 255, 0], + [255, 31, 0], [255, 224, 0], [153, 255, 0], [0, 0, 255], + [255, 71, 0], [0, 235, 255], [0, 173, 255], [31, 0, 255], + [11, 200, 200], [255, 82, 0], [0, 255, 245], [0, 61, 255], + [0, 255, 112], [0, 255, 133], [255, 0, 0], [255, 163, 0], + [255, 102, 0], [194, 255, 0], [0, 143, 255], [51, 255, 0], + [0, 82, 255], [0, 255, 41], [0, 255, 173], [10, 0, 255], + [173, 255, 0], [0, 255, 153], [255, 92, 0], [255, 0, 255], + [255, 0, 245], [255, 0, 102], [255, 173, 0], [255, 0, 20], + [255, 184, 184], [0, 31, 255], [0, 255, 61], [0, 71, 255], + [255, 0, 204], [0, 255, 194], [0, 255, 82], [0, 10, 255], + [0, 112, 255], [51, 0, 255], [0, 194, 255], [0, 122, 255], + [0, 255, 163], [255, 153, 0], [0, 255, 10], [255, 112, 0], + [143, 255, 0], [82, 0, 255], [163, 255, 0], [255, 235, 0], + [8, 184, 170], [133, 0, 255], [0, 255, 92], [184, 0, 255], + [255, 0, 31], [0, 184, 255], [0, 214, 255], [255, 0, 112], + [92, 255, 0], [0, 224, 255], [112, 224, 255], [70, 184, 160], + [163, 0, 255], [153, 0, 255], [71, 255, 0], [255, 0, 163], + [255, 204, 0], [255, 0, 143], [0, 255, 235], [133, 255, 0], + [255, 0, 235], [245, 0, 255], [255, 0, 122], [255, 245, 0], + [10, 190, 212], [214, 255, 0], [0, 204, 255], [20, 0, 255], + [255, 255, 0], [0, 153, 255], [0, 41, 255], [0, 255, 204], + [41, 0, 255], [41, 255, 0], [173, 0, 255], [0, 245, 255], + [71, 0, 255], [122, 0, 255], [0, 255, 184], [0, 92, 255], + [184, 255, 0], [0, 133, 255], [255, 214, 0], [25, 194, 194], + [102, 255, 0], [92, 0, 255]] + + +def voc_palette(): + """Pascal VOC palette for external use.""" + return [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128], + [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0], + [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128], + [192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0], + [128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128]] + + +dataset_aliases = { + 'cityscapes': ['cityscapes'], + 'ade': ['ade', 'ade20k'], + 'voc': ['voc', 'pascal_voc', 'voc12', 'voc12aug'] +} + + +def get_classes(dataset): + """Get class names of a dataset.""" + alias2name = {} + for name, aliases in dataset_aliases.items(): + for alias in aliases: + alias2name[alias] = name + + if mmcv.is_str(dataset): + if dataset in alias2name: + labels = eval(alias2name[dataset] + '_classes()') + else: + raise ValueError(f'Unrecognized dataset: {dataset}') + else: + raise TypeError(f'dataset must a str, but got {type(dataset)}') + return labels + + +def get_palette(dataset): + """Get class palette (RGB) of a dataset.""" + alias2name = {} + for name, aliases in dataset_aliases.items(): + for alias in aliases: + alias2name[alias] = name + + if mmcv.is_str(dataset): + if dataset in alias2name: + labels = eval(alias2name[dataset] + '_palette()') + else: + raise ValueError(f'Unrecognized dataset: {dataset}') + else: + raise TypeError(f'dataset must a str, but got {type(dataset)}') + return labels diff --git a/mmseg/core/evaluation/eval_hooks.py b/mmseg/core/evaluation/eval_hooks.py new file mode 100644 index 000000000..cbd0b23fe --- /dev/null +++ b/mmseg/core/evaluation/eval_hooks.py @@ -0,0 +1,80 @@ +import os.path as osp + +from mmcv.runner import Hook +from torch.utils.data import DataLoader + + +class EvalHook(Hook): + """Evaluation hook. + + Attributes: + dataloader (DataLoader): A PyTorch dataloader. + interval (int): Evaluation interval (by epochs). Default: 1. + """ + + def __init__(self, dataloader, interval=1, **eval_kwargs): + if not isinstance(dataloader, DataLoader): + raise TypeError('dataloader must be a pytorch DataLoader, but got ' + f'{type(dataloader)}') + self.dataloader = dataloader + self.interval = interval + self.eval_kwargs = eval_kwargs + + def after_train_iter(self, runner): + """After train epoch hook.""" + if not self.every_n_iters(runner, self.interval): + return + from mmseg.apis import single_gpu_test + runner.log_buffer.clear() + results = single_gpu_test(runner.model, self.dataloader, show=False) + self.evaluate(runner, results) + + def evaluate(self, runner, results): + """Call evaluate function of dataset.""" + eval_res = self.dataloader.dataset.evaluate( + results, logger=runner.logger, **self.eval_kwargs) + for name, val in eval_res.items(): + runner.log_buffer.output[name] = val + runner.log_buffer.ready = True + + +class DistEvalHook(EvalHook): + """Distributed evaluation hook. + + Attributes: + dataloader (DataLoader): A PyTorch dataloader. + interval (int): Evaluation interval (by epochs). Default: 1. + tmpdir (str | None): Temporary directory to save the results of all + processes. Default: None. + gpu_collect (bool): Whether to use gpu or cpu to collect results. + Default: False. + """ + + def __init__(self, + dataloader, + interval=1, + gpu_collect=False, + **eval_kwargs): + if not isinstance(dataloader, DataLoader): + raise TypeError( + 'dataloader must be a pytorch DataLoader, but got {}'.format( + type(dataloader))) + self.dataloader = dataloader + self.interval = interval + self.gpu_collect = gpu_collect + self.eval_kwargs = eval_kwargs + + def after_train_iter(self, runner): + """After train epoch hook.""" + if not self.every_n_iters(runner, self.interval): + return + from mmseg.apis import multi_gpu_test + runner.log_buffer.clear() + results = multi_gpu_test( + runner.model, + self.dataloader, + tmpdir=osp.join(runner.work_dir, '.eval_hook'), + gpu_collect=self.gpu_collect) + if runner.rank == 0: + print('\n') + self.evaluate(runner, results) diff --git a/mmseg/core/evaluation/mean_iou.py b/mmseg/core/evaluation/mean_iou.py new file mode 100644 index 000000000..f0b4234fb --- /dev/null +++ b/mmseg/core/evaluation/mean_iou.py @@ -0,0 +1,70 @@ +import numpy as np + + +def intersect_and_union(pred_label, label, num_classes, ignore_index): + """Calculate intersection and Union. + + Args: + pred_label (ndarray): Prediction segmentation map + label (ndarray): Ground truth segmentation map + num_classes (int): Number of categories + ignore_index (int): Index that will be ignored in evaluation. + + Returns: + ndarray: The intersection of prediction and ground truth histogram + on all classes + ndarray: The union of prediction and ground truth histogram on all + classes + ndarray: The prediction histogram on all classes. + ndarray: The ground truth histogram on all classes. + """ + + mask = (label != ignore_index) + pred_label = pred_label[mask] + label = label[mask] + + intersect = pred_label[pred_label == label] + area_intersect, _ = np.histogram( + intersect, bins=np.arange(num_classes + 1)) + area_pred_label, _ = np.histogram( + pred_label, bins=np.arange(num_classes + 1)) + area_label, _ = np.histogram(label, bins=np.arange(num_classes + 1)) + area_union = area_pred_label + area_label - area_intersect + + return area_intersect, area_union, area_pred_label, area_label + + +def mean_iou(results, gt_seg_maps, num_classes, ignore_index): + """Calculate Intersection and Union (IoU) + + Args: + results (list[ndarray]): List of prediction segmentation maps + gt_seg_maps (list[ndarray]): list of ground truth segmentation maps + num_classes (int): Number of categories + ignore_index (int): Index that will be ignored in evaluation. + + Returns: + float: Overall accuracy on all images. + ndarray: Per category accuracy, shape (num_classes, ) + ndarray: Per category IoU, shape (num_classes, ) + """ + + num_imgs = len(results) + assert len(gt_seg_maps) == num_imgs + total_area_intersect = np.zeros((num_classes, ), dtype=np.float) + total_area_union = np.zeros((num_classes, ), dtype=np.float) + total_area_pred_label = np.zeros((num_classes, ), dtype=np.float) + total_area_label = np.zeros((num_classes, ), dtype=np.float) + for i in range(num_imgs): + area_intersect, area_union, area_pred_label, area_label = \ + intersect_and_union(results[i], gt_seg_maps[i], num_classes, + ignore_index=ignore_index) + total_area_intersect += area_intersect + total_area_union += area_union + total_area_pred_label += area_pred_label + total_area_label += area_label + all_acc = total_area_intersect.sum() / total_area_label.sum() + acc = total_area_intersect / total_area_label + iou = total_area_intersect / total_area_union + + return all_acc, acc, iou diff --git a/mmseg/core/seg/__init__.py b/mmseg/core/seg/__init__.py new file mode 100644 index 000000000..93bc129b6 --- /dev/null +++ b/mmseg/core/seg/__init__.py @@ -0,0 +1,4 @@ +from .builder import build_pixel_sampler +from .sampler import BasePixelSampler, OHEMPixelSampler + +__all__ = ['build_pixel_sampler', 'BasePixelSampler', 'OHEMPixelSampler'] diff --git a/mmseg/core/seg/builder.py b/mmseg/core/seg/builder.py new file mode 100644 index 000000000..f5a117ce7 --- /dev/null +++ b/mmseg/core/seg/builder.py @@ -0,0 +1,8 @@ +from mmcv.utils import Registry, build_from_cfg + +PIXEL_SAMPLERS = Registry('pixel sampler') + + +def build_pixel_sampler(cfg, **default_args): + """Build pixel sampler for segmentation map.""" + return build_from_cfg(cfg, PIXEL_SAMPLERS, default_args) diff --git a/mmseg/core/seg/sampler/__init__.py b/mmseg/core/seg/sampler/__init__.py new file mode 100644 index 000000000..332b242c0 --- /dev/null +++ b/mmseg/core/seg/sampler/__init__.py @@ -0,0 +1,4 @@ +from .base_pixel_sampler import BasePixelSampler +from .ohem_pixel_sampler import OHEMPixelSampler + +__all__ = ['BasePixelSampler', 'OHEMPixelSampler'] diff --git a/mmseg/core/seg/sampler/base_pixel_sampler.py b/mmseg/core/seg/sampler/base_pixel_sampler.py new file mode 100644 index 000000000..db322d199 --- /dev/null +++ b/mmseg/core/seg/sampler/base_pixel_sampler.py @@ -0,0 +1,13 @@ +from abc import ABCMeta, abstractmethod + + +class BasePixelSampler(metaclass=ABCMeta): + """Base class of pixel sampler.""" + + def __init__(self, **kwargs): + pass + + @abstractmethod + def sample(self, seg_logit, seg_label): + """Placeholder for sample function.""" + pass diff --git a/mmseg/core/seg/sampler/ohem_pixel_sampler.py b/mmseg/core/seg/sampler/ohem_pixel_sampler.py new file mode 100644 index 000000000..28c14ab5d --- /dev/null +++ b/mmseg/core/seg/sampler/ohem_pixel_sampler.py @@ -0,0 +1,64 @@ +import torch +import torch.nn.functional as F + +from ..builder import PIXEL_SAMPLERS +from .base_pixel_sampler import BasePixelSampler + + +@PIXEL_SAMPLERS.register_module() +class OHEMPixelSampler(BasePixelSampler): + """Online Hard Example Mining Sampler for segmentation. + + Args: + thresh (float): The threshold for hard example selection. Below + which, are prediction with low confidence. Default: 0.7. + min_kept (int): The minimum number of predictions to keep. + Default: 100000. + ignore_index (int): The ignore index for training. Default: 255. + """ + + def __init__(self, thresh=0.7, min_kept=100000, ignore_index=255): + super(OHEMPixelSampler, self).__init__() + assert min_kept > 1 + self.thresh = thresh + self.min_kept = min_kept + self.ignore_index = ignore_index + + def sample(self, seg_logit, seg_label): + """ + + Args: + seg_logit (torch.Tensor): segmentation logits, shape (N, C, H, W) + seg_label (torch.Tensor): segmentation label, shape (N, 1, H, W) + + Returns: + torch.Tensor: segmentation weight, shape (N, H, W) + + """ + with torch.no_grad(): + assert seg_logit.shape[2:] == seg_label.shape[2:] + assert seg_label.shape[1] == 1 + seg_label = seg_label.squeeze(1).long() + batch_kept = self.min_kept * seg_label.size(0) + seg_prob = F.softmax(seg_logit, dim=1) + mask = seg_label.contiguous().view(-1, ) != self.ignore_index + + tmp_seg_label = seg_label.clone() + tmp_seg_label[tmp_seg_label == self.ignore_index] = 0 + seg_prob = seg_prob.gather(1, tmp_seg_label.unsqueeze(1)) + sort_prob, sort_indices = seg_prob.contiguous().view( + -1, )[mask].contiguous().sort() + + if sort_prob.numel() > 0: + min_threshold = sort_prob[min(batch_kept, + sort_prob.numel() - 1)] + else: + min_threshold = 0.0 + threshold = max(min_threshold, self.thresh) + + seg_weight = seg_logit.new_ones(size=seg_label.size()) + seg_weight = seg_weight.view(-1) + seg_weight[mask][sort_prob < threshold] = 0. + seg_weight = seg_weight.view_as(seg_label) + + return seg_weight diff --git a/mmseg/core/utils/__init__.py b/mmseg/core/utils/__init__.py new file mode 100644 index 000000000..f2678b321 --- /dev/null +++ b/mmseg/core/utils/__init__.py @@ -0,0 +1,3 @@ +from .misc import add_prefix + +__all__ = ['add_prefix'] diff --git a/mmseg/core/utils/misc.py b/mmseg/core/utils/misc.py new file mode 100644 index 000000000..eb862a82b --- /dev/null +++ b/mmseg/core/utils/misc.py @@ -0,0 +1,17 @@ +def add_prefix(inputs, prefix): + """Add prefix for dict. + + Args: + inputs (dict): The input dict with str keys. + prefix (str): The prefix to add. + + Returns: + + dict: The dict with keys updated with ``prefix``. + """ + + outputs = dict() + for name, value in inputs.items(): + outputs[f'{prefix}.{name}'] = value + + return outputs diff --git a/mmseg/datasets/__init__.py b/mmseg/datasets/__init__.py new file mode 100644 index 000000000..cb81b9a2e --- /dev/null +++ b/mmseg/datasets/__init__.py @@ -0,0 +1,12 @@ +from .ade import ADE20KDataset +from .builder import DATASETS, PIPELINES, build_dataloader, build_dataset +from .cityscapes import CityscapesDataset +from .custom import CustomDataset +from .dataset_wrappers import ConcatDataset, RepeatDataset +from .voc import PascalVOCDataset + +__all__ = [ + 'CustomDataset', 'build_dataloader', 'ConcatDataset', 'RepeatDataset', + 'DATASETS', 'build_dataset', 'PIPELINES', 'CityscapesDataset', + 'PascalVOCDataset', 'ADE20KDataset' +] diff --git a/mmseg/datasets/ade.py b/mmseg/datasets/ade.py new file mode 100644 index 000000000..5913e4377 --- /dev/null +++ b/mmseg/datasets/ade.py @@ -0,0 +1,84 @@ +from .builder import DATASETS +from .custom import CustomDataset + + +@DATASETS.register_module() +class ADE20KDataset(CustomDataset): + """ADE20K dataset. + + In segmentation map annotation for ADE20K, 0 stands for background, which + is not included in 150 categories. ``reduce_zero_label`` is fixed to True. + The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is fixed to + '.png'. + """ + CLASSES = ( + 'wall', 'building', 'sky', 'floor', 'tree', 'ceiling', 'road', 'bed ', + 'windowpane', 'grass', 'cabinet', 'sidewalk', 'person', 'earth', + 'door', 'table', 'mountain', 'plant', 'curtain', 'chair', 'car', + 'water', 'painting', 'sofa', 'shelf', 'house', 'sea', 'mirror', 'rug', + 'field', 'armchair', 'seat', 'fence', 'desk', 'rock', 'wardrobe', + 'lamp', 'bathtub', 'railing', 'cushion', 'base', 'box', 'column', + 'signboard', 'chest of drawers', 'counter', 'sand', 'sink', + 'skyscraper', 'fireplace', 'refrigerator', 'grandstand', 'path', + 'stairs', 'runway', 'case', 'pool table', 'pillow', 'screen door', + 'stairway', 'river', 'bridge', 'bookcase', 'blind', 'coffee table', + 'toilet', 'flower', 'book', 'hill', 'bench', 'countertop', 'stove', + 'palm', 'kitchen island', 'computer', 'swivel chair', 'boat', 'bar', + 'arcade machine', 'hovel', 'bus', 'towel', 'light', 'truck', 'tower', + 'chandelier', 'awning', 'streetlight', 'booth', 'television receiver', + 'airplane', 'dirt track', 'apparel', 'pole', 'land', 'bannister', + 'escalator', 'ottoman', 'bottle', 'buffet', 'poster', 'stage', 'van', + 'ship', 'fountain', 'conveyer belt', 'canopy', 'washer', 'plaything', + 'swimming pool', 'stool', 'barrel', 'basket', 'waterfall', 'tent', + 'bag', 'minibike', 'cradle', 'oven', 'ball', 'food', 'step', 'tank', + 'trade name', 'microwave', 'pot', 'animal', 'bicycle', 'lake', + 'dishwasher', 'screen', 'blanket', 'sculpture', 'hood', 'sconce', + 'vase', 'traffic light', 'tray', 'ashcan', 'fan', 'pier', 'crt screen', + 'plate', 'monitor', 'bulletin board', 'shower', 'radiator', 'glass', + 'clock', 'flag') + + PALETTE = [[120, 120, 120], [180, 120, 120], [6, 230, 230], [80, 50, 50], + [4, 200, 3], [120, 120, 80], [140, 140, 140], [204, 5, 255], + [230, 230, 230], [4, 250, 7], [224, 5, 255], [235, 255, 7], + [150, 5, 61], [120, 120, 70], [8, 255, 51], [255, 6, 82], + [143, 255, 140], [204, 255, 4], [255, 51, 7], [204, 70, 3], + [0, 102, 200], [61, 230, 250], [255, 6, 51], [11, 102, 255], + [255, 7, 71], [255, 9, 224], [9, 7, 230], [220, 220, 220], + [255, 9, 92], [112, 9, 255], [8, 255, 214], [7, 255, 224], + [255, 184, 6], [10, 255, 71], [255, 41, 10], [7, 255, 255], + [224, 255, 8], [102, 8, 255], [255, 61, 6], [255, 194, 7], + [255, 122, 8], [0, 255, 20], [255, 8, 41], [255, 5, 153], + [6, 51, 255], [235, 12, 255], [160, 150, 20], [0, 163, 255], + [140, 140, 140], [250, 10, 15], [20, 255, 0], [31, 255, 0], + [255, 31, 0], [255, 224, 0], [153, 255, 0], [0, 0, 255], + [255, 71, 0], [0, 235, 255], [0, 173, 255], [31, 0, 255], + [11, 200, 200], [255, 82, 0], [0, 255, 245], [0, 61, 255], + [0, 255, 112], [0, 255, 133], [255, 0, 0], [255, 163, 0], + [255, 102, 0], [194, 255, 0], [0, 143, 255], [51, 255, 0], + [0, 82, 255], [0, 255, 41], [0, 255, 173], [10, 0, 255], + [173, 255, 0], [0, 255, 153], [255, 92, 0], [255, 0, 255], + [255, 0, 245], [255, 0, 102], [255, 173, 0], [255, 0, 20], + [255, 184, 184], [0, 31, 255], [0, 255, 61], [0, 71, 255], + [255, 0, 204], [0, 255, 194], [0, 255, 82], [0, 10, 255], + [0, 112, 255], [51, 0, 255], [0, 194, 255], [0, 122, 255], + [0, 255, 163], [255, 153, 0], [0, 255, 10], [255, 112, 0], + [143, 255, 0], [82, 0, 255], [163, 255, 0], [255, 235, 0], + [8, 184, 170], [133, 0, 255], [0, 255, 92], [184, 0, 255], + [255, 0, 31], [0, 184, 255], [0, 214, 255], [255, 0, 112], + [92, 255, 0], [0, 224, 255], [112, 224, 255], [70, 184, 160], + [163, 0, 255], [153, 0, 255], [71, 255, 0], [255, 0, 163], + [255, 204, 0], [255, 0, 143], [0, 255, 235], [133, 255, 0], + [255, 0, 235], [245, 0, 255], [255, 0, 122], [255, 245, 0], + [10, 190, 212], [214, 255, 0], [0, 204, 255], [20, 0, 255], + [255, 255, 0], [0, 153, 255], [0, 41, 255], [0, 255, 204], + [41, 0, 255], [41, 255, 0], [173, 0, 255], [0, 245, 255], + [71, 0, 255], [122, 0, 255], [0, 255, 184], [0, 92, 255], + [184, 255, 0], [0, 133, 255], [255, 214, 0], [25, 194, 194], + [102, 255, 0], [92, 0, 255]] + + def __init__(self, **kwargs): + super(ADE20KDataset, self).__init__( + img_suffix='.jpg', + seg_map_suffix='.png', + reduce_zero_label=True, + **kwargs) diff --git a/mmseg/datasets/builder.py b/mmseg/datasets/builder.py new file mode 100644 index 000000000..f7a992611 --- /dev/null +++ b/mmseg/datasets/builder.py @@ -0,0 +1,169 @@ +import copy +import platform +import random +from functools import partial + +import numpy as np +from mmcv.parallel import collate +from mmcv.runner import get_dist_info +from mmcv.utils import Registry, build_from_cfg +from mmcv.utils.parrots_wrapper import DataLoader, PoolDataLoader +from torch.utils.data import DistributedSampler + +if platform.system() != 'Windows': + # https://github.com/pytorch/pytorch/issues/973 + import resource + rlimit = resource.getrlimit(resource.RLIMIT_NOFILE) + hard_limit = rlimit[1] + soft_limit = min(4096, hard_limit) + resource.setrlimit(resource.RLIMIT_NOFILE, (soft_limit, hard_limit)) + +DATASETS = Registry('dataset') +PIPELINES = Registry('pipeline') + + +def _concat_dataset(cfg, default_args=None): + """Build :obj:`ConcatDataset by.""" + from .dataset_wrappers import ConcatDataset + img_dir = cfg['img_dir'] + ann_dir = cfg.get('ann_dir', None) + split = cfg.get('split', None) + num_img_dir = len(img_dir) if isinstance(img_dir, (list, tuple)) else 1 + if ann_dir is not None: + num_ann_dir = len(ann_dir) if isinstance(ann_dir, (list, tuple)) else 1 + else: + num_ann_dir = 0 + if split is not None: + num_split = len(split) if isinstance(split, (list, tuple)) else 1 + else: + num_split = 0 + if num_img_dir > 1: + assert num_img_dir == num_ann_dir or num_ann_dir == 0 + assert num_img_dir == num_split or num_split == 0 + else: + assert num_split == num_ann_dir or num_ann_dir <= 1 + num_dset = max(num_split, num_img_dir) + + datasets = [] + for i in range(num_dset): + data_cfg = copy.deepcopy(cfg) + if isinstance(img_dir, (list, tuple)): + data_cfg['img_dir'] = img_dir[i] + if isinstance(ann_dir, (list, tuple)): + data_cfg['ann_dir'] = ann_dir[i] + if isinstance(split, (list, tuple)): + data_cfg['split'] = split[i] + datasets.append(build_dataset(data_cfg, default_args)) + + return ConcatDataset(datasets) + + +def build_dataset(cfg, default_args=None): + """Build datasets.""" + from .dataset_wrappers import ConcatDataset, RepeatDataset + if isinstance(cfg, (list, tuple)): + dataset = ConcatDataset([build_dataset(c, default_args) for c in cfg]) + elif cfg['type'] == 'RepeatDataset': + dataset = RepeatDataset( + build_dataset(cfg['dataset'], default_args), cfg['times']) + elif isinstance(cfg.get('img_dir'), (list, tuple)) or isinstance( + cfg.get('split', None), (list, tuple)): + dataset = _concat_dataset(cfg, default_args) + else: + dataset = build_from_cfg(cfg, DATASETS, default_args) + + return dataset + + +def build_dataloader(dataset, + samples_per_gpu, + workers_per_gpu, + num_gpus=1, + dist=True, + shuffle=True, + seed=None, + drop_last=False, + pin_memory=True, + dataloader_type='PoolDataLoader', + **kwargs): + """Build PyTorch DataLoader. + + In distributed training, each GPU/process has a dataloader. + In non-distributed training, there is only one dataloader for all GPUs. + + Args: + dataset (Dataset): A PyTorch dataset. + samples_per_gpu (int): Number of training samples on each GPU, i.e., + batch size of each GPU. + workers_per_gpu (int): How many subprocesses to use for data loading + for each GPU. + num_gpus (int): Number of GPUs. Only used in non-distributed training. + dist (bool): Distributed training/test or not. Default: True. + shuffle (bool): Whether to shuffle the data at every epoch. + Default: True. + seed (int | None): Seed to be used. Default: None. + drop_last (bool): Whether to drop the last incomplete batch in epoch. + Default: False + pin_memory (bool): Whether to use pin_memory in DataLoader. + Default: True + dataloader_type (str): Type of dataloader. Default: 'PoolDataLoader' + kwargs: any keyword argument to be used to initialize DataLoader + + Returns: + DataLoader: A PyTorch dataloader. + """ + rank, world_size = get_dist_info() + if dist: + sampler = DistributedSampler( + dataset, world_size, rank, shuffle=shuffle) + shuffle = False + batch_size = samples_per_gpu + num_workers = workers_per_gpu + else: + sampler = None + batch_size = num_gpus * samples_per_gpu + num_workers = num_gpus * workers_per_gpu + + init_fn = partial( + worker_init_fn, num_workers=num_workers, rank=rank, + seed=seed) if seed is not None else None + + assert dataloader_type in ( + 'DataLoader', + 'PoolDataLoader'), f'unsupported dataloader {dataloader_type}' + + if dataloader_type == 'PoolDataLoader': + dataloader = PoolDataLoader + elif dataloader_type == 'DataLoader': + dataloader = DataLoader + + data_loader = dataloader( + dataset, + batch_size=batch_size, + sampler=sampler, + num_workers=num_workers, + collate_fn=partial(collate, samples_per_gpu=samples_per_gpu), + pin_memory=pin_memory, + shuffle=shuffle, + worker_init_fn=init_fn, + drop_last=drop_last, + **kwargs) + + return data_loader + + +def worker_init_fn(worker_id, num_workers, rank, seed): + """Worker init func for dataloader. + + The seed of each worker equals to num_worker * rank + worker_id + user_seed + + Args: + worker_id (int): Worker id. + num_workers (int): Number of workers. + rank (int): The rank of current process. + seed (int): The random seed to use. + """ + + worker_seed = num_workers * rank + worker_id + seed + np.random.seed(worker_seed) + random.seed(worker_seed) diff --git a/mmseg/datasets/cityscapes.py b/mmseg/datasets/cityscapes.py new file mode 100644 index 000000000..9a12ab172 --- /dev/null +++ b/mmseg/datasets/cityscapes.py @@ -0,0 +1,213 @@ +import os.path as osp +import tempfile + +import mmcv +import numpy as np +from mmcv.utils import print_log +from PIL import Image + +from .builder import DATASETS +from .custom import CustomDataset + + +@DATASETS.register_module() +class CityscapesDataset(CustomDataset): + """Cityscapes dataset. + + The ``img_suffix`` is fixed to '_leftImg8bit.png' and ``seg_map_suffix`` is + fixed to '_gtFine_labelTrainIds.png' for Cityscapes dataset. + """ + + CLASSES = ('road', 'sidewalk', 'building', 'wall', 'fence', 'pole', + 'traffic light', 'traffic sign', 'vegetation', 'terrain', 'sky', + 'person', 'rider', 'car', 'truck', 'bus', 'train', 'motorcycle', + 'bicycle') + + PALETTE = [[128, 64, 128], [244, 35, 232], [70, 70, 70], [102, 102, 156], + [190, 153, 153], [153, 153, 153], [250, 170, 30], [220, 220, 0], + [107, 142, 35], [152, 251, 152], [70, 130, 180], [220, 20, 60], + [255, 0, 0], [0, 0, 142], [0, 0, 70], [0, 60, 100], + [0, 80, 100], [0, 0, 230], [119, 11, 32]] + + def __init__(self, **kwargs): + super(CityscapesDataset, self).__init__( + img_suffix='_leftImg8bit.png', + seg_map_suffix='_gtFine_labelTrainIds.png', + **kwargs) + + @staticmethod + def _convert_to_label_id(result): + """Convert trainId to id for cityscapes.""" + import cityscapesscripts.helpers.labels as CSLabels + result_copy = result.copy() + for trainId, label in CSLabels.trainId2label.items(): + result_copy[result == trainId] = label.id + + return result_copy + + def results2img(self, results, imgfile_prefix, to_label_id): + """Write the segmentation results to images. + + Args: + results (list[list | tuple | ndarray]): Testing results of the + dataset. + imgfile_prefix (str): The filename prefix of the png files. + If the prefix is "somepath/xxx", + the png files will be named "somepath/xxx.png". + to_label_id (bool): whether convert output to label_id for + submission + + Returns: + list[str: str]: result txt files which contains corresponding + semantic segmentation images. + """ + result_files = [] + prog_bar = mmcv.ProgressBar(len(self)) + for idx in range(len(self)): + result = results[idx] + if to_label_id: + result = self._convert_to_label_id(result) + filename = self.img_infos[idx]['filename'] + basename = osp.splitext(osp.basename(filename))[0] + + png_filename = osp.join(imgfile_prefix, f'{basename}.png') + + output = Image.fromarray(result.astype(np.uint8)).convert('P') + import cityscapesscripts.helpers.labels as CSLabels + palette = np.zeros((len(CSLabels.id2label), 3), dtype=np.uint8) + for label_id, label in CSLabels.id2label.items(): + palette[label_id] = label.color + + output.putpalette(palette) + output.save(png_filename) + result_files.append(png_filename) + prog_bar.update() + + return result_files + + def format_results(self, results, imgfile_prefix=None, to_label_id=True): + """Format the results into dir (standard format for Cityscapes + evaluation). + + Args: + results (list): Testing results of the dataset. + imgfile_prefix (str | None): The prefix of images files. It + includes the file path and the prefix of filename, e.g., + "a/b/prefix". If not specified, a temp file will be created. + Default: None. + to_label_id (bool): whether convert output to label_id for + submission. Default: False + + Returns: + tuple: (result_files, tmp_dir), result_files is a list containing + the image paths, tmp_dir is the temporal directory created + for saving json/png files when img_prefix is not specified. + """ + + assert isinstance(results, list), 'results must be a list' + assert len(results) == len(self), ( + 'The length of results is not equal to the dataset len: ' + f'{len(results)} != {len(self)}') + + if imgfile_prefix is None: + tmp_dir = tempfile.TemporaryDirectory() + imgfile_prefix = tmp_dir.name + else: + tmp_dir = None + result_files = self.results2img(results, imgfile_prefix, to_label_id) + + return result_files, tmp_dir + + def evaluate(self, + results, + metric='mIoU', + logger=None, + imgfile_prefix=None): + """Evaluation in Cityscapes/default protocol. + + Args: + results (list): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. + logger (logging.Logger | None | str): Logger used for printing + related information during evaluation. Default: None. + imgfile_prefix (str | None): The prefix of output image file, + for cityscapes evaluation only. It includes the file path and + the prefix of filename, e.g., "a/b/prefix". + If results are evaluated with cityscapes protocol, it would be + the prefix of output png files. The output files would be + png images under folder "a/b/prefix/xxx/", where "xxx" is the + video name of cityscapes. If not specified, a temp file will + be created. + Default: None. + + Returns: + dict[str, float]: Cityscapes/default metrics. + """ + + eval_results = dict() + metrics = metric.copy() if isinstance(metric, list) else [metric] + if 'cityscapes' in metrics: + eval_results.update( + self._evaluate_cityscapes(results, logger, imgfile_prefix)) + metrics.remove('cityscapes') + if len(metrics) > 0: + eval_results.update( + super(CityscapesDataset, + self).evaluate(results, metrics, logger)) + + return eval_results + + def _evaluate_cityscapes(self, results, logger, imgfile_prefix): + """Evaluation in Cityscapes protocol. + + Args: + results (list): Testing results of the dataset. + logger (logging.Logger | str | None): Logger used for printing + related information during evaluation. Default: None. + imgfile_prefix (str | None): The prefix of output image file + + Returns: + dict[str: float]: Cityscapes evaluation results. + """ + try: + import cityscapesscripts.evaluation.evalPixelLevelSemanticLabeling as CSEval # noqa + except ImportError: + raise ImportError('Please run "pip install citscapesscripts" to ' + 'install cityscapesscripts first.') + msg = 'Evaluating in Cityscapes style' + if logger is None: + msg = '\n' + msg + print_log(msg, logger=logger) + + result_files, tmp_dir = self.format_results(results, imgfile_prefix) + + if tmp_dir is None: + result_dir = imgfile_prefix + else: + result_dir = tmp_dir.name + + eval_results = dict() + print_log(f'Evaluating results under {result_dir} ...', logger=logger) + + CSEval.args.evalInstLevelScore = True + CSEval.args.predictionPath = osp.abspath(result_dir) + CSEval.args.evalPixelAccuracy = True + CSEval.args.JSONOutput = False + + seg_map_list = [] + pred_list = [] + + # when evaluating with official cityscapesscripts, + # **_gtFine_labelIds.png is used + for seg_map in mmcv.scandir( + self.ann_dir, 'gtFine_labelIds.png', recursive=True): + seg_map_list.append(osp.join(self.ann_dir, seg_map)) + pred_list.append(CSEval.getPrediction(CSEval.args, seg_map)) + + eval_results.update( + CSEval.evaluateImgLists(pred_list, seg_map_list, CSEval.args)) + + if tmp_dir is not None: + tmp_dir.cleanup() + + return eval_results diff --git a/mmseg/datasets/custom.py b/mmseg/datasets/custom.py new file mode 100644 index 000000000..92d17c525 --- /dev/null +++ b/mmseg/datasets/custom.py @@ -0,0 +1,291 @@ +import os.path as osp +from functools import reduce + +import mmcv +import numpy as np +from mmcv.utils import print_log +from torch.utils.data import Dataset + +from mmseg.core import mean_iou +from mmseg.utils import get_root_logger +from .builder import DATASETS +from .pipelines import Compose + + +@DATASETS.register_module() +class CustomDataset(Dataset): + """Custom dataset for semantic segmentation. + + An example of file structure is as followed. + + .. code-block:: none + + ├── data + │ ├── my_dataset + │ │ ├── img_dir + │ │ │ ├── train + │ │ │ │ ├── xxx{img_suffix} + │ │ │ │ ├── yyy{img_suffix} + │ │ │ │ ├── zzz{img_suffix} + │ │ │ ├── val + │ │ ├── ann_dir + │ │ │ ├── train + │ │ │ │ ├── xxx{seg_map_suffix} + │ │ │ │ ├── yyy{seg_map_suffix} + │ │ │ │ ├── zzz{seg_map_suffix} + │ │ │ ├── val + + The img/gt_semantic_seg pair of CustomDataset should be of the same + except suffix. A valid img/gt_semantic_seg filename pair should be like + ``xxx{img_suffix}`` and ``xxx{seg_map_suffix}`` (extension is also included + in the suffix). If split is given, then ``xxx`` is specified in txt file. + Otherwise, all files in ``img_dir/``and ``ann_dir`` will be loaded. + Please refer to ``docs/tutorials/new_dataset.md`` for more details. + + + Args: + pipeline (list[dict]): Processing pipeline + img_dir (str): Path to image directory + img_suffix (str): Suffix of images. Default: '.jpg' + ann_dir (str, optional): Path to annotation directory. Default: None + seg_map_suffix (str): Suffix of segmentation maps. Default: '.png' + split (str, optional): Split txt file. If split is specified, only + file with suffix in the splits will be loaded. Otherwise, all + images in img_dir/ann_dir will be loaded. Default: None + data_root (str, optional): Data root for img_dir/ann_dir. Default: + None. + test_mode (bool): If test_mode=True, gt wouldn't be loaded. + ignore_index (int): The label index to be ignored. Default: 255 + reduce_zero_label (bool): Whether to mark label zero as ignored. + Default: False + """ + + CLASSES = None + + PALETTE = None + + def __init__(self, + pipeline, + img_dir, + img_suffix='.jpg', + ann_dir=None, + seg_map_suffix='.png', + split=None, + data_root=None, + test_mode=False, + ignore_index=255, + reduce_zero_label=False): + self.pipeline = Compose(pipeline) + self.img_dir = img_dir + self.img_suffix = img_suffix + self.ann_dir = ann_dir + self.seg_map_suffix = seg_map_suffix + self.split = split + self.data_root = data_root + self.test_mode = test_mode + self.ignore_index = ignore_index + self.reduce_zero_label = reduce_zero_label + + # join paths if data_root is specified + if self.data_root is not None: + if not osp.isabs(self.img_dir): + self.img_dir = osp.join(self.data_root, self.img_dir) + if not (self.ann_dir is None or osp.isabs(self.ann_dir)): + self.ann_dir = osp.join(self.data_root, self.ann_dir) + if not (self.split is None or osp.isabs(self.split)): + self.split = osp.join(self.data_root, self.split) + + # load annotations + self.img_infos = self.load_annotations(self.img_dir, self.img_suffix, + self.ann_dir, + self.seg_map_suffix, self.split) + + def __len__(self): + """Total number of samples of data.""" + return len(self.img_infos) + + def load_annotations(self, img_dir, img_suffix, ann_dir, seg_map_suffix, + split): + """Load annotation from directory. + + Args: + img_dir (str): Path to image directory + img_suffix (str): Suffix of images. + ann_dir (str|None): Path to annotation directory. + seg_map_suffix (str|None): Suffix of segmentation maps. + split (str|None): Split txt file. If split is specified, only file + with suffix in the splits will be loaded. Otherwise, all images + in img_dir/ann_dir will be loaded. Default: None + + Returns: + list[dict]: All image info of dataset. + """ + + img_infos = [] + if split is not None: + with open(split) as f: + for line in f: + img_name = line.strip() + img_file = osp.join(img_dir, img_name + img_suffix) + img_info = dict(filename=img_file) + if ann_dir is not None: + seg_map = osp.join(ann_dir, img_name + seg_map_suffix) + img_info['ann'] = dict(seg_map=seg_map) + img_infos.append(img_info) + else: + for img in mmcv.scandir(img_dir, img_suffix, recursive=True): + img_file = osp.join(img_dir, img) + img_info = dict(filename=img_file) + if ann_dir is not None: + seg_map = osp.join(ann_dir, + img.replace(img_suffix, seg_map_suffix)) + img_info['ann'] = dict(seg_map=seg_map) + img_infos.append(img_info) + + print_log(f'Loaded {len(img_infos)} images', logger=get_root_logger()) + return img_infos + + def get_ann_info(self, idx): + """Get annotation by index. + + Args: + idx (int): Index of data. + + Returns: + dict: Annotation info of specified index. + """ + + return self.img_infos[idx]['ann'] + + def pre_pipeline(self, results): + """Prepare results dict for pipeline.""" + results['seg_fields'] = [] + + def __getitem__(self, idx): + """Get training/test data after pipeline. + + Args: + idx (int): Index of data. + + Returns: + dict: Training/test data (with annotation if `test_mode` is set + False). + """ + + if self.test_mode: + return self.prepare_test_img(idx) + else: + return self.prepare_train_img(idx) + + def prepare_train_img(self, idx): + """Get training data and annotations after pipeline. + + Args: + idx (int): Index of data. + + Returns: + dict: Training data and annotation after pipeline with new keys + introduced by pipeline. + """ + + img_info = self.img_infos[idx] + ann_info = self.get_ann_info(idx) + results = dict(img_info=img_info, ann_info=ann_info) + self.pre_pipeline(results) + return self.pipeline(results) + + def prepare_test_img(self, idx): + """Get testing data after pipeline. + + Args: + idx (int): Index of data. + + Returns: + dict: Testing data after pipeline with new keys intorduced by + piepline. + """ + + img_info = self.img_infos[idx] + results = dict(img_info=img_info) + self.pre_pipeline(results) + return self.pipeline(results) + + def format_results(self, results, **kwargs): + """Place holder to format result to dataset specific output.""" + pass + + def get_gt_seg_maps(self): + """Get ground truth segmentation maps for evaluation.""" + gt_seg_maps = [] + for img_info in self.img_infos: + gt_seg_map = mmcv.imread( + img_info['ann']['seg_map'], flag='unchanged', backend='pillow') + if self.reduce_zero_label: + # avoid using underflow conversion + gt_seg_map[gt_seg_map == 0] = 255 + gt_seg_map = gt_seg_map - 1 + gt_seg_map[gt_seg_map == 254] = 255 + + gt_seg_maps.append(gt_seg_map) + + return gt_seg_maps + + def evaluate(self, results, metric='mIoU', logger=None, **kwargs): + """Evaluate the dataset. + + Args: + results (list): Testing results of the dataset. + metric (str | list[str]): Metrics to be evaluated. + logger (logging.Logger | None | str): Logger used for printing + related information during evaluation. Default: None. + + Returns: + dict[str, float]: Default metrics. + """ + + if not isinstance(metric, str): + assert len(metric) == 1 + metric = metric[0] + allowed_metrics = ['mIoU'] + if metric not in allowed_metrics: + raise KeyError('metric {} is not supported'.format(metric)) + + eval_results = {} + gt_seg_maps = self.get_gt_seg_maps() + if self.CLASSES is None: + num_classes = len( + reduce(np.union1d, [np.unique(_) for _ in gt_seg_maps])) + else: + num_classes = len(self.CLASSES) + + all_acc, acc, iou = mean_iou( + results, gt_seg_maps, num_classes, ignore_index=self.ignore_index) + summary_str = '' + summary_str += 'per class results:\n' + + line_format = '{:<15} {:>10} {:>10}\n' + summary_str += line_format.format('Class', 'IoU', 'Acc') + if self.CLASSES is None: + class_names = tuple(range(num_classes)) + else: + class_names = self.CLASSES + for i in range(num_classes): + iou_str = '{:.2f}'.format(iou[i] * 100) + acc_str = '{:.2f}'.format(acc[i] * 100) + summary_str += line_format.format(class_names[i], iou_str, acc_str) + summary_str += 'Summary:\n' + line_format = '{:<15} {:>10} {:>10} {:>10}\n' + summary_str += line_format.format('Scope', 'mIoU', 'mAcc', 'aAcc') + + iou_str = '{:.2f}'.format(np.nanmean(iou) * 100) + acc_str = '{:.2f}'.format(np.nanmean(acc) * 100) + all_acc_str = '{:.2f}'.format(all_acc * 100) + summary_str += line_format.format('global', iou_str, acc_str, + all_acc_str) + print_log(summary_str, logger) + + eval_results['mIoU'] = np.nanmean(iou) + eval_results['mAcc'] = np.nanmean(acc) + eval_results['aAcc'] = all_acc + + return eval_results diff --git a/mmseg/datasets/dataset_wrappers.py b/mmseg/datasets/dataset_wrappers.py new file mode 100644 index 000000000..d6a5e957e --- /dev/null +++ b/mmseg/datasets/dataset_wrappers.py @@ -0,0 +1,50 @@ +from torch.utils.data.dataset import ConcatDataset as _ConcatDataset + +from .builder import DATASETS + + +@DATASETS.register_module() +class ConcatDataset(_ConcatDataset): + """A wrapper of concatenated dataset. + + Same as :obj:`torch.utils.data.dataset.ConcatDataset`, but + concat the group flag for image aspect ratio. + + Args: + datasets (list[:obj:`Dataset`]): A list of datasets. + """ + + def __init__(self, datasets): + super(ConcatDataset, self).__init__(datasets) + self.CLASSES = datasets[0].CLASSES + self.PALETTE = datasets[0].PALETTE + + +@DATASETS.register_module() +class RepeatDataset(object): + """A wrapper of repeated dataset. + + The length of repeated dataset will be `times` larger than the original + dataset. This is useful when the data loading time is long but the dataset + is small. Using RepeatDataset can reduce the data loading time between + epochs. + + Args: + dataset (:obj:`Dataset`): The dataset to be repeated. + times (int): Repeat times. + """ + + def __init__(self, dataset, times): + self.dataset = dataset + self.times = times + self.CLASSES = dataset.CLASSES + self.PALETTE = dataset.PALETTE + self._ori_len = len(self.dataset) + + def __getitem__(self, idx): + """Get item from original dataset.""" + return self.dataset[idx % self._ori_len] + + def __len__(self): + """The length is multiplied by ``times``""" + return self.times * self._ori_len diff --git a/mmseg/datasets/pipelines/__init__.py b/mmseg/datasets/pipelines/__init__.py new file mode 100644 index 000000000..e45f49507 --- /dev/null +++ b/mmseg/datasets/pipelines/__init__.py @@ -0,0 +1,14 @@ +from .compose import Compose +from .formating import (Collect, ImageToTensor, ToDataContainer, ToTensor, + Transpose, to_tensor) +from .loading import LoadAnnotations, LoadImageFromFile +from .test_time_aug import MultiScaleFlipAug +from .transforms import (Normalize, Pad, PhotoMetricDistortion, RandomCrop, + RandomFlip, Resize, SegRescale) + +__all__ = [ + 'Compose', 'to_tensor', 'ToTensor', 'ImageToTensor', 'ToDataContainer', + 'Transpose', 'Collect', 'LoadAnnotations', 'LoadImageFromFile', + 'MultiScaleFlipAug', 'Resize', 'RandomFlip', 'Pad', 'RandomCrop', + 'Normalize', 'SegRescale', 'PhotoMetricDistortion' +] diff --git a/mmseg/datasets/pipelines/compose.py b/mmseg/datasets/pipelines/compose.py new file mode 100644 index 000000000..ca48f1c93 --- /dev/null +++ b/mmseg/datasets/pipelines/compose.py @@ -0,0 +1,51 @@ +import collections + +from mmcv.utils import build_from_cfg + +from ..builder import PIPELINES + + +@PIPELINES.register_module() +class Compose(object): + """Compose multiple transforms sequentially. + + Args: + transforms (Sequence[dict | callable]): Sequence of transform object or + config dict to be composed. + """ + + def __init__(self, transforms): + assert isinstance(transforms, collections.abc.Sequence) + self.transforms = [] + for transform in transforms: + if isinstance(transform, dict): + transform = build_from_cfg(transform, PIPELINES) + self.transforms.append(transform) + elif callable(transform): + self.transforms.append(transform) + else: + raise TypeError('transform must be callable or a dict') + + def __call__(self, data): + """Call function to apply transforms sequentially. + + Args: + data (dict): A result dict contains the data to transform. + + Returns: + dict: Transformed data. + """ + + for t in self.transforms: + data = t(data) + if data is None: + return None + return data + + def __repr__(self): + format_string = self.__class__.__name__ + '(' + for t in self.transforms: + format_string += '\n' + format_string += f' {t}' + format_string += '\n)' + return format_string diff --git a/mmseg/datasets/pipelines/formating.py b/mmseg/datasets/pipelines/formating.py new file mode 100644 index 000000000..e7029a8ba --- /dev/null +++ b/mmseg/datasets/pipelines/formating.py @@ -0,0 +1,288 @@ +from collections.abc import Sequence + +import mmcv +import numpy as np +import torch +from mmcv.parallel import DataContainer as DC + +from ..builder import PIPELINES + + +def to_tensor(data): + """Convert objects of various python types to :obj:`torch.Tensor`. + + Supported types are: :class:`numpy.ndarray`, :class:`torch.Tensor`, + :class:`Sequence`, :class:`int` and :class:`float`. + + Args: + data (torch.Tensor | numpy.ndarray | Sequence | int | float): Data to + be converted. + """ + + if isinstance(data, torch.Tensor): + return data + elif isinstance(data, np.ndarray): + return torch.from_numpy(data) + elif isinstance(data, Sequence) and not mmcv.is_str(data): + return torch.tensor(data) + elif isinstance(data, int): + return torch.LongTensor([data]) + elif isinstance(data, float): + return torch.FloatTensor([data]) + else: + raise TypeError(f'type {type(data)} cannot be converted to tensor.') + + +@PIPELINES.register_module() +class ToTensor(object): + """Convert some results to :obj:`torch.Tensor` by given keys. + + Args: + keys (Sequence[str]): Keys that need to be converted to Tensor. + """ + + def __init__(self, keys): + self.keys = keys + + def __call__(self, results): + """Call function to convert data in results to :obj:`torch.Tensor`. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + dict: The result dict contains the data converted + to :obj:`torch.Tensor`. + """ + + for key in self.keys: + results[key] = to_tensor(results[key]) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(keys={self.keys})' + + +@PIPELINES.register_module() +class ImageToTensor(object): + """Convert image to :obj:`torch.Tensor` by given keys. + + The dimension order of input image is (H, W, C). The pipeline will convert + it to (C, H, W). If only 2 dimension (H, W) is given, the output would be + (1, H, W). + + Args: + keys (Sequence[str]): Key of images to be converted to Tensor. + """ + + def __init__(self, keys): + self.keys = keys + + def __call__(self, results): + """Call function to convert image in results to :obj:`torch.Tensor` and + transpose the channel order. + + Args: + results (dict): Result dict contains the image data to convert. + + Returns: + dict: The result dict contains the image converted + to :obj:`torch.Tensor` and transposed to (C, H, W) order. + """ + + for key in self.keys: + img = results[key] + if len(img.shape) < 3: + img = np.expand_dims(img, -1) + results[key] = to_tensor(img.transpose(2, 0, 1)) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(keys={self.keys})' + + +@PIPELINES.register_module() +class Transpose(object): + """Transpose some results by given keys. + + Args: + keys (Sequence[str]): Keys of results to be transposed. + order (Sequence[int]): Order of transpose. + """ + + def __init__(self, keys, order): + self.keys = keys + self.order = order + + def __call__(self, results): + """Call function to convert image in results to :obj:`torch.Tensor` and + transpose the channel order. + + Args: + results (dict): Result dict contains the image data to convert. + + Returns: + dict: The result dict contains the image converted + to :obj:`torch.Tensor` and transposed to (C, H, W) order. + """ + + for key in self.keys: + results[key] = results[key].transpose(self.order) + return results + + def __repr__(self): + return self.__class__.__name__ + \ + f'(keys={self.keys}, order={self.order})' + + +@PIPELINES.register_module() +class ToDataContainer(object): + """Convert results to :obj:`mmcv.DataContainer` by given fields. + + Args: + fields (Sequence[dict]): Each field is a dict like + ``dict(key='xxx', **kwargs)``. The ``key`` in result will + be converted to :obj:`mmcv.DataContainer` with ``**kwargs``. + Default: ``(dict(key='img', stack=True), + dict(key='gt_semantic_seg'))``. + """ + + def __init__(self, + fields=(dict(key='img', + stack=True), dict(key='gt_semantic_seg'))): + self.fields = fields + + def __call__(self, results): + """Call function to convert data in results to + :obj:`mmcv.DataContainer`. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + dict: The result dict contains the data converted to + :obj:`mmcv.DataContainer`. + """ + + for field in self.fields: + field = field.copy() + key = field.pop('key') + results[key] = DC(results[key], **field) + return results + + def __repr__(self): + return self.__class__.__name__ + f'(fields={self.fields})' + + +@PIPELINES.register_module() +class DefaultFormatBundle(object): + """Default formatting bundle. + + It simplifies the pipeline of formatting common fields, including "img" + and "gt_semantic_seg". These fields are formatted as follows. + + - img: (1)transpose, (2)to tensor, (3)to DataContainer (stack=True) + - gt_semantic_seg: (1)unsqueeze dim-0 (2)to tensor, + (3)to DataContainer (stack=True) + """ + + def __call__(self, results): + """Call function to transform and format common fields in results. + + Args: + results (dict): Result dict contains the data to convert. + + Returns: + dict: The result dict contains the data that is formatted with + default bundle. + """ + + if 'img' in results: + img = results['img'] + if len(img.shape) < 3: + img = np.expand_dims(img, -1) + img = np.ascontiguousarray(img.transpose(2, 0, 1)) + results['img'] = DC(to_tensor(img), stack=True) + if 'gt_semantic_seg' in results: + # convert to long + results['gt_semantic_seg'] = DC( + to_tensor(results['gt_semantic_seg'][None, + ...].astype(np.int64)), + stack=True) + return results + + def __repr__(self): + return self.__class__.__name__ + + +@PIPELINES.register_module() +class Collect(object): + """Collect data from the loader relevant to the specific task. + + This is usually the last stage of the data loader pipeline. Typically keys + is set to some subset of "img", "gt_semantic_seg". + + The "img_meta" item is always populated. The contents of the "img_meta" + dictionary depends on "meta_keys". By default this includes: + + - "img_shape": shape of the image input to the network as a tuple + (h, w, c). Note that images may be zero padded on the bottom/right + if the batch tensor is larger than this shape. + + - "scale_factor": a float indicating the preprocessing scale + + - "flip": a boolean indicating if image flip transform was used + + - "filename": path to the image file + + - "ori_shape": original shape of the image as a tuple (h, w, c) + + - "pad_shape": image shape after padding + + - "img_norm_cfg": a dict of normalization information: + - mean - per channel mean subtraction + - std - per channel std divisor + - to_rgb - bool indicating if bgr was converted to rgb + + Args: + keys (Sequence[str]): Keys of results to be collected in ``data``. + meta_keys (Sequence[str], optional): Meta keys to be converted to + ``mmcv.DataContainer`` and collected in ``data[img_metas]``. + Default: ``('filename', 'ori_filename', 'ori_shape', 'img_shape', + 'pad_shape', 'scale_factor', 'flip', 'flip_direction', + 'img_norm_cfg')`` + """ + + def __init__(self, + keys, + meta_keys=('filename', 'ori_filename', 'ori_shape', + 'img_shape', 'pad_shape', 'scale_factor', 'flip', + 'flip_direction', 'img_norm_cfg')): + self.keys = keys + self.meta_keys = meta_keys + + def __call__(self, results): + """Call function to collect keys in results. The keys in ``meta_keys`` + will be converted to :obj:mmcv.DataContainer. + + Args: + results (dict): Result dict contains the data to collect. + + Returns: + dict: The result dict contains the following keys + - keys in``self.keys`` + - ``img_metas`` + """ + + data = {} + img_meta = {} + for key in self.meta_keys: + img_meta[key] = results[key] + data['img_metas'] = DC(img_meta, cpu_only=True) + for key in self.keys: + data[key] = results[key] + return data + + def __repr__(self): + return self.__class__.__name__ + \ + f'(keys={self.keys}, meta_keys={self.meta_keys})' diff --git a/mmseg/datasets/pipelines/loading.py b/mmseg/datasets/pipelines/loading.py new file mode 100644 index 000000000..978626910 --- /dev/null +++ b/mmseg/datasets/pipelines/loading.py @@ -0,0 +1,149 @@ +import os.path as osp + +import mmcv +import numpy as np + +from ..builder import PIPELINES + + +@PIPELINES.register_module() +class LoadImageFromFile(object): + """Load an image from file. + + Required keys are "img_prefix" and "img_info" (a dict that must contain the + key "filename"). Added or updated keys are "filename", "img", "img_shape", + "ori_shape" (same as `img_shape`), "pad_shape" (same as `img_shape`), + "scale_factor" (1.0) and "img_norm_cfg" (means=0 and stds=1). + + Args: + to_float32 (bool): Whether to convert the loaded image to a float32 + numpy array. If set to False, the loaded image is an uint8 array. + Defaults to False. + color_type (str): The flag argument for :func:`mmcv.imfrombytes`. + Defaults to 'color'. + file_client_args (dict): Arguments to instantiate a FileClient. + See :class:`mmcv.fileio.FileClient` for details. + Defaults to ``dict(backend='disk')``. + imdecode_backend (str): Backend for :func:`mmcv.imdecode`. Default: + 'cv2' + """ + + def __init__(self, + to_float32=False, + color_type='color', + file_client_args=dict(backend='disk'), + imdecode_backend='cv2'): + self.to_float32 = to_float32 + self.color_type = color_type + self.file_client_args = file_client_args.copy() + self.file_client = None + self.imdecode_backend = imdecode_backend + + def __call__(self, results): + """Call functions to load image and get image meta information. + + Args: + results (dict): Result dict from :obj:`mmseg.CustomDataset`. + + Returns: + dict: The dict contains loaded image and meta information. + """ + + if self.file_client is None: + self.file_client = mmcv.FileClient(**self.file_client_args) + + if results.get('img_prefix') is not None: + filename = osp.join(results['img_prefix'], + results['img_info']['filename']) + else: + filename = results['img_info']['filename'] + img_bytes = self.file_client.get(filename) + img = mmcv.imfrombytes( + img_bytes, flag=self.color_type, backend=self.imdecode_backend) + if self.to_float32: + img = img.astype(np.float32) + + results['filename'] = filename + results['ori_filename'] = results['img_info']['filename'] + results['img'] = img + results['img_shape'] = img.shape + results['ori_shape'] = img.shape + # Set initial values for default meta_keys + results['pad_shape'] = img.shape + results['scale_factor'] = 1.0 + num_channels = 1 if len(img.shape) < 3 else img.shape[2] + results['img_norm_cfg'] = dict( + mean=np.zeros(num_channels, dtype=np.float32), + std=np.ones(num_channels, dtype=np.float32), + to_rgb=False) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(to_float32={self.to_float32},' + repr_str += f"color_type='{self.color_type}'," + repr_str += f"imdecode_backend='{self.imdecode_backend}')" + return repr_str + + +@PIPELINES.register_module() +class LoadAnnotations(object): + """Load annotations for semantic segmentation. + + Args: + reduct_zero_label (bool): Whether reduce all label value by 1. + Usually used for datasets where 0 is background label. + Default: False. + file_client_args (dict): Arguments to instantiate a FileClient. + See :class:`mmcv.fileio.FileClient` for details. + Defaults to ``dict(backend='disk')``. + imdecode_backend (str): Backend for :func:`mmcv.imdecode`. Default: + 'pillow' + """ + + def __init__(self, + reduce_zero_label=False, + file_client_args=dict(backend='disk'), + imdecode_backend='pillow'): + self.reduce_zero_label = reduce_zero_label + self.file_client_args = file_client_args.copy() + self.file_client = None + self.imdecode_backend = imdecode_backend + + def __call__(self, results): + """Call function to load multiple types annotations. + + Args: + results (dict): Result dict from :obj:`mmseg.CustomDataset`. + + Returns: + dict: The dict contains loaded semantic segmentation annotations. + """ + + if self.file_client is None: + self.file_client = mmcv.FileClient(**self.file_client_args) + + if results.get('seg_prefix', None) is not None: + filename = osp.join(results['seg_prefix'], + results['ann_info']['seg_map']) + else: + filename = results['ann_info']['seg_map'] + img_bytes = self.file_client.get(filename) + gt_semantic_seg = mmcv.imfrombytes( + img_bytes, flag='unchanged', + backend=self.imdecode_backend).squeeze().astype(np.uint8) + # reduce zero_label + if self.reduce_zero_label: + # avoid using underflow conversion + gt_semantic_seg[gt_semantic_seg == 0] = 255 + gt_semantic_seg = gt_semantic_seg - 1 + gt_semantic_seg[gt_semantic_seg == 254] = 255 + results['gt_semantic_seg'] = gt_semantic_seg + results['seg_fields'].append('gt_semantic_seg') + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(reduce_zero_label={self.reduce_zero_label},' + repr_str += f"imdecode_backend='{self.imdecode_backend}')" + return repr_str diff --git a/mmseg/datasets/pipelines/test_time_aug.py b/mmseg/datasets/pipelines/test_time_aug.py new file mode 100644 index 000000000..5712c79d5 --- /dev/null +++ b/mmseg/datasets/pipelines/test_time_aug.py @@ -0,0 +1,120 @@ +import warnings + +import mmcv + +from ..builder import PIPELINES +from .compose import Compose + + +@PIPELINES.register_module() +class MultiScaleFlipAug(object): + """Test-time augmentation with multiple scales and flipping. + + An example configuration is as followed: + + .. code-block:: + + img_scale=(2048, 1024), + img_ratios=[0.5, 1.0], + flip=True, + transforms=[ + dict(type='Resize', keep_ratio=True), + dict(type='RandomFlip'), + dict(type='Normalize', **img_norm_cfg), + dict(type='Pad', size_divisor=32), + dict(type='ImageToTensor', keys=['img']), + dict(type='Collect', keys=['img']), + ] + + After MultiScaleFLipAug with above configuration, the results are wrapped + into lists of the same length as followed: + + .. code-block:: + + dict( + img=[...], + img_shape=[...], + scale=[(1024, 512), (1024, 512), (2048, 1024), (2048, 1024)] + flip=[False, True, False, True] + ... + ) + + Args: + transforms (list[dict]): Transforms to apply in each augmentation. + img_scale (tuple | list[tuple]): Images scales for resizing. + img_ratios (float | list[float]): Image ratios for resizing + flip (bool): Whether apply flip augmentation. Default: False. + flip_direction (str | list[str]): Flip augmentation directions, + options are "horizontal" and "vertical". If flip_direction is list, + multiple flip augmentations will be applied. + It has no effect when flip == False. Default: "horizontal". + """ + + def __init__(self, + transforms, + img_scale, + img_ratios=None, + flip=False, + flip_direction='horizontal'): + self.transforms = Compose(transforms) + if img_ratios is not None: + # mode 1: given a scale and a range of image ratio + img_ratios = img_ratios if isinstance(img_ratios, + list) else [img_ratios] + assert mmcv.is_list_of(img_ratios, float) + assert isinstance(img_scale, tuple) and len(img_scale) == 2 + self.img_scale = [(int(img_scale[0] * ratio), + int(img_scale[1] * ratio)) + for ratio in img_ratios] + else: + # mode 2: given multiple scales + self.img_scale = img_scale if isinstance(img_scale, + list) else [img_scale] + assert mmcv.is_list_of(self.img_scale, tuple) + self.flip = flip + self.flip_direction = flip_direction if isinstance( + flip_direction, list) else [flip_direction] + assert mmcv.is_list_of(self.flip_direction, str) + if not self.flip and self.flip_direction != ['horizontal']: + warnings.warn( + 'flip_direction has no effect when flip is set to False') + if (self.flip + and not any([t['type'] == 'RandomFlip' for t in transforms])): + warnings.warn( + 'flip has no effect when RandomFlip is not in transforms') + + def __call__(self, results): + """Call function to apply test time augment transforms on results. + + Args: + results (dict): Result dict contains the data to transform. + + Returns: + dict[str: list]: The augmented data, where each value is wrapped + into a list. + """ + + aug_data = [] + flip_aug = [False, True] if self.flip else [False] + for scale in self.img_scale: + for flip in flip_aug: + for direction in self.flip_direction: + _results = results.copy() + _results['scale'] = scale + _results['flip'] = flip + _results['flip_direction'] = direction + data = self.transforms(_results) + aug_data.append(data) + # list of dict to dict of list + aug_data_dict = {key: [] for key in aug_data[0]} + for data in aug_data: + for key, val in data.items(): + aug_data_dict[key].append(val) + return aug_data_dict + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(transforms={self.transforms}, ' + repr_str += f'img_scale={self.img_scale}, flip={self.flip})' + repr_str += f'flip_direction={self.flip_direction}' + return repr_str diff --git a/mmseg/datasets/pipelines/transforms.py b/mmseg/datasets/pipelines/transforms.py new file mode 100644 index 000000000..b683973ca --- /dev/null +++ b/mmseg/datasets/pipelines/transforms.py @@ -0,0 +1,610 @@ +import mmcv +import numpy as np +from numpy import random + +from ..builder import PIPELINES + + +@PIPELINES.register_module() +class Resize(object): + """Resize images & seg. + + This transform resizes the input image to some scale. If the input dict + contains the key "scale", then the scale in the input dict is used, + otherwise the specified scale in the init method is used. + + ``img_scale`` can either be a tuple (single-scale) or a list of tuple + (multi-scale). There are 3 multiscale modes: + - ``ratio_range is not None``: randomly sample a ratio from the ratio range + and multiply it with the image scale. + - ``ratio_range is None and multiscale_mode == "range"``: randomly sample a + scale from the a range. + - ``ratio_range is None and multiscale_mode == "value"``: randomly sample a + scale from multiple scales. + + Args: + img_scale (tuple or list[tuple]): Images scales for resizing. + multiscale_mode (str): Either "range" or "value". + ratio_range (tuple[float]): (min_ratio, max_ratio) + keep_ratio (bool): Whether to keep the aspect ratio when resizing the + image. + """ + + def __init__(self, + img_scale=None, + multiscale_mode='range', + ratio_range=None, + keep_ratio=True): + if img_scale is None: + self.img_scale = None + else: + if isinstance(img_scale, list): + self.img_scale = img_scale + else: + self.img_scale = [img_scale] + assert mmcv.is_list_of(self.img_scale, tuple) + + if ratio_range is not None: + # mode 1: given a scale and a range of image ratio + assert len(self.img_scale) == 1 + else: + # mode 2: given multiple scales or a range of scales + assert multiscale_mode in ['value', 'range'] + + self.multiscale_mode = multiscale_mode + self.ratio_range = ratio_range + self.keep_ratio = keep_ratio + + @staticmethod + def random_select(img_scales): + """Randomly select an img_scale from given candidates. + + Args: + img_scales (list[tuple]): Images scales for selection. + + Returns: + (tuple, int): Returns a tuple ``(img_scale, scale_dix)``, + where ``img_scale`` is the selected image scale and + ``scale_idx`` is the selected index in the given candidates. + """ + + assert mmcv.is_list_of(img_scales, tuple) + scale_idx = np.random.randint(len(img_scales)) + img_scale = img_scales[scale_idx] + return img_scale, scale_idx + + @staticmethod + def random_sample(img_scales): + """Randomly sample an img_scale when ``multiscale_mode=='range'``. + + Args: + img_scales (list[tuple]): Images scale range for sampling. + There must be two tuples in img_scales, which specify the lower + and uper bound of image scales. + + Returns: + (tuple, None): Returns a tuple ``(img_scale, None)``, where + ``img_scale`` is sampled scale and None is just a placeholder + to be consistent with :func:`random_select`. + """ + + assert mmcv.is_list_of(img_scales, tuple) and len(img_scales) == 2 + img_scale_long = [max(s) for s in img_scales] + img_scale_short = [min(s) for s in img_scales] + long_edge = np.random.randint( + min(img_scale_long), + max(img_scale_long) + 1) + short_edge = np.random.randint( + min(img_scale_short), + max(img_scale_short) + 1) + img_scale = (long_edge, short_edge) + return img_scale, None + + @staticmethod + def random_sample_ratio(img_scale, ratio_range): + """Randomly sample an img_scale when ``ratio_range`` is specified. + + A ratio will be randomly sampled from the range specified by + ``ratio_range``. Then it would be multiplied with ``img_scale`` to + generate sampled scale. + + Args: + img_scale (tuple): Images scale base to multiply with ratio. + ratio_range (tuple[float]): The minimum and maximum ratio to scale + the ``img_scale``. + + Returns: + (tuple, None): Returns a tuple ``(scale, None)``, where + ``scale`` is sampled ratio multiplied with ``img_scale`` and + None is just a placeholder to be consistent with + :func:`random_select`. + """ + + assert isinstance(img_scale, tuple) and len(img_scale) == 2 + min_ratio, max_ratio = ratio_range + assert min_ratio <= max_ratio + ratio = np.random.random_sample() * (max_ratio - min_ratio) + min_ratio + scale = int(img_scale[0] * ratio), int(img_scale[1] * ratio) + return scale, None + + def _random_scale(self, results): + """Randomly sample an img_scale according to ``ratio_range`` and + ``multiscale_mode``. + + If ``ratio_range`` is specified, a ratio will be sampled and be + multiplied with ``img_scale``. + If multiple scales are specified by ``img_scale``, a scale will be + sampled according to ``multiscale_mode``. + Otherwise, single scale will be used. + + Args: + results (dict): Result dict from :obj:`dataset`. + + Returns: + dict: Two new keys 'scale` and 'scale_idx` are added into + ``results``, which would be used by subsequent pipelines. + """ + + if self.ratio_range is not None: + scale, scale_idx = self.random_sample_ratio( + self.img_scale[0], self.ratio_range) + elif len(self.img_scale) == 1: + scale, scale_idx = self.img_scale[0], 0 + elif self.multiscale_mode == 'range': + scale, scale_idx = self.random_sample(self.img_scale) + elif self.multiscale_mode == 'value': + scale, scale_idx = self.random_select(self.img_scale) + else: + raise NotImplementedError + + results['scale'] = scale + results['scale_idx'] = scale_idx + + def _resize_img(self, results): + """Resize images with ``results['scale']``.""" + if self.keep_ratio: + img, scale_factor = mmcv.imrescale( + results['img'], results['scale'], return_scale=True) + # the w_scale and h_scale has minor difference + # a real fix should be done in the mmcv.imrescale in the future + new_h, new_w = img.shape[:2] + h, w = results['img'].shape[:2] + w_scale = new_w / w + h_scale = new_h / h + else: + img, w_scale, h_scale = mmcv.imresize( + results['img'], results['scale'], return_scale=True) + scale_factor = np.array([w_scale, h_scale, w_scale, h_scale], + dtype=np.float32) + results['img'] = img + results['img_shape'] = img.shape + results['pad_shape'] = img.shape # in case that there is no padding + results['scale_factor'] = scale_factor + results['keep_ratio'] = self.keep_ratio + + def _resize_seg(self, results): + """Resize semantic segmentation map with ``results['scale']``.""" + for key in results.get('seg_fields', []): + if self.keep_ratio: + gt_seg = mmcv.imrescale( + results[key], results['scale'], interpolation='nearest') + else: + gt_seg = mmcv.imresize( + results[key], results['scale'], interpolation='nearest') + results['gt_semantic_seg'] = gt_seg + + def __call__(self, results): + """Call function to resize images, bounding boxes, masks, semantic + segmentation map. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Resized results, 'img_shape', 'pad_shape', 'scale_factor', + 'keep_ratio' keys are added into result dict. + """ + + if 'scale' not in results: + self._random_scale(results) + self._resize_img(results) + self._resize_seg(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += (f'(img_scale={self.img_scale}, ' + f'multiscale_mode={self.multiscale_mode}, ' + f'ratio_range={self.ratio_range}, ' + f'keep_ratio={self.keep_ratio})') + return repr_str + + +@PIPELINES.register_module() +class RandomFlip(object): + """Flip the image & seg. + + If the input dict contains the key "flip", then the flag will be used, + otherwise it will be randomly decided by a ratio specified in the init + method. + + Args: + flip_ratio (float, optional): The flipping probability. Default: None. + direction(str, optional): The flipping direction. Options are + 'horizontal' and 'vertical'. Default: 'horizontal'. + """ + + def __init__(self, flip_ratio=None, direction='horizontal'): + self.flip_ratio = flip_ratio + self.direction = direction + if flip_ratio is not None: + assert flip_ratio >= 0 and flip_ratio <= 1 + assert direction in ['horizontal', 'vertical'] + + def __call__(self, results): + """Call function to flip bounding boxes, masks, semantic segmentation + maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Flipped results, 'flip', 'flip_direction' keys are added into + result dict. + """ + + if 'flip' not in results: + flip = True if np.random.rand() < self.flip_ratio else False + results['flip'] = flip + if 'flip_direction' not in results: + results['flip_direction'] = self.direction + if results['flip']: + # flip image + results['img'] = mmcv.imflip( + results['img'], direction=results['flip_direction']) + + # flip segs + for key in results.get('seg_fields', []): + # use copy() to make numpy stride positive + results[key] = mmcv.imflip( + results[key], direction=results['flip_direction']).copy() + return results + + def __repr__(self): + return self.__class__.__name__ + f'(flip_ratio={self.flip_ratio})' + + +@PIPELINES.register_module() +class Pad(object): + """Pad the image & mask. + + There are two padding modes: (1) pad to a fixed size and (2) pad to the + minimum size that is divisible by some number. + Added keys are "pad_shape", "pad_fixed_size", "pad_size_divisor", + + Args: + size (tuple, optional): Fixed padding size. + size_divisor (int, optional): The divisor of padded size. + pad_val (float, optional): Padding value. Default: 0. + seg_pad_val (float, optional): Padding value of segmentation map. + Default: 255. + """ + + def __init__(self, + size=None, + size_divisor=None, + pad_val=0, + seg_pad_val=255): + self.size = size + self.size_divisor = size_divisor + self.pad_val = pad_val + self.seg_pad_val = seg_pad_val + # only one of size and size_divisor should be valid + assert size is not None or size_divisor is not None + assert size is None or size_divisor is None + + def _pad_img(self, results): + """Pad images according to ``self.size``.""" + if self.size is not None: + padded_img = mmcv.impad( + results['img'], shape=self.size, pad_val=self.pad_val) + elif self.size_divisor is not None: + padded_img = mmcv.impad_to_multiple( + results['img'], self.size_divisor, pad_val=self.pad_val) + results['img'] = padded_img + results['pad_shape'] = padded_img.shape + results['pad_fixed_size'] = self.size + results['pad_size_divisor'] = self.size_divisor + + def _pad_seg(self, results): + """Pad masks according to ``results['pad_shape']``.""" + for key in results.get('seg_fields', []): + results[key] = mmcv.impad( + results[key], + shape=results['pad_shape'][:2], + pad_val=self.seg_pad_val) + + def __call__(self, results): + """Call function to pad images, masks, semantic segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Updated result dict. + """ + + self._pad_img(results) + self._pad_seg(results) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(size={self.size}, size_divisor={self.size_divisor}, ' \ + f'pad_val={self.pad_val})' + return repr_str + + +@PIPELINES.register_module() +class Normalize(object): + """Normalize the image. + + Added key is "img_norm_cfg". + + Args: + mean (sequence): Mean values of 3 channels. + std (sequence): Std values of 3 channels. + to_rgb (bool): Whether to convert the image from BGR to RGB, + default is true. + """ + + def __init__(self, mean, std, to_rgb=True): + self.mean = np.array(mean, dtype=np.float32) + self.std = np.array(std, dtype=np.float32) + self.to_rgb = to_rgb + + def __call__(self, results): + """Call function to normalize images. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Normalized results, 'img_norm_cfg' key is added into + result dict. + """ + + results['img'] = mmcv.imnormalize(results['img'], self.mean, self.std, + self.to_rgb) + results['img_norm_cfg'] = dict( + mean=self.mean, std=self.std, to_rgb=self.to_rgb) + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(mean={self.mean}, std={self.std}, to_rgb=' \ + f'{self.to_rgb})' + return repr_str + + +@PIPELINES.register_module() +class RandomCrop(object): + """Random crop the image & seg. + + Args: + crop_size (tuple): Expected size after cropping, (h, w). + cat_max_ratio (float): The maximum ratio that single category could + occupy. + """ + + def __init__(self, crop_size, cat_max_ratio=1., ignore_index=255): + assert crop_size[0] > 0 and crop_size[1] > 0 + self.crop_size = crop_size + self.cat_max_ratio = cat_max_ratio + self.ignore_index = ignore_index + + def get_crop_bbox(self, img): + """Randomly get a crop bounding box.""" + margin_h = max(img.shape[0] - self.crop_size[0], 0) + margin_w = max(img.shape[1] - self.crop_size[1], 0) + offset_h = np.random.randint(0, margin_h + 1) + offset_w = np.random.randint(0, margin_w + 1) + crop_y1, crop_y2 = offset_h, offset_h + self.crop_size[0] + crop_x1, crop_x2 = offset_w, offset_w + self.crop_size[1] + + return crop_y1, crop_y2, crop_x1, crop_x2 + + def crop(self, img, crop_bbox): + """Crop from ``img``""" + crop_y1, crop_y2, crop_x1, crop_x2 = crop_bbox + img = img[crop_y1:crop_y2, crop_x1:crop_x2, ...] + return img + + def __call__(self, results): + """Call function to randomly crop images, semantic segmentation maps. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Randomly cropped results, 'img_shape' key in result dict is + updated according to crop size. + """ + + img = results['img'] + crop_bbox = self.get_crop_bbox(img) + if self.cat_max_ratio < 1.: + # Repeat 10 times + for _ in range(10): + seg_temp = self.crop(results['gt_semantic_seg'], crop_bbox) + labels, cnt = np.unique(seg_temp, return_counts=True) + cnt = cnt[labels != self.ignore_index] + if len(cnt) > 1 and np.max(cnt) / np.sum( + cnt) < self.cat_max_ratio: + break + crop_bbox = self.get_crop_bbox(img) + + # crop the image + img = self.crop(img, crop_bbox) + img_shape = img.shape + results['img'] = img + results['img_shape'] = img_shape + + # crop semantic seg + for key in results.get('seg_fields', []): + results[key] = self.crop(results[key], crop_bbox) + + return results + + def __repr__(self): + return self.__class__.__name__ + f'(crop_size={self.crop_size})' + + +@PIPELINES.register_module() +class SegRescale(object): + """Rescale semantic segmentation maps. + + Args: + scale_factor (float): The scale factor of the final output. + """ + + def __init__(self, scale_factor=1): + self.scale_factor = scale_factor + + def __call__(self, results): + """Call function to scale the semantic segmentation map. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with semantic segmentation map scaled. + """ + for key in results.get('seg_fields', []): + if self.scale_factor != 1: + results[key] = mmcv.imrescale( + results[key], self.scale_factor, interpolation='nearest') + return results + + def __repr__(self): + return self.__class__.__name__ + f'(scale_factor={self.scale_factor})' + + +@PIPELINES.register_module() +class PhotoMetricDistortion(object): + """Apply photometric distortion to image sequentially, every transformation + is applied with a probability of 0.5. The position of random contrast is in + second or second to last. + + 1. random brightness + 2. random contrast (mode 0) + 3. convert color from BGR to HSV + 4. random saturation + 5. random hue + 6. convert color from HSV to BGR + 7. random contrast (mode 1) + 8. randomly swap channels + + Args: + brightness_delta (int): delta of brightness. + contrast_range (tuple): range of contrast. + saturation_range (tuple): range of saturation. + hue_delta (int): delta of hue. + """ + + def __init__(self, + brightness_delta=32, + contrast_range=(0.5, 1.5), + saturation_range=(0.5, 1.5), + hue_delta=18): + self.brightness_delta = brightness_delta + self.contrast_lower, self.contrast_upper = contrast_range + self.saturation_lower, self.saturation_upper = saturation_range + self.hue_delta = hue_delta + + def convert(self, img, alpha=1, beta=0): + """Multiple with alpha and add beat with clip.""" + img = img.astype(np.float32) * alpha + beta + img = np.clip(img, 0, 255) + return img.astype(np.uint8) + + def brightness(self, img): + """Brightness distortion.""" + if random.randint(2): + return self.convert( + img, + beta=random.uniform(-self.brightness_delta, + self.brightness_delta)) + return img + + def contrast(self, img): + """Contrast distortion.""" + if random.randint(2): + return self.convert( + img, + alpha=random.uniform(self.contrast_lower, self.contrast_upper)) + return img + + def saturation(self, img): + """Saturation distortion.""" + if random.randint(2): + img = mmcv.bgr2hsv(img) + img[:, :, 1] = self.convert( + img[:, :, 1], + alpha=random.uniform(self.saturation_lower, + self.saturation_upper)) + img = mmcv.hsv2bgr(img) + return img + + def hue(self, img): + """Hue distortion.""" + if random.randint(2): + img = mmcv.bgr2hsv(img) + img[:, :, + 0] = (img[:, :, 0].astype(int) + + random.randint(-self.hue_delta, self.hue_delta)) % 180 + img = mmcv.hsv2bgr(img) + return img + + def __call__(self, results): + """Call function to perform photometric distortion on images. + + Args: + results (dict): Result dict from loading pipeline. + + Returns: + dict: Result dict with images distorted. + """ + + img = results['img'] + # random brightness + img = self.brightness(img) + + # mode == 0 --> do random contrast first + # mode == 1 --> do random contrast last + mode = random.randint(2) + if mode == 1: + img = self.contrast(img) + + # random saturation + img = self.saturation(img) + + # random hue + img = self.hue(img) + + # random contrast + if mode == 0: + img = self.contrast(img) + + results['img'] = img + return results + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += (f'(brightness_delta={self.brightness_delta}, ' + f'contrast_range=({self.contrast_lower}, ' + f'{self.contrast_upper}), ' + f'saturation_range=({self.saturation_lower}, ' + f'{self.saturation_upper}), ' + f'hue_delta={self.hue_delta})') + return repr_str diff --git a/mmseg/datasets/voc.py b/mmseg/datasets/voc.py new file mode 100644 index 000000000..a8855203b --- /dev/null +++ b/mmseg/datasets/voc.py @@ -0,0 +1,29 @@ +import os.path as osp + +from .builder import DATASETS +from .custom import CustomDataset + + +@DATASETS.register_module() +class PascalVOCDataset(CustomDataset): + """Pascal VOC dataset. + + Args: + split (str): Split txt file for Pascal VOC. + """ + + CLASSES = ('background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', + 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', + 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', + 'train', 'tvmonitor') + + PALETTE = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128], + [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0], + [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128], + [192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0], + [128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128]] + + def __init__(self, split, **kwargs): + super(PascalVOCDataset, self).__init__( + img_suffix='.jpg', seg_map_suffix='.png', split=split, **kwargs) + assert osp.exists(self.img_dir) and self.split is not None diff --git a/mmseg/models/__init__.py b/mmseg/models/__init__.py new file mode 100644 index 000000000..d492a2324 --- /dev/null +++ b/mmseg/models/__init__.py @@ -0,0 +1,11 @@ +from .backbones import * # noqa: F401,F403 +from .builder import (BACKBONES, HEADS, LOSSES, SEGMENTORS, build_backbone, + build_head, build_loss, build_segmentor) +from .decode_heads import * # noqa: F401,F403 +from .losses import * # noqa: F401,F403 +from .segmentors import * # noqa: F401,F403 + +__all__ = [ + 'BACKBONES', 'HEADS', 'LOSSES', 'SEGMENTORS', 'build_backbone', + 'build_head', 'build_loss', 'build_segmentor' +] diff --git a/mmseg/models/backbones/__init__.py b/mmseg/models/backbones/__init__.py new file mode 100644 index 000000000..367b398ce --- /dev/null +++ b/mmseg/models/backbones/__init__.py @@ -0,0 +1,5 @@ +from .hrnet import HRNet +from .resnet import ResNet, ResNetV1c, ResNetV1d +from .resnext import ResNeXt + +__all__ = ['ResNet', 'ResNetV1c', 'ResNetV1d', 'ResNeXt', 'HRNet'] diff --git a/mmseg/models/backbones/hrnet.py b/mmseg/models/backbones/hrnet.py new file mode 100644 index 000000000..e4247ba67 --- /dev/null +++ b/mmseg/models/backbones/hrnet.py @@ -0,0 +1,555 @@ +import torch.nn as nn +from mmcv.cnn import (build_conv_layer, build_norm_layer, constant_init, + kaiming_init) +from mmcv.runner import load_checkpoint +from mmcv.utils.parrots_wrapper import _BatchNorm + +from mmseg.ops import resize +from mmseg.utils import get_root_logger +from ..builder import BACKBONES +from .resnet import BasicBlock, Bottleneck + + +class HRModule(nn.Module): + """High-Resolution Module for HRNet. + + In this module, every branch has 4 BasicBlocks/Bottlenecks. Fusion/Exchange + is in this module. + """ + + def __init__(self, + num_branches, + blocks, + num_blocks, + in_channels, + num_channels, + multiscale_output=True, + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True)): + super(HRModule, self).__init__() + self._check_branches(num_branches, num_blocks, in_channels, + num_channels) + + self.in_channels = in_channels + self.num_branches = num_branches + + self.multiscale_output = multiscale_output + self.norm_cfg = norm_cfg + self.conv_cfg = conv_cfg + self.with_cp = with_cp + self.branches = self._make_branches(num_branches, blocks, num_blocks, + num_channels) + self.fuse_layers = self._make_fuse_layers() + self.relu = nn.ReLU(inplace=False) + + def _check_branches(self, num_branches, num_blocks, in_channels, + num_channels): + """Check branches configuration.""" + if num_branches != len(num_blocks): + error_msg = f'NUM_BRANCHES({num_branches}) <> NUM_BLOCKS(' \ + f'{len(num_blocks)})' + raise ValueError(error_msg) + + if num_branches != len(num_channels): + error_msg = f'NUM_BRANCHES({num_branches}) <> NUM_CHANNELS(' \ + f'{len(num_channels)})' + raise ValueError(error_msg) + + if num_branches != len(in_channels): + error_msg = f'NUM_BRANCHES({num_branches}) <> NUM_INCHANNELS(' \ + f'{len(in_channels)})' + raise ValueError(error_msg) + + def _make_one_branch(self, + branch_index, + block, + num_blocks, + num_channels, + stride=1): + """Build one branch.""" + downsample = None + if stride != 1 or \ + self.in_channels[branch_index] != \ + num_channels[branch_index] * block.expansion: + downsample = nn.Sequential( + build_conv_layer( + self.conv_cfg, + self.in_channels[branch_index], + num_channels[branch_index] * block.expansion, + kernel_size=1, + stride=stride, + bias=False), + build_norm_layer(self.norm_cfg, num_channels[branch_index] * + block.expansion)[1]) + + layers = [] + layers.append( + block( + self.in_channels[branch_index], + num_channels[branch_index], + stride, + downsample=downsample, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + self.in_channels[branch_index] = \ + num_channels[branch_index] * block.expansion + for i in range(1, num_blocks[branch_index]): + layers.append( + block( + self.in_channels[branch_index], + num_channels[branch_index], + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + + return nn.Sequential(*layers) + + def _make_branches(self, num_branches, block, num_blocks, num_channels): + """Build multiple branch.""" + branches = [] + + for i in range(num_branches): + branches.append( + self._make_one_branch(i, block, num_blocks, num_channels)) + + return nn.ModuleList(branches) + + def _make_fuse_layers(self): + """Build fuse layer.""" + if self.num_branches == 1: + return None + + num_branches = self.num_branches + in_channels = self.in_channels + fuse_layers = [] + num_out_branches = num_branches if self.multiscale_output else 1 + for i in range(num_out_branches): + fuse_layer = [] + for j in range(num_branches): + if j > i: + fuse_layer.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels[j], + in_channels[i], + kernel_size=1, + stride=1, + padding=0, + bias=False), + build_norm_layer(self.norm_cfg, in_channels[i])[1], + # we set align_corners=False for HRNet + nn.Upsample( + scale_factor=2**(j - i), + mode='bilinear', + align_corners=False))) + elif j == i: + fuse_layer.append(None) + else: + conv_downsamples = [] + for k in range(i - j): + if k == i - j - 1: + conv_downsamples.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels[j], + in_channels[i], + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, + in_channels[i])[1])) + else: + conv_downsamples.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels[j], + in_channels[j], + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, + in_channels[j])[1], + nn.ReLU(inplace=False))) + fuse_layer.append(nn.Sequential(*conv_downsamples)) + fuse_layers.append(nn.ModuleList(fuse_layer)) + + return nn.ModuleList(fuse_layers) + + def forward(self, x): + """Forward function.""" + if self.num_branches == 1: + return [self.branches[0](x[0])] + + for i in range(self.num_branches): + x[i] = self.branches[i](x[i]) + + x_fuse = [] + for i in range(len(self.fuse_layers)): + y = 0 + for j in range(self.num_branches): + if i == j: + y += x[j] + elif j > i: + y = y + resize( + self.fuse_layers[i][j](x[j]), + size=x[i].shape[2:], + mode='bilinear', + align_corners=False) + else: + y += self.fuse_layers[i][j](x[j]) + x_fuse.append(self.relu(y)) + return x_fuse + + +@BACKBONES.register_module() +class HRNet(nn.Module): + """HRNet backbone. + + High-Resolution Representations for Labeling Pixels and Regions + arXiv: https://arxiv.org/abs/1904.04514 + + Args: + extra (dict): detailed configuration for each stage of HRNet. + in_channels (int): Number of input image channels. Normally 3. + conv_cfg (dict): dictionary to construct and config conv layer. + norm_cfg (dict): dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmseg.models import HRNet + >>> import torch + >>> extra = dict( + >>> stage1=dict( + >>> num_modules=1, + >>> num_branches=1, + >>> block='BOTTLENECK', + >>> num_blocks=(4, ), + >>> num_channels=(64, )), + >>> stage2=dict( + >>> num_modules=1, + >>> num_branches=2, + >>> block='BASIC', + >>> num_blocks=(4, 4), + >>> num_channels=(32, 64)), + >>> stage3=dict( + >>> num_modules=4, + >>> num_branches=3, + >>> block='BASIC', + >>> num_blocks=(4, 4, 4), + >>> num_channels=(32, 64, 128)), + >>> stage4=dict( + >>> num_modules=3, + >>> num_branches=4, + >>> block='BASIC', + >>> num_blocks=(4, 4, 4, 4), + >>> num_channels=(32, 64, 128, 256))) + >>> self = HRNet(extra, in_channels=1) + >>> self.eval() + >>> inputs = torch.rand(1, 1, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 32, 8, 8) + (1, 64, 4, 4) + (1, 128, 2, 2) + (1, 256, 1, 1) + """ + + blocks_dict = {'BASIC': BasicBlock, 'BOTTLENECK': Bottleneck} + + def __init__(self, + extra, + in_channels=3, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=False, + with_cp=False, + zero_init_residual=False): + super(HRNet, self).__init__() + self.extra = extra + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.norm_eval = norm_eval + self.with_cp = with_cp + self.zero_init_residual = zero_init_residual + + # stem net + self.norm1_name, norm1 = build_norm_layer(self.norm_cfg, 64, postfix=1) + self.norm2_name, norm2 = build_norm_layer(self.norm_cfg, 64, postfix=2) + + self.conv1 = build_conv_layer( + self.conv_cfg, + in_channels, + 64, + kernel_size=3, + stride=2, + padding=1, + bias=False) + + self.add_module(self.norm1_name, norm1) + self.conv2 = build_conv_layer( + self.conv_cfg, + 64, + 64, + kernel_size=3, + stride=2, + padding=1, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.relu = nn.ReLU(inplace=True) + + # stage 1 + self.stage1_cfg = self.extra['stage1'] + num_channels = self.stage1_cfg['num_channels'][0] + block_type = self.stage1_cfg['block'] + num_blocks = self.stage1_cfg['num_blocks'][0] + + block = self.blocks_dict[block_type] + stage1_out_channels = num_channels * block.expansion + self.layer1 = self._make_layer(block, 64, num_channels, num_blocks) + + # stage 2 + self.stage2_cfg = self.extra['stage2'] + num_channels = self.stage2_cfg['num_channels'] + block_type = self.stage2_cfg['block'] + + block = self.blocks_dict[block_type] + num_channels = [channel * block.expansion for channel in num_channels] + self.transition1 = self._make_transition_layer([stage1_out_channels], + num_channels) + self.stage2, pre_stage_channels = self._make_stage( + self.stage2_cfg, num_channels) + + # stage 3 + self.stage3_cfg = self.extra['stage3'] + num_channels = self.stage3_cfg['num_channels'] + block_type = self.stage3_cfg['block'] + + block = self.blocks_dict[block_type] + num_channels = [channel * block.expansion for channel in num_channels] + self.transition2 = self._make_transition_layer(pre_stage_channels, + num_channels) + self.stage3, pre_stage_channels = self._make_stage( + self.stage3_cfg, num_channels) + + # stage 4 + self.stage4_cfg = self.extra['stage4'] + num_channels = self.stage4_cfg['num_channels'] + block_type = self.stage4_cfg['block'] + + block = self.blocks_dict[block_type] + num_channels = [channel * block.expansion for channel in num_channels] + self.transition3 = self._make_transition_layer(pre_stage_channels, + num_channels) + self.stage4, pre_stage_channels = self._make_stage( + self.stage4_cfg, num_channels) + + @property + def norm1(self): + """nn.Module: the normalization layer named "norm1" """ + return getattr(self, self.norm1_name) + + @property + def norm2(self): + """nn.Module: the normalization layer named "norm2" """ + return getattr(self, self.norm2_name) + + def _make_transition_layer(self, num_channels_pre_layer, + num_channels_cur_layer): + """Make transition layer.""" + num_branches_cur = len(num_channels_cur_layer) + num_branches_pre = len(num_channels_pre_layer) + + transition_layers = [] + for i in range(num_branches_cur): + if i < num_branches_pre: + if num_channels_cur_layer[i] != num_channels_pre_layer[i]: + transition_layers.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + num_channels_pre_layer[i], + num_channels_cur_layer[i], + kernel_size=3, + stride=1, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, + num_channels_cur_layer[i])[1], + nn.ReLU(inplace=True))) + else: + transition_layers.append(None) + else: + conv_downsamples = [] + for j in range(i + 1 - num_branches_pre): + in_channels = num_channels_pre_layer[-1] + out_channels = num_channels_cur_layer[i] \ + if j == i - num_branches_pre else in_channels + conv_downsamples.append( + nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels, + out_channels, + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, out_channels)[1], + nn.ReLU(inplace=True))) + transition_layers.append(nn.Sequential(*conv_downsamples)) + + return nn.ModuleList(transition_layers) + + def _make_layer(self, block, inplanes, planes, blocks, stride=1): + """Make each layer.""" + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = nn.Sequential( + build_conv_layer( + self.conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=stride, + bias=False), + build_norm_layer(self.norm_cfg, planes * block.expansion)[1]) + + layers = [] + layers.append( + block( + inplanes, + planes, + stride, + downsample=downsample, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append( + block( + inplanes, + planes, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + + return nn.Sequential(*layers) + + def _make_stage(self, layer_config, in_channels, multiscale_output=True): + """Make each stage.""" + num_modules = layer_config['num_modules'] + num_branches = layer_config['num_branches'] + num_blocks = layer_config['num_blocks'] + num_channels = layer_config['num_channels'] + block = self.blocks_dict[layer_config['block']] + + hr_modules = [] + for i in range(num_modules): + # multi_scale_output is only used for the last module + if not multiscale_output and i == num_modules - 1: + reset_multiscale_output = False + else: + reset_multiscale_output = True + + hr_modules.append( + HRModule( + num_branches, + block, + num_blocks, + in_channels, + num_channels, + reset_multiscale_output, + with_cp=self.with_cp, + norm_cfg=self.norm_cfg, + conv_cfg=self.conv_cfg)) + + return nn.Sequential(*hr_modules), in_channels + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, (_BatchNorm, nn.GroupNorm)): + constant_init(m, 1) + + if self.zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + constant_init(m.norm3, 0) + elif isinstance(m, BasicBlock): + constant_init(m.norm2, 0) + else: + raise TypeError('pretrained must be a str or None') + + def forward(self, x): + """Forward function.""" + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu(x) + x = self.conv2(x) + x = self.norm2(x) + x = self.relu(x) + x = self.layer1(x) + + x_list = [] + for i in range(self.stage2_cfg['num_branches']): + if self.transition1[i] is not None: + x_list.append(self.transition1[i](x)) + else: + x_list.append(x) + y_list = self.stage2(x_list) + + x_list = [] + for i in range(self.stage3_cfg['num_branches']): + if self.transition2[i] is not None: + x_list.append(self.transition2[i](y_list[-1])) + else: + x_list.append(y_list[i]) + y_list = self.stage3(x_list) + + x_list = [] + for i in range(self.stage4_cfg['num_branches']): + if self.transition3[i] is not None: + x_list.append(self.transition3[i](y_list[-1])) + else: + x_list.append(y_list[i]) + y_list = self.stage4(x_list) + + return y_list + + def train(self, mode=True): + """Convert the model into training mode whill keeping the normalization + layer freezed.""" + super(HRNet, self).train(mode) + if mode and self.norm_eval: + for m in self.modules(): + # trick: eval have effect on BatchNorm only + if isinstance(m, _BatchNorm): + m.eval() diff --git a/mmseg/models/backbones/resnet.py b/mmseg/models/backbones/resnet.py new file mode 100644 index 000000000..4e90c6777 --- /dev/null +++ b/mmseg/models/backbones/resnet.py @@ -0,0 +1,689 @@ +import torch.nn as nn +import torch.utils.checkpoint as cp +from mmcv.cnn import (build_conv_layer, build_norm_layer, build_plugin_layer, + constant_init, kaiming_init) +from mmcv.runner import load_checkpoint +from mmcv.utils.parrots_wrapper import _BatchNorm + +from mmseg.utils import get_root_logger +from ..builder import BACKBONES +from ..utils import ResLayer + + +class BasicBlock(nn.Module): + """Basic block for ResNet.""" + + expansion = 1 + + def __init__(self, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + style='pytorch', + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + dcn=None, + plugins=None): + super(BasicBlock, self).__init__() + assert dcn is None, 'Not implemented yet.' + assert plugins is None, 'Not implemented yet.' + + self.norm1_name, norm1 = build_norm_layer(norm_cfg, planes, postfix=1) + self.norm2_name, norm2 = build_norm_layer(norm_cfg, planes, postfix=2) + + self.conv1 = build_conv_layer( + conv_cfg, + inplanes, + planes, + 3, + stride=stride, + padding=dilation, + dilation=dilation, + bias=False) + self.add_module(self.norm1_name, norm1) + self.conv2 = build_conv_layer( + conv_cfg, planes, planes, 3, padding=1, bias=False) + self.add_module(self.norm2_name, norm2) + + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + self.dilation = dilation + self.with_cp = with_cp + + @property + def norm1(self): + """nn.Module: normalization layer after the first convolution layer""" + return getattr(self, self.norm1_name) + + @property + def norm2(self): + """nn.Module: normalization layer after the second convolution layer""" + return getattr(self, self.norm2_name) + + def forward(self, x): + """Forward function.""" + + def _inner_forward(x): + identity = x + + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.norm2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + """Bottleneck block for ResNet. + + If style is "pytorch", the stride-two layer is the 3x3 conv layer, if it is + "caffe", the stride-two layer is the first 1x1 conv layer. + """ + + expansion = 4 + + def __init__(self, + inplanes, + planes, + stride=1, + dilation=1, + downsample=None, + style='pytorch', + with_cp=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + dcn=None, + plugins=None): + super(Bottleneck, self).__init__() + assert style in ['pytorch', 'caffe'] + assert dcn is None or isinstance(dcn, dict) + assert plugins is None or isinstance(plugins, list) + if plugins is not None: + allowed_position = ['after_conv1', 'after_conv2', 'after_conv3'] + assert all(p['position'] in allowed_position for p in plugins) + + self.inplanes = inplanes + self.planes = planes + self.stride = stride + self.dilation = dilation + self.style = style + self.with_cp = with_cp + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.dcn = dcn + self.with_dcn = dcn is not None + self.plugins = plugins + self.with_plugins = plugins is not None + + if self.with_plugins: + # collect plugins for conv1/conv2/conv3 + self.after_conv1_plugins = [ + plugin['cfg'] for plugin in plugins + if plugin['position'] == 'after_conv1' + ] + self.after_conv2_plugins = [ + plugin['cfg'] for plugin in plugins + if plugin['position'] == 'after_conv2' + ] + self.after_conv3_plugins = [ + plugin['cfg'] for plugin in plugins + if plugin['position'] == 'after_conv3' + ] + + if self.style == 'pytorch': + self.conv1_stride = 1 + self.conv2_stride = stride + else: + self.conv1_stride = stride + self.conv2_stride = 1 + + self.norm1_name, norm1 = build_norm_layer(norm_cfg, planes, postfix=1) + self.norm2_name, norm2 = build_norm_layer(norm_cfg, planes, postfix=2) + self.norm3_name, norm3 = build_norm_layer( + norm_cfg, planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + conv_cfg, + inplanes, + planes, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + fallback_on_stride = False + if self.with_dcn: + fallback_on_stride = dcn.pop('fallback_on_stride', False) + if not self.with_dcn or fallback_on_stride: + self.conv2 = build_conv_layer( + conv_cfg, + planes, + planes, + kernel_size=3, + stride=self.conv2_stride, + padding=dilation, + dilation=dilation, + bias=False) + else: + assert self.conv_cfg is None, 'conv_cfg must be None for DCN' + self.conv2 = build_conv_layer( + dcn, + planes, + planes, + kernel_size=3, + stride=self.conv2_stride, + padding=dilation, + dilation=dilation, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.conv3 = build_conv_layer( + conv_cfg, + planes, + planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + + if self.with_plugins: + self.after_conv1_plugin_names = self.make_block_plugins( + planes, self.after_conv1_plugins) + self.after_conv2_plugin_names = self.make_block_plugins( + planes, self.after_conv2_plugins) + self.after_conv3_plugin_names = self.make_block_plugins( + planes * self.expansion, self.after_conv3_plugins) + + def make_block_plugins(self, in_channels, plugins): + """make plugins for block. + + Args: + in_channels (int): Input channels of plugin. + plugins (list[dict]): List of plugins cfg to build. + + Returns: + list[str]: List of the names of plugin. + """ + assert isinstance(plugins, list) + plugin_names = [] + for plugin in plugins: + plugin = plugin.copy() + name, layer = build_plugin_layer( + plugin, + in_channels=in_channels, + postfix=plugin.pop('postfix', '')) + assert not hasattr(self, name), f'duplicate plugin {name}' + self.add_module(name, layer) + plugin_names.append(name) + return plugin_names + + def forward_plugin(self, x, plugin_names): + """Forward function for plugins.""" + out = x + for name in plugin_names: + out = getattr(self, name)(x) + return out + + @property + def norm1(self): + """nn.Module: normalization layer after the first convolution layer""" + return getattr(self, self.norm1_name) + + @property + def norm2(self): + """nn.Module: normalization layer after the second convolution layer""" + return getattr(self, self.norm2_name) + + @property + def norm3(self): + """nn.Module: normalization layer after the third convolution layer""" + return getattr(self, self.norm3_name) + + def forward(self, x): + """Forward function.""" + + def _inner_forward(x): + identity = x + + out = self.conv1(x) + out = self.norm1(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv1_plugin_names) + + out = self.conv2(out) + out = self.norm2(out) + out = self.relu(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv2_plugin_names) + + out = self.conv3(out) + out = self.norm3(out) + + if self.with_plugins: + out = self.forward_plugin(out, self.after_conv3_plugin_names) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + return out + + if self.with_cp and x.requires_grad: + out = cp.checkpoint(_inner_forward, x) + else: + out = _inner_forward(x) + + out = self.relu(out) + + return out + + +@BACKBONES.register_module() +class ResNet(nn.Module): + """ResNet backbone. + + Args: + depth (int): Depth of resnet, from {18, 34, 50, 101, 152}. + in_channels (int): Number of input image channels. Default" 3. + stem_channels (int): Number of stem channels. Default: 64. + base_channels (int): Number of base channels of res layer. Default: 64. + num_stages (int): Resnet stages, normally 4. + strides (Sequence[int]): Strides of the first block of each stage. + dilations (Sequence[int]): Dilation of each stage. + out_indices (Sequence[int]): Output from which stages. + style (str): `pytorch` or `caffe`. If set to "pytorch", the stride-two + layer is the 3x3 conv layer, otherwise the stride-two layer is + the first 1x1 conv layer. + deep_stem (bool): Replace 7x7 conv in input stem with 3 3x3 conv + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottleneck. + frozen_stages (int): Stages to be frozen (stop grad and set eval mode). + -1 means not freezing any parameters. + norm_cfg (dict): Dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + plugins (list[dict]): List of plugins for stages, each dict contains: + cfg (dict, required): Cfg dict to build plugin. + position (str, required): Position inside block to insert plugin, + options: 'after_conv1', 'after_conv2', 'after_conv3'. + stages (tuple[bool], optional): Stages to apply plugin, length + should be same as 'num_stages' + multi_grid (Sequence[int]|None): Multi grid dilation rates of last + stage. Default: None + contract_dilation (bool): Whether contract first dilation of each layer + Default: False + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): Whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmseg.models import ResNet + >>> import torch + >>> self = ResNet(depth=18) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 64, 8, 8) + (1, 128, 4, 4) + (1, 256, 2, 2) + (1, 512, 1, 1) + """ + + arch_settings = { + 18: (BasicBlock, (2, 2, 2, 2)), + 34: (BasicBlock, (3, 4, 6, 3)), + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)) + } + + def __init__(self, + depth, + in_channels=3, + stem_channels=64, + base_channels=64, + num_stages=4, + strides=(1, 2, 2, 2), + dilations=(1, 1, 1, 1), + out_indices=(0, 1, 2, 3), + style='pytorch', + deep_stem=False, + avg_down=False, + frozen_stages=-1, + conv_cfg=None, + norm_cfg=dict(type='BN', requires_grad=True), + norm_eval=False, + dcn=None, + stage_with_dcn=(False, False, False, False), + plugins=None, + multi_grid=None, + contract_dilation=False, + with_cp=False, + zero_init_residual=True): + super(ResNet, self).__init__() + if depth not in self.arch_settings: + raise KeyError(f'invalid depth {depth} for resnet') + self.depth = depth + self.stem_channels = stem_channels + self.base_channels = base_channels + self.num_stages = num_stages + assert num_stages >= 1 and num_stages <= 4 + self.strides = strides + self.dilations = dilations + assert len(strides) == len(dilations) == num_stages + self.out_indices = out_indices + assert max(out_indices) < num_stages + self.style = style + self.deep_stem = deep_stem + self.avg_down = avg_down + self.frozen_stages = frozen_stages + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.with_cp = with_cp + self.norm_eval = norm_eval + self.dcn = dcn + self.stage_with_dcn = stage_with_dcn + if dcn is not None: + assert len(stage_with_dcn) == num_stages + self.plugins = plugins + self.multi_grid = multi_grid + self.contract_dilation = contract_dilation + self.zero_init_residual = zero_init_residual + self.block, stage_blocks = self.arch_settings[depth] + self.stage_blocks = stage_blocks[:num_stages] + self.inplanes = stem_channels + + self._make_stem_layer(in_channels, stem_channels) + + self.res_layers = [] + for i, num_blocks in enumerate(self.stage_blocks): + stride = strides[i] + dilation = dilations[i] + dcn = self.dcn if self.stage_with_dcn[i] else None + if plugins is not None: + stage_plugins = self.make_stage_plugins(plugins, i) + else: + stage_plugins = None + # multi grid is applied to last layer only + stage_multi_grid = multi_grid if i == len( + self.stage_blocks) - 1 else None + planes = base_channels * 2**i + res_layer = self.make_res_layer( + block=self.block, + inplanes=self.inplanes, + planes=planes, + num_blocks=num_blocks, + stride=stride, + dilation=dilation, + style=self.style, + avg_down=self.avg_down, + with_cp=with_cp, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + dcn=dcn, + plugins=stage_plugins, + multi_grid=stage_multi_grid, + contract_dilation=contract_dilation) + self.inplanes = planes * self.block.expansion + layer_name = f'layer{i+1}' + self.add_module(layer_name, res_layer) + self.res_layers.append(layer_name) + + self._freeze_stages() + + self.feat_dim = self.block.expansion * base_channels * 2**( + len(self.stage_blocks) - 1) + + def make_stage_plugins(self, plugins, stage_idx): + """make plugins for ResNet 'stage_idx'th stage . + + Currently we support to insert 'context_block', + 'empirical_attention_block', 'nonlocal_block' into the backbone like + ResNet/ResNeXt. They could be inserted after conv1/conv2/conv3 of + Bottleneck. + + An example of plugins format could be : + >>> plugins=[ + ... dict(cfg=dict(type='xxx', arg1='xxx'), + ... stages=(False, True, True, True), + ... position='after_conv2'), + ... dict(cfg=dict(type='yyy'), + ... stages=(True, True, True, True), + ... position='after_conv3'), + ... dict(cfg=dict(type='zzz', postfix='1'), + ... stages=(True, True, True, True), + ... position='after_conv3'), + ... dict(cfg=dict(type='zzz', postfix='2'), + ... stages=(True, True, True, True), + ... position='after_conv3') + ... ] + >>> self = ResNet(depth=18) + >>> stage_plugins = self.make_stage_plugins(plugins, 0) + >>> assert len(stage_plugins) == 3 + + Suppose 'stage_idx=0', the structure of blocks in the stage would be: + conv1-> conv2->conv3->yyy->zzz1->zzz2 + Suppose 'stage_idx=1', the structure of blocks in the stage would be: + conv1-> conv2->xxx->conv3->yyy->zzz1->zzz2 + + If stages is missing, the plugin would be applied to all stages. + + Args: + plugins (list[dict]): List of plugins cfg to build. The postfix is + required if multiple same type plugins are inserted. + stage_idx (int): Index of stage to build + + Returns: + list[dict]: Plugins for current stage + """ + stage_plugins = [] + for plugin in plugins: + plugin = plugin.copy() + stages = plugin.pop('stages', None) + assert stages is None or len(stages) == self.num_stages + # whether to insert plugin into current stage + if stages is None or stages[stage_idx]: + stage_plugins.append(plugin) + + return stage_plugins + + def make_res_layer(self, **kwargs): + """Pack all blocks in a stage into a ``ResLayer``.""" + return ResLayer(**kwargs) + + @property + def norm1(self): + """nn.Module: the normalization layer named "norm1" """ + return getattr(self, self.norm1_name) + + def _make_stem_layer(self, in_channels, stem_channels): + """Make stem layer for ResNet.""" + if self.deep_stem: + self.stem = nn.Sequential( + build_conv_layer( + self.conv_cfg, + in_channels, + stem_channels // 2, + kernel_size=3, + stride=2, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, stem_channels // 2)[1], + nn.ReLU(inplace=True), + build_conv_layer( + self.conv_cfg, + stem_channels // 2, + stem_channels // 2, + kernel_size=3, + stride=1, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, stem_channels // 2)[1], + nn.ReLU(inplace=True), + build_conv_layer( + self.conv_cfg, + stem_channels // 2, + stem_channels, + kernel_size=3, + stride=1, + padding=1, + bias=False), + build_norm_layer(self.norm_cfg, stem_channels)[1], + nn.ReLU(inplace=True)) + else: + self.conv1 = build_conv_layer( + self.conv_cfg, + in_channels, + stem_channels, + kernel_size=7, + stride=2, + padding=3, + bias=False) + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, stem_channels, postfix=1) + self.add_module(self.norm1_name, norm1) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + + def _freeze_stages(self): + """Freeze stages param and norm stats.""" + if self.frozen_stages >= 0: + if self.deep_stem: + self.stem.eval() + for param in self.stem.parameters(): + param.requires_grad = False + else: + self.norm1.eval() + for m in [self.conv1, self.norm1]: + for param in m.parameters(): + param.requires_grad = False + + for i in range(1, self.frozen_stages + 1): + m = getattr(self, f'layer{i}') + m.eval() + for param in m.parameters(): + param.requires_grad = False + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if isinstance(pretrained, str): + logger = get_root_logger() + load_checkpoint(self, pretrained, strict=False, logger=logger) + elif pretrained is None: + for m in self.modules(): + if isinstance(m, nn.Conv2d): + kaiming_init(m) + elif isinstance(m, (_BatchNorm, nn.GroupNorm)): + constant_init(m, 1) + + if self.dcn is not None: + for m in self.modules(): + if isinstance(m, Bottleneck) and hasattr( + m, 'conv2_offset'): + constant_init(m.conv2_offset, 0) + + if self.zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + constant_init(m.norm3, 0) + elif isinstance(m, BasicBlock): + constant_init(m.norm2, 0) + else: + raise TypeError('pretrained must be a str or None') + + def forward(self, x): + """Forward function.""" + if self.deep_stem: + x = self.stem(x) + else: + x = self.conv1(x) + x = self.norm1(x) + x = self.relu(x) + x = self.maxpool(x) + outs = [] + for i, layer_name in enumerate(self.res_layers): + res_layer = getattr(self, layer_name) + x = res_layer(x) + if i in self.out_indices: + outs.append(x) + return tuple(outs) + + def train(self, mode=True): + """Convert the model into training mode while keep normalization layer + freezed.""" + super(ResNet, self).train(mode) + self._freeze_stages() + if mode and self.norm_eval: + for m in self.modules(): + # trick: eval have effect on BatchNorm only + if isinstance(m, _BatchNorm): + m.eval() + + +@BACKBONES.register_module() +class ResNetV1c(ResNet): + """ResNetV1c variant described in [1]_. + + Compared with default ResNet(ResNetV1b), ResNetV1c replaces the 7x7 conv + in the input stem with three 3x3 convs. + + References: + .. [1] https://arxiv.org/pdf/1812.01187.pdf + """ + + def __init__(self, **kwargs): + super(ResNetV1c, self).__init__( + deep_stem=True, avg_down=False, **kwargs) + + +@BACKBONES.register_module() +class ResNetV1d(ResNet): + """ResNetV1d variant described in [1]_. + + Compared with default ResNet(ResNetV1b), ResNetV1d replaces the 7x7 conv + in the input stem with three 3x3 convs. And in the downsampling block, + a 2x2 avg_pool with stride 2 is added before conv, whose stride is + changed to 1. + + References: + .. [1] https://arxiv.org/pdf/1812.01187.pdf + """ + + def __init__(self, **kwargs): + super(ResNetV1d, self).__init__( + deep_stem=True, avg_down=True, **kwargs) diff --git a/mmseg/models/backbones/resnext.py b/mmseg/models/backbones/resnext.py new file mode 100644 index 000000000..fa8149ce2 --- /dev/null +++ b/mmseg/models/backbones/resnext.py @@ -0,0 +1,145 @@ +import math + +from mmcv.cnn import build_conv_layer, build_norm_layer + +from ..builder import BACKBONES +from ..utils import ResLayer +from .resnet import Bottleneck as _Bottleneck +from .resnet import ResNet + + +class Bottleneck(_Bottleneck): + """Bottleneck block for ResNeXt. + + If style is "pytorch", the stride-two layer is the 3x3 conv layer, if it is + "caffe", the stride-two layer is the first 1x1 conv layer. + """ + + def __init__(self, + inplanes, + planes, + groups=1, + base_width=4, + base_channels=64, + **kwargs): + super(Bottleneck, self).__init__(inplanes, planes, **kwargs) + + if groups == 1: + width = self.planes + else: + width = math.floor(self.planes * + (base_width / base_channels)) * groups + + self.norm1_name, norm1 = build_norm_layer( + self.norm_cfg, width, postfix=1) + self.norm2_name, norm2 = build_norm_layer( + self.norm_cfg, width, postfix=2) + self.norm3_name, norm3 = build_norm_layer( + self.norm_cfg, self.planes * self.expansion, postfix=3) + + self.conv1 = build_conv_layer( + self.conv_cfg, + self.inplanes, + width, + kernel_size=1, + stride=self.conv1_stride, + bias=False) + self.add_module(self.norm1_name, norm1) + fallback_on_stride = False + self.with_modulated_dcn = False + if self.with_dcn: + fallback_on_stride = self.dcn.pop('fallback_on_stride', False) + if not self.with_dcn or fallback_on_stride: + self.conv2 = build_conv_layer( + self.conv_cfg, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + else: + assert self.conv_cfg is None, 'conv_cfg must be None for DCN' + self.conv2 = build_conv_layer( + self.dcn, + width, + width, + kernel_size=3, + stride=self.conv2_stride, + padding=self.dilation, + dilation=self.dilation, + groups=groups, + bias=False) + + self.add_module(self.norm2_name, norm2) + self.conv3 = build_conv_layer( + self.conv_cfg, + width, + self.planes * self.expansion, + kernel_size=1, + bias=False) + self.add_module(self.norm3_name, norm3) + + +@BACKBONES.register_module() +class ResNeXt(ResNet): + """ResNeXt backbone. + + Args: + depth (int): Depth of resnet, from {18, 34, 50, 101, 152}. + in_channels (int): Number of input image channels. Normally 3. + num_stages (int): Resnet stages, normally 4. + groups (int): Group of resnext. + base_width (int): Base width of resnext. + strides (Sequence[int]): Strides of the first block of each stage. + dilations (Sequence[int]): Dilation of each stage. + out_indices (Sequence[int]): Output from which stages. + style (str): `pytorch` or `caffe`. If set to "pytorch", the stride-two + layer is the 3x3 conv layer, otherwise the stride-two layer is + the first 1x1 conv layer. + frozen_stages (int): Stages to be frozen (all param fixed). -1 means + not freezing any parameters. + norm_cfg (dict): dictionary to construct and config norm layer. + norm_eval (bool): Whether to set norm layers to eval mode, namely, + freeze running stats (mean and var). Note: Effect on Batch Norm + and its variants only. + with_cp (bool): Use checkpoint or not. Using checkpoint will save some + memory while slowing down the training speed. + zero_init_residual (bool): whether to use zero init for last norm layer + in resblocks to let them behave as identity. + + Example: + >>> from mmseg.models import ResNeXt + >>> import torch + >>> self = ResNeXt(depth=50) + >>> self.eval() + >>> inputs = torch.rand(1, 3, 32, 32) + >>> level_outputs = self.forward(inputs) + >>> for level_out in level_outputs: + ... print(tuple(level_out.shape)) + (1, 256, 8, 8) + (1, 512, 4, 4) + (1, 1024, 2, 2) + (1, 2048, 1, 1) + """ + + arch_settings = { + 50: (Bottleneck, (3, 4, 6, 3)), + 101: (Bottleneck, (3, 4, 23, 3)), + 152: (Bottleneck, (3, 8, 36, 3)) + } + + def __init__(self, groups=1, base_width=4, **kwargs): + self.groups = groups + self.base_width = base_width + super(ResNeXt, self).__init__(**kwargs) + + def make_res_layer(self, **kwargs): + """Pack all blocks in a stage into a ``ResLayer``""" + return ResLayer( + groups=self.groups, + base_width=self.base_width, + base_channels=self.base_channels, + **kwargs) diff --git a/mmseg/models/builder.py b/mmseg/models/builder.py new file mode 100644 index 000000000..f4b84dd60 --- /dev/null +++ b/mmseg/models/builder.py @@ -0,0 +1,56 @@ +from mmcv.utils import Registry, build_from_cfg +from torch import nn + +BACKBONES = Registry('backbone') +NECKS = Registry('neck') +HEADS = Registry('head') +LOSSES = Registry('loss') +SEGMENTORS = Registry('segmentor') + + +def build(cfg, registry, default_args=None): + """Build a module. + + Args: + cfg (dict, list[dict]): The config of modules, is is either a dict + or a list of configs. + registry (:obj:`Registry`): A registry the module belongs to. + default_args (dict, optional): Default arguments to build the module. + Defaults to None. + + Returns: + nn.Module: A built nn module. + """ + + if isinstance(cfg, list): + modules = [ + build_from_cfg(cfg_, registry, default_args) for cfg_ in cfg + ] + return nn.Sequential(*modules) + else: + return build_from_cfg(cfg, registry, default_args) + + +def build_backbone(cfg): + """Build backbone.""" + return build(cfg, BACKBONES) + + +def build_neck(cfg): + """Build neck.""" + return build(cfg, NECKS) + + +def build_head(cfg): + """Build head.""" + return build(cfg, HEADS) + + +def build_loss(cfg): + """Build loss.""" + return build(cfg, LOSSES) + + +def build_segmentor(cfg, train_cfg=None, test_cfg=None): + """Build segmentor.""" + return build(cfg, SEGMENTORS, dict(train_cfg=train_cfg, test_cfg=test_cfg)) diff --git a/mmseg/models/decode_heads/__init__.py b/mmseg/models/decode_heads/__init__.py new file mode 100644 index 000000000..fda430943 --- /dev/null +++ b/mmseg/models/decode_heads/__init__.py @@ -0,0 +1,19 @@ +from .ann_head import ANNHead +from .aspp_head import ASPPHead +from .cc_head import CCHead +from .da_head import DAHead +from .enc_head import EncHead +from .fcn_head import FCNHead +from .gc_head import GCHead +from .nl_head import NLHead +from .ocr_head import OCRHead +from .psa_head import PSAHead +from .psp_head import PSPHead +from .sep_aspp_head import DepthwiseSeparableASPPHead +from .uper_head import UPerHead + +__all__ = [ + 'FCNHead', 'PSPHead', 'ASPPHead', 'PSAHead', 'NLHead', 'GCHead', 'CCHead', + 'UPerHead', 'DepthwiseSeparableASPPHead', 'ANNHead', 'DAHead', 'OCRHead', + 'EncHead' +] diff --git a/mmseg/models/decode_heads/ann_head.py b/mmseg/models/decode_heads/ann_head.py new file mode 100644 index 000000000..396c54e15 --- /dev/null +++ b/mmseg/models/decode_heads/ann_head.py @@ -0,0 +1,245 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule + +from ..builder import HEADS +from ..utils import SelfAttentionBlock as _SelfAttentionBlock +from .decode_head import BaseDecodeHead + + +class PPMConcat(nn.ModuleList): + """Pyramid Pooling Module that only concat the features of each layer. + + Args: + pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module. + """ + + def __init__(self, pool_scales=(1, 3, 6, 8)): + super(PPMConcat, self).__init__( + [nn.AdaptiveAvgPool2d(pool_scale) for pool_scale in pool_scales]) + + def forward(self, feats): + """Forward function.""" + ppm_outs = [] + for ppm in self: + ppm_out = ppm(feats) + ppm_outs.append(ppm_out.view(*feats.shape[:2], -1)) + concat_outs = torch.cat(ppm_outs, dim=2) + return concat_outs + + +class SelfAttentionBlock(_SelfAttentionBlock): + """Make a ANN used SelfAttentionBlock. + + Args: + low_in_channels (int): Input channels of lower level feature, + which is the key feature for self-attention. + high_in_channels (int): Input channels of higher level feature, + which is the query feature for self-attention. + channels (int): Output channels of key/query transform. + out_channels (int): Output channels. + share_key_query (bool): Whether share projection weight between key + and query projection. + query_scale (int): The scale of query feature map. + key_pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module of key feature. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict|None): Config of activation layers. + """ + + def __init__(self, low_in_channels, high_in_channels, channels, + out_channels, share_key_query, query_scale, key_pool_scales, + conv_cfg, norm_cfg, act_cfg): + key_psp = PPMConcat(key_pool_scales) + if query_scale > 1: + query_downsample = nn.MaxPool2d(kernel_size=query_scale) + else: + query_downsample = None + super(SelfAttentionBlock, self).__init__( + key_in_channels=low_in_channels, + query_in_channels=high_in_channels, + channels=channels, + out_channels=out_channels, + share_key_query=share_key_query, + query_downsample=query_downsample, + key_downsample=key_psp, + key_query_num_convs=1, + key_query_norm=True, + value_out_num_convs=1, + value_out_norm=False, + matmul_norm=True, + with_out=True, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + + +class AFNB(nn.Module): + """Asymmetric Fusion Non-local Block(AFNB) + + Args: + low_in_channels (int): Input channels of lower level feature, + which is the key feature for self-attention. + high_in_channels (int): Input channels of higher level feature, + which is the query feature for self-attention. + channels (int): Output channels of key/query transform. + out_channels (int): Output channels. + and query projection. + query_scales (tuple[int]): The scales of query feature map. + Default: (1,) + key_pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module of key feature. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict|None): Config of activation layers. + """ + + def __init__(self, low_in_channels, high_in_channels, channels, + out_channels, query_scales, key_pool_scales, conv_cfg, + norm_cfg, act_cfg): + super(AFNB, self).__init__() + self.stages = nn.ModuleList() + for query_scale in query_scales: + self.stages.append( + SelfAttentionBlock( + low_in_channels=low_in_channels, + high_in_channels=high_in_channels, + channels=channels, + out_channels=out_channels, + share_key_query=False, + query_scale=query_scale, + key_pool_scales=key_pool_scales, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg)) + self.bottleneck = ConvModule( + out_channels + high_in_channels, + out_channels, + 1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=None) + + def forward(self, low_feats, high_feats): + """Forward function.""" + priors = [stage(high_feats, low_feats) for stage in self.stages] + context = torch.stack(priors, dim=0).sum(dim=0) + output = self.bottleneck(torch.cat([context, high_feats], 1)) + return output + + +class APNB(nn.Module): + """Asymmetric Pyramid Non-local Block (APNB) + + Args: + in_channels (int): Input channels of key/query feature, + which is the key feature for self-attention. + channels (int): Output channels of key/query transform. + out_channels (int): Output channels. + query_scales (tuple[int]): The scales of query feature map. + Default: (1,) + key_pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module of key feature. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict|None): Config of activation layers. + """ + + def __init__(self, in_channels, channels, out_channels, query_scales, + key_pool_scales, conv_cfg, norm_cfg, act_cfg): + super(APNB, self).__init__() + self.stages = nn.ModuleList() + for query_scale in query_scales: + self.stages.append( + SelfAttentionBlock( + low_in_channels=in_channels, + high_in_channels=in_channels, + channels=channels, + out_channels=out_channels, + share_key_query=True, + query_scale=query_scale, + key_pool_scales=key_pool_scales, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg)) + self.bottleneck = ConvModule( + 2 * in_channels, + out_channels, + 1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + + def forward(self, feats): + """Forward function.""" + priors = [stage(feats, feats) for stage in self.stages] + context = torch.stack(priors, dim=0).sum(dim=0) + output = self.bottleneck(torch.cat([context, feats], 1)) + return output + + +@HEADS.register_module() +class ANNHead(BaseDecodeHead): + """Asymmetric Non-local Neural Networks for Semantic Segmentation. + + This head is the implementation of `ANNNet + `_. + + Args: + project_channels (int): Projection channels for Nonlocal. + query_scales (tuple[int]): The scales of query feature map. + Default: (1,) + key_pool_scales (tuple[int]): The pooling scales of key feature map. + Default: (1, 3, 6, 8). + """ + + def __init__(self, + project_channels, + query_scales=(1, ), + key_pool_scales=(1, 3, 6, 8), + **kwargs): + super(ANNHead, self).__init__( + input_transform='multiple_select', **kwargs) + assert len(self.in_channels) == 2 + low_in_channels, high_in_channels = self.in_channels + self.project_channels = project_channels + self.fusion = AFNB( + low_in_channels=low_in_channels, + high_in_channels=high_in_channels, + out_channels=high_in_channels, + channels=project_channels, + query_scales=query_scales, + key_pool_scales=key_pool_scales, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.bottleneck = ConvModule( + high_in_channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.context = APNB( + in_channels=self.channels, + out_channels=self.channels, + channels=project_channels, + query_scales=query_scales, + key_pool_scales=key_pool_scales, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs): + """Forward function.""" + low_feats, high_feats = self._transform_inputs(inputs) + output = self.fusion(low_feats, high_feats) + output = self.dropout(output) + output = self.bottleneck(output) + output = self.context(output) + output = self.cls_seg(output) + + return output diff --git a/mmseg/models/decode_heads/aspp_head.py b/mmseg/models/decode_heads/aspp_head.py new file mode 100644 index 000000000..6332ab120 --- /dev/null +++ b/mmseg/models/decode_heads/aspp_head.py @@ -0,0 +1,107 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule + +from mmseg.ops import resize +from ..builder import HEADS +from .decode_head import BaseDecodeHead + + +class ASPPModule(nn.ModuleList): + """Atrous Spatial Pyramid Pooling (ASPP) Module. + + Args: + dilations (tuple[int]): Dilation rate of each layer. + in_channels (int): Input channels. + channels (int): Channels after modules, before conv_seg. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict): Config of activation layers. + """ + + def __init__(self, dilations, in_channels, channels, conv_cfg, norm_cfg, + act_cfg): + super(ASPPModule, self).__init__() + self.dilations = dilations + self.in_channels = in_channels + self.channels = channels + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + for dilation in dilations: + self.append( + ConvModule( + self.in_channels, + self.channels, + 1 if dilation == 1 else 3, + dilation=dilation, + padding=0 if dilation == 1 else dilation, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg)) + + def forward(self, x): + """Forward function.""" + aspp_outs = [] + for aspp_module in self: + aspp_outs.append(aspp_module(x)) + + return aspp_outs + + +@HEADS.register_module() +class ASPPHead(BaseDecodeHead): + """Rethinking Atrous Convolution for Semantic Image Segmentation. + + This head is the implementation of `DeepLabV3 + `_. + + Args: + dilations (tuple[int]): Dilation rates for ASPP module. + Default: (1, 6, 12, 18). + """ + + def __init__(self, dilations=(1, 6, 12, 18), **kwargs): + super(ASPPHead, self).__init__(**kwargs) + assert isinstance(dilations, (list, tuple)) + self.dilations = dilations + self.image_pool = nn.Sequential( + nn.AdaptiveAvgPool2d(1), + ConvModule( + self.in_channels, + self.channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg)) + self.aspp_modules = ASPPModule( + dilations, + self.in_channels, + self.channels, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.bottleneck = ConvModule( + (len(dilations) + 1) * self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + aspp_outs = [ + resize( + self.image_pool(x), + size=x.size()[2:], + mode='bilinear', + align_corners=self.align_corners) + ] + aspp_outs.extend(self.aspp_modules(x)) + aspp_outs = torch.cat(aspp_outs, dim=1) + output = self.bottleneck(aspp_outs) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/cascade_decode_head.py b/mmseg/models/decode_heads/cascade_decode_head.py new file mode 100644 index 000000000..d02122ca0 --- /dev/null +++ b/mmseg/models/decode_heads/cascade_decode_head.py @@ -0,0 +1,57 @@ +from abc import ABCMeta, abstractmethod + +from .decode_head import BaseDecodeHead + + +class BaseCascadeDecodeHead(BaseDecodeHead, metaclass=ABCMeta): + """Base class for cascade decode head used in + :class:`CascadeEncoderDecoder.""" + + def __init__(self, *args, **kwargs): + super(BaseCascadeDecodeHead, self).__init__(*args, **kwargs) + + @abstractmethod + def forward(self, inputs, prev_output): + """Placeholder of forward function.""" + pass + + def forward_train(self, inputs, prev_output, img_metas, gt_semantic_seg, + train_cfg): + """Forward function for training. + Args: + inputs (list[Tensor]): List of multi-level img features. + prev_output (Tensor): The output of previous decode head. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmseg/datasets/pipelines/formatting.py:Collect`. + gt_semantic_seg (Tensor): Semantic segmentation masks + used if the architecture supports semantic segmentation task. + train_cfg (dict): The training config. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + seg_logits = self.forward(inputs, prev_output) + losses = self.losses(seg_logits, gt_semantic_seg) + + return losses + + def forward_test(self, inputs, prev_output, img_metas, test_cfg): + """Forward function for testing. + + Args: + inputs (list[Tensor]): List of multi-level img features. + prev_output (Tensor): The output of previous decode head. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmseg/datasets/pipelines/formatting.py:Collect`. + test_cfg (dict): The testing config. + + Returns: + Tensor: Output segmentation map. + """ + return self.forward(inputs, prev_output) diff --git a/mmseg/models/decode_heads/cc_head.py b/mmseg/models/decode_heads/cc_head.py new file mode 100644 index 000000000..95c2706a5 --- /dev/null +++ b/mmseg/models/decode_heads/cc_head.py @@ -0,0 +1,42 @@ +import torch + +from ..builder import HEADS +from .fcn_head import FCNHead + +try: + from mmcv.ops import CrissCrossAttention +except ModuleNotFoundError: + CrissCrossAttention = None + + +@HEADS.register_module() +class CCHead(FCNHead): + """CCNet: Criss-Cross Attention for Semantic Segmentation. + + This head is the implementation of `CCNet + `_. + + Args: + recurrence (int): Number of recurrence of Criss Cross Attention + module. Default: 2. + """ + + def __init__(self, recurrence=2, **kwargs): + if CrissCrossAttention is None: + raise RuntimeError('Please install mmcv-full for ' + 'CrissCrossAttention ops') + super(CCHead, self).__init__(num_convs=2, **kwargs) + self.recurrence = recurrence + self.cca = CrissCrossAttention(self.channels) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + output = self.convs[0](x) + for _ in range(self.recurrence): + output = self.cca(output) + output = self.convs[1](output) + if self.concat_input: + output = self.conv_cat(torch.cat([x, output], dim=1)) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/da_head.py b/mmseg/models/decode_heads/da_head.py new file mode 100644 index 000000000..8ee0e08c3 --- /dev/null +++ b/mmseg/models/decode_heads/da_head.py @@ -0,0 +1,178 @@ +import torch +import torch.nn.functional as F +from mmcv.cnn import ConvModule, Scale +from torch import nn + +from mmseg.core import add_prefix +from ..builder import HEADS +from ..utils import SelfAttentionBlock as _SelfAttentionBlock +from .decode_head import BaseDecodeHead + + +class PAM(_SelfAttentionBlock): + """Position Attention Module (PAM) + + Args: + in_channels (int): Input channels of key/query feature. + channels (int): Output channels of key/query transform. + """ + + def __init__(self, in_channels, channels): + super(PAM, self).__init__( + key_in_channels=in_channels, + query_in_channels=in_channels, + channels=channels, + out_channels=in_channels, + share_key_query=False, + query_downsample=None, + key_downsample=None, + key_query_num_convs=1, + key_query_norm=False, + value_out_num_convs=1, + value_out_norm=False, + matmul_norm=False, + with_out=False, + conv_cfg=None, + norm_cfg=None, + act_cfg=None) + + self.gamma = Scale(0) + + def forward(self, x): + """Forward function.""" + out = super(PAM, self).forward(x, x) + + out = self.gamma(out) + x + return out + + +class CAM(nn.Module): + """Channel Attention Module (CAM)""" + + def __init__(self): + super(CAM, self).__init__() + self.gamma = Scale(0) + + def forward(self, x): + """Forward function.""" + batch_size, channels, height, width = x.size() + proj_query = x.view(batch_size, channels, -1) + proj_key = x.view(batch_size, channels, -1).permute(0, 2, 1) + energy = torch.bmm(proj_query, proj_key) + energy_new = torch.max( + energy, -1, keepdim=True)[0].expand_as(energy) - energy + attention = F.softmax(energy_new, dim=-1) + proj_value = x.view(batch_size, channels, -1) + + out = torch.bmm(attention, proj_value) + out = out.view(batch_size, channels, height, width) + + out = self.gamma(out) + x + return out + + +@HEADS.register_module() +class DAHead(BaseDecodeHead): + """Dual Attention Network for Scene Segmentation. + + This head is the implementation of `DANet + `_. + + Args: + pam_channels (int): The channels of Position Attention Module(PAM). + """ + + def __init__(self, pam_channels, **kwargs): + super(DAHead, self).__init__(**kwargs) + self.pam_channels = pam_channels + self.pam_in_conv = ConvModule( + self.in_channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.pam = PAM(self.channels, pam_channels) + self.pam_out_conv = ConvModule( + self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.pam_conv_seg = nn.Conv2d( + self.channels, self.num_classes, kernel_size=1) + + self.cam_in_conv = ConvModule( + self.in_channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.cam = CAM() + self.cam_out_conv = ConvModule( + self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.cam_conv_seg = nn.Conv2d( + self.channels, self.num_classes, kernel_size=1) + + def pam_cls_seg(self, feat): + """PAM feature classification.""" + if self.dropout is not None: + feat = self.dropout(feat) + output = self.pam_conv_seg(feat) + return output + + def cam_cls_seg(self, feat): + """CAM feature classification.""" + if self.dropout is not None: + feat = self.dropout(feat) + output = self.cam_conv_seg(feat) + return output + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + pam_feat = self.pam_in_conv(x) + pam_feat = self.pam(pam_feat) + pam_feat = self.pam_out_conv(pam_feat) + pam_out = self.pam_cls_seg(pam_feat) + + cam_feat = self.cam_in_conv(x) + cam_feat = self.cam(cam_feat) + cam_feat = self.cam_out_conv(cam_feat) + cam_out = self.cam_cls_seg(cam_feat) + + feat_sum = pam_feat + cam_feat + pam_cam_out = self.cls_seg(feat_sum) + + return pam_cam_out, pam_out, cam_out + + def forward_test(self, inputs, img_metas, test_cfg): + """Forward function for testing, only ``pam_cam`` is used.""" + return self.forward(inputs)[0] + + def losses(self, seg_logit, seg_label): + """Compute ``pam_cam``, ``pam``, ``cam`` loss.""" + pam_cam_seg_logit, pam_seg_logit, cam_seg_logit = seg_logit + loss = dict() + loss.update( + add_prefix( + super(DAHead, self).losses(pam_cam_seg_logit, seg_label), + 'pam_cam')) + loss.update( + add_prefix( + super(DAHead, self).losses(pam_seg_logit, seg_label), 'pam')) + loss.update( + add_prefix( + super(DAHead, self).losses(cam_seg_logit, seg_label), 'cam')) + return loss diff --git a/mmseg/models/decode_heads/decode_head.py b/mmseg/models/decode_heads/decode_head.py new file mode 100644 index 000000000..d4c874872 --- /dev/null +++ b/mmseg/models/decode_heads/decode_head.py @@ -0,0 +1,229 @@ +from abc import ABCMeta, abstractmethod + +import torch +import torch.nn as nn +from mmcv.cnn import normal_init + +from mmseg.core import build_pixel_sampler +from mmseg.ops import resize +from ..builder import build_loss +from ..losses import accuracy + + +class BaseDecodeHead(nn.Module, metaclass=ABCMeta): + """Base class for BaseDecodeHead. + + Args: + in_channels (int|Sequence[int]): Input channels. + channels (int): Channels after modules, before conv_seg. + num_classes (int): Number of classes. + drop_out_ratio (float): Ratio of dropout layer. Default: 0.1. + conv_cfg (dict|None): Config of conv layers. Default: None. + norm_cfg (dict|None): Config of norm layers. Default: None. + act_cfg (dict): Config of activation layers. + Default: dict(type='ReLU') + in_index (int|Sequence[int]): Input feature index. Default: -1 + input_transform (str|None): Transformation type of input features. + Options: 'resize_concat', 'multiple_select', None. + 'resize_concat': Multiple feature maps will be resize to the + same size as first one and than concat together. + Usually used in FCN head of HRNet. + 'multiple_select': Multiple feature maps will be bundle into + a list and passed into decode head. + None: Only one select feature map is allowed. + Default: None. + loss_decode (dict): Config of decode loss. + Default: dict(type='CrossEntropyLoss'). + ignore_index (int): The label index to be ignored. Default: 255 + sampler (dict|None): The config of segmentation map sampler. + Default: None. + align_corners (bool): align_corners argument of F.interpolate. + Default: False. + """ + + def __init__(self, + in_channels, + channels, + *, + num_classes, + drop_out_ratio=0.1, + conv_cfg=None, + norm_cfg=None, + act_cfg=dict(type='ReLU'), + in_index=-1, + input_transform=None, + loss_decode=dict( + type='CrossEntropyLoss', + use_sigmoid=False, + loss_weight=1.0), + ignore_index=255, + sampler=None, + align_corners=False): + super(BaseDecodeHead, self).__init__() + self._init_inputs(in_channels, in_index, input_transform) + self.channels = channels + self.num_classes = num_classes + self.drop_out_ratio = drop_out_ratio + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + self.in_index = in_index + self.loss_decode = build_loss(loss_decode) + self.ignore_index = ignore_index + self.align_corners = align_corners + if sampler is not None: + self.sampler = build_pixel_sampler(sampler) + else: + self.sampler = None + + self.conv_seg = nn.Conv2d(channels, num_classes, kernel_size=1) + if drop_out_ratio > 0: + self.dropout = nn.Dropout2d(drop_out_ratio) + else: + self.dropout = None + + def extra_repr(self): + """Extra repr.""" + s = f'input_transform={self.input_transform}, ' \ + f'ignore_index={self.ignore_index}, ' \ + f'align_corners={self.align_corners}' + return s + + def _init_inputs(self, in_channels, in_index, input_transform): + """Check and initialize input transforms. + + The in_channels, in_index and input_transform must match. + Specifically, when input_transform is None, only single feature map + will be selected. So in_channels and in_index must be of type int. + When input_transform + + Args: + in_channels (int|Sequence[int]): Input channels. + in_index (int|Sequence[int]): Input feature index. + input_transform (str|None): Transformation type of input features. + Options: 'resize_concat', 'multiple_select', None. + 'resize_concat': Multiple feature maps will be resize to the + same size as first one and than concat together. + Usually used in FCN head of HRNet. + 'multiple_select': Multiple feature maps will be bundle into + a list and passed into decode head. + None: Only one select feature map is allowed. + """ + + if input_transform is not None: + assert input_transform in ['resize_concat', 'multiple_select'] + self.input_transform = input_transform + self.in_index = in_index + if input_transform is not None: + assert isinstance(in_channels, (list, tuple)) + assert isinstance(in_index, (list, tuple)) + assert len(in_channels) == len(in_index) + if input_transform == 'resize_concat': + self.in_channels = sum(in_channels) + else: + self.in_channels = in_channels + else: + assert isinstance(in_channels, int) + assert isinstance(in_index, int) + self.in_channels = in_channels + + def init_weights(self): + """Initialize weights of classification layer.""" + normal_init(self.conv_seg, mean=0, std=0.01) + + def _transform_inputs(self, inputs): + """Transform inputs for decoder. + + Args: + inputs (list[Tensor]): List of multi-level img features. + + Returns: + Tensor: The transformed inputs + """ + + if self.input_transform == 'resize_concat': + inputs = [inputs[i] for i in self.in_index] + upsampled_inputs = [ + resize( + input=x, + size=inputs[0].shape[2:], + mode='bilinear', + align_corners=self.align_corners) for x in inputs + ] + inputs = torch.cat(upsampled_inputs, dim=1) + elif self.input_transform == 'multiple_select': + inputs = [inputs[i] for i in self.in_index] + else: + inputs = inputs[self.in_index] + + return inputs + + @abstractmethod + def forward(self, inputs): + """Placeholder of forward function.""" + pass + + def forward_train(self, inputs, img_metas, gt_semantic_seg, train_cfg): + """Forward function for training. + Args: + inputs (list[Tensor]): List of multi-level img features. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmseg/datasets/pipelines/formatting.py:Collect`. + gt_semantic_seg (Tensor): Semantic segmentation masks + used if the architecture supports semantic segmentation task. + train_cfg (dict): The training config. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + seg_logits = self.forward(inputs) + losses = self.losses(seg_logits, gt_semantic_seg) + return losses + + def forward_test(self, inputs, img_metas, test_cfg): + """Forward function for testing. + + Args: + inputs (list[Tensor]): List of multi-level img features. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmseg/datasets/pipelines/formatting.py:Collect`. + test_cfg (dict): The testing config. + + Returns: + Tensor: Output segmentation map. + """ + return self.forward(inputs) + + def cls_seg(self, feat): + """Classify each pixel.""" + if self.dropout is not None: + feat = self.dropout(feat) + output = self.conv_seg(feat) + return output + + def losses(self, seg_logit, seg_label): + """Compute segmentation loss.""" + loss = dict() + seg_logit = resize( + input=seg_logit, + size=seg_label.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + if self.sampler is not None: + seg_weight = self.sampler.sample(seg_logit, seg_label) + else: + seg_weight = None + seg_label = seg_label.squeeze(1) + loss['loss_seg'] = self.loss_decode( + seg_logit, + seg_label, + weight=seg_weight, + ignore_index=self.ignore_index) + loss['acc_seg'] = accuracy(seg_logit, seg_label) + return loss diff --git a/mmseg/models/decode_heads/enc_head.py b/mmseg/models/decode_heads/enc_head.py new file mode 100644 index 000000000..0c11994cf --- /dev/null +++ b/mmseg/models/decode_heads/enc_head.py @@ -0,0 +1,187 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule, build_norm_layer + +from mmseg.ops import Encoding, resize +from ..builder import HEADS, build_loss +from .decode_head import BaseDecodeHead + + +class EncModule(nn.Module): + """Encoding Module used in EncNet. + + Args: + in_channels (int): Input channels. + num_codes (int): Number of code words. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict): Config of activation layers. + """ + + def __init__(self, in_channels, num_codes, conv_cfg, norm_cfg, act_cfg): + super(EncModule, self).__init__() + self.encoding_project = ConvModule( + in_channels, + in_channels, + 1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + # TODO: resolve this hack + # change to 1d + if norm_cfg is not None: + encoding_norm_cfg = norm_cfg.copy() + if encoding_norm_cfg['type'] in ['BN', 'IN']: + encoding_norm_cfg['type'] += '1d' + else: + encoding_norm_cfg['type'] = encoding_norm_cfg['type'].replace( + '2d', '1d') + else: + # fallback to BN1d + encoding_norm_cfg = dict(type='BN1d') + self.encoding = nn.Sequential( + Encoding(channels=in_channels, num_codes=num_codes), + build_norm_layer(encoding_norm_cfg, num_codes)[1], + nn.ReLU(inplace=True)) + self.fc = nn.Sequential( + nn.Linear(in_channels, in_channels), nn.Sigmoid()) + + def forward(self, x): + """Forward function.""" + encoding_projection = self.encoding_project(x) + encoding_feat = self.encoding(encoding_projection).mean(dim=1) + batch_size, channels, _, _ = x.size() + gamma = self.fc(encoding_feat) + y = gamma.view(batch_size, channels, 1, 1) + output = F.relu_(x + x * y) + return encoding_feat, output + + +@HEADS.register_module() +class EncHead(BaseDecodeHead): + """Context Encoding for Semantic Segmentation. + + This head is the implementation of `EncNet + `_. + + Args: + num_codes (int): Number of code words. Default: 32. + use_se_loss (bool): Whether use Semantic Encoding Loss (SE-loss) to + regularize the training. Default: True. + add_lateral (bool): Whether use lateral connection to fuse features. + Default: False. + loss_se_decode (dict): Config of decode loss. + Default: dict(type='CrossEntropyLoss', use_sigmoid=True). + """ + + def __init__(self, + num_codes=32, + use_se_loss=True, + add_lateral=False, + loss_se_decode=dict( + type='CrossEntropyLoss', + use_sigmoid=True, + loss_weight=0.2), + **kwargs): + super(EncHead, self).__init__( + input_transform='multiple_select', **kwargs) + self.use_se_loss = use_se_loss + self.add_lateral = add_lateral + self.num_codes = num_codes + self.bottleneck = ConvModule( + self.in_channels[-1], + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + if add_lateral: + self.lateral_convs = nn.ModuleList() + for in_channels in self.in_channels[:-1]: # skip the last one + self.lateral_convs.append( + ConvModule( + in_channels, + self.channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg)) + self.fusion = ConvModule( + len(self.in_channels) * self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.enc_module = EncModule( + self.channels, + num_codes=num_codes, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + if self.use_se_loss: + self.loss_se_decode = build_loss(loss_se_decode) + self.se_layer = nn.Linear(self.channels, self.num_classes) + + def forward(self, inputs): + """Forward function.""" + inputs = self._transform_inputs(inputs) + feat = self.bottleneck(inputs[-1]) + if self.add_lateral: + laterals = [ + resize( + lateral_conv(inputs[i]), + size=feat.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + for i, lateral_conv in enumerate(self.lateral_convs) + ] + feat = self.fusion(torch.cat([feat, *laterals], 1)) + encode_feat, output = self.enc_module(feat) + output = self.cls_seg(output) + if self.use_se_loss: + se_output = self.se_layer(encode_feat) + return output, se_output + else: + return output + + def forward_test(self, inputs, img_metas, test_cfg): + """Forward function for testing, ignore se_loss.""" + if self.use_se_loss: + return self.forward(inputs)[0] + else: + return self.forward(inputs) + + @staticmethod + def _convert_to_onehot_labels(seg_label, num_classes): + """Convert segmentation label to onehot. + + Args: + seg_label (Tensor): Segmentation label of shape (N, H, W). + num_classes (int): Number of classes. + + Returns: + Tensor: Onehot labels of shape (N, num_classes). + """ + + batch_size = seg_label.size(0) + onehot_labels = seg_label.new_zeros((batch_size, num_classes)) + for i in range(batch_size): + hist = seg_label[i].float().histc( + bins=num_classes, min=0, max=num_classes - 1) + onehot_labels[i] = hist > 0 + return onehot_labels + + def losses(self, seg_logit, seg_label): + """Compute segmentation and semantic encoding loss.""" + seg_logit, se_seg_logit = seg_logit + loss = dict() + loss.update(super(EncHead, self).losses(seg_logit, seg_label)) + se_loss = self.loss_se_decode( + se_seg_logit, + self._convert_to_onehot_labels(seg_label, self.num_classes)) + loss['loss_se'] = se_loss + return loss diff --git a/mmseg/models/decode_heads/fcn_head.py b/mmseg/models/decode_heads/fcn_head.py new file mode 100644 index 000000000..e586a2e0d --- /dev/null +++ b/mmseg/models/decode_heads/fcn_head.py @@ -0,0 +1,69 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule + +from ..builder import HEADS +from .decode_head import BaseDecodeHead + + +@HEADS.register_module() +class FCNHead(BaseDecodeHead): + """Fully Convolution Networks for Semantic Segmentation. + + This head is implemented of `FCNNet `_. + + Args: + num_convs (int): Number of convs in the head. Default: 2. + kernel_size (int): The kernel size for convs in the head. Default: 3. + concat_input (bool): Whether concat the input and output of convs + before classification layer. + """ + + def __init__(self, + num_convs=2, + kernel_size=3, + concat_input=True, + **kwargs): + assert num_convs > 0 + self.num_convs = num_convs + self.concat_input = concat_input + super(FCNHead, self).__init__(**kwargs) + convs = [] + convs.append( + ConvModule( + self.in_channels, + self.channels, + kernel_size=kernel_size, + padding=kernel_size // 2, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg)) + for i in range(num_convs - 1): + convs.append( + ConvModule( + self.channels, + self.channels, + kernel_size=kernel_size, + padding=kernel_size // 2, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg)) + self.convs = nn.Sequential(*convs) + if self.concat_input: + self.conv_cat = ConvModule( + self.in_channels + self.channels, + self.channels, + kernel_size=kernel_size, + padding=kernel_size // 2, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + output = self.convs(x) + if self.concat_input: + output = self.conv_cat(torch.cat([x, output], dim=1)) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/gc_head.py b/mmseg/models/decode_heads/gc_head.py new file mode 100644 index 000000000..336866375 --- /dev/null +++ b/mmseg/models/decode_heads/gc_head.py @@ -0,0 +1,47 @@ +import torch +from mmcv.cnn import ContextBlock + +from ..builder import HEADS +from .fcn_head import FCNHead + + +@HEADS.register_module() +class GCHead(FCNHead): + """GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond. + + This head is the implementation of `GCNet + `_. + + Args: + ratio (float): Multiplier of channels ratio. Default: 1/4. + pooling_type (str): The pooling type of context aggregation. + Options are 'att', 'avg'. Default: 'avg'. + fusion_types (tuple[str]): The fusion type for feature fusion. + Options are 'channel_add', 'channel_mul'. Defautl: ('channel_add',) + """ + + def __init__(self, + ratio=1 / 4., + pooling_type='att', + fusion_types=('channel_add', ), + **kwargs): + super(GCHead, self).__init__(num_convs=2, **kwargs) + self.ratio = ratio + self.pooling_type = pooling_type + self.fusion_types = fusion_types + self.gc_block = ContextBlock( + in_channels=self.channels, + ratio=self.ratio, + pooling_type=self.pooling_type, + fusion_types=self.fusion_types) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + output = self.convs[0](x) + output = self.gc_block(output) + output = self.convs[1](output) + if self.concat_input: + output = self.conv_cat(torch.cat([x, output], dim=1)) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/nl_head.py b/mmseg/models/decode_heads/nl_head.py new file mode 100644 index 000000000..31658755a --- /dev/null +++ b/mmseg/models/decode_heads/nl_head.py @@ -0,0 +1,49 @@ +import torch +from mmcv.cnn import NonLocal2d + +from ..builder import HEADS +from .fcn_head import FCNHead + + +@HEADS.register_module() +class NLHead(FCNHead): + """Non-local Neural Networks. + + This head is the implementation of `NLNet + `_. + + Args: + reduction (int): Reduction factor of projection transform. Default: 2. + use_scale (bool): Whether to scale pairwise_weight by + sqrt(1/inter_channels). Default: True. + mode (str): The nonlocal mode. Options are 'embedded_gaussian', + 'dot_product'. Default: 'embedded_gaussian.'. + """ + + def __init__(self, + reduction=2, + use_scale=True, + mode='embedded_gaussian', + **kwargs): + super(NLHead, self).__init__(num_convs=2, **kwargs) + self.reduction = reduction + self.use_scale = use_scale + self.mode = mode + self.nl_block = NonLocal2d( + in_channels=self.channels, + reduction=self.reduction, + use_scale=self.use_scale, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + mode=self.mode) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + output = self.convs[0](x) + output = self.nl_block(output) + output = self.convs[1](output) + if self.concat_input: + output = self.conv_cat(torch.cat([x, output], dim=1)) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/ocr_head.py b/mmseg/models/decode_heads/ocr_head.py new file mode 100644 index 000000000..e180e1027 --- /dev/null +++ b/mmseg/models/decode_heads/ocr_head.py @@ -0,0 +1,127 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule + +from mmseg.ops import resize +from ..builder import HEADS +from ..utils import SelfAttentionBlock as _SelfAttentionBlock +from .cascade_decode_head import BaseCascadeDecodeHead + + +class SpatialGatherModule(nn.Module): + """Aggregate the context features according to the initial predicted + probability distribution. + + Employ the soft-weighted method to aggregate the context. + """ + + def __init__(self, scale): + super(SpatialGatherModule, self).__init__() + self.scale = scale + + def forward(self, feats, probs): + """Forward function.""" + batch_size, num_classes, height, width = probs.size() + channels = feats.size(1) + probs = probs.view(batch_size, num_classes, -1) + feats = feats.view(batch_size, channels, -1) + # [batch_size, height*width, num_classes] + feats = feats.permute(0, 2, 1) + # [batch_size, channels, height*width] + probs = F.softmax(self.scale * probs, dim=2) + # [batch_size, channels, num_classes] + ocr_context = torch.matmul(probs, feats) + ocr_context = ocr_context.permute(0, 2, 1).contiguous().unsqueeze(3) + return ocr_context + + +class ObjectAttentionBlock(_SelfAttentionBlock): + """Make a OCR used SelfAttentionBlock.""" + + def __init__(self, in_channels, channels, scale, conv_cfg, norm_cfg, + act_cfg): + if scale > 1: + query_downsample = nn.MaxPool2d(kernel_size=scale) + else: + query_downsample = None + super(ObjectAttentionBlock, self).__init__( + key_in_channels=in_channels, + query_in_channels=in_channels, + channels=channels, + out_channels=in_channels, + share_key_query=False, + query_downsample=query_downsample, + key_downsample=None, + key_query_num_convs=2, + key_query_norm=True, + value_out_num_convs=1, + value_out_norm=True, + matmul_norm=True, + with_out=True, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + self.bottleneck = ConvModule( + in_channels * 2, + in_channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, query_feats, key_feats): + """Forward function.""" + context = super(ObjectAttentionBlock, + self).forward(query_feats, key_feats) + output = self.bottleneck(torch.cat([context, query_feats], dim=1)) + if self.query_downsample is not None: + output = resize(query_feats) + + return output + + +@HEADS.register_module() +class OCRHead(BaseCascadeDecodeHead): + """Object-Contextual Representations for Semantic Segmentation. + + This head is the implementation of `OCRNet + `_. + + Args: + ocr_channels (int): The intermediate channels of OCR block. + scale (int): The scale of probability map in SpatialGatherModule in + Default: 1. + """ + + def __init__(self, ocr_channels, scale=1, **kwargs): + super(OCRHead, self).__init__(**kwargs) + self.ocr_channels = ocr_channels + self.scale = scale + self.object_context_block = ObjectAttentionBlock( + self.channels, + self.ocr_channels, + self.scale, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.spatial_gather_module = SpatialGatherModule(self.scale) + + self.bottleneck = ConvModule( + self.in_channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs, prev_output): + """Forward function.""" + x = self._transform_inputs(inputs) + feats = self.bottleneck(x) + context = self.spatial_gather_module(feats, prev_output) + object_context = self.object_context_block(feats, context) + output = self.cls_seg(object_context) + + return output diff --git a/mmseg/models/decode_heads/psa_head.py b/mmseg/models/decode_heads/psa_head.py new file mode 100644 index 000000000..8d915e57f --- /dev/null +++ b/mmseg/models/decode_heads/psa_head.py @@ -0,0 +1,196 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from mmcv.cnn import ConvModule + +from mmseg.ops import resize +from ..builder import HEADS +from .decode_head import BaseDecodeHead + +try: + from mmcv.ops import PSAMask +except ModuleNotFoundError: + PSAMask = None + + +@HEADS.register_module() +class PSAHead(BaseDecodeHead): + """Point-wise Spatial Attention Network for Scene Parsing. + + This head is the implementation of `PSANet + `_. + + Args: + mask_size (tuple[int]): The PSA mask size. It usually equals input + size. + psa_type (str): The type of psa module. Options are 'collect', + 'distribute', 'bi-direction'. Default: 'bi-direction' + compact (bool): Whether use compact map for 'collect' mode. + Default: True. + shrink_factor (int): The downsample factors of psa mask. Default: 2. + normalization_factor (float): The normalize factor of attention. + psa_softmax (bool): Whether use softmax for attention. + """ + + def __init__(self, + mask_size, + psa_type='bi-direction', + compact=False, + shrink_factor=2, + normalization_factor=1.0, + psa_softmax=True, + **kwargs): + if PSAMask is None: + raise RuntimeError('Please install mmcv-full for PSAMask ops') + super(PSAHead, self).__init__(**kwargs) + assert psa_type in ['collect', 'distribute', 'bi-direction'] + self.psa_type = psa_type + self.compact = compact + self.shrink_factor = shrink_factor + self.mask_size = mask_size + mask_h, mask_w = mask_size + self.psa_softmax = psa_softmax + if normalization_factor is None: + normalization_factor = mask_h * mask_w + self.normalization_factor = normalization_factor + + self.reduce = ConvModule( + self.in_channels, + self.channels, + kernel_size=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.attention = nn.Sequential( + ConvModule( + self.channels, + self.channels, + kernel_size=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg), + nn.Conv2d( + self.channels, mask_h * mask_w, kernel_size=1, bias=False)) + if psa_type == 'bi-direction': + self.reduce_p = ConvModule( + self.in_channels, + self.channels, + kernel_size=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.attention_p = nn.Sequential( + ConvModule( + self.channels, + self.channels, + kernel_size=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg), + nn.Conv2d( + self.channels, mask_h * mask_w, kernel_size=1, bias=False)) + self.psamask_collect = PSAMask('collect', mask_size) + self.psamask_distribute = PSAMask('distribute', mask_size) + else: + self.psamask = PSAMask(psa_type, mask_size) + self.proj = ConvModule( + self.channels * (2 if psa_type == 'bi-direction' else 1), + self.in_channels, + kernel_size=1, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + self.bottleneck = ConvModule( + self.in_channels * 2, + self.channels, + kernel_size=3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + identity = x + align_corners = self.align_corners + if self.psa_type in ['collect', 'distribute']: + out = self.reduce(x) + n, c, h, w = out.size() + if self.shrink_factor != 1: + if h % self.shrink_factor and w % self.shrink_factor: + h = (h - 1) // self.shrink_factor + 1 + w = (w - 1) // self.shrink_factor + 1 + align_corners = True + else: + h = h // self.shrink_factor + w = w // self.shrink_factor + align_corners = False + out = resize( + out, + size=(h, w), + mode='bilinear', + align_corners=align_corners) + y = self.attention(out) + if self.compact: + if self.psa_type == 'collect': + y = y.view(n, h * w, + h * w).transpose(1, 2).view(n, h * w, h, w) + else: + y = self.psamask(y) + if self.psa_softmax: + y = F.softmax(y, dim=1) + out = torch.bmm( + out.view(n, c, h * w), y.view(n, h * w, h * w)).view( + n, c, h, w) * (1.0 / self.normalization_factor) + else: + x_col = self.reduce(x) + x_dis = self.reduce_p(x) + n, c, h, w = x_col.size() + if self.shrink_factor != 1: + if h % self.shrink_factor and w % self.shrink_factor: + h = (h - 1) // self.shrink_factor + 1 + w = (w - 1) // self.shrink_factor + 1 + align_corners = True + else: + h = h // self.shrink_factor + w = w // self.shrink_factor + align_corners = False + x_col = resize( + x_col, + size=(h, w), + mode='bilinear', + align_corners=align_corners) + x_dis = resize( + x_dis, + size=(h, w), + mode='bilinear', + align_corners=align_corners) + y_col = self.attention(x_col) + y_dis = self.attention_p(x_dis) + if self.compact: + y_dis = y_dis.view(n, h * w, + h * w).transpose(1, 2).view(n, h * w, h, w) + else: + y_col = self.psamask_collect(y_col) + y_dis = self.psamask_distribute(y_dis) + if self.psa_softmax: + y_col = F.softmax(y_col, dim=1) + y_dis = F.softmax(y_dis, dim=1) + x_col = torch.bmm( + x_col.view(n, c, h * w), y_col.view(n, h * w, h * w)).view( + n, c, h, w) * (1.0 / self.normalization_factor) + x_dis = torch.bmm( + x_dis.view(n, c, h * w), y_dis.view(n, h * w, h * w)).view( + n, c, h, w) * (1.0 / self.normalization_factor) + out = torch.cat([x_col, x_dis], 1) + out = self.proj(out) + out = resize( + out, + size=identity.shape[2:], + mode='bilinear', + align_corners=align_corners) + out = self.bottleneck(torch.cat((identity, out), dim=1)) + out = self.cls_seg(out) + return out diff --git a/mmseg/models/decode_heads/psp_head.py b/mmseg/models/decode_heads/psp_head.py new file mode 100644 index 000000000..bdbe2c8ac --- /dev/null +++ b/mmseg/models/decode_heads/psp_head.py @@ -0,0 +1,101 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule + +from mmseg.ops import resize +from ..builder import HEADS +from .decode_head import BaseDecodeHead + + +class PPM(nn.ModuleList): + """Pooling Pyramid Module used in PSPNet. + + Args: + pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module. + in_channels (int): Input channels. + channels (int): Channels after modules, before conv_seg. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict): Config of activation layers. + align_corners (bool): align_corners argument of F.interpolate. + """ + + def __init__(self, pool_scales, in_channels, channels, conv_cfg, norm_cfg, + act_cfg, align_corners): + super(PPM, self).__init__() + self.pool_scales = pool_scales + self.align_corners = align_corners + self.in_channels = in_channels + self.channels = channels + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + for pool_scale in pool_scales: + self.append( + nn.Sequential( + nn.AdaptiveAvgPool2d(pool_scale), + ConvModule( + self.in_channels, + self.channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg))) + + def forward(self, x): + """Forward function.""" + ppm_outs = [] + for ppm in self: + ppm_out = ppm(x) + upsampled_ppm_out = resize( + ppm_out, + size=x.size()[2:], + mode='bilinear', + align_corners=self.align_corners) + ppm_outs.append(upsampled_ppm_out) + return ppm_outs + + +@HEADS.register_module() +class PSPHead(BaseDecodeHead): + """Pyramid Scene Parsing Network. + + This head is the implementation of + `PSPNet `_. + + Args: + pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module. Default: (1, 2, 3, 6). + """ + + def __init__(self, pool_scales=(1, 2, 3, 6), **kwargs): + super(PSPHead, self).__init__(**kwargs) + assert isinstance(pool_scales, (list, tuple)) + self.pool_scales = pool_scales + self.psp_modules = PPM( + self.pool_scales, + self.in_channels, + self.channels, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg, + align_corners=self.align_corners) + self.bottleneck = ConvModule( + self.in_channels + len(pool_scales) * self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + psp_outs = [x] + psp_outs.extend(self.psp_modules(x)) + psp_outs = torch.cat(psp_outs, dim=1) + output = self.bottleneck(psp_outs) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/sep_aspp_head.py b/mmseg/models/decode_heads/sep_aspp_head.py new file mode 100644 index 000000000..71881890b --- /dev/null +++ b/mmseg/models/decode_heads/sep_aspp_head.py @@ -0,0 +1,101 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule + +from mmseg.ops import DepthwiseSeparableConvModule, resize +from ..builder import HEADS +from .aspp_head import ASPPHead, ASPPModule + + +class DepthwiseSeparableASPPModule(ASPPModule): + """Atrous Spatial Pyramid Pooling (ASPP) Module with depthwise separable + conv.""" + + def __init__(self, **kwargs): + super(DepthwiseSeparableASPPModule, self).__init__(**kwargs) + for i, dilation in enumerate(self.dilations): + if dilation > 1: + self[i] = DepthwiseSeparableConvModule( + self.in_channels, + self.channels, + 3, + dilation=dilation, + padding=dilation, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + +@HEADS.register_module() +class DepthwiseSeparableASPPHead(ASPPHead): + """Encoder-Decoder with Atrous Separable Convolution for Semantic Image + Segmentation. + + This head is the implementation of `DeepLabV3+ + `_. + + Args: + c1_in_channels (int): The input channels of c1 decoder. If is 0, + the no decoder will be used. + c1_channels (int): The intermediate channels of c1 decoder. + """ + + def __init__(self, c1_in_channels, c1_channels, **kwargs): + super(DepthwiseSeparableASPPHead, self).__init__(**kwargs) + assert c1_in_channels >= 0 + self.aspp_modules = DepthwiseSeparableASPPModule( + dilations=self.dilations, + in_channels=self.in_channels, + channels=self.channels, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + if c1_in_channels > 0: + self.c1_bottleneck = ConvModule( + c1_in_channels, + c1_channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + else: + self.c1_bottleneck = None + self.sep_bottleneck = nn.Sequential( + DepthwiseSeparableConvModule( + self.channels + c1_channels, + self.channels, + 3, + padding=1, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg), + DepthwiseSeparableConvModule( + self.channels, + self.channels, + 3, + padding=1, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg)) + + def forward(self, inputs): + """Forward function.""" + x = self._transform_inputs(inputs) + aspp_outs = [ + resize( + self.image_pool(x), + size=x.size()[2:], + mode='bilinear', + align_corners=self.align_corners) + ] + aspp_outs.extend(self.aspp_modules(x)) + aspp_outs = torch.cat(aspp_outs, dim=1) + output = self.bottleneck(aspp_outs) + if self.c1_bottleneck is not None: + c1_output = self.c1_bottleneck(inputs[0]) + output = resize( + input=output, + size=c1_output.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + output = torch.cat([output, c1_output], dim=1) + output = self.sep_bottleneck(output) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/decode_heads/uper_head.py b/mmseg/models/decode_heads/uper_head.py new file mode 100644 index 000000000..bb617f6b1 --- /dev/null +++ b/mmseg/models/decode_heads/uper_head.py @@ -0,0 +1,126 @@ +import torch +import torch.nn as nn +from mmcv.cnn import ConvModule + +from mmseg.ops import resize +from ..builder import HEADS +from .decode_head import BaseDecodeHead +from .psp_head import PPM + + +@HEADS.register_module() +class UPerHead(BaseDecodeHead): + """Unified Perceptual Parsing for Scene Understanding. + + This head is the implementation of `UPerNet + `_. + + Args: + pool_scales (tuple[int]): Pooling scales used in Pooling Pyramid + Module applied on the last feature. Default: (1, 2, 3, 6). + """ + + def __init__(self, pool_scales=(1, 2, 3, 6), **kwargs): + super(UPerHead, self).__init__( + input_transform='multiple_select', **kwargs) + # PSP Module + self.psp_modules = PPM( + pool_scales, + self.in_channels[-1], + self.channels, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg, + align_corners=self.align_corners) + self.bottleneck = ConvModule( + self.in_channels[-1] + len(pool_scales) * self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + # FPN Module + self.lateral_convs = nn.ModuleList() + self.fpn_convs = nn.ModuleList() + for in_channels in self.in_channels[:-1]: # skip the top layer + l_conv = ConvModule( + in_channels, + self.channels, + 1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg, + inplace=False) + fpn_conv = ConvModule( + self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg, + inplace=False) + self.lateral_convs.append(l_conv) + self.fpn_convs.append(fpn_conv) + + self.fpn_bottleneck = ConvModule( + len(self.in_channels) * self.channels, + self.channels, + 3, + padding=1, + conv_cfg=self.conv_cfg, + norm_cfg=self.norm_cfg, + act_cfg=self.act_cfg) + + def psp_forward(self, inputs): + """Forward function of PSP module.""" + x = inputs[-1] + psp_outs = [x] + psp_outs.extend(self.psp_modules(x)) + psp_outs = torch.cat(psp_outs, dim=1) + output = self.bottleneck(psp_outs) + + return output + + def forward(self, inputs): + """Forward function.""" + + inputs = self._transform_inputs(inputs) + + # build laterals + laterals = [ + lateral_conv(inputs[i]) + for i, lateral_conv in enumerate(self.lateral_convs) + ] + + laterals.append(self.psp_forward(inputs)) + + # build top-down path + used_backbone_levels = len(laterals) + for i in range(used_backbone_levels - 1, 0, -1): + prev_shape = laterals[i - 1].shape[2:] + laterals[i - 1] += resize( + laterals[i], + size=prev_shape, + mode='bilinear', + align_corners=self.align_corners) + + # build outputs + fpn_outs = [ + self.fpn_convs[i](laterals[i]) + for i in range(used_backbone_levels - 1) + ] + # append psp feature + fpn_outs.append(laterals[-1]) + + for i in range(used_backbone_levels - 1, 0, -1): + fpn_outs[i] = resize( + fpn_outs[i], + size=fpn_outs[0].shape[2:], + mode='bilinear', + align_corners=self.align_corners) + fpn_outs = torch.cat(fpn_outs, dim=1) + output = self.fpn_bottleneck(fpn_outs) + output = self.cls_seg(output) + return output diff --git a/mmseg/models/losses/__init__.py b/mmseg/models/losses/__init__.py new file mode 100644 index 000000000..225bdde39 --- /dev/null +++ b/mmseg/models/losses/__init__.py @@ -0,0 +1,10 @@ +from .accuracy import Accuracy, accuracy +from .cross_entropy_loss import (CrossEntropyLoss, binary_cross_entropy, + cross_entropy, mask_cross_entropy) +from .utils import reduce_loss, weight_reduce_loss, weighted_loss + +__all__ = [ + 'accuracy', 'Accuracy', 'cross_entropy', 'binary_cross_entropy', + 'mask_cross_entropy', 'CrossEntropyLoss', 'reduce_loss', + 'weight_reduce_loss', 'weighted_loss' +] diff --git a/mmseg/models/losses/accuracy.py b/mmseg/models/losses/accuracy.py new file mode 100644 index 000000000..e45f9ec48 --- /dev/null +++ b/mmseg/models/losses/accuracy.py @@ -0,0 +1,78 @@ +import torch.nn as nn + + +def accuracy(pred, target, topk=1, thresh=None): + """Calculate accuracy according to the prediction and target. + + Args: + pred (torch.Tensor): The model prediction, shape (N, num_class, ...) + target (torch.Tensor): The target of each prediction, shape (N, , ...) + topk (int | tuple[int], optional): If the predictions in ``topk`` + matches the target, the predictions will be regarded as + correct ones. Defaults to 1. + thresh (float, optional): If not None, predictions with scores under + this threshold are considered incorrect. Default to None. + + Returns: + float | tuple[float]: If the input ``topk`` is a single integer, + the function will return a single float as accuracy. If + ``topk`` is a tuple containing multiple integers, the + function will return a tuple containing accuracies of + each ``topk`` number. + """ + assert isinstance(topk, (int, tuple)) + if isinstance(topk, int): + topk = (topk, ) + return_single = True + else: + return_single = False + + maxk = max(topk) + if pred.size(0) == 0: + accu = [pred.new_tensor(0.) for i in range(len(topk))] + return accu[0] if return_single else accu + assert pred.ndim == target.ndim + 1 + assert pred.size(0) == target.size(0) + assert maxk <= pred.size(1), \ + f'maxk {maxk} exceeds pred dimension {pred.size(1)}' + pred_value, pred_label = pred.topk(maxk, dim=1) + # transpose to shape (maxk, N, ...) + pred_label = pred_label.transpose(0, 1) + correct = pred_label.eq(target.unsqueeze(0).expand_as(pred_label)) + if thresh is not None: + # Only prediction values larger than thresh are counted as correct + correct = correct & (pred_value > thresh).t() + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0, keepdim=True) + res.append(correct_k.mul_(100.0 / target.numel())) + return res[0] if return_single else res + + +class Accuracy(nn.Module): + """Accuracy calculation module.""" + + def __init__(self, topk=(1, ), thresh=None): + """Module to calculate the accuracy. + + Args: + topk (tuple, optional): The criterion used to calculate the + accuracy. Defaults to (1,). + thresh (float, optional): If not None, predictions with scores + under this threshold are considered incorrect. Default to None. + """ + super().__init__() + self.topk = topk + self.thresh = thresh + + def forward(self, pred, target): + """Forward function to calculate accuracy. + + Args: + pred (torch.Tensor): Prediction of models. + target (torch.Tensor): Target for each prediction. + + Returns: + tuple[float]: The accuracies under different topk criterions. + """ + return accuracy(pred, target, self.topk, self.thresh) diff --git a/mmseg/models/losses/cross_entropy_loss.py b/mmseg/models/losses/cross_entropy_loss.py new file mode 100644 index 000000000..dcd9f1c89 --- /dev/null +++ b/mmseg/models/losses/cross_entropy_loss.py @@ -0,0 +1,179 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..builder import LOSSES +from .utils import weight_reduce_loss + + +def cross_entropy(pred, + label, + weight=None, + class_weight=None, + reduction='mean', + avg_factor=None, + ignore_index=-100): + """The wrapper function for :func:`F.cross_entropy`""" + # class_weight is a manual rescaling weight given to each class. + # If given, has to be a Tensor of size C element-wise losses + loss = F.cross_entropy( + pred, + label, + weight=class_weight, + reduction='none', + ignore_index=ignore_index) + + # apply weights and do the reduction + if weight is not None: + weight = weight.float() + loss = weight_reduce_loss( + loss, weight=weight, reduction=reduction, avg_factor=avg_factor) + + return loss + + +def _expand_onehot_labels(labels, label_weights, label_channels): + """Expand onehot labels to match the size of prediction.""" + bin_labels = labels.new_full((labels.size(0), label_channels), 0) + inds = torch.nonzero(labels >= 1, as_tuple=False).squeeze() + if inds.numel() > 0: + bin_labels[inds, labels[inds] - 1] = 1 + if label_weights is None: + bin_label_weights = None + else: + bin_label_weights = label_weights.view(-1, 1).expand( + label_weights.size(0), label_channels) + return bin_labels, bin_label_weights + + +def binary_cross_entropy(pred, + label, + weight=None, + reduction='mean', + avg_factor=None, + class_weight=None): + """Calculate the binary CrossEntropy loss. + + Args: + pred (torch.Tensor): The prediction with shape (N, 1). + label (torch.Tensor): The learning label of the prediction. + weight (torch.Tensor, optional): Sample-wise loss weight. + reduction (str, optional): The method used to reduce the loss. + Options are "none", "mean" and "sum". + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + class_weight (list[float], optional): The weight for each class. + + Returns: + torch.Tensor: The calculated loss + """ + if pred.dim() != label.dim(): + label, weight = _expand_onehot_labels(label, weight, pred.size(-1)) + + # weighted element-wise losses + if weight is not None: + weight = weight.float() + loss = F.binary_cross_entropy_with_logits( + pred, label.float(), weight=class_weight, reduction='none') + # do the reduction for the weighted loss + loss = weight_reduce_loss( + loss, weight, reduction=reduction, avg_factor=avg_factor) + + return loss + + +def mask_cross_entropy(pred, + target, + label, + reduction='mean', + avg_factor=None, + class_weight=None): + """Calculate the CrossEntropy loss for masks. + + Args: + pred (torch.Tensor): The prediction with shape (N, C), C is the number + of classes. + target (torch.Tensor): The learning label of the prediction. + label (torch.Tensor): ``label`` indicates the class label of the mask' + corresponding object. This will be used to select the mask in the + of the class which the object belongs to when the mask prediction + if not class-agnostic. + reduction (str, optional): The method used to reduce the loss. + Options are "none", "mean" and "sum". + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + class_weight (list[float], optional): The weight for each class. + + Returns: + torch.Tensor: The calculated loss + """ + # TODO: handle these two reserved arguments + assert reduction == 'mean' and avg_factor is None + num_rois = pred.size()[0] + inds = torch.arange(0, num_rois, dtype=torch.long, device=pred.device) + pred_slice = pred[inds, label].squeeze(1) + return F.binary_cross_entropy_with_logits( + pred_slice, target, weight=class_weight, reduction='mean')[None] + + +@LOSSES.register_module() +class CrossEntropyLoss(nn.Module): + """CrossEntropyLoss. + + Args: + use_sigmoid (bool, optional): Whether the prediction uses sigmoid + of softmax. Defaults to False. + use_mask (bool, optional): Whether to use mask cross entropy loss. + Defaults to False. + reduction (str, optional): . Defaults to 'mean'. + Options are "none", "mean" and "sum". + class_weight (list[float], optional): Weight of each class. + Defaults to None. + loss_weight (float, optional): Weight of the loss. Defaults to 1.0. + """ + + def __init__(self, + use_sigmoid=False, + use_mask=False, + reduction='mean', + class_weight=None, + loss_weight=1.0): + super(CrossEntropyLoss, self).__init__() + assert (use_sigmoid is False) or (use_mask is False) + self.use_sigmoid = use_sigmoid + self.use_mask = use_mask + self.reduction = reduction + self.loss_weight = loss_weight + self.class_weight = class_weight + + if self.use_sigmoid: + self.cls_criterion = binary_cross_entropy + elif self.use_mask: + self.cls_criterion = mask_cross_entropy + else: + self.cls_criterion = cross_entropy + + def forward(self, + cls_score, + label, + weight=None, + avg_factor=None, + reduction_override=None, + **kwargs): + """Forward function.""" + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if self.class_weight is not None: + class_weight = cls_score.new_tensor(self.class_weight) + else: + class_weight = None + loss_cls = self.loss_weight * self.cls_criterion( + cls_score, + label, + weight, + class_weight=class_weight, + reduction=reduction, + avg_factor=avg_factor, + **kwargs) + return loss_cls diff --git a/mmseg/models/losses/utils.py b/mmseg/models/losses/utils.py new file mode 100644 index 000000000..a1153fa9f --- /dev/null +++ b/mmseg/models/losses/utils.py @@ -0,0 +1,101 @@ +import functools + +import torch.nn.functional as F + + +def reduce_loss(loss, reduction): + """Reduce loss as specified. + + Args: + loss (Tensor): Elementwise loss tensor. + reduction (str): Options are "none", "mean" and "sum". + + Return: + Tensor: Reduced loss tensor. + """ + reduction_enum = F._Reduction.get_enum(reduction) + # none: 0, elementwise_mean:1, sum: 2 + if reduction_enum == 0: + return loss + elif reduction_enum == 1: + return loss.mean() + elif reduction_enum == 2: + return loss.sum() + + +def weight_reduce_loss(loss, weight=None, reduction='mean', avg_factor=None): + """Apply element-wise weight and reduce loss. + + Args: + loss (Tensor): Element-wise loss. + weight (Tensor): Element-wise weights. + reduction (str): Same as built-in losses of PyTorch. + avg_factor (float): Avarage factor when computing the mean of losses. + + Returns: + Tensor: Processed loss values. + """ + # if weight is specified, apply element-wise weight + if weight is not None: + assert weight.dim() == loss.dim() + if weight.dim() > 1: + assert weight.size(1) == 1 or weight.size(1) == loss.size(1) + loss = loss * weight + + # if avg_factor is not specified, just reduce the loss + if avg_factor is None: + loss = reduce_loss(loss, reduction) + else: + # if reduction is mean, then average the loss by avg_factor + if reduction == 'mean': + loss = loss.sum() / avg_factor + # if reduction is 'none', then do nothing, otherwise raise an error + elif reduction != 'none': + raise ValueError('avg_factor can not be used with reduction="sum"') + return loss + + +def weighted_loss(loss_func): + """Create a weighted version of a given loss function. + + To use this decorator, the loss function must have the signature like + `loss_func(pred, target, **kwargs)`. The function only needs to compute + element-wise loss without any reduction. This decorator will add weight + and reduction arguments to the function. The decorated function will have + the signature like `loss_func(pred, target, weight=None, reduction='mean', + avg_factor=None, **kwargs)`. + + :Example: + + >>> import torch + >>> @weighted_loss + >>> def l1_loss(pred, target): + >>> return (pred - target).abs() + + >>> pred = torch.Tensor([0, 2, 3]) + >>> target = torch.Tensor([1, 1, 1]) + >>> weight = torch.Tensor([1, 0, 1]) + + >>> l1_loss(pred, target) + tensor(1.3333) + >>> l1_loss(pred, target, weight) + tensor(1.) + >>> l1_loss(pred, target, reduction='none') + tensor([1., 1., 2.]) + >>> l1_loss(pred, target, weight, avg_factor=2) + tensor(1.5000) + """ + + @functools.wraps(loss_func) + def wrapper(pred, + target, + weight=None, + reduction='mean', + avg_factor=None, + **kwargs): + # get element-wise loss + loss = loss_func(pred, target, **kwargs) + loss = weight_reduce_loss(loss, weight, reduction, avg_factor) + return loss + + return wrapper diff --git a/mmseg/models/segmentors/__init__.py b/mmseg/models/segmentors/__init__.py new file mode 100644 index 000000000..3f600ecb9 --- /dev/null +++ b/mmseg/models/segmentors/__init__.py @@ -0,0 +1,4 @@ +from .cascade_encoder_decoder import CascadeEncoderDecoder +from .encoder_decoder import EncoderDecoder + +__all__ = ['EncoderDecoder', 'CascadeEncoderDecoder'] diff --git a/mmseg/models/segmentors/base.py b/mmseg/models/segmentors/base.py new file mode 100644 index 000000000..4f3112721 --- /dev/null +++ b/mmseg/models/segmentors/base.py @@ -0,0 +1,267 @@ +import logging +import warnings +from abc import ABCMeta, abstractmethod +from collections import OrderedDict + +import mmcv +import numpy as np +import torch +import torch.distributed as dist +import torch.nn as nn + + +class BaseSegmentor(nn.Module): + """Base class for segmentors.""" + + __metaclass__ = ABCMeta + + def __init__(self): + super(BaseSegmentor, self).__init__() + + @property + def with_neck(self): + """bool: whether the segmentor has neck""" + return hasattr(self, 'neck') and self.neck is not None + + @property + def with_auxiliary_head(self): + """bool: whether the segmentor has auxiliary head""" + return hasattr(self, + 'auxiliary_head') and self.auxiliary_head is not None + + @property + def with_decode_head(self): + """bool: whether the segmentor has decode head""" + return hasattr(self, 'decode_head') and self.decode_head is not None + + @abstractmethod + def extract_feat(self, imgs): + """Placeholder for extract features from images.""" + pass + + @abstractmethod + def encode_decode(self, img, img_metas): + """Placeholder for encode images with backbone and decode into a + semantic segmentation map of the same size as input.""" + pass + + @abstractmethod + def forward_train(self, imgs, img_metas, **kwargs): + """Placeholder for Forward function for training.""" + pass + + @abstractmethod + def simple_test(self, img, img_meta, **kwargs): + """Placeholder for single image test.""" + pass + + @abstractmethod + def aug_test(self, imgs, img_metas, **kwargs): + """Placeholder for augmentation test.""" + pass + + def init_weights(self, pretrained=None): + """Initialize the weights in segmentor. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + if pretrained is not None: + logger = logging.getLogger() + logger.info(f'load model from: {pretrained}') + + def forward_test(self, imgs, img_metas, **kwargs): + """ + Args: + imgs (List[Tensor]): the outer list indicates test-time + augmentations and inner Tensor should have a shape NxCxHxW, + which contains all images in the batch. + img_metas (List[List[dict]]): the outer list indicates test-time + augs (multiscale, flip, etc.) and the inner list indicates + images in a batch. + """ + for var, name in [(imgs, 'imgs'), (img_metas, 'img_metas')]: + if not isinstance(var, list): + raise TypeError(f'{name} must be a list, but got ' + f'{type(var)}') + + num_augs = len(imgs) + if num_augs != len(img_metas): + raise ValueError(f'num of augmentations ({len(imgs)}) != ' + f'num of image meta ({len(img_metas)})') + # all images in the same aug batch all of the same ori_shape and pad + # shape + for img_meta in img_metas: + ori_shapes = [_['ori_shape'] for _ in img_meta] + assert all(shape == ori_shapes[0] for shape in ori_shapes) + img_shapes = [_['img_shape'] for _ in img_meta] + assert all(shape == img_shapes[0] for shape in img_shapes) + pad_shapes = [_['pad_shape'] for _ in img_meta] + assert all(shape == pad_shapes[0] for shape in pad_shapes) + + if num_augs == 1: + return self.simple_test(imgs[0], img_metas[0], **kwargs) + else: + return self.aug_test(imgs, img_metas, **kwargs) + + def forward(self, img, img_metas, return_loss=True, **kwargs): + """Calls either :func:`forward_train` or :func:`forward_test` depending + on whether ``return_loss`` is ``True``. + + Note this setting will change the expected inputs. When + ``return_loss=True``, img and img_meta are single-nested (i.e. Tensor + and List[dict]), and when ``resturn_loss=False``, img and img_meta + should be double nested (i.e. List[Tensor], List[List[dict]]), with + the outer list indicating test time augmentations. + """ + if return_loss: + return self.forward_train(img, img_metas, **kwargs) + else: + return self.forward_test(img, img_metas, **kwargs) + + def train_step(self, data_batch, optimizer, **kwargs): + """The iteration step during training. + + This method defines an iteration step during training, except for the + back propagation and optimizer updating, which are done in an optimizer + hook. Note that in some complicated cases or models, the whole process + including back propagation and optimizer updating is also defined in + this method, such as GAN. + + Args: + data (dict): The output of dataloader. + optimizer (:obj:`torch.optim.Optimizer` | dict): The optimizer of + runner is passed to ``train_step()``. This argument is unused + and reserved. + + Returns: + dict: It should contain at least 3 keys: ``loss``, ``log_vars``, + ``num_samples``. + ``loss`` is a tensor for back propagation, which can be a + weighted sum of multiple losses. + ``log_vars`` contains all the variables to be sent to the + logger. + ``num_samples`` indicates the batch size (when the model is + DDP, it means the batch size on each GPU), which is used for + averaging the logs. + """ + losses = self.forward_train(**data_batch, **kwargs) + loss, log_vars = self._parse_losses(losses) + + outputs = dict( + loss=loss, + log_vars=log_vars, + num_samples=len(data_batch['img'].data)) + + return outputs + + def val_step(self, data_batch, **kwargs): + """The iteration step during validation. + + This method shares the same signature as :func:`train_step`, but used + during val epochs. Note that the evaluation after training epochs is + not implemented with this method, but an evaluation hook. + """ + output = self.forward_test(**data_batch, **kwargs) + return output + + @staticmethod + def _parse_losses(losses): + """Parse the raw outputs (losses) of the network. + + Args: + losses (dict): Raw output of the network, which usually contain + losses and other necessary information. + + Returns: + tuple[Tensor, dict]: (loss, log_vars), loss is the loss tensor + which may be a weighted sum of all losses, log_vars contains + all the variables to be sent to the logger. + """ + log_vars = OrderedDict() + for loss_name, loss_value in losses.items(): + if isinstance(loss_value, torch.Tensor): + log_vars[loss_name] = loss_value.mean() + elif isinstance(loss_value, list): + log_vars[loss_name] = sum(_loss.mean() for _loss in loss_value) + else: + raise TypeError( + f'{loss_name} is not a tensor or list of tensors') + + loss = sum(_value for _key, _value in log_vars.items() + if 'loss' in _key) + + log_vars['loss'] = loss + for loss_name, loss_value in log_vars.items(): + # reduce loss when distributed training + if dist.is_available() and dist.is_initialized(): + loss_value = loss_value.data.clone() + dist.all_reduce(loss_value.div_(dist.get_world_size())) + log_vars[loss_name] = loss_value.item() + + return loss, log_vars + + def show_result(self, + img, + result, + palette=None, + win_name='', + show=False, + wait_time=0, + out_file=None): + """Draw `result` over `img`. + + Args: + img (str or Tensor): The image to be displayed. + result (Tensor): The semantic segmentation results to draw over + `img`. + palette (list[list[int]]] | np.ndarray | None): The palette of + segmentation map. If None is given, random palette will be + generated. Default: None + win_name (str): The window name. + wait_time (int): Value of waitKey param. + Default: 0. + show (bool): Whether to show the image. + Default: False. + out_file (str or None): The filename to write the image. + Default: None. + + Returns: + img (Tensor): Only if not `show` or `out_file` + """ + img = mmcv.imread(img) + img = img.copy() + seg = result[0] + if palette is None: + if self.PALETTE is None: + palette = np.random.randint( + 0, 255, size=(len(self.CLASSES), 3)) + else: + palette = self.PALETTE + else: + palette = np.array(palette) + assert palette.shape[0] == len(self.CLASSES) + assert palette.shape[1] == 3 + assert len(palette.shape) == 2 + color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8) + for label, color in enumerate(palette): + color_seg[seg == label, :] = color + # convert to BGR + color_seg = color_seg[..., ::-1] + + img = img * 0.5 + color_seg * 0.5 + img = img.astype(np.uint8) + # if out_file specified, do not show image in window + if out_file is not None: + show = False + + if show: + mmcv.imshow(img, win_name, wait_time) + if out_file is not None: + mmcv.imwrite(img, out_file) + + if not (show or out_file): + warnings.warn('show==False and out_file is not specified, only ' + 'result image will be returned') + return img diff --git a/mmseg/models/segmentors/cascade_encoder_decoder.py b/mmseg/models/segmentors/cascade_encoder_decoder.py new file mode 100644 index 000000000..220ab2bb3 --- /dev/null +++ b/mmseg/models/segmentors/cascade_encoder_decoder.py @@ -0,0 +1,98 @@ +from torch import nn + +from mmseg.core import add_prefix +from mmseg.ops import resize +from .. import builder +from ..builder import SEGMENTORS +from .encoder_decoder import EncoderDecoder + + +@SEGMENTORS.register_module() +class CascadeEncoderDecoder(EncoderDecoder): + """Cascade Encoder Decoder segmentors. + + CascadeEncoderDecoder almost the same as EncoderDecoder, while decoders of + CascadeEncoderDecoder are cascaded. The output of previous decoder_head + will be the input of next decoder_head. + """ + + def __init__(self, + num_stages, + backbone, + decode_head, + neck=None, + auxiliary_head=None, + train_cfg=None, + test_cfg=None, + pretrained=None): + self.num_stages = num_stages + super(CascadeEncoderDecoder, self).__init__( + backbone=backbone, + decode_head=decode_head, + neck=neck, + auxiliary_head=auxiliary_head, + train_cfg=train_cfg, + test_cfg=test_cfg, + pretrained=pretrained) + + def _init_decode_head(self, decode_head): + """Initialize ``decode_head``""" + assert isinstance(decode_head, list) + assert len(decode_head) == self.num_stages + self.decode_head = nn.ModuleList() + for i in range(self.num_stages): + self.decode_head.append(builder.build_head(decode_head[i])) + self.align_corners = self.decode_head[-1].align_corners + self.num_classes = self.decode_head[-1].num_classes + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone and heads. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + self.backbone.init_weights(pretrained=pretrained) + for i in range(self.num_stages): + self.decode_head[i].init_weights() + if self.with_auxiliary_head: + if isinstance(self.auxiliary_head, nn.ModuleList): + for aux_head in self.auxiliary_head: + aux_head.init_weights() + else: + self.auxiliary_head.init_weights() + + def encode_decode(self, img, img_metas): + """Encode images with backbone and decode into a semantic segmentation + map of the same size as input.""" + x = self.extract_feat(img) + out = self.decode_head[0].forward_test(x, img_metas, self.test_cfg) + for i in range(1, self.num_stages): + out = self.decode_head[i].forward_test(x, out, img_metas, + self.test_cfg) + out = resize( + input=out, + size=img.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + return out + + def _decode_head_forward_train(self, x, img_metas, gt_semantic_seg): + """Run forward function and calculate loss for decode head in + training.""" + losses = dict() + + loss_decode = self.decode_head[0].forward_train( + x, img_metas, gt_semantic_seg, self.train_cfg) + + losses.update(add_prefix(loss_decode, 'decode_0')) + + for i in range(1, self.num_stages): + # forward test again, maybe unnecessary for most methods. + prev_outputs = self.decode_head[i - 1].forward_test( + x, img_metas, self.test_cfg) + loss_decode = self.decode_head[i].forward_train( + x, prev_outputs, img_metas, gt_semantic_seg, self.train_cfg) + losses.update(add_prefix(loss_decode, f'decode_{i}')) + + return losses diff --git a/mmseg/models/segmentors/encoder_decoder.py b/mmseg/models/segmentors/encoder_decoder.py new file mode 100644 index 000000000..d3ce17adb --- /dev/null +++ b/mmseg/models/segmentors/encoder_decoder.py @@ -0,0 +1,282 @@ +import torch.nn as nn +import torch.nn.functional as F + +from mmseg.core import add_prefix +from mmseg.ops import resize +from .. import builder +from ..builder import SEGMENTORS +from .base import BaseSegmentor + + +@SEGMENTORS.register_module() +class EncoderDecoder(BaseSegmentor): + """Encoder Decoder segmentors. + + EncoderDecoder typically consists of backbone, decode_head, auxiliary_head. + Note that auxiliary_head is only used for deep supervision during training, + which could be dumped during inference. + """ + + def __init__(self, + backbone, + decode_head, + neck=None, + auxiliary_head=None, + train_cfg=None, + test_cfg=None, + pretrained=None): + super(EncoderDecoder, self).__init__() + self.backbone = builder.build_backbone(backbone) + if neck is not None: + self.neck = builder.build_neck(neck) + self._init_decode_head(decode_head) + self._init_auxiliary_head(auxiliary_head) + + self.train_cfg = train_cfg + self.test_cfg = test_cfg + + self.init_weights(pretrained=pretrained) + + assert self.with_decode_head + + def _init_decode_head(self, decode_head): + """Initialize ``decode_head``""" + self.decode_head = builder.build_head(decode_head) + self.align_corners = self.decode_head.align_corners + self.num_classes = self.decode_head.num_classes + + def _init_auxiliary_head(self, auxiliary_head): + """Initialize ``auxiliary_head``""" + if auxiliary_head is not None: + if isinstance(auxiliary_head, list): + self.auxiliary_head = nn.ModuleList() + for head_cfg in auxiliary_head: + self.auxiliary_head.append(builder.build_head(head_cfg)) + else: + self.auxiliary_head = builder.build_head(auxiliary_head) + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone and heads. + + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + + super(EncoderDecoder, self).init_weights(pretrained) + self.backbone.init_weights(pretrained=pretrained) + self.decode_head.init_weights() + if self.with_auxiliary_head: + if isinstance(self.auxiliary_head, nn.ModuleList): + for aux_head in self.auxiliary_head: + aux_head.init_weights() + else: + self.auxiliary_head.init_weights() + + def extract_feat(self, img): + """Extract features from images.""" + x = self.backbone(img) + if self.with_neck: + x = self.neck(x) + return x + + def encode_decode(self, img, img_metas): + """Encode images with backbone and decode into a semantic segmentation + map of the same size as input.""" + x = self.extract_feat(img) + out = self._decode_head_forward_test(x, img_metas) + out = resize( + input=out, + size=img.shape[2:], + mode='bilinear', + align_corners=self.align_corners) + return out + + def _decode_head_forward_train(self, x, img_metas, gt_semantic_seg): + """Run forward function and calculate loss for decode head in + training.""" + losses = dict() + loss_decode = self.decode_head.forward_train(x, img_metas, + gt_semantic_seg, + self.train_cfg) + + losses.update(add_prefix(loss_decode, 'decode')) + return losses + + def _decode_head_forward_test(self, x, img_metas): + """Run forward function and calculate loss for decode head in + inference.""" + seg_logits = self.decode_head.forward_test(x, img_metas, self.test_cfg) + return seg_logits + + def _auxiliary_head_forward_train(self, x, img_metas, gt_semantic_seg): + """Run forward function and calculate loss for auxiliary head in + training.""" + losses = dict() + if isinstance(self.auxiliary_head, nn.ModuleList): + for idx, aux_head in enumerate(self.auxiliary_head): + loss_aux = aux_head.forward_train(x, img_metas, + gt_semantic_seg, + self.train_cfg) + losses.update(add_prefix(loss_aux, f'aux_{idx}')) + else: + loss_aux = self.auxiliary_head.forward_train( + x, img_metas, gt_semantic_seg, self.train_cfg) + losses.update(add_prefix(loss_aux, 'aux')) + + return losses + + def forward_dummy(self, img): + """Dummy forward function.""" + seg_logit = self.encode_decode(img, None) + + return seg_logit + + def forward_train(self, img, img_metas, gt_semantic_seg): + """Forward function for training. + + Args: + img (Tensor): Input images. + img_metas (list[dict]): List of image info dict where each dict + has: 'img_shape', 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmseg/datasets/pipelines/formatting.py:Collect`. + gt_semantic_seg (Tensor): Semantic segmentation masks + used if the architecture supports semantic segmentation task. + + Returns: + dict[str, Tensor]: a dictionary of loss components + """ + + x = self.extract_feat(img) + + losses = dict() + + loss_decode = self._decode_head_forward_train(x, img_metas, + gt_semantic_seg) + losses.update(loss_decode) + + if self.with_auxiliary_head: + loss_aux = self._auxiliary_head_forward_train( + x, img_metas, gt_semantic_seg) + losses.update(loss_aux) + + return losses + + # TODO refactor + def slide_inference(self, img, img_meta, rescale): + """Inference by sliding-window with overlap.""" + + h_stride, w_stride = self.test_cfg.stride + h_crop, w_crop = self.test_cfg.crop_size + batch_size, _, h_img, w_img = img.size() + num_classes = self.num_classes + h_grids = max(h_img - h_crop + h_stride - 1, 0) // h_stride + 1 + w_grids = max(w_img - w_crop + w_stride - 1, 0) // w_stride + 1 + preds = img.new_zeros((batch_size, num_classes, h_img, w_img)) + count_mat = img.new_zeros((batch_size, 1, h_img, w_img)) + for h_idx in range(h_grids): + for w_idx in range(w_grids): + y1 = h_idx * h_stride + x1 = w_idx * w_stride + y2 = min(y1 + h_crop, h_img) + x2 = min(x1 + w_crop, w_img) + y1 = max(y2 - h_crop, 0) + x1 = max(x2 - w_crop, 0) + crop_img = img[:, :, y1:y2, x1:x2] + pad_img = crop_img.new_zeros( + (crop_img.size(0), crop_img.size(1), h_crop, w_crop)) + pad_img[:, :, :y2 - y1, :x2 - x1] = crop_img + pad_seg_logit = self.encode_decode(pad_img, img_meta) + preds[:, :, y1:y2, + x1:x2] += pad_seg_logit[:, :, :y2 - y1, :x2 - x1] + count_mat[:, :, y1:y2, x1:x2] += 1 + assert (count_mat == 0).sum() == 0 + preds = preds / count_mat + if rescale: + preds = resize( + preds, + size=img_meta[0]['ori_shape'][:2], + mode='bilinear', + align_corners=self.align_corners, + warning=False) + + return preds + + def whole_inference(self, img, img_meta, rescale): + """Inference with full image.""" + + seg_logit = self.encode_decode(img, img_meta) + if rescale: + seg_logit = resize( + seg_logit, + size=img_meta[0]['ori_shape'][:2], + mode='bilinear', + align_corners=self.align_corners, + warning=False) + + return seg_logit + + def inference(self, img, img_meta, rescale): + """Inference with slide/whole style. + + Args: + img (Tensor): The input image of shape (N, 3, H, W). + img_meta (dict): Image info dict where each dict has: 'img_shape', + 'scale_factor', 'flip', and may also contain + 'filename', 'ori_shape', 'pad_shape', and 'img_norm_cfg'. + For details on the values of these keys see + `mmseg/datasets/pipelines/formatting.py:Collect`. + rescale (bool): Whether rescale back to original shape. + + Returns: + Tensor: The output segmentation map. + """ + + assert self.test_cfg.mode in ['slide', 'whole'] + ori_shape = img_meta[0]['ori_shape'] + assert all(_['ori_shape'] == ori_shape for _ in img_meta) + if self.test_cfg.mode == 'slide': + seg_logit = self.slide_inference(img, img_meta, rescale) + else: + seg_logit = self.whole_inference(img, img_meta, rescale) + output = F.softmax(seg_logit, dim=1) + flip = img_meta[0]['flip'] + flip_direction = img_meta[0]['flip_direction'] + if flip: + assert flip_direction in ['horizontal', 'vertical'] + if flip_direction == 'horizontal': + output = output.flip(dims=(3, )) + elif flip_direction == 'vertical': + output = output.flip(dims=(2, )) + + return output + + def simple_test(self, img, img_meta, rescale=True): + """Simple test with single image.""" + seg_logit = self.inference(img, img_meta, rescale) + seg_pred = seg_logit.argmax(dim=1) + seg_pred = seg_pred.cpu().numpy() + # unravel batch dim + seg_pred = list(seg_pred) + return seg_pred + + def aug_test(self, imgs, img_metas, rescale=True): + """Test with augmentations. + + Only rescale=True is supported. + """ + # aug_test rescale all imgs back to ori_shape for now + assert rescale + # to save memory, we get augmented seg logit inplace + seg_logit = self.inference(imgs[0], img_metas[0], rescale) + for i in range(1, len(imgs)): + cur_seg_logit = self.inference(imgs[i], img_metas[i], rescale) + seg_logit += cur_seg_logit + seg_logit /= len(imgs) + seg_pred = seg_logit.argmax(dim=1) + seg_pred = seg_pred.cpu().numpy() + # unravel batch dim + seg_pred = list(seg_pred) + return seg_pred diff --git a/mmseg/models/utils/__init__.py b/mmseg/models/utils/__init__.py new file mode 100644 index 000000000..71d3f423c --- /dev/null +++ b/mmseg/models/utils/__init__.py @@ -0,0 +1,4 @@ +from .res_layer import ResLayer +from .self_attention_block import SelfAttentionBlock + +__all__ = ['ResLayer', 'SelfAttentionBlock'] diff --git a/mmseg/models/utils/res_layer.py b/mmseg/models/utils/res_layer.py new file mode 100644 index 000000000..9ef51b95b --- /dev/null +++ b/mmseg/models/utils/res_layer.py @@ -0,0 +1,95 @@ +from mmcv.cnn import build_conv_layer, build_norm_layer +from torch import nn as nn + + +class ResLayer(nn.Sequential): + """ResLayer to build ResNet style backbone. + + Args: + block (nn.Module): block used to build ResLayer. + inplanes (int): inplanes of block. + planes (int): planes of block. + num_blocks (int): number of blocks. + stride (int): stride of the first block. Default: 1 + avg_down (bool): Use AvgPool instead of stride conv when + downsampling in the bottleneck. Default: False + conv_cfg (dict): dictionary to construct and config conv layer. + Default: None + norm_cfg (dict): dictionary to construct and config norm layer. + Default: dict(type='BN') + multi_grid (int | None): Multi grid dilation rates of last + stage. Default: None + contract_dilation (bool): Whether contract first dilation of each layer + Default: False + """ + + def __init__(self, + block, + inplanes, + planes, + num_blocks, + stride=1, + dilation=1, + avg_down=False, + conv_cfg=None, + norm_cfg=dict(type='BN'), + multi_grid=None, + contract_dilation=False, + **kwargs): + self.block = block + + downsample = None + if stride != 1 or inplanes != planes * block.expansion: + downsample = [] + conv_stride = stride + # check dilation for dilated ResNet + if avg_down and (stride != 1 or dilation != 1): + conv_stride = 1 + downsample.append( + nn.AvgPool2d( + kernel_size=stride, + stride=stride, + ceil_mode=True, + count_include_pad=False)) + downsample.extend([ + build_conv_layer( + conv_cfg, + inplanes, + planes * block.expansion, + kernel_size=1, + stride=conv_stride, + bias=False), + build_norm_layer(norm_cfg, planes * block.expansion)[1] + ]) + downsample = nn.Sequential(*downsample) + + layers = [] + if multi_grid is None: + if dilation > 1 and contract_dilation: + first_dilation = dilation // 2 + else: + first_dilation = dilation + else: + first_dilation = multi_grid[0] + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=stride, + dilation=first_dilation, + downsample=downsample, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + inplanes = planes * block.expansion + for i in range(1, num_blocks): + layers.append( + block( + inplanes=inplanes, + planes=planes, + stride=1, + dilation=dilation if multi_grid is None else multi_grid[i], + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + **kwargs)) + super(ResLayer, self).__init__(*layers) diff --git a/mmseg/models/utils/self_attention_block.py b/mmseg/models/utils/self_attention_block.py new file mode 100644 index 000000000..372fad2e0 --- /dev/null +++ b/mmseg/models/utils/self_attention_block.py @@ -0,0 +1,159 @@ +import torch +from mmcv.cnn import ConvModule, constant_init +from torch import nn as nn +from torch.nn import functional as F + + +class SelfAttentionBlock(nn.Module): + """General self-attention block/non-local block. + + Please refer to https://arxiv.org/abs/1706.03762 for details about key, + query and value. + + Args: + key_in_channels (int): Input channels of key feature. + query_in_channels (int): Input channels of query feature. + channels (int): Output channels of key/query transform. + out_channels (int): Output channels. + share_key_query (bool): Whether share projection weight between key + and query projection. + query_downsample (nn.Module): Query downsample module. + key_downsample (nn.Module): Key downsample module. + key_query_num_convs (int): Number of convs for key/query projection. + value_num_convs (int): Number of convs for value projection. + matmul_norm (bool): Whether normalize attention map with sqrt of + channels + with_out (bool): Whether use out projection. + conv_cfg (dict|None): Config of conv layers. + norm_cfg (dict|None): Config of norm layers. + act_cfg (dict|None): Config of activation layers. + """ + + def __init__(self, key_in_channels, query_in_channels, channels, + out_channels, share_key_query, query_downsample, + key_downsample, key_query_num_convs, value_out_num_convs, + key_query_norm, value_out_norm, matmul_norm, with_out, + conv_cfg, norm_cfg, act_cfg): + super(SelfAttentionBlock, self).__init__() + if share_key_query: + assert key_in_channels == query_in_channels + self.key_in_channels = key_in_channels + self.query_in_channels = query_in_channels + self.out_channels = out_channels + self.channels = channels + self.share_key_query = share_key_query + self.conv_cfg = conv_cfg + self.norm_cfg = norm_cfg + self.act_cfg = act_cfg + self.key_project = self.build_project( + key_in_channels, + channels, + num_convs=key_query_num_convs, + use_conv_module=key_query_norm, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + if share_key_query: + self.query_project = self.key_project + else: + self.query_project = self.build_project( + query_in_channels, + channels, + num_convs=key_query_num_convs, + use_conv_module=key_query_norm, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + self.value_project = self.build_project( + key_in_channels, + channels if with_out else out_channels, + num_convs=value_out_num_convs, + use_conv_module=value_out_norm, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + if with_out: + self.out_project = self.build_project( + channels, + out_channels, + num_convs=value_out_num_convs, + use_conv_module=value_out_norm, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + else: + self.out_project = None + + self.query_downsample = query_downsample + self.key_downsample = key_downsample + self.matmul_norm = matmul_norm + + self.init_weights() + + def init_weights(self): + """Initialize weight of later layer.""" + if self.out_project is not None: + if not isinstance(self.out_project, ConvModule): + constant_init(self.out_project, 0) + + def build_project(self, in_channels, channels, num_convs, use_conv_module, + conv_cfg, norm_cfg, act_cfg): + """Build projection layer for key/query/value/out.""" + if use_conv_module: + convs = [ + ConvModule( + in_channels, + channels, + 1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg) + ] + for _ in range(num_convs - 1): + convs.append( + ConvModule( + channels, + channels, + 1, + conv_cfg=conv_cfg, + norm_cfg=norm_cfg, + act_cfg=act_cfg)) + else: + convs = [nn.Conv2d(in_channels, channels, 1)] + for _ in range(num_convs - 1): + convs.append(nn.Conv2d(channels, channels, 1)) + if len(convs) > 1: + convs = nn.Sequential(*convs) + else: + convs = convs[0] + return convs + + def forward(self, query_feats, key_feats): + """Forward function.""" + batch_size = query_feats.size(0) + query = self.query_project(query_feats) + if self.query_downsample is not None: + query = self.query_downsample(query) + query = query.reshape(*query.shape[:2], -1) + query = query.permute(0, 2, 1).contiguous() + + key = self.key_project(key_feats) + value = self.value_project(key_feats) + if self.key_downsample is not None: + key = self.key_downsample(key) + value = self.key_downsample(value) + key = key.reshape(*key.shape[:2], -1) + value = value.reshape(*value.shape[:2], -1) + value = value.permute(0, 2, 1).contiguous() + + sim_map = torch.matmul(query, key) + if self.matmul_norm: + sim_map = (self.channels**-.5) * sim_map + sim_map = F.softmax(sim_map, dim=-1) + + context = torch.matmul(sim_map, value) + context = context.permute(0, 2, 1).contiguous() + context = context.reshape(batch_size, -1, *query_feats.shape[2:]) + if self.out_project is not None: + context = self.out_project(context) + return context diff --git a/mmseg/ops/__init__.py b/mmseg/ops/__init__.py new file mode 100644 index 000000000..54b0d0b79 --- /dev/null +++ b/mmseg/ops/__init__.py @@ -0,0 +1,5 @@ +from .encoding import Encoding +from .separable_conv_module import DepthwiseSeparableConvModule +from .wrappers import resize + +__all__ = ['resize', 'DepthwiseSeparableConvModule', 'Encoding'] diff --git a/mmseg/ops/encoding.py b/mmseg/ops/encoding.py new file mode 100644 index 000000000..d93918965 --- /dev/null +++ b/mmseg/ops/encoding.py @@ -0,0 +1,74 @@ +import torch +from torch import nn as nn +from torch.nn import functional as F + + +class Encoding(nn.Module): + """Encoding Layer: a learnable residual encoder. + + Input is of shape (batch_size, channels, height, width). + Output is of shape (batch_size, num_codes, channels). + + Args: + channels: dimension of the features or feature channels + num_codes: number of code words + """ + + def __init__(self, channels, num_codes): + super(Encoding, self).__init__() + # init codewords and smoothing factor + self.channels, self.num_codes = channels, num_codes + std = 1. / ((num_codes * channels)**0.5) + # [num_codes, channels] + self.codewords = nn.Parameter( + torch.empty(num_codes, channels, + dtype=torch.float).uniform_(-std, std), + requires_grad=True) + # [num_codes] + self.scale = nn.Parameter( + torch.empty(num_codes, dtype=torch.float).uniform_(-1, 0), + requires_grad=True) + + @staticmethod + def scaled_l2(x, codewords, scale): + num_codes, channels = codewords.size() + batch_size = x.size(0) + reshaped_scale = scale.view((1, 1, num_codes)) + expanded_x = x.unsqueeze(2).expand( + (batch_size, x.size(1), num_codes, channels)) + reshaped_codewords = codewords.view((1, 1, num_codes, channels)) + + scaled_l2_norm = reshaped_scale * ( + expanded_x - reshaped_codewords).pow(2).sum(dim=3) + return scaled_l2_norm + + @staticmethod + def aggregate(assigment_weights, x, codewords): + num_codes, channels = codewords.size() + reshaped_codewords = codewords.view((1, 1, num_codes, channels)) + batch_size = x.size(0) + + expanded_x = x.unsqueeze(2).expand( + (batch_size, x.size(1), num_codes, channels)) + encoded_feat = (assigment_weights.unsqueeze(3) * + (expanded_x - reshaped_codewords)).sum(dim=1) + return encoded_feat + + def forward(self, x): + assert x.dim() == 4 and x.size(1) == self.channels + # [batch_size, channels, height, width] + batch_size = x.size(0) + # [batch_size, height x width, channels] + x = x.view(batch_size, self.channels, -1).transpose(1, 2).contiguous() + # assignment_weights: [batch_size, channels, num_codes] + assigment_weights = F.softmax( + self.scaled_l2(x, self.codewords, self.scale), dim=2) + # aggregate + encoded_feat = self.aggregate(assigment_weights, x, self.codewords) + return encoded_feat + + def __repr__(self): + repr_str = self.__class__.__name__ + repr_str += f'(Nx{self.channels}xHxW =>Nx{self.num_codes}' \ + f'x{self.channels})' + return repr_str diff --git a/mmseg/ops/separable_conv_module.py b/mmseg/ops/separable_conv_module.py new file mode 100644 index 000000000..4e5922cc4 --- /dev/null +++ b/mmseg/ops/separable_conv_module.py @@ -0,0 +1,88 @@ +import torch.nn as nn +from mmcv.cnn import ConvModule + + +class DepthwiseSeparableConvModule(nn.Module): + """Depthwise separable convolution module. + + See https://arxiv.org/pdf/1704.04861.pdf for details. + + This module can replace a ConvModule with the conv block replaced by two + conv block: depthwise conv block and pointwise conv block. The depthwise + conv block contains depthwise-conv/norm/activation layers. The pointwise + conv block contains pointwise-conv/norm/activation layers. It should be + noted that there will be norm/activation layer in the depthwise conv block + if `norm_cfg` and `act_cfg` are specified. + + Args: + in_channels (int): Same as nn.Conv2d. + out_channels (int): Same as nn.Conv2d. + kernel_size (int or tuple[int]): Same as nn.Conv2d. + stride (int or tuple[int]): Same as nn.Conv2d. Default: 1. + padding (int or tuple[int]): Same as nn.Conv2d. Default: 0. + dilation (int or tuple[int]): Same as nn.Conv2d. Default: 1. + norm_cfg (dict): Default norm config for both depthwise ConvModule and + pointwise ConvModule. Default: None. + act_cfg (dict): Default activation config for both depthwise ConvModule + and pointwise ConvModule. Default: dict(type='ReLU'). + dw_norm_cfg (dict): Norm config of depthwise ConvModule. If it is + 'default', it will be the same as `norm_cfg`. Default: 'default'. + dw_act_cfg (dict): Activation config of depthwise ConvModule. If it is + 'default', it will be the same as `act_cfg`. Default: 'default'. + pw_norm_cfg (dict): Norm config of pointwise ConvModule. If it is + 'default', it will be the same as `norm_cfg`. Default: 'default'. + pw_act_cfg (dict): Activation config of pointwise ConvModule. If it is + 'default', it will be the same as `act_cfg`. Default: 'default'. + kwargs (optional): Other shared arguments for depthwise and pointwise + ConvModule. See ConvModule for ref. + """ + + def __init__(self, + in_channels, + out_channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + norm_cfg=None, + act_cfg=dict(type='ReLU'), + dw_norm_cfg='default', + dw_act_cfg='default', + pw_norm_cfg='default', + pw_act_cfg='default', + **kwargs): + super(DepthwiseSeparableConvModule, self).__init__() + assert 'groups' not in kwargs, 'groups should not be specified' + + # if norm/activation config of depthwise/pointwise ConvModule is not + # specified, use default config. + dw_norm_cfg = dw_norm_cfg if dw_norm_cfg != 'default' else norm_cfg + dw_act_cfg = dw_act_cfg if dw_act_cfg != 'default' else act_cfg + pw_norm_cfg = pw_norm_cfg if pw_norm_cfg != 'default' else norm_cfg + pw_act_cfg = pw_act_cfg if pw_act_cfg != 'default' else act_cfg + + # depthwise convolution + self.depthwise_conv = ConvModule( + in_channels, + in_channels, + kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=in_channels, + norm_cfg=dw_norm_cfg, + act_cfg=dw_act_cfg, + **kwargs) + + self.pointwise_conv = ConvModule( + in_channels, + out_channels, + 1, + norm_cfg=pw_norm_cfg, + act_cfg=pw_act_cfg, + **kwargs) + + def forward(self, x): + x = self.depthwise_conv(x) + x = self.pointwise_conv(x) + return x diff --git a/mmseg/ops/wrappers.py b/mmseg/ops/wrappers.py new file mode 100644 index 000000000..0b319767f --- /dev/null +++ b/mmseg/ops/wrappers.py @@ -0,0 +1,25 @@ +import warnings + +import torch.nn.functional as F + + +def resize(input, + size=None, + scale_factor=None, + mode='nearest', + align_corners=None, + warning=True): + if warning: + if size is not None and align_corners: + input_h, input_w = input.shape[2:] + output_h, output_w = size + if output_h > input_h or output_w > output_h: + if ((output_h > 1 and output_w > 1 and input_h > 1 + and input_w > 1) and (output_h - 1) % (input_h - 1) + and (output_w - 1) % (input_w - 1)): + warnings.warn( + f'When align_corners={align_corners}, ' + 'the output would more aligned if ' + f'input size {(input_h, input_w)} is `x+1` and ' + f'out size {(output_h, output_w)} is `nx+1`') + return F.interpolate(input, size, scale_factor, mode, align_corners) diff --git a/mmseg/utils/__init__.py b/mmseg/utils/__init__.py new file mode 100644 index 000000000..e7d28670e --- /dev/null +++ b/mmseg/utils/__init__.py @@ -0,0 +1,7 @@ +from .collect_env import collect_env +from .logger import get_root_logger + +__all__ = [ + 'get_root_logger', + 'collect_env', +] diff --git a/mmseg/utils/collect_env.py b/mmseg/utils/collect_env.py new file mode 100644 index 000000000..8b8201966 --- /dev/null +++ b/mmseg/utils/collect_env.py @@ -0,0 +1,70 @@ +import os.path as osp +import subprocess +import sys +from collections import defaultdict + +import cv2 +import mmcv +import torch +import torchvision +from mmcv.utils.parrots_wrapper import get_build_config + +import mmseg + + +def collect_env(): + """Collect the information of the running environments.""" + env_info = {} + env_info['sys.platform'] = sys.platform + env_info['Python'] = sys.version.replace('\n', '') + + cuda_available = torch.cuda.is_available() + env_info['CUDA available'] = cuda_available + + if cuda_available: + from mmcv.utils.parrots_wrapper import CUDA_HOME + env_info['CUDA_HOME'] = CUDA_HOME + + if CUDA_HOME is not None and osp.isdir(CUDA_HOME): + try: + nvcc = osp.join(CUDA_HOME, 'bin/nvcc') + nvcc = subprocess.check_output( + '"{}" -V | tail -n1'.format(nvcc), shell=True) + nvcc = nvcc.decode('utf-8').strip() + except subprocess.SubprocessError: + nvcc = 'Not Available' + env_info['NVCC'] = nvcc + + devices = defaultdict(list) + for k in range(torch.cuda.device_count()): + devices[torch.cuda.get_device_name(k)].append(str(k)) + for name, devids in devices.items(): + env_info['GPU ' + ','.join(devids)] = name + + gcc = subprocess.check_output('gcc --version | head -n1', shell=True) + gcc = gcc.decode('utf-8').strip() + env_info['GCC'] = gcc + + env_info['PyTorch'] = torch.__version__ + env_info['PyTorch compiling details'] = get_build_config() + + env_info['TorchVision'] = torchvision.__version__ + + env_info['OpenCV'] = cv2.__version__ + + env_info['MMCV'] = mmcv.__version__ + env_info['MMSegmentation'] = mmseg.__version__ + try: + from mmcv.ops import get_compiler_version, get_compiling_cuda_version + env_info['MMCV Compiler'] = get_compiler_version() + env_info['MMCV CUDA Compiler'] = get_compiling_cuda_version() + except ImportError: + env_info['MMCV Compiler'] = 'n/a' + env_info['MMCV CUDA Compiler'] = 'n/a' + + return env_info + + +if __name__ == '__main__': + for name, val in collect_env().items(): + print('{}: {}'.format(name, val)) diff --git a/mmseg/utils/logger.py b/mmseg/utils/logger.py new file mode 100644 index 000000000..05d2f1343 --- /dev/null +++ b/mmseg/utils/logger.py @@ -0,0 +1,27 @@ +import logging + +from mmcv.utils import get_logger + + +def get_root_logger(log_file=None, log_level=logging.INFO): + """Get the root logger. + + The logger will be initialized if it has not been initialized. By default a + StreamHandler will be added. If `log_file` is specified, a FileHandler will + also be added. The name of the root logger is the top-level package name, + e.g., "mmseg". + + Args: + log_file (str | None): The log filename. If specified, a FileHandler + will be added to the root logger. + log_level (int): The root logger level. Note that only the process of + rank 0 is affected, while other processes will set the level to + "Error" and be silent most of the time. + + Returns: + logging.Logger: The root logger. + """ + + logger = get_logger(name='mmseg', log_file=log_file, log_level=log_level) + + return logger diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 000000000..9796e871e --- /dev/null +++ b/pytest.ini @@ -0,0 +1,7 @@ +[pytest] +addopts = --xdoctest --xdoctest-style=auto +norecursedirs = .git ignore build __pycache__ data docker docs .eggs + +filterwarnings= default + ignore:.*No cfgstr given in Cacher constructor or call.*:Warning + ignore:.*Define the __nice__ method for.*:Warning diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..6981bd723 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +-r requirements/build.txt +-r requirements/optional.txt +-r requirements/runtime.txt +-r requirements/tests.txt diff --git a/requirements/build.txt b/requirements/build.txt new file mode 100644 index 000000000..2f74f3d17 --- /dev/null +++ b/requirements/build.txt @@ -0,0 +1,3 @@ +# These must be installed before building mmsegmentation +numpy +# torch diff --git a/requirements/optional.txt b/requirements/optional.txt new file mode 100644 index 000000000..47fa59331 --- /dev/null +++ b/requirements/optional.txt @@ -0,0 +1 @@ +cityscapesscripts diff --git a/requirements/runtime.txt b/requirements/runtime.txt new file mode 100644 index 000000000..a03605f66 --- /dev/null +++ b/requirements/runtime.txt @@ -0,0 +1,4 @@ +matplotlib +numpy +# torch +# torchvision diff --git a/requirements/tests.txt b/requirements/tests.txt new file mode 100644 index 000000000..400f79cd2 --- /dev/null +++ b/requirements/tests.txt @@ -0,0 +1,8 @@ +asynctest +codecov +flake8 +interrogate +isort==4.3.21 +pytest +xdoctest>=0.10.0 +yapf diff --git a/resources/mmseg-logo.png b/resources/mmseg-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..009083a9e80599a1893591ff362da377c94a0975 GIT binary patch literal 44728 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 literal 0 HcmV?d00001 diff --git a/resources/seg_demo.gif b/resources/seg_demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f0760fe7a86912c07f9873eec3909ad41fe2acb GIT binary patch literal 951973 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Ž?HrLyN0bTYv{xLq0acAHI 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%0AM5-r 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 @F^1ZSo_F5hh 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

AbL({MeK0?z+G#QW4axPJg}VkQ!ZLX?0p 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

HM!;_W~;5^aKo`3arwtuk;)_vJo0w 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�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ó=Zgqs61FSe%Vk$oM zu!{zd@#4z&UN+&mGbd)5Tpv^gjj@6T4y7mD?W-C|M}?(6iyV!a>&K29PMVC}x+DeI zxDkO{DW!8~Ffxl@iGmL2X3fr<1C5R*FZIUOiyA;m=MkPj*QI3z8-6@_tf9-JPaoEg zsZ_Yy!jCWi*RRy7SO424RB$0H4*NQwm_3vwlTHMsa(TouI9XA0&=V_ASSQNoV5?QwS_8TKAu|yn9HKkabga&{Z z|Kx{5n$eSV)gg%;e}gQ=q!ircwVrxXPFbaujg-QocvNz^WmjblLJ9{Qpf#VFXVOy4 zPajT~WFC9{XGDPQ5Qv?TL-f}Uofn#8CuMT1QKw-P*5Tk{%jh@+k(%+SBagJ1vd|#1 zAz>eiJ4)IWr8b?HDIy+G6=rLtMY`Kqj08uAqdPv)Bdbp+hewFd(aPqLMpEadp9vnI z)KL$p!&_ok5?idXVr8l2u~Bt$YL{QV_8ywkPD_jvxZbL3QU2iQ$7m zEwww(hu6mHWJ{D@%rxX}VCZsF7@|L}gW=J_e|K)q4gkv>LT>X`-{X^K$66!Es(BMOzK|F3J+>n+Iz zd`ld-ORb9k&)~-AH2lws=jw6DLBZZW$$tDwGv%CXZvT{EPD)DU`aj|l_;XpyGIui# zq(XEGOpCRka5^?jA!w{?0@C>7Et*sS8-Y?1J)riqH)&&obx56_UU#lOmFOkvV^j*i zmXJ*m0dQvPSK8ioz)ifUBWX(r%nrtzi`5oMh(d8vP8L@L(teoNt*K$y)$SGD)b@F576$`qnCe<>b3N_-Xl(o>9 zWipfPDW)2A;j@5RD5KQ8SklHfo%pfxJ0%pPGH>U!LjK8<5aQ4sdZ*EMRLGDF3Z6g7 zdCEk}OP#Nxn~fOq&bh_1Z59bCA8r@EP@0osrR?V^ZA!0z|GrX=StRH{A8OUBA}owo z^<_jy0;V)lRE>CoDoBBr2ZD`nj?si4WRNyOZ2s|ESzM|&;{Y!cerufn1ktOIdLm23 zX?jHD-Z~9J&sc_PJmACU6G(v%R|$@(HQg&f-xyVcVzzNa-704xs+G-lwpm>TCP@+) z3lHcltZO+YMr{W%h}mwV6U+$hR!3FdnG3hnSkQtFncLh>l?)slM{i>aS8&oaicZC; z@o=J3OaalbLR4Ew_$NT*0acTkFls0nwgsg=u^sxHEE_0WE6Wb_vaWm|b$AIC(1uoJ zzjQBG;XAYW_U4ir0G%;C-~rXbM@Ok@re z{fSq?s1m*E)njI-3QJkWx3l(*ibIo(If2l%UVWyTXRjw9m$!cI6tuDb7 z{G(LE9AQG8bhm2O=!7Yp2X92yb#I*qOeK8R@hX?HH)SsKns*%9!0>M}Zq}%PnJ?|~ zfs=`NZH_2bs@8BIhJcH}Jb}0{Qe03-BfSuimn&p}4!MqHWv~0h=;TvF@5xODS#lEkvzW_X0jPR|jLKIH*1* zy+Q+Nk&UbeSED+irT{nr1Fq`P#@ao!-T-QE@c|Ef02sLjur4x)?=$q)9>C709~%_N zOk-BrFI{%D*NRBGzIDUkJgJ>8%-m|fJmyV!?r}0uifb!6lh5IGcZLzlEp}cjhEl68l@1|$7*)w@I|GnGHY`rd5#3D|opP?Jc7(QCRFy8r$Z`eJk zoco1J&jR+wCUijutaJBuH$^^bnY(vd?VygjUWjb^e(!!=}*o|S4envaJ4)6P;n6xR6w%nmZ)zKS> z)cM=g-InIL-s{=Sg zu~puQob?R|IXGX1#mabzTHI9)|FkikfSALyWd_V)8@l1seR$sz6`FJ%R@Q;UB-NiN zM4l5EogZM&YmCagDBw`tR}p!~(Rkco6dUm{liv{_>17tb4d5Ld;Oc>!ScKsN=F&w7 zQ^93!dP7#G{9CJDhDWOAhShNhP@dgvYaxG znoulVU2WJX&Y+>_)3xE?|09YI;T4|WSRnUsQu$59VU@=bW`T5#mZ;3j7{=nvOxPP# z7BR{o3N6m*;bTF)A}prNC%&3F@*@-i(|!R%YOvv4Y#DvzLN2IbfazY^ZQ${_5@LWJ zD!SDiG$SAJ7K3CQhiTz8c;R70A2se#M;@XfC1Um=Q>`!}BlTGi3SN!$9R85jJEmU} z0bM&HTn@>G1E^yysv0Twnkmv?DoW57qTVavVn7}oC6eK1fg3>jqh~#(&5WB4^@4we zW9-of2HwH~3D^dT+BOK~wJ;mHFyk|#q(?rVpMZ?Zb-@d=9b5Jt9$ttIGJ&V@Sq`ET z%{`(_79mtlWhbEH{}q^{0X3fVG*&~|Bot1e(_!Hi8VJjwnYMslK4PX*FePUR;lVMK z=WM1xQV#;9A;U#kvdoZNbfrSFrtFzXl{HXAy4{?_j#&a%3H8olU}VRQoZbCaAA+QK z6^bCDL3lC7T-MtkvO`mCBlqQ$U;35a$kQSqPtJvh`a$AAe1VKzA_UgtI(nv)3?+1w z+_3@R@YN#=_S?tI;y#AvdsWvh799R@j==CEVs#?+#8{+QO4*4WEZ`os$l-YQL>?&- z)1Vv&&D9I~W(r1Id9D|!4We0%)E)t1hl$zNEFxcW<4cg3Gh~}gkfQ?T!SGGl1u8F?@1rc16lqPDSu4Gb$=vYG`x1DTj6+oRX41GG@Y<##UBpN+gjxaN>?SW{Y0e(J=)!?4OK& zj5D5I|8B0!aXqV}is5Kxk9A%uVtVW5CCdebAd%Wfd7(mB1}Kw$C6dO4Fn%1Wew>-9 zDulA?MW*Q=!s?kJ>X>dRTX6`26vbUN==Cw@hW=_I2`gg}>ku-b_%&uRGHX|{O?}$m zxccZV(WkUZfUz0nl**AsK24HH8+)}2IRGiNmg~mqsV><@r}WZ%Icu_-VaE24rQKK) zJyQsg4;YAQnv~e@?dCP8Dy^Cv-(e_lcA;=8ZIVRho9NbsV(5W<7{daqHiqcKLe_x! zX`^a_z}!tF0^F(4q06eR)iFhdMy(*`Dv_Biukg`^Sj5Y&45c#a*VQSbN+I5Qou=jo z|GS!%WIDi+uI7@$Ca4nXy;c$N;Ry+nY4Ta0p<-#62JCPqsufrv-S(!T-r2(Xs&fK_ zUv90vE(NoAL}F^syN!oRz*bLz;(U6nEcz|SqNR}OD%0w#(jp?@%9rNpE%a2+m{ix@ z-rvn)-JV*aVww}!Hicav?rQlApb+Shl%*T(1N31LD*hT^tYED2N`#W$)ZXZ2D(c)O zBDHC4hj6X?qLm}^l_<%_W_n0xzSE>^)j-jap-}m1I2xuouCI zoPH)f%_Qxv?E?a-qOfU$S;43NXF^&_^x_-T(!maCU>aCcM*3!DI4HTaWlDi?|GZG` z)IiYru57|CC!4k}={~1ANlk6i7BX-Nx1PU4GIu#J*UY>@q>m_X3vq+)T)1jlPFuvi=_ z-0o_PhOZ3MLnY^}5)SX!zDyX;2%icZ8B5eNs3i0X*A*tvTdZa=EaL;+=Fpg`8L)8G zA}k6oh6#G06a!KVrsbBxionKb-}$TP(hA|?aK^l3w-{eGrtADn1l|l+y-3 zBwoC+1eNd%4Q@I2GBCrP2{I_%`5WifF$^ao)<|SgrZ3WF?dUda={ggNATk;g>JLeo ziB!NC4jerfkg&Yg|9W$heMC4rE`n920VDKqiCiFn2N8Sn13R$rX6j6?u4tfGHsiDw zGqUqCVw=c`JZ5k#cV!06a-bd!)$+wkO0=Okt($4-FXN%+%GMM|H6BT>3a^}U@~Sek zBn}4(_HFc~*fAn07*T|qDr>|e>*6kL^F6b(J+m!E#4(IYaTN1w|41#y6jJ3-Zx#1^ zXFQEb1rC;1T|kt9XI|@dd+MyTzTZXbLn&@5EO&rY7wSt#M+qy@*%UM$_b&Nr>3TH= zIlHi*c(CMdE1KQ0G(YbR@8t%?kxY;_5B`NMD_EJigb*)YzMMh4Id+#Q(-E)q@)Cke zUu#Tja%!7)>Q&7E%P~T30Av6%xxx!kEIsDz)MI2SNh01!1q-=E*JN zvU?Y>g{D-NZZcN;@@YGFf|Ar&({NeaaGNgO74BWfC6}l6UNVDGhW}^|)vo(p8XE3g|8?zL<6r^aN6K`N_p6IvHzSZT0dZT{@TWv9 zj1yEc#~zGP_iTu$@lL?DG~TN?AY~#`wT(je3Y+QV&KXJi?f^z6)tGQ{{3nxmUtJdcsi~?pR9+^^o-ikoaf?B zm$InDpV-)3tPO-SEVm}?wV#*q%@OiE{-34i?uH-R{}m8)D+Boe6Zv6yb<_xXaOUxv z>pI|Mnl8I}Uddeh61jsn1#wvUYOp!`vU#v60ULh#OOV@f*NomwvP#3}IzJhFf(&5m z;hV!bA(exiCwqxQ;FPI`8#+U;_Vs4aY4HH-nV=!^tT^W zW^*z!C#U>{P7rKpmTcpUfppk7E9cI5PchxaFhQl~f zV3f8C;%QHMudDOK*Ym3lak7|3I@t$cg)P#A#p}w_sV3fPkf0vJM zyYHa=k#jq1gL}xEya4uW+heP)s;_W`_+{wj|IF_u;1epky}MuBx|Rc=TQh+Ubw-xh zUymLF(T}*o6ZN#7XUXQe!F!OIQivv~i_{myDd!*dWIfhfio|c`>>4+q2E{2k*tEC# z0JFD0Om%ddEZo0v(|tCgR!H9yAV{G+uKE^P+p63nI?TCX;MchFkNt=0{08Ox^MhK3 z{>>R%%!P~cqNQ}vgMO_eg->ed<@-K*>bm0`d1?a-{CElWD|;?h{npX2aU2jhB8rLPU^pg`OJnokY%-B?N78|fc6X?OqQ@3 zK7|c?t&)`~6u*C=G(l{K&d<3%EOJqxLd;_;&-OGINC#pt9a(1;dmdO>wcPb^lrE<)@mN|#k#SQrx1w@^!1V`Q2I zaM%zbFNAI9eZ{A*o1K?8HKyZe|F>htIcojB{p(h6;K9KD!Y!u3gJKQ>13q?4xUe?F zlAl#Rc8^;>M0d7kp{PNtnxsPYo-3^c6Qz)J)r8Z@@(`OPhzxW(R9EF}bgNLhc8$d8 z#Y;$d$_{5d`AK!KfFp$-eJRx^)3L4^u8Wk^sMxD=rQVq|*U#m5b<4-rVX#UJmknq( z+46k(_19BKDefj;{&(>b$}1831|;w+`7l#&7_t~^3?PCY-0lDZCyWQdV|Yo*itMxq z4HQQ<(hWp25)lr!yM_WukCl94Q4k_PG|>_yU^=NT8abJ1H~)65ZnWT(;|WL>k1H`X z5|2VrI-)+jjtJ|*TS^qD|G1kf!&%B}GR7;&g7@MB%t8z4qi~xG z?<4a9ro{LSxDe|c=RZ8#-v^vttAaQUlsIsKH_Hr)!l z?Xxm}{&6rWD%GXe(F=cz^4(;Gc%n=?lPIH1{6rLY5$K*MMFDmaAyOw7X|&8bz>AyU*K|65cxR$hZGYGjf%4)0cBr}x@w`*LIyowo`sjnmQ#^>>THv)RJaX;6HboWj9N-el@0#uW3Y?EQ^6l|Ji}Yup(em@nu*Gg&X-wn3Sn%2b?hkg| zHRFA3M)}b?7_{T9MXCsPN8a^;_ny|D3zBtS_#p<_+AR3sn>~A#hw72-6=yYV@Lb0^ z$+p|?j0s~H|2592VZ7b{smbatg`DTdPo6|(%caEJd222n%nqidZHna(kTJK_vDYktACvwg`BbOfv%6lYTtPsqqDtaHoIz~sULRqR|ov>mw0bwqd2 zv4d7))T1c!t}$^yF*bZq7(wAj-DS;A!gC&HP&X!iNB~`Liqy4Yazw~+QAnTsSooGU zJBvL7|7sYFqL0Ys6YO~me!7z1j6ya`C@qPWT+APmjpikB%V@k23Y1{n(55H#3`FFyvHD^1w6)3#88g;+8nvbEf~s< zE)EcEJS#nzQJJz-YW$0&t5@JR>lXScNVkL7D4B=>xqHAZl9kd>ZUynxX|rZgS(BjshOn zOvnL!aREXE(L+k@lQe<$3z8HwEkqiF(Ir z+7YWyJ?Kb~<~Db2Gq8_U=>)f-HQxDyrx!_mpA1HH}s& zV{wHLQuCzooqKI#BKj&+I{x(@3?r;d#Y{Kv+2+`>^(1YOAreyJZp!HT(A-BzA z)9x1DBS?*GJLaGq`}@HBHujM5{E}rko5%_j?T^9*T zoa|yz{0Y_z$4bbF-Jo~x(ZsN%LX? zR#%26D(M@aIUmg2H+GB_GFO-5u!7~$yqD>*rIpvH5MHgzI+cJ4sk~}YBU!zi;o||A zN=Y!QZoQE@Kq}0fAiUJ|ad!KjgYjhHjL2gd#MUh=NV4e`akyi#y%a3H|1)E>E-=u9 zzP6!@1!6|ig02F*>s=oW=-xuX#(u>ys4HD+S0~v*j&mZx_Sm0T$C=U#N_TtPJ=6;^ zHOJnJ@~u-#Pq{oOqa@fv?q#~yGaw6R{x90Jts<7eOk+ENj zJACDmRt#>o5$CPI;R^9!n;My*T?{#4`Lvfo+@(jQ+wDe+RK~u3xug}2-d0}?v2UK@ zyblcAyU6t4Lr-sd*v;BeM>*oXfS0_cTneaLdbb4~^T6d~1T7neb24%WkFs4kV5{6# znbtJa1~3n$Q+4I!R^!rLsW@kYZ08@Iw%&Bft3qSD@YzXmceu@S|G54<+~Ou}$+5uK zpgFzkjhuSE&Gd1kcUtLn7sQRToEU0BQ>c*Aw~te=*|2YBzL@K5m5a_!=B3OqVt z_v4n@`;}B{Jz<~-1?0W(`#n>Vl)`JAwu>+`kU&tGrjbL3dI&DTDX!()yV&TvvHCk{ zqYAtuF2fr%4?D5Mi>`=rG{SD2$n?Ob6!7KDZ zBPu_~Vv)I*FQw`GL3wYx#=Xe&Wn zyhMy8n6W{bdl|_?MItbcMr1FV`m{%MryE|H39CM8a^4x*zPnCR8_0q(}cE zIEe!@3Q&wgNffpjM+0m)Oc0<*>cX(=35w%|sL;1CLlO)bg8HF=QD6&q2o;?H6Ce6I zko!ds?8O91KU~rt=@W!K<2&JMx#&>A?20jp>OSvlg+mj+^Q%VlGeq>mJ8QcZ_Ip2i zB*!`$s0MSNO7z9PU`L`$9yJ*_CG@cxQbksbq^#Sz2`j}bQ>!8>ty5Ez>zTU;%z*uq z#c6Xu3gm=Tn+5*6B;fN!CSD#K_VB zthvYkBO%8sxc?fYS>uN)?8gY~Nq77OD;UO&$;VY>E$mq`)ay!5%!h`QmL+LL2fz?6 z&@qi{L$xe2gRsh!I3`tEsM;w>y{o=%?2J6*!eNT7D@&=t%#PHPwurkp zqzQ!r5KbCF4s*G{Go$fo#0 z5CABZ(kLwe0jSa|wbCrb(k<1}F6GiM_0llq(k`XaGNsZfol*g)PcW@g7cfWalui}3 z#2Y&`$xM?3{YTA^M+d~sKD{SC)zBT{$Jm3-$b>pMa!)f{gFvk`sm!+uK%2239jd4n zNjR#8yG1)y1{ZZRAY;+&Q^)kPnUADEP$J24sZJXWx+}8ITHLR@l*XF-PPP+I>kQBG zjKQC4iX+X*$z;zT`>H3XQYj@?Gc{H*Mb=|g)@5B*G(FR2b=GKwR%XT0X_eMVBv8CC zP|$oV^axE;b5KUzP0Es^as@L)|3bKgG1RE@g=7P}&U`m+1%~GdiSsZ90&}G7+S3z_ zpc+xm`a=jMN+76uh3wP=MJl5ieYQT75$*e%y>v#y%ux{o%pZN3F~S91ojJrzvu!le z=Tn3ATfo*M(g;9+2rz*vO<9#KfR(M*V)as%MOHSY)@eOfFjdx?=CQ|9vz&OA*y!$drl*ZZr-CWFwc>&&YI2Kf5K0UT7RmJ_SIqM@ZBUL}MFn|L-VAWk+(52%#w&OcC z-3FFf4CZ6lU0~0R;0NyG3)bM-b<=dr-E5Foep^CxgInKiGOFFp`>3HpF(d-4FGpS1 z%UdbkQjO;AHxAXwUw~dc-QNfa;(J|%5yjW9&C~-?pJ2SWPhDcw$kzWLL4~DJSZ!GA zqPF%0J)F2qahOJnwcl9$Q#!?u>FQYj#e-nF9wdn4IgV01w&rWb=4{sHJT_Ab9%R~O z*+Bkg*)3!f|IpxbHs^Fk=LI;~w&c`;Qp!^F%(2Z=vXSHkwd8!3FW2+}8Kz<0{b$IG z3*&cRd0!Vnvd z>LcC-9t&S4qMpfk4a8AY51xr=#_JN?Wxn*~iJd;W+%SXnK4YdIjqz4MndqtuJ@%x6 zW&rBP|Ay?ymTWxM(xdKNq{i%|?&ETPT^C?#yMF3;UgUR7TGAU$NR~~coa!^q>M9%v zeXeCqgU*`Ujv=!}$UHdf(stg%Fa@{f=-M{Qoq200mQiCA$>{`2GT^>u zp4_~nx96_g!}U(W76pQHKz3Ttbi0S?Ig`mI@A5WppjO>*R`1N#>_OI2DV1Wy67A!@ z#1k&NB%3wUPG+T|mULBDu6~oU%GZDjmiDqYKt19$*#gxDZ@=Jz&lmvK9u+4W}c_D*Wf z|8CRwEiiC}Y5JaTp1ibq%tx^JLdZK;m!RQs=UrRx716aOY6AQu~qY$^CWh5#S~ z{W1_OP>2*T^~+fBP5kja&~)TBX)~YelB^FpsbvjsZcxSRT>tPO*-?j;AM*tzXYQfG zo!?ol^GRUw`{MJU=H_N+-DYLrnsxSR5A^iDaYeuJYfo7nM`sft+N1T|)q8aB{~jR) zWe7^b>fh#59D)~qCI#5ueYZ(upL_F)a( zl(%*U&f{tiQ$V(HLAGoJ9^EX3VD*OG37=(wR@zDj@O!IT{)564e&H{!@Y%CUA`9F_ zw0F1R^0f9A-7ba{Sb=|kUV*o7NPcivOZb-Hy8(eP21D}@+X?K6W?k->#w1nAb>G7E zSCmd1kgM2YQIQa0ianp_WKHc@0fMn!N2*!M|o)N>6F*@oY#3p|HpZ7mU#{S z>~T1ZS9@}D*WJVRT21`FL&CQahQ&~r)p#HG42#Rbt!byXpRI}deW##6vHGh&b<$~l z$s{Tymh1J6s0>?2Am6-=kaLLF%)N8FT;6?=;bmGR_8^1EuW-RsNGkx~X-WZ>c^km<9a=*>3`JlEP!^`oSq;IuYvq{xg zU-hsrAfQNulZbGLd=!zX)atovK9G^h^qS0Kx7sdtk}-0};G?vhJpM7;_8=$0z!rS7UENw zu;B#_slZr#1*??^X_rSRHxbLPHS0BxU z6#0o%8l642bn=7=Y08j;gaUok^k*TcY!vaChxL@!tP#4NLC)f!UM9*7&`tIw=^WeR$>D7A%n)z)ZvHN_~uf_a~iBH`63xRKiUPGb-_qjWUVML}&I4D^vE>9Iioh8Y4-oDs6kW?Mt2 z4b;|aHX1k=jpF^N-%|In^afaM1em2)alAA{OwLI$|Ab9Xo|yzJ9ECDOP*l1}iULqh zQBs{%1`-@vDMf`|p66ACRDXi51z%Y5aRpaeT`>^i0wF56qKG8&r(314yyXy@bJk@Z z8yf~w;irNP7HX-5ooZ^T-wes>kndRdB7+O6IL?S7N;+bREz)|TuD!U}3v8PXd(cD# zRtad3E-uS#v#%0R9775bgwSmPUW{n*afT zyQx*(w%qoFU>XjJqs+)EqB1$LGu?GZ+o^9Z+6ln=~e&~5+pI;}u2*Hmq4%JnJ4w~)5 zmT$Fyqc)qU^R1S_iW#j1WUTR}Y9Z~h(YJIu$Apf#-cHN1uT1;w7sBi+Jg}DBi^ZP* z{v2I8(2LCAT~N2}yYr&4|LD$s{|`XF8AEu?NPr6vFgPnA&RcT;m*X7K z1_*YiaU644qAph-txya_*89e?a`&oixS(_zNd@?v2c?i1V0eBBhv;S%D#EnTcD1Xa zVW0-W8&zz@}U4}~Dfq4bUyyTF``hw0FUwj#nkCT=ZC zc{rbNva~om^}#jvNgLWGfCdVi*+kh*9JLD_h0zIL?DydIwWVzea{1F|GMSxVC^B)HrkhudQ zAfAIulsgLGf>JOlMePiptuEG~zp*150W@R~+X1b3y~mq|P!=Vf2~ltO0)d#^q~*+p zfL%VyiBHqrV45|;i(K-O4mjd6S))Q%q6}2CY$*+2YQss!ENU*yj4uW1&j9wYpF=Fb ztJI(mYo4?s)_ z<4!io)vqZ9>JQr^N;+?G1P4Tsn(H7D3eHQ&^Qw2fg=BAg3rR>8O*W7f>!oj%0mtk4 zkgo(xXd?k7#MQF&nGt`-vyCjhlCEFN~V(U__@Q)I4TcBMOqJuLWtx91E zVh>07!Kqd4@NoLt|F`bck3`G{bfJpjJU9TC0T$>|P5fJ%_JT6*=mHV6QUQ5hLWVUB zM%v~wn}tjOsiUz+Si`2({qgU*4`ghE5l~tG5=#S|Z9>k0*WbWHrIfF_YLy^EG z4p>>yPP4ZHICU9j6Xrnr;>wHMssqQTRqh~Q9FEc)0lc(j@z4uW2!vKPR^6v zC^fKf#bIf>|8UbjjP;v+sSabD`&0WZwNunB>|XA9-g@QFffKBWAjLUFyH%CbLORlb zcg4})(Qq1I4NFNYJj4XXoktN{WS)TlZa2+;gC2?4&6`>{)J zF}+#MV~^%pZ*Mkv)iV=r1@72p^>sRGarkhcjqcv~-UNe(TYy13bHIDSB{vYA=xb5r zwjLh?q*cZCl~4N8dW=M{@8&;ScepzCxc$J3a8`^P?=%wm`G zR#P{#^4(~xVf5xymlNF;e@ZR3fefnGzM=a!eOWPg-cqd zn6F-BAT?W1SG=~aFQ$Bl%MFgF+IhNF_s~ZkeBe)P8JYiJ*hTqDp2lORc0^X=T(&1F ziP2TEkZi`5KBs_gh!g>U)jOKw7$@dxvQ~W7!)myvQHEwzV7GL+V}BkJfdCb6`KN;D zU<{%l0G~5n>1KYNHZw~Fa%AUxlE7{I=4~{Vd>&|7rvwH{M0eXa1+0X3;@5Y6$AnEt z|6l+&K*+z%^iWY4Lon2CtTk%1*J_5xej8_mw19Sshkq(qa`rWb;{|`3Crz)$bs7g= zNHBBcb$&)gX%l5w4GIu&n1u?A)`c8la07se;5UAIr)#fB zejNpI5qEJ~h>Nb4g%sCXrk0B61X=Htfh(v~YFK%(<8?(Pbpcj|YZ!gdB?PFL5E_sH z90**&r8g|a4C$5%t4RA_!EgP|3G*wbxiD0L;KA=IEd%OZ*Tg>{ffjO&&!_6IcY z$p1Tmabp^VV4TPYvGj@kXMRA)EO9qdn)Qo!U>*k(ehi0*54nVfs7rt+g;Pj|dsT&6 zScRf?g_7rs^QSs`LwoahjQI#d@vwW#_-60tZVw@iWpx1u2pHq&hn6={RI-SsC6Rjd ze;_w~93qFgW_h=lh$6U4>WF(qNrlFEk;-R`CFy3DM`mz1kPSBuwpiyfJZ|8#-=lyT{Yj>H9$f9VsD zN0Lklm1P(Yed&Jycrk@1faDd8($aCWH(&y`j<)BA`E)puw0Tq+lzm7_me_&hDF2Q? z2}eqal+@R68_1D`S$X;wiI)*d?;wd)`Hjanj&Wo;XJozr2>&ocuURskWhGtEGKFsS$lc*YI!+oiDyjlXPmaiW`oI^m`Ih$h+4syc7T*2 z0{~v@q-XdQc*50{+lV(u`H6%EHBi)n^_g0QmXz&?Aq0t^bJ(A|C4+QHnc?P?@;HY2 zxfxq0GZEPr@K8_lp;oRkV=n@7gZP_hXbh!j5kz;E-DwvH!isq(Lznnc&6%8rwS;jg zmlo+ecG;2bhMjlmYOVs9IcgL+37+9;izhjt<++0L6@{I*4-wEoKY4zkIsZ^wH=)HL zPf8l3FB*l@_mf0)T2d-@IRt_)N+E!Upy8>33+jl5S*6@Co8-u%fhUJ&m@o99Z$>GY zDM*_nR9EZyyMRb{cj;iVZP? zmG&u`PoyHWNrp6-sF|vPqG*nkMQOAudaVMdshM{1c$Gi+40$@LEm4H2xQexzgdk?D zZ7HC9N2qZLT0gp1hnJm@I-c68e!a*IlbVXe$D`&ctO*LFSPG`EN&llg6LnnZ1fQp(B*{y}ToE++^e6f^0N|W#y zDWL{~>)NhycBvX0tS0KKZO5s}da;AYA|Rv&`eJAD_W=Abs^<8jvgvIohoONZwg<}} zBIKXIdA0!Cli(UN4Jwcj_H_Q*v`b63;@XJVbEX-(om4tz7@B;~WCxI=2+cB-_FATP z+Y5?zNiIMn|5B|+s9|@ZgtNq)Y6^=HX{g|OnsixX6SJs*IRBcAX`?OnVgwhbEa-dj z+KTh)ZJBG4D;so!rncNUjR;GVma4Y#nO_V50hz2drZbMSK7P z1V1lz%Lyuk+>J^uHB zg65kf7MdYznlq$~{q}85D!}p@y}*jS1N=JD3rk}RLNgm2fo)bKeLju7=B^D5%q^b+Wu;V&4`Nqw=pUfL8iieol!v$0| zUX*ddx7thvTgR)as&s5Xq8QAhxy#H7u}~|R0!6Ik*>43pw_kj}&pMPoiNp*`ynAND z+Chme^vbBKvYczl9-3AFpq?Qr#AFb;oLt268~@7QYR}HAtM7@p_$!G4Yp$c~zeW>{ z{$T;6lMxKy&x*`p+U&vy?9H{@&1~5!*4dYh{mw(I zVf&eDp1i>Itkm>-sBIdo{49eBy}yha(BB~z0Mfh5#?h`|0Z1E_iL8jR?24np%?ZoG zpnJm4Y|$5R8100?h4@4rJ<=h4*9N55^?QhX{jWuNnAq8az)~V0thaPZr8@ zo70b-4dF}&XJD*ox6&mUtk*|UNBs}+Jpa%1T+ftyx%8ZAe0zzk%ZP@X+IlOxR=iQP zdo&b4&`mw2h^af)*xbk!iJ?kKrkMfQ)sV*X6U~E7i+$+<9FPI7B2UOX z(qr4zBh9OSjnbR3%v;*nPrP;}9H8Vz(NRp*0X2-NeUdmW$g}uFHayvnsar9K%ZKU3 zbSnVTDh8RX$&p*RpN!qW?Zi&)x_*tQ4$aKSxQB`Th(JA$Mq3M85qE8Y0kAOPVcjgP z;KPO7#fPlD*vhmw4YhXbnNcoS58z8mPeycFn=l{o=@c$0;d-1kQUK%`}{9 zhrH`G$d-iB^(ErO4$#!QQQ|fG%I_h}wOvZsK;NeQBqiw{cZQ7?j z49Bx(q^a5q{(%6+zZC7@5upmSJ>hGP0d1ZEEeq!vP~ot!0U7>5Z!Xw~ovA0f*05y3 z-eJPMD&H)qX;u_q$kN&%nF6onA$LKiYINrx=+qL=m%qh;H)u576 z%*DL@<0hEhJX_@LEhET1Uqa60sDj`6ZLR#>-~O%9fe6ZMTIK2;!d%XdQ~B3)`K}Xv z%I{DFwcWCF9_P#c=53Me&Hm<0vjGbbX9{}GBD>ywUdFuct8!-8MT+LcJ#UIW0n$zB zb$srSKF4SH!8v{Ej=dRn4*%IBOp&qn;ZI$g#dvP-j_NMzH2-T>O3suLeeXGIDHaj4 zoP7nmunRd$<-1PLv3SppOyW<>$cad3P8-Ha)pX{Ht{%U)0I&da1m`3_M{SPsCa?0$ zuJX{%G+qsPBWdlktBjybxqt4=cWW{P3M)vY5CrhF^seY0;OIrK?&xmx>AnC<)9&=n-P&@T8Dj?hAy-o766bdSgW{>Rtc*u@QYUcXLg z+w3i?*D;RtnQ!ix-~Y^tuj&6C)t)cfw%X0ae@BK)B^qbEpqfcU2?yrejepVHY%J4_6+PjuW!P^nQk+`pw? zDiZ5JAfY^jMB@>eR4$oK=My>zOs4|t6`R#=wScX+`@Mq4WwIEZR)@W9_xo+u7U*@m z9iG?6_xUWpjm~6{u+Z>u&?<0)u@PhA@iD`(akA2~Qj(z$4v+H_lv8f5?&|Io)ibax zD>W67aLrWC0RKthKp|9*AfeaycLA6on0VM&7#ZTYIJuWVQ8#pSnvIms^!hBDE}F~@ zx;tEaoE)&454`+yz$rKHG&Wu^(X~ERpdw#?Vt=Rz3SdBi0|!!>GJwmrR7d}D#7%1JL*Lt337QsKhSL}#wO=PbOPhuk2=?Dn?_l7og@{8o!; zQv_R^F?ZgaE3@TJZ>ROPd2>YE35$lVt_SUR@wEfA+q)6)Ho5rrwU2;Tv19r32^y4w z9e;k#74`3@>6ts-R2i?c%1T2dJTFj7DYXV!i%k>RCLn+|+v4z!z@Yd#P$X=8`|r9C zxod#L5ukGRXS#Peco!oUF_KZ0u4fBSj;PLvRXc5R*0;i4e9pWs5Q& z7yr!Us4Tzq+^r`s`s7bL{sa)N#Nr?Vpo$ftbCJFw=%&Cawdi*#c|V4 zIVq0`6)$9Rthl@!)r$6{ypq*cAG2?>QUu-dH(G54u}4|#sSd=^G(0dJ7Z_v{gJLa_ z6Egr`t!K~jW+a2<$XT)jMs6ss9ugp}QNoe}lN zaF#5Dq(U^f9kN$X{oRxabIIH`+ghv1X<2;`bCqF+vrN=r%Dy~x;)pHYFJ5X$ z-S=Nmj>_{6lT_QFf=o&#EMdd2A`;qc>3LZvjrQ~_od8{~mR_XvRTG?WefA(+CI3Sq zz^X;jHQL=4r=#w>;0P_0L~Qfrc+8Hiz7td>3=k!wKPbjARaN(KKmjTnKASQ7B%77( zTQ7E7OzTD!u`C~{uDazwL;ePWOXmC=@Wb*UcLHAuH)g$vKAV|ZzV3jz@ePL)4quz7 z`Fq^Zwc0% zQd9*)xjm;2m=f*e3xXByfh+#n_ge$Cz28cGx;^ha`aYTDl#53Ofe3_QIi^=4j~V^N zHG*B9QKvPZaak{}p!1(`^Cc=4kv`gV{=uJ)e51+LJYHuaCk+UD3G7DhZvTU%BnXXb z(Q6Wy6u~U9O~6^~K%VkA=mfR3t$7rbUaSY7fUQiP_v9*YB!^lSf(ZQ|w zoezB<+gK_Jg@Ok7(1)?pSIB~Qt;mt(ArYvb&nf_((e3Ya{)^%i{nrs**lB@aV;!1u zW+=KLP=R4QmDP541PF$SgkK__%ATPB4Q#N3aZJL))&{2M-4S|dOoJXLmPK6IO^lr) z+6$E?jC@#Ndkw%4kbaWB9g2{Tbm-v^f9ONtc+G@$W0D?4q<|&*>?5K3pLF_HN-64( z7*4Swg?xn(QrSj@fs|#Z9B2!<-Ex88!%74$c$l)8O^(4d!UxlsAOB7k6NJ^<&L5GO z!VsM)g1FqnAo)Q`YqD!FsL`ecP~a^0;c!=vG-kvm`MMw)XoA199tx)i4hMWPTup=n z(N0N4Q`+;C2zUd9m=+T){&QP3dXm5P70X#xr;JDVM$1syP{XaUA8-`rMCmwANapd5 zZyTo{Gie5B-tKP1$k82KPyo;^M;VCR=1NK8C;0s(oe~=(^azClo7%L1-Q0_y0F%uB zU=jeHgy#nGAj(u;6N>drYX5-IPa9nl4Ia6gcP^^TgN~z?NZ6W@oN`i8b``AS>Ls}* zT2?GE&!@=Ls9H;yN#U`fYF0IqT)*K>xR_w2E7j@KOawU{TK}Y~c$|g_d}vNecFPae zC{tV6;x#3H5@^T7 zbZ};str^j})?;E6w;2^|E71v5-Wv3y8NzE`QKLxWP_nRIEFx~>N~XgaqF%4F>)aIE z(>&Ht4?_JUQNgiVhkn<8;2q^s$4l8*LY1zirI>a1m|pefA**JbR9E>)U;A3nJqw$y zY%9uE+x|ChRb8fA&-=Vi)r>&GAuhdoh*RS(cefFCZV;h6lEN1DJQPu%gl$r@cMjF7 zlNE1f$xC9&CP0O_qOLSSie4oC#ar!sZz!BFU;EzpivO@Z%zkBSfZ76>!$B7C+nPI5 zjv9H!Hd635Cr7ykV;DuiZEkQVEG^*x(WcYA&KBDXOXg~~euDvPh(%o9LXH^CNlWw6 z;I%-ihKa?2WSi!+wOr56vK<_$@1C97h5(Qm$1aHB1@+5gVfNR*K>lK)ySzHN`S!>v zmU5B@#Zt;0H@fUYazS%Tw;#^z$~PrZ&D0}3BAemEVa~u;%baGVo)|`$MJk%x9L=Am zlT(up?p`#sPDTzYrg5Is0QMY>3gkH&Pr(2LmfdV-KfBq*l6JFM&044MQpe>Y8!)+T zXvX+BGPf0Sr*A!EasSpb=%zG*QVM}?_7!J;D*r8^UW(jvu9%>~a?hBp4d^v9r_}-f zcX?^e?^;7s*ZJ;sIEmO(8p?$L7?^;>DL!$FFMAKnp7yk{$O(xDY(l!A=M+(wKY!DA z(D@Y~naOqwZ#N9w2VrzzM+iwSu~?aq_9sB2x^5+FvtHed2gqWP@TL(Ka)@|tu2#r& zH+Z+&0+;%$2QI}kAC=!lp0cN)$|=2cMismU#42unKMJHN9tjni}kS7$lJ z6+mBqCp%ew`f-T3>BGh7-DN}_^;4g9)&E(4^@4|(m2)-H<#!$V@z4|RRKa`4-vI5h zOB({-A-l8>v-XYmVwxmZ{^0M6UzL%|;LHczEvSDy!yi5hKMrAAY_7POyH~C{kF?E< zZtn5mwQt0Mvae|;XV6=@L|J|_*F)KQ`@_1#`8P3{n{NA7UhL7t4f1%c{CJ`6%+Bsm zEDzA`?23i=7SQ-2aN63A?hudx4iE#M%@?FEd~~b=P7VZ{YWftQ<*=^_60eTVO;-l6 z@y3nzGG@Svr2K@9p!QCZqQp}!Y29)R>q1cV?hgs^&zg=<@NUfK zT5tv%k332)D~3T2F3=bbF!-iP0{^?v0pUw@v?BMikPJN?%>-4H$FaPD@{ zP%4rTX)I9*sc!X}&<&#y{4z#*?(7rqgzpm26d~XN5hVkiZ2>aQ3%$@O_UsjBaoPCo z@Vds24>x57b*sPx&8`_lng!A;|Ga@fbMOU z$cG4-5EHwx2)*(30&RuXqama)j7AXvP$&2F$T5p*W5 zCxbF5`!4ma4HtJ2DRog7NsuXhkv@RY{Dx5~i7_J4@d=;F`+5%ZctK5`5l9rVBdv0o zD(R*~4PTycX*jSbQ&J_{QtFiQDot{#Fa`qAPAKmZFY_`2hk+l{aBKn+Faa_!`D`!+ zQZQYh`X0a_pHlm1#T+q8w-iztMX@C1k}}D0ix|-&L8nHdMhEMr_Rb{KMo&GYifbyQ z&G<<*Ra4~tku6ygHvhe`B{z}(LX!q9Zz|D^{PaLCds8S?K-z$_ScLN~KTzNV?I@LU zAP;jnl@rjIvIL!S383<#=#MHljWRtk3VF*YCUQFgpxEL-XYPU0>MWL46Ft*YJ=2pD zDA5dG(=Fq3C6jQ>NG~pDvL?4f0QKMm?9n&>6F_H?FOkwO1&28elQ0D`K^IglS*swI zC)^s+CV`ADv$JVp>IDNahrSc)_JU?Sue1&&9M+RWOO!S52PIGMCFN89T9m1f&^EvG zK5wH0YV-t7U^p=VICoS>dz43i)JKC9NQbmXbJR$S6iJCwNrRI~k96&fQ!SG-DW~*6 zo3l!bvKL<^LjPyfLNnADwUa-*)1xF(oW#TL#_~h%Q!LxSMB8*d`@l7+lttl_8&xzM z-xBt+hfA+&1p3rZYt#ZZjySt;NdweS_tHv3tUwQ^FdNlT6%YL1;Yi{Z{;F6yf``9(%!^fqnJO3m7VHB% zf%RKqa7{(QJU5HLP_^=AFiukuT;HlxT@_vf^Bv!FPGhxRX%kO%aaX6QSADfz#b{V< zG+=EMNB@&_SqJq{4|PiWQEXuH4JY+sBUNG_bz;@>VFF-W%3wVj=c$T~=`s zmqDEZQ`7cet1?{Q0thk3ax;hhG=(D^CrC_+6VFjH3kpQPbZXhwUf~vXXA^3}kzf1O zXa9dSZ{?+LXLoP?mIY3LX>-?UcQg{~utwXHL zaZ>Dj;=mSRcT+RBH0dvRr}lJdHFdw2PGj*S*zu`i_jYr1Np&}Ap_NIGP-=yDdxuwsK__cLID{wn z%@CL(9f^luN{9OpYKVE`Zrs99$raEBT7G_;v$TSy{Lz_t9-% zIEL+4lxLU?vsRMZIOo8Q%d%3Fdf1gi&&AGTk5S>DgzF}Gq>nY%Q=CPKofwf9xh-E5 zm~mAmFY}boA01JnZMw?ON6TlKe$tC^bD_?U6?@peR8veF(5*spMz=*F3K z#I!f|c#h%fLN`fFz3C{l0V{>XCp`C;6SX)M6$qefG^PXAlKt})Q4x%RcbWl`n$Os$1rnQIIz}tHU(*bgHO zfPKeqq-BD!7d_w@q-$myQ<|mqS*sWMp7qa|g}OQhTC8V!tjpSqy*Qx>G}{`Qt+h3O zvsI$O8aL5Zs*hSH!g*KFHY^s{f9)tlqb?KMjb2gOd*fE6W3{Cd+ok2&YJ}CX%lfe) zTe2gYvi(*cmGXlA5~8cLajn_2`PW++`=d6tx_TI#XL(Eyii@OX*Z(3J8L8J+YjvAU zPO*o%t8F`Gz@c*Rv`1r-Pch5l#S$I(<&tfPWZt zwKBeOBgY1ArLw!Qar?HndcaLgO>@(=J;t{ee7qanPyLN>3+K2ee7)N+uJ`-E0?MP4 z8n4F|!`s!Q?~l8?d&Ix@R@>5iuhX^B*TEV5yk8u~DcdL`yu#hOvtPEoT>!p6{Ij_E zn|;{6r}x0AI4%p|s%tx|1w6M2e922mt|PNTcfrM5e9EibvHuHHVJKY7i<=;mo5!s) zJw_GCk=iW2Ja(;{#M9iDPrSt6(#(T4#^YS3<($sz+`Pw%QMr7Edzz;ccgNp+>oj`9 zTKUI={6mRcRe9XMONYb@{9YY>K8uiJI1|vrfyyu4%IVw#q10rz+|wQU!Ye({W0{ue zo4z-^kVXBk-L~CSs?D_<$zR=fHCVeTeQ5So)jz?`F&&_Hy|TwDA0GSDYy3(<+aPkC zWTV`o&)GOM=DA(LGLikW(oCgXJ=U2V+pm4e+45QLR@ym%*E2ob@7x2)8@%)!-P=0U zzdeuPjJcQEkas3!5#4;H85m^N+SR<)_Z{o5U5eZA6aRXa-SxoN3*O)lp1kpV7|?sO zD?DP^J0Smj;MWTs={?aWo*F+L9vUffgu;5VHC>YQ5B z9pph;$b=Ka~xR~wMO~sz*TeGVkoI}T5<=39vbqwh{9cG(;lxP0t zyY#~&`JFM`>Crsv&;9H9J<0t(=HE2vf9z=-LE&?6cb#4GditSm)q_)JT9Np-|4!WJQl3` z{`5$o;2>e4;b944qT(WBK|*X>nm)m z>@01q?Jce>UoNk$K*8^>a4!I!@iB58Z2uYA6~yy1X{q#dwRM(OHrF*bwP`mNIQF=> z*!THZm|bmhyZbwy3$uK$r~N&CzW)AYWq&1=eFF8BBBKBux&f+I5o_r1VZ&i(B=(^Q zv0^QY8ZTZ92F#)>0>$8wEQtps8*@~ku?$yE8%%OBXUcqOlP1oZF1sN#!_FkopmgLB ztvB!}(xgcLF}0-hDW{%1$Dmrs@haA=6D0=I>J{bJtX*RXEo-*SvQbrvsJ!V`C){mu zz0qyEbFSRHIqUNMCX&|Kz=4fIEo|5@(@gy!9ByoA>O4^jt%j{^Sy$K0t-$)?x)n3$ z%dtXhZbeiuYLc%a>utT)HC$)0@&CSs{aQ9|+PeE9_$wqqszg(-Ua_?G?Al?G9vS>Qven$A@~*wxwt46X%iq4so;*6=%fQn=ma94b{GTR7 z;P1abfQ;#vpEY_YFxhn5DHv91-F37eglT+4S{|p>ci}7PX}DW^9d3x1hq;BQo;7I6 zx5kAj(t!(c1G;D&0|3hS9|JGiSeJARMYto6J^F|XcC4s4q#K*T_a2fTqL(C-c73Dd zh)s@HU=tOZ=pB(+qGgMXT|PIX17Hg1<%^^ssN;`mg65-xYVsn?SRrXSWFM?uA?1>J zM#-U`P|hYIpL_CVrG<0WXa7r!WGZ@8j5LC|D4D%26o8wRT6*brZDMJtibM^uQcFkr z87Q8mlIWzVf+|U+D1>rKCtxl>I%_@&fGH-eHWDx?roH<5D|er97Nn4`3RS3uqA*|q zG|Vy!ihHE?sVcRj{weLW8v2E79NZdv5?P)mkSn>)jnL?={*~+Eu9N}$F1(g%x`w9T zy2GtH=z!`hOQ>2~Ex@Oy`Y*Nv;~9#p-rB2-AAfZl*}4%65hlgBMvPy(3C8=NM;`&R zG04J-3}l-`;!CKgqU&gY zMK_l*njv$QS%XhQJ^!!MY;H&2&^@O-Wf&{BBs17JTgxif1dAOu+VCNqwbpDWoTAT4 zD{5=Sb@x}J+{H0X>AM|w<*`RoPc&iGg^w(jcy717_||0mI}X1rM|1YgFjt=TwV6|H zd0vituC`Q+zpZ$(^WO05k$1cd*8fj`&D)mknCHRJS&4v!Nu7)aXu_i)aDgs#Q=F)#o!t@Pd=k`P{o_rG+niVuWPaBM#=Tid4K}5G}aFRbg?9uc=@c zt@yzZj?sD0Bcl-!z(jq>$ZpqD;TrSdL@3g0D^jE*D+G7P1>vxd?*pO_|Cq)24bqE- z6k{3@sYv+5(SQ|DVkH_WkU8S9j(e=+?5dW?P5QBuTI^#OKN+Y{dNN69JS7OrXvQ&0 zWtHZTq;nv-fHfLW5tPIvE+2A9HFu%1Lr zq$|x4hGo{$Fp~%;I0Fhzff6*EkGSP4q$VsqnzNz6f@iek`A$JnbfOits6=CS%#E%S z9EvJvK?(8Cehw6*COs)YQ;Jf8y5LNQ(<4kXLpWkNw5I9gXh$JB&y4D{rycaEI&pf> zRIc)j&f6!MqM1#8uC$~g9qBgPrH}yt&Tm$&Dps#bQ=4*?fjb3iFb#>(u=13wW`$N+ zhu6`3w#7v%C8<;6+EjuH;;nPFt4dosRjOt+a59bBOx1wSt`Zh2M+GZlznWIXCiaVr zUH>d7gKCQCF;1V5lIv69s@Y9o_O6~Sfm9U|SiubrCB)ilVN+`zF`RX*kiF;+U7N+& zMpUe=y=`Num>;};wzs_ft#5;?*QsixxTYPfYLlB4W<>V2xy7w>qx;;)PFJ!*Rn~4( znpvi9x3ky`Emi47IKc{*wBJ)MdaJ`)>9QBPvTd(z-z#7ERu`%M3@&h$8eH$n6~6%; zZqs0A++n~8x#>OdAI8gu`ZAcl4sI|H*$LrMN%*?&!B20y%es>07rf#ft<(tY*GwX~ z#GUzAo!qP9`O=of4~FfFT`c1cI>x{GwK0xw3{U_MU}Op{uZU4=VzDq3j|#rSg#VLV z;Rq|a$xDtgg@JnA8do#J-1RPas~R{vhFBO{Ch?F-rqwS)5g33IER<)g<}|Z;&2Db< zlSgsi9Q&8QP}MJ;zX@OioHvs(95I-~44N^=)W9$#^F*AiXgDvr(Tsj{b8}h{)6IFm zb=_=s>73=Mjdr1&2CSh|JL0}-wa5wVm~+Vw-LGahyc-RbTw5B)dERrk75rn52o~JoeyO<24gc^mn;_k2 zU@o-dt?-1qJK>*`^0cQ>7+hmo!xgu4Q#U=+GjrL?zvi;P{~hqZk~_%8j$JSeeg*$b<1PE@R=|ADfGTM#XXB}eS`aHCl|RTUn=m;(D4@q7sg>3PV=QJz3J4oaD^jo zia=NsDcZI6#WOvEw`Lj0pdN67&5g-klN`{)D!S28EC7UK&gE{GIoz2pcc%|5>v+bw z#q*AHY4SMi1?IS?gAR1TkKEM3dZD+aJ@>`ao$-#B`ok6f zWe@p~yWR1=W@LdRPc|XL8h4n#z4fbqJnYkE^UCiX=Y0ou**`yOA^)4$r)?o$B)1Kv7bHd z(_edC@3qjtAH3i9y>HbP-23!8KK_fZ|KzW``TY0)q>T&Z)!RUDSe+ph{B^|k4IBM6 zfc>c&`8n8~z?k_}VE$d8FrnZ2-JR{ZR03Lu{2f@qIiN=T9|oS_{;8D-LR{1_p9><= z^AVu*VHyH{AdwXw?=_Us85{&!pbr|~54v9Ku^9k991)0t2CCl%W*#}&Aou{B*u755 z^&ARTVG3Fy5w4&X7U4R@pbXL#)r!r_Vm zA||4h!*Nl0(4id)7als|6P}?0p#<9nVkV|yl=vYkM%y78;wvTMC#KY{Ac!dHVX+-p zm#v&7#upp*A~33=FiMszDq?Q|7~kAtb&w+B9ULnTBQ&-mPd%e6!s07RS~1SzG&N$S zoL!kgVmZy07j~0=*1&1f+SGR&*Irr)7h8j$5)9;RXP zrD7VT)XfrHP2YaSrC>IrcGTa~AZAtKWoBBXW_G4pZb4Gs7+_8&X`Vp=9NqnW=3=5{ zVq#`luBHdEC1cJetN7(bx=U#a<^#fsYxX83djF<-sV0=QCA8QkR|;fq&gE&Apl>#3 zYd$A!MyG79)ky|qfFma z5@&eEr-R8SYtrX^PN#J4r!49fa;j$;Zs(eSg!7=&a^@mEQlTIhv-8;=kutDMu}te1m^=tIt^ zjizFLs*whcriv1ofFcT8`NWE%o`{y{hZd6NpL)fgo&#Za1Z$xWOZ-lz9_p+XDy>FnqLu)@q!}>9RhnvVN+azM?(wYOjXfuL`KJR+bltMHBc=thS7y zj;mCX>pMYfebQ+sSnIW3hXbY>us#H8EY}ghs;ow9r)D9(N-Mfft3HM*!1Al8Mw~6> zX}dbA8jRr4#p`gGgu-a(Ie7uHPXFw!GHY#BEXMllD?-5`uxqbcL;<|(l{Rc}a7+!U zkNV`R#j0$-w(P#LtdqK|%nEF5I-ekTY@_lUcZw{-0x5VXU;)_cy{@dS7H!5JEz#=F z7~HJE9;~k_*lD7wxv7Y&E`ZQZ4$WpQ%(kG`CT+}WEUpHu*p?^>HLcTPYpW{kqe29c zY$VHFEn9dk($1~izHHZy&jFb2*?t(uMJ)*$+MMVT0>G`^&TO;Rt+N*H*M{xgHZFC)n2Xbf-drkZh7YJI+gB!_U?ztRMhTf z<}M7PxUTUsui=g^_u9nqb}#sHt?cTq_L2?nLT~(K74_E3!mP-aI3xCU?)NJ1=hCnJ zhHp-tFZyoYmvP&Cv~Mzq%gG9@5R~us9C}J(wgi2elY%ut@D~G`gY#;^eF%X&FFl}`VjB~BkdWbik9Ka_%1LE-|!Xxs}*B07gKTb zEin_D;pjav)xK2 za^R6zaH!In8s!_W@*{_?CM&@xlky=8?d1^KvrhBOnL!BnOEpcFHB6aW7YM99uIs@A5Bib0`n8-WIYQhck+x2I<_cGN1D@ zqq8T6vNKC?vAy#hm+>@nb2jU;J!|tl*E2nDayvt>?hUh9l(R3Zb2=CF5f@@V`*Z)! z^2(938J`k0@BcGCOSC@cGeuu?Hxp4ppDyL*-r)#M6dyBV5;RF0^zu%$5`VKh^J)KP zQb5mhL{~IQXEa97v_;GGI%o1m@9p&NrbiR=y*#u7mvkc&wMpM}5$!ZjtF99x^05eY zD&urbOEpz%@l;>+z&@@@OR(Se?G8KjG0ZboA2nGU^%lqQA}jUT*53m*HBgrXOpoYUbkyc_Z;9kV^9lrROhu_U$bOa z_GDl7J}36avNf4q6<9-c!dSLV8#Za<^<9hbRzq)3<6dKLiVDZIXk)f%+eKCEnkv}# zt|jqk%l~$4@AH{NZWu2%h_jB)>0hBgb->qh!=?<>1 z9UoZ$A9rLYcW*mxZSPfcL$`Au0D3EcbMIA_hPQizcUD6lYg~7guC_w1ty7EjR4X^D zHTSMfRe7hkfGdCl5cqlzK!;NIVe58A(|3=Wov%^EYwP!W&-HARO)B6vZr}C*oHv2@ z2YP2XeA6|9SNMpRDG8Tw2uiPU3$%rwHGk{WcxyO^*SJDBH-Ln=LM&@h&u`-Hb{aYO z$8JWD-wFSdH^KdqJ#RfFZ=n5gtiyMavhwv^MP+{ySQ`vxR*NsXNusZX<-`rdL;Y3 zR(qvm4z5Q#uJ8J&4?w*8daa8OVyv|Vk#lO6LWV{8B zgo}rQ$6sp1=RET*{FpPm$s@SV2R+MM*l!OF%)|V-?Sj8?yjtA+$E$qu;yKClyvg^v zzBBWMgO1A|J=ezpq$X6c8+&9IJgpDC(C4qumwei*{mGlX+gJ5aY5k;hJ>A1Wi*g=! zix1fk@xI$SOj3Q%GyK$#{MBdu*-ORN*L~eb(N6>Q*cb23AHL+5xDrr3$=iFqKm6No z{^Vo$+$%olqr3H`X5%D!_8LCCW1*uDe&*+T>!*JGE;#C=J%WIK=x0ir(*M+vQ#<7E zJr#65=WF!Zvpw-kJE{Xe@&|u9B);t*z34BrgqObWgNn8HeL+k8&ttxwPdDt-X!46H z^Edy?i+vMay(M~C2NzxFQ#@2|i7r+WB{zr}w&|8CXsH+>od0Yo??x)4TW zBDp*^nNOut3Y}7`R_rud-FBs3a5Fp>m&s>y8okc8*>Cl6Fb~x2^m`tk*Z24S0XV_9 z!9v1A!$ibI#YVS^n0>}&08tWCZ@KmR`Q@V|2IZS-^X zboO=kcKCPsc=~xtZ#!1~eg1y`|6sNR4kUOhSAkl=C>>MQkRdU9^(025SP9Zaiy5(% zBR8%iN04<4Xe5czWJ#1KRi#w%($TRT3QP5Kms4R|i5269R%TB@xDP*HC3;`j`j|w}4(87p36cI!+Is=fzCkjMx z#T6HH5f;xrbI?I%PK@wI8*{XR0Q`FNF{C?m6cR@wb5uycA%#?tMJC64@x=ybL@vo9 zt36#XCl~xo#`dHfVoW&W6q7z4UDGl;>*UmP&OJ** zlFy3%ICIe7(nJr*Hr*@2OGdwJ^igWY$@0#8Ahpy{O#d&{bj~sf^)x3#&-08uH{a{? zR8#?#4Z6a9BjpcG+N?m9x`a zqfKj9w)XSYRAHUf7T8l+o%Gw-wiP#9a>tDZT4~c|h1#{4NK`IGiz$~`dNT#j*l$Iu zci(sH<@evF&{cQfQ`qfky=zCC*W860P9op?U}Jb$4n1pr;ee^e&ant8(O9 zpAGid)1`LJ(4$v=`rb(^x$fW>-@SV3yXXGuJDT?mciL|^zx+Ns5ifo7+CWyyfr8(;$iSTRBI4}BA)UM|d~>1=KZQj&YEh22ApjQ{Cq_IDk&JrGV;}dpKs2s#jv_126r+g2Lq;)? zi-e;U9oa}o4pNOJ%z_;kw?{u_5|f+MWGC-*#z0O|l!8n{8{LQ#Lo)J_8q{GcNhwJq z0Md^@q-7Cn8AK!A5|^IjB`1+(z*hz{Sf)G+6cwpTNUk!O%Y>yc2T{i}_EMU@e2vKv zh@WX@lbWuvV>CwT%EnR6%UwTuSB9WaBbOZAcDNvw>bfiKZYDstM zx);t=sTS?!JUznHrA8I18S17+IoxrRIlZoR z#kfn;hD5cuJ;#0`DAdpSA>-S!4Aa{IQ zmFs#R>sq#m z7rh3yD>@O}1^}ZYto@}ie{C!h7UuZ6p1pC813O;m1~|nzVX=A-s?Gx^Sjle7ZHGVX zPS=KECb**h(=UMky)T=ACsR8|K z1RwdugvL=r9g68&Us~BD2J@S-8EKXRcFGh^cD1d2ZERop(U1o5m3Pg%F{4`C<0kf= z5&dTURy)^w#Hog3{cdJwTi)}w_PTBSZE^J)*!%YNsmWdLcQo|T6Qy^-4W8|wX}Z%Z zl{C8#{&0v#T>s(|e|Y31ORmX`ir@d{xT-~W?u1iZmtqz9v>EMgco(+hD`)w{?R`;v z6G`9w-nhR7eRF_sg>nE-K(N0kRdmaJ{&P?_TFZ8u@Un|eZJ;Mz=}TuiYQ+)rF$t>U z|HgUF4TtCrH~r~I*ZR<3{c>ruoakLAJGQ}o&*F}0<~3(K&8JQULnHLEWv6@H?LKx+ z8{Oe}zkA>P{`az5+*YunddI8&_9`ik?>%2U;2r;Xub;i~kf(g*yUumY<2VpqS-acY zj^x5y{Rv2zyX8%PddOQB^{Z!n>krPrG~Y_}v-kL%I??J)Pu}&r=RMH5vzSNF4Daq|~U`|Uq}K$f2ParQplso($L3#?@8qwQO{{{ukFJHW`}wmHZ@ z2h=|V96rU1KnkQldAdB9sz43gKn^TBp;NbSIG_&Pzv9!QPg^+QLq0tEt)n}+#=Afh z96)GGIuty;%*(sds)`^003rDV1yBGm04x9i0000400IC8|Gq@*Uzu9TgJuS%|lYyah z^PTke_4xPl`TUWLnEMDRs^qB6_q->S=3#eNIM+ZEBD~4xVo^IEA;f4yW z-z`6Xs+HRmu2Hza1RI_^c&}e&fq|w?%tf%=#kVqb*vz@J=g*)+iylq7wCU5RJrDB0 zdIM_@8&b<2?V7{u+pRsA&VbN?@8330v1ABsWS8M3OCCp_64~$P(4+Sz6P@~REg3;- z_sD&__wL|9lKD7Zxk+y(ldC*FzP6gekVht|12~oJ~`wER90yvl~QK8 z1UsS{wZjn zzj;eZV?$Z3P0E@gubQ!Wyfrv)1~djyd9L>#kK{dgBH0`AB4x#13n0vB(~)Y_iNQ>uj?~w$LS)(LQS} zu|Z}#ZI{mSM&_a5x)<)a{t|8BbMwmYdPdFmOjyz~+}=)Lv=YVN+}E{ZO` z0OuPfr2(}1;;p;VsvoBdD(G;-sE!)(#H4j5TU-fd(j( zY@>d%j**f6y$>(rzoX&&q;{C!&T<$}iI5_UrVbj;SxtY#fUB1m;a@o0;E|50nx>>fox+Of`E>l$7D;KRWDwJU+UI~wnL*SrcEMO7GNTdCqEF#;hk zRjRU}2uFCar1VXM+pAvm40a+D8K6uN5TD~_*ghKCP-Z$?pXWYDL!t#ueU+nDvM|9W z{gI1*Cn*kdYLYty9`JtxG@uj*I5zw-O;J~@pV-RwEiLZP4SFM?tTZ@0<0TJO3i_a_ zEGEV_x{*V@svGx0HY2Qf|8I^bq@%7h0y7@g@Q*h%-^@5iB^|OakeB;m=X97XKorq% z`SZyBmPiZmAaNR{@ZS?RIkhHIv4ETeB>>g6z*08QicTEZBv(nWO1;r;8JwH((%3dr z&GLhDOTjC5$xG=qZ-si~9x%fQz3;tE#mSfHPwzW)}UCv5|++ndg z;4Lq*l9DS)R5DI^$<(!Jl%a%^CqFsGcIFE>@HC|V4rE>ZN(wF^h@+qwQ=6v%N>mVH5U5DiXHu2Q z)PxQbco0oWCc{@vidxl~&cxau5y>lT;(43xd^Q+t)4pB6h_u>#~hQ_DzMqldbhJS46SW! zQ%G)g)ma@7|7}=z1}(C3hqb;*3jSyt9D1=;wr;ga6L%X^LG|~)0Os$1ef!(6fs#kV z-AHkv%c|x&n7Kn;8>raG;0jxojtt!pb(_kR?BOcIdpj6*rQ*Qvni#y}1M5~l+P)T) zR(;r%8E=qzwHIlib_teOE!vvkOzQT>0tT{>)yX3Q8~LUOJhGW|V&PUj_{mVtpb48y zWm*Zgppx|PnfX;6;qWIDP%hk|9PBefeSYQIvGp2d1Un;g-W$FR$&Me~81(qw_N_*N@ z{h1!e|2C{651X3OzI-UkQ0A`&cGt6Gj&-v#y4A{QRIH0*O`AQM=Ayax%RGweR7{5H zjU)xrg=_VEOp4#_(D%_pPI9yrO>IUi`P%2?ZKK;`20DKFVykn&x5xe1PD8bYSvGfy zs=MkJ=I_c+^$c%E%vH8%-sAAbWD9R62nE<9){%6?#rf;GJM)P z1un#^4Ml8Q{5=QW_I0{V?zrT^Eg+AAeaHZ(5GSKL_dvuQ|+>qHvM^nd%PT@tzQkXg+AY z>n;Vm>KP?=Yah8T1!MVfU*Ze{zzG}fH~?YZ4)+VgQT88>`IOBabJ<^o*sNBzMB%B- zzB|9OKcpN7G%#LmI*y~#gdgOO#Z5ogw#aw3yHvs-_3_ha>I+wR`p*jO)61##sONgu zR}WtV!;Wf2zPRqIfO6X7VN3?Wc6h;i1o(TX27JOs72alP!^eO&W-?mjePH%{{}lL4 z(MM~mMqWbKIEkb={3d;or+7!_T6dy(PKRtJSZWj?K=WlapeJaCBXJaGdhzFeuCscL zCU#!8da#Fb;_wc(_a*{(1qJwAB342s*MOT>e8RMH3UxBc2W(_uHGmdFJO^vf$2l3u z0p_(h*YrNww0(>BYvBSYO80ccc6=!~Z008>oR>vCCWAI8e{@)f6IXxv*JpTmN}cp| zdbn&q*neyngl;l~L|BB!6?f+*B1@=%47h+Z*I`iz9^BS>WDtTCNIr{)Z=2YO7sxZn zM|~b>eTuhuqnLgDrW=yi0^PS~gQixQw}u3la0gIFPJvP_@rvJse(+a%{}5Dzz$jNZ zXmS0eaZ|`~4G4+KXhA=y4nZh7hNuUK=vYj6fS8huEw@m!h>h3?YTnpA!)J4A5`oX5 zbD4OB*P=ctV>0!2TAXNakEe=~*NWu=ewbH&X^4*xsE>{4TEiuW!Dxp9IfuceQh7*r zWY>oX$!KO*FboA^DljUqRVjTJ|77m3x_hz(_p!Nf19)F$SLj_2r!TD5A( zCt7KCUbmqELQ{B{IC&FLiMmLI4&Y%(QGT&_f;wqkN^_GK*F~`fkV8g;1eugOScR%* zU~+hnztw|X29cQ7M$LE*a-w?{xqBGNOCzR;%BYPGnQpddM;z&d|G=ap<4BYO6f-9I zmXAYk)VGDVwmH_4UbdD)TsV_KLU}tSPP0I8>xrdf%kWAT&ONp7Tw-A8{mJi@`Ajv8dIS1@=m1*}=U73-f>40TfT~1Yek=TvP zh+!*Oh7t&9Zh4ZN*qffXimT{z^){Cpm3_duig>AkDG8H%2OFDF0j`Kvp(%@qNu4m~ zd6^Z1^b;(;7$#5@kV@$&!}wbgS36)=7Xx52s73+ECPt`P4p~VDr74Z8xlgURZab-s zs>X<4iARA$cMpXXdNq{HhAt%um$KH9pwlyjM|}i`T24IN}Jz^q^?O7ELDZLNRqtycbo-dK189nFXr8il2HYlM(UAYi9G;nJpxLOPHGGPqH_r9e5n{jVfv*T*enf-iWvo=qj~|A z*B#*^iG``AAS!-oh=NNOZlU*Z;F&IvDG#@btGSA+|Gc^`k-4Jcd6_f{qj4In!&-KM z=zB_vH+Ary6!|93dJd|2sMKnFN!pQQ>2k{ILVQ*xujm`GahzN_uD)4{UY_aoT5lMS^AQ9hN}K(3TJAas~VzXsb~M24y4u%)Mi zQk%K9)uNf1r-arhSvya_K(Qx#A0ewD(TcH4z^e+dm0WqYAIqrysf7GFmarPBSr$<% z8))Ck2fJBj+~gy5`?6l8g|?xRhG$4z>ZQb1Z>!YdyuGL0O1&Sq-!^-y9TW5qpu6Q)!Md=8fx)tOx37D zwt1UNOM=`ruC0hJE{m=TT(0A)IXA14|IPciZbl`6JFkF1M3MV4xj0gf8;f&?tw5;@ zszWZlSi`gk@t@Z?n){Ku*D$DIk(&5Rt=f8|3HZNH z$fjP)ZbB@uRA?rrT9kU{iNR|x2~51tVrJO1h4;!Do(gC33MPP=yGv@c zA1NbldxVY5jnkW5Sfp@F1g^;GNQ8oQQ{0I#+ldqGz*)M*S^CL7G_ML^!~DB>OGCN* zYQ|-}wu@S7X}kq$bmB3v&XA}T6|{gvv(Pg z!Lm5XW_mI&x29?O%GJ3ejQcdTij;30&~QA^acqZqT*r9=K?hwZ?F)sW_`ZpXqs;7B zNE=cdLKF`n%^IDJLCmL0;kAwY$O6o4$izqeoF>BCO?RA!eQ>u6yu1~hvlD7-4$1+C z+n_fss)!fQseHz!wxPUG!yUYNWSnKjG|SJ%XLV)5TeHh5%*HKjWaZhg*kJ&nXw3a< zX?|K^Q^3Rdw9#OV!!Adb{~{gBMykz{3ccM-rhn)sGO7TZP|nWBP33x}H5cJc~#?*Fo$4*_{UGvM7eSb@xHML-vd_2RllB2U% z1oevqq;1+^?TBUl#b}MK{yVa`Tiorz%K1}CNt-*CtQA@%rE5+5ryS&RSg44(*^3 ztk)kv~W$J*RI=LSJu74@6_cYZneLYaVzaxgS@Qv21eRl);Extht{==PaeS`Zw2>snmfY4Rk6yQgWyxG^Y z7toH;^yFuX*tzS8;o_0QV=2v)gE5Za*E6BMB-pBf2M#1;9cpA ztjuRA-be)w|AcrDPY~zny`D*|+TIw%%FWSAp_ud?Htt45FhqI^1b~Kq=s*t7(0-gw z{-6+Cm+i`+&b!Tn&F$69suTXocK)~ub>sGJlqe(SsvfoKzV2gA=FC3X1iNalc_Qrz zBDSmMf2ss+?gtZa2E2~Q!oJ>0(XN^|Oqfn{NBr#?s$C7_W1-9H%KjU1ZRkI)iHXj@ zp;d6nTb!ee8{rO{V2s3^j)wQx*ZVBbl03qhusXY1>a8wqvJ>+(zpz9G3Q!R1W|`#t zx$rd1OFI0Fx(@IGkH4V#D}7w=#18E7%^&98ttB03kL1`2iM0If<1(G~8K3o%$G6Q} z#{<^%ig?OyjY5AQaAgZr1BI)9JG9PVfC z+03{E{k{qRPV_}Tjg#f`Wlt4J&-9H?@K0z-O`4ep!GbZmb^bo_;QZ`c&&lKZ`3gL$ z*$(y|U$3C}pKK4p5Z?Ox-0f(d=PN(LqTao6pL%vB^SVXddEfi;J_Vh9&q@B<4()`E z^>Md{_=&%oJ+A>AR_8z8^aBqfD76g5@!HC+N`2;E3FICD@dp>5v%zZ+;XmY{oH9L= z#UOvLL~HM;9N(Qj2}p_Y-y#44+vhc>RKH(Iv2ySrbyiIyiixWUiOy+1tG*Y7;wH8|ks<>S{l z>gM)e^=Er?1&lR^jVyxv3?>A~OCdsm|0p;pHnG}-YS1Q7&=4(5M~)voh6FiMWJ!}G zPo~ULsSG0nYa9-ulZU3BJ*9Bw6vPPABLhS#^%OclXHla^ktS6tDi>2;fSSte{}gps zRa6fY0Mjar>zQI@m|aYUBpS-;J=E2*S zFD4&746P;}SeUUKS%?`HR_w~yFk)rPP&5|7!JH{)KZiysnlxzBrKxxst#UPMkuA~O zDY9xN&Ds_2%qpdOsiL8dB(1gd`%-V?$B`$uwRGWR$j_lSrV14@?}u@SS@zns*!Hg# zoq^}6p%oo?zr13JFX-&iwVrg!YD)~!m{R? z_tR9#*wm|_h5C4tKq8eitU(6xv~$7e;Cx`pi44e0v+v^Q0=3h& zJTxUmrw}pGM^8$oG6U)eGd(#rO0XsuIcr6O}g zNXPQ5)6RzU^g}v6-!SGo5&;cX*kO;+lA86bWMUU9UPtGp*WPykW4Cp=lc(Gb1T zf%f9+paQd~tyV8<^Ra2B3%Ko;o&m?zxRzKaI~PHAc@3IeLO>SQ4Mw2`jiZ*SPR;77 zvBp>HEn!Q;nI&dvvBeXOi3317S($?t9~ahj`eM`DoWWHW?^)C3Tj_;F-*s2P12=$= zdbe(!Bn??l)OBjIYJ}i^XIqTl!z+|A)HFw}vF&N#ewgm#|B-j~VxpUvx!9E>jap@9SrSw7$tyQ=XBF412M^DkAKEIlN#8hranTj}Xk1|A zL&9OrhMua$Zg#ALT>%jojh5JMd{Fq*V(P#p>_tEpFTxnn=l~Oo8D)44b6D~~7{a40 zuVRr2oj}}hD|3-3stO%;j{p zH*hfsgQ<|y3O^S#qeYK?c5{REQdgolC6It!OrWE_xP{6z;$JE=V!>ke zXlO}r0uG1dp%KTDiqAMw<}RX(PEdk|$Gv#7;B;F6%S z43R-uH^u?*vYh>b$Qp@3%<+WcAi-0PsjLwu9Nj2x()8#@(MGXp`mtkC*&n;;_dD(t z@;l%}mJGjHvNJ*wcN`L*Sj<>~cG{&K__-OH|I)NRP7cw2c%xA^ONmWx_EU=coF1`W z2{nWkl&Vwph_b#QDX(w}QTDu2+04e(WFFI^$-$`G%z&fffRwFm#V2)6NsCm@b$(Es z;}i2I&cC^|hA{N&OcN(Y1*B7ISm+@Yb}AS9qz@i>$xRY@=00tr)Tt*`;tG=nKg_x? zjofTySgjgb(Sm3iqm{x00bA1v+_i$jY$;$Vs*yp~kw;e0C?4IKTix1fq)MG;K97p7 zajx{QZGmZKh|9ZBZX{aQGISz zYnfj3npUb>u$}=_OEo)45RqSvXdF*U|6Aga&zT?G?SDo1*6t#eyT4r*jWl(U?>$2; z(0$}yQwvM>$ZM8;#fYWeBHb30gTouI@O?CDqsnUmX5vD#2A|ZH1FoOmK8n0CsW+1>9Q`8~JzOr7J^c zxZtvI@1+bru9waEvebx2z0bAqV9UpuHCeZE>}a!_?|~2&YmA%wgx)>ndY}Y_7sil5 zE*4|74+*0N$A!-E4jaYXNu5`csLc|0?mMK5?iZ~~76wOE_he1;ajbFO?$YjT|Aa}7^t@ShLENU?{4>Q&J+NK(?CYdn7O&VO9ZQ>3 z(L*m=mMST2XdQjV`2M&ELFV$6e&G^rXIf%N){&ASp_L|Yn%v2Y@_?O+?iepMGG`9w zsmt@=<2Ef>7750+S;pu}Qm{pMpy%fDYKh_vF}!ZAvY#tg1^n=C{fCta!ylosoNE#?n>C=QCozs{c3Oo-tAJ6 zX*u3cD%lp?=DKmLh_ytw2e)qRQ~t21;lT|xic1}Ajzv8obM`I&kX;5f8Jg=Bx9R~^ z6YXh_-L);nc9a+)a^ei(|Fr&9`P*4_?k4v6;C0v78&f^xYyY)+JNM?F#SH6bUlr`G zP6l?>r&l*`gD~3bUH3dJZOMf9a@=KNA5WC-t@fdm zTvc#){mPSxPyNAM*tMVXurJUBWDMT8s>V{5>HYUt2OS$h$Jct0S#(i(vZo>*Dq;S4 zV#?OOik5Y8sR`VMrqjI*S^t}jJ0E`8nRen=Gkrr*W9>;M1LWIQy-?iS`q$6@N0^s# z<&Ay&h410CGi?@IjD^*-=iaKs%Z879cu#>|hZ(L<`4X>Z+HC1cEYB{+#Bh(ZF0j|^ zZUe0X@D%B3LhtiL|4{r$Z#^g?1Ve+3mh1FDjw>c+7EJo(ie&PKvfs%NH+iEZmjYIAn4%BS#3Kt^q ztj7wtXBq+v8qmzI6bT7g?GV{wYbu2h#ZW-xX_J75bL#1co)2gUZt76UieygVsA6=e z%fzWD(|8UlXk3vAExZv%Ujwolciy*3zb0{%e+QimwCeETy2RG~G?#H_Xq!=yB z;I{CJybl`1@Sw=B+2rvIK}1s25dEa>4V}Oq>#OXCZHetI97PS@Fh75Ee`D75nkg;!xa$A zA^(unW=~h_?c0jM2zJj>tbyjtN#l(02m$5q!m=aTP9;Y2a;g!Du5n--@Em`}%|Of@ z@B#V||BM_#u?t1NVU3GFbE^WuJT(WngtXHkM$a1KEz1}p8EEb}@6=@+3A zg_34By>lx0;qNhn_vkE%Kt#DTJNs}uH**64F;^04 zJPWZrnGxp{tt{;k8ei?yY*b7{BoE+IJ}XMISc?tpfw4A+>5LRW{W4I+vEhI-sLF9~ zl&J8=Z&4pKK@k)}Ayq5#5&zVUJM&6KlQA?= zg_fE@%usVib7;8YbV~$gB>Rm%Y4bkk00OJ48;k8vWAY{cP%5*K_N1p!;YSsd|8rR> z3^Cd0Le=Rxue2zmDe%|=RI!y0>1;@&XYRN)MU9~nJZ=cDAx$O08QC<;$O%oitW7ua zWHw|9i>NIF)QI*&F6Yv*`qDSeQBeQWUnRp|krjRja~>NtQXzFg5jJ5LwqY4oVHL2< z&d*X6lLd#ehM>eHq^VP}wPU3M6izf_d?#e(ins{TD_Yb%GXN1?H9gyLUE!4@qp{vH zhAQd3Hts9CsxNNV-~6;MnGSRG0hIQ_8;NQdgSB@- z5pX9^Ni$GEl9pKwldzifSsgd@q!o>H%UUboaxoW8E|Y7876ZGJSoffjRFrJpLSVaMKh+L4C?__zPcFD?X+dmb|1?L~^( zQP=m#S0W$ywM2t%op49*#BK=!Q{o|%)TBhY4`@r(Z%3`j1hjCMHi)+-DEU#yp!GDW zv_i>ZgGK0SEti71lxId(RI9ft$dQA?w6((3LBIDr%3w`RIO|f&aAMVT1!oGLa5jzZ zEj0yp;de#!^Jl?@Sb6tr?U*K)GzWPzLXX#YV@*;Q_#Pd&fs1(WBG|1a7>Y$y9wrxJ zNH$c9Y9l=K*&cE&EcuI*EQ}2)=Z5+NGnm3uaCRyHQlo1zEUCTh0t8RB9U|#=Me~XhP zaTln3OUi_ka=h| zvzl7hq1Cf(-8PF3+K{RN*dh@(M7g5(x1#klo@$p4{%Dphk8i7tosrZN`8DEd*`#kd zVlVZXsd?M-d93$Ya(|f!DF~p|+L5E$m|wwN4G@A)|4*ip5DX0(R#_8x=W7UXb8!Dw zsnNto1$snZxfEg2t*_~54U~uPDS5ZLconszF)jrOd5p=Dn&&N`2JloaW31C}V*5FH zfO)M+JG2qoZ$mmda4rckl#w{&=Sp}rS+=#+b*>9gJ!JEuk6H_?5%G9!ly$rD>Nl~A zMtF6apN1_al^VHKOsf-^q^XppEmTqg>#|=}lkFP2wcGDRCK7tAvh_J~k>#wXp|s5# zA#-?nE}%WjLarZ4C|_2G-rG&9nYAa1V2x7S=UO@W2iNoyDvP$F?_={|2)Ha!f8EwA6>fIO#66Z`n<_)rb}Eo zg0{u;>9twYnNz%e`BP!F!Cw`=yCHdH4&(*_=6KlBBFx z4%`*OQ%i}zyd7uCN@n}6&um-mAlX~mTz=!&_`Sv}4LG__0C#)nJqdX9YC z7KL54*4Ng;-ty140LUG^0bQ8Ln_4ZW|5#+zyQY;pP13nogZ$Cu;JLd@k-9vlyqwP! zcul!{+qu2ly}in-oyNvI#KU{XOC5q%J!00p)!AJql>I5VcD*rm*3Zb!zbu>#dEZ!; z&kc~p+%gFqFvd`b3i%Zd^dUwh5QA~}rjxy+p&eOO`)MWJ(>wiR6sW!_KI1E1<2fGG zjTo%S9cuLv2{5D|q+pfnM%CMWPj8ctn1Gj#pB^W2aht=lhzcDGp#^xIGi zo&qazK=UUsj(vxr64ssFqVrgI7k5&_ed94a+j9})r5@a|KI*YP%*P#BKAf}1c%91H zmri62icrOaWZhYQ?PIIu*U>X#|ElKdoyN7BBlYge!&3odcy65>-2+|FLkaCQSMcjt z&tEXuPVT!ebi@HZZXYP+4N<1q-tDiqxWThc zWuDd@?Az;Y;x${=t1d^=_^Ry(oCo)vo#X8x+SRG@$r~Ln`;zdaJ?pi;+Fdu0>pS_2 zpY^Go`IleJfgzDFA4l?i##wYqJtMMHN^aDC^u2#MJo+V(3#i?j=BM5Do5sF(F8Hj6 zna@#I_3s>wm2VHGn$0Mu2Org2x#^7-2p$q4rD!}Nk&`7e(tJ9j(5cjMFkG|Pt+vbk zdc$98r6~rZ&*`>)g ztNRPc4j{pFjmRK+axftiY0aiJb0)>nB5Q`kV9a{;j~nyQw0S%e*z6EbSTlHw1(c(heRo_qfVPX68wl{5I(Op;mh)C{?k{t555UW-*FaKyaHB>A_;eTG!hZKj z6`U9`KAH$0Gel(dA!Uv=9ZjyR+2iKUoVnydyK*$?G{L6)a>Da+1aYlE73IXUmeJa_ zZ{r@E+c0m!_9QXyu{#hRs-De?*;n+eI2}q!V3ov15nWdg~ zF7c?$7df6)|KI`Sc{ARAw#0;6ex&230keS*ZQdop-^fW>#K;l z2BSOXA@k@2Hr{Ayj$mP$shYF?FxFac zEi;x1*ZJ$N><%lWY9J%X@Wg9V43RucW*oOlfg}<31m@z2;{4i^*xOy4E7Y6 zww=+#W}vC5?YHA@dyv#fn4P6!X)L$!e+=oDB4`8X0Kk~YwLB}HK<_-Z(gR*S^(+e| z|9atG4_*s$^onbQl2YFlxpe44bGIr|+|0?<= z@^W)LBEHIFo=Q0hkli{UA^%587{cc;M9dO5w5Tu!aYLg7-qKEDMe*oG^2l%AZ7J~88bV&)1QXNl?uydg5GzulG2hQM%7F~K}k@7|Nah#P#tJM zo7$vu9yDX2Fcw!Wb&BrJ7DOv|2?wjW#B`GOLRt=hn zToL}DX0uS)>vI|-oLa3m#GazFus}Vmi{L5Lgpu@?atc{Af;H8qf~Ko_i7M|Zwb`yp z=d+rXP*&AQvdfMoP!c7p-vFr7w8C~5Z_N;51xZ^}8g8~TBWWYmXD*2OkP79()X>rr zzh;RKf#sOvdD@~4aiURGj4kAJPifsP-L|&4rIS2eNz}S7Qb9>o>Qax2Bj4>4wM_Ja zRh=4I^^ygvrA?M7jJ4VIsMeS*JgY`yd(5_;6NZY_Zbuz=sg!Dy|Cag8id}!{C@c&T zyAdX(T7l#2_*;BRu)XUYEsFtKmd~c=y`qh=eCPY7 z`WDn$t5u(&?8ChA%E`;R`iHfPy**3GG%>b1%b!;rRQM6dc`USFw`O9ZPaaplN z{;4|)J-`x!Ww=mYaDth92s1Q?XXHqnfQR5oVa{q)Ph(3bAi8CZemKy94E3tUOlG<& z8O>)x*g_ah89Kii#`|({i$yCB&zfb{z_YVfw|ZGUuO@q?|Mc^a*Q&j~IkRON4HuPM z3+C;DILypOr+c;i1|r_85o@5hih-wiwQz10Nk zs_J^hnVm7{WGrh`)fnM(+p1L=KGC3P94H(&w8T49sH!O^x|IBCDUGL(%+Wk&6zXu=i_C6Ky zQZ@L{3BCoTCyQ^GP%j;-CDw-jx$ndV^f@*kbHYKqo7(7ev`G*4;`qhzB5d@v#Y=Lm ztOKmn9VLbLy4>T5s;x0Rz3HjG;lByfxwPFU7yfJ-&76U^2r!#al!Oe z$TDC8^yQeKTwaJ|UhnM}I((ljSlJ3fi4vh;{{aeH=taX(xY|M?7;#0=;0XimG!abk zo%>}PB-ov&InS}l;KQ9>@Rghc5}#&Z+YTb1gvgDxbhr6)1M$giy*Qhy+yu zT%VNS_GQnw5f&PDUktk7>A>6xsv#VH8VL3V>_DN=_~DG~$Q_hfC`}l=vB&>#Ln3Yo zlw{o*&f+sVBk)P$P*tKPGDrksMv8Ib|0iM=4mDrVtx2u@+bEJoj~rg~;YF%IqbisT zE7IaI>eV`WonggdJ<20R9gYg(;yG#F9I8`4PDK_l)&pu2OWBjph*blsl+a+Jf^~uD z&5%gR$_3aR0+pJPvES7lAniriG+c8W8z`p;&EUWkmG1% zhCy-GKdIuLsbNNHq(9!{3~HGz_9Rd0(V84qWs!}Iz*1NE$fFh4@SWW}fl?#RTT_Tt z4Y8m-M&mL~<#Z_q6H0~^gya*-)fAvz?Id3~ir^I*od|-X7JOsTN#FEIL#UXeo$pa z?%q?>qE4=1nCT@UI*Ug_1|>QrZ&ll5mZV9#q$i>!D4yd=s^m+?j7qTVv#aetuUu|j(A*5I1IK%GPq=(#52KeTu z86qPhr=fM{cXsB?`A8j}p@sn_0v4bVI7DMHCwTo5CHWR)+Fzty#p|ul?ZApfepoB1 z8-Zfwkp(9*#!E=K+j!pF|6G+PYWiX(nkQYNWWjA?C$?m4?q~+tryWF^@8o6}Lf?p( z3~@$iMMWHJA!#ZcAB1rqK0@h6rPFop!tsenKprJ@1m4hqWkEV8TA)QrJ%>r;pl()* zBp4@(ZjWp^oYNb22;t@6}J)i+J4i5j=A%ljUDSGNVEv1#PCRk1oa)SXY1YR@oa zWWp$3aYWFRshltxdXWS~_8901%ywqLo4z8VsOx7E+1J$#X+qYQ2CGP(>YjR>d7)Rb z(q~Op;l)}A<9wrf{3soK=&d20?xd-I-cf+|i;1pZOC9KeIw|H|YUgd9GuU7(lxtyf z%^?13x(=l-c3fSBXuRer$>H09HQE@wgav_uAaET$LdEw)&(7YKym{-q0pWJln^&f4 zSVAl|0@txF>asek*m5J;I$n@`Y==H+?+odD;#Y3;=5Kx;H+5^>o3RY0ppr(*LtlKnrGP-)ash;c_pj=D%2PJsI0?L}J_j!dL5v)+ILb&cED}bv}=8jeluHdRJFI1lgC$8e^sgiY;_Tne^x~uE8 zhO^0#|C>se`Hsl?%JBLgryhx}y*+IG%BX6BQU3BT>k4X04&7VM8SIXueO_pK32}9H z)*LAC$yi*HR&Ti`V7T$F-EP3T?PP-PLcTUb4a4iG5@xQt+T`e>9{K`n^5^1mX+fr4 z$srY=Y9b+kFC^OPzz!z($s+sC@cOPm=VB)dmr~X;>=tb;{o-kF6`l_>>&ULx*gmpb zHY)(%E=)peX))N^j;*G6mB~U61IuYJ?U5TCOi4vB=8A%BSWg*TP>EnEDu18toR5P_ zfN||#2v71hd4;O_pg(<=Wyplow(#Y`at!zJF}H8QzVPX6Teq2TlpU=OcWuKm@@xXh z|Hfu4pa$y2#%`hh$j4R)jk#`UJuxW5uqi$1HG=6F=k6+3KwW}yeLN)j#CVMe7dGW&4~v}~3Z^5}XgB1^Ni zE%NE!=n?~PO*S%YTC?t4GC0QxA7nBu!|lmFw4|o9ENe8o7Bhb>g7xr_1raWz_T(#b z@X!$mOXCB&h=xC-PngEB3G=J;*57@kL-DqX@cx-ZAM*-uF+I2IGhcKLC$dOVvqw`N z#zIxw4ly?u@fOb6NuzY+QD;p{Knlt2YhAAniSegKF_#c?PT*=(zq4n6YE)~%|3(s< zi`-CS?vM>#;!>C0A08xAcCQFmXd53iqnH~iHFP~=_EAtZGOqxH`W_+QoQ7sJSDWsh zuBID5=Scsrj_hyro~0y9Q}a>RmAdF6)p&dk63;L0+fTW+U@eLtTS4GwE6r zX?L|@lVlHr^|RvWpI-AgYwU`7bL`GGuhDeLjFk)eLX*^Q7<^++wFHYD-FujP|P{W&b0^ zMa_V2^q4n>bD0N4G<{d(VgoG{BG(xdjk83J`e%2>FtmfD5F! zQGK*hE?Ba{Hc3}`Y+Lev^Y`1{#*vajC6CaOz=Oq%ITwObt7f3&1nw;tf<7LsbR?t- zd2!=%?>w&z6~lQn{0@~e@mXNSx zHy$InpjeWP_i<;t^*E$A4*z(lQ-uo@K&h9y37~qCBl)T~01CMJtHV00D>4eD7Qq7YdZVtLS4(;j-OhO$9ugxCITz~stfs%w|cBw{KZ@RkW2imOMC(3 zx)`S929h|P4_sKtCfWwOu+x`+>ux9vJDHnx1`+D4!Hs)?1zkLzC0&wP#q=?Vcc&B6 z1$%p)W5@5(WjugoeH*u*Z7?OciJSeog|LsHV*z{{`kMLM$Q?46W;X*x?ju3RiVuQ9 zQ}0FAgTRifl3u$38$iL!FvbP;49>fUex>$`x@kIj$4~r_vwGjR`v2eiec=DS#-F<0 zcf4y`d6hHR+%x_GgN7CEZ_1;zlNzyv&D2>muF82CaHF$c#rNhWp3m@H^T?E|v##8*NyE@=ge3GmG`m?{@ z7rx;$8h_gNJvS!(%6>?zrOHnT+9Ep;1cXCk;9+9l?R>1L>$MVeIG_q# zUL19PWm`sG1XQjLzRv!$mNsCHEP5yBG@{U)&54r~X;3*{oIZsb6{@#z&6-NZnw7`_ zNL_^}1q((iPo8ny!1+onOd7Ih?5wfF)JzyZ+JYTmwf{$9B2LX5b=~u*@*1|( zj?qO>8jV)D*y7Bt1c zohB5D7qPU$Fhi#xTjW9wKkUMQDy{%=tTdXMOR2B!a6^c*?0CyXI)>@!~gtPq`Fpmf}$KneyR-^)rj%N7~m$5 zO|XCZsz$Wj!eMVWBH8o>&e_Jvh8=X8!?QX+>`^jEKT%O+l%3dkV1@1mGW4Jo_G*Qp zKS`_0O^GIz^t_EiiQqkzHofmZ00j6n)cr!e$x~266_wNhZDQ3yD4TqhOF`SBbvO%` zLaRp)OXO85bJ#mz*Iqvq5xNS7CH9W6;yR1L&6X-+jko5n_P zddrMWYcsNw(Rs!rO@prZ4ENi^GOmtYSN~E-)F4AwAX(%Tbooc!<;p{^W%XWOPoe}g zoo^+O0#wyh0sV`Krkp+9nZN>E@c6)4n?#z{L1ByaLA8*D`l)W!h#Ew$x|*PB5NYH( z#V^XzX~ks$8pB%I5))@?9ueG^P>lm?1QQ91)py{w&Lx!NC6nIw$p?jFH(LbDY@3!i zy%YvayODVlHd`AcSWUAHKA6(9%M9l7^TSzQh+&Jg`32({L)zdE& zAP*#|ZC3k(-2Yag7-yKtGNCna%od*({=~AaR)S=>N z%@ac{L&hCLS;mnNa@*Tt)~YUK2L{|c!mCe z!@mlJ<8ez!muK))mqygkq7j>iL-R$7Goh?O!+GfAPIJAhk)k!*7{(UIIh)it#yA{= zDZ*5`&;t4sUYJ6u=_~dp?9FOwuhbV-U=a)noKrfM6h#yw9 znG5h4s&a-+uG(apNB{h0HGQWSZQoyLxV)>k^BrC zD_}R;he{HXhMR^b$pA{#mNTT~Eagp8iAtFY)<>)aV@$1~5JZh^bWISOI_k00qZ-vu zPi@|H5S0#w<}jJEquo_o22HK1s)=6BW;d5u6DIbjx@+yKcX_u~^7`((<2`SA#Y$Fi z4$X>@`72Sz@LNX3_*u$-(sJX~wN}|xQfd_tIAo(?`7teGq0^68} z(4_^1G>kxOt%8{f>Wxh(bc96(AZTNU;=>Q_;Au+%;o*|`c9@>E%Qk=oRq(9#w91R1 z`^3az-)LHtuXb&@Bxkuc)fzYb^oxizjOto@@Cp@ZU62O?*+8$u$bB;Il;H-|3K{wd zL~@q%-v1V<=%&(5MLchK!D$~ccbnVa{xZ1jGdyWtSDWPyYZBc|-t@9Lt$zk|8vMz> zcn2Du-aEqKEkgE=n%Z4ET1%AIAG^4wwD`;o}8Va3tOh+-*OH%+4d=a$- zI4$g8r$7U?mUu^fS*~CV(l((!#xh&%NgZRV zJ-g>#_gVX0@2Rc5dJ>d0zVlrs8r3_nI;W(-k>+7UFa24~UUViH>tC|Otq>3Q1Tfi_ zL;ov*bXPI3%zkC6zbYhk{(_KBN*yk@x@c;w%408 z#sw%3WP|SS*`o-;9E3g&hUVaHBg`VF7Y=9el8NP?<;Hy)(J=e0} zWMUrTOqa6a@|aNoGRf<-0<1g$G@8Rus+W_oHUW-RgE4ZTIlQ|RNsBpJlPwf0j+cXo z4a5T0*|<)dGq?b#?ASftLz;k#vdd_=XY)HIbGC-io2Y}jETg(1+P*NOK4=mU>;E%5 z?gBgPBO)E#!6Q7v=!>E*+mFE;KdG^;r+Gp>8zVcKp8tA6^Ff;VBZ~UNulV7T1z9X# zNs6MtB)UN+z|*||#F2pmipV=af+(2;bgnbZJVKK}CNme)ySWOqE13Jkf0-~?fE?Ge z3ksAyIOI6-5r)-hx`uE=1(d`Yge+)Nnp!z7R-iQGa}VXyG9%nRB^;jWJ2&+D#8PBF zvI{rt6Nxb+qOF5P=!?ZKd&O7ewpyG;aSMq!%EI|Vx$~=N5OZooNnAiG3zTI<0tDo+jtfU)(#A*Jg9IYPbpJ%bD8x0K zGbIYND<0FWQ9Cg%(y?2UlM^z)4-+z68IBVS52tH2lp7%jI}E%`xFk~|K6R-5z$W)xZ#bnIJ9J}s=Oqq~OlK<2?1W?J9WFuF) z%qJWXC?m#kDxZQnM)-27MQHU*Qz@OMZYwRwqx3k0@O)CqfmZe2iL@vGMv!w6na$2Q>dZ9&Z`u}K>xIhj|!;?l&ujnsR>BL z0-QsBT!9s7gqeel8Cr&2_=o7B%`KD!L1Maz6R=zx4#<+9=IkNi*}(u6#VI01#6;6H zUA~SS!v17avJ*o8Y)s@iP=8|=2<4T|B$Ll{oX~u~(LBbjiNw`;#${kj7`?B6ID-E& zi=<%+W0+7uBZ3&LP0_la5(7shT~Xd#0pCnIOBK#_G(8<{M#PC_@v0I(?uq7)|)AZ3dJnfZl^`1Uc7(W%ws3q6H!cYvoMlra6LKTEV z#YQE-Q|56>#3QZc83IZ*M<$_{UlPG!<5W6?1|wlI+Z5J4B!>g*C(aYuZFxtngjt0R z)rT6=gP8#8~4#C+DXTQjyo-JhkRpKV?4D%zNQLa%8HrOi`g2^P6~SY!NCsU=}wq0OxAFhkt{ z)jZb+5MFU5zh>)&V1?A)N46}t%0oy{R+7j=zSj}D7 zhznr3%pp1PAer-ox0E!|!6(n_fEhgnHYFvQVLoWDK-vNNj5CHUten`YyipjVTndmt z1uk)YD&d}fP@ zYW;HKbdq9#(@k3?qV zM@H@p(NjZC7JRzh(3I}bd=LWg4+JOxBqRy?K#7_$iSMqNZsTq-%k8%IDgx-YgqG-$ zPMqTf+bzgpcdal6(q(|y*yH7jyRzECTQXh#=whmG%xJD!E=M!T=?p|Ji6!42V(C5G zg5Tv$T5Z%G)6TQqSCL(seGTv`cs=Z|A;h(*Fdstk!BfBA@C0YXh)u&&@vW2Ja*HZts?l`1tN6U-BeJa`1M( z=&Qa)t89(tq!DZAFK|RsrWlECnzo(j{KoQ$_N7?);WEcin4@J&F7VARX}oLm;sgZx zb)|}krL4hP>FqF>7MoBSMxL;Q30c{5T8cxc*Df+yq-ZkO4sw+>s1b)SO51Hw5zsPi z@l0oGbB^%}o<7#CaXG_ryF=vVW^SzcV6A2$x-$zAZv^Z92v7{OD4!1|xAj}c^<3BW zUFY>)XY!K3_3Q(Q^O2E+O`28HRp`OtNnntM%%P1{Z97xIhRiz%Hx!q3Rlk+=f0)O< zCFuj_9A9qkum3qxTT1nRuoV%qxFpU^^NEFj`w(5M+qYg z_U99T6NzogeuKTfcRScqOxy&>hW4h>a>;J?muCtTCK(wGqhUySxb;10$M$*CY%-pk z^3y=P6?fPUfDq`82fYYX-=yDLAx~~~FHHkYXjx0rRb7UbMvpt{279@H^u*r0Y(7k} zE>m(7__cR&PWSY;M|gvu-~u3ahS$Foskd?GQ$Gue><;g%i}H^b{J|%D!XKhs@9vcl z0C#pI*8iR?zhUn|fp0JoG>3F^1Az8(1$qEfvW6>cM_u-62~pa9oFd@)Mx|R*)dpGP zz=0(Cls*qDwu4%dLvshZbccF?z@LlOS5c-o#8|NH?R`Y}@P-clmEVcZjxOV-$lN}0 zwuk;Sb^A^qGEqN@YcXL^hXFCR6gjYO{~jFm(y1QW}aQ zicU)|k7VXB2pFL0x;-AqSMd3xJqmRscn~-^r-107n6_Alc$g>{A=y|-s5m*H8Bwtr zf&VuaDmvE0r#GQck+Fd~xx@vVWyOf5MPYl3o2$#qw$!HH~PA}~%4KyK1tqP|`*ZvGA*FF#LTZ-0+ZKi+=6-`>tHU;%*y z2O2DhFrdPP3yoocX&Ye7a`uqtrs8E>dcE0TCGMzdC#8&>CvH%ic^M_jB^hXO}O!^y$>^`7`(ryY__Kw;yZ>KD_t>Op}~Ej~=7u zi6YaxzgU;#g!d=!8gPLwss8;k`_sI6)J#JS6(CLp4v3&oN*yR*PW>gtPBTtfGe9a& zNQDN4OblR`HBpH63x#)SXrW*lUZ|UfO@J6n7+;X_)>#`4aDgZnB(qmFW@RWx1`zF7 z+K#{}Cd?vE;b!DwN+!10W5J=)L|d3m8Omw$RrLys&!kcaRk30Y^)Ms^q4oc`e{bYxzcLgcRD5Kqt#}IZ* ztw&#_6{U1(N0w50(g7rSlPRYcrL=?q=)k1ke>Mfk;D7$b#Gi96p+hUAk2)IAbF#+z zDo^RO^wX>W%?hDXDwzn}n!~8XELqIf;-wa4sfeKiozNmb9&I6wpi zy=@puTPxrw2e*GX6#!qy(v}D#iV@P}wvgd_?_rVc+ix~nG1eiK>0Tz~D4n@7B#Y)Q zp}+=R#`a}vT!=|##br_~%Y?RhQ^y1!!u9Nm;{GMDotrG+2{##Ffd3pa#|^iNJIwv5 z6m&Kh%5%@sB?>gIw+{W?(6+MU!b6)b9jd5#IL-7&@yQ%Ddwm!n0Iyo}S1UW&U02S| z@q|6L&wiF&PM={P%4o1T|EW%M5zfKpHJg|?q7}(ZCB?VXrf3D1$SPy40@QXJn%`3? zQ0`VujG=A{Z=f^_kiE$}SdjeYMJMNwBnC*pg(T^3Vx(ik$lcCRU@%)kgrdQf&|=j{ zg&-dQC&#*C)Z9;ifzptsNn!?}dr}IUPX@&Xa{QsQSVBZYB016Oo`$(Hl zxCXbhAq`n`fQsj~;s|G9$PcIah2wq$h-)#B3aBWHoamOJIq*(ej?jPxR=_YjT%ZVV zxtdvylouau4mX*r*YfTay29kJbf?4DzZmlfCkc#BP}vBT)a5!aSV)7waaal?_6RXa zQDaoB*c8g!l)i4z*Kh{q^f{epJgw;JcDsqw2DZl}_1~!{%2XPIQAaC-PtiLfUS{L*U zi7Y9jWpw0ln*0_ptdR=Dtw>?!!KCG)aG`!726P;>;r|UWL5#x4@^ed?p)a3^OHGAI z6m#(cTf87f4?2+!1DK3ys>r+FZ48>!6isBd5kyTGXN=7wWAnC&#wVpQPt{w6IP{Ug zb24(BKNH{h&S$=N;%a?(T!{MwxwQB-4WA(K)WQU500^m*fc;>nLFH(w1G)-(rYhgg z=Jp3`p$J><%B1qH(jw)}DTEnJp(?2m2M{|yP`I*o8Sq*AFY0;KRt9BUQZIv!}diC&U#g(I0*KxBqaezbwK452VaR5E7$4GEmA zsK}P}p|)tic71u)OE=fiU)oEDx$JBWXS>TAg7CFI1>$E8A(>~0l5(PW(Ylhkyk$zE zvWS>!G_QCIF;SqZ!m(dguUlPjg43(q?Z$S+C|0ae&#cF>&RP$PUULu@uJcSEd+AEo z1)2x1?$IZu^h)1}__HMMGZlo=s=c+5ExiF8@b?nyt6nj*vCK&aA0x=b%~nBhQSs6% zALz`BvZ=N2dSEdu9J(lQ0=3DtTTACf#Q*T(#xpqm#Qj@!pQ^NuK$J z;WX9bP+Xu#-QYKAy`%`O2&Ya+eobqL4Rh?0Gv-l-^0AGL46-6ei~~LQxg!ZzYoFQ7 zk4p1Wl=f|t$hoCS2R9*?27vsOuiQSbdOH=nH98KqJj+v7C_@ke5rlvVmE~LFM3ZlP zWeZ{^4>2`HOiD_($PA;l)<=~QhuT%tw{;3)sBgLw9HKbzM9LSb>6LcW0mjMVodiWv zngVBNx$V))gow%FRMm`-ivQH*E>>wy#+!qlo1(|Lvae|Yt5a^b2cY|Q5J!uS99N>b7f^#JqLVZMrN%ybZRDa zB1nRJgmknQNZW>jKN4=1k~M-wbshLK&sKZ}vNd@2H3U=uhLM1jBmy9Ce>7DAKX`v) zcUf4Gc$1|qgTq0Rw*OH|Sa}3@chkUHI?`!8bvl2yLp=C!gGYETHe)0J0%M4Oqqb^^ zw{h8!fZq@qrT_|Hz=Ftic52dUT%>@*<7>&IVrW!s4(Nw{cx>bJWHR`3tOt8?b%?RI zKC`!idj&|2xO9G`d!JA#FSua8$5z7^g9arw1=NYq_6{`&AUBAE?*>5F)^%-H2O?m9 zB+zw02!ugsfVKc*26uTKM16*)L9Rt_vvV4n7eoJchUV8m8)bw_!b=U8YBTg0Xee8Y zH-|E3aMULw>5y4 zgN_w%w|Hs^M*t*%0T>X3hz0>;D2B2a47B5nh$B&EI1AVEgl6$AS)@E8hG~wIcTPwJ zKL`RMfPJqOA2P*-wiJKw7n9LAhFF*gF7SIeGb_`$OU(0mOnH0rr3VrPGAn{|DF;iK zhX@WcLZ=a44k&Eu=#Hf~dJ*`L_6TkG7FM^j0li$_K0%nZ74X2^buI(R!{~O zgI^Y4XW28+=8)}R51r_Vnz%Cwm0-FOD}>dM4n+XX=Lj6xkt>o`rD4fRjL|lR_y7$gqt4_gg1PTSFp-BIyDtmwfb~4*k<4 z{r8(Dz%m;U69SMwqx659i3LAZXpul<<~Ty>=#JG1k7CJ=WSN~27-jl^mTmQcYdM1B zSyya!f^i9FD%gmAWjO9}kOJ0_`H+c#$!ET2nACxZ=;WQEXcJxYn~DPPI4Kh( z0v(B<_lIb?Ig%g{0wi@Bp5vL7lag3+I4o&)qj_?=FbQ?{3795SNdR|N5CTNGlls<^ zDrr+9di+G;si4tGBPmTDE?va;+DWLiJmkDWD?vQ** zd0sVoiWd2%4Tco!z&`+brV2Er?=TFMiJ%amnFhd$v1osRx}mnvnWFYV1^}9M;{?L^ zeIEim6Y4Az0%_-WX(~~ou=tw#Hl(cpLoPZ?Eh!8&=@$!wcQrJ$&mth%K}V|3&3k6xOdN;i=7 zlT7I$b(n~z$XbY2Ds7F`knovaJ4xr5f?0Tx69X;!{Z?oBU#=T=@X$_^V;1j!i18e@LUr3ZCEEdRUsJ zAxNGL0hj1GmwP3$v^S=ml304VmxFnjeTkn>d!KGPZE|xfXZjs$Hgt8m9lIh}rU;)5 zB@gpL00>%{LCCPtn438%LcF5@;>r|Y=vv!%qB|*?9X3G*OR0udIsV2ht?8P{IC11R zBvsK;bC9u7OSS9zpE-l7h}*P>8BaPob;+q|wQ6#e7feZ&a=hxYSpc&&8~=LO8Kt0W zUB}9;I2%XHx{p6wf>>)S(JHM&n}R5KttJt5$QP&E>X$dmkmePxt*0xr@-~fyD0O8J z=juO7$+&5nJ?{FhY2c?E>56AdltihM4s!t8%BK`+aw^J1b8>Jei>P@kBs*p|BwD?l z%CC+Asb(P&*1@I%K|U4PxQ#2d-r*cX0V&11e3EKSx4E)~!MUdNxiM?NPI|xzjKB+w zx>dTgJIkygIKS!CtVI*FaVfiyxPnLf5xu9af(fTJO2708Kq4Gye>uUzE4;*_!ok}= zUGp~k%b)t|u{txt@w=z+kOr)npd_%VX=|^4Ykizqu8Fj-jM}}HivI+H%Zm?`J6h0; ziV?9hwg`NClj(bSk|4Nk0ulSEvuo9xA-ub9^&Pu{KE*x)sd2&&m+68@m}its8tLAaT3tKv3}Mw0vy8<2toCJe=v; z!k1jhEzC7BEW-nVy!NSP%sUUiG7s(}sL|(U#|jM2r3cPW%A|elzz+<2J?pc8tVb7&!G=7mVw%Vp0sjF1^}*t*y{U`B_Bog? ztjYci(3c#%nQSXsd#1JGwT~NMU`sY=fRoYJ%4mz3t1JS%GXboprm`Hs0B1L~i5G{O zWO~R`sDUq2Y^j*qw^%%zTg)TK+{nrtzc|>jkG!?ALKFP!x`MoBX>3=#+_{+Lxpyqo zdQ8-#ivZ?KU{}hl?Ch-6OdehO&hQMTh-|X(A$4MGzmTkuZ>m6cipenS)e6DMPAyl+ zn@HfArmD(;<}d}+TfO(X%49fq65s$BozVaw9Fyf*69v8?^pd^2t8@(*1Ph|)I|XsA zzMd+R5Jb2U(QMiib@pk`u-t4@8dwXVr#Zd9?pAc_D*q1n(z4zhJ>yK;o`-CuJ=8*N zx=6jI=v+r+md=4pSMCguQf=G(#K9Cn0NI+D_Z-VGt7Y&Da|De*|$rh zDJ|V`ZQVJ!R5ZQa6~L!^SIj#S+O;-hxxiUmkpJEf;RK*D0B)_e=?#De7vD3O%n1#- z&n?Df%HL#M;xD}7kRkvCK#p|mH>Yjp;ha^dt>A0U4H2Hyl>J^jTj4`P+v^$6-4>U* z?b!Cry!d>&s!HO<{oln+=z?zCC?3`-PS&36E6v>;R<5nIA~r|tw>Mth(KzP1fHm^{ zRsw(wv0AyG8DaOP%OnIB7UT^^p59h5QBJPD*fQ#8G38WV zh(6Y~G7gzO#99;!XU^tQ*5Jv$z{IKvZa!uc&a<*@;wIQfvHNCuKF{yV+cF;FfZpH5 zjp)4o>*b!}!T#l)e7rm{P`m53jjUc+9{;Oo;N+HWy;=gb<8Uo~fCu}gx8eQM*H@Z! z9RZ`^VOs$uNg&;Z`V=13((hYfGf z=Bo|u67Jg4o{#Xg&awy9Q9ZIVk9$d{=KRX2HjEMw>oL>_fBM+j-TyNl~yR~9)0SZ%eGgs3#o4En;FH5q ztDm7*-_QL<#O>>lvhj+pGY&xJ#PhNu&+Jv!_kX|UDIe{Q3Bg!O?ffVn7%ua+XJ1sk z?~dK=ea`cRU$qz?^oc&u=8pNBPyh5RzV1gapBCTSn0Ugn?DXmD)~ZZ~6>WV~AAESd z2XN-^!!YD(;q_^u32AZg2yZy-os%$nhTaERX@6iL?hmCnSe6g$c0csS>khdF^2C$C zC2#V4Z~ZFs?SeljaQ?*HGmfHrm^z3cck(U=RvLAR|a*C>}v1=TRgg3?vUq6-yxixLvQ{+XVwMl`&ut2n-Kw zgQKEwx7$~H)|$UxvIhMhKRe)1{oxQyk_8q==US2+)7vIGYlfU2pA7DU#X)X~gSTK!2 zfeRT1oB*wiflB~RrSjBi)0cVaRNboe$|Fczwp@v%b&{k=l_gn*WQh-EOqujvnL=?B zC(cyk)UguPB^9SGLkKuBlEi>fCQL$f`C~`HPjb+{sHub~Q6WFUggwQ=XOA#q!Yoxf zbZCNt0Y*a%Sc3Fw8%kOw_9JBuZ#a%Yd$NjmZ>7s!vjE5Jd!TD##lqlZb4=|qc6UMwp#t#1c7}GY1amr5O;2bx^4Fs2oYLc zin%@)7qb!{O64S%H)sCbdGwSmXI8h~+C)z67WMA!#Dyb9E+x4TK;YuM3n&EGFF8Wu zJqZz90{r6R;9EveWvZ%yQ)Ytz1-!~DuEGL~0t5kZ01r0?QQ$!cGl)O|D2O=9!Aa0F z4-WG-OaMd>cMBjia6r53oC1jJOAOOeOYS)sSu^Ym1M`5;0SXzc!m=JE1I|atuA!y^ z%or#U$s|)Wj722FdveL}PIGO>DrbZZ%UAR{z_%`a<84GRy&TiOGK$PZMebVEZ%uhz z)I~a%;)HHGIsZpO?z%kntj9I&a#GVobXZ~Klrc&e0ntN`NOT1FmSRFa`kuN#1N^)> zkqfH4xC8+JJq?bK0&N85z$_xTLjncZTh+r4)0@x*_((v{Jt+`aAjAa{J)r~$AUG6Q zMukOm3ne>a6TCDv8^yIO_r$JQm;@DID=ZXqAieYu!;IS?9~u(GZpHQXm}QMUS1;6{ zjkd`Wp)9VnDcxDu*(>X%QntFt+;^bd{8i&$h4{7203bilqVz4P@59jEmmwhCeR|0`5}_ zTv!z`1^-bkRcNAx&O_H=l@`{5L!BT2*hPWmb?IJzt@`9clPt(HoA+vs*;dlwGbX|A zgiTssY`isB7ZiAa+;Jbu2Hd#qCK6;i*P0L@XRG9V@eE0E(HE5J5f2_@<2c)4ucf5 zpanzOkV%x`kIPEn*It5=%XMxg4l|+VXt_dLLQpj}X(0^3Q?k*h?>G`OL4bTHp#R|& zk$1sUCK7pOrf&_2iV#^M00m>4)Agd6#E*{+Y()c5fQn93D=`Xa8+x`S4K9Xpk&RsB zBeNk%i^A)d9@OY1OXEQT3KW+ijbFY>Nv2Vrw4?&jAOzAhIRy%CIvI6Xb13%5H=S^n zD7@uP*HyZL^75t<6Dqx2>9JJc5UDt9CN!0~JZD-1iAGH37HjB&0HKG5Q&0mkE0E0K zl@n`VErD3cI##om6|HAg>sr&wR=3s=0*K7wT-!$1xk}^!5J5~mS1>*dPt4A>|)Q|hF0fuGYYb$D7GPj)hw?C>dULqSlV>V&X08CyYx`7>6r zX8{!;;xVuY4Q4vCoA}i3x5^OJZf>BicI+J%_0`m#$u(DYrD}R>h|V;&bp-I;-g?7J z-}>GcuXEe09LG04eCm^*-3eJK3U^CDsuH1$IZr;_hCj$c^ud#*Y-BPkzz-&DO&K;$ zfJKwQkHS>6A{DVINXpvYsCKm`?uP<`V$feI7d6U>A$UwO)aA(3w*NWRac_CNF5`BL zxGfsaagU1&qvpc7tV+NThse|b88HLjeJXc(C)MxTcf26dY5gXRn2rlLoGw10ckh#xnS^6RxZ^ zBnw#yFZx?-tgvR2)!7(cc*f?yWM~=aw-JB3Z>LppZBh)d3z~QU1n3A~E&?|A(UwrK z1Y2x(Ygpd)xU|0os5*Y^ryzepMMM_%kB7RURYkXm*`-^uqnt!$c$LZDb!U3BoPaGW zlXzgZFPXPpW^Q{s%-t3@Ro6UcH7|fmd7Wop`|DpCV)mjR7XN5K{RyX5u7kXURwyDF z>R?4I2^>Ar1xmYUK3GId?BheHL6uDRAF|oO|b5CrdiqXkas-shh2G| z0zLL!ufyek;-w5{K5UIExvOmlPBM9J4P;tb+Cq13@c*8>v$V)lno=Kg)yEBPr{6x@ zPscqCuO6TSv^$P+yd%K{+iddVJb*}?y?*nDe14nS` z@CrbFufOUkt~g9QzR&)|5ATpqUe2HZY!1EF$?S@ux}Ip)?klX}O1fvTC4-xm$O|Mq4 zo)Uo1{A_PBOp}gp2Ia2{a4@TIke&9;=6J9N)eiasF8YSB81|{7T4d8SEDe)T$dZuZ z9F7K?g-8;zo=LbFp76Ztxbz7i9t%k5l zJO>x3@eLusyo>?6kcoJ@iqXC)i1KjFg6AFwAQ84I1Dui^b13Q9(JBp*5U)}zvy!Ut zF%I;R-S|-wEldeFk`*(`{y>49Hj(+-av|OFogj_+kl~?9ak3U5B@0XC(k2Z_WcZ+wxlui6M)D6y@@fTJHU9?6&q&rZDn=DpRvM zQWj&f{6bO{=s+=5iWk|hO9rgo7>@}z&s|%|W?G<>X zHk(ZjxynI}Dcb;K9RrcvvaHQ4AOfH=0AerAsxmh}v^POiL_gF#8Zj)#M+NrGJj+r! zX%WO&@>1-FEvu78;c_9Ts7P!yL(!-O#v z2mE48@zOF%C$rMfk|T}N2>*|;!z}SgXYmw>tS`f$^7sT^jEk@obeWWm8;R+MfJhu~ z6P(7XHpyxPa!6_7>;h*qDo2w-C)76sRZwwrPzyE9mM5-&!*_5JWVSSY5N=-T(?y%p z9}#Kkq!Ux8b0IS|Tb`*#b#ULfa}?RgTAE|M4la!iS|O5bJtkaRtz&^?>9B*8>J z$Am>ygfs8+KAUl)SQSPEas~-U@5=NQh)gmqXLOiwCto4HYV*1zlz4_`hd3~J=Cqu? z%B*~6trCS>t>`H?6aomKoZxUmM-*KRHC@-0LlIHC-VJc}Mu9FbBRxY#89+xrHDB3@ z8T7SA9TH$GBV3A5S^xFV-ge7C0n;B}5Lm%aSTB*1FcUG+k5+B<3LO(y_2_HR^8PT) z(ms~%U=lsalUS2;wv+?@Qg#|wRzTUXW5!fJ-e)=eu~}bX0Z8+PfG8ZRj5JxmYJ3)G zvlUw*V298Oc(TTKrho(8idR^`X`ePk)m3WQbwt}$QQyrh1u{R8Gg^X+7AdtG7;;Aa zRZ}^UQ*R|2&X#OBk!~CkQeO$>K4MpmB^4F+IAalFVYNVGbtEg+Vgm*xm5|la^KTB5 z3{{c~Q&w@|k7ZZZWgi!EAD6gzweHHHrOpN@kEz+Zsm;hSXiH!MuvM+JRZT^AzPN`` zd_|ndYWGO6b^p69Y6}r7W!Gxo6)(G{a<^6$|Fb|#WNr8LcM$+b{|k7FmpVfP-U9Go zW$hO1w!@tFJO?vxUzK;0^uU-@G5tj%o|Is41V@4=bwFrw$CrE?mm1C2aiy^hBbR;K z*L~mjaaUD8HSIeIi?9x`yL3ndg#T}dY8WAasYZ3d%8Q5gixoJX#wihZFZUi;jnBA3Yj^2pxWXLOgT=vkNBC3w zwT|uhLz34YJ#%x?reU41hCjA?r?-%kb8oS?hu2Rba1`4Fqyr#%10tD{C)tv>5hsVN zWuusrJK2*zS#ssqL|Ry=tg+;D;RGbKoSxw3HsEu4C4hsrPNDXI|JRmpnT+9!c4wE3 z*L9b-Qt74=cq;gg9u*+x7lXC*B`-J=Q8l8J^?$lc$*0;Ff%W6pLpWtZe9&e-@YZxmUV4 zX#e{emlya@*0`4wTA>B8>9{KaAb^-vRCmkL05w3$zi#n6H+P$)QoZd1U2S zna#TUJj9thnr)?-t)W>5!@6rC_10jGr0MnvaX6(VHl%l$V*R$9Eo%;=shNCmu!5S2 zg<6Swnz0*urvU{NTI!w+kGXikC6GFS`B|+XI)P6Bpt<#yty;9NT0s%fbrUg-7h1Iu zI<^0mh>PA;uDP!mZJ3$ub*-QIj@|mLYjmV(IDUFtn`aw94cTz<<*$4ArIXu&(s8Lo z51Oo@Cv)1dr<=MRdyu*z ztEaAkOBh71_I6kF{){me=XgBsw5o3Vt+xTU2Rs2<@(DBeuDg_EeM?Hhc?yqvkr@+w z3VS;rJ8Zbg>$B!z#T=+rQuYDp^~rt+KUE z+s0$O>Co18;V!|EkTAXU-~?b;0GzEkdbjiSqXQYZ&9mWRFr=4LzrnO?Svq_13a0;0 zO5L2w8R()7a3k2-dBek8%sF`_JE5q1QgPi7xoQgjYT;&m*2KGN$e|&f47$Zh5Wc;- zz4M&UKQN+uT!zWI!8=X4(n!6Id_#zNQ{j5RW4kh!{LyXLBK20Kk8u~qITyJ%4W64A zxU|oWS$Awt=15J=QO$1f?C^xb>xC0mjOeyMhEe8mPS?G+DYw9o)lx z=1ScZw!6(g9K^5r)Ndiy4_eNLrQP4l&S^cXdA-)}eU1Cv>3+T015?%$1yldAGk6sp z(HFhn4_=Tv_Dc;jR;>intFW9moyyDvV*|q5L0#N4UgQ5H&Ceap$9H+>WQ?lj)rsBY zwTHcO-S%`{h%&Y5P6|J|+330Ux*tL=T;%09kN8;#e= z*dX2K!`|i(I_A|@w|D+It2xp&*6s0HddJ$V7rd z_jT`8KiGrZCH-D-j-K$b{iGDIskq(Z6~FO^-|;D5iq%}Pss8YQI%U_rPTns;HGkGm z7xc+K^h@9DvtRAA-}Px9U8Z09|2qde1@`Tp-@U)j8g}kxf7$I%_tP)pnfv#+<1-np4yzGu zwmS}=%ir|7J&)h7(|$8xA79|0oC^Yh0Kg(+qvIoFq~s)JrDbHnm*%Edr>0q3M#aQo zX`CtQscI_g>g6kJtn4gpt)wDuuC6U_tm1&dK)^6@vGFl-vhx43aIiBlbhGq;Lxt!@ z26jd;bHJiNL4gnodAa#Hdb;{Ld%OEPe7yWTefrT85&L)p3cr7UxqtqaOd+TQ$rL9D zlL#^4=^>|xBMAMeNbzEwLK+2G?1=Fr$3PIsj09=YV@N~2Fs*F)D$9uyF=xuGN%N*n zi4Z5Eu@>P>tDvif3UyJyCDNoympa0AbXP8>N}F}7YV|6yY14*jRd6lawFAt)fdiKW zAUS^Z*0OEu_AOj^_wePjcSPJ0fCBdsgi`R}+__N(`)#-rrp`}9Gp5{_hw)>_jVDX4 zO!>0LR8luHJ)HQn=ZT}lEG}vq6#-P7SF>*I%k@gEvSjRCC`&D4f}np zoZjWruMfJ*C{b4Ml!&?Pn9Ya=d!9kZC zhaGy@VM9zXhmLb);WZqJ(HRt?b}L>-7>q?^a-Sz)w8vji;f;qLdpkl#UXS7Z2-HxC z2zcZp_R$zxXx5C>36ZDumzrisT6rZV!9itWf?aya6oX-6mD_F5JX6hA+Hg}0h8Y4k z+=p?>IVU{?xpNnnt450eo^$*848C6FVyjaF)IxrzE% zswqaU`W~T6%Bz!;5OkXb9R3mY)Vuw%nxU+*x;n6|wrUECt_jzMTba_Fxtp47w)rM- z;pnL>#u+0w#5~Sv8O}QcIk(-5)dr?*cGsFfQ+HmRlrGHZ0(maYGgGQ=xT(48uT)le z`tzqi*LTglT_{BEa02mO6aM1LQ- z7DT3c@R6fu?n~32YglpUpTjRT{ZsRcc`m)0F6M&}J`*9tMBxB$97qZZc@yn!r@#fe zZ6C1G#l>_7Ji$50NFvvR%f(kz+B-{z5SG_r+>y3vyS_@yO$35%$UE!QR!1d?n-e3udDH?aCq(teV>WF_l|L;^tLiBRMkgrqSc zU`^nPWINvQ1k%M-CdYSniJdw0^gySCY=UQ`mKwE%Dsjw`Z{-V#^zIlq62=ic!!#iZ zzoo)<#n2Lbd?qxb`Ak$a@@oHxuqT4E#z83h_kTb}W5xr9|YX9`6Im3{+YQfY9IoKpeHa zrHmd5qg3(oe)#&J3CR^gz#(&^hJ)imkhM{V{|x5}1M;4+n6^Qzn3zEH4_AV7^8$5KN&iJMHaDNPBBC3RMEiHZg4 zLwkAvct%#T59*pdtH{GFc`mF_4Txtw3)+B0@L7p{A8Ef4)qys&c+n**=*V)2%N$La zY=tdtV+&IJ>Q}DzO~oE1!P^1f^`w;mE?^Tpfo&!jBFcU6)tE~)_c?d5*$V1Vt2?H8 zg0gG(%m5>sa^8v!##rI)Y}>wwA`w|NiTj)#3ZCGU^)9qeVl`V+3mRhi0yCo+{qf7% z+TYm{S&nqP?+pKEctaNwxXIBhg>N0v#x4xE%JdPHaSat^2rHMT7bfF~p9@_b|5R!j z*6@apDvhlr^(#^4T>SF#kFxFbU${;>u1NkbU6brbCv)1Qja)#3v%KIQhPo3w<}#{Z9Mt*cxWZzN9b-*! zW;E|g&7st;1-#_v!&>aSbiOl)rsc|O(T!QWd)1!-jeP0{%$o#D| zwv9YwZ4>#nQ_}PwJ6%#2R6-6p>6VqTiRG2P6jaDfH4#Y+>*k6%*8G(Avw`CR>e9N_ zw$5&wL;U~dXd@APHejX(YV{@au@{Fk{Hq9eOVuT4CmOSj#c*;U{605JnF4?xv$S}fG>$C;=B-w` zJfF!)UPo@zUGCksd(7qv?w0R8H8-qbN6?*a;%0!|>DD>ozbWrr@_g0yPKea@ZJ~bq zduv-;voL|SSJ!tT%%+Rcz*o8&> zH~;?%Gw!~}_U})g^4{yAgY`W=YD&TKR^Wl=^x`4Q02}=hY&r2dFWbF$+Ia2%Ja4n6 zJTpRx-OOvZZcbOcXr+EEuGe^ip$B%x56aMh96OSMytr@@j;&|69gFzBeL4M@1&jm% z7NDaAAKu-a@F`#dS{m{3-fQ{H^i3Hdg-UTH54$18v{@eq?vsV}+?d&$h0TTJfnVkQ zTL5UDo5f0mO%mv-k}9=D48q@_;gX%iSpBgeB_M&aHJj~mo~ogYU3? z15%n2I^ggP*#kb|s7zp~F@ViEUkP-e7NXzcH5Q4D6$tVg+kKx28r}Gf9{^bvh{692 z`j`bKsUHl|V8#@iop2wk)l{)8oOit!t*DXJ6hQMF;1Vui-4Ws-GN2(Q;z!g+aGhJr z*o#V4peE$p7IxY8(OZjboa4lwtT?-c~>s`Bjk{BG>0pUFgN(udUxIsz{zm z702YobZ}q6Si=0wp2F>6bQMqtj$I=VK%}W0rZwRqMxik}VKNS)6sCj(Vj(nYK_yP3 zh$WUCdfb=s8b6UCD2ig~px^;iQLX`@C77RPQJt}*NL9V!K(L)(094z|O}_n{KKUX7 zrQK6$N6`77@w^@*#N06=qChHQZ4IPB7GkAwK}-mqBi@|QR39~RpqGW=|3UxWCPv=S zb)zwSqc@TwSE%4MoZ`FX)Y(|e>BS*R!lHGUNJ6DeicH--gcZg7oW&>-{lk#N@B6!aloKVPNWDH)WO6}ues$wIe`bhU8~&~+$kks z9%NA>q+k+eVWI~FG$oadPYwl5R6eHXW#3GuAMu!tPr=G`Wu-=XBvo+bM~>PGsuoUF zrAZ1;o}px4aGt>&+*`mU9g<@sOeN3N%3h9$)$N5|#%At$-dtK{I0XOWFe2k%F5pq7 zoNFazU?yjfP@q$i4`e>)#5h;>?c?HQs3W_qgE!M$XArY0r6 z*hCf-c^(^e;H6sP<_7-8p&^=O?&wwC4*?pXr8HxKBISS%r;!F|eice%IwVv+s1`Z+nuT5{muBaN zhNMK@Pl(a}T!pr4H4o`nA7{S+yo5-D=h zDia=Qppsl-Mnsie6Qc$z?1Y)4dS9eYDwbvqmWI+WEEw4EscNZ@SUz2Wl%%tP8QJxk z`_bXZylD`@Sq913{K*Mi0-$bQDmEG#{IpiB>guk#tD&~*yK)-^B5DN+E51VMB;`^G zGDwx`%Cd6gH&*ITonK_yq_@(PS)>f0oL^3z7BG(He3t)67oO&vyd*&g5xUY3k22nG zQroTK>VJx?aS|uI%4>NrrbBvDzNXKuxGa=n-v?$`z}76XYN_R2X=lO{bz#?r#^l}1 zh12BN(>ZLlR%GX}B&kYl*(`@W&=2X=4otQx7tY(B?i3NmtJb0{*KV!X5~jUo;ElHI zYP3(n;*`E#BCPZ)t#zrE+J+}8fCBU^SL6o+RAgnEpV4ASTzcr)=4UT)>ZcACPS(Yp zSmk(OjBB2!w8knQek|aftmKAlu9B?f^6J+zsA6K^7L+R4GHuvFl8e>btl6yT;;b}; zzyQ3^6|kHPjl>adL4KT!pEMM@e$02FX_zK#ndbj(o|0wn+-2f+9gWh-)b0&;U2V{P ztN;jO*UsypPVUzpW}zOWqxEXo{*32-?xyzc!2Ruaj&89EofDm|QRxh5AgKDTFZ+g% zHQ+7rgot${RPK)I+w88XUJ{u$t>Mbyov`Y822p&{rMk`(Kwj?iR;~ggu=FNyK_=>g zZZG!&ulEkziI#1^ByAFv?#-Gn`u5dZqZ~Id z5Ch4AE+`V0tqwBPm4Iso!wVW|ajV`|v22GAaLXAs#9O%SRt?hW&l(iGnXpP1q)Nl9f)e^Iek_^JFI0 zuElzB!qu7mLUKxC@}A7%3$7(tL2mMLtY6M#j)CkQckMLaswrPHl0M^NdQU66a+qF? zroL>ZFcHyaNFg8c2P^W*GV&)s@|n8gTe71(&!920jY=vrRPlxFda_u}Bj>?Q9tZRs z|EWMLVD%O>NoelRbn`f0F#CLSLl6J$?sCch1VD4roE1xHw&d+u&a+3S`ba7ZUG3&0-mg6TcwM$*R+rlG+Cpy zPA7CBjcre3$}P(B5-Tml{$|%)bQNYm0`S}g{l$oGHDK>q1;yxK3${Zk1TQZ&EfR-T zpD8Mx=Tnqb8!GkkR^?ID4=&*JK+iPgTC>S&_F7MhLLc#4laoUu1!8Ftp=q3~#nXZ+ zXhSlm^npPm16_>tvS6!pHunGKs%fKiPIO(u>3GI4)(tZ;kEm*92c}{U2Cdy?KFa}# za$1M>XO}f~U-x-%id&a)+5gAQzh|@Fek@)WT?(L~K4|ZM)G31V#`ujdctI}u$pKl7NBRNkxS2CeTt9S7$4xzGgPW&!E@#sO zB(+4xS%6dLlk#qpKRJ{e_WtRkiJp>jYdLyexqyq|l!tDjd%2?Dae_0NXX`4M@A?8% zdgfd@1xvWJRGkI1xiGxB^KI9W+cqB_J2^v(Adfn>o6|$XC=Ek7VfVRkn=sX`D}j{y zqY7y^`{cXLS+m+`{`Mv3E%p9}AwAl9>- zD~pd{=!PoX=&++l?~I>y)yF#zlN-wW%fh2MIQP!itzTbs;wPH-dCN@;){IN2fv^qNageRy&HSji#;!{6HlckAOji4peE+hEY1|6EWx;HP_Xrz?_U|LAA-)oZ;?H$LM-zT(rr z7$m>t13^I`Bo2*70YJHAHj$=A!&I13r%~y3N;nt--_j^N7MICqa~i!?x7q8Y^Jyg3 zt<`%TA9wcse84#?BD_7iL%Tu5B0(i1KS-xMDXdCM%1bCs%FWI!p-8C9N<7EAJpete z!b!tOD#Qc^S=xo#+gaOOT;5&ZUf^G0-Qi;5V`JpxU}oiJ1YKz9XzJ}~Gr zZ}0!`ZgKK);z-9w^mX=jKzI0f`FZ-qMkIGTRx8U@7lQ*|0=OYq(BMIYZr({PEd4UR9*6dldY1L+A zE3cuxlUlfV0h7?~o4a>ezO~u6W7&ms8d}t-lTIPR6%BvH3D4q{D55Y;c4^XOm30Ls zlUhlUCS#QQ_+?R-IhHxFsl~2V-8!t-*RfsCmR+0nZPu$HSb%_yEV{;Pg%2lQ{H_1G z;D7w`3;i!(-Mo0COF#Hq&hh0B%?4K7RwNR}-8(K`%rSXBLY389{?xuyX7!k3x*C~C z6e`C^Z12b2pZ|Z@0@MmX0{s)vzycFgZ5W^kP_8%#Bb1Q1j3_!!Il|JT$)7F+qVB`# zK%@>P3=7Lnv>6iMtw(9Rk}3oImCZ^zC|%kjsQ#FLSu&~ALmI`l|H zaLL?IWAaG_os@FQCZnX%zbmVplBMucobXF9C-knYzBX(QAP=Wgb4`Mfybe4Q{qhpH zm@wkb!WB!4aiQ=SxehIh*ds|LLW_Km2`b`>D=_kI)R43}B>{zi0S~OyN=*M#yVO!n zH}$krC_e=?Q&K}s;82RfRCU!=R|IsCD^$5+t~5nt^Hw%Ud=oo|P_(g581V#lSjBW2 zb|diseUwLLSDNX*6>%Jt&mjtnb=mOTI%FzSyVdgBQNt}2TyniNH%oMHVKh%x+jZAC zJGX71(0; zkSW`F7%7T@-a;0+w{uI5Qe2eBH92LLhbouUy*Q5aU7BlFajk?$Lt$r%xfr0nno6pwMKGy>W9ly1X*b<>vP6bSP4>Qx5zSvH?sfB7TM%<(^h$H zv|n!fZMO?VQsGo>w)^h7Z&p?xop0lP|mt-tiomY2WFLe0s_KmApcnm!+C&{2W0namzm;Yw4~}F_u!P zLYh>VvfJk^?oi>c9rxGeum66zB{eqs;QRMqMVoA*0X(b1y@0kn=_pSPjENka_<}Te zQBQ)^qafrKCN*Yh?l%rh+z>1#q`y=PbQM8g>C93>Vz|$2y5s+p{a8pp+s#jgD|?~t zTxh8hP49m@bS$+)xEEc(|jW;sd>%X!EryE3!x5o`OV)U(rbJ0f-L`QNlSz@uaUeeBsl%o%Vr&E z5Pw3XdE!H@ZUTZ*`&?!}36M#8I5V09C7CF#X-b10RH4;OC_)$Nl?_&MmF}ddgmP(x zBgm47=v2cAJo?chZf>3IbjU<2YEdIit%?-WT;obV?zoAKW*yIdY~_L1np!s zl-1{J776>2RaDp8Z-@uXp@C*O)t&RKF)stGxdopAZIr7CrbzHF)U=%$%p9@Qaz z_-9$ode(miw2a$$C_~%&R#CdOp>S2GSTW+wtmZXLSJjC|^EFk#+J%nmG@7yW8oaHp zbTf;Els&IH3Q~0Li@IC_S}kkVd4%z;M3pODeX9S>qJFkY`r~F&4}04DWXA|l9o#t! z=c)!0vXZF9+g2+BSt%grYK*{b6))z&*>s;p2l}{oy zEp4qU#mO?_XXY&28BVaK5xJ;$B&F_@?>rCw5u&k%YVu0PFc-?ZL0 zxuNAOe>>|!(EiuI*C4G`t7~2aH^He6VeMaCTevIQk*{M+aJ%5b9`&*}z66tudV?g% zywz94{veu@hnHs39~susa5633@yR%nTM-a;h=S zM93WYMj?pBTXJM^q-35o8MmMTCJFU>Q!M|R7`ZL(ZW?4eS*Y?%kPNmC_FPmdR1Zt>5_UVbEZe3BoOLp|!l_FTc*kiC*-ln#<^e zzJ_-Pqp+PVjiDP~YlsfsvA)79=$U5c(iWaXh6gx6Kc{-hs%CYQH4LPT>G3y)ruCsA z4PY;eIn2A(wK-Oo4Hu9Wm!l@O6k+-j=gjiWxWby~$Xo0?Gc3ujj&ikIo$6DMB9bLF z^Ob9D>;2w(xd{q)qs86p7B4hrlS~}6-Tep6(Q2d14w`77N4|H9snnNnHL9=u?^b8q z$#yl9mA?({bMrd13D32{1ALU`l?VUL`Od1EU!nkvN7XJrrnfltaPJ~eT;CJp_o)Hy zZ-4(=;NtU>N9Z-{EFZkw3?FyG&5iCy-yDX<;0jK}J8_XO^)OkGH>acXQI5Nob1xrf z(`6L&2pzlR0H?aj*=uiZUh6$KMYvQp)$oUh-Qi;gJK53ZxOM{_>h9#66uO`Qjo+om z%g&?Iv2NJ46KCHhw>HZ6+;1jl!Vq|m(O+cV^(@gm=jqmYAC=`gqOGsl*YEU3ye{5Hao@~OUZdCDom*MU^$TJQCq&^~A?I|5v|+QT)o zJ3wZ*9@v_{ck?THTb>vpK3S@d6GgAPnmJKLFG|o`Ny(^FGE) z!N(K7QBo)CxxjoAi1dpPxuv!k!~J6il`uUz8^gPb2Tg#Q(?P=Q zQ$iH{J{zhzI%Gi=%tQY?tPL1+DJ+CG8f>jC+!rge!Mf_1G12euqtgt{dxDbWBIc3M)!9u%BBMW5fsmoW}tC#O))+Qj9`; z+(%QKp)kZE%EQJw(#BVmzP#@{oK9RRPnt0< z5xXo10Z)%aPWkN2`K-^LxRc3L&%8QM^kfrj)X&Vq&h{j8c+-sF`x@e_)Jdw{7?@CO%Cl#u3%2w2{&VVP77s~38m2KfVS%d zs2H^*8l6!atWkeN#9EsI>S|BJIwg z0@D8lwNo#pLnO5)CUqsI`p2b0(Djhj8IvfRVVed^^3p~!_~FuRcfu)H^r~BqEU1>E(Gn? zJWbU)CDz!mDwrsiWv#GStteWp)iOXX5t~+PjaPXkRRQfpU@cbVgw%T#*KpBSfBjd0 z4OoFSp(GU+P0gxxE!69axqecMd3{)jMJxP@R)(!U6Af2X#aM7{P<*9F=@T;5+>8JH zY*u!416#ONY|S!9J)wwgS(laAiak7m70XrKSDWS6nkU0N+oS*MLzhDAaa3&o$*SgZZkeYGnlh16I5CP6(ZqTNETgW9LfR(W7r zw0&5lm076;){V^Bi|tsP-B}Z*+y4VMIi;jEw5XX2HlaPru%)-LH8HZiG6Jnp98Fur zwbHUJ+`DaCtgTv(t=WxzTNsL4uN$Nnzz-4t(gfX*zg5i@^wqcY}bHgUgA|>6=q-vmf#Pz2Fx_U>D}PirC%Gi zU)sfA9sWNL#-#o|H1Or!NC@DB0IBKK;Q~fs1zuw0ZQ&$#Vkmau7p}t?&P;E;;>g9* z3s%*9-QfxT+u%hw`vODpRaY8xGt@ldWHj0oW?#~MS(L?6CN|tCuH*kH)?ZnWVXvfN z>us6m#o<2=WI)d0JNDuiE;ON~V*Paw7fmj)|5YCe9pS)=9Uvy$_Wg-EUgb@;Wn7kGR5oPiibH$c zjbA8bQXb?R4pCq3Wif78ce!OZey33jV2;~NWwyRvsODvc+`7f)9WLft7$`G}y>G?f zKKAAcOs zXi#n)b8cyfj%t`rD4CXMehL#_ZRLz+Q78Q|7C<_%p2KbSWV%giPOj&wCh3#L9dJ%* zz+~x_hHHe*-m?B)v(Ds0T~j5tY4>#J^2mCE@Fz)5M4(JF@You=MJ#A}) zcIv4HrKe78slMzIwd}@TX5yWYc=cmwQEmLi^wrkm5 z>)L_r$d>EsE$7L`Z9mp*U%qMxVPU==Zf0(kcMNRN9&P`DK;zOb?Xy8^#D;Bvj#^#5 z*w$uj>|Sk1b8AqP?8@Hlgbwdwc5UpwX;7WlcgblN+3DyM2m=U#(?)GyNNwNll>GJX zY53^a*iO0CQ;^~Ad(7C}9&p{J?YVZ{%+Bs!o;c#340xt*w$E5F| zo@nj1X2YIn&ebvv$A-g>Y4Vz)b?f9*8CawD(YC%7H`ntT@9aTaU{H7PI(|;) z6!a)^@1I%prP%Zu=Wiz&>$9c`Zq{s}r1b9o24k-C7~gedp7EoWxtd;KX%&;nLs(Q7 ziX)#Z$VGB*h)p49bzCRwveaUsvUQ#mQr^bzOy_l7hw81!^IzX<;?{CGl7ID!H2LL3JZ2d2Ip=mR=65uIde6FfM?ZR~xAT|x_37T_ zfM(Z+9Fno5|?2dd+UTy@P-}o>BSqBX&B*<`~!-fzaN{mQR zAV7=$GGg4QvE#*xAU`rg=B(t%Xeh0z#HNL1wwF@Cr7MGG%uIAR)7)goQ{B6Fh3bv^ zcT%Lsqeh8MOd7H&$EQf6LY?ZA;Yg`inQG0-b?ZfwV2g&el=7O{YcRv9UCZ{{8=D1o z=A7HJZcle~3Rw^ukLs_gegStC{4^oqeTFCEON>}?W5A3ZOFlf9a%IbbGh^QD)fiFF zVm(DdN%ri@)2LmhPRpeY+_(Z@&#kG`u5EL8;n|Dab!_O%or4GT-HWqv;m8O7UamYi z^W@M$OMgB+6mjaI%bNdYiMD&&@8H7|FxLgP+}XF&`^0-3xO>gf;aj~v`EmXB_w(c5 z|2{td|MK}Kpmo^Mr(HCwC8%0B3#LY1dFIuI-g)X(_)}g37Fg7L8TLogRRIDhVuvA? z*c^!+8E|24E6!m6h#to1oQ4M0c;I#lil^g_S3C$8g>+RYq#3#KwiJg-71!5@Ode_C zlSW3V-<0+tMCFxDW(j34Dqd*7mtP(rrkE;r8NiELritQLG(LAkX*lL6XM-^L_@jgq z4yh*`a&-A5ah0_B$&yK3!X%6~BC4j0i*9*hb%hFwotZy@X@CM_V(Nebn;uXpqmn`@ zYN(_pdgG~a=1Bi1kF1Kr4xW3)`bLqHDVdm}jyh?jl=n1x9Isdg>#MNDf@&;Bl*Uo! z0AXgzsRI#23$2(K9y_eHrDlsNG^%zxCpSRSWK*89miq;*8xcCHL3s?7ZGQ{!b#1Qm z*1M*?>)vY=i!HJ!CbSbo`z28N=8J7_+P-@68Ib&^XvhL*8^~}l+Y^I=EXU(S1Juj>_jt(;eam3#h z9c0pUgOUHS#{`*O_0?4OU8UcA?=86A`6vMP;Vkm&V%UTa{%G20tGx=)ZLcbHk9Lw< zx65ex}IHg|8{B`SinTe*h+rZtKZ6>?)+9|uZ>{km!nqK(Z2&ftMJCR zf2)n5*KWGH@~iT_?fBR4U%#+h-~a3HSVI106uAN#Fgp#ST={q>9wE_2eL|YU9ESHf z_cd*P_k&FHRwlg;axjAfgpdCa_dgOcZhj~PVfa>Rv3Dhy%@hj_oy(e4&z!eI#kxWspKtqCEFA`7R;HU*N;atw^249P)5+1SuF zN-SRSKu52p9nX6nOyl1)_(3%iQGZdf9`;5!N5ttyib8zc0U0K~K9T%M9nXKakBgspyjM9&}`y(k~Xoa0jtczU~ zLm^qYj;~FHn8lRj^3JHuZWb|=GRoN{f5}90`fm;b#HJ%D$xdXR%8CzjSQfppN-qCG zbB5HcrY1#Zq^Z?1m&8g)$z}=Af9}$ok{o9pgSpU#b`qfnJI}WEUf} z(RzN-n&5oI3bUCfBvog@MoJ#hN+aM zM?cy*eio#r5G7ebgQ5p9Hnpi^jA&A&iqr%sl%ZF(qxGiBRbSz>oyp{B&~BnpLJD=7 z`E&zFnd7ccE>flMp`cUenup>owW@Gk>4~x`)0Z+-f;P?TO~LxrDjHUvrew?c?rG0x zrgeRQ#T81sN?BXhvaZC-tY$Y0fxA}Lvv^gLr~K+rbC!0Tg8l4Z2|H0JAXfjZ(#WV> z%=#L%KK2YTm8>E|J0KrI^r>{6D-Wrf+Q1sut;QXvOqILbnL<&o#bvE@D|*;c?hZVt ztc_!D%ZA)8L!iTjl0iX&%V9xvv*?W~H;K#M==y`Nz=UsnFF8Ba+IMG#ovt!r`wgNk zHmGLhE^hbf3f{nSA#DQUeU%Da^kUY1?Tzpxk;^8Rn)ZLB4W^3@%v*$k6FZ7-0~Xw*w0RNCPuqxtuo6}u@3Tv4{d8!e;C(l zbMrENjXq0XOxPMCkfgiq>{wz2(4~H*>9|erGZ%Kut|K#;vJKPcuDZ)=UN@U}ZQ>nS z+T8g>wsY3nH8jfgZZH41M^5R2lUof4H{nEkcTC$f8;0iU$Mbz1PAwj|D*hAhF1nm1$Dn8)$H z@uw|Yahvork9&h?_p7C}6yDtdf>dY^9@!kgbQ9Ms}ar<7LRd52~ zOKN4(U|A@@4<8=HElXnd4wG@z*|N_@w^) z#gwJUW(lBJ>Yd6dS1IK#p73e)uMg25`B5bdV!XF1~`4F z$AFwLf7RzY_2quB2Y>mue*))bXy+PfS9mLTf4CQdyQF@mHggV0ft}Y*(?NR>sCVdu zf=G3N`j>$O=R$Foa=@cRAh=_RM|D0pCCi3m6!(KQw}2IBc^YAT7bZsp2!lJwdl-0F zXSabkxH%tae+hPk9IZJ5_kPS|Zwm|xx(TPOb)hjQ3yy2oMh(tuNiW$UMaeW-;f z=yFO3Wd0V07FdXENOU!L8VFZ~b)$op=pKKzhXFNldB|CI$cLv0iIsRFvU6>|l!-4m zi?Il4o+xQ027b>(ilxYiPuPi|_K5u?f=V)pb7fS-l!k;@jB8jL7osWHwk%q=R?-MR z(5QyJ_<3z8c)+KK7;|{2cx;=1hs%d`FV>2B2#dNHj~zk)F4Zi~VvX7OP=m;cW;Tsc zID^>m7UZaOI1^&VxR1Hgg$YP=yNHnd=#OL(HnwPw*;p#u_>2b$kznZg8I4O?ivy+F^Cn{o;3MPGJbdvA5k|bG{ z=ZII=SSk6aI58O}NO_b%caxv!i`}7>b&)au)`@;NlndE@a9NWdQDsy~CT+QvOGtmM zQx$$s*6Vu1 zl7eZKtOZZPsCHM#n6&wpz`>XB_Lr;ajR#b0km3T034vv3ZNrI}#pyq(`6W`xjg9G= zR~d?krA3oTkY~7*ow<4@8C*k1mYo0jXo|^b$7!6x8J^-9p4g+9i>aGR>72+Uiqkm` z+L)KSNixjHij+8?>dBm@LXY&gZ{_))`39hhW}X5{pyQ;NJj0E(`Iz8Xc4GBY@2OVA zsC_*cZI~H^*?FJcSs2{u9KorCr&*x%2cq#6fuaeXCu)5`mYPW*j|{3U?irzL5T7r4 zmi1zSI)sw=*_;cCK!s_bKpLbjD5B>?q(&;F!Bm*~$(!s6km0yHGHQ6IH;7WAiatn! zISO1F+M!?BlK7FFhKZy{I;I9nriV$QXd0p>N=GajjZONGpqB(udPC*MqvAzSUU_B6 zCYT$VQo#A6Vj8GsDx~9ShJycksDqlQ64;i@`KF%8k)bz!qDPq%>VE2HrCge+U>Oph z*>h?7sb`9!h&rl)=&30hWT={|stT&1%BoyxkG5%@{Y*G$1vr!^Xw8>4{sm!Gn_ zKiHXouhM#m-B7It*GjnBrCutM4T-5m*lwM=svsM(t~#;`OQ!NA zvM39xD%-B<+OW*3r1SsEo+S2U)>VHH`>VD2h0%D8CF`<1d#)|$vqJl`glec}XtYS1 zv`)mRWEZhc8=Vl!UA$9&zKXHm3Q6J`GbzimE8De1+q2*~nqE7!?n<^_o2-Nht#lcq zX~j%0p>h2BuW}1%X=%20d$xEhrZL&FdE2+edbEHWxChHz&6=Lw$7}bx4p~HBbXb-g z3$8Eov0FR2lv}x$JGOj#w};bll6$$B>$z%buAeKOf~&N~x~O8(v{xyeHpC75WwUBK zw|&}_Jgd2Wd%Lz9q_MWQVVb+R`@5wZyuv%YF=Z+K_Owr$mFnYDR4co)TQvfUxm+u{ znmf9g`@0K;jl2Krb+~K2-uu02YPy6=yyQz}`qnIm8&7h&ISkUi+yJ++tF6u}KOc*| z_UpU&OQh6$ztfw)f?B=+9KZt1xzg&OrerQYl?057pI6(!d=LOnK(N2Ppc|-V>%S5F zy?I-?%UZ!2yulodv;iu>AY8uiWxP12yy+2qZb*;B7`F;Kw|DoM{5!!EJi{?;q~c4% zrdh-38p1r>!#upZl=GxeOReTG9tqqHuq&UC+lLU`zZ^%JUbnwcyuDED#5k1Z5sa|ri^znm z$yjW``1{8#xX7Oj#vPo>xTs;K+{&)}sxK0)mXN}aECrPu$1JSGZWF9No5&yh%ATyp z!92`{%*m%KqQIQY!&}V%TYJj<%+S0z$|l+|Ir{FllUE-*U|>+@toK%gI&8#2LCVE`%FMjZ0WHq{oX!M& z(8Qe3uU60u-Oz`pzHV&I3S6n#tg(mExlfG8-we>ly3Z#&!2%u99xc7B?9k6V(ErKK zCcVy5gjM8>n!8RP#9F5cq z&DL%hza)%Bt+S zV%*d^9oY)a*p$87Mo%q*APUk4i2q>Y~E4c6(6-t4{J?oE;J-QMkOs<-XSf~%Ii zD>h<7#b+wb%&pOZtIC6$-G@5ctJ>Gy9p1H#-PDcSXKmf!9pRPz-^^Xb1b*Rz?D`2+<#05AY700000 z00aO600#fSfN)4G8jr}Na>;BupU|juiW~^7SgLl*?Rvl9a8*ne8nOe!IdD*;kLa^J zO@C*ZR=IlL?)(3JSb7c$goX|gh>DAejRzAMksFeel$Mg0m6)5FotK=So}r_lq@ty$ zrx|NxcV(}zv9hzYwYImouyk{*W4TnWzrw?{c2~hvZdq%7$j5?dd~U4JzR=PNfCt&y z+uPTL+~MQohlUEJp6a9P?d?j)_!i^jyP8@DShsTg3OP)-*vgON| zGi%<=xijQ!00YLcN;c<8(lYzO33#)0Y0?Lq+}#`Vwd==v zmlR+gUyhu)^5@KxOLq>PI`a$Ir!UuTy}I}B$+2s=pkZ;M3(LiuXQa3r-@JK8a^FsW zzI+bjpWE-wzd!x#&DA#_1pw|B;DG`rsGx!VEr?))4l?-Qb_GTlAb}WO;Eg!kyl4NI zZKYu&7&nk4(&0&UvA39DCd%buI1`jufs8cHXk(2s!iWftH^$gwjE!{A!V5zZS)`Fj zCaENmOE&4`lT02dWt3DxS*4X&PPt?S-k1~;A78@9p_pXewilUWrdg(o7?sqLg#$_` z=Y$Z}X(yd`QrAlW;PvSzcj$cwUYrmLYG{DvDQ3=e*a2D2hL4=64PKPWcfkaNHmE^< zhju#WaTUUuC!V8v`sb&mrmE_o1j6@+MmU`bh$3y6L+OZ!bvWW&hwb>Ik3jw!fv_q1 zx?ZrzF0w(9T3*@gv(82f?X=QXOYODRRykw~5d>l;FSo)Mu6wYe7UsCOrtAN0S|7bh zDys0BD(|ZELgxy-re+vwzM-O8FLdf1n;3zcBI{nHlB#>Fe2Hdi;CLGRyQ;(4^(!i) z@xEK%ycB0lvBnfSj3=aOzWVK%lom$vizTb5vX10*1FWz#^XTX{E(@G&A{k)obGAVL zEOgLA|J=a@E}En?y1IJE^2%)9#x&I8ifh|$AcuVM#`t!f^{RVHEVg$1T0AzX0cN1{ zIXE9OW72BW709G?WAng{3Ye{_zh`f)_t&a=e5&ApXI%J&*;U<)xs0DXD~XCfp6iP- z#_T}ciPfw*vOi{n*xKe*z%0?E7hU@4rl%g|(d(Wp4PbT0{<>YQDIEW~?5*2&IN@H4 z-M6Rr?#}P1fRd*-@9EWfbKTg?*y7xn<1W1)&L1E6?|xTk{et>#530x$`<*Ao$j3`Q zc2sKvV!N}G+;;j-w=FP-c(X_1=J?xubIy+L?5pYk3>xVKNWcIxi*?ZB)zZ)ezm}=5 zc5R7Y`Wh%btb}AKh|7@pwuU{90d9O@>z(gdRWZJGkR<4M-naO&JQNY4eK3q+AArOu z5jNj>apYgRnQBNWHBM z7mT6v#vvjT+3t{otRWp2`Mo$2Do_G~uW!|X{iaOUfthRU?QHXX56w0a=yN*2BL zC~9WySQ zj>7DrIh$$BVwR_xxWwE%;fc+K%4~lbwP;G|Y%`-B-HUMbK5HkFG{jaEV7>85u2vS|#A+SRi9%dSe3SKu6` zOIJ$K`XsZW5{sioSv5~Fw#lAsdz~ReN>^&eH4SK8YhL$?R&J_P0)DkA1ppB@KoSQc zz-diH)%eN51og2ziz4SDOW7X1laORO#In8^)q!^Qv)dZdRNdOkctUiDV^rvA>$(+* zP?E2D{i}B{D%-Tml$e1_6x`Z3$hrDdwX*B2q&iyLu^tn)xZT}tHyT*t-ZVp4Jy9ne zx=>QGmSjR5mQf|EPsrhlevQ~HXvgc>^0r{KRbBs}JGlzXc5d~mCe^9}MP=N*mKAVk zMeg97t4t627MJyVpwt%$E)?3_`?KlV>Uyn)S-%)yR2Lh z6;JF%s5*7UDt^{^3C!3rd$qkTRv>%tj8%prC9F+mu%JO`oFGTJ$AB}{dpz7flG6FQ zlsoVq%E_ezkVFp+Ms%h(jYkG)06!cswATL|Enhckn9FqaGWEW!tPrEQW@=KADpy? zTHGjq^0PO}@|kWD&r;*3yya`Ig%=XLuEzH&HC_(J^eO}Y47e;m@PUEDveNa|Grbc| zZ1+Z_v>&%|G^qSqi))(4Dfi$VGl~E0TV1>B_O!9|dgMOAO2Do<4fn-m`#mX(I_uz+ zFqGv)(;%)qWHYCl!Jk$vF!wpwz)l&7?Wyy8tB^#Qiv&F@5OkxLj_5)MXgzP~IL9G; z!+Tdc8Tq`+NsD#43Z6TlppdXtM&?r*P7#6XyE zoxatpWQLl1(`flLRaUzpM!twgn$%%Uf-tlOIIpL#Yw7Fy10H}p^|zlb?t5SQp+)+_ z;ay-zF>kuXC$`wJ=ELF!I_u7+{kX|Wp#3pT`8=m$)RQcGtL;Jd6H$Behhu_69_dDP z6UR)g5^LEuO|j;8g3&(YCqe&^WoCu9a}Nkj&j&M%XMK(rS{{&n+DCLn7kRQYd90Ow zmxo$;rh+SoJI0lOqi1f%)hWqzceb~7_H`+#mog#OE01<;tEWV5L~;T+fEKr0{xy67=rM~irUwX^jMFpGb9LP zLBwZT+LjV7sBNMYjl@WRDaVKNH;q9?9?WQbifD*ESYTh*iHwML&)8p+sB)HgkkRsoT)j%3JLL%Xz7Iw$&i<2m=QT-8uowDbdV_rdVqM8 zpI3Lj!juX4a$07RBPoRsxIF8DYJrzPaJiC&w_%+bhIr|UHR%Bnc4dCqih&6&tmAvB zg>bV-SkpC>wa8@w7@4JMdefZz3Gk!YL6}On<4mV z4mzBGsi6N7T90$4k3@8fipiYA5p|b&NNcd3UKyfTCz`ZJgCi-GW72<|$!(kjEY@U{ z>B)-(S!Ea^h;0yqhOrIYgCU$Ziu36{vWbks*E+WIouPQ7wv<#el#a$ClQUV9W(bd0 zmVF+WmtTZlR=99L*?Fxsht9d2mr0^CTAe=qdGcR4v-#>D3M_%Cg-S`pJQDoc^DpNq`0|V4vAH>8D0}wrPC6n zBq*g3TAbS#e#luaEU~2>$|f6{p}-WKc6xF$$bn1S%7ozIv zhsPyrS_w{~I;vCie=lRLwq!r!%8&daH$3TdaDgb&9795})y!cPI)e#;9$(iLByKh?eGdRTg2| z(W`<+PK}v0mdT9+TR4q!YM95JGuMc4nOzI}tcB`v{duHxDWHdUu^$^}3@V&{nSK9M z+O4RQk4|T7SZl6mPcjLz zovMnN+Og=y0js#F30k|XyK5bA4|>sMg-M@S$xx+=h*I~m(zdsI7_$f{gPIhKmHT#t z6|0&km4#b}f;6qTw~HQ`9h-t5yQeXZ+XzNGmXPaQ`jVe*=d{@o2{QtirgD&*a2!%TB%m5wri`UMA^Q!2&Vt9Ij+IF zm7?U%>OE8MZsBIfx zx&m3Hq_9tPj@p#9%Q(UkYmR;gzvi&I?AW?P@|OY(oFy!red(7-99jTOp;27LU}R8- z#ZERXb}7r5aY(#i{2U|NR~+S@^~D`^vp3U9u^CFbK+G73Kro0aLO0REa5s0e6T^U| z0nf+24SacAvX&sVweowlz=yi9^RR17ELP;5iZY==gN9}+zqWCW#g3=I z-(s#cT(bKa!R@=Rc1yE#dmtE$%6~I%O&CLiGOR2~xPohEgh9%DU@8A+TE})=qJk=m zy~xMn*P|S2pF%o?JG_W%`ganf$fXO!YGXwpX3WrJ#8!;NXUMU8DW%)nm+;t^A7IT% z%(3t&&ewd-3XEYernz<4#ikljE&H#%tig9Y#!0!nGc~hy61shBb_$tFgnNj>8^U^a z%Hn%VAv(wL@{zA&TP3ssC`igR+Sb1;{rD7NY?>m9 zyg{wJjnq=Gx*ScXpR%ZMNw>}!x~Pzb6benIu_zx`?Ui`P%+^^##v{?7yUYX%O`55{ zOpTeSYu0mvGae0-7+6j8>j3^+GyxosbRC?rE1XsaoDdq*Ej_!IDo|MZRf=88>f9C% zyl3p^({td9|RrM;_cKSm1oywog%t-y`0cO7P>-hcRv}*{3zB5%LtwG zkcK*VKHNM(%+@86%ngaTy=~5cjk{-v(o8HKm)y-(7Q6r1EZlW1j|D#A_~@B69o@*5 z8#+y!hS}3%YQ}sDtj9|PrzzBNg1zTNy`R0}1C80_{YcvV-VY?tAPOjiupEYb+j*0a z=p?S5xkj7FGZ(F0>I=v0wb3z?$bs-gxowJSL$98LE0A1y7I@x-N-jrC`k!uu?J-*sq)p{;QNta$M9^QX$ zaB?o=lq)ELzTT#NH_ximSPh?=ODUe+K4oTnnN!F%Y<%_i*@GRCY@Avo`=#tz;34th|@1(Zhj292$k7b7}AYgWIk-4l%DB@ zl`w>tzZS>|%%^{ial1w`wz1Ba!HL(ZPTZD!xY}#UoQ%Lit4c*xAYADK??m;`$5WHCLMe?k+B9_&O zWJJWZ-KZ|KN)Q{(JOb*G@U{7gv9``@u^#5FPV4BF<*bh7LEqK)Uh6#{*Bt->+GyC- zy*RnC?7w~-ZxWO?``y{C^%GAMch27FsvZASpYdZ~_8Bj;A%C+Ue>YYQ@f%F-{4w(V zc0Fy^?RO@gy&dG0p3y%#uW)>^NQFDnx_nHI^ST|))r#8$u8LJW+^&A*+iPW&Z0|%{ z`47si5_*F68j`Hd(=kWPqWbMHX2PjV`jP$K3fLUS-t`m@mKy*1upj$%mFV~|FXwV; z9bejgn#+R1(L`7XtdHUGS#vW|*7=0r+@3qvk_#NN@jc>_P zioy+QfCCJVuHNOU-S4Y@wo8xBBGVOhR?l9Uui011l#fHzOE5>70xpCnOz9Nl{N#6*MI? zOkGbu>lW=cI$CmdcXc~Hc!6~{G>A1gJU%!yE{dCvkDD)~r$CT7$)G2+HOP}l)fGBRXIlP6JQe#N*gh1!jx01RIo;&%1TKVRI5^t5<$?x8@Lu9 ze!0cf!Gp45b(JyWU@e=6Ys;oVsm83Bw7z(c!F9WsapMl4NHV22nX=E36)|JJG?lZ+ z%$gSbCDVw0Yz1w!8EU{nGp&ip>oRA#zYDACEBmNjv6{VlG=5ufih(6d z#x|K>Vu}4CY?;IU8cZk&s>|j-yy~h8KVZ-~N5TjxoKT(IRLV|6=!y`?!-2lrurfo2 z_|U}EmV0fZ5KEp#ieHI(Z?Twrgbt`>Z0@R_>)dS<}C2*k!P>k-0p0p+y2ihes{wfCrW>bt8?# zmH0(1lA}$GNkOd1MvHz;`AXPmCDP@WVUC%Ll>w1b#v+*%QdgCm?X@L0>?BdLpAgg- zwq+w0cDy*5t~Oh5u_aR2F}-c4;ug(nGdwt%t|i@9&{f(12LuKNFMN?Xn^1ohgr=~- zsDazi!Pq`#;JY2IpkXi}W|%}IKE#1YN8VH8L8*QNwZq;ofA5FRi0@c zEw)^pZn;*^LFX)UEq#L(XV-iUwN=Qmka&z;gXZv^q90Nq<2ODI3Om2YnqyiysY+A4 zGUfX=R;T~We2P<&pkmK?uDkwZf(^7r)9VcEqf1`@&`#Swz6x6qP`RHexx-Fa}_pXbinPqZ{*TR4dHCdZaA<@8e5nSunxPDhH$3K1?KTcj4=pZ9E%`a{0FfA1_0A<8 z=}ixnjM%^{Ux__l^k;~IA|hPehK*eAD=!&4B42b_Ab{EHFwe-3gS6sBGDydFro@Xq z8JYsD(1{Vc7RaH3F8eU`u{BP((l7 zg_gZEjG)f9OWKvsh{RN1_@20+D{3!`$#hEw_Qs;Y`R!>+(uWukNz>b$v45je+3Wva z>(TZJEC~=!Y;T3Do%9LH4?3VM2yI&D z>dHwX#8n74bkjrUVM%h`a08AiEM@Bj4e&YkR_yiV+xX(Ada*^mdUEMYxjX+V816S# zMAZyc>3PO|XqB9*4eDQ+1I~(wMz*v~s)LnFCfiOJz)=;+R4FXF)Y8O`b0rDYhm*wKv9@izk-EBE{ugNAaRR<;qrSNRT~n? z*N{X(_M_C$Pp;#O zBjkY#m?Xw6n87ATsyvUaXK6n>?uCb{Q*%TVRuv)T!~G{Bi08=bx*1CpFZy*OS_`84 z?yiXjsF{wHo<}ELhgs2a=c{MebKg7PQa8oG`ea4#9ahzY^5{t4Thb&OXqc0=OTHF` z*(yhT;u+6!nyuM(6CS^Y54%|6I_#=D2)+~=NI?o#fc@)VU+fqQN(23la`CHX<>fcO z%SF{&9Hk~@jt{NSwCxnFM0ojS4BhbL6x~uT8k0YlZng#>dDhC3qKncDkSz3x06(Gi z0_#nv4jB3b>yE7Uz=w$%i7=!=y>btImVsXu1o#%E)zbe?9rBCI$jCc(1Mc|i@Zb)O z#_u#N=q1|f6|C?2vhN19Z~Js`2YE0B%17)PEZUT7*Aj>D4DSe$a4L9B=3)-!0`F#M z?(szLxpc0*zK;*A>u;K3c`VMLM(@SiDr`VWyX4Pzx{K*>ES0W8-gFEBp>Ez>iFz9F zO$LS=I*OQV>0gx0+U{lRGBBm4h)}lS$Oz+4gfE#$u=vWz`08Ne-p}%~!x6Ct74(o#+WfYxCIVfi2;|=vN4Hl%46{r#43h)tx%u%xLd#J&qym1ft0KQI59RK5q29fNZ zD2fV^iqz3D)(&*~;h*fJVv>&{7jdT~5zL;D+R6yrTv8G^F$X~r2LsX{!LkQa(MIa7 zDwzZfVlhbCE-l%z7Kw%Z*6$W2awSYK3W5L5OX!c1Z0luGC?rL){~Arj#0|W-0$mQ! z-Jpl_^lbpM#@-sxDK3gJw1)z7k`i$TzPb+gfReEW1>rhP8|vaH7lR$YN%`LKG>t_C z8L~9z&YINEEFp4(Fic!t!4w1XHgQu2AAlfd>)HykXJUuhl5jPLGat(g+N?5-gz<}f z&PuMJ>mC2>$KUtGfjO{o5r^7bIo9yb|NUayLG{1 zlYS#QqVLYc4{=b89&*C}w2)0Uudak3PYVin`YB=p)I<3ur`Bx@i}C0}Z#xr^>5Pji z^adqUay{NdJPi{S%yR)B(CXj?-^i{qzY!;$MX>_pNl&V=LW;_!luEIy{$}d!2;wPg z6ytc~%T9~(TCo*drbR;{-zNWHLH&_Tc~BH}Qxzonaw4G@_2u>KJwypfof4U?_hnW7elGl&mx1bBV@|iVo4G^s@`2vi=~Cw0LSd zDQ}C|UPKi@XeRekVVS!SjqZ3r(~`>j_xbZ9e9ej576Hoc6}*QZWnm(qJ;t#IvG0)l|)^ z15n_iI^ZY$@KqkxJsbbY_MoUIE7pocb6}`P5k*VH{4->AHK9TjHgz^~s7g#t@e{GH zD`6HlA2eFYG7F})UQq>Sm6Kalu4m859V!h^iDEODaGu(4P(gyrJXinxYXFRHY!;JU zdF%*?4k|Yz*J=$?X^c>%#^+AbMte21x}tZP&R`WSuo4zB9fM){gf8CZO5mnhvIGiv zQupM>5aFU@J(jcDkxqk=aI@5B<8ftO@kB?0YjjW)BR6JwaAr|vH7b`{nQB-GwB<+<8)-BlHFEQDwx8XWNkd$;Ylhq4r0^j@F!_~_hIzUP~oKAxQ0_p5^L+vYH^n$ z1CuYQ6NgyS5T5^0B}svJ)evo831N^&mL${aa)EiBtUV2K>wZw+py*XyIByx{-)^-9 zU=4z3H{6gfY~!JOtF~9|%rfV#5zuSuV@JwwnA z?Q2SjuS#Kb)+VK7xn$W4rTCJF8!<6(`LLkU0H`x~>uFz&d7M|jFlhsI;X~^Pu zS;cx;mihm+a>eCy75Ui&ctlUvhUEB<1T9$n2&hnp+o*||lP-~!Rsjswph`i8Ue~h( zm6*Nw5pQ%k_cdDR0Fi4K=qBybO874w6W{Q;fz=iq7}gu;D;$UQNYkh62%3g#H5oqe zhI6=-bCrS_F*OtUvlwyX2GoTsdi;|3u9^gnvDpHbEBwMZo%O4V52BW__*(*JDvc*w z>(qXpl7Ue=kg?TAo*8AIAf;0`rk&&fU{tuiz)GJ_AqK(@#5j(r#c*2Jjvb*3O=%sP zat1%QkN2)MYI^p)Mg{7OK|+~PZk3^V*hPbps&T4kxAZfJRgE#nkUa+u>GHo=BB-Npj*eDlto4v0C~6L; zakz@G^EWG$8H8$KAro7lE!Z#H7;K+rBf|KNt~jVGXA4C;fmK_MKV+{q+jYm8Qk43r z$41ir)BdFRG|!6d`c+=JqdQWFb%(e0SC8&eDCTOfGzCFxfCIbDoVhGEnzGla3>aGhET)+8dvr;< zTrIn^RTqR(+L&2df`(b7tMh<_QEI^Wk4?li|C^Uzl!{Lmar+fDavGv-)~N9Sr|bVA zsTY%}#Ugf~I=#*Nyl;0uzj-pO+Wv^gwmsL613YV+uD0{pY$JfIms*bBWEP@}O^#JO|l`Cw%4kVgNN}v4(7J` z0NPYbMhU_trkhWs&W|9RFHRF<+k}1Rj(s@7SA1cP5un^prV+`k4_l1qifa~Ax$RlG zP5nIY8P&_iKZ4Rexo3$FeWY5rP!w+Km>kM!$vz{KPoP``2PSPj$5IA2(;ff%ehC@F zN19lV_5}$~(kn>JF~|%QNCWKrm_e4k)0}5`I(KhZ@~I#ls``USqel_fKy~Jk)L1t9vfbFZ@xZ9foc$ zwuyO;Df{!jGwM!#)v2dzU-B9Wi+kE8FN$H!jXZrOFiC0n<8SzSX{pzJfym}%ZzDy# z(K!j*yL=bW53XQ3~_@w^h`ToP=)o$1`%eyO<6` zf4xnU(IAc8GF-pFnydQ^of}+W-B8kNe5^4Zhm>0m%SL;^Zmeb<4WifkW*7)47a>J* z;b=U_OA_h%K%>v7R7q`Nv)U~e+o>GFhVgh{Fq_F@^?1#8zvKU8^ni|*!}EB3-hQtC zrG+W*xfwl3ASxy;stq{8k~S8_ z*22=t;>LQivQ2QV`c7m_9GtGHs`m1>3Ogu!#y$TAw;?xUTPIiF33i{2O+$N!6Tam> z_O1yk=tkZhILs;plN*?8Q%io+KO++p69X?Ez-saO(IZxk5W_(Y9lCL7Z6COA_aI_? zcyJp>iFnW;+(r$UJ~^ulzWJuIV!mR-0A`3eQkeoxF*n=<^GxAQoEbWFQL;qCkVCqT zDk_T3RuQ5@lrn0|37@?Xsdg^5 zFi4j&jWpL{Gj$hvf?-7|5aDi1>zoQeLG0MEX7EDJ8~JeKvEttT0&|L8vS#)g+dIh( zoaN4>`Bau`a#|Qab^s0T7ojy>d~*&&)^popJ6Mt~j!9~ppD}Q<35lvB`roE{EDdD- zHSy#Dn{n$p-g}zuS<%$p@HKOs;P0t2PIC4 zNY)5clO^@kfQeMa0TWd*ag|md2<6085Pq;9SQqkVo-4Is*WqsL@#Udkx`|TQcFPbb z*(B@vky>iQ0257eGoFD?Vy0X`kBD&u7}+f;E=B*Mi}7qDOhB8J!Wv{yor>0)jlA9Ht4^QjE$jbGdE`;_Tav^g>h5-f&J+?%KE3w~q?E4e z0Z~Q)=}u$|imZWv6eI}Mf}{GEV5uLdT5}exdMV|rs)6_`um%^KD=X0U8gz)$QX3u5 z<+=vqv5DcbvmCah_$;r^M*Z_fCB>Q9W&;osrPLx;>uT8q>)h8i=7d)pp%$x#SI!b6 z6tTM0ohBYiXY->iL2jm{O+m1}bf@7AZ|SAH3y*g=ty_!KajQ_$3*K%ghKo#_k#@^y zeg(Dp(&rX>VX3AhTV3)Yoid0Er%AL<1cOb)Eb|jK+l;f;wvL@E(!KvKVj`(q?Q6rq ztHvl8$A5!k`d_?zx6q z5@1>tpNY?42T$y?arh>;FLTmWL|@Sf*c#-7wy_DRMI&llgOm8w zP(phd?N`maoFLv4#EQY@d8Tj#@O%iZyAY2+GW^|495#U)g+XjNEDiU}rp4*(4ue(F z;d46THWJA#HSjP>jco2?9$W={Dvy=-4(L)?W0`|!rvw+i&?_B?VFS15 z%2&dYk&fZy_1ZN3#yNTR05ZH#ZTmotnU4;vP37?ZxGh zgXB&G4e2ePP4181iky>ZVmJ;K1fC4p+%s?@O4Jo|ln{N&k5JeMQJK;Msl?DK5$VSs zf)kgF1gR|ZCQ_4*bXH^>B1Nb-rjz3O8 zD?~kex<`NRldb*4SU}B(xM;AZPTkt;LnzskgvLjM+jyuZf65fu5%y%QGi3`=1?^L8+Fk`3FMBT8jY8mLpZTNTYxwSn~BcadV&ZGUBp zy!^%#T9*IIY>?kHk&nay1+@s^nBDFv^P_T3D^g-d8u{$Fd z$E4OSLL!`Gj@bm)cZ$Gzr5$Bx8>m#FNMIFtM2C z-?ch*>1cDDlWlV>Z4<-5*mhUj_g`XD36cIi8}DombiBs-&*}{8ZG+1*cE?mp_O=+A z_EKR+->;E%{Bw2o&2NQZdS_e?lq2cbN`V_xyD2@lwYz6zaXS3r=p8$&FWzcMAh;6H zslfjdtegbL_Q$baurVLW{k!~zkH1D=Jg*5Xs}vzv@lgk`N@fDywmI+2r*QVOp&cMv zqz>HxJi0Pnl5IEfyfaw`PS}Ya?ttc+N!SK3Rm0^~Jh0oA?oM&l=lw75SzW00t_{A? z>h;1GUBe0=WIR9Jk;8p@BV{X?3GNNm6kiimyCQu*!}Lq`x6d7k6FFs?)h$|}waEGG9qQFf#PLf*fZe5e+oo*>tFfiYA5nA~9->b0Ah4oE;sxwHKr9Bp>s*-!bO8T_SV(`!S`tj; zhpiwmmRV)_-wjS4<}Ka;5|5?zT#k;NXETqLvs=IpSJgM8dB62)vlB3YIk z;yK>s0i!zZ0vJ~2<)F@!8AaonV>7L!cHHDhMwtIWqDAbjnn1#**euiw zK4*0foQ86)r(#jO`9l%H5;$8SU_W+~O^4N+$929NDu zj3A+M09l?gUWw``j_RN*$xA9yXL*%fT;*nD@{k3gm^^kM9D&4aMvOg9nxf@n+U+Bk z;+W}qSfeH>Bo*qRwk4I!kvJt^4r1STv?xTDqN!z2+O1kK$XuN|i$$0}w1F-3{LTj{2YqY{C7U}0|mZATy>ZUUcsZrut#?aYmYQ_=j z96?#rsT!(vf+~il>y8T2ScK@DHXNT+9fdO8bVlcgwrFT58CVw1SjH&8DxCD4CBd}o zKqBmqfvXsF##t2S-axF2E~$H%U?d%BsZIkty=n~(LNZv~|1p6!2Gaxh>XpjZl?p{F zgz0`=E3*bsuSIIh>S=-%tIMv$wBl^e>TH`n0yYK^5@D;h%7Si8(rzgm<{WCDO2?nx zYmfGsSte}MzE*{ztGg~-4Q*=%q8(MHn4(VO+x=)F9^_Z@Tj;1@WBTK35iGk}V%5Uu zgrd!*5~7c~>TE;~=nxrx%xWrXEP0XRTY%rk8W#V&fP!Mk4$5lWl@i5Et)0y}uChYz z<4UfvI_u6_?&U%&BuJ=A@(52Vf|r&{ElX%8ta&1?)~B~ znQE?UwdA7;?JyZ#(XwNG5^!fK!=D}l{Q4RL4%N>+t?{mvPJ)zfYNl{<*l+4nwuvI| z-f1%YE-E_X+L-OxlAFT#t?mjR#zHLwDQy22Ih!>7ZIB}Gc)Z8<>MefQA$2GzD4xX1 z3GDxll7XDAFc|^LbY$$%f)Ew(xl zq_<|3TA*2G3^D3r>#y0+5=$dA#q53(Q`Q3Lfog;$Txi$Qad|!LA%(8sD9?(vYWEsm zKD}ynHRK_ytBy_*4WebxMXaM8?^#-}OUNpc78EF+q6hmh80qErx?+{#0+Pg zg~^IBI%PD{-YY#Z&H68#?q+QX)PEJC7j;+vt^QA{rLs8g)}mr(>ay6PgL?ixs$7tiA9K+UC`kl*$5A#AfMvvLUww3jws^Hi~# zu0RSb^g@%VLo;-lLi8-JDG6z@EhCR7|6fZSpBtBPgBEiz8MHO|qWaEmUa+hK&nX_R z@O0A0qN!Uaj*Us3XsGAa&=E`s1utvNrQo;Q&nEPNz6cnMHvw z2~mSlAQq?iv!?{?9mh0dmZeq`YB;y9T3%>aXSIB)Ae%NcL$APDt93-Lbz8IbTc7nq zXKuA_F)*W4E_-n=L!*ANF&4>5NMpKO=Dwh+RPsw2J<5a0~Zv`z~=CcX5BPcXjqxZt6M`iTt~EAQ}=XR_p@?l z0_V_P;%$VmDdTm7}Keq<-1}Pxmc7trRJvcA-@dAg>g-I7+2X>SD z_5-W#Nsp3i3JrS;Iw0{Gmgh0R3i6+e!6SD00Z|yINv%IYOk1*`Pt$sU=QmLob#t^f zap!FY)uvDEwnj@7g?G3A1WY(6n=+jv2>NpPhIjk7bK+VNX{~$pBOUDS&MUaL^dp%y zS~qlByL-H+^}A2{jjJi9%QjsjiL$PukKvZ+P@PSkuvg%VH^8DaI^$P}Ti<9fKe{p3r}&|`kG z*5q77x|!B{(t|$Jqp1X-L3V5R8yi^6)%hMStr9nG_GtYn9z4SD=3sL@Ea~YM$&YS* zJ+W4NAj_4i}+Uj%m4h-e{vZ8(SLsaUw4{b01ym>gGbSL z6b6(5L(}<$HV4kB)G$3}C0Z`U=ml@ZW3o~4oK({3=d>Dy$J z-=!s1+vtwacr4?pcPyKih*0yo0P_c^L7qQ+)n*+;m{4J~g$qJqzeWXfm(Gqe zaiy7_BNt9IIKQ9aEgf}KHa*$DDo_CUD0l8MgMHHtd>8oe-^KgnL7rUsa^`y7Fo)h; zN_6Vgh1|Rev*vc~-MMccX%lFAL`SrC#(8ZG+cJ3PopWkbBeG@40Y?|w;QQi8`5fTq9|`;!hysEC zq9g;j3m@X_LW2xbNI}7#0y8L4z!ai9jra9=1$yD5o%TpOTU`50N8z!6^O)D`+CQE~-Skk)jk;pVM z*ip!2nA|`|2M7w(KunFWZJrC{iIO+^7&MODa#cO|OF0}}v!gO$g{nETV0F{XJnS_q zIehPp(@uZsq_f`(l-tuMc0YP=KKbHPIE=cQ(NUT9Hp0)*at`HhVvRFCgyXdTA_cj> z0YTOl5zH%1JIuwT!XU`e3a^R4g&1xw8#t3FbowAf`sy6GN16=wTa!I6@hH zjrHfEQABpNXNgs9pB{O{y4oF6lUCMdms%LUg~Q$_0&l++Xt#NCWpyvNZ+<)FQO!jJ zO;;@&aLm3;jU#XMV$7@KgWaH@-#J^F2`0o9_paX*lESE9gX1-`ay_)o7E}Csl@;TP z)TF3Q%SAV9Kg&5HUD3f+XMJ_o5pEsfqagp-Zw3vBvt_|w#@Vf$OT|pWL3l^E=~r3Y zg=oq;-`SF`x0wdlw)a-W!Czz6#@1uUIr?I*Nn18+tk1de`K_%DJ9GH|x;>kNw6U!+ z-Qsbke}4OYtGoGE^XC=SYo=HSD=5Ub-`NaJ39`hy3Ly!{0Sr979|fr~d&O5+&dhM~8;?J{?)Umo@7L8EEUGfP92VxBmORyCn{Ib&NA zhbPEe>`Fryh?4^)=`Y9i&@2|b;OOd=uTAbmja&fAQ#i*INMUgQQ93eZD#cVnQ--on zG33<7z+}TPdFcV+VaZ5(xT!eE4|oLhpD%sGGex#Y7o;HOt%R6NKQd2%%s`nHv{x>j zWn(GCdRE!4$u-c3?`q#5lKE^?Eoi~U6rTi?8mNT1_~9{K!i4Aj;IP0%xM(v_3=sf1 z^qId150HsG9usZ$Oo7g)gZ(VgltK+p8) zA&)ji8nXCfTT`)9dfqLrKw|`8@M%}%i9!R0i{Q#+!nl_Nc03&PBp1+gLF+81atT8x z5*n+A6me3Mmz`HfNXW`Zy^N$E+vrAP*}@sBvLdpnr61s=Qj#DRfuMQ9H+140lNBnX;u@XJ^x^=B?6{ItzkW)mkbuLJyZ$5vL z)1?v9kOCwxB=3tIh8h+-7wBvgl(bmO7MgURODvXUgW1$2RU61*bSEXP$&0m1qKX=^ zg&VNx2B5&xp9XcPLEULim)g{uHbDb4ooZHNxWW@IK!`~^YY`uy#4Sa!fYvD5j!tZ~ zJLI8j7vZwkHYA#O>m_%2OUJ#o7kWO0wvglhODbO2cz(gMr&U+O%^*!}j8h%oI;Ic- zDwmr?*41i|k|ZbtZTFqt-J?*6)8_FGfX$VmtG%;bm@}uhywoe^S|K-)`sx^p$i6c| z_snMqIu4p|DN{rRywxKtvQZd?je=RXS&bWj02A)Cs6{?cxl9EVZU4iJG0TCi}c>hpoI_oirrUK;N_A#dhHFDJB#&jn> z7f6OGV^qgURi=rf+*l2kq8m20f7rpRXJZ>pyIfYWx?7rR1=_!Dm1f*J4X*<~FZGni zG&#G0&H$g@-RZ3WJuh6LlQ%q`QK$UWs%|-~Ck)~aKbS$YoSnx1q+gOyK)`_uOVm9pZ;mQL zW~A8dGMj$%VHdl2JKj4ul51tyoF;1E=HAT6{dFHf5#1&0DsI*&e%#>L{BA$LcmL)g zzvmm@D7BB{au06O5qxnx7W^ZE?Wpt@*dx?uXQTzS51I4GW~zUw=N zZu^nca4u!Qt*oIk>WU4qTQ{N`|eEyJ6nO1iLyGExV+ohB z6Bi0Nq9bcVax6Oexd`|F)3<+H$0%CDG6Se|oE1AHqBvWoyYnXiL@(SK!0+I_#G?WQ zx<83yvCzVbZ3HEQ)R+lOFagsDj$56V>%dc_$V^1VQB1*%48c$g!H)dE(nCFw14)bw z$y6M*m5YD~)1F7*rNObqp3_BxJTY8DG2D_VVtlsVG8axzq8zg(GV`ZqoIb2OE+}h< z>5?+9Gq-EeMz7+=g~34FD8sLE5`RcLTu{Tc%SyMoy@Y!^aq~(%WUG3sN5Rv(S*bIz zR5P_4Bt`-}k-)D$(++{5N%u%ZJkUkLiLBRgMEPp1BuBCv^hA7 z3k;q4A~tyGH(LNa0lL8dd6(+B4heFgg&P=4sTYFGxkI!|bmGPH>>fUJ$aKuU2HZf9 zYs~soOvv0c#;i!ll+4Jy$dN3?$~-xhGlBZ+xX*+!_bkn-XpmL1onFi%C}@==!^wG! zM}{y*wev#1xI!vSk=vA-q~uL#@lB^J3Ne_WQRCk1Q#)*b$Ik zGtEGVkP00}qMI|j@e*lS2%)^X+APXOJ(i%tgfQYw!eddfsVL#B)ZS2wo;=3n+{zlO z(@>?;DizgAq|;G#lg>NUP2xwuDnP@-)6BXo^Q56Q42~*5$QARC_N>u|jL%&}i_r7Z zF2%57HP&NAR%7K-3S&hwbyoi5#56TQH6=Y00Du>=i#SctnB)j02$CfrA_GMfKMlUr zx*vA`04g(bI>oykG_<1HWJ1K?B4mk1TM1EjxT^!OgAx6OaQsagEQ2+m$}nIj1+~sz zMbZw^C;)lShDF#^N~!T^9Fw>&1gs@Yl2U(it;jMl2*Ena`y5kcRrxcG1_ZsA`%+?M zIoM;lRZG^FjlGzay;nolEp^uWq*l^XH2`o^kI+_>cv$pc1D|Ni%}l@&svYZi6qmwD zLFF$ZWH04JRD}T1De4u+h?u3b4J~v>rL3|+GEsCYn}0Qeec2bl3{13D+qFg8vsKl% z71=12Tew}-x4nXX+_Uk-JjRo(BejTRd<(KITkqmkhn)xvgchXrIFudMly%(3h1|#g zZPt}b%wdJuVg=Ls)Wn<}PyzS~kNMe?Xi0^Y$t$RXXIO#@%qR!#xb;-roqRf{O~P|| zP4k1-7)9Lc8;w_K#z*ztTfv1i;MXe>T(MhGS)7eVVa`w$p;et*=PlLejaylbUg~|= zi||prjguS2ER03fj^ZVbEy!ARQp5d;%^I8yWY$%a+{ks`_RZW>yII6^UznX-5-ds1 z9W`rh)1V05$KlIvJzdj1U1_^sQEB?EQ^1YYG{RT4^at<{tN_0ll) z;mLj9$o*mYrQ9E$-y^2n#>HR#CAm%WT(u#;w15%~fU#YY6g=pLSf#Aa!B$vO6wm@+ z*v+kUCF6H&z9T!hu3d^@0upBtqTWphY1FN)>$cpiu1rPVg)uukwx|R4WAk;Lj;a*cLFAQ?fSwQs0#4nc?Oy~Y%>X8qB4S`@+rM4x)OY>E zW2{=E;#~{g+Gn=LZ19n9fnr>QpYJ0BEkj=TaN892=5Ge)a298@Ej;}Hs@S#VTO(L3 z6LR2mo(+fTSVkyZKaM*!P+UxO*-?gHeb#4Fo?jwPOjRa13Zr6IZk)sgDLBoJB*@~_ z%~M&K&DZW}Q^Xc6LW}EfIRmq7L2NIlf@)+bijsfP#jxhO_1@Q-%&M z+rc5^>78lmwdu_)ecCxS$ z%cbgkw(4aSuLUI8bOl^H#Jbv}y98xA;W? z4lsS40L^ny+ht9sz2WC{!zheqh(<21t>8E|hkaVEX?A4 z>iV_quJ&in&EHXT0kSse6+q}nd4M1_3E%tH5<0T93dlS?i#O4>7V7ZSH5OGet@n*x7YsT`UYhC#&34{X@*noo3PmC z9c{-0*`wB|;{6XteOh-h>H)WkOrBFn^RF`DIx^~4!2p!IjwFbaFHAT$4eL{!lq@-p+4Fittsdm zk!9XcDXhXIhvp(ImUn>Dl{TD}mXA!;LYVH`&Tg!m#%wI-@-Bzl&wj~DBH;kv@h@)Y zch;PEZma#6?f;YIJFBOU;@&@U516Cymc8l=f8Qbga3%I?%iZuh@8{blQ)*?_5?ASz zFd6$;bOHg-0cdFFHtdM*)2xv0=GJl4q~wgAT^3sp@9y-hvsaPcspu=|YXV9k$(qju zPbnwPf!!8$vvM(5a7$j^)XCWV&~&=S!RDpuUw?2vDP%?2?*R-Y=sidy1y|T6Hu3Eb zIMxMoUD{rLzcgU*_i}^UKGvD#_HMVZsh;YZ74)tD2I4`zb3l^2G>m#Kt;i z^I9lxb(DBYB`Kp>M}o7}@?XD~(`Ie-lV~s3>{PYvlXomIKj$$gNH6B-Puc=^T@}~% zbdHW8j4PoDZ`p81cVq>3nYCY1K4QoXbPs<$Y7OpCYXHxsYx#5KM(19uh*(>+i519q zzf9d-KjTQa@kn>*{`v#uTf&2H%g@c53uUJ4VS9B@R1aN4-TmDl8Emi3fX7ZKmw8u z@|lDVqESJ?gw1NVjcj*o`f|NwtXQl?le=fIJ9~}8-{!Er-N@(dZ*~LqhaxygSZH{N zNZ3FiL?x855-BN3aa06_nM9E?xxyL$nG(vR5HMxxh>B^s%DP(mTAERTWD48bdf=d- ztB||<8v!iLJIt#aOni__WYn1XB;=bct-M@aygL!Gt<5x%?cEga-3uI^f$X5IK8|eg z08ep|u~A>IF&V1A&o7xG5sw1EfdUKm)8{Far-htSTp$=QB1DN152U*I45LO&zp5Sa z2=b%IkR(BtJb5yslq6GVv3%(=W)vdVP@1$^&gOv!{Ce_paEn={mZpTnI~orOtc|IH z8bt~`a>abZ8W)B!W zffD)sn`lw037r62lkOh>g5Zby}dG#u^sxr~*%`<+#*z!yG;?>))zy3mWej3=Xq+cCpp{4f~ zdiOiam12u3 zx(MToW1LvPS!v{zB94IV$fF>FsRAAa{yfx6D;jMQStr9)K#G7Ks)XTY0tRq^EQ`I8 zQfxJyCL1>7siT@DO&LJ{nme#;*7T;EISJKWE^;QOp-4`!W+|l4 z+=QQNQC1~^prQ2F>LpDL6xEcKrRvNr12~!>L?VDdLb1g{IAMiZ@p|ETU=cR~DwjC| zfE;pNi*2^rZi|)x0DKFsx87Pyq8We0b)z4A~eiIq+wt(=I(SQDv=?92+EqZXhXk4ovu3DT58us1iRpL01<1fvB*+&r_>#yiZH0I*%M5v zW|7<0iRkvhV&Ha_yJC!n%ZLYw;V#a&jV10;W8`PWK{;J~tE&ef4FHgtEJR#Tq>*G( zu?cbsRryW7(?Y4UC+_iDo&Gj}RM%u59te6ny&svy0=?X1!*vD~UMMHIkB zM36MydaFwRCOuR4su_%+?tf$A$$qZmpYk~DDN@lDv#Pd=@ByniY-<~_KyV;s<&AZb z@|A|DfWJR|V}4I?9Jfw5hs&W5h3FCy<6gM95ZxgUR;Z!mZdkb-rqEn^5EmvqBS5QV zM<%igKogV#ntzRHG@-jt5wL^~%G9k@R3x7jTSGeqer!_```w&Gg|Xt1r*~HoV;GT_ zmE)0vdHeF80t^$K=uxjA7f4z5RK_yy%@J)#SzQ-9@{0@+rc5AzLL*@%o02L0*>8040#E2J`HtvRB2`Gs+am)c#jd=Hff8gRK#oO%3KmO3 zHG`J_{6sgQt8K`Q@cT%SKxD#ewQwzWsf)FW88{b>C~-MLoQ&!K!)S)f3VVPY4zHO* zzU_rC;DUzd0O+4olS5FB?z8c!MCZWjH6(d2ZPv~_H>XHz*LLnw7J4yvIVRwyp}Z2D#N^7(}rxtrscf< zz|C(xp$QHOfe1n{H%?x}fP+HF6r7O6romL7t{Yp<1^^yglq4wX)8(t!xxS7_@}B|4 z=O0nBCW{etjC%Ub2&HiwG-e~A%#%m+PC8MFGK8Ybp$;AUiamyOloQ`$YAd;O87uB$ zqg?6*OpwN;R#D-RPh+HU-8mM-Qt}B2NY4&VA;xbzn-G>XID z0=!JY2{?slMXQdwki*IO7r@)>ApndZ0tQ?#ma%+qvofNe=P1OS0q|U4m$**<$cFQ; zh$I@CQrtu#A}mY~vn&%YYYu--W5>5KhsUI5n|4r07ijF*Hk9{KHl9>SifS??F3P;w ze&UW)*1&BeM!g3#lMtrQxpi~aOX)ULXV7!aMY>dUH+fh{#WQHD5<*YR zNy6_e_g2(F;;zhG=L50Qw&@kfu-5A~508YZ-+huQb$Un(EwMBR5Nir2++R#%`qDZ) zA>Sg$LIyWjngUoC7P5(I0AFrhn*%@y)(dM0K~S%m2r)uPd`^ob5vEnUBEm{hRrHWq zCo>h|NP)qc*W7r`mu+!<+VVh<)AyPpWa)>l=H;5TH`gf`^w4pZLD!=*u7 zqlV!XOr2`~(gAbqI@cnG}F99XiV0qO{#dPynV2d1U!&aD$?+M7* z*jS}mC#)AaHD=51BEtw+fCz$TP#_b}Hqcg{ckd)_f>_Uv-|mD!_9$gJ!$Ry-V)Tm_=>?j2!A;WI(Peq~OTcv5&+zjwCb1+u__`;X0?i|vO^YUTq zc@$`9UEca4h~f*1^#wEj5k_kzRP!}6b)ymTlp>d~EG(1 zpNE4+;6|wjHer)WxI|M92vP%aXzaCNu$M*gm0yNcUqOWb9$BSMAkljPhH@!4eU+1G z!Dl%wSA}ChU~cey(1&wZ2y;A_2MhoK+P8gD6+lHN1+TDl<0XUaVScLDAP(YQ2+#{w zVuH5AM30v~5yN%(*N10f4M4YH7smhr)mZ_kc9}&X8+T-Cm)Js}fp? z=Wx+5g(nAm>9|(MXD!ReeAmQj6LyYl5r)!qb81EZhFxfVXJ|odsEu<-Kd=yfr?(N0 zbsr(nUhQ>ueyAmq#}V~se}MFm@mGk>b^s!vhHD4{izr55^nV>WD$y`dZO0^q#vBf@ z51#jVcb9G;aYxsalG>vI5A{8;xF;Be6zt|SmxUSI7iqBYZ;VKV@VRT z7C#Cla;&3B^O%M4xM^wOj&=Et)Te5B=>~oyeD!E^(dP$tsgLQx7ulDQuJ?~rVB-V}_V@z2G()$zB}Uhy>*upIKR)HEout zAfT8e%9xC;MGzrjj4ZR8l7J2t_yC~uWfFyeOZAmB;U&f~NQeg{^+rztBb8$&nl?3h zNZE(6xOgY1od$4~#mG^~2%cKWj6Bn55d zjZ<_4mU)>8xsXI@olnGqbT)VpNp*zSSTA;U6XT(%2~{M}4e}>#odSv1(3)h#4aFG` z;pwC124!dSl61F;E3iB)8E;=#i8y)x6ySKGtk`);Y8u!vNrb4G!q{)Ik%G~c1n?)K z`G-?QF_bWNl+e)=RtX(hX*&8aFEF?>XCq$g2ZWEsp53F7|41PV)rM2qnXLdVvnQA4 zXrS--pDG8S#3wn3N~i=nE`wSl2s)UVqp0clgg_hGuk6;8(T^}Hqo?ACkLa4Yk)zt+cN^toO%@7`(jL2MZm#$k zC8=%cpsc#UM^N%*6#yAVS`7A-Y@Kqdu1bP7*@B7zgKB0^Ub>yl8I={8NZq-BYkIEB zsFMG1Un@9MaY`lRMPCO}rxcX`sdvRh3FVFD*M#$x3&&G5@&PdVSyt2sbMaVw#doNa zY9j+mm-Gm!HpfE?T77uI0Q`5SS2Z)l6*W^QumU%)GB#7ADoY<~svZG|bfat`i=q(2 zkh@Vk&K6ZLN-O|qT{XI_% zr%?g>Af;2flh$yp+exlq%C+<-X@jV>WG0l($*0k2XExZKXS$4PiyRa%0B#zNtLKA? z#g^(pXxT=yPgN376 zUWBcXr>$4|Puv=kp1HHH>!sKUbrfl~%3!X+`=eXAu80A*?>e`13uu)m9`z~#Xo;G> zBzyAdLF9N}^*~hM)uj|hmpJ680k(XSGoXjsRt74$(KJI4X1QpQ0E;Q1-q$qLMIYh! zv9~vep^Jz{sJR?=ET*fz@`tLJv9kQ8V)a>?*=mtCh5&iHUS%gIbMlck`b9b$Z8^)U zOp0EznO-ZI6tJ@Yu4bC1q&URPK_vOn69FQyQhU8j`*pviC#bu%nVEmo2)0<(;6E5(u3yiqE z*SHcq!Hsi|)R$2SpGn2N&2qQc(Gs;k%$twTuOdb%?V ztInl{w7Y$_8^mDZh`AceVZ@_mNddhRELmcS??!iq5hU8yyxTFw!f|)b`fP+zwXpba zI@WlO_spx@PqN#pS~X_6Brqzd7A*9a!{Iu%{TjzjLsen8{v@3l0}_lJI%K^n$L`jhUm2>`j$BhuIATn zW!uf_HF20tnMrv2@VN82x(T)VZsY$%9LooE&tK-O0xiouO&ZrHom!ytiX~ zs`RA)(TO<8s>#v69IUm7zouuuO^Mb6%{lt}YViD2 z-8auiWNg&<&~#H-f$ACve6V1U*Vp25#^+X!Td)NkxylDu411Skwa~7djj$(hO0 zciJ%4QXv{4updd98`A3>#XJ@9A;W}ZMkpl(il@}soJEK?#>_c+9q?I$sN9-u*)IYA zgJemj?NKsZT~SO7)&p}eVflju>uCaTTNURrdCcJJg;#OSArhzHf|k#K3bIG=-hO@M zTSzYSy+VM^$kL~UR+t6--R0~xOYb=*l{7%)XUYRbmL`314&FB8>pQ6tXBU2TUMJx^ zS(>UkqRC*=nhT@I&6*%N4W<2>ouW3@Xst9|(q1@uz z0nWM9(>lZClg+b!%0xg9aXDAZ>gz2X!_4K|RTrH=y)sNJD@#1if5d|z(`S@n<-uo| zlmh@+ZtCC-Ya!r>2#&v92z2iP!@V73?>@;~QFyvGH>%ZQMF`?rsN{1Pq zQBCgTf>QF%SdL{Grv{*x@r|&~o`KBUy!$)Jc`E{Ob1HLs&-mL6b@I7SV&&zo^_}Lp zhkHWnZqPhr!Fzd_587Vxo`{wFjF@!wn*4_X*hSYM=%}fX*;>7uiSXRanV>0eIN!~a zj>B;6S+b`vx?M5KTd(r7%lF|JB?FtcY>DcMn@T0XGXHdGH1nGML$MzJ+(nLcna|lG zE$n1#`9(h5N;6lS|D~-1cxfx1T@Am-t`F_nW}%AREs@A%zjCb2p4c91s@Xe8mFQ2B z-Uduv)<-}CL}o(A^p&KLUq?ge1yCmi^i`f+Vm7L0-K#*g5!x6+I5?{^-f zpd9cW-R%nB)ZB{U>PzMwp0Pk&S$G0pJX<6=*3%|F5I``QC=3sY5t&3D3{B^=Nl8tq z)#)md)kcoW?pI=+db@_f`D{Kb*lmY9TY1mn^tTyrh-@}(X5Fr?X`t!v0MN})anTQs ziI6a3V`#7`@X{^+1UshC|o#uCOFw~ui35P1gr@}X?cK14O(9=t@}(L`M9801Itr{M6cb%~RRjk_lai$j-AwTi zqhy7tSYMrLDzYqZ0=GGDaePbAWhmGxP#+mR#k5y6AQD|9jN|G8A=r@Xg2RrWix4t{ z3d~Ht9>ol>GR;MELTA4`aoS`lgCfkjB>s%DjB9L^s)QQ`O_41Dj>2AkFVFyGbe+*a z-a0ioxIi6sLnBj9-!Vp@P2mHeh;)sV>(CbeqaFDiZVV)_x(Xsg5DhBJsq{Vkq&81e zc|Ii%YDarc9qiY-AFt{eiz%| z;lA7HfMwM6R$D*vnAe|l%te;~PR04u0YJZ30(_sT+``C>Mk%|W>cUIX>`ST?Y_$Dk z4^y2%B^7`HB*u4mK{f-XN+DnC&3+R9$Ddd6$3hz++S^K!t6f0{LVMF2ivWb2ZUyf! znCJ%Z6f-QgMT}YsFyRNICn9ZCZaLqgk+|5P4Z+Z8b>}kz-MFBmTNv&p8i-dFP`7{u zG#~*n%3=EY)vVXuCU$$vj=)wDht6m$S%gcF#~voQ-g$9&f@_Szo?yH&8BB~4>d4MqA9FpuOzmF(@d(r`m%)+OO@d1ZyJ@cWu-oieiJxV$l)MEE;C5{DE?^XtY z+Mo2ds!CqcQVh|g06Doec5L!H1~gTDyhA{CNX>x_d|(G*A_C_)h<0p97 zgnwh)6;cWc6Z1m<7xA)%ehXT(WT-itT<>KEP}mX&2^S$$QwiW;$O43D z1r2OqA>s7S0^(w?XL3SG%Yvns_M(!4tuYT3u#%Q~Co*M$QG_A;Qt@U}8x1upjraTv zEe{~i=N+aScLd>eXgNLWB?^*ubkG5~r$|9A1AKlQWdX;AO|-NHXe|nXMn>vE7EXsm zlLJybl~%u9X=fn(+uuwrxj#{X(mOfD=_Wgg4^SqMfMOG>sStP{su_a-6@e854e3hz zA+3USdura^C9Vq1FmL?v-4lDNWROC{FWXwI*V!&}}z8FMi*!ZkCG z%HtVv$FMJQOb@$z;w^dk#W)s?Zk>q?BNGa&JUZ$deC*>N#TK6cc(gc3Q09d&GSU$I z7PzfMKmrhnT19cBBy?3;lk7H8v0)NzMy(ojZJNKYb+Woz8=x?DHdOf()w;$o=0(yP zjo(%emdzE(((G1CsJ75HyA9e&Cnqvq8Ae?4g@y$2o0zg9Q*s1QQF*74xyLf%TX0aK z4tK;Z+{UgJ2q4BtDv(5_rRNw(0H_}fyF%}`&T)RT1t74tS>yV(+C`<{MA+ODy+|6__aDYTv@jF~rE11PCC23(_&^N>iHB>DbP6r$%t<9z46@Rk#8d-f-;-XWidj zvqIz?XZuuyz))TrpV!&r^{Qd2j>=%+IKk-_(O27&u~oFQbP@h=Jj99UpulY=9)nal zt(Tjl8V{3TZ!xyiXsU`4m8&$Av1KH!*5Mok92yB1W7gT|8g~n5HA-96!wSGPt_MNA zeM>fmOxaVs(1ud4X)OhE-T>aQyjXiWNbY0J zYc^ej567+_y{pL{Amw;#MBY@Evb;r*L_udcI`1>UNI(%kn!AHlT%)eT$NX?JW0+M8 z4`9{*BR+5hQoQ1C{*Imvsd2>ZIk8ieYM(Ek?a!F}Ro`?W3>;r^(b)t7tRe7G z#aA6=Z3mVY-TGy(fcC9)B!$2YfE;We^&>Amdj(F3j z(mDrlN+5~-wSkk(u)1u(*Z}IDDr2&cZTOn)u>uC#%me`eL4KUanU*c>LN1c7kKa6m zR|;y}6a%(M1}kQUH%xC-1fbmp=`3*0BB%`Vd`lw|iGn(i0yksUAj$Q{Z1pbXs1VNK zc95pRBfGeR2PtWkKFQ5u4+R)t`VM745=p(3#!2F)+_Vftk}w($ZP2R91q7hd;DG@D z5=R9v;0rOJTb>{&l!*XD$@Ma&3#TtbTmT@Br~xbhi7*ZXJS_t9r2xh!XWT)#Oo^k+ zjRKA?{?5iXgyH%sAiMx6J_L-eJ_A$oFUW+gt;8;>)}-$83GLjDp7QDc{!XESLKERB zB<9Y=&Thxh>+bwQ@0=!~CQ1WcN}U9+5X?qBz^s5C%*psAKqODzl;`qNB+x#j*7D*b zd~j+`PxMAF;jC)}=|fYj3kcVP^lUDsG70u7E&;MCCZ=y9E>QO}z{sM|8xV>NKZ6RZ z&;UlttfbHove0Ho;P_NP9_3LCeQ>y#L&7l4(r6A12Mz#Gu=f1HsLW;|=8O*i3v3;X zh#`i`f4VRJbmkq*#|zkk*Ct>efUqARqow>12lFsKE(Z~{P~aXB0H)|n^sfK1=#Ih! zj55)xDr-xc?cbh+Ga{gH3h-j2Elr+;6eZ9UW3bzX5%5~;F*Z;$Qc5ypD-8_Kf3D_g z0H6eQ=mH{$q!K{;M&<%Zp}9IPw2}@FYEWvT5g9{82NTXLsg5BpB@NFKx}M7#uMy5@ z?;MqaAw1-6*1!q5QslHO^B7?+Gs5v!YEk%csEp$H4igNKPadL=8EMfY;3fF&p9#sZP2`(;wd<0W!cT#b%xVfCcV;OkXB& z6fF_QTrw0{VmE;aD0qi(dQ-9LX0A3S2 zpHd=C&`0Fz)U>eo z88=fhlQ04DV<35ffdFIy9AY8Yk~0B-03H$|0nv3jXFb`{Pu{a@;PVIhv}&v-2g_1E2S}X2 z^Djlf%>;|b@UjA)FgEw?tQ28EC1}bbPx3ZmK+e!qCiE~Vv_eVX3~5nRA3{Kbs!Zz> zAPp%UZgf+Us)I&UXVCJf@{z5kg|qII6YsD?)I9M~yKW^dQO0h5JPXfd}D!yZZ(JM z9BB?1#1g4eX(HS(7y^rD^{Rhb^B~YPH!!jxebw873O{P*BZ<`?S+68b(y_b^F;ub> z2M}AA^lFi_O3kViL`zJruoU6wBc{|Rqcl!U3`i4eUvI2}1jDYx^g7q|RLxXq)3nLv zwHjb#-W-6+-s^1Vw51+1P&F+-j}em=R$%qCBh9k(c#u!0PE_+DsTNeLyaUbzQ~(-^ zbD&UdZAqX)1o+q|WJOj5HPyB}RSZ{2WeZO%kv1X!JX9DAXlA<$RB$GjqJc0A0L=oc z069R$za6U1cY~E@aA9r@&PEGPZncnU*Yycwt}!T##ONrwuniQARBNwxV|&LOBw@9n zBSEiq+oHEKwl<7F0`Klb9N3O?J0T5RhD%KhECMA7GD^uJlU;{OMxBhBibU0tf<}bE zQsXV(1Wn}pwkwm@BLVeK+w))%c3=evry7=l^Yn3da6@&f9@K_%tt|HHGO7%ef)Mms zS&q>rm2@xl4CaFXMBr0XS0XA@XS>f*1oC%Pa}j5^8fRDy|Fc+%^)>s)X$vUMqZ#<>K_Vr zax>T(62J%(h)UMWQJvFsyEiOC_hU=AZ-+Q&4HF($>48u-A_!N3YZrk__8hYYhV?@^ zL_luU*h~dNcsI%yir0r**+rAMe2_KSYRzoHcf+f0YXhib*@)tGFblt%PHWDFr^k4m$ zRT+1IMR4^RH-Z}uAaII-6gh8=u+8f7p^OY){}m0MM8lFV8Iw0cJ|?u2S@=~z88JiI zY2TT<+@Ydx#zX02Am%ciA#yPx4OHtB|LT`)yg&hHD^m{9bxBfKX*g(|!$)azj8f8k zo%A@FIcv9;V$5~WzKDiKs7aL-r+w*c*KQW@7?14a6X_sK)7X`R_M7qd-L8R(vcLs^ zYk-k!pwqc&k=HXn)PL?&P?-{*5!V(Mm@F4JHUDRxA-5h5lAi(8pDXrB@{)7Kk%Uqt zRjDwc&ubvG<+nO{l^7x-Dm0=)I^s$bJ~A4k5!h)tTCq8550S$iPc=KKF+PNtY~%qY zE8tF*7KL5fAktS#p11+o2*o0Gl70FT|E0&oy!2eP*tPvadWV`o%a@q7*At(av|lS? z2Fok7`IWhOiQD*HQ_v}_x}47$3Od>;1%lQ_!URwStl{~r?YXV9JCMt=fddGx|8p)$ zzyjv_%?bclcJBod)T`L!pb?sMJ7ORhy0BM?0T!aL!_cr1dw3b!qZP66IBE^4kY;Pv zACZHV3D2<;TyB4ewglo3jS+ZTdTb)8|9}*V6Hu{?()SP)^YWU;9)qW^xwSuBceu!l z8|RK?Pm^Fyly!NJtlU#Wlmd+RCf(!#af$l%i zU((g7$&|VWBGvO3D=Y$X#B*c;7|SI79b_Heha8BD_8Aejf z#JzH&UT&ejtIOTosoq`DT@N3;YMgyVd>j%AV)EA*wdP&y9V_5x1Bg0Y?KwQ{NyK=} zc*N}vZ6|@?5hKN!v!!Zj9m(+TiRs}7AM&BnqvCZLfB+;M5=E29#1#sOmd?6d*#mcXH*^-*LZIw>8C*y zs{)e4>Jhnq{yxA1^aePnpd!L5SEv*+tU{$;!-WwgLbSIbg9C>PQ5{Ig@gvBP0_)8y zxZz00fGYjnW0|m`sF*ROWDqw&CcRS+4`fi0K_Zow3cL}OzztM@qyfM&#S*|M)S}%e zP=#96Dpsr_V&$XtB;u8(&|HkG5Kk;xY{t&2ZIg))+_-Y*DsyAk?OQg7_ImAWsFI_= zAS5-b^vsNyniUu41S|6Kslt*$^j%_$86gM|eyRA?i-ZepUEb6sy;cB$$*~TDyQNOF zTG-ac|9m7G7Mjg4#!%-9@frZTZUV7Ph}YNMPKX9r{>xXkxdZ6=G%Cn&GNnkzA+03W z4taafi>h4R!*0HOdB)2xRuGENrTggcfs!1ko?uOJ_fvtC(lJ8^?NzayP#0u{RXs{A zl~x(SNp&EE4-&N%EJyU#S40ew@x?f7Y4{;AW!T}zX{D8T;#?@ADA$UZw6PbAO~}Xu zA~fa#m};^J;~^S}RS-&jL3ZaISkmNpOJyNkc8drIET9DkIaCh5~3kqSL@ z|7f8N_w@ zD2At_iGoLw0bN#GNoCPAcAelg0p1DeMjxwCE&-pa107k96`)=O}yTW%u2;g+{tD#EdQ!)OjVNSF(BzP>QLg z77NAQe)d&2F`(W0_vi*bHOiky2fQjlf=UI8g{wasEh|+QE}}H9=q7@SyC4eu|Lf3I zvq~(ncB!Z}*IS>4^_E?;flixAMwz4q=H^}L>J8l+=jDQAU|_EJ)A7J19k z^b=#QDQs$b520@ve_Q=-83~`cAwNg36@X>w5L2{m3lc!U2qQSr7(D<<2ZrdS4;t#s zm3j*<%=WErXs06IeKX1*n?kqB*O_-|%e=od6Q`u$V-u*N%+7jB8QV;egsCc6wN$Z6 zFCnZ~C8_rHw=V7Gu8f1zt65jWy*T;9hP}1e>8tPch|D_6SB#55GVNe`gSI)`Yit|y z>voH4_#^tVg>wP!R^4mLF#PbY!T}I*WANJ}b^(F|mahv>kqW@ZATY^o|6vIPNZ?r< z_o@VRu7pnDnM5KcADX$WVj01h?jCii+99uh92?LC#Dlz^ee7i2azF>J!?Gc|2Nm2p zB7umfo{1bF0y+ECfE4nes{}16&}$yjum~ZlTu%{|sgYL<0j#NsuYzVI6WG$|HL$JE zE(DO#`>;17uK+L>BoKik5)idIARq&wn#b{MNT~nSQ3wLG1!3AYivk*gg5a=H)F5at z2X;Y{kZ|Och86(KapN{yAWP)VLOCUAiC|jfh6_sQxh0V7bl9mFpNQznPvnk=J=EC4 za@nyOK1@!sOU^An<~k?Fu!!>!$~}-6s=Ilrc&_86DwOw3Q@jc(|3WKc7N@7pY)ZgD z-u$8$0S8VIbPqNfEQ<-wsLpk!1xx1>8?ol)HTT6a5lmZz1S42KMII>_?YhPq`p7>) zMud=sJY*Ik;m>>?u7EZoWjo!uqy{p@l8?aTzJMjd2QloEGz*av8mBPorE&yH$Q46W zh!Ennu%$c0jt*5vJ6qZkn&hD&PD@dN7^2W*KCP*JA`rw+$+CCJ)QB=^LbD~>l$cP2 z8G#a_#VW3fRTtFaRZf{jadH(`ZpvuD#6dN7lC`XY>rpn+7zd}N%bwwM+7lvi(6vSI zj-ioPAATexK)M2@-YSJb>u9F|CbE73>?$J47l1;7fRYVc|BYF>pv9_U0hIgzX-LPg zQ3>gzq)$jr=r9$_qC%uiMa2{@ZF)PJ=9C^ed}=FmYCD)v!Ko)ZCT=x05Si4+c;eWW z@enl%k_{E9GnGO$RW&qDa`R{hGC)_O8%A=16>`1`mN_G<-F4!%lyFFATg@iNx6&#Y z*2)nH7JvY1sN+lIM8Fydu->}{bU#vHt6M>)Un>L_fL{5HkqS#K$~cr3Wh910tL4}M zLUy}YIAupGo152+GP7J@EQr|q9O6&S z!x(%N*Qm%`aZ+VAF}>#4RK-OqxTdPyU~N{bMxKy#|L-ZzuX+!19U5A{94uw+`eA8q z4ewi@VBT@PjZRE>;~`w&B=xG78YYl$72t|1g7(+Hix|M>-pEf#Fe1y9iEvt)6iLQT za6{BsY%DOU<@?K}p#Y2|IVsE|h1z2`H&5P3kb?BJpDORSt<=nbH$)TE!`*>1!Jm zTh`uKw~m?sqkQMmQm5o}dmXNjcrvk9(;7%X#E5ZSkz56pAkrfkD*$|5!USM-o5q%v zbmiMcCDUkET4IoN=r-NuLxp#1(y< z*2Rn;J^lnO5@5@oviKCOZg&q=YGRIin$_kwNi9W z2EaR@*v{Q%S2?#zaBAJ?O+h+#t2=Fp|1y2MM7QU7lO*-Rf}I)Sb`ja8`@W`uu?cK` z`yv^!&%=oTi)6n(+R=W!GH)R%>>zvfvCj=WLca(A*qo!s{OAM_0v7p33*NavXe{!* zX>kU8uOXf!ijTgDNcb!u9nqwz7URX1rUg@K4M=`O5kY~30j^xjc-nFC-$21!=PgkM z(A=n{#Ifa^uu%=*^_=S++pBby#0?!I5CWb-1Mc-6zciWBxnR}c7u0E6W%!fZ7+rkb z6AzXfj9l63$enzZUt`h2c{xH8+}jdlA2(c|IH6k>fWp}IMK{bF^vxX>s-OB9#*|%^ zk=aB7;2ZwspZ@LNZUK+~h2iH6|JUJ>!U-`RSUe!*P2lZB0q9*|6nU5_3{%Qc9s)vM zP%PX9atq46P)?i*>K&TuJsj)3-hp_N(Qs7>DGepM6)nKg`(;72?OyzGVn*>ED9Ru> zj8b^5+tYc4+YQ*%QGyPlhF7VL4?4@!^b`T4gb=D%=bS(Z=;A86&C<+I5;h^Son29w z9akAb6p&pLCdmV|9}zkOnI%9pMoBcz*@CUp{56kFFxwLdn=bC+H-e)$_FB{6;Srn^ zD-9y1yXt|6sN?0a~=6C`Odhh2r>hVi%5+n%&@lc}bOA1M_uT**wb} zr9(p|BrcXvIF2I`%FhryRQ6%tB50pQrdwr{ofABxwY;PjJ{l!l7eDpH9|~fo7p03g%H%lCWK)(OVp3mDwx&+zq(v%Y(*R{q3Z)SA zWnPlmQBE1cJ;*jP|DS21=4qlP;3Sp*T}WGIWjT6f6eS=$_EO9QpgQ(g;l-Hdt=Py+ zXA;fjrP(9IaOdP9mqA)3UzR6sYGFhMW~^wYZ>Uo8#b&k%ntR%W?QJAeNG5(xW(-yX zHl|=^+F)N4(gF1(fL`KLIwgXRKrh-$Tp?lj(E@G4=b8;&e|?+bG>LgS2^UIPHcCi- zAcXxT=r{%^8M3Ez>R45prRdcIS21Th#vx;nWmtygs|6SB9G8ljoTzE%cIsntLPS1h zr-wnf|L#s8<*O zm~91xEL5Hr256k8Zn~d?d7*RtrkyPTi4Lc5f}9BT@BV}plB*1S) z97lesem<*Y%3y^(RGjJvW>^r@Osik0WDVZwQ!eU}_@^>P=xf5Kl3i7Fy_Z5Nsuhk) zt}f`5>0LqagJz0=w+0@3c4|7VXsATjkGd$pa^;K;EWwJ3TQ8!=S0EV`O27#b zCA+q3Kk+5jUeY6F5{O9ZDJ>i~uI$l5WxiU7rzVv}KJ2X4BSGPbiqclB!7ZwGTFE7> zcCHXYoNA{;?0pbgtWXuM4lbGP>c)2L^juF;h^%4$XAe5A+7PZ@{?_^lTgp1C?s=lY zHS5e`gVm%dn@$4p0qp~&EAX`>Be+1O+Nqr;t!gZxL;~s(auvA_>JuQ_PeR3)F{FB# z|5spa?UC?qVIUCs$SbAxMcImI7vV}iD2+0~C*LNg#9o|=R&T)u&yC*HAF@tcMxMp7 zZHxlXJWy;XVC==7Z!~IblQQX&LdZxyO|bUeMHcAk{$OUH?_TmlO%SdSGOmX8Z)L`8 zw4Nye$_uudpfEx>ZK=a@aj4Bd10$_zE!*t0NtT zDs4a>==#wa zhfXpQu%E%WfF+kL>iQ%PAHe|L4xuJ-+ZM4w5Ank?;HWCZI9QsZP$1o^{|6M?Dqb$L z`L-TJLh(ou@^sZhLS81dcH8pFvqg(B7@stfLNnyNB>wboCf;Y}+GkSmtll`*2xl`6 z3mXRSvDdxTACvR^BIZU9V^NTFUt&t#)sZ~UT_k&fI`w8zxavLA-4pCH4qIyS?J)C3 zN1--`9lPxhBlJOka&#_it%r}(8@(+(CDUh#6*K$d>FXB$m0n9JSLV*kC0{and zv(QLM>n}!>G-2Z}uq`G^iy3!Gvv$>S=o;Vj5rHFtv<+LNHs|yP7oTJVX9DzW5%MHx zlk?b}Y%m%K(?+#is}LirrVDRj*uhuaVc{+I@A+v6p&_!PMvgRM|MoVAfC>3>l29_c znSvdM09zmTLx=TPqxEw47)`XYLPH*@#>~bFhxbK+Q`#~!7j8xmH7`qK7KiL0T&8HA zjpO>pN%I{UuQ#r~^jMTJd{eP|kA^-UwoK2o-^DRx%N4bdL1o*qRc|v-dx>^y=wXR7 ze4-s`GeK4vnNjcM$t1Pj5Ty%zN%y!khGRHdY?dk{8pJICKg1+&-zl?1mnKgf#uc}5 zPqz{?RjI;ibF=L!&v+@*cyRGm4YRjgAQ|l`Y=U~!^ZePRJTziNIejMk*_+Dw>qnr00VUQ>oNHO zq^MFbfi>ZG2+*AuujHDdH+!phmJhp^tL(5p8i*WwU(Q#Y6}woxG2rkM{akH-m+pU? zYn@u~n;Wg`_N;jxxE%-bA?*1n;Wn-^%`+1Ec^Z1NpP!A4BdE`+8t6E@=@7y`L(EWIzY1FUwsV=TMtv)02q*B>kT9j!Rv zyMRZUbXj^-`uo3gy4tTj+qXSIEBtb-HK{ww(V#kZSG>hj{FW-YtaAfZB$|5VdLpO_ zy6}2E@x>F!ys$4jg*QG!ZvED?%4|cvd^!H1-<}!EyynNZn8o|Eqae;(i_ZJ55NOtt z0jNIlZk>O~!-cszu^%IXl3}8bMZ(|8Sq1`!Y*-9jQC#8#?6=f7jQ1Y$xx% zi~YSum-h}WC$s248z;ddJOws!iyyqFEBxFabi?oM!%MVxPsNWL0N$7Xs_(rc@_qF{ zK;E-}<=RMJPkADo{4%HfNoRgT5|fB^*#Bv{bkL4*kp!kQ3IfxiL#BHoKw(SSva7d2WmK+D#wivcbYI8l;?Nt7p3 zmM94!)<;ybWO{^2Gv+M{7br{^u~MbalRZxyB1)8vh-kc^jmt3Z*;A<0q#B_*gwItb zRkd#A+SSOCt<|E9jS9^yR4oFqs?kTP&f7e3?;zvjhg4C#i0CC-5K8G^WeJEiTLw7N zmwIhOcwF50=FG>DYvn2&SgEVQnKfr3o8?$Dq@Bx3AuE=MI@IAHq-MRY^#~V=*CdOO z*xkg7vh`);sFC7EiNSvl_gx(K|8e0ElOre2ytn}e;}kqJzTA5A>l$6fi=cov@bBTl zU$jYUKmhdjey#_~vV_Z=I%UqsS(Cm^`tdI?VBf!eg1m|nL=YENI>#`kDg$gZ(x&nX zE3CYda6$?xG_45HGCb=ntlY8fjX3NGQ7#hY*y9YgW=lj6L<(VXkQeuoVwXukVdO>} zKLKViPW+tu&<#%rzTp%)bq9ti&d`BJGizL3kOjM-%y`2}wHK_J)etn1%UsK3|oJ9peI1-yjV zC7Bj z&^Z)_PK7D#|JdkG1}T(H>UKMGnd@5gEBwifh9$9??R4g!9|rMu+@M63c;`E@2v3Q> zQ_HRp7y=R<4{FRy!T^raE&;vl5P^8o^}4{LE3{9HLSmZu%t*ePEM{~VNT0}Z!8SN9 z;zqD=Tl}PCKQD4`jE#^X|N1vW9qLVxeoW1;3^}zBq%D9Ra)CGErJJ6O$}5$lnH|vB`j$-4npSAmb%m( zH+c6mSCPs=OC;uloQOaviU@hhj2aWJNVOONYkD?>SsR?7#|2Rdn{s<(DgL0OSyU@z zY*bV^|KHdwwTZDdc7z+a@JP3J;xT{!qvt%;(akjs(0glu4FMAPjVG?5kzGO!(vql^ zeH^6-#Mq)fv@(tFu7rRRn)ZnG20 z5+jf-gU>5|lP2d|qXx*Ss4n(}eV<_G+uSMDJYKJlyJV|9>$weIxdTlVaDgEJ>MMW- zl%RWkjU>BLNro`YlLVPup9Xu6%VExhqx@)NNBYs4^wfB z)EdZF(p0h$TWCdAS>INpYzddSLwu`St;?FYl7c(!*sDLE$XD=&x1c}eN6$aZbM?b!=nzi(LMuaK9eFFQRU=Qbv3>h%&Wl4`cdZ zoURPQ6SgU6_13_3&o-;&lq*BWQ~~oiMB52>Z>m73TAiL+j^W zjv$Yx&CpM?EX-;E&3VNGZfuWgR6BgwHrc)HZsYk*IdrYa*ORhw%~v+#>POT#-Z6_G zk-Z;p1`0eLE0H^KBS0rv$>KF+T;sujDi@CcSLSuEt;{D}^E9*>kkbJ#GnecC_ktDS{#3Zg>lM z(7n~Lp%eXKXSkKzJ1UPX+R+DRb?b_EXXL)P-a_cXRR~p0?2(qbjSTcu_Vw^(v zxT(E?Yh(M{mF4zGhfZ|MHpRg2hJX;ueQv0)8{|_Dxu9DuZ;WF&!}XRzr}JU(ec!?B zw6e>;qj|#>5Bv)S$Aqc1HY8}lWEH0fwMkF0K7_vl)fFF1v9d04s~Y*^Ri|0YMLqSb)kG?si51q~yQ~I5o zegX(QJ@gNrJ-cmhVGCP5#zQ_Z)8qYjdS@Z4wLavEP#t!$yH=LL|H_LW)cy#zZ$d$N zrx6)R!I-+w{e`Va=k6DvfW7lw)4OnW#(%W7l+<48AtyZKYe@X;x?lc=2SuspUyhgW z_~hy6-4G1oe~lU;GlMquD?p!1Gtw(M1$;B3OQ|&@7?v6n1DwG1qdE($6zan!;M=;f zu!|Gxm0!6MKt?%ox@CLevAp zFJwKY_!y;AGtf&zEv&#GyfDD)!51`^S-P4J)SeJ~G-JRw|EhT%Hi*L(l!ND+xIn(GN7bLG#;|*V4fqTtqnBJ@-%vN@PPzY(q>;LKlz&C+tLCv$OqkLd%oCoYOgq zQA1Qr#R^lipesEFT)@&p6q_+U0uwh?T*C>=M5-&lK#aq`V7}K8mgvchWx|yZ(TA(? zgTzQifpa?^36Wk547xLg8PtawWTl;W!&7TSM;r!4(8fso8mybdOVq{O(?w5AM|A`* zP)x_k2}SxVMQ2M70>njoyhRq^!ZqVU{GvtH<3a-C#|_{@F1)s%Q?oKmGlH}LePl?5 zOg|vH$B4YgJZqV7yhuH22Q4a!7Tg5c!b9XSF=l+G{}dFEW(>T*i#|xh$Vo^NxH}T_ zu|~7;h=+?fNbCYY=*BCl3>zW8j`K;DWFKh*!rLoH_H(HrBtoTJ$8tDBb+i+ho4mwQ zERi@fiqxr!#K)LANNSr%sJkVc@k)riO0qmh&9X>ej7B^H#x1Iv7wHyA`z<}hqUK`* z0(icTtOFk89{ZR{xFZs3c?^o7VR|zkVpEWNA|qY`lQeK+)*CwQ6K$LR4mKc1W`!T zNdNqUOpBkR;?1QJ#$owQE$YJ%l}_2J&RuAf@`+HultJaJv3yE^Nb67+tb}9uj6aBm z>9kTJRZ}+2J2-mGKQl);HPQT`t`v>A|CM5jbaaIBbi67o#Q}6r*fh$l%uz!H(nH13 z!Rv;*sUPYbG~3LSlB81LYK8!{1d&`my1Y$m!pqzQMB##kmpGrCNTa!QgK#n~HUU!& zJxomqt_I}=F};KjO-oySR9}qIFqzCd?NwiWygeC*Jq0#h{k8M71<$L;L|s-zjZZ{< zR%ngZHRRC;8`6$jn;eNZYV$pA#n!bk(%US?N_DXkxr8Ql7Zg0w!Jz``qtuUdR7g0P zERD%irO;KlS67&WoYbDhB*qYJQ-EDlT-8q+;Rf%dQ!wGxgDt%4`qjT_M~B6~K5e-L zpwTj0tN{ouX5Cnhl}OT*){a#_|7#6O;Nv)SN;|{=5WJuRZ*dw-@H%xhNdoayxM5H) zI-TXz(t6zo%E&{0-Ly2VRe`-#q7~YAT7Za6S`|%)*wfQty|rQ$uLqS!&^*hKy;_e2 zS*_jLkOjVy&6dB*I+LwGOhJG`I8dTcrrqR`xyS@8s;gN_v6zJ!#RSJBh07`pyg!W( zGJ6w+Q-!f(6TDjhpWVp}oK^V=*r8oq#U0q9?Te*VTFPu%TpCsKD+MhpP_+zLsD*iD zg~b@3aMD?LU>jeMGVa?N|3MIjSk0r%(A~#1TI$`;>TOi)<-p)mkjTBvU?tC}1kcMr z6Y`x7^F4qE?Wh1q%3V#^IBhASEM3zTUBZ*2Ze1H~y+US8l^TL?_gycTwC7I$NW85_iN3I#-P-VoJ{x@}#@ zz250vVHMuqg6-aVqTHwr&xw^>{0oDSFd2MbVNTg)YU&3|O zwu3{&P23h{VIrPm|LLk@JkDMh)?U1U;hy>4r)@$QCIF1}V<0}{)O}w|xz;R3Vb_gD zpu{>OK4Nc0Vvb9IK71Kt5Lb6KxJZV8CB|Kq?L*(=%5B{RV&IFsEXH&?&fskfY7CUD z$v`LRzGgYlVdzCwdt}D#Wi6&-J1*M2>@DeXyi1zlUWGtEc7Z}RWM?KQI85STX30DT zW=8J4NoHdo3FS=TU2$Yf+@;%9^NW&YI~=*&XMAE;uEs)Sg=;}y4W8!0)dULOrp>5l zYo2Cd*5hj4V}Iu3e}*Tn`z3;w0&`I2Kn}L+GmaC=u^Amde})FS?M@< zU~ryWsCr~B?zm1S-mO|VH<)Sa)K@o_zG%$pi-zjCZfbtMYq|z#y%y@de&`Jj*3)9S zQ5@v@8i1*GWM8&qX+~_CK5WNk>_~)CnSJZ84h2Tw8WN~v5tdSth8@M;I2YSEN)4Y? zx?nNZzO|k{#LmP2JYm|@j4ys{*_LYBu50GvYZoqRfu5f(LFk317{jJ&o^I^gChndt zZsbnx|G7EBIb0LUHn;|DhHO4%=M!tsZrtbt66pkl;(civ1Yt>D?7(PM68_MjRc`dQ z>%PYA^=@zW-rj+R0vKfkzm9L?tl_0)=!%$a{)X(<{p|h@aQ}W(xOE2+8NW_&o4Uo; zl>(5Xn41QkB>OK=I)gaEvzPZAHidw{0A+RWcZYK)53a&jftFs_HI^1rCG3xwr|J zgwRgO%rJ$ye97hYUwP|r-)rON7Ut*;W)7b2I12I=cW*R@@ibp^1ki0ZKP}5EXe}{3 z|NXuQ9slt=k0Ty8g&KxWUivV8bj1ZSKjMrm8@PL^AhqP#10>H*-Nh^E(DbRczvg4^`_l2rRQfjQ(s)9+jVX~cwTV45oyN&goGnWr_hg>OU0aU|F