From ba4b1ab8423805df419003ec71b09bc349db798b Mon Sep 17 00:00:00 2001 From: MendelXu Date: Thu, 9 Sep 2021 12:58:22 +0800 Subject: [PATCH] init --- .gitignore | 38 + .isort.cfg | 2 + .pre-commit-config.yaml | 31 + Makefile | 11 + README.md | 141 ++- configs/baseline/base.py | 123 +++ ...ster_rcnn_r101_caffe_fpn_coco_full_720k.py | 20 + ...aster_rcnn_r50_caffe_fpn_coco_full_720k.py | 14 + ...er_rcnn_r50_caffe_fpn_coco_partial_180k.py | 32 + configs/soft_teacher/base.py | 287 ++++++ ...ter_rcnn_r101_caffe_fpn_coco_full_1080k.py | 36 + ...her_faster_rcnn_r50_caffe_fpn_coco_180k.py | 48 + ...ster_rcnn_r50_caffe_fpn_coco_full_1440k.py | 30 + ...aster_rcnn_r50_caffe_fpn_coco_full_720k.py | 36 + requirements.txt | 5 + resources/pipeline.png | Bin 0 -> 505743 bytes setup.py | 99 ++ ssod/__init__.py | 1 + ssod/apis/__init__.py | 3 + ssod/apis/train.py | 205 ++++ ssod/core/__init__.py | 1 + ssod/core/masks/__init__.py | 1 + ssod/core/masks/structures.py | 60 ++ ssod/datasets/__init__.py | 15 + ssod/datasets/builder.py | 172 ++++ ssod/datasets/dataset_wrappers.py | 17 + ssod/datasets/pipelines/__init__.py | 2 + ssod/datasets/pipelines/formating.py | 78 ++ ssod/datasets/pipelines/geo_utils.py | 94 ++ ssod/datasets/pipelines/rand_aug.py | 965 ++++++++++++++++++ ssod/datasets/pseudo_coco.py | 86 ++ ssod/datasets/samplers/__init__.py | 4 + ssod/datasets/samplers/semi_sampler.py | 196 ++++ ssod/models/__init__.py | 1 + ssod/models/multi_stream_detector.py | 84 ++ ssod/models/soft_teacher.py | 511 ++++++++++ ssod/models/utils/__init__.py | 1 + ssod/models/utils/bbox_utils.py | 255 +++++ ssod/utils/__init__.py | 19 + ssod/utils/exts/__init__.py | 1 + ssod/utils/exts/optimizer_constructor.py | 113 ++ ssod/utils/hooks/__init__.py | 12 + ssod/utils/hooks/mean_teacher.py | 64 ++ ssod/utils/hooks/submodules_evaluation.py | 106 ++ ssod/utils/hooks/weight_adjust.py | 35 + ssod/utils/hooks/weights_summary.py | 101 ++ ssod/utils/logger.py | 172 ++++ ssod/utils/patch.py | 81 ++ ssod/utils/signature.py | 7 + ssod/utils/structure_utils.py | 153 +++ ssod/utils/vars.py | 35 + ssod/version.py | 3 + tools/dataset/prepare_coco_data.sh | 60 ++ tools/dataset/semi_coco.py | 121 +++ tools/dataset/semi_coco.sh | 8 + tools/dist_test.sh | 10 + tools/dist_train.sh | 9 + tools/dist_train_partially.sh | 21 + tools/misc/browse_dataset.py | 173 ++++ tools/test.py | 261 +++++ tools/train.py | 198 ++++ 61 files changed, 5458 insertions(+), 10 deletions(-) create mode 100644 .gitignore create mode 100644 .isort.cfg create mode 100644 .pre-commit-config.yaml create mode 100644 Makefile create mode 100644 configs/baseline/base.py create mode 100644 configs/baseline/faster_rcnn_r101_caffe_fpn_coco_full_720k.py create mode 100644 configs/baseline/faster_rcnn_r50_caffe_fpn_coco_full_720k.py create mode 100644 configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py create mode 100644 configs/soft_teacher/base.py create mode 100644 configs/soft_teacher/soft_teacher_faster_rcnn_r101_caffe_fpn_coco_full_1080k.py create mode 100644 configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py create mode 100644 configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_1440k.py create mode 100644 configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py create mode 100644 requirements.txt create mode 100644 resources/pipeline.png create mode 100644 setup.py create mode 100644 ssod/__init__.py create mode 100644 ssod/apis/__init__.py create mode 100644 ssod/apis/train.py create mode 100644 ssod/core/__init__.py create mode 100644 ssod/core/masks/__init__.py create mode 100644 ssod/core/masks/structures.py create mode 100644 ssod/datasets/__init__.py create mode 100644 ssod/datasets/builder.py create mode 100644 ssod/datasets/dataset_wrappers.py create mode 100644 ssod/datasets/pipelines/__init__.py create mode 100644 ssod/datasets/pipelines/formating.py create mode 100644 ssod/datasets/pipelines/geo_utils.py create mode 100644 ssod/datasets/pipelines/rand_aug.py create mode 100644 ssod/datasets/pseudo_coco.py create mode 100644 ssod/datasets/samplers/__init__.py create mode 100644 ssod/datasets/samplers/semi_sampler.py create mode 100644 ssod/models/__init__.py create mode 100644 ssod/models/multi_stream_detector.py create mode 100644 ssod/models/soft_teacher.py create mode 100644 ssod/models/utils/__init__.py create mode 100644 ssod/models/utils/bbox_utils.py create mode 100644 ssod/utils/__init__.py create mode 100644 ssod/utils/exts/__init__.py create mode 100644 ssod/utils/exts/optimizer_constructor.py create mode 100644 ssod/utils/hooks/__init__.py create mode 100644 ssod/utils/hooks/mean_teacher.py create mode 100644 ssod/utils/hooks/submodules_evaluation.py create mode 100644 ssod/utils/hooks/weight_adjust.py create mode 100644 ssod/utils/hooks/weights_summary.py create mode 100644 ssod/utils/logger.py create mode 100644 ssod/utils/patch.py create mode 100644 ssod/utils/signature.py create mode 100644 ssod/utils/structure_utils.py create mode 100644 ssod/utils/vars.py create mode 100644 ssod/version.py create mode 100644 tools/dataset/prepare_coco_data.sh create mode 100644 tools/dataset/semi_coco.py create mode 100644 tools/dataset/semi_coco.sh create mode 100755 tools/dist_test.sh create mode 100755 tools/dist_train.sh create mode 100644 tools/dist_train_partially.sh create mode 100644 tools/misc/browse_dataset.py create mode 100644 tools/test.py create mode 100644 tools/train.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e909f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +#vs code +.history/ +.vscode +.idea +.history +.DS_Store +#python +__pycache__/ +*/__pycache__ +*.egg-info +build +#lib +tests +thirdparty +thirdparty/ + +#develop +wandb +data +data/ +*.pkl +*.pkl.json +*.log.json +work_dirs/ +figures +cp.py + +# Pytorch +*.pth +*.py~ +*.sh~ +launch.py + +#nvidia +*.qdrep +*.sqlite + +.pytest* diff --git a/.isort.cfg b/.isort.cfg new file mode 100644 index 0000000..2ba5713 --- /dev/null +++ b/.isort.cfg @@ -0,0 +1,2 @@ +[settings] +known_third_party = PIL,cv2,mmcv,mmdet,numpy,prettytable,setuptools,torch diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..66396d9 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,31 @@ +repos: + - repo: https://github.com/ambv/black + rev: 21.5b1 + hooks: + - id: black + - repo: https://github.com/asottile/seed-isort-config + rev: v2.2.0 + hooks: + - id: seed-isort-config + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.0.1 + hooks: + - id: trailing-whitespace + - id: check-yaml + - id: end-of-file-fixer + - id: requirements-txt-fixer + - id: check-merge-conflict + - id: fix-encoding-pragma + args: ["--remove"] + - id: mixed-line-ending + args: ["--fix=lf"] + - repo: https://github.com/jumanjihouse/pre-commit-hooks + rev: 2.1.5 + hooks: + - id: markdownlint + args: ["-r", "~MD002,~MD013,~MD024,~MD029,~MD033,~MD034,~MD036", "-t", "allow_different_nesting"] + - repo: https://github.com/myint/docformatter + rev: v1.4 + hooks: + - id: docformatter + args: ["--in-place", "--wrap-descriptions", "79"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0b9b656 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +pre: + python -m pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html + mkdir -p thirdparty + git clone https://github.com/open-mmlab/mmdetection.git thirdparty/mmdetection + cd thirdparty/mmdetection && python -m pip install -e . +install: + make pre + python -m pip install -e . +clean: + rm -rf thirdparty + rm -r ssod.egg-info diff --git a/README.md b/README.md index 5ebb12f..5c4512e 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,12 @@ By [Mengde Xu*](https://scholar.google.com/citations?user=C04zJHEAAAAJ&hl=zh-CN), [Zheng Zhang*](https://github.com/stupidZZ), [Han Hu](https://github.com/ancientmooner), [Jianfeng Wang](https://github.com/amsword), [Lijuan Wang](https://www.microsoft.com/en-us/research/people/lijuanw/), [Fangyun Wei](https://scholar.google.com.tw/citations?user=-ncz2s8AAAAJ&hl=zh-TW), [Xiang Bai](http://cloud.eic.hust.edu.cn:8071/~xbai/), [Zicheng Liu](https://www.microsoft.com/en-us/research/people/zliu/). +![](./resources/pipeline.png) This repo is the official implementation of ["End-to-End Semi-Supervised Object Detection with Soft Teacher"](https://arxiv.org/abs/2106.09018). -**Code and models will be released soon.** - -## Introduction - -This paper presents an end-to-end semi-supervised object detection approach, in contrast to previous more complex multi-stage methods. The end-to-end training gradually improves pseudo label qualities during the curriculum, and the more and more accurate pseudo labels in turn benefit object detection training. We also propose two simple yet effective techniques within this framework: a soft teacher mechanism where the classification loss of each unlabeled bounding box is weighed by the classification score produced by the teacher network; a box jittering approach to select reliable pseudo boxes for the learning of box regression. On COCO benchmark, the proposed approach outperforms previous methods by a large margin under various labelling ratios, i.e. 1\%, 5\% and 10\%. Moreover, our approach proves to perform also well when the amount of labeled data is relatively large. For example, it can improve a 40.9 mAP baseline detector trained using the full COCO training set by +3.6 mAP, reaching 44.5 mAP, by leveraging the 123K unlabeled images of COCO. On the state-of-the-art Swin Transformer based object detector (58.9 mAP on test-dev), it can still significantly improve the detection accuracy by +1.5 mAP, reaching 60.4 mAP, and improve the instance segmentation accuracy by +1.2 mAP, reaching 52.4 mAP. Further incorporating with the Object365 pre-trained model, the detection accuracy reaches 61.3 mAP and the instance segmentation accuracy reaches 53.0 mAP, pushing the new state-of-the-art. - -In this repository, we provide model implementation (with Pytorch) as well as data preparation, training and evaluation -scripts on MS-COCO. - ## Citation -``` +```bib @article{xu2021end, title={End-to-End Semi-Supervised Object Detection with Soft Teacher}, author={Xu, Mengde and Zhang, Zheng and Hu, Han and Wang, Jianfeng and Wang, Lijuan and Wei, Fangyun and Bai, Xiang and Liu, Zicheng}, @@ -23,3 +15,132 @@ scripts on MS-COCO. year={2021} } ``` + +## Main Results + +### Partial Labeled Data + +We followed STAC[1] to evalutate on 5 different data splits for each settings, and report the average performance of 5 splits. The results are shown in the following: + +#### 1% labeled data +| Method | mAP| Model Weights |Config Files| +| ---- | -------| ----- |----| +| Baseline| 10.0 |-|[Config](configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py)| +| Ours (thr=5e-2) | 21.62 |[Drive](https://drive.google.com/drive/folders/1QA8sAw49DJiMHF-Cr7q0j7KgKjlJyklV?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py)| +| Ours (thr=1e-3)|22.64| [Drive](https://drive.google.com/drive/folders/1QA8sAw49DJiMHF-Cr7q0j7KgKjlJyklV?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py)| + +#### 5% labeled data +| Method | mAP| Model Weights |Config Files| +| ---- | -------| ----- |----| +| Baseline| 20.92 |-|[Config](configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py)| +| Ours (thr=5e-2) | 30.42 |[Drive](https://drive.google.com/drive/folders/1FBWj5SB888m0LU_XYUOK9QEgiubSbU-8?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py)| +| Ours (thr=1e-3)|31.7| [Drive](https://drive.google.com/drive/folders/1FBWj5SB888m0LU_XYUOK9QEgiubSbU-8?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py)| + +#### 10% labeled data +| Method | mAP| Model Weights |Config Files| +| ---- | -------| ----- |----| +| Baseline| 26.94 |-|[Config](configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py)| +| Ours (thr=5e-2) | 33.78 |[Drive](https://drive.google.com/drive/folders/1WyAVpfnWxEgvxCLUesxzNB81fM_de9DI?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py)| +| Ours (thr=1e-3)|34.7| [Drive](https://drive.google.com/drive/folders/1WyAVpfnWxEgvxCLUesxzNB81fM_de9DI?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py)| + +### Full Labeled Data + +#### Faster R-CNN (ResNet-50) +| Model | mAP| Model Weights |Config Files| +| ------ |--- | ----- |----| +| Baseline | 40.9 | - | [Config](configs/baseline/faster_rcnn_r50_caffe_fpn_coco_full_720k.py) | +| Ours (thr=5e-2) | 44.05 |[Drive](https://drive.google.com/file/d/1QSwAcU1dpmqVkJiXufW_QaQu-puOeblG/view?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py)| +| Ours (thr=1e-3) | 44.6 |[Drive](https://drive.google.com/file/d/1QSwAcU1dpmqVkJiXufW_QaQu-puOeblG/view?usp=sharing)|[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py)| +| Ours* (thr=5e-2) | 44.5 | - | [Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_1440k.py) | +| Ours* (thr=1e-3) | 44.9 | - | [Config](configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_1440k.py) | + +#### Faster R-CNN (ResNet-101) +| Model | mAP| Model Weights |Config Files| +| ------ |--- | ----- |----| +| Baseline | 43.8 | - | [Config](configs/baseline/faster_rcnn_r101_caffe_fpn_coco_full_720k.py) | +| Ours* (thr=5e-2) | 46.8 | - |[Config](configs/soft_teacher/soft_teacher_faster_rcnn_r101_caffe_fpn_coco_full_1080k.py) | +| Ours* (thr=1e-3) | 47.3 | - | [Config](configs/soft_teacher/soft_teacher_faster_rcnn_r101_caffe_fpn_coco_full_1080k.py) | + + +### Notes +- Ours* means we use longger training schedule. +- `thr` indicates `model.test_cfg.rcnn.score_thr` in config files. This inference trick was first introduced by Instant-Teaching[2]. +- All models are trained on 8*V100 GPUs + +## Usage + +### Requirements +- `Ubuntu 16.04` +- `Anaconda3` with `python=3.6` +- `Pytorch=1.9.0` +- `mmdetection=2.16.0+fe46ffe` +- `mmcv=1.3.9` +- `wandb=0.10.31` + +#### Notes +- We use [wandb](https://wandb.ai/) for visualization, if you don't want to use it, just comment line `276-289` in `configs/soft_teacher/base.py`. + +### Installation +``` +make install +``` + +### Data Preparation +- Download the COCO dataset +- Execute the following command to generate data set splits: +```shell script +# YOUR_DATA should be a directory contains coco dataset. +# For eg.: +# YOUR_DATA/ +# coco/ +# train2017/ +# val2017/ +# unlabeled2017/ +# annotations/ +ln -s ${YOUR_DATA} data +bash tools/dataset/prepare_coco_data.sh conduct + +``` + +### Training +- To train model on the **partial labeled data** setting: +```shell script +# JOB_TYPE: 'baseline' or 'semi', decide which kind of job to run +# PERCENT_LABELED_DATA: 1, 5, 10. The ratio of labeled coco data in whole training dataset. +# GPU_NUM: number of gpus to run the job +for FOLD in 1 2 3 4 5; +do + bash tools/dist_train_partially.sh ${FOLD} +done +``` +For example, we could run the following scripts to train our model on 10% labeled data with 8 GPUs: + +```shell script +for FOLD in 1 2 3 4 5; +do + bash tools/dist_train_partially.sh semi ${FOLD} 10 8 +done +``` + +- To train model on the **full labeled data** setting: +```shell script +bash tools/dist_train.sh +``` +For example, to train ours `R50` model with 8 GPUs: +```shell script +bash tools/dist_train.sh configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py 8 +``` + + + +### Inference +``` +bash tools/dist_test.sh --eval bbox --cfg-options model.test_cfg.rcnn.score_thr= +``` + +[1] [A Simple Semi-Supervised Learning Framework for Object Detection](https://arxiv.org/pdf/2005.04757.pdf) + + +[2] [Instant-Teaching: An End-to-End Semi-Supervised +Object Detection Framework](https://arxiv.org/pdf/2103.11402.pdf) + diff --git a/configs/baseline/base.py b/configs/baseline/base.py new file mode 100644 index 0000000..fed6e60 --- /dev/null +++ b/configs/baseline/base.py @@ -0,0 +1,123 @@ +mmdet_base = "../../thirdparty/mmdetection/configs/_base_" +_base_ = [ + f"{mmdet_base}/models/faster_rcnn_r50_fpn.py", + f"{mmdet_base}/datasets/coco_detection.py", + f"{mmdet_base}/schedules/schedule_1x.py", + f"{mmdet_base}/default_runtime.py", +] + +model = dict( + backbone=dict( + norm_cfg=dict(requires_grad=False), + norm_eval=True, + style="caffe", + init_cfg=dict( + type="Pretrained", checkpoint="open-mmlab://detectron2/resnet50_caffe" + ), + ) +) + +img_norm_cfg = dict(mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) + +train_pipeline = [ + dict(type="LoadImageFromFile"), + dict(type="LoadAnnotations", with_bbox=True), + dict( + type="Sequential", + transforms=[ + dict( + type="RandResize", + img_scale=[(1333, 400), (1333, 1200)], + multiscale_mode="range", + keep_ratio=True, + ), + dict(type="RandFlip", flip_ratio=0.5), + dict( + type="OneOf", + transforms=[ + dict(type=k) + for k in [ + "Identity", + "AutoContrast", + "RandEqualize", + "RandSolarize", + "RandColor", + "RandContrast", + "RandBrightness", + "RandSharpness", + "RandPosterize", + ] + ], + ), + ], + ), + dict(type="Pad", size_divisor=32), + dict(type="Normalize", **img_norm_cfg), + dict(type="ExtraAttrs", tag="sup"), + dict(type="DefaultFormatBundle"), + dict( + type="Collect", + keys=["img", "gt_bboxes", "gt_labels"], + meta_keys=( + "filename", + "ori_shape", + "img_shape", + "img_norm_cfg", + "pad_shape", + "scale_factor", + "tag", + ), + ), +] + +test_pipeline = [ + dict(type="LoadImageFromFile"), + dict( + type="MultiScaleFlipAug", + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type="Resize", keep_ratio=True), + dict(type="RandomFlip"), + dict(type="Normalize", **img_norm_cfg), + dict(type="Pad", size_divisor=32), + dict(type="ImageToTensor", keys=["img"]), + dict(type="Collect", keys=["img"]), + ], + ), +] + +data = dict( + samples_per_gpu=1, + workers_per_gpu=1, + train=dict(pipeline=train_pipeline), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline), +) + +optimizer = dict(type="SGD", lr=0.01, momentum=0.9, weight_decay=0.0001) +lr_config = dict(step=[120000, 160000]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000) +checkpoint_config = dict(by_epoch=False, interval=4000, max_keep_ckpts=10) +evaluation = dict(interval=4000) + +fp16 = dict(loss_scale="dynamic") + +log_config = dict( + interval=50, + hooks=[ + dict(type="TextLoggerHook"), + dict( + type="WandbLoggerHook", + init_kwargs=dict( + project="pre_release", + name="${cfg_name}", + config=dict( + work_dirs="${work_dir}", + total_step="${runner.max_iters}", + ), + ), + by_epoch=False, + ), + ], +) diff --git a/configs/baseline/faster_rcnn_r101_caffe_fpn_coco_full_720k.py b/configs/baseline/faster_rcnn_r101_caffe_fpn_coco_full_720k.py new file mode 100644 index 0000000..e7be399 --- /dev/null +++ b/configs/baseline/faster_rcnn_r101_caffe_fpn_coco_full_720k.py @@ -0,0 +1,20 @@ +_base_ = "base.py" +model = dict( + backbone=dict( + depth=101, + init_cfg=dict(checkpoint="open-mmlab://detectron2/resnet101_caffe"), + ) +) + +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + ann_file="data/coco/annotations/instances_train2017.json", + img_prefix="data/coco/train2017/", + ), +) + +optimizer = dict(lr=0.02) +lr_config = dict(step=[120000 * 4, 160000 * 4]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000 * 4) diff --git a/configs/baseline/faster_rcnn_r50_caffe_fpn_coco_full_720k.py b/configs/baseline/faster_rcnn_r50_caffe_fpn_coco_full_720k.py new file mode 100644 index 0000000..1f20148 --- /dev/null +++ b/configs/baseline/faster_rcnn_r50_caffe_fpn_coco_full_720k.py @@ -0,0 +1,14 @@ +_base_ = "base.py" + +data = dict( + samples_per_gpu=2, + workers_per_gpu=2, + train=dict( + ann_file="data/coco/annotations/instances_train2017.json", + img_prefix="data/coco/train2017/", + ), +) + +optimizer = dict(lr=0.02) +lr_config = dict(step=[120000 * 4, 160000 * 4]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000 * 4) diff --git a/configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py b/configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py new file mode 100644 index 0000000..333719b --- /dev/null +++ b/configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py @@ -0,0 +1,32 @@ +_base_ = "base.py" +fold = 1 +percent = 1 +data = dict( + samples_per_gpu=1, + workers_per_gpu=1, + train=dict( + ann_file="data/coco/annotations/semi_supervised/instances_train2017.${fold}@${percent}.json", + img_prefix="data/coco/train2017/", + ), +) +work_dir = "work_dirs/${cfg_name}/${percent}/${fold}" +log_config = dict( + interval=50, + hooks=[ + dict(type="TextLoggerHook"), + dict( + type="WandbLoggerHook", + init_kwargs=dict( + project="pre_release", + name="${cfg_name}", + config=dict( + fold="${fold}", + percent="${percent}", + work_dirs="${work_dir}", + total_step="${runner.max_iters}", + ), + ), + by_epoch=False, + ), + ], +) diff --git a/configs/soft_teacher/base.py b/configs/soft_teacher/base.py new file mode 100644 index 0000000..b90c452 --- /dev/null +++ b/configs/soft_teacher/base.py @@ -0,0 +1,287 @@ +mmdet_base = "../../thirdparty/mmdetection/configs/_base_" +_base_ = [ + f"{mmdet_base}/models/faster_rcnn_r50_fpn.py", + f"{mmdet_base}/datasets/coco_detection.py", + f"{mmdet_base}/schedules/schedule_1x.py", + f"{mmdet_base}/default_runtime.py", +] + +model = dict( + backbone=dict( + norm_cfg=dict(requires_grad=False), + norm_eval=True, + style="caffe", + init_cfg=dict( + type="Pretrained", checkpoint="open-mmlab://detectron2/resnet50_caffe" + ), + ) +) + +img_norm_cfg = dict(mean=[103.530, 116.280, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False) + +train_pipeline = [ + dict(type="LoadImageFromFile"), + dict(type="LoadAnnotations", with_bbox=True), + dict( + type="Sequential", + transforms=[ + dict( + type="RandResize", + img_scale=[(1333, 400), (1333, 1200)], + multiscale_mode="range", + keep_ratio=True, + ), + dict(type="RandFlip", flip_ratio=0.5), + dict( + type="OneOf", + transforms=[ + dict(type=k) + for k in [ + "Identity", + "AutoContrast", + "RandEqualize", + "RandSolarize", + "RandColor", + "RandContrast", + "RandBrightness", + "RandSharpness", + "RandPosterize", + ] + ], + ), + ], + record=True, + ), + dict(type="Pad", size_divisor=32), + dict(type="Normalize", **img_norm_cfg), + dict(type="ExtraAttrs", tag="sup"), + dict(type="DefaultFormatBundle"), + dict( + type="Collect", + keys=["img", "gt_bboxes", "gt_labels"], + meta_keys=( + "filename", + "ori_shape", + "img_shape", + "img_norm_cfg", + "pad_shape", + "scale_factor", + "tag", + ), + ), +] + +strong_pipeline = [ + dict( + type="Sequential", + transforms=[ + dict( + type="RandResize", + img_scale=[(1333, 400), (1333, 1200)], + multiscale_mode="range", + keep_ratio=True, + ), + dict(type="RandFlip", flip_ratio=0.5), + dict( + type="ShuffledSequential", + transforms=[ + dict( + type="OneOf", + transforms=[ + dict(type=k) + for k in [ + "Identity", + "AutoContrast", + "RandEqualize", + "RandSolarize", + "RandColor", + "RandContrast", + "RandBrightness", + "RandSharpness", + "RandPosterize", + ] + ], + ), + dict( + type="OneOf", + transforms=[ + dict(type="RandTranslate", x=(-0.1, 0.1)), + dict(type="RandTranslate", y=(-0.1, 0.1)), + dict(type="RandRotate", angle=(-30, 30)), + [ + dict(type="RandShear", x=(-30, 30)), + dict(type="RandShear", y=(-30, 30)), + ], + ], + ), + ], + ), + dict( + type="RandErase", + n_iterations=(1, 5), + size=[0, 0.2], + squared=True, + ), + ], + record=True, + ), + dict(type="Pad", size_divisor=32), + dict(type="Normalize", **img_norm_cfg), + dict(type="ExtraAttrs", tag="unsup_student"), + dict(type="DefaultFormatBundle"), + dict( + type="Collect", + keys=["img", "gt_bboxes", "gt_labels"], + meta_keys=( + "filename", + "ori_shape", + "img_shape", + "img_norm_cfg", + "pad_shape", + "scale_factor", + "tag", + "transform_matrix", + ), + ), +] +weak_pipeline = [ + dict( + type="Sequential", + transforms=[ + dict( + type="RandResize", + img_scale=[(1333, 400), (1333, 1200)], + multiscale_mode="range", + keep_ratio=True, + ), + dict(type="RandFlip", flip_ratio=0.5), + ], + record=True, + ), + dict(type="Pad", size_divisor=32), + dict(type="Normalize", **img_norm_cfg), + dict(type="ExtraAttrs", tag="unsup_teacher"), + dict(type="DefaultFormatBundle"), + dict( + type="Collect", + keys=["img", "gt_bboxes", "gt_labels"], + meta_keys=( + "filename", + "ori_shape", + "img_shape", + "img_norm_cfg", + "pad_shape", + "scale_factor", + "tag", + "transform_matrix", + ), + ), +] +unsup_pipeline = [ + dict(type="LoadImageFromFile"), + # dict(type="LoadAnnotations", with_bbox=True), + # generate fake labels for data format compability + dict(type="PseudoSamples", with_bbox=True), + dict( + type="MultiBranch", unsup_teacher=strong_pipeline, unsup_student=weak_pipeline + ), +] + +test_pipeline = [ + dict(type="LoadImageFromFile"), + dict( + type="MultiScaleFlipAug", + img_scale=(1333, 800), + flip=False, + transforms=[ + dict(type="Resize", keep_ratio=True), + dict(type="RandomFlip"), + dict(type="Normalize", **img_norm_cfg), + dict(type="Pad", size_divisor=32), + dict(type="ImageToTensor", keys=["img"]), + dict(type="Collect", keys=["img"]), + ], + ), +] +data = dict( + samples_per_gpu=None, + workers_per_gpu=None, + train=dict( + _delete_=True, + type="SemiDataset", + sup=dict( + type="CocoDataset", + ann_file=None, + img_prefix=None, + pipeline=train_pipeline, + ), + unsup=dict( + type="CocoDataset", + ann_file=None, + img_prefix=None, + pipeline=unsup_pipeline, + filter_empty_gt=False, + ), + ), + val=dict(pipeline=test_pipeline), + test=dict(pipeline=test_pipeline), + sampler=dict( + train=dict( + type="SemiBalanceSampler", + sample_ratio=[1, 4], + by_prob=True, + # at_least_one=True, + epoch_length=7330, + ) + ), +) + +semi_wrapper = dict( + type="SoftTeacher", + model="${model}", + train_cfg=dict( + use_teacher_proposal=False, + pseudo_label_initial_score_thr=0.5, + rpn_pseudo_threshold=0.9, + cls_pseudo_threshold=0.9, + reg_pseudo_threshold=0.01, + jitter_times=10, + jitter_scale=0.06, + min_pseduo_box_size=0, + unsup_weight=4.0, + ), + test_cfg=dict(inference_on="student"), +) + +custom_hooks = [ + dict(type="NumClassCheckHook"), + dict(type="WeightSummary"), + dict(type="MeanTeacher", momentum=0.999, interval=1, warm_up=0), + dict(type="Weighter", steps=[-5000], vals=[4, 0], name="unsup_weight"), +] +evaluation = dict(type="SubModulesDistEvalHook", interval=4000) +optimizer = dict(type="SGD", lr=0.01, momentum=0.9, weight_decay=0.0001) +lr_config = dict(step=[120000, 160000]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000) +checkpoint_config = dict(by_epoch=False, interval=4000, max_keep_ckpts=20) + +fp16 = dict(loss_scale="dynamic") + +log_config = dict( + interval=50, + hooks=[ + dict(type="TextLoggerHook"), + dict( + type="WandbLoggerHook", + init_kwargs=dict( + project="pre_release", + name="${cfg_name}", + config=dict( + work_dirs="${work_dir}", + total_step="${runner.max_iters}", + ), + ), + by_epoch=False, + ), + ], +) diff --git a/configs/soft_teacher/soft_teacher_faster_rcnn_r101_caffe_fpn_coco_full_1080k.py b/configs/soft_teacher/soft_teacher_faster_rcnn_r101_caffe_fpn_coco_full_1080k.py new file mode 100644 index 0000000..373b5d7 --- /dev/null +++ b/configs/soft_teacher/soft_teacher_faster_rcnn_r101_caffe_fpn_coco_full_1080k.py @@ -0,0 +1,36 @@ +_base_ = "base.py" +model = dict( + backbone=dict( + depth=101, + init_cfg=dict(checkpoint="open-mmlab://detectron2/resnet101_caffe"), + ) +) + +data = dict( + samples_per_gpu=8, + workers_per_gpu=8, + train=dict( + sup=dict( + ann_file="data/coco/annotations/instances_train2017.json", + img_prefix="data/coco/train2017/", + ), + unsup=dict( + ann_file="data/coco/annotations/instances_unlabeled2017.json", + img_prefix="data/coco/unlabeled2017/", + ), + ), + sampler=dict( + train=dict( + sample_ratio=[1, 1], + ) + ), +) + +semi_wrapper = dict( + train_cfg=dict( + unsup_weight=2.0, + ) +) + +lr_config = dict(step=[120000 * 6, 160000 * 6]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000 * 6) diff --git a/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py b/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py new file mode 100644 index 0000000..2f7ead2 --- /dev/null +++ b/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py @@ -0,0 +1,48 @@ +_base_ = "base.py" + +data = dict( + samples_per_gpu=5, + workers_per_gpu=5, + train=dict( + sup=dict( + type="CocoDataset", + ann_file="data/coco/annotations/semi_supervised/instances_train2017.${fold}@${percent}.json", + img_prefix="data/coco/train2017/", + ), + unsup=dict( + type="CocoDataset", + ann_file="data/coco/annotations/semi_supervised/instances_train2017.${fold}@${percent}-unlabeled.json", + img_prefix="data/coco/train2017/", + ), + ), + sampler=dict( + train=dict( + sample_ratio=[1, 4], + ) + ), +) + +fold = 1 +percent = 1 + +work_dir = "work_dirs/${cfg_name}/${percent}/${fold}" +log_config = dict( + interval=50, + hooks=[ + dict(type="TextLoggerHook"), + dict( + type="WandbLoggerHook", + init_kwargs=dict( + project="pre_release", + name="${cfg_name}", + config=dict( + fold="${fold}", + percent="${percent}", + work_dirs="${work_dir}", + total_step="${runner.max_iters}", + ), + ), + by_epoch=False, + ), + ], +) diff --git a/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_1440k.py b/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_1440k.py new file mode 100644 index 0000000..056459d --- /dev/null +++ b/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_1440k.py @@ -0,0 +1,30 @@ +_base_ = "base.py" + +data = dict( + samples_per_gpu=8, + workers_per_gpu=8, + train=dict( + sup=dict( + ann_file="data/coco/annotations/instances_train2017.json", + img_prefix="data/coco/train2017/", + ), + unsup=dict( + ann_file="data/coco/annotations/instances_unlabeled2017.json", + img_prefix="data/coco/unlabeled2017/", + ), + ), + sampler=dict( + train=dict( + sample_ratio=[1, 1], + ) + ), +) + +semi_wrapper = dict( + train_cfg=dict( + unsup_weight=2.0, + ) +) + +lr_config = dict(step=[120000 * 8, 160000 * 8]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000 * 8) diff --git a/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py b/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py new file mode 100644 index 0000000..eb959a1 --- /dev/null +++ b/configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_full_720k.py @@ -0,0 +1,36 @@ +_base_="base.py" + +data = dict( + samples_per_gpu=8, + workers_per_gpu=8, + train=dict( + + sup=dict( + + ann_file="data/coco/annotations/instances_train2017.json", + img_prefix="data/coco/train2017/", + + ), + unsup=dict( + + ann_file="data/coco/annotations/instances_unlabeled2017.json", + img_prefix="data/coco/unlabeled2017/", + + ), + ), + sampler=dict( + train=dict( + sample_ratio=[1, 1], + ) + ), +) + +semi_wrapper = dict( + train_cfg=dict( + unsup_weight=2.0, + ) +) + +lr_config = dict(step=[120000 * 4, 160000 * 4]) +runner = dict(_delete_=True, type="IterBasedRunner", max_iters=180000 * 4) + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f3d6626 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +torch +torchvision +mmcv-full +wandb +prettytable diff --git a/resources/pipeline.png b/resources/pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..74f146683a3de28cf436eefb79a38097ec2c3bef GIT binary patch literal 505743 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›UulaoUeEpG`16p3xo)YavnEcq47)!nnRsi|PB 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�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 z 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]RyceV; zCOW84oA;`arMCcNz5V4CGHp!?nQKowIPU#%_seUL2M&Ulh064n1z3FWU0TL~R=Of3(mIr(G)U z%|jxl3PqwhD{TA}--j`%XQUJKVJrW!&LEVwR41H1BMO46u#0 z@?+x5-F3BI=pL)Sl-b)$s7{iBo>mpCRh?LR!IhIdYH>LK*vSiuy=l6NtC8T^ZB(|+ zk5F2$*l(1AHYOxsFwb8`Uof1ET?mXpg1*k*4x8WpVzLUpe_Ho=p9#>?F0boq>iBmL z=WpVE*WX07F=Pi{EhAT7s<}(V@x(r&QSj;F;eVh~$0)S-7mgBbsYn=P_9f9a4QtXc z7@+iLv6e7XOsI5G(Z)&3^a5y?wuYX@@(@Qdw7ECQu-xNRS5%eW7nj`I=B z^ldQ=s+9s0mO3up`pXgjqLRrwJJ;`4 zWzta6zlrfkJG)mO$AM3h)ZRzqv5u}YtC467iEB#W8EV5b-knOARo*cxRf+J!5#wm9 zs?Tm3(}Y1B{?*Tyu7@p)8!hobpKuxBrn3em-HFs5P^J@kilz&&2e|IVHzkM@cmepA zZloCo%Hi8R260o`-~Gn3A|7ZGWGeUtj=|vhHAAat;2O-P1$6|y zVc&Lub!+&g2QcWG9T8+|eFB0lw?@s{i$2w_{_c%Cyqk?JiWPqlMDkV`oq&r856h^e z9YysM&z>nfVU zH^{dnHn)WUFOpEK?6rtM4n@{N5L+WI*4i@!+Tw5~hPAqVyFEJ3b zIRn`&y3!SSCoNUhl(Gu#W72~Rds*_Yt>1(-m#V-f$4vub zlPw*snZ4h@(=)H%S-Ysn?MUSSwz*{EVzjQveXz1M&CRTHK;-AFhh^jmOQ|YvrzUfd z7@D4iDSP(CI=%0VXC0WKCZZyoo~!hOgVdtGR-Z3-f!2*NAhTwHT(R-5N4f1J-!FZ` z&Btyb{qE}w`1v(X`LFXm$&d2@R4z8xdVFlA8l}omb|?DU93DcSKo_T=tTAiFjDFZ( zAJ&cI`}tKeJ-Y+=sUthh)GH<9{+|jRKZb4+vDlP`O>7o13>mPiJYP=IT0nug3Pc`7s`2Iw1pHxuF!`Cs%88^83zpu0;Xnxum zpgubPY~>9AzFEqQ?Q3HpvD8N4Q*cRIAoQKfLAS(E5dX;)wkB5C6 znVUnex$;X{m}i56m}|?umiOboJRPgxUC|6hny04i+YRtL;CFFu=o47(VffwbDYKD3Cnm3Jt{x^xNGG~Gk3p&=J1G^ zoj}s-Fel%Atrl1l6QEg%=M$_Z?UmxZkIFN+1DGsK&p0}*$tMif7zi&|5xK75H!+H4 zc|F?_UcpmExVXdyB{J}(Sbt88P2PEt6td)Tbm@=VSUnYc`3WQ@3tdV`(8?xQ7C&Xs zgf+zp1|4i_6RgDWqDt@iOaf{ViLi?u3G#ou#UaptoRox{G}4WQgUvcMpjn;N1{yRS1nY+6P9QYFZuXsAAUDIuUFH!x@}WR@m2ee-4Q zg=tS;u`YXE%=4@03gx1=Z{;ZdhK;XgXMXF5*k@)0Bm=$3)|D)uAbJA#?ts44qj>M; zE11wbdJcMP>?#q|3%BR7q`Z_WYKY$`2p+j+x&9@C!Y~wZDW5L4#L8r%gt)cf*G^wE%b2Vg1Kr1!GCPC>Jm$ zxczz;gwhKCkU(+(kS_QzC5Zc(q&_^^lUpo})z!llSz01;PYkl;-nrao-|!buH#93r zWp2^yHy66rkN#Bn67uNA+F>BL;Y_S+T1D>bVca)9l%)K%2rvH~iOv^QlMog5z^wGd zTph0g6U35!K*dbcQ8W98gBrx2goL0>5T!>^8-0e>5@Zu69Mz;UvZDR+R+dM2>Z={w zmTTLU3hJOzS*Nq4+tHicw8trL-NO83)Bbtdj`#a8zo7~Dpph4MgC;sZ;uS&T^7?rq6jc19tE=xp$j* zivsw0hJ;n858sjCjq!HFm1pI-aAD>ybQ~PjNlvUvZAIA-;nlx&+pxJVXO7-*A55Y? zNMhLjsqJ@&CEJ!U-LVP^n{a;cDYHRZuaR1wU}fYoEa!ddcNCeeJ{)hsFieGpIiFy} zVLRa@kcB8K0KU(2X03N^HWF1bLjUOdqqj#aX7Y+Q`3z)%w3DN~s$DRvf{OsBm^rNw$*7d7JEJim&;;Xf)$BDZx&7!WfK|F+E= z=hs*&*o_D6n^x2ILA)oUSmlbWmt2oB3jc?#kB{u73QLf^&NA}L3zfcXMkZd&MW$4Lrx-jI z(PLlYl%)rFv_S2(ijPw2h6!LJ>)#F1;;%Xut}R%A?(a`uTAa*t8@bqL*YO`aTfZ3) z528GLQ660%H-D9}LwQ3yIBe#XNQ=!WDl4!>-zmD=kzeO}#>lQVUMsPdgF*$=6+;&s zCwifSiYXk|G56y?xBGyDQn6%&?tO&9y;waM!XR=Rl?;Gtnh4M_IIEiI(W)zr zA{pQBy^zR{(sYyF*U5s4$n-#@-ft>j+3JjUzI}6KWEO%47UxZ71RA-4Qlcg?oOl}? zF?`xu@4$4xedpvVg~2rTbuwk%DaZF6BPQ7ueQ|*d17(tz?C%=mL_~~tiF5T%^?Z4M z#dil*79-nBjI!kr|ASjNO3|>~ZLa88YNMi4+sllox?UnAH8Dvqh4K>|6+Si$%8e&s zYGHcd_t{nWVE5TRbv^TeD&8zlgKUI-7&))CF}=RhO7lWz0J)D>>T=XY;Djv4bo4Fs<(M=j-i+;ac*TxUu}K#kUlKKLdn1P0X5$U}F`Nu;c6 z^4Ymm3X@JESS5Wq=lbLF@Tdm=Z(?j1o8ayo@PpW?-aGa@gQX;A_P}_yb$S$iXQ9_pEJr&y#5u%;DbfYMN> zS|z}+8n>ZScEEJ4$_&TA>y~fvWlB8ORNf?>fEH1_Up8(-0uxoD=q8gxYO~QwMY9zt z<+m`K>>n&yiZ;@h<$5{;ptwc>;S!J83Wuhzq8}akKx95(mIUZ^lA)RxD%7WZy$9cx zivl|q{#Cw~ZRNSi`VS7aY~2PpHb_W925BaGq#6e`n3#0!rA0K@Q!?$5mzDGeMs6gy z>}i^^8DwcnmUtNm-mk-;o_qCLnJYUG{QSB=g#n*ITPtPjinlp4M*BpGy{$D9spN$x zWmNo7a@c~@$Wo?4?Dn1;%6McLg%6QstAW++F3S)5dEl54``?Up$y?3wmT2P>79ojF zgdy?w{?E6i>|C4U_4;Z-fjh-#UOoD-f9^(k-9qD%WdTxF*LU2Bfr^TGOx(u|p_5~M z;M#wtH#v^YOLiQVu9cB|ogc%Lrjz2X(VKbU-M1G0(Y^$jfsDwYKOb!+#ZQ0by$s=d z=WWW9{l%q%&rJSvbqXcZ%bt6)tUYybH5tEb)l5^0xyIUdsgY6k*pY3iX0V0Hbe94B%rlp*fC?oQRmQ=!DSS$)u#H|v8^Xe z%WtdqG)rNOv$zb1V|1tl`%IDkks}5}iC07mf9!J3dwq8zOmzD&CTrn}t@us;71}QIkMq0RewD zKw|dXRX3SPz1}w$R2~earV18Rvt>?!wmy`)d7sH@VtC(J2$ENwMMJ7)zc>jd!g`Wj zLV|+-UTuqtP^#Kdugt69u!*Ljz_(}B8MQc)2M^aTP?V=k{p<4dwkeJ@1`Wrre~1O6 z8DyCEjxe#r5sMO>bRvtciW`eHNT!eHKb)jm^UfXI&S`*`sxI<1^GcfX&F4UFZ;m!CJL>eCqA@y_*HePHi`u*1V5mT7Eu}Penohv3Cn%X6Jr!nitAq$sB|owF}Uw1JPHljsh;7 z7bbu*5(Ah7odhY0@56DwCrf|sVupJdPi7vf^I{9719=Ue4$=n!-dK!+RJ~GS(t;Q$ zU#^0C4bV3&vfC>h`dVVENMqOm&CEmk>=})J^)^0f3>vlS&Ha4EB0ZF4Hf3MPr&tCB zAZX8Vxt*t$j&zyC?|+N%ZF|;T;XE6~FI}y^$_}!v`_ahvV_4y~v!>AtmCvHi{V(u3 zcC-l$5JyGQp8Zu_ss|rg=IbJi;bC>m?Xr_r~9KRJb0#)m{JgByRYr zpl!49N!j}B4$F)Mi-6Gl$n%Gjm(^Ktm^1FV(67uhz*T%*$TsW&5iku{Ip$^lUkSmp z552M;;tVOv7|H1L*Y*P}*z$wL4^m0$5lJQWee)?aZ$H7bdg;U6(#|;z;_8Nh*$LTf zh)?=qN6Hk5rQ|^;Hj~57NtULIG!tNH0ZC|1Iq7I);L^HD* zHloWj7TTBRt_70OaQW%fFfA|v+W0<4dCC$Y?@5n$%ZN?d>C1ssaZXpM9yymDHyV{h zRC$+gVi`KcnG^YUbj-YL{T{O?c>U~YVdHZ@FjF*)mhllC=h6Gh>%-ug7&e6FR~e6* zP4-jeFC{xkrFC7i)}bhsIBVU;V(h`b0D)h1ABUD(ft?hdpjOAKt&;3;efCzJee_W} z!Pa8rH4+Za1+6buF)JjgB7dlS%Gx|=2J7yk##Yw?FX$=o@M!RI>m?}fVpZ*|zz!)8 zRW<{r*!`v+kZ?rp{sW;8dK%3L#mG8X$iHEEdaDn3U)U z*#h$ak-C#@9CE>=Ow&hGFz#~0D1e+VULeAXBs1_vKc4>r80sDxAzoRx`4nv7`}4dH zUNbi`x#PfV$8T5HD?Y@!5qHrwRqc>avE-`~XzCOES=|RU;<#h(;^#c)zq7odwb~Ki zm#n5n3J|s#wm{FC+7Zs51cbbx3MlC0GBNRdnF-FLZ*QK>a>;qpL z4wuD`;>~0qt5!(wrlmC;A!`y_J?|TLij`SUCNUXJx+5mt zgO&H+p)28A>65x`ZcgXdyDf6%)IU$|dWVfSZ;=F!EL!TrM(IzJ4@?(aEz=b9nby5K z!h>~$H2oMG*jj%+a27+xM3zqR>dPvPkWAF?W z<;+5PS+g{}vA%O>&KmghdKxIEn;2|H1kDgQ;c<`|q<r3-?nL7iizVGSpk4 z!sSVtQC!e}2`-`%O&TOsC{&k zWlx?a9x!AY@^RuRs4YnbZ~4i(3aVqpuJZSzSnXK+s#CE6@5syizL%O%F}U|;w);&8 zJ(at*n91EE(!|OvQ*6KWG-{e-+GOpC70QozV+uYrxdhy}TUT={d}gk~A^e=b{n2Yb zG-<*}E5osjtduk|lI4tPN=-)p_h9s)Jy zn0LJ8aUk1@KFN%VIm56BhSFi~k>*|J83T=7>q+e@e8B?_mp7V@eck}ytutap0XM0_ zFEHp9K5;)pI*QkU;1B-RSvQoIs11t9EstLb;Z3os_QMpoId}AcO#o?e-E|U`DKXFr zaLAq^S;F3Q&6}M8vR(&^G#f&eHG2@r#Ff;g^RKsa)DV11p zI~Q9qUh(?_muhPxIPv?eEnjU#l~<)0>tGHoS&!a$exde7PDh;Sj3omQVOUB!Kf6*O zJaldnoc$fq8prGBn56wPF4w{Eg2h!M?e|31lyR1g^pdGNf5k6u zo;W{JAB}4xt|Q{ijYrFg{89jczYhuiwLk-#?5=6Wl1liGx=F2mxUyu8A4%eHi*{EL zKJ2e18??GrIdP-01&%t104fq^zfYn+@)8Ze=s{&v!dCEEJ*pPeltolRtXJS(+|BRG z6U>N<`y>R76#+jEK|0W<#T=_p2={$Pl=@Mu`?3ZYI>(tC$ef1apYGUF?OvS2>`hDt zwMaAboJZeql^Fu@;NP12)6;zL^?GKbbs9t9Ppao>vRi_NLYhjJz?IU`BPYoSuj}<=1d#Dl!YMqqy|Cb<>^lz$jwm{hi zEjTVQH?D5XZERSHlg`XE5!c6qQ{^Xk)YIg9M4dmnaJw6F;WUJ(P;Zeo|t-dwvOhTUejS6LV z3q-fl-{CKx@rFVV5#`!Jp8up}kmvl3OtaXEG*sayH5Q3PObSM7438lc=^n_wQEG!{ zjcRkNS|pO0v>Z!&tQ$$$j0xmzrwcrjv*X`|236Y<6*!xmvy)l2IZ(uv}?!T267yyu#$FxLy`Rv<}NIYW!Pi zrpXcNk+QOR5;CrwDwuwaGDQ0$!S>k;4(s4&K{ICtOdY74smWrS7ph(Yre?x?ki180 zIY?(chPwAF%GS8uL2^cG%&%>41`NBx)k!+O4bVa$ncglD<~4TJJ@agR>m$-hJQ_D0 zeL0*s#-7tLEwqTaA0eyPHzj@U`+EHJJQnTE#wGZ#hIKRrq@9GcAPz2cG7MFC^Aq{` zMESdJA;* ze*Jv@@felcX&tWPvfQUdAwI*rcx#IC=Ui0&?_}+TzOVq0u!xzROescN38Ky!`OMH> zDyKp%8mM$%RNVL5sl0>Y%JzDLTa+_RXGS86sp6+MyDgb*D&w$q{C`nH^i=b(N zN97t??>uC3Xl`K1SvDMQw1PQH39@@rP7y}Vh45r6a(fgxnEwNGd;PzSo_C$ubO%5A z##-T!inZi{l??$Gck=xpgIJ=jl~ZSqSBrDNKc_K&=J9)QI7)T^P(f2-NBg<)Rp3! z_lDq%e!h@Z#yKTM-BL4Y1fk|aGkxkl@(NlXLz+a8wbyCw{Wy({Du*x!|6_W7C}OfA zyeSU97xgX|li_5J1>F{_f;!kHMUnMEYPdeaKDMF&EfGvgZcF}E#!4uoseLm5E31P0 z8*LhUHKR%f=>U2+ERT6dwgv;rvaHr9@a&8ys}XUsW5J@Sip^nD$w}j~;&4KPNl;#T z6K0gJ1~v(jeeC>)ves=Q>o5#l@>Z<})wkL(I{Q zf1;`L7=t(;fr48Pq25reNrkapR6m4pad84?$}E1c>DSf-eG3cOlJDQcI^&vx01+K* z=ZVg|H#bs$M)rAmDhF%o>a4A;4Gq&kd1i)bL(f0mjFO3n?!Cwxkqg{)KUnW=;%I8( z0J^I3=zabiDgQkvW2dAiE^U9QX0&~8d+zUZ-}~R~+ZWK)wuio!o0c4oCjRIhVoQT% z<5bW~1ErR8FS}>K`~1d*Invn$8Ag+DSC=|E*f^KezuECWD}p@G(p9Q@^UM@3`ulJl zT+XJI+TU7Nx4YFebhrrw9aQu4)zp^pnh{Vzt=ivvYug$d8@m|WYMafioacM)?QI)p z*jFBqIaR2h&72ei0c%wSPL(dw@D4ugE}~fLGdCr_Ey)Z2EyVGO=tSV%=zsuU%msn` z_X!LpNiYWnQr0$D{nc8}_t62 z*>$N}JZx&OBgMX6kHjb!ocosbo)^hb?<0Byt=7XlbV!H+&{gO3CA_rs< z0T2FMeiwWfjU9iDRPhdI#qFxa{#^S;ULFgvgn@7xc6PF8_P0z|gnIAIx%jIo>`C7I z6z@=^J>Go0E6)z550nB+AWpx=5x;@^ji6Cd^9q59UH$jVex+l8>mFrQ&Hbrlq3=(1?sai9p+|!oI>^W?4w17wZ#K1Py1H0dGOG8HPNG!# z5-oLi`|z2sUC`^3m9%{X*_!dmO1p|LT1!NZ$k(sL*&nH=yXZrRg7X#V{}htpsVEwR zn9QyBB48rurd{08rQj7%c0B+g^)BLkXUYU(P20cJ50H^}scyt-tS4pLPFS6sFZuApO(&VFEvR>EaZ4J#Nlf`1f}ls*tKh zZkMdREcjO2hQCNa*6V$^pDMSF`>ISB)wVq2N|NZ@GQBx%d>6N)^70D;(m>ov< z)X4-?Pvt_qO0?)KqjdG1W>gMU>72P*G+l&uU(OgPc96U)4#Ny~T53`JUV!#sJrONL zmOPbR2(V3K-`pu?k?&4C6K8FIB#UuInT%B7)IXF`(A>yk7-Qs`xnEH|`5^X6)t~)v zzTD-U7OENSca?vzTyWoy9fT(=Srp;{tD+Z{3_kK0Ye&O5;GXdWIiQuc<_`915=tG| zmjVQuzy-Z`)=XB$jHua1v(!bdf_Kod1!4b>nU)yt#f)2jDhQ^BqY((bT}+4C1KCU9 zY)r9JL18-j#7XBZu+|3qTXf({(4=>EDW2ju_zSA>cPADLFn`5WY#a)*34oXzT^si zWky8M-5+&AeUSz3gYh@_Qez6UYlA>E)^Ot|RmC4|WA2TCT1WJNYoX}9 z5MSU2E)FmW{?Ba$Gw0~e{{hNCHNPAi+WG6Ti9P>^80{WA*4EUsdGr0p)~!2s|GLcp zt}P#$=`wbh`fJ6}T4uxBy%lH3@A!!E6+Zw@ts#R4Es<&`oAa)ID8}#t(6#uN&}`Q zm_WRV6kKS)w4Bp*ZX5M1HR3h8LtillODcNz42T{OiHIMof9%KZDGwQcz@XGd{UaA~ zC1$onxqKyd>)?fh7a+JEy>PH43)E3!lVqKkCNbl8VlVT4OqvO5!9bbq)!uV+OWefZ z+?E}n9YadR#c)hwsj#X7LJ3&`s*E?<3v6pN+y?F`5z=xZfF#0KM z$uO4?7x1eB#8oejtNzRxfE(aTNNIf^1;uGeNRUf}7cgz^j>7B`0WKdp`jXgMV1(_diKU?^_{IJ8>_4qCJ$?~G?U1@;9M{v-4xpDZ)-r$h?xOh%Ti_32yF_s*oI2&8t_ViHg`|48QSs?+8c|e?zX8I%fqfEs zME_`$SfTg4wpmIiklX6Ea-41U56H+kWt2)dzQ1i|JVCX#)P=&nQL~Dk;|j3rPk;K)P+XUbw+wd~)#Z3DfvpH{C83wYTQC3EIIh?KU>uhN zU11Sp+OX?J-Q+iAyVr!{GGVw}PfjjyywJVz1i!eUe>B#$za^Zs`Qv zX-LoaM_f8h{_SiNBXL--DCpVYfR|=W+~dVRYoeWv`v?7*P9OGb6(h`Lky0qGnu9F| z57x8*xGt=~R7ngJXbU7Gx~g6%C{u?5OPPgGNZ^VrU{Xo(`ph>A=Q5MWtRm8|KVTpb znvh2p_F7Eu3E|X>OR9$`>+I{>+m~5VNCgOFXJr*;9nNAx@o+6>=p`728OLQ-T%e~; zqq_=M6jsa?I0A6V@Cu;BUmq2KalmLy^6kjZesjf&H?y;WTUpsMGV_p2JQwC?!dOOh zl~7YAy$Tm1%fk>V-8Q$sucENI_f5%fDwXpO%x zicWHW)MNVT^$B0{_w2*TK1AIyHTU|Luits6`?E8U#&Oq#9oJx!Aum+Qp#@tGVLQLM zhfyzc5BGnDE`H{a3>XeE&Kq!@>7i0^@P)vr>_84;F{QR8O(a-5cf9o&t+ySYR_7vnF2x8gz*{vj1_d6nlCj6X7s^yRaR`%py=LrFE6km*L$kPB{~ z-1>~G-9?(twFamI)+JcB0KD8;JnLW=2SLS~wvRTNSqwI=JRs~(mqWonMr;J{>{M*) z9yM;TFUS=Z_+0$!9p-BlBQq}HEi8&kYhbtl1Q%)!isM>QSc2_2tdUvALmJ5*U2qB< zQvxm$K01833Z7pxsXi;nDNuX;GjtSGEMadzj4y`7CR z!zX~bm^zeYJPenn5sR_jhw8$13(TdI!Wx-x(KXxJrdYF#0+NDag)4xrAhw$M3s+=i z8N(%xOBP&a#Whsk@?#uVjJh1u0wADaFyGQmqQ4NFp}g^2;a*F{TciqdX`>Ky4kM*! z7qcm6Zv!Xp?tr?u)l>d1(je6rrI3K?aVjI3IiRE$2)gRw*B?f|J^VTw3vgTyPvF2l zmTa*vUx)g7oo+fqFByA5a7o_~JkHv*Y4L(hn>4~z0C54im}pqXgyOp8=wb{=1z~|) zMseLJJFa+EF-BY#b7<>pV3#l!!M2{^vO~rFhaJHk-I1{4ir|)yxc6W8e-Y!w3O1dR zz5;*w6}T2_6^*C1yBGTaeVADM;r;8@E#J(ozIijFED)CkGyw+YUNN9CoeKPel%OB9 znKm&^XPPUi!5r9<7K(%EE2p&L#J?zZ5ybKu)Teum?8d|8cUCV(WAh2~o;nj#=Rv`n zCbW$s^!%~Ll7aoP<0(d=Iv+x2F zi0k))m_S)`F^(6Vb@FDtz5C8d#L$AK`rV5^jK}3#kivA zqyo(V0+B#m6ap5Vt9O(dWEkrj&z?97P!n9D%OzOZpXqxQm_>sCF8)+OAFe87dJi6} zR|1%eo>FJw8K}4Vy(ci}>g()e(hxc;voL@yVJ#1|M0e4%&cef@3{Xq=>6d=AG-2_C#Ws-AM!^PD)t8}FswYfH{(+GAvyeYx-amx?K-02AIp^t&WaE%QtWC zZ92xp!@4ajYtlS~n~Kmlc>xJSiQ|f}SKzq9-r&_m8{w@8c|}OeVJzV-#e6W1>krP3 z>lM=czjg`^b)~K8|8hi;uHn*G;F@q;OaX8cbN@1Mg7fFYU`luRW-K~ zZ{}S1ui|WoDyXTmds)AScLzH`uAR0Hf1`U1&8fYGpQ?6q3a;1*aBtNoI`bI616 z`j|Y#F&Dr~D;(=jG=jJU)>t;#3DAP?A~Lrzvx3P}5oz^o!Fm#47E#cP0O6$~dqs4? zgLQJ=V6m1Oqp}QgiOy~#72PW(S-qHw;yUg^7zuV&bjsZ~kxUmp`O7||T7N0M%O~12TkgHmE`h*FN z;bMD{a!3JJ)e|1B1|V6O5F*v2Sw^*CuaM0CMHi1G4fV0qo(n)adrn)pHOzK6atNLwC03;Rt8Pwv4z_#C?QZE&r zl}0v;4`*I0jrT12T6$ZG&na@9lqb4k%`bK6mT=$6>P&ycUgPud@CbWMRnVFOu@xxw~D+onNE*FU=S-c?ie?H8Bxq7UX~=%%kM`0mvkX zlqpm7x!F4~rV`qLo)S4Fj*E1_6S${dmRuO0Yw8a8qba=1KFq|R!8C8lbfso21-M|j z4j;y?7Zm{DsKW>@kyb!2+*Q;IauKMA`9+p0Lc&o8sE?MlRT1q#M(Z<6OqR_NthF?s z*r|kyzMbdX*#N$nN~Eq%47y;pm_^*%36UoJwO4pckPoN@*3t?{K`o&#K{3rJR={pm zU=J^}6<97^H#zDmp35Reb`Ej@x>_#GpI=j0Y!i!cTmk2TxCWoM{sy(B0|g&*1E5Yk z)?z0#p=}7)``o)Ky+ zH}=$CA#5eV$0Diac%Bp?8~BY3_Nsk9nZC8!3{%P z)3*&^$JHNp{mG2!2O_!*T^YmW;Fd>Q5x?c>t-x`;{DPJ$Mr#!lkn0ubE|@Oci0g{p z#HdA#L*ice25-A`Q`h|pTnmm%<0Pmp!7jU(xu-u{zI-zln_D)w9@~7V!)6sb7CRLbX4NM)bTXK6Ni`GKc-SD9;Vm0F3y7JvPpEwKz6F6T zA9W83o)`AeutB>so_BD|KWFs7@mE$;EraWTVa{>!%r}ZfUb%$24wmNbF5R7r0XBCx$wdVH&e0P!s)FERUj+b$YYcb)B<5aYiXw-=BlL(HxD>AWqGF{mk(UHg$J2jEbd%kVoF}If^`Th zR;(!9y^vy9&!39%))3*iMmZBMS$At0iQNj?JG^CP^8#I%gGPAEMlbFj)7Ai&16vjs zz>2x8XUiwtsgY8-eeOi92yGDz#!Ps&I&sT~D9R%K2yOYGME*FgCSn=N^T|>`FY+PF z5-s8mEX5Kze*HyhGi22qqquvMzwke#&i@Q1NZU7}0<&X$2 zG;znFEr(jSY&~|eXLD0;Df9rb3DYD?X)WAlIt-XhQ}=a$qZBx*X67MqIWR zsCsfRj*C2_xD0tY!b`_#uIoB}`8RXb*TNqcH?_t}44oihw)}=${j=qpTMsq$Y&qF> zY)h;8hTzuMpo?MYVuoOw?!2>G`ayb7L5RiKhB|E`Qr%1$Y}}_br( z(Ap;7tn-x%owh(u=Dk6tKbVsYqkTsH3&CKQe4N?a zZyD&ajfO!Acj~S!2d@Zk5f%e$7FRFU4PNb-EseQ^x|~KpAxJ3*TNxf=04J3q9A(hz z#b`&&0=X{=i-qH`fB3x@UwrT3=uc6Jy%(_8laO4(T;(sz#HGCj#D zsfH_2pP@A?2ywYIiD*0XgECRVOvE8g`33DBB z!#J+XnN^Gs7m+`?DMq8S{6;X#5LUG7$8agrlJ5JRJfJ2yE<;!jZY98$PZa?s*tKez zg3T|cXBcm0oOJEZ{aUP5)Hun3F4n>jws2Q(-qOpU>g2JRO+cSj2G zUXXS$a|O_qUzKA77m5VnLXLv;o+vJ98x8tUMkpkuqn}=vhDr(jkI6)>nFf^Z)S>?< z?o}y!eN0VSj7{`MA80OYiSoz4#=>Z5b@EPuE%dgOI0NU%z{@Q&PZ?;t2LexolmP1& z;jYAEh4H+N>-{MIV{9@+BM$!6W5>lyeunQ`egw24y!GvG*I;J^c5n6`n-zy0eMeE#iU|Mg$r4SzZ&L0gym#lP_}xv(u(#=8>vS8{wE zWV#aXzDpj}eetiVLP3&NrBx(BQogWy6?1{Qq8JeqdH3BfOpFGLX=#UT)r)skLBEex z<@-aH&gTNak+&Z)6(}DO{`}X91QP(|0^m;d)Iva*g7XkjT*&m{3Wzb0axN$$_N(v$ zU`*>3LAel&|M1JN*bNPiOZMF?+Vwwv8;QjC24+gSXT)m>a0R>-p)DKVIJhO4<%1jE zamOl@mv=~8UVovmAcfs-G=K$3arjJDpj%x`nQqFrk|P9S95sWBNyM%dnR3y+JPN6)3L7Sk1z5 zp>DS3^-O>L{(($mX}tdHp(Y?^{FwT&mA!Bxt2%(+62D?l$$*Cm1(b2$ta zpqAVJSaw`suHbXt11qsx3Vx@E`)H?_W*7}~rBT;){4Ly6RbLA`F5SC_Y{>MCMo-HD zTbYtzZit&m(67*%1*CFA+-Fd!3-@@fN}Vk0&w5Y5R6WI=N&*Z|Ikqc->h zay<(`l8$2Q0z<|3q`6WDk_;miOhd9q@mVp`olXmyqKjpeZG+CR)pVrb7nZLU6a7_9 z53Q?2BFv=$vx3OEYC2Bm(eRpc1Ux$B@3x-nvZ)UPUOX?PT19bb!_y=sgc%i0Ey~(; z@L%UJ=eQC)i>4R9;$<{iqR4tWR@7lNb)a@_3EmW5J);GF@?_PA&-T~!T5EZ>IwG%D znf3qppIrEl|M*Y;Nq_&LKf-@lf{S~R)SXFL0V|lA8691sf=Gr4t0b z(cNhO?8I~Frsc1@yBSQfsalYWVa%NjE?1~dT^C;9do8H8`K|HKv#qA zFZN9@9xM7YQp>0>bB1axSM***jzWlV774`NpTVqfc*{}(A|vj!W+xbUE4%HCK&3)I!Gz zT7g)8r~XL+mkDlJAfi80Gn_B;2dLPNj*eDMJn-MUWpf*5T$7ee-P+#X)bzvF*3HLy z+S|!wb*Dn1ADY1iApM$L8yj(-KZo~j$@%5J`yt0Uvdy> zV@jw0&}lw$@ow-OC+k2Lb<>jmtBvadbkSv0pR~26DCiT*f;yVJrN68BmjaZ&m$tWH za~d-6;=v#%UPNqmF+4TETQ+KUL-+`C`R5IGU2e=jayhPuWbreLI6f^s$Wpt)tQ8k< zm);`#EqgDH(OTGTF^kANS|)Z_Sy+r8e)Q3ng)2rl;`-+kEMb(*SZ5#R^$=SESxheW zfxK7`fc=;`h}eCh^MdEMSbI=&aQ7TO7qr5WHH#ORU0lmTOC&+EExaYXrNvL^nv;m3 z!Ep(2$@WvAOK-72%DX$N_ZZEE z+MA#pSyGgDqh2<3u-qH{N74lJpVn&Ih*T7pK$kqEnt?c*j*jZj$|rn`=RYppmUWM9 z-8w06$&w{oPvRi)Gn6$97aAK)-PCkL9(aEV#}%O0K(NbDSAyj-hU>>K5A4n|)hxv=AMP()A*OoiTX<2B$4+C=2J0N18&4duirk&4C?&CdAGR8BQ|GVogH zLR6o?6XVCkU{d;#RFZ7OX%f z7ySk1Vi3y5P7>v6e!S!e=-Fo(e%l{21hUJ(ppE$gjn&0*X{(Jwc*?NX6NiTn&!CSF z4gTXB_G=ZL8CO7FExi1%#+Vw>Tv;u=^x0+*<&I%(N$qR+$;v+b_TgH++=pd*+3R_w zPv!_mT>l8t63D{dU*>E8FaNrr&b1tB5dbgv?ySI?zF78eAS|XBch}Uc=xo_NXN8em zg_z&R7F{b?>sWg5g14a4r5_?b=Y_WvqOC1+_8eDr^?O|e6oQ6s@~-tPaErU>OQX63 zt*YO{B#I?Eq?LbJF7?q}-q6+1+R8w%U}`~bQSR~Mxm7ha`OQGC_s~HADzpWV3jp+@ zVI<+C=woW38YsoT^vIL16MgSJ!7O4bg=&zhQD9fS$MTT0p&#IjL=f1M)VLkgr7kgn zhmOZRqI!4Of7*MvGapw0zykljBY#ZxQ3*>NuT~z5)YXfos8W zX`IB%d>Az8MfLY@Ikb7})+KpM+NPe|`qR(!5^HYy1$TD;rn{r#PB#R@%@%k><1;L> z1i9R3O|y3>lyZ&m7|wMZGSy?FL8%#-cB!K74u-MS)eVZGuFy(*Kxwi#wcy5(C___@ z(wU~3o@B_0{xWrFT2ZMcBS2<4)@e(nOM{Y%TJx2r?xdaF2MHiyLqqcuPvlqC<>nSG zY3o6W?{C%+T>8|!{`mDpjJoga=5Zj@xEOChU-CF$0510u;4B%-qH?8b4R1w|D>2pw zat-t)y0l?##}%2)J0}I-W@R8R|H~5QlFx&zS_=mb+ipfJj!a^+@2=P( zNiy`79z_Yfj(Ww4FDx2uaQr|9E=X00%HS83w^idg;!!?&o1$8k6f!1kTPyGdjw)P5 zwxUuVRVmIi9|5gK+!7Bb&omxFsTZXq-?|4GoReYhQ6mMo1^e&$Zyl-)LDL@OGd0<#)@!CQyWJC~O7xU-Ow-pQ8FtIyS zI4-^I%Hb_=mTb2|SS*gKp`okGPzjKWg@}vM4PT-bKv&S@e7M!h7gv|R2Uc-*=-gVZ zO-*@iQzuOZZx!sWswzERRa2I4kc-<}!!9>+bNWJRzz2g$r~(649&nki*e+D%5Y`^? z>ke>fYuHL4i+?`IImP4B(N~}?;Vc+A&Vn8?4M?Dq4Q#4A&~x3Kae4K2&H#Ex20_PpMo z{&YEDOIMaRgWxgoMsZwE#oi&Vc52b!7lr@yr){a`^a+m3qWw6oexNG`TOMzD%%z>7 ztpK^AeVXeU{4tcyx%3sd7Hbuc0l2t##bjx*;<_LH@K{?0;*X08ooP&KhzzhO zz}1|eUscMmxu~e1V9Aoap7z#eM%3lZ0KCUT;7fR{O(g@u! z7a1D3YfNj;7BdiL(NQ$YmyZ1S5{PTK+i}T)i~nFj&)a7Xmf~w3z@?V~w#)!)9X?!J z2+<|f(O6$x!ut_dFI{HDrfy!WC-O@)S^RMq;upYD~{2N!@t*-U!2*gK(d z9Kp+?@zKirA8CK@zXvH|zC170F3gk{dK}9~LC#I(a|;M%&bNG)(tu)Y!AY{d`WH^^ zpW(6g_Q@YA&g~oPHM_W$*9&#_>2=(!Rg`I0A-3}u9=&kk!ogFxejum@TyWLwuCxOj ziScf0eMq*22{onSwsh?kh6dt-%@xJ9;1E9iw8A+Ac6nZ)?*!G%NEE_=b=z$mZquU-}7gopPs7zk190i-;}~`h%`$#iBQ% z|H0!5kBH)Oe;#LDyc3lb{W*FohFVd~b6sH#W7?YjI{i*YT(#H2AD0*|W))eAh`&7y zQh)lx-lq1RC0i#!cfpYpCQNv7)8c2)l{Ws8^}@rz4`3INX)$wdQXH`JC`z~^)I~WI z7fMDXmk1%L6OB|ifkryIfm+=S``IdB)Im0yOKiKM(D@>_OvRxj1Gg^}#erowwTKD@ zgzfP->pi%BH00}E!I}a#n~gn&z>-SX@SDv*P(KYebc46bYHF&ES5+O)73P{eb!!{* zs;!Jz!Hzly#CSeHa&dARf&;hg1LhJB#)pjRuI-NFa*#_885`T%qX*=LJpLs5Dk>UJui5sQ1A3mhQ_wS^Zi-V)T=*w{&AuU_+0-$&LC-oyj&Lx%SuS`Vz7CE2*lN4{Q8 zPW5U;7xp&F=awo3VObtIf?P^AUaGUxI4*Jpy37?BPQ7TC*Dqp8PrzGQ2`*4iovP(U zKQ#x1wFqS3U_(Y-7Z&cG5A&rJjBB+uJ1(tP#9^0*xen|O2_45oI%Bm%;SPvE7j|2G z?lkPtEgDOF4g(o9004%&%!XJmz9_b|NiFI_NKP2Q>PY8-M47phB-M;Z#Z7{ z&hDZO$3H)Q{GF=RK(73DrWS2n#W>2Q{{mKGZ_2_pz^EssE+Xi)eb1gJUyx|^_AWQf z^X1-qa{G%3Wad+oyB8lu323}nj)nkaHFWegx3)I(`omV%c6S)80#{<$)zRIJ{cCGO zSGiUmNtXbsxCEm32@libYM660q%bJ?Na#}V-@RbD&?!!Ma8tHm%MX9LwXLc2H3UlS`nf8>{V$`cn2R$&2GE&%;!~)r>|&5uVa47b-6!+c>C4zW z^vK3W0XaEMC1f#|2me%DktvV!cu)m2@pd3!Ri2tWPwUmUJg<5rz#@KOx|I-uwUnFgqy%zxIY#5Wo}UQjvxLwqR;p| z1%?^Ng_qY(@E%*hm`J<16}1($wJo){LS0>Um|tPp!j_6t7g}np-p)=Y57)Lpb>Zlg zl?XLVD?)jR-BJ+T(nfY%E)W?S9GCExW)p?F5)_x#&S2(*Mqwj12e75PN#I3uhc-0`3>bTRwAv?3Eb@l zw4@_a19}D2^H+u&RIwb{|_iVlm}Iagx9EUDX?ujBQ{7e zgIfybf5`0&byt8}LGv@rpkdc%ngn0v;4%F3RbOuWR zO?fm(ow6DS80FAZ7wQJ09hAj*&vb3MGMZ_?#)OANBcY(AeM|!hAYCG0&l)2z%|3QD z_~Si5E-NT)>p+{&xwuBLV@yc$sb)g49foW5YUU}5m{iobdH05#r*m>9KR79e71?b~ zJ*^C(QJw~|zO?57X1zQlEbzdvLAu7G=ur(JX9L zroBB{KuT}WMo2H`!H%7YJ_^EbVP%CZuU4d}h%zI~^h(FM)Jd%{QG#53fGeZwGW&p5 z_?xfC-8?9Xs_L07#0@<{du^f-ItuG7XU7G*)!9cYyzoe?4QqMJPZ_ipp65@UDr465 z)G4k}BWJo0l=WK0YudmJGIx3b+=UT6I15S)JFXCT@sE7Y+cHJ_28IaYTCnM3QC$2H zjOz-wgxw%QT;}V+L$3E=h)snEbm_kCYVB>x+d6gYRPMx_Ide8_I9~Mm)BBz-+Pwj= z#fG`X&yN@VHwU>^ujUSAU<6kMSb9%?DI+y02H`7x&-;BU@!%0AdY|| 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

5FI)?9wE%$HDDLVe&u&iYSJRhpd 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 Ca|}ZO literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..cd88f38 --- /dev/null +++ b/setup.py @@ -0,0 +1,99 @@ +import re + +from setuptools import find_packages, setup + + +def get_version(): + version_file = "ssod/version.py" + with open(version_file, "r") as f: + exec(compile(f.read(), version_file, "exec")) + return locals()["__version__"] + + +def parse_requirements(fname="requirements.txt", with_version=True): + """Parse the package dependencies listed in a requirements file but strips + specific versioning information. + + Args: + fname (str): path to requirements file + with_version (bool, default=False): if True include version specs + Returns: + List[str]: list of requirements items + CommandLine: + python -c "import setup; print(setup.parse_requirements())" + """ + import sys + from os.path import exists + + require_fpath = fname + + def parse_line(line): + """Parse information from a line in a requirements text file.""" + if line.startswith("-r "): + # Allow specifying requirements in other files + target = line.split(" ")[1] + for info in parse_require_file(target): + yield info + else: + info = {"line": line} + if line.startswith("-e "): + info["package"] = line.split("#egg=")[1] + else: + # Remove versioning from the package + pat = "(" + "|".join([">=", "==", ">"]) + ")" + parts = re.split(pat, line, maxsplit=1) + parts = [p.strip() for p in parts] + + info["package"] = parts[0] + if len(parts) > 1: + op, rest = parts[1:] + if ";" in rest: + # Handle platform specific dependencies + # http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies + version, platform_deps = map(str.strip, rest.split(";")) + info["platform_deps"] = platform_deps + else: + version = rest # NOQA + info["version"] = (op, version) + yield info + + def parse_require_file(fpath): + with open(fpath, "r") as f: + for line in f.readlines(): + line = line.strip() + if line and not line.startswith("#"): + for info in parse_line(line): + yield info + + def gen_packages_items(): + if exists(require_fpath): + for info in parse_require_file(require_fpath): + parts = [info["package"]] + if with_version and "version" in info: + parts.extend(info["version"]) + if not sys.version.startswith("3.4"): + # apparently package_deps are broken in 3.4 + platform_deps = info.get("platform_deps") + if platform_deps is not None: + parts.append(";" + platform_deps) + item = "".join(parts) + yield item + + packages = list(gen_packages_items()) + return packages + + +if __name__ == "__main__": + install_requires = parse_requirements() + setup( + name="ssod", + version=get_version(), + description="Semi-Supervised Object Detection Benchmark", + author="someone", + author_email="someone", + packages=find_packages(exclude=("configs", "tools", "demo")), + install_requires=install_requires, + include_package_data=True, + ext_modules=[], + zip_safe=False, + ) diff --git a/ssod/__init__.py b/ssod/__init__.py new file mode 100644 index 0000000..aed4fa3 --- /dev/null +++ b/ssod/__init__.py @@ -0,0 +1 @@ +from .models import * diff --git a/ssod/apis/__init__.py b/ssod/apis/__init__.py new file mode 100644 index 0000000..f87a80d --- /dev/null +++ b/ssod/apis/__init__.py @@ -0,0 +1,3 @@ +from .train import get_root_logger, set_random_seed, train_detector + +__all__ = ["get_root_logger", "set_random_seed", "train_detector"] diff --git a/ssod/apis/train.py b/ssod/apis/train.py new file mode 100644 index 0000000..1896fc2 --- /dev/null +++ b/ssod/apis/train.py @@ -0,0 +1,205 @@ +import random +import warnings + +import numpy as np +import torch +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import ( + HOOKS, + DistSamplerSeedHook, + EpochBasedRunner, + Fp16OptimizerHook, + OptimizerHook, + build_optimizer, + build_runner, +) +from mmcv.runner.hooks import HOOKS +from mmcv.utils import build_from_cfg +from mmdet.core import DistEvalHook, EvalHook +from mmdet.datasets import build_dataset, replace_ImageToTensor + +from ssod.datasets import build_dataloader +from ssod.utils import find_latest_checkpoint, get_root_logger, patch_runner + + +def set_random_seed(seed, deterministic=False): + """Set random seed. + + Args: + seed (int): Seed to be used. + deterministic (bool): Whether to set the deterministic option for + CUDNN backend, i.e., set `torch.backends.cudnn.deterministic` + to True and `torch.backends.cudnn.benchmark` to False. + Default: False. + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + if deterministic: + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def train_detector( + model, dataset, cfg, distributed=False, validate=False, timestamp=None, meta=None +): + logger = get_root_logger(log_level=cfg.log_level) + + # prepare data loaders + dataset = dataset if isinstance(dataset, (list, tuple)) else [dataset] + if "imgs_per_gpu" in cfg.data: + logger.warning( + '"imgs_per_gpu" is deprecated in MMDet V2.0. ' + 'Please use "samples_per_gpu" instead' + ) + if "samples_per_gpu" in cfg.data: + logger.warning( + f'Got "imgs_per_gpu"={cfg.data.imgs_per_gpu} and ' + f'"samples_per_gpu"={cfg.data.samples_per_gpu}, "imgs_per_gpu"' + f"={cfg.data.imgs_per_gpu} is used in this experiments" + ) + else: + logger.warning( + 'Automatically set "samples_per_gpu"="imgs_per_gpu"=' + f"{cfg.data.imgs_per_gpu} in this experiments" + ) + cfg.data.samples_per_gpu = cfg.data.imgs_per_gpu + + data_loaders = [ + build_dataloader( + ds, + cfg.data.samples_per_gpu, + cfg.data.workers_per_gpu, + # cfg.gpus will be ignored if distributed + len(cfg.gpu_ids), + dist=distributed, + seed=cfg.seed, + sampler_cfg=cfg.data.get("sampler", {}).get("train", {}), + ) + 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) + + if "runner" not in cfg: + cfg.runner = {"type": "EpochBasedRunner", "max_epochs": cfg.total_epochs} + warnings.warn( + "config is now expected to have a `runner` section, " + "please set `runner` in your config.", + UserWarning, + ) + else: + if "total_epochs" in cfg: + assert cfg.total_epochs == cfg.runner.max_epochs + + runner = build_runner( + cfg.runner, + default_args=dict( + model=model, + optimizer=optimizer, + work_dir=cfg.work_dir, + logger=logger, + meta=meta, + ), + ) + + # an ugly workaround to make .log and .log.json filenames the same + runner.timestamp = timestamp + + # fp16 setting + fp16_cfg = cfg.get("fp16", None) + if fp16_cfg is not None: + optimizer_config = Fp16OptimizerHook( + **cfg.optimizer_config, **fp16_cfg, distributed=distributed + ) + elif distributed and "type" not in cfg.optimizer_config: + optimizer_config = OptimizerHook(**cfg.optimizer_config) + else: + optimizer_config = cfg.optimizer_config + + # register hooks + runner.register_training_hooks( + cfg.lr_config, + optimizer_config, + cfg.checkpoint_config, + cfg.log_config, + cfg.get("momentum_config", None), + ) + if distributed: + if isinstance(runner, EpochBasedRunner): + runner.register_hook(DistSamplerSeedHook()) + + # register eval hooks + if validate: + # Support batch_size > 1 in validation + val_samples_per_gpu = cfg.data.val.pop("samples_per_gpu", 1) + if val_samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.val.pipeline = replace_ImageToTensor(cfg.data.val.pipeline) + val_dataset = build_dataset(cfg.data.val, dict(test_mode=True)) + val_dataloader = build_dataloader( + val_dataset, + samples_per_gpu=val_samples_per_gpu, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False, + ) + eval_cfg = cfg.get("evaluation", {}) + eval_cfg["by_epoch"] = eval_cfg.get( + "by_epoch", cfg.runner["type"] != "IterBasedRunner" + ) + if "type" not in eval_cfg: + eval_hook = DistEvalHook if distributed else EvalHook + eval_hook = eval_hook(val_dataloader, **eval_cfg) + + else: + eval_hook = build_from_cfg( + eval_cfg, HOOKS, default_args=dict(dataloader=val_dataloader) + ) + + runner.register_hook(eval_hook) + + # user-defined hooks + if cfg.get("custom_hooks", None): + custom_hooks = cfg.custom_hooks + assert isinstance( + custom_hooks, list + ), f"custom_hooks expect list type, but got {type(custom_hooks)}" + for hook_cfg in cfg.custom_hooks: + assert isinstance(hook_cfg, dict), ( + "Each item in custom_hooks expects dict type, but got " + f"{type(hook_cfg)}" + ) + hook_cfg = hook_cfg.copy() + priority = hook_cfg.pop("priority", "NORMAL") + hook = build_from_cfg(hook_cfg, HOOKS) + runner.register_hook(hook, priority=priority) + + runner = patch_runner(runner) + resume_from = None + if cfg.get("auto_resume", True): + resume_from = find_latest_checkpoint(cfg.work_dir) + if resume_from is not None: + cfg.resume_from = resume_from + + 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) diff --git a/ssod/core/__init__.py b/ssod/core/__init__.py new file mode 100644 index 0000000..f7a82a1 --- /dev/null +++ b/ssod/core/__init__.py @@ -0,0 +1 @@ +from .masks import TrimapMasks diff --git a/ssod/core/masks/__init__.py b/ssod/core/masks/__init__.py new file mode 100644 index 0000000..c410fc6 --- /dev/null +++ b/ssod/core/masks/__init__.py @@ -0,0 +1 @@ +from .structures import TrimapMasks diff --git a/ssod/core/masks/structures.py b/ssod/core/masks/structures.py new file mode 100644 index 0000000..045d04a --- /dev/null +++ b/ssod/core/masks/structures.py @@ -0,0 +1,60 @@ +""" +Designed for pseudo masks. +In a `TrimapMasks`, it allow some part of the mask is ignored when computing loss. +""" +import numpy as np +import torch +from mmcv.ops.roi_align import roi_align +from mmdet.core import BitmapMasks + + +class TrimapMasks(BitmapMasks): + def __init__(self, masks, height, width, ignore_value=255): + """ + Args: + ignore_value: flag to ignore in loss computation. + See `mmdet.core.BitmapMasks` for more information + """ + super().__init__(masks, height, width) + self.ignore_value = ignore_value + + def crop_and_resize( + self, bboxes, out_shape, inds, device="cpu", interpolation="bilinear" + ): + """See :func:`BaseInstanceMasks.crop_and_resize`.""" + if len(self.masks) == 0: + empty_masks = np.empty((0, *out_shape), dtype=np.uint8) + return BitmapMasks(empty_masks, *out_shape) + + # convert bboxes to tensor + if isinstance(bboxes, np.ndarray): + bboxes = torch.from_numpy(bboxes).to(device=device) + if isinstance(inds, np.ndarray): + inds = torch.from_numpy(inds).to(device=device) + + num_bbox = bboxes.shape[0] + fake_inds = torch.arange(num_bbox, device=device).to(dtype=bboxes.dtype)[ + :, None + ] + rois = torch.cat([fake_inds, bboxes], dim=1) # Nx5 + rois = rois.to(device=device) + if num_bbox > 0: + gt_masks_th = ( + torch.from_numpy(self.masks) + .to(device) + .index_select(0, inds) + .to(dtype=rois.dtype) + ) + targets = roi_align( + gt_masks_th[:, None, :, :], rois, out_shape, 1.0, 0, "avg", True + ).squeeze(1) + # for a mask: + # value<0.5 -> background, + # 0.5<=value<=1 -> foreground + # value>1 -> ignored area + resized_masks = (targets >= 0.5).float() + resized_masks[targets > 1] = self.ignore_value + resized_masks = resized_masks.cpu().numpy() + else: + resized_masks = [] + return BitmapMasks(resized_masks, *out_shape) diff --git a/ssod/datasets/__init__.py b/ssod/datasets/__init__.py new file mode 100644 index 0000000..726976c --- /dev/null +++ b/ssod/datasets/__init__.py @@ -0,0 +1,15 @@ +from mmdet.datasets import build_dataset + +from .builder import build_dataloader +from .dataset_wrappers import SemiDataset +from .pipelines import * +from .pseudo_coco import PseudoCocoDataset +from .samplers import DistributedGroupSemiBalanceSampler + +__all__ = [ + "PseudoCocoDataset", + "build_dataloader", + "build_dataset", + "SemiDataset", + "DistributedGroupSemiBalanceSampler", +] diff --git a/ssod/datasets/builder.py b/ssod/datasets/builder.py new file mode 100644 index 0000000..91a57ab --- /dev/null +++ b/ssod/datasets/builder.py @@ -0,0 +1,172 @@ +from collections.abc import Mapping, Sequence +from functools import partial + +import torch +from mmcv.parallel import DataContainer +from mmcv.runner import get_dist_info +from mmcv.utils import Registry, build_from_cfg +from mmdet.datasets.builder import worker_init_fn +from mmdet.datasets.samplers import ( + DistributedGroupSampler, + DistributedSampler, + GroupSampler, +) +from torch.nn import functional as F +from torch.utils.data import DataLoader +from torch.utils.data.dataloader import default_collate + +SAMPLERS = Registry("sampler") + +SAMPLERS.register_module(module=DistributedGroupSampler) +SAMPLERS.register_module(module=DistributedSampler) +SAMPLERS.register_module(module=GroupSampler) + + +def build_sampler(cfg, dist=False, group=False, default_args=None): + if cfg and ("type" in cfg): + sampler_type = cfg.get("type") + else: + sampler_type = default_args.get("type") + if group: + sampler_type = "Group" + sampler_type + if dist: + sampler_type = "Distributed" + sampler_type + + if cfg: + cfg.update(type=sampler_type) + else: + cfg = dict(type=sampler_type) + + return build_from_cfg(cfg, SAMPLERS, default_args) + + +def build_dataloader( + dataset, + samples_per_gpu, + workers_per_gpu, + num_gpus=1, + dist=True, + shuffle=True, + seed=None, + sampler_cfg=None, + **kwargs, +): + rank, world_size = get_dist_info() + default_sampler_cfg = dict(type="Sampler", dataset=dataset) + if shuffle: + default_sampler_cfg.update(samples_per_gpu=samples_per_gpu) + else: + default_sampler_cfg.update(shuffle=False) + if dist: + default_sampler_cfg.update(num_replicas=world_size, rank=rank, seed=seed) + sampler = build_sampler(sampler_cfg, dist, shuffle, default_sampler_cfg) + + batch_size = samples_per_gpu + num_workers = workers_per_gpu + else: + sampler = build_sampler(sampler_cfg, default_sampler_cfg) if shuffle else None + batch_size = num_gpus * samples_per_gpu + num_workers = num_gpus * workers_per_gpu + + init_fn = ( + partial(worker_init_fn, num_workers=num_workers, rank=rank, seed=seed) + if seed is not None + else None + ) + + data_loader = DataLoader( + dataset, + batch_size=batch_size, + sampler=sampler, + num_workers=num_workers, + collate_fn=partial(collate, samples_per_gpu=samples_per_gpu, flatten=True), + pin_memory=False, + worker_init_fn=init_fn, + **kwargs, + ) + return data_loader + + +def collate(batch, samples_per_gpu=1, flatten=False): + """Puts each data field into a tensor/DataContainer with outer dimension + batch size. + + Extend default_collate to add support for + :type:`~mmcv.parallel.DataContainer`. There are 3 cases. + + 1. cpu_only = True, e.g., meta data + 2. cpu_only = False, stack = True, e.g., images tensors + 3. cpu_only = False, stack = False, e.g., gt bboxes + """ + if not isinstance(batch, Sequence): + raise TypeError(f"{batch.dtype} is not supported.") + + if isinstance(batch[0], DataContainer): + stacked = [] + if batch[0].cpu_only: + for i in range(0, len(batch), samples_per_gpu): + stacked.append( + [sample.data for sample in batch[i : i + samples_per_gpu]] + ) + return DataContainer( + stacked, batch[0].stack, batch[0].padding_value, cpu_only=True + ) + elif batch[0].stack: + for i in range(0, len(batch), samples_per_gpu): + assert isinstance(batch[i].data, torch.Tensor) + + if batch[i].pad_dims is not None: + ndim = batch[i].dim() + assert ndim > batch[i].pad_dims + max_shape = [0 for _ in range(batch[i].pad_dims)] + for dim in range(1, batch[i].pad_dims + 1): + max_shape[dim - 1] = batch[i].size(-dim) + for sample in batch[i : i + samples_per_gpu]: + for dim in range(0, ndim - batch[i].pad_dims): + assert batch[i].size(dim) == sample.size(dim) + for dim in range(1, batch[i].pad_dims + 1): + max_shape[dim - 1] = max( + max_shape[dim - 1], sample.size(-dim) + ) + padded_samples = [] + for sample in batch[i : i + samples_per_gpu]: + pad = [0 for _ in range(batch[i].pad_dims * 2)] + for dim in range(1, batch[i].pad_dims + 1): + pad[2 * dim - 1] = max_shape[dim - 1] - sample.size(-dim) + padded_samples.append( + F.pad(sample.data, pad, value=sample.padding_value) + ) + stacked.append(default_collate(padded_samples)) + elif batch[i].pad_dims is None: + stacked.append( + default_collate( + [sample.data for sample in batch[i : i + samples_per_gpu]] + ) + ) + else: + raise ValueError("pad_dims should be either None or integers (1-3)") + + else: + for i in range(0, len(batch), samples_per_gpu): + stacked.append( + [sample.data for sample in batch[i : i + samples_per_gpu]] + ) + return DataContainer(stacked, batch[0].stack, batch[0].padding_value) + elif any([isinstance(b, Sequence) for b in batch]): + if flatten: + flattened = [] + for b in batch: + if isinstance(b, Sequence): + flattened.extend(b) + else: + flattened.extend([b]) + return collate(flattened, len(flattened)) + else: + transposed = zip(*batch) + return [collate(samples, samples_per_gpu) for samples in transposed] + elif isinstance(batch[0], Mapping): + return { + key: collate([d[key] for d in batch], samples_per_gpu) for key in batch[0] + } + else: + return default_collate(batch) diff --git a/ssod/datasets/dataset_wrappers.py b/ssod/datasets/dataset_wrappers.py new file mode 100644 index 0000000..6fd3bcc --- /dev/null +++ b/ssod/datasets/dataset_wrappers.py @@ -0,0 +1,17 @@ +from mmdet.datasets import DATASETS, ConcatDataset, build_dataset + + +@DATASETS.register_module() +class SemiDataset(ConcatDataset): + """Wrapper for semisupervised od.""" + + def __init__(self, sup: dict, unsup: dict, **kwargs): + super().__init__([build_dataset(sup), build_dataset(unsup)], **kwargs) + + @property + def sup(self): + return self.datasets[0] + + @property + def unsup(self): + return self.datasets[1] diff --git a/ssod/datasets/pipelines/__init__.py b/ssod/datasets/pipelines/__init__.py new file mode 100644 index 0000000..674ec18 --- /dev/null +++ b/ssod/datasets/pipelines/__init__.py @@ -0,0 +1,2 @@ +from .formating import * +from .rand_aug import * diff --git a/ssod/datasets/pipelines/formating.py b/ssod/datasets/pipelines/formating.py new file mode 100644 index 0000000..4f1bd3c --- /dev/null +++ b/ssod/datasets/pipelines/formating.py @@ -0,0 +1,78 @@ +import numpy as np +from mmdet.datasets import PIPELINES +from mmdet.datasets.pipelines.formating import Collect + +from ssod.core import TrimapMasks + + +@PIPELINES.register_module() +class ExtraAttrs(object): + def __init__(self, **attrs): + self.attrs = attrs + + def __call__(self, results): + for k, v in self.attrs.items(): + assert k not in results + results[k] = v + return results + + +@PIPELINES.register_module() +class ExtraCollect(Collect): + def __init__(self, *args, extra_meta_keys=[], **kwargs): + super().__init__(*args, **kwargs) + self.meta_keys = self.meta_keys + tuple(extra_meta_keys) + + +@PIPELINES.register_module() +class PseudoSamples(object): + def __init__( + self, with_bbox=False, with_mask=False, with_seg=False, fill_value=255 + ): + """ + Replacing gt labels in original data with fake labels or adding extra fake labels for unlabeled data. + This is to remove the effect of labeled data and keep its elements aligned with other sample. + Args: + with_bbox: + with_mask: + with_seg: + fill_value: + """ + self.with_bbox = with_bbox + self.with_mask = with_mask + self.with_seg = with_seg + self.fill_value = fill_value + + def __call__(self, results): + if self.with_bbox: + results["gt_bboxes"] = np.zeros((0, 4)) + results["gt_labels"] = np.zeros((0,)) + if "bbox_fields" not in results: + results["bbox_fields"] = [] + if "gt_bboxes" not in results["bbox_fields"]: + results["bbox_fields"].append("gt_bboxes") + if self.with_mask: + num_inst = len(results["gt_bboxes"]) + h, w = results["img"].shape[:2] + results["gt_masks"] = TrimapMasks( + [ + self.fill_value * np.ones((h, w), dtype=np.uint8) + for _ in range(num_inst) + ], + h, + w, + ) + + if "mask_fields" not in results: + results["mask_fields"] = [] + if "gt_masks" not in results["mask_fields"]: + results["mask_fields"].append("gt_masks") + if self.with_seg: + results["gt_semantic_seg"] = self.fill_value * np.ones( + results["img"].shape[:2], dtype=np.uint8 + ) + if "seg_fields" not in results: + results["seg_fields"] = [] + if "gt_semantic_seg" not in results["seg_fields"]: + results["seg_fields"].append("gt_semantic_seg") + return results diff --git a/ssod/datasets/pipelines/geo_utils.py b/ssod/datasets/pipelines/geo_utils.py new file mode 100644 index 0000000..c495027 --- /dev/null +++ b/ssod/datasets/pipelines/geo_utils.py @@ -0,0 +1,94 @@ +""" +Recored the geometric transformation information used in the augmentation in a transformation matrix. +""" +import numpy as np + + +class GeometricTransformationBase(object): + @classmethod + def inverse(cls, results): + # compute the inverse + return results["transform_matrix"].I # 3x3 + + @classmethod + def apply(self, results, operator, **kwargs): + trans_matrix = getattr(self, f"_get_{operator}_matrix")(**kwargs) + if "transform_matrix" not in results: + results["transform_matrix"] = trans_matrix + else: + base_transformation = results["transform_matrix"] + results["transform_matrix"] = np.dot(trans_matrix, base_transformation) + + @classmethod + def apply_cv2_matrix(self, results, cv2_matrix): + if cv2_matrix.shape[0] == 2: + mat = np.concatenate( + [cv2_matrix, np.array([0, 0, 1]).reshape((1, 3))], axis=0 + ) + else: + mat = cv2_matrix + base_transformation = results["transform_matrix"] + results["transform_matrix"] = np.dot(mat, base_transformation) + return results + + @classmethod + def _get_rotate_matrix(cls, degree=None, cv2_rotation_matrix=None, inverse=False): + # TODO: this is rotated by zero point + if degree is None and cv2_rotation_matrix is None: + raise ValueError( + "At least one of degree or rotation matrix should be provided" + ) + if degree: + if inverse: + degree = -degree + rad = degree * np.pi / 180 + sin_a = np.sin(rad) + cos_a = np.cos(rad) + return np.array([[cos_a, sin_a, 0], [-sin_a, cos_a, 0], [0, 0, 1]]) # 2x3 + else: + mat = np.concatenate( + [cv2_rotation_matrix, np.array([0, 0, 1]).reshape((1, 3))], axis=0 + ) + if inverse: + mat = mat * np.array([[1, -1, -1], [-1, 1, -1], [1, 1, 1]]) + return mat + + @classmethod + def _get_shift_matrix(cls, dx=0, dy=0, inverse=False): + if inverse: + dx = -dx + dy = -dy + return np.array([[1, 0, dx], [0, 1, dy], [0, 0, 1]]) + + @classmethod + def _get_shear_matrix( + cls, degree=None, magnitude=None, direction="horizontal", inverse=False + ): + if magnitude is None: + assert degree is not None + rad = degree * np.pi / 180 + magnitude = np.tan(rad) + + if inverse: + magnitude = -magnitude + if direction == "horizontal": + shear_matrix = np.float32([[1, magnitude, 0], [0, 1, 0], [0, 0, 1]]) + else: + shear_matrix = np.float32([[1, 0, 0], [magnitude, 1, 0], [0, 0, 1]]) + return shear_matrix + + @classmethod + def _get_flip_matrix(cls, shape, direction="horizontal", inverse=False): + h, w = shape + if direction == "horizontal": + flip_matrix = np.float32([[-1, 0, w], [0, 1, 0], [0, 0, 1]]) + else: + flip_matrix = np.float32([[1, 0, 0], [0, h - 1, 0], [0, 0, 1]]) + return flip_matrix + + @classmethod + def _get_scale_matrix(cls, sx, sy, inverse=False): + if inverse: + sx = 1 / sx + sy = 1 / sy + return np.float32([[sx, 0, 0], [0, sy, 0], [0, 0, 1]]) diff --git a/ssod/datasets/pipelines/rand_aug.py b/ssod/datasets/pipelines/rand_aug.py new file mode 100644 index 0000000..b0bdec3 --- /dev/null +++ b/ssod/datasets/pipelines/rand_aug.py @@ -0,0 +1,965 @@ +""" +Modified from https://github.com/google-research/ssl_detection/blob/master/detection/utils/augmentation.py. +""" +import copy + +import cv2 +import mmcv +import numpy as np +from PIL import Image, ImageEnhance, ImageOps +from mmcv.image.colorspace import bgr2rgb, rgb2bgr +from mmdet.core.mask import BitmapMasks, PolygonMasks +from mmdet.datasets import PIPELINES +from mmdet.datasets.pipelines import Compose as BaseCompose +from mmdet.datasets.pipelines import transforms + +from .geo_utils import GeometricTransformationBase as GTrans + +PARAMETER_MAX = 10 + + +def int_parameter(level, maxval, max_level=None): + if max_level is None: + max_level = PARAMETER_MAX + return int(level * maxval / max_level) + + +def float_parameter(level, maxval, max_level=None): + if max_level is None: + max_level = PARAMETER_MAX + return float(level) * maxval / max_level + + +class RandAug(object): + """refer to https://github.com/google-research/ssl_detection/blob/00d52272f + 61b56eade8d5ace18213cba6c74f6d8/detection/utils/augmentation.py#L240.""" + + def __init__( + self, + prob: float = 1.0, + magnitude: int = 10, + random_magnitude: bool = True, + record: bool = False, + magnitude_limit: int = 10, + ): + assert 0 <= prob <= 1, f"probability should be in (0,1) but get {prob}" + assert ( + magnitude <= PARAMETER_MAX + ), f"magnitude should be small than max value {PARAMETER_MAX} but get {magnitude}" + + self.prob = prob + self.magnitude = magnitude + self.magnitude_limit = magnitude_limit + self.random_magnitude = random_magnitude + self.record = record + self.buffer = None + + def __call__(self, results): + if np.random.random() < self.prob: + magnitude = self.magnitude + if self.random_magnitude: + magnitude = np.random.randint(1, magnitude) + if self.record: + if "aug_info" not in results: + results["aug_info"] = [] + results["aug_info"].append(self.get_aug_info(magnitude=magnitude)) + results = self.apply(results, magnitude) + # clear buffer + return results + + def apply(self, results, magnitude: int = None): + raise NotImplementedError() + + def __repr__(self): + return f"{self.__class__.__name__}(prob={self.prob},magnitude={self.magnitude},max_magnitude={self.magnitude_limit},random_magnitude={self.random_magnitude})" + + def get_aug_info(self, **kwargs): + aug_info = dict(type=self.__class__.__name__) + aug_info.update( + dict( + prob=1.0, + random_magnitude=False, + record=False, + magnitude=self.magnitude, + ) + ) + aug_info.update(kwargs) + return aug_info + + def enable_record(self, mode: bool = True): + self.record = mode + + +@PIPELINES.register_module() +class Identity(RandAug): + def apply(self, results, magnitude: int = None): + return results + + +@PIPELINES.register_module() +class AutoContrast(RandAug): + def apply(self, results, magnitude=None): + for key in results.get("img_fields", ["img"]): + img = bgr2rgb(results[key]) + results[key] = rgb2bgr( + np.asarray(ImageOps.autocontrast(Image.fromarray(img)), dtype=img.dtype) + ) + return results + + +@PIPELINES.register_module() +class RandEqualize(RandAug): + def apply(self, results, magnitude=None): + for key in results.get("img_fields", ["img"]): + img = bgr2rgb(results[key]) + results[key] = rgb2bgr( + np.asarray(ImageOps.equalize(Image.fromarray(img)), dtype=img.dtype) + ) + return results + + +@PIPELINES.register_module() +class RandSolarize(RandAug): + def apply(self, results, magnitude=None): + for key in results.get("img_fields", ["img"]): + img = results[key] + results[key] = mmcv.solarize( + img, min(int_parameter(magnitude, 256, self.magnitude_limit), 255) + ) + return results + + +def _enhancer_impl(enhancer): + """Sets level to be between 0.1 and 1.8 for ImageEnhance transforms of + PIL.""" + + def impl(pil_img, level, max_level=None): + v = float_parameter(level, 1.8, max_level) + 0.1 # going to 0 just destroys it + return enhancer(pil_img).enhance(v) + + return impl + + +class RandEnhance(RandAug): + op = None + + def apply(self, results, magnitude=None): + for key in results.get("img_fields", ["img"]): + img = bgr2rgb(results[key]) + + results[key] = rgb2bgr( + np.asarray( + _enhancer_impl(self.op)( + Image.fromarray(img), magnitude, self.magnitude_limit + ), + dtype=img.dtype, + ) + ) + return results + + +@PIPELINES.register_module() +class RandColor(RandEnhance): + op = ImageEnhance.Color + + +@PIPELINES.register_module() +class RandContrast(RandEnhance): + op = ImageEnhance.Contrast + + +@PIPELINES.register_module() +class RandBrightness(RandEnhance): + op = ImageEnhance.Brightness + + +@PIPELINES.register_module() +class RandSharpness(RandEnhance): + op = ImageEnhance.Sharpness + + +@PIPELINES.register_module() +class RandPosterize(RandAug): + def apply(self, results, magnitude=None): + for key in results.get("img_fields", ["img"]): + img = bgr2rgb(results[key]) + magnitude = int_parameter(magnitude, 4, self.magnitude_limit) + results[key] = rgb2bgr( + np.asarray( + ImageOps.posterize(Image.fromarray(img), 4 - magnitude), + dtype=img.dtype, + ) + ) + return results + + +@PIPELINES.register_module() +class Sequential(BaseCompose): + def __init__(self, transforms, record: bool = False): + super().__init__(transforms) + self.record = record + self.enable_record(record) + + def enable_record(self, mode: bool = True): + # enable children to record + self.record = mode + for transform in self.transforms: + transform.enable_record(mode) + + +@PIPELINES.register_module() +class OneOf(Sequential): + def __init__(self, transforms, record: bool = False): + self.transforms = [] + for trans in transforms: + if isinstance(trans, list): + self.transforms.append(Sequential(trans)) + else: + assert isinstance(trans, dict) + self.transforms.append(Sequential([trans])) + self.enable_record(record) + + def __call__(self, results): + transform = np.random.choice(self.transforms) + return transform(results) + + +@PIPELINES.register_module() +class ShuffledSequential(Sequential): + def __call__(self, data): + order = np.random.permutation(len(self.transforms)) + for idx in order: + t = self.transforms[idx] + data = t(data) + if data is None: + return None + return data + + +""" +Geometric Augmentation. Modified from thirdparty/mmdetection/mmdet/datasets/pipelines/auto_augment.py +""" + + +def bbox2fields(): + """The key correspondence from bboxes to labels, masks and + segmentations.""" + bbox2label = {"gt_bboxes": "gt_labels", "gt_bboxes_ignore": "gt_labels_ignore"} + bbox2mask = {"gt_bboxes": "gt_masks", "gt_bboxes_ignore": "gt_masks_ignore"} + bbox2seg = { + "gt_bboxes": "gt_semantic_seg", + } + return bbox2label, bbox2mask, bbox2seg + + +class GeometricAugmentation(object): + def __init__( + self, + img_fill_val=125, + seg_ignore_label=255, + min_size=0, + prob: float = 1.0, + random_magnitude: bool = True, + record: bool = False, + ): + if isinstance(img_fill_val, (float, int)): + img_fill_val = tuple([float(img_fill_val)] * 3) + elif isinstance(img_fill_val, tuple): + assert len(img_fill_val) == 3, "img_fill_val as tuple must have 3 elements." + img_fill_val = tuple([float(val) for val in img_fill_val]) + assert np.all( + [0 <= val <= 255 for val in img_fill_val] + ), "all elements of img_fill_val should between range [0,255]." + self.img_fill_val = img_fill_val + self.seg_ignore_label = seg_ignore_label + self.min_size = min_size + self.prob = prob + self.random_magnitude = random_magnitude + self.record = record + + def __call__(self, results): + if np.random.random() < self.prob: + magnitude: dict = self.get_magnitude(results) + if self.record: + if "aug_info" not in results: + results["aug_info"] = [] + results["aug_info"].append(self.get_aug_info(**magnitude)) + results = self.apply(results, **magnitude) + self._filter_invalid(results, min_size=self.min_size) + return results + + def get_magnitude(self, results) -> dict: + raise NotImplementedError() + + def apply(self, results, **kwargs): + raise NotImplementedError() + + def enable_record(self, mode: bool = True): + self.record = mode + + def get_aug_info(self, **kwargs): + aug_info = dict(type=self.__class__.__name__) + aug_info.update( + dict( + # make op deterministic + prob=1.0, + random_magnitude=False, + record=False, + img_fill_val=self.img_fill_val, + seg_ignore_label=self.seg_ignore_label, + min_size=self.min_size, + ) + ) + aug_info.update(kwargs) + return aug_info + + def _filter_invalid(self, results, min_size=0): + """Filter bboxes and masks too small or translated out of image.""" + if min_size is None: + return results + bbox2label, bbox2mask, _ = bbox2fields() + for key in results.get("bbox_fields", []): + bbox_w = results[key][:, 2] - results[key][:, 0] + bbox_h = results[key][:, 3] - results[key][:, 1] + valid_inds = (bbox_w > min_size) & (bbox_h > min_size) + valid_inds = np.nonzero(valid_inds)[0] + results[key] = results[key][valid_inds] + # label fields. e.g. gt_labels and gt_labels_ignore + label_key = bbox2label.get(key) + if label_key in results: + results[label_key] = results[label_key][valid_inds] + # mask fields, e.g. gt_masks and gt_masks_ignore + mask_key = bbox2mask.get(key) + if mask_key in results: + results[mask_key] = results[mask_key][valid_inds] + return results + + def __repr__(self): + return f"""{self.__class__.__name__}( + img_fill_val={self.img_fill_val}, + seg_ignore_label={self.seg_ignore_label}, + min_size={self.magnitude}, + prob: float = {self.prob}, + random_magnitude: bool = {self.random_magnitude}, + )""" + + +@PIPELINES.register_module() +class RandTranslate(GeometricAugmentation): + def __init__(self, x=None, y=None, **kwargs): + super().__init__(**kwargs) + self.x = x + self.y = y + if self.x is None and self.y is None: + self.prob = 0.0 + + def get_magnitude(self, results): + magnitude = {} + if self.random_magnitude: + if isinstance(self.x, (list, tuple)): + assert len(self.x) == 2 + x = np.random.random() * (self.x[1] - self.x[0]) + self.x[0] + magnitude["x"] = x + if isinstance(self.y, (list, tuple)): + assert len(self.y) == 2 + y = np.random.random() * (self.y[1] - self.y[0]) + self.y[0] + magnitude["y"] = y + else: + if self.x is not None: + assert isinstance(self.x, (int, float)) + magnitude["x"] = self.x + if self.y is not None: + assert isinstance(self.y, (int, float)) + magnitude["y"] = self.y + return magnitude + + def apply(self, results, x=None, y=None): + # ratio to pixel + h, w, c = results["img_shape"] + if x is not None: + x = w * x + if y is not None: + y = h * y + if x is not None: + # translate horizontally + self._translate(results, x) + if y is not None: + # translate veritically + self._translate(results, y, direction="vertical") + return results + + def _translate(self, results, offset, direction="horizontal"): + if self.record: + GTrans.apply( + results, + "shift", + dx=offset if direction == "horizontal" else 0, + dy=offset if direction == "vertical" else 0, + ) + self._translate_img(results, offset, direction=direction) + self._translate_bboxes(results, offset, direction=direction) + # fill_val defaultly 0 for BitmapMasks and None for PolygonMasks. + self._translate_masks(results, offset, direction=direction) + self._translate_seg( + results, offset, fill_val=self.seg_ignore_label, direction=direction + ) + + def _translate_img(self, results, offset, direction="horizontal"): + for key in results.get("img_fields", ["img"]): + img = results[key].copy() + results[key] = mmcv.imtranslate( + img, offset, direction, self.img_fill_val + ).astype(img.dtype) + + def _translate_bboxes(self, results, offset, direction="horizontal"): + """Shift bboxes horizontally or vertically, according to offset.""" + h, w, c = results["img_shape"] + for key in results.get("bbox_fields", []): + min_x, min_y, max_x, max_y = np.split( + results[key], results[key].shape[-1], axis=-1 + ) + if direction == "horizontal": + min_x = np.maximum(0, min_x + offset) + max_x = np.minimum(w, max_x + offset) + elif direction == "vertical": + min_y = np.maximum(0, min_y + offset) + max_y = np.minimum(h, max_y + offset) + + # the boxs translated outside of image will be filtered along with + # the corresponding masks, by invoking ``_filter_invalid``. + results[key] = np.concatenate([min_x, min_y, max_x, max_y], axis=-1) + + def _translate_masks(self, results, offset, direction="horizontal", fill_val=0): + """Translate masks horizontally or vertically.""" + h, w, c = results["img_shape"] + for key in results.get("mask_fields", []): + masks = results[key] + results[key] = masks.translate((h, w), offset, direction, fill_val) + + def _translate_seg(self, results, offset, direction="horizontal", fill_val=255): + """Translate segmentation maps horizontally or vertically.""" + for key in results.get("seg_fields", []): + seg = results[key].copy() + results[key] = mmcv.imtranslate(seg, offset, direction, fill_val).astype( + seg.dtype + ) + + def __repr__(self): + repr_str = super().__repr__() + return ("\n").join( + repr_str.split("\n")[:-1] + + [f"x={self.x}", f"y={self.y}"] + + repr_str.split("\n")[-1:] + ) + + +@PIPELINES.register_module() +class RandRotate(GeometricAugmentation): + def __init__(self, angle=None, center=None, scale=1, **kwargs): + super().__init__(**kwargs) + self.angle = angle + self.center = center + self.scale = scale + if self.angle is None: + self.prob = 0.0 + + def get_magnitude(self, results): + magnitude = {} + if self.random_magnitude: + if isinstance(self.angle, (list, tuple)): + assert len(self.angle) == 2 + angle = ( + np.random.random() * (self.angle[1] - self.angle[0]) + self.angle[0] + ) + magnitude["angle"] = angle + else: + if self.angle is not None: + assert isinstance(self.angle, (int, float)) + magnitude["angle"] = self.angle + + return magnitude + + def apply(self, results, angle: float = None): + h, w = results["img"].shape[:2] + center = self.center + if center is None: + center = ((w - 1) * 0.5, (h - 1) * 0.5) + self._rotate_img(results, angle, center, self.scale) + rotate_matrix = cv2.getRotationMatrix2D(center, -angle, self.scale) + if self.record: + GTrans.apply(results, "rotate", cv2_rotation_matrix=rotate_matrix) + self._rotate_bboxes(results, rotate_matrix) + self._rotate_masks(results, angle, center, self.scale, fill_val=0) + self._rotate_seg( + results, angle, center, self.scale, fill_val=self.seg_ignore_label + ) + return results + + def _rotate_img(self, results, angle, center=None, scale=1.0): + """Rotate the image. + + Args: + results (dict): Result dict from loading pipeline. + angle (float): Rotation angle in degrees, positive values + mean clockwise rotation. Same in ``mmcv.imrotate``. + center (tuple[float], optional): Center point (w, h) of the + rotation. Same in ``mmcv.imrotate``. + scale (int | float): Isotropic scale factor. Same in + ``mmcv.imrotate``. + """ + for key in results.get("img_fields", ["img"]): + img = results[key].copy() + img_rotated = mmcv.imrotate( + img, angle, center, scale, border_value=self.img_fill_val + ) + results[key] = img_rotated.astype(img.dtype) + + def _rotate_bboxes(self, results, rotate_matrix): + """Rotate the bboxes.""" + h, w, c = results["img_shape"] + for key in results.get("bbox_fields", []): + min_x, min_y, max_x, max_y = np.split( + results[key], results[key].shape[-1], axis=-1 + ) + coordinates = np.stack( + [[min_x, min_y], [max_x, min_y], [min_x, max_y], [max_x, max_y]] + ) # [4, 2, nb_bbox, 1] + # pad 1 to convert from format [x, y] to homogeneous + # coordinates format [x, y, 1] + coordinates = np.concatenate( + ( + coordinates, + np.ones((4, 1, coordinates.shape[2], 1), coordinates.dtype), + ), + axis=1, + ) # [4, 3, nb_bbox, 1] + coordinates = coordinates.transpose((2, 0, 1, 3)) # [nb_bbox, 4, 3, 1] + rotated_coords = np.matmul(rotate_matrix, coordinates) # [nb_bbox, 4, 2, 1] + rotated_coords = rotated_coords[..., 0] # [nb_bbox, 4, 2] + min_x, min_y = ( + np.min(rotated_coords[:, :, 0], axis=1), + np.min(rotated_coords[:, :, 1], axis=1), + ) + max_x, max_y = ( + np.max(rotated_coords[:, :, 0], axis=1), + np.max(rotated_coords[:, :, 1], axis=1), + ) + min_x, min_y = ( + np.clip(min_x, a_min=0, a_max=w), + np.clip(min_y, a_min=0, a_max=h), + ) + max_x, max_y = ( + np.clip(max_x, a_min=min_x, a_max=w), + np.clip(max_y, a_min=min_y, a_max=h), + ) + results[key] = np.stack([min_x, min_y, max_x, max_y], axis=-1).astype( + results[key].dtype + ) + + def _rotate_masks(self, results, angle, center=None, scale=1.0, fill_val=0): + """Rotate the masks.""" + h, w, c = results["img_shape"] + for key in results.get("mask_fields", []): + masks = results[key] + results[key] = masks.rotate((h, w), angle, center, scale, fill_val) + + def _rotate_seg(self, results, angle, center=None, scale=1.0, fill_val=255): + """Rotate the segmentation map.""" + for key in results.get("seg_fields", []): + seg = results[key].copy() + results[key] = mmcv.imrotate( + seg, angle, center, scale, border_value=fill_val + ).astype(seg.dtype) + + def __repr__(self): + repr_str = super().__repr__() + return ("\n").join( + repr_str.split("\n")[:-1] + + [f"angle={self.angle}", f"center={self.center}", f"scale={self.scale}"] + + repr_str.split("\n")[-1:] + ) + + +@PIPELINES.register_module() +class RandShear(GeometricAugmentation): + def __init__(self, x=None, y=None, interpolation="bilinear", **kwargs): + super().__init__(**kwargs) + self.x = x + self.y = y + self.interpolation = interpolation + if self.x is None and self.y is None: + self.prob = 0.0 + + def get_magnitude(self, results): + magnitude = {} + if self.random_magnitude: + if isinstance(self.x, (list, tuple)): + assert len(self.x) == 2 + x = np.random.random() * (self.x[1] - self.x[0]) + self.x[0] + magnitude["x"] = x + if isinstance(self.y, (list, tuple)): + assert len(self.y) == 2 + y = np.random.random() * (self.y[1] - self.y[0]) + self.y[0] + magnitude["y"] = y + else: + if self.x is not None: + assert isinstance(self.x, (int, float)) + magnitude["x"] = self.x + if self.y is not None: + assert isinstance(self.y, (int, float)) + magnitude["y"] = self.y + return magnitude + + def apply(self, results, x=None, y=None): + if x is not None: + # translate horizontally + self._shear(results, np.tanh(-x * np.pi / 180)) + if y is not None: + # translate veritically + self._shear(results, np.tanh(y * np.pi / 180), direction="vertical") + return results + + def _shear(self, results, magnitude, direction="horizontal"): + if self.record: + GTrans.apply(results, "shear", magnitude=magnitude, direction=direction) + self._shear_img(results, magnitude, direction, interpolation=self.interpolation) + self._shear_bboxes(results, magnitude, direction=direction) + # fill_val defaultly 0 for BitmapMasks and None for PolygonMasks. + self._shear_masks( + results, magnitude, direction=direction, interpolation=self.interpolation + ) + self._shear_seg( + results, + magnitude, + direction=direction, + interpolation=self.interpolation, + fill_val=self.seg_ignore_label, + ) + + def _shear_img( + self, results, magnitude, direction="horizontal", interpolation="bilinear" + ): + """Shear the image. + + Args: + results (dict): Result dict from loading pipeline. + magnitude (int | float): The magnitude used for shear. + direction (str): The direction for shear, either "horizontal" + or "vertical". + interpolation (str): Same as in :func:`mmcv.imshear`. + """ + for key in results.get("img_fields", ["img"]): + img = results[key] + img_sheared = mmcv.imshear( + img, + magnitude, + direction, + border_value=self.img_fill_val, + interpolation=interpolation, + ) + results[key] = img_sheared.astype(img.dtype) + + def _shear_bboxes(self, results, magnitude, direction="horizontal"): + """Shear the bboxes.""" + h, w, c = results["img_shape"] + if direction == "horizontal": + shear_matrix = np.stack([[1, magnitude], [0, 1]]).astype( + np.float32 + ) # [2, 2] + else: + shear_matrix = np.stack([[1, 0], [magnitude, 1]]).astype(np.float32) + for key in results.get("bbox_fields", []): + min_x, min_y, max_x, max_y = np.split( + results[key], results[key].shape[-1], axis=-1 + ) + coordinates = np.stack( + [[min_x, min_y], [max_x, min_y], [min_x, max_y], [max_x, max_y]] + ) # [4, 2, nb_box, 1] + coordinates = ( + coordinates[..., 0].transpose((2, 1, 0)).astype(np.float32) + ) # [nb_box, 2, 4] + new_coords = np.matmul( + shear_matrix[None, :, :], coordinates + ) # [nb_box, 2, 4] + min_x = np.min(new_coords[:, 0, :], axis=-1) + min_y = np.min(new_coords[:, 1, :], axis=-1) + max_x = np.max(new_coords[:, 0, :], axis=-1) + max_y = np.max(new_coords[:, 1, :], axis=-1) + min_x = np.clip(min_x, a_min=0, a_max=w) + min_y = np.clip(min_y, a_min=0, a_max=h) + max_x = np.clip(max_x, a_min=min_x, a_max=w) + max_y = np.clip(max_y, a_min=min_y, a_max=h) + results[key] = np.stack([min_x, min_y, max_x, max_y], axis=-1).astype( + results[key].dtype + ) + + def _shear_masks( + self, + results, + magnitude, + direction="horizontal", + fill_val=0, + interpolation="bilinear", + ): + """Shear the masks.""" + h, w, c = results["img_shape"] + for key in results.get("mask_fields", []): + masks = results[key] + results[key] = masks.shear( + (h, w), + magnitude, + direction, + border_value=fill_val, + interpolation=interpolation, + ) + + def _shear_seg( + self, + results, + magnitude, + direction="horizontal", + fill_val=255, + interpolation="bilinear", + ): + """Shear the segmentation maps.""" + for key in results.get("seg_fields", []): + seg = results[key] + results[key] = mmcv.imshear( + seg, + magnitude, + direction, + border_value=fill_val, + interpolation=interpolation, + ).astype(seg.dtype) + + def __repr__(self): + repr_str = super().__repr__() + return ("\n").join( + repr_str.split("\n")[:-1] + + [f"x_magnitude={self.x}", f"y_magnitude={self.y}"] + + repr_str.split("\n")[-1:] + ) + + +@PIPELINES.register_module() +class RandErase(GeometricAugmentation): + def __init__( + self, + n_iterations=None, + size=None, + squared: bool = True, + patches=None, + **kwargs, + ): + kwargs.update(min_size=None) + super().__init__(**kwargs) + self.n_iterations = n_iterations + self.size = size + self.squared = squared + self.patches = patches + + def get_magnitude(self, results): + magnitude = {} + if self.random_magnitude: + n_iterations = self._get_erase_cycle() + patches = [] + h, w, c = results["img_shape"] + for i in range(n_iterations): + # random sample patch size in the image + ph, pw = self._get_patch_size(h, w) + # random sample patch left top in the image + px, py = np.random.randint(0, w - pw), np.random.randint(0, h - ph) + patches.append([px, py, px + pw, py + ph]) + magnitude["patches"] = patches + else: + assert self.patches is not None + magnitude["patches"] = self.patches + + return magnitude + + def _get_erase_cycle(self): + if isinstance(self.n_iterations, int): + n_iterations = self.n_iterations + else: + assert ( + isinstance(self.n_iterations, (tuple, list)) + and len(self.n_iterations) == 2 + ) + n_iterations = np.random.randint(*self.n_iterations) + return n_iterations + + def _get_patch_size(self, h, w): + if isinstance(self.size, float): + assert 0 < self.size < 1 + return int(self.size * h), int(self.size * w) + else: + assert isinstance(self.size, (tuple, list)) + assert len(self.size) == 2 + assert 0 <= self.size[0] < 1 and 0 <= self.size[1] < 1 + w_ratio = np.random.random() * (self.size[1] - self.size[0]) + self.size[0] + h_ratio = w_ratio + + if not self.squared: + h_ratio = ( + np.random.random() * (self.size[1] - self.size[0]) + self.size[0] + ) + return int(h_ratio * h), int(w_ratio * w) + + def apply(self, results, patches: list): + for patch in patches: + self._erase_image(results, patch, fill_val=self.img_fill_val) + self._erase_mask(results, patch) + self._erase_seg(results, patch, fill_val=self.seg_ignore_label) + return results + + def _erase_image(self, results, patch, fill_val=128): + for key in results.get("img_fields", ["img"]): + tmp = results[key].copy() + x1, y1, x2, y2 = patch + tmp[y1:y2, x1:x2, :] = fill_val + results[key] = tmp + + def _erase_mask(self, results, patch, fill_val=0): + for key in results.get("mask_fields", []): + masks = results[key] + if isinstance(masks, PolygonMasks): + # convert mask to bitmask + masks = masks.to_bitmap() + x1, y1, x2, y2 = patch + tmp = masks.masks.copy() + tmp[:, y1:y2, x1:x2] = fill_val + masks = BitmapMasks(tmp, masks.height, masks.width) + results[key] = masks + + def _erase_seg(self, results, patch, fill_val=0): + for key in results.get("seg_fields", []): + seg = results[key].copy() + x1, y1, x2, y2 = patch + seg[y1:y2, x1:x2] = fill_val + results[key] = seg + + +@PIPELINES.register_module() +class RecomputeBox(object): + def __init__(self, record=False): + self.record = record + + def __call__(self, results): + if self.record: + if "aug_info" not in results: + results["aug_info"] = [] + results["aug_info"].append(dict(type="RecomputeBox")) + _, bbox2mask, _ = bbox2fields() + for key in results.get("bbox_fields", []): + mask_key = bbox2mask.get(key) + if mask_key in results: + masks = results[mask_key] + results[key] = self._recompute_bbox(masks) + return results + + def enable_record(self, mode: bool = True): + self.record = mode + + def _recompute_bbox(self, masks): + boxes = np.zeros(masks.masks.shape[0], 4, dtype=np.float32) + x_any = np.any(masks.masks, axis=1) + y_any = np.any(masks.masks, axis=2) + for idx in range(masks.masks.shape[0]): + x = np.where(x_any[idx, :])[0] + y = np.where(y_any[idx, :])[0] + if len(x) > 0 and len(y) > 0: + boxes[idx, :] = np.array( + [x[0], y[0], x[-1] + 1, y[-1] + 1], dtype=np.float32 + ) + return boxes + + +# TODO: Implement Augmentation Inside Box + + +@PIPELINES.register_module() +class RandResize(transforms.Resize): + def __init__(self, record=False, **kwargs): + super().__init__(**kwargs) + self.record = record + + def __call__(self, results): + results = super().__call__(results) + if self.record: + scale_factor = results["scale_factor"] + GTrans.apply(results, "scale", sx=scale_factor[0], sy=scale_factor[1]) + + if "aug_info" not in results: + results["aug_info"] = [] + new_h, new_w = results["img"].shape[:2] + results["aug_info"].append( + dict( + type=self.__class__.__name__, + record=False, + img_scale=(new_w, new_h), + keep_ratio=False, + bbox_clip_border=self.bbox_clip_border, + backend=self.backend, + ) + ) + return results + + def enable_record(self, mode: bool = True): + self.record = mode + + +@PIPELINES.register_module() +class RandFlip(transforms.RandomFlip): + def __init__(self, record=False, **kwargs): + super().__init__(**kwargs) + self.record = record + + def __call__(self, results): + results = super().__call__(results) + if self.record: + if "aug_info" not in results: + results["aug_info"] = [] + if results["flip"]: + GTrans.apply( + results, + "flip", + direction=results["flip_direction"], + shape=results["img_shape"][:2], + ) + results["aug_info"].append( + dict( + type=self.__class__.__name__, + record=False, + flip_ratio=1.0, + direction=results["flip_direction"], + ) + ) + else: + results["aug_info"].append( + dict( + type=self.__class__.__name__, + record=False, + flip_ratio=0.0, + direction="vertical", + ) + ) + return results + + def enable_record(self, mode: bool = True): + self.record = mode + + +@PIPELINES.register_module() +class MultiBranch(object): + def __init__(self, **transform_group): + self.transform_group = {k: BaseCompose(v) for k, v in transform_group.items()} + + def __call__(self, results): + multi_results = [] + for k, v in self.transform_group.items(): + res = v(copy.deepcopy(results)) + if res is None: + return None + # res["img_metas"]["tag"] = k + multi_results.append(res) + return multi_results diff --git a/ssod/datasets/pseudo_coco.py b/ssod/datasets/pseudo_coco.py new file mode 100644 index 0000000..6db1666 --- /dev/null +++ b/ssod/datasets/pseudo_coco.py @@ -0,0 +1,86 @@ +import copy +import json + +from mmdet.datasets import DATASETS, CocoDataset +from mmdet.datasets.api_wrappers import COCO + + +@DATASETS.register_module() +class PseudoCocoDataset(CocoDataset): + def __init__( + self, + ann_file, + pseudo_ann_file, + pipeline, + confidence_threshold=0.9, + classes=None, + data_root=None, + img_prefix="", + seg_prefix=None, + proposal_file=None, + test_mode=False, + filter_empty_gt=True, + ): + self.confidence_threshold = confidence_threshold + self.pseudo_ann_file = pseudo_ann_file + + super().__init__( + ann_file, + pipeline, + classes, + data_root, + img_prefix, + seg_prefix, + proposal_file, + test_mode=test_mode, + filter_empty_gt=filter_empty_gt, + ) + + def load_pesudo_targets(self, pseudo_ann_file): + with open(pseudo_ann_file) as f: + pesudo_anns = json.load(f) + print(f"loading {len(pesudo_anns)} results") + + def _add_attr(dict_terms, **kwargs): + new_dict = copy.copy(dict_terms) + new_dict.update(**kwargs) + return new_dict + + def _compute_area(bbox): + _, _, w, h = bbox + return w * h + + pesudo_anns = [ + _add_attr(ann, id=i, area=_compute_area(ann["bbox"])) + for i, ann in enumerate(pesudo_anns) + if ann["score"] > self.confidence_threshold + ] + print( + f"With {len(pesudo_anns)} results over threshold {self.confidence_threshold}" + ) + + return pesudo_anns + + def load_annotations(self, ann_file): + """Load annotation from COCO style annotation file. + + Args: + ann_file (str): Path of annotation file. + Returns: + list[dict]: Annotation info from COCO api. + """ + pesudo_anns = self.load_pesudo_targets(self.pseudo_ann_file) + self.coco = COCO(ann_file) + self.coco.dataset["annotations"] = pesudo_anns + self.coco.createIndex() + + self.cat_ids = self.coco.get_cat_ids(cat_names=self.CLASSES) + self.cat2label = {cat_id: i for i, cat_id in enumerate(self.cat_ids)} + self.img_ids = self.coco.get_img_ids() + data_infos = [] + for i in self.img_ids: + info = self.coco.load_imgs([i])[0] + info["filename"] = info["file_name"] + data_infos.append(info) + + return data_infos diff --git a/ssod/datasets/samplers/__init__.py b/ssod/datasets/samplers/__init__.py new file mode 100644 index 0000000..5bdc225 --- /dev/null +++ b/ssod/datasets/samplers/__init__.py @@ -0,0 +1,4 @@ +from .semi_sampler import DistributedGroupSemiBalanceSampler +__all__ = [ + "DistributedGroupSemiBalanceSampler", +] diff --git a/ssod/datasets/samplers/semi_sampler.py b/ssod/datasets/samplers/semi_sampler.py new file mode 100644 index 0000000..0726aff --- /dev/null +++ b/ssod/datasets/samplers/semi_sampler.py @@ -0,0 +1,196 @@ +from __future__ import division + +import numpy as np +import torch +from mmcv.runner import get_dist_info +from torch.utils.data import Sampler, WeightedRandomSampler + +from ..builder import SAMPLERS + + +@SAMPLERS.register_module() +class DistributedGroupSemiBalanceSampler(Sampler): + def __init__( + self, + dataset, + by_prob=False, + epoch_length=7330, + sample_ratio=None, + samples_per_gpu=1, + num_replicas=None, + rank=None, + **kwargs + ): + _rank, _num_replicas = get_dist_info() + if num_replicas is None: + num_replicas = _num_replicas + if rank is None: + rank = _rank + + self.dataset = dataset + self.samples_per_gpu = samples_per_gpu + self.num_replicas = num_replicas + self.rank = rank + self.epoch = 0 + self.by_prob = by_prob + + assert hasattr(self.dataset, "flag") + self.flag = self.dataset.flag + self.group_sizes = np.bincount(self.flag) + self.num_samples = 0 + self.cumulative_sizes = dataset.cumulative_sizes + # decide the frequency to sample each kind of datasets + if not isinstance(sample_ratio, list): + sample_ratio = [sample_ratio] * len(self.cumulative_sizes) + self.sample_ratio = sample_ratio + self.sample_ratio = [ + int(sr / min(self.sample_ratio)) for sr in self.sample_ratio + ] + self.size_of_dataset = [] + cumulative_sizes = [0] + self.cumulative_sizes + + for i, _ in enumerate(self.group_sizes): + size_of_dataset = 0 + cur_group_inds = np.where(self.flag == i)[0] + for j in range(len(self.cumulative_sizes)): + cur_group_cur_dataset = np.where( + np.logical_and( + cur_group_inds > cumulative_sizes[j], + cur_group_inds < cumulative_sizes[j + 1], + ) + )[0] + size_per_dataset = len(cur_group_cur_dataset) + size_of_dataset = max( + size_of_dataset, np.ceil(size_per_dataset / self.sample_ratio[j]) + ) + + self.size_of_dataset.append( + int(np.ceil(size_of_dataset / self.samples_per_gpu / self.num_replicas)) + * self.samples_per_gpu + ) + for j in range(len(self.cumulative_sizes)): + self.num_samples += self.size_of_dataset[-1] * self.sample_ratio[j] + + self.total_size = self.num_samples * self.num_replicas + group_factor = [g / sum(self.group_sizes) for g in self.group_sizes] + self.epoch_length = [int(np.round(gf * epoch_length)) for gf in group_factor] + self.epoch_length[-1] = epoch_length - sum(self.epoch_length[:-1]) + + def __iter__(self): + # deterministically shuffle based on epoch + g = torch.Generator() + g.manual_seed(self.epoch) + indices = [] + cumulative_sizes = [0] + self.cumulative_sizes + for i, size in enumerate(self.group_sizes): + if size > 0: + indice = np.where(self.flag == i)[0] + assert len(indice) == size + indice_per_dataset = [] + + for j in range(len(self.cumulative_sizes)): + indice_per_dataset.append( + indice[ + np.where( + np.logical_and( + indice >= cumulative_sizes[j], + indice < cumulative_sizes[j + 1], + ) + )[0] + ] + ) + + shuffled_indice_per_dataset = [ + s[list(torch.randperm(int(s.shape[0]), generator=g).numpy())] + for s in indice_per_dataset + ] + # split into + total_indice = [] + batch_idx = 0 + # pdb.set_trace() + while batch_idx < self.epoch_length[i] * self.num_replicas: + ratio = [x / sum(self.sample_ratio) for x in self.sample_ratio] + if self.by_prob: + indicator = list( + WeightedRandomSampler( + ratio, + self.samples_per_gpu, + replacement=True, + generator=g, + ) + ) + unique, counts = np.unique(indicator, return_counts=True) + ratio = [0] * len(shuffled_indice_per_dataset) + for u, c in zip(unique, counts): + ratio[u] = c + assert len(ratio) == 2, "Only two set is suppoted" + if ratio[0] == 0: + ratio[0] = 1 + ratio[1] -= 1 + elif ratio[1] == 0: + ratio[1] = 1 + ratio[0] -= 1 + + ratio = [r / sum(ratio) for r in ratio] + + # num of each dataset + ratio = [int(r * self.samples_per_gpu) for r in ratio] + + ratio[-1] = self.samples_per_gpu - sum(ratio[:-1]) + selected = [] + # print(ratio) + for j in range(len(shuffled_indice_per_dataset)): + if len(shuffled_indice_per_dataset[j]) < ratio[j]: + shuffled_indice_per_dataset[j] = np.concatenate( + ( + shuffled_indice_per_dataset[j], + indice_per_dataset[j][ + list( + torch.randperm( + int(indice_per_dataset[j].shape[0]), + generator=g, + ).numpy() + ) + ], + ) + ) + + selected.append(shuffled_indice_per_dataset[j][: ratio[j]]) + shuffled_indice_per_dataset[j] = shuffled_indice_per_dataset[j][ + ratio[j] : + ] + selected = np.concatenate(selected) + total_indice.append(selected) + batch_idx += 1 + # print(self.size_of_dataset) + indice = np.concatenate(total_indice) + indices.append(indice) + indices = np.concatenate(indices) # k + indices = [ + indices[j] + for i in list( + torch.randperm( + len(indices) // self.samples_per_gpu, + generator=g, + ) + ) + for j in range( + i * self.samples_per_gpu, + (i + 1) * self.samples_per_gpu, + ) + ] + + offset = len(self) * self.rank + indices = indices[offset : offset + len(self)] + assert len(indices) == len(self) + return iter(indices) + + def __len__(self): + return sum(self.epoch_length) * self.samples_per_gpu + + def set_epoch(self, epoch): + self.epoch = epoch + # duplicated, implement it by weight instead of sampling + # def update_sample_ratio(self): + # if self.dynamic_step is not None: + # self.sample_ratio = [d(self.epoch) for d in self.dynamic] diff --git a/ssod/models/__init__.py b/ssod/models/__init__.py new file mode 100644 index 0000000..8e811cf --- /dev/null +++ b/ssod/models/__init__.py @@ -0,0 +1 @@ +from .soft_teacher import SoftTeacher \ No newline at end of file diff --git a/ssod/models/multi_stream_detector.py b/ssod/models/multi_stream_detector.py new file mode 100644 index 0000000..ae153b3 --- /dev/null +++ b/ssod/models/multi_stream_detector.py @@ -0,0 +1,84 @@ +from typing import Dict +from mmdet.models import BaseDetector, TwoStageDetector + + +class MultiSteamDetector(BaseDetector): + def __init__( + self, model: Dict[str, TwoStageDetector], train_cfg=None, test_cfg=None + ): + super(MultiSteamDetector, self).__init__() + self.submodules = list(model.keys()) + for k, v in model.items(): + setattr(self, k, v) + + self.train_cfg = train_cfg + self.test_cfg = test_cfg + self.inference_on = self.test_cfg.get("inference_on", self.submodules[0]) + + def model(self, **kwargs) -> TwoStageDetector: + if "submodule" in kwargs: + assert ( + kwargs["submodule"] in self.submodules + ), "Detector does not contain submodule {}".format(kwargs["submodule"]) + model: TwoStageDetector = getattr(self, kwargs["submodule"]) + else: + model: TwoStageDetector = getattr(self, self.inference_on) + return model + def freeze(self,model_ref:str): + assert model_ref in self.submodules + model = getattr(self, model_ref) + model.eval() + for param in model.parameters(): + param.requires_grad=False + def forward_test(self, imgs, img_metas, **kwargs): + + return self.model(**kwargs).forward_test(imgs, img_metas, **kwargs) + + async def aforward_test(self, *, img, img_metas, **kwargs): + return self.model(**kwargs).aforward_test(img, img_metas, **kwargs) + + def extract_feat(self, imgs): + return self.model().extract_feat(imgs) + + async def aforward_test(self, *, img, img_metas, **kwargs): + return self.model(**kwargs).aforward_test(img, img_metas, **kwargs) + + def aug_test(self, imgs, img_metas, **kwargs): + return self.model(**kwargs).aug_test(imgs, img_metas, **kwargs) + + def simple_test(self, img, img_metas, **kwargs): + return self.model(**kwargs).simple_test(img, img_metas, **kwargs) + + async def async_simple_test(self, img, img_metas, **kwargs): + return self.model(**kwargs).async_simple_test(img, img_metas, **kwargs) + + def show_result( + self, + img, + result, + score_thr=0.3, + bbox_color=(72, 101, 241), + text_color=(72, 101, 241), + mask_color=None, + thickness=2, + font_size=13, + win_name="", + show=False, + wait_time=0, + out_file=None, + ): + return self.model().show_result( + self, + img, + result, + score_thr, + bbox_color, + text_color, + mask_color, + thickness, + font_size, + win_name, + show, + wait_time, + out_file, + ) diff --git a/ssod/models/soft_teacher.py b/ssod/models/soft_teacher.py new file mode 100644 index 0000000..380f919 --- /dev/null +++ b/ssod/models/soft_teacher.py @@ -0,0 +1,511 @@ +import torch +from mmcv.runner.fp16_utils import force_fp32 +from mmdet.core import bbox2roi, multi_apply +from mmdet.models import DETECTORS, build_detector + +from ssod.utils.structure_utils import dict_split, weighted_loss +from ssod.utils import log_image_with_boxes, log_every_n + +from .multi_stream_detector import MultiSteamDetector +from .utils import Transform2D, filter_invalid + + +@DETECTORS.register_module() +class SoftTeacher(MultiSteamDetector): + def __init__(self, model: dict, train_cfg=None, test_cfg=None): + super(SoftTeacher, self).__init__( + dict(teacher=build_detector(model), student=build_detector(model)), + train_cfg=train_cfg, + test_cfg=test_cfg, + ) + if train_cfg is not None: + self.freeze("teacher") + self.unsup_weight = self.train_cfg.unsup_weight + + def forward_train(self, img, img_metas, **kwargs): + super().forward_train(img, img_metas, **kwargs) + kwargs.update({"img": img}) + kwargs.update({"img_metas": img_metas}) + kwargs.update({"tag": [meta["tag"] for meta in img_metas]}) + data_groups = dict_split(kwargs, "tag") + for _, v in data_groups.items(): + v.pop("tag") + + loss = {} + #! Warnings: By splitting losses for supervised data and unsupervised data with different names, + #! it means that at least one sample for each group should be provided on each gpu. + #! In some situation, we can only put one image per gpu, we have to return the sum of loss + #! and log the loss with logger instead. Or it will try to sync tensors don't exist. + if "sup" in data_groups: + gt_bboxes = data_groups["sup"]["gt_bboxes"] + log_every_n( + {"sup_gt_num": sum([len(bbox) for bbox in gt_bboxes]) / len(gt_bboxes)} + ) + sup_loss = self.student.forward_train(**data_groups["sup"]) + sup_loss = {"sup_" + k: v for k, v in sup_loss.items()} + loss.update(**sup_loss) + if "unsup_student" in data_groups: + unsup_loss = weighted_loss( + self.foward_unsup_train( + data_groups["unsup_teacher"], data_groups["unsup_student"] + ), + weight=self.unsup_weight, + ) + unsup_loss = {"unsup_" + k: v for k, v in unsup_loss.items()} + loss.update(**unsup_loss) + + return loss + + def foward_unsup_train(self, teacher_data, student_data): + # sort the teacher and student input to avoid some bugs + tnames = [meta["filename"] for meta in teacher_data["img_metas"]] + snames = [meta["filename"] for meta in student_data["img_metas"]] + tidx = [tnames.index(name) for name in snames] + with torch.no_grad(): + teacher_info = self.extract_teacher_info( + teacher_data["img"][ + torch.Tensor(tidx).to(teacher_data["img"].device).long() + ], + [teacher_data["img_metas"][idx] for idx in tidx], + [teacher_data["proposals"][idx] for idx in tidx] + if ("proposals" in teacher_data) + and (teacher_data["proposals"] is not None) + else None, + ) + student_info = self.extract_student_info(**student_data) + + return self.compute_pseudo_label_loss(student_info, teacher_info) + + def compute_pseudo_label_loss(self, student_info, teacher_info): + M = self._get_trans_mat( + teacher_info["transform_matrix"], student_info["transform_matrix"] + ) + + pseudo_bboxes = self._transform_bbox( + teacher_info["det_bboxes"], + M, + [meta["img_shape"] for meta in student_info["img_metas"]], + ) + pseudo_labels = teacher_info["det_labels"] + loss = {} + rpn_loss, proposal_list = self.rpn_loss( + student_info["rpn_out"], + pseudo_bboxes, + student_info["img_metas"], + student_info=student_info, + ) + loss.update(rpn_loss) + if proposal_list is not None: + student_info["proposals"] = proposal_list + if self.train_cfg.use_teacher_proposal: + proposals = self._transform_bbox( + teacher_info["proposals"], + M, + [meta["img_shape"] for meta in student_info["img_metas"]], + ) + else: + proposals = student_info["proposals"] + + loss.update( + self.unsup_rcnn_cls_loss( + student_info["backbone_feature"], + student_info["img_metas"], + proposals, + pseudo_bboxes, + pseudo_labels, + teacher_info["transform_matrix"], + student_info["transform_matrix"], + teacher_info["img_metas"], + teacher_info["backbone_feature"], + student_info=student_info, + ) + ) + loss.update( + self.unsup_rcnn_reg_loss( + student_info["backbone_feature"], + student_info["img_metas"], + proposals, + pseudo_bboxes, + pseudo_labels, + student_info=student_info, + ) + ) + return loss + + def rpn_loss( + self, + rpn_out, + pseudo_bboxes, + img_metas, + gt_bboxes_ignore=None, + student_info=None, + **kwargs, + ): + if self.student.with_rpn: + gt_bboxes = [] + for bbox in pseudo_bboxes: + bbox, _, _ = filter_invalid( + bbox[:, :4], + score=bbox[ + :, 4 + ], # TODO: replace with foreground score, here is classification score, + thr=self.train_cfg.rpn_pseudo_threshold, + min_size=self.train_cfg.min_pseduo_box_size, + ) + gt_bboxes.append(bbox) + log_every_n( + {"rpn_gt_num": sum([len(bbox) for bbox in gt_bboxes]) / len(gt_bboxes)} + ) + loss_inputs = rpn_out + [[bbox.float() for bbox in gt_bboxes], img_metas] + losses = self.student.rpn_head.loss( + *loss_inputs, gt_bboxes_ignore=gt_bboxes_ignore + ) + proposal_cfg = self.student.train_cfg.get( + "rpn_proposal", self.student.test_cfg.rpn + ) + proposal_list = self.student.rpn_head.get_bboxes( + *rpn_out, img_metas, cfg=proposal_cfg + ) + log_image_with_boxes( + "rpn", + student_info["img"][0], + pseudo_bboxes[0][:, :4], + bbox_tag="rpn_pseudo_label", + scores=pseudo_bboxes[0][:, 4], + interval=500, + img_norm_cfg=student_info["img_metas"][0]["img_norm_cfg"], + ) + return losses, proposal_list + else: + return {}, None + + def unsup_rcnn_cls_loss( + self, + feat, + img_metas, + proposal_list, + pseudo_bboxes, + pseudo_labels, + teacher_transMat, + student_transMat, + teacher_img_metas, + teacher_feat, + student_info=None, + **kwargs, + ): + gt_bboxes, gt_labels, _ = multi_apply( + filter_invalid, + [bbox[:, :4] for bbox in pseudo_bboxes], + pseudo_labels, + [bbox[:, 4] for bbox in pseudo_bboxes], + thr=self.train_cfg.cls_pseudo_threshold, + ) + log_every_n( + {"rcnn_cls_gt_num": sum([len(bbox) for bbox in gt_bboxes]) / len(gt_bboxes)} + ) + sampling_results = self.get_sampling_result( + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + ) + selected_bboxes = [res.bboxes[:, :4] for res in sampling_results] + rois = bbox2roi(selected_bboxes) + bbox_results = self.student.roi_head._bbox_forward(feat, rois) + bbox_targets = self.student.roi_head.bbox_head.get_targets( + sampling_results, gt_bboxes, gt_labels, self.student.train_cfg.rcnn + ) + M = self._get_trans_mat(student_transMat, teacher_transMat) + aligned_proposals = self._transform_bbox( + selected_bboxes, + M, + [meta["img_shape"] for meta in teacher_img_metas], + ) + with torch.no_grad(): + _, _scores = self.teacher.roi_head.simple_test_bboxes( + teacher_feat, + teacher_img_metas, + aligned_proposals, + None, + rescale=False, + ) + bg_score = torch.cat([_score[:, -1] for _score in _scores]) + assigned_label, _, _, _ = bbox_targets + neg_inds = assigned_label == self.student.roi_head.bbox_head.num_classes + bbox_targets[1][neg_inds] = bg_score[neg_inds].detach() + loss = self.student.roi_head.bbox_head.loss( + bbox_results["cls_score"], + bbox_results["bbox_pred"], + rois, + *bbox_targets, + reduction_override="none", + ) + loss["loss_cls"] = loss["loss_cls"].sum() / max(bbox_targets[1].sum(), 1.0) + loss["loss_bbox"] = loss["loss_bbox"].sum() / max( + bbox_targets[1].size()[0], 1.0 + ) + if len(gt_bboxes[0]) > 0: + log_image_with_boxes( + "rcnn_cls", + student_info["img"][0], + gt_bboxes[0], + bbox_tag="pseudo_label", + labels=gt_labels[0], + class_names=self.CLASSES, + interval=500, + img_norm_cfg=student_info["img_metas"][0]["img_norm_cfg"], + ) + return loss + + def unsup_rcnn_reg_loss( + self, + feat, + img_metas, + proposal_list, + pseudo_bboxes, + pseudo_labels, + student_info=None, + **kwargs, + ): + gt_bboxes, gt_labels, _ = multi_apply( + filter_invalid, + [bbox[:, :4] for bbox in pseudo_bboxes], + pseudo_labels, + [-bbox[:, 5:].mean(dim=-1) for bbox in pseudo_bboxes], + thr=-self.train_cfg.reg_pseudo_threshold, + ) + log_every_n( + {"rcnn_reg_gt_num": sum([len(bbox) for bbox in gt_bboxes]) / len(gt_bboxes)} + ) + loss_bbox = self.student.roi_head.forward_train( + feat, img_metas, proposal_list, gt_bboxes, gt_labels, **kwargs + )["loss_bbox"] + if len(gt_bboxes[0]) > 0: + log_image_with_boxes( + "rcnn_reg", + student_info["img"][0], + gt_bboxes[0], + bbox_tag="pseudo_label", + labels=gt_labels[0], + class_names=self.CLASSES, + interval=500, + img_norm_cfg=student_info["img_metas"][0]["img_norm_cfg"], + ) + return {"loss_bbox": loss_bbox} + + def get_sampling_result( + self, + img_metas, + proposal_list, + gt_bboxes, + gt_labels, + gt_bboxes_ignore=None, + **kwargs, + ): + num_imgs = len(img_metas) + if gt_bboxes_ignore is None: + gt_bboxes_ignore = [None for _ in range(num_imgs)] + sampling_results = [] + for i in range(num_imgs): + assign_result = self.student.roi_head.bbox_assigner.assign( + proposal_list[i], gt_bboxes[i], gt_bboxes_ignore[i], gt_labels[i] + ) + sampling_result = self.student.roi_head.bbox_sampler.sample( + assign_result, + proposal_list[i], + gt_bboxes[i], + gt_labels[i], + ) + sampling_results.append(sampling_result) + return sampling_results + + @force_fp32(apply_to=["bboxes", "trans_mat"]) + def _transform_bbox(self, bboxes, trans_mat, max_shape): + bboxes = Transform2D.transform_bboxes(bboxes, trans_mat, max_shape) + return bboxes + + @force_fp32(apply_to=["a", "b"]) + def _get_trans_mat(self, a, b): + return [bt @ at.inverse() for bt, at in zip(b, a)] + + def extract_student_info(self, img, img_metas, proposals=None, **kwargs): + student_info = {} + student_info["img"] = img + feat = self.student.extract_feat(img) + student_info["backbone_feature"] = feat + if self.student.with_rpn: + rpn_out = self.student.rpn_head(feat) + student_info["rpn_out"] = list(rpn_out) + student_info["img_metas"] = img_metas + student_info["proposals"] = proposals + student_info["transform_matrix"] = [ + torch.from_numpy(meta["transform_matrix"]).float().to(feat[0][0].device) + for meta in img_metas + ] + return student_info + + def extract_teacher_info(self, img, img_metas, proposals=None, **kwargs): + teacher_info = {} + feat = self.teacher.extract_feat(img) + teacher_info["backbone_feature"] = feat + if proposals is None: + proposal_cfg = self.teacher.train_cfg.get( + "rpn_proposal", self.teacher.test_cfg.rpn + ) + rpn_out = list(self.teacher.rpn_head(feat)) + proposal_list = self.teacher.rpn_head.get_bboxes( + *rpn_out, img_metas, cfg=proposal_cfg + ) + else: + proposal_list = proposals + teacher_info["proposals"] = proposal_list + + proposal_list, proposal_label_list = self.teacher.roi_head.simple_test_bboxes( + feat, img_metas, proposal_list, self.teacher.test_cfg.rcnn, rescale=False + ) + + proposal_list = [p.to(feat[0].device) for p in proposal_list] + proposal_list = [ + p if p.shape[0] > 0 else p.new_zeros(0, 5) for p in proposal_list + ] + proposal_label_list = [p.to(feat[0].device) for p in proposal_label_list] + # filter invalid box roughly + if isinstance(self.train_cfg.pseudo_label_initial_score_thr, float): + thr = self.train_cfg.pseudo_label_initial_score_thr + else: + # TODO: use dynamic threshold + raise NotImplementedError("Dynamic Threshold is not implemented yet.") + proposal_list, proposal_label_list, _ = list( + zip( + *[ + filter_invalid( + proposal, + proposal_label, + proposal[:, -1], + thr=thr, + min_size=self.train_cfg.min_pseduo_box_size, + ) + for proposal, proposal_label in zip( + proposal_list, proposal_label_list + ) + ] + ) + ) + det_bboxes = proposal_list + reg_unc = self.compute_uncertainty_with_aug( + feat, img_metas, proposal_list, proposal_label_list + ) + det_bboxes = [ + torch.cat([bbox, unc], dim=-1) for bbox, unc in zip(det_bboxes, reg_unc) + ] + det_labels = proposal_label_list + teacher_info["det_bboxes"] = det_bboxes + teacher_info["det_labels"] = det_labels + teacher_info["transform_matrix"] = [ + torch.from_numpy(meta["transform_matrix"]).float().to(feat[0][0].device) + for meta in img_metas + ] + teacher_info["img_metas"] = img_metas + return teacher_info + + def compute_uncertainty_with_aug( + self, feat, img_metas, proposal_list, proposal_label_list + ): + auged_proposal_list = self.aug_box( + proposal_list, self.train_cfg.jitter_times, self.train_cfg.jitter_scale + ) + # flatten + auged_proposal_list = [ + auged.reshape(-1, auged.shape[-1]) for auged in auged_proposal_list + ] + + bboxes, _ = self.teacher.roi_head.simple_test_bboxes( + feat, + img_metas, + auged_proposal_list, + None, + rescale=False, + ) + reg_channel = max([bbox.shape[-1] for bbox in bboxes]) // 4 + bboxes = [ + bbox.reshape(self.train_cfg.jitter_times, -1, bbox.shape[-1]) + if bbox.numel() > 0 + else bbox.new_zeros(self.train_cfg.jitter_times, 0, 4 * reg_channel).float() + for bbox in bboxes + ] + + box_unc = [bbox.std(dim=0) for bbox in bboxes] + bboxes = [bbox.mean(dim=0) for bbox in bboxes] + # scores = [score.mean(dim=0) for score in scores] + if reg_channel != 1: + bboxes = [ + bbox.reshape(bbox.shape[0], reg_channel, 4)[ + torch.arange(bbox.shape[0]), label + ] + for bbox, label in zip(bboxes, proposal_label_list) + ] + box_unc = [ + unc.reshape(unc.shape[0], reg_channel, 4)[ + torch.arange(unc.shape[0]), label + ] + for unc, label in zip(box_unc, proposal_label_list) + ] + + box_shape = [(bbox[:, 2:4] - bbox[:, :2]).clamp(min=1.0) for bbox in bboxes] + # relative unc + box_unc = [ + unc / wh[:, None, :].expand(-1, 2, 2).reshape(-1, 4) + if wh.numel() > 0 + else unc + for unc, wh in zip(box_unc, box_shape) + ] + return box_unc + + @staticmethod + def aug_box(boxes, times=1, frac=0.06): + def _aug_single(box): + # random translate + # TODO: random flip or something + box_scale = box[:, 2:4] - box[:, :2] + box_scale = ( + box_scale.clamp(min=1)[:, None, :].expand(-1, 2, 2).reshape(-1, 4) + ) + aug_scale = box_scale * frac # [n,4] + + offset = ( + torch.randn(times, box.shape[0], 4, device=box.device) + * aug_scale[None, ...] + ) + new_box = box.clone()[None, ...].expand(times, box.shape[0], -1) + return torch.cat( + [new_box[:, :, :4].clone() + offset, new_box[:, :, 4:]], dim=-1 + ) + + return [_aug_single(box) for box in boxes] + + def _load_from_state_dict( + self, + state_dict, + prefix, + local_metadata, + strict, + missing_keys, + unexpected_keys, + error_msgs, + ): + if not any(["student" in key or "teacher" in key for key in state_dict.keys()]): + keys = list(state_dict.keys()) + state_dict.update({"teacher." + k: state_dict[k] for k in keys}) + state_dict.update({"student." + k: state_dict[k] for k in keys}) + for k in keys: + state_dict.pop(k) + + return super()._load_from_state_dict( + state_dict, + prefix, + local_metadata, + strict, + missing_keys, + unexpected_keys, + error_msgs, + ) diff --git a/ssod/models/utils/__init__.py b/ssod/models/utils/__init__.py new file mode 100644 index 0000000..5b1fb55 --- /dev/null +++ b/ssod/models/utils/__init__.py @@ -0,0 +1 @@ +from .bbox_utils import Transform2D, filter_invalid diff --git a/ssod/models/utils/bbox_utils.py b/ssod/models/utils/bbox_utils.py new file mode 100644 index 0000000..6614679 --- /dev/null +++ b/ssod/models/utils/bbox_utils.py @@ -0,0 +1,255 @@ +import warnings +from collections.abc import Sequence +from typing import List, Optional, Tuple, Union + +import numpy as np +import torch +from mmdet.core.mask.structures import BitmapMasks +from torch.nn import functional as F + + +def bbox2points(box): + min_x, min_y, max_x, max_y = torch.split(box[:, :4], [1, 1, 1, 1], dim=1) + + return torch.cat( + [min_x, min_y, max_x, min_y, max_x, max_y, min_x, max_y], dim=1 + ).reshape( + -1, 2 + ) # n*4,2 + + +def points2bbox(point, max_w, max_h): + point = point.reshape(-1, 4, 2) + if point.size()[0] > 0: + min_xy = point.min(dim=1)[0] + max_xy = point.max(dim=1)[0] + xmin = min_xy[:, 0].clamp(min=0, max=max_w) + ymin = min_xy[:, 1].clamp(min=0, max=max_h) + xmax = max_xy[:, 0].clamp(min=0, max=max_w) + ymax = max_xy[:, 1].clamp(min=0, max=max_h) + min_xy = torch.stack([xmin, ymin], dim=1) + max_xy = torch.stack([xmax, ymax], dim=1) + return torch.cat([min_xy, max_xy], dim=1) # n,4 + else: + return point.new_zeros(0, 4) + + +def check_is_tensor(obj): + """Checks whether the supplied object is a tensor.""" + if not isinstance(obj, torch.Tensor): + raise TypeError("Input type is not a torch.Tensor. Got {}".format(type(obj))) + + +def normal_transform_pixel( + height: int, + width: int, + eps: float = 1e-14, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, +) -> torch.Tensor: + tr_mat = torch.tensor( + [[1.0, 0.0, -1.0], [0.0, 1.0, -1.0], [0.0, 0.0, 1.0]], + device=device, + dtype=dtype, + ) # 3x3 + + # prevent divide by zero bugs + width_denom: float = eps if width == 1 else width - 1.0 + height_denom: float = eps if height == 1 else height - 1.0 + + tr_mat[0, 0] = tr_mat[0, 0] * 2.0 / width_denom + tr_mat[1, 1] = tr_mat[1, 1] * 2.0 / height_denom + + return tr_mat.unsqueeze(0) # 1x3x3 + + +def normalize_homography( + dst_pix_trans_src_pix: torch.Tensor, + dsize_src: Tuple[int, int], + dsize_dst: Tuple[int, int], +) -> torch.Tensor: + check_is_tensor(dst_pix_trans_src_pix) + + if not ( + len(dst_pix_trans_src_pix.shape) == 3 + or dst_pix_trans_src_pix.shape[-2:] == (3, 3) + ): + raise ValueError( + "Input dst_pix_trans_src_pix must be a Bx3x3 tensor. Got {}".format( + dst_pix_trans_src_pix.shape + ) + ) + + # source and destination sizes + src_h, src_w = dsize_src + dst_h, dst_w = dsize_dst + + # compute the transformation pixel/norm for src/dst + src_norm_trans_src_pix: torch.Tensor = normal_transform_pixel(src_h, src_w).to( + dst_pix_trans_src_pix + ) + src_pix_trans_src_norm = torch.inverse(src_norm_trans_src_pix.float()).to( + src_norm_trans_src_pix.dtype + ) + dst_norm_trans_dst_pix: torch.Tensor = normal_transform_pixel(dst_h, dst_w).to( + dst_pix_trans_src_pix + ) + + # compute chain transformations + dst_norm_trans_src_norm: torch.Tensor = dst_norm_trans_dst_pix @ ( + dst_pix_trans_src_pix @ src_pix_trans_src_norm + ) + return dst_norm_trans_src_norm + + +def warp_affine( + src: torch.Tensor, + M: torch.Tensor, + dsize: Tuple[int, int], + mode: str = "bilinear", + padding_mode: str = "zeros", + align_corners: Optional[bool] = None, +) -> torch.Tensor: + if not isinstance(src, torch.Tensor): + raise TypeError( + "Input src type is not a torch.Tensor. Got {}".format(type(src)) + ) + + if not isinstance(M, torch.Tensor): + raise TypeError("Input M type is not a torch.Tensor. Got {}".format(type(M))) + + if not len(src.shape) == 4: + raise ValueError("Input src must be a BxCxHxW tensor. Got {}".format(src.shape)) + + if not (len(M.shape) == 3 or M.shape[-2:] == (2, 3)): + raise ValueError("Input M must be a Bx2x3 tensor. Got {}".format(M.shape)) + + # TODO: remove the statement below in kornia v0.6 + if align_corners is None: + message: str = ( + "The align_corners default value has been changed. By default now is set True " + "in order to match cv2.warpAffine." + ) + warnings.warn(message) + # set default value for align corners + align_corners = True + + B, C, H, W = src.size() + + # we generate a 3x3 transformation matrix from 2x3 affine + + dst_norm_trans_src_norm: torch.Tensor = normalize_homography(M, (H, W), dsize) + + src_norm_trans_dst_norm = torch.inverse(dst_norm_trans_src_norm.float()) + + grid = F.affine_grid( + src_norm_trans_dst_norm[:, :2, :], + [B, C, dsize[0], dsize[1]], + align_corners=align_corners, + ) + + return F.grid_sample( + src.float(), + grid, + align_corners=align_corners, + mode=mode, + padding_mode=padding_mode, + ).to(src.dtype) + + +class Transform2D: + @staticmethod + def transform_bboxes(bbox, M, out_shape): + if isinstance(bbox, Sequence): + assert len(bbox) == len(M) + return [ + Transform2D.transform_bboxes(b, m, o) + for b, m, o in zip(bbox, M, out_shape) + ] + else: + if bbox.shape[0] == 0: + return bbox + score = None + if bbox.shape[1] > 4: + score = bbox[:, 4:] + points = bbox2points(bbox[:, :4]) + points = torch.cat( + [points, points.new_ones(points.shape[0], 1)], dim=1 + ) # n,3 + points = torch.matmul(M, points.t()).t() + points = points[:, :2] / points[:, 2:3] + bbox = points2bbox(points, out_shape[1], out_shape[0]) + if score is not None: + return torch.cat([bbox, score], dim=1) + return bbox + + @staticmethod + def transform_masks( + mask: Union[BitmapMasks, List[BitmapMasks]], + M: Union[torch.Tensor, List[torch.Tensor]], + out_shape: Union[list, List[list]], + ): + if isinstance(mask, Sequence): + assert len(mask) == len(M) + return [ + Transform2D.transform_masks(b, m, o) + for b, m, o in zip(mask, M, out_shape) + ] + else: + if mask.masks.shape[0] == 0: + return BitmapMasks(np.zeros((0, *out_shape)), *out_shape) + mask_tensor = ( + torch.from_numpy(mask.masks[:, None, ...]).to(M.device).to(M.dtype) + ) + return BitmapMasks( + warp_affine( + mask_tensor, + M[None, ...].expand(mask.masks.shape[0], -1, -1), + out_shape, + ) + .squeeze(1) + .cpu() + .numpy(), + out_shape[0], + out_shape[1], + ) + + @staticmethod + def transform_image(img, M, out_shape): + if isinstance(img, Sequence): + assert len(img) == len(M) + return [ + Transform2D.transform_image(b, m, shape) + for b, m, shape in zip(img, M, out_shape) + ] + else: + if img.dim() == 2: + img = img[None, None, ...] + elif img.dim() == 3: + img = img[None, ...] + + return ( + warp_affine(img.float(), M[None, ...], out_shape, mode="nearest") + .squeeze() + .to(img.dtype) + ) + + +def filter_invalid(bbox, label=None, score=None, mask=None, thr=0.0, min_size=0): + if (score is not None) and (thr > 0): + valid = score > thr + bbox = bbox[valid] + if label is not None: + label = label[valid] + if mask is not None: + mask = BitmapMasks(mask.masks[valid.cpu().numpy()], mask.height, mask.width) + if min_size is not None: + bw = bbox[:, 2] - bbox[:, 0] + bh = bbox[:, 3] - bbox[:, 1] + valid = (bw > min_size) & (bh > min_size) + bbox = bbox[valid] + if label is not None: + label = label[valid] + if mask is not None: + mask = BitmapMasks(mask.masks[valid.cpu().numpy()], mask.height, mask.width) + return bbox, label, mask diff --git a/ssod/utils/__init__.py b/ssod/utils/__init__.py new file mode 100644 index 0000000..3b5f2e4 --- /dev/null +++ b/ssod/utils/__init__.py @@ -0,0 +1,19 @@ +from .exts import NamedOptimizerConstructor +from .hooks import Weighter, MeanTeacher, WeightSummary, SubModulesDistEvalHook +from .logger import get_root_logger, log_every_n, log_image_with_boxes +from .patch import patch_config, patch_runner, find_latest_checkpoint + + +__all__ = [ + "get_root_logger", + "log_every_n", + "log_image_with_boxes", + "patch_config", + "patch_runner", + "find_latest_checkpoint", + "Weighter", + "MeanTeacher", + "WeightSummary", + "SubModulesDistEvalHook", + "NamedOptimizerConstructor", +] diff --git a/ssod/utils/exts/__init__.py b/ssod/utils/exts/__init__.py new file mode 100644 index 0000000..306fb0f --- /dev/null +++ b/ssod/utils/exts/__init__.py @@ -0,0 +1 @@ +from .optimizer_constructor import NamedOptimizerConstructor diff --git a/ssod/utils/exts/optimizer_constructor.py b/ssod/utils/exts/optimizer_constructor.py new file mode 100644 index 0000000..999e16c --- /dev/null +++ b/ssod/utils/exts/optimizer_constructor.py @@ -0,0 +1,113 @@ +import warnings + +import torch +from torch.nn import GroupNorm, LayerNorm + +from mmcv.utils import _BatchNorm, _InstanceNorm, build_from_cfg +from mmcv.utils.ext_loader import check_ops_exist +from mmcv.runner.optimizer.builder import OPTIMIZER_BUILDERS, OPTIMIZERS +from mmcv.runner.optimizer import DefaultOptimizerConstructor + + +@OPTIMIZER_BUILDERS.register_module() +class NamedOptimizerConstructor(DefaultOptimizerConstructor): + """Main difference to default constructor: + + 1) Add name to parame groups + """ + + def add_params(self, params, module, prefix="", is_dcn_module=None): + """Add all parameters of module to the params list. + + The parameters of the given module will be added to the list of param + groups, with specific rules defined by paramwise_cfg. + + Args: + params (list[dict]): A list of param groups, it will be modified + in place. + module (nn.Module): The module to be added. + prefix (str): The prefix of the module + is_dcn_module (int|float|None): If the current module is a + submodule of DCN, `is_dcn_module` will be passed to + control conv_offset layer's learning rate. Defaults to None. + """ + # get param-wise options + custom_keys = self.paramwise_cfg.get("custom_keys", {}) + # first sort with alphabet order and then sort with reversed len of str + sorted_keys = sorted(sorted(custom_keys.keys()), key=len, reverse=True) + + bias_lr_mult = self.paramwise_cfg.get("bias_lr_mult", 1.0) + bias_decay_mult = self.paramwise_cfg.get("bias_decay_mult", 1.0) + norm_decay_mult = self.paramwise_cfg.get("norm_decay_mult", 1.0) + dwconv_decay_mult = self.paramwise_cfg.get("dwconv_decay_mult", 1.0) + bypass_duplicate = self.paramwise_cfg.get("bypass_duplicate", False) + dcn_offset_lr_mult = self.paramwise_cfg.get("dcn_offset_lr_mult", 1.0) + + # special rules for norm layers and depth-wise conv layers + is_norm = isinstance(module, (_BatchNorm, _InstanceNorm, GroupNorm, LayerNorm)) + is_dwconv = ( + isinstance(module, torch.nn.Conv2d) and module.in_channels == module.groups + ) + + for name, param in module.named_parameters(recurse=False): + param_group = {"params": [param], "name": f"{prefix}.{name}"} + if not param.requires_grad: + params.append(param_group) + continue + if bypass_duplicate and self._is_in(param_group, params): + warnings.warn( + f"{prefix} is duplicate. It is skipped since " + f"bypass_duplicate={bypass_duplicate}" + ) + continue + # if the parameter match one of the custom keys, ignore other rules + is_custom = False + for key in sorted_keys: + if key in f"{prefix}.{name}": + is_custom = True + lr_mult = custom_keys[key].get("lr_mult", 1.0) + param_group["lr"] = self.base_lr * lr_mult + if self.base_wd is not None: + decay_mult = custom_keys[key].get("decay_mult", 1.0) + param_group["weight_decay"] = self.base_wd * decay_mult + break + + if not is_custom: + # bias_lr_mult affects all bias parameters + # except for norm.bias dcn.conv_offset.bias + if name == "bias" and not (is_norm or is_dcn_module): + param_group["lr"] = self.base_lr * bias_lr_mult + + if ( + prefix.find("conv_offset") != -1 + and is_dcn_module + and isinstance(module, torch.nn.Conv2d) + ): + # deal with both dcn_offset's bias & weight + param_group["lr"] = self.base_lr * dcn_offset_lr_mult + + # apply weight decay policies + if self.base_wd is not None: + # norm decay + if is_norm: + param_group["weight_decay"] = self.base_wd * norm_decay_mult + # depth-wise conv + elif is_dwconv: + param_group["weight_decay"] = self.base_wd * dwconv_decay_mult + # bias lr and decay + elif name == "bias" and not is_dcn_module: + # TODO: current bias_decay_mult will have affect on DCN + param_group["weight_decay"] = self.base_wd * bias_decay_mult + params.append(param_group) + + if check_ops_exist(): + from mmcv.ops import DeformConv2d, ModulatedDeformConv2d + + is_dcn_module = isinstance(module, (DeformConv2d, ModulatedDeformConv2d)) + else: + is_dcn_module = False + for child_name, child_mod in module.named_children(): + child_prefix = f"{prefix}.{child_name}" if prefix else child_name + self.add_params( + params, child_mod, prefix=child_prefix, is_dcn_module=is_dcn_module + ) diff --git a/ssod/utils/hooks/__init__.py b/ssod/utils/hooks/__init__.py new file mode 100644 index 0000000..880e29f --- /dev/null +++ b/ssod/utils/hooks/__init__.py @@ -0,0 +1,12 @@ +from .weight_adjust import Weighter +from .mean_teacher import MeanTeacher +from .weights_summary import WeightSummary +from .submodules_evaluation import SubModulesDistEvalHook # ,SubModulesEvalHook + + +__all__ = [ + "Weighter", + "MeanTeacher", + "SubModulesDistEvalHook", + "WeightSummary", +] diff --git a/ssod/utils/hooks/mean_teacher.py b/ssod/utils/hooks/mean_teacher.py new file mode 100644 index 0000000..be71dab --- /dev/null +++ b/ssod/utils/hooks/mean_teacher.py @@ -0,0 +1,64 @@ +from mmcv.parallel import is_module_wrapper +from mmcv.runner.hooks import HOOKS, Hook +from bisect import bisect_right +from ..logger import log_every_n + + +@HOOKS.register_module() +class MeanTeacher(Hook): + def __init__( + self, + momentum=0.999, + interval=1, + warm_up=100, + decay_intervals=None, + decay_factor=0.1, + ): + assert momentum >= 0 and momentum <= 1 + self.momentum = momentum + assert isinstance(interval, int) and interval > 0 + self.warm_up = warm_up + self.interval = interval + assert isinstance(decay_intervals, list) or decay_intervals is None + self.decay_intervals = decay_intervals + self.decay_factor = decay_factor + + def before_run(self, runner): + model = runner.model + if is_module_wrapper(model): + model = model.module + assert hasattr(model, "teacher") + assert hasattr(model, "student") + # only do it at initial stage + if runner.iter == 0: + log_every_n("Clone all parameters of student to teacher...") + self.momentum_update(model, 0) + + def before_train_iter(self, runner): + """Update ema parameter every self.interval iterations.""" + curr_step = runner.iter + if curr_step % self.interval != 0: + return + model = runner.model + if is_module_wrapper(model): + model = model.module + # We warm up the momentum considering the instability at beginning + momentum = min( + self.momentum, 1 - (1 + self.warm_up) / (curr_step + 1 + self.warm_up) + ) + runner.log_buffer.output["ema_momentum"] = momentum + self.momentum_update(model, momentum) + + def after_train_iter(self, runner): + curr_step = runner.iter + if self.decay_intervals is None: + return + self.momentum = 1 - (1 - self.momentum) * self.decay_factor ** bisect_right( + self.decay_intervals, curr_step + ) + + def momentum_update(self, model, momentum): + for (src_name, src_parm), (tgt_name, tgt_parm) in zip( + model.student.named_parameters(), model.teacher.named_parameters() + ): + tgt_parm.data.mul_(momentum).add_(src_parm.data, alpha=1 - momentum) diff --git a/ssod/utils/hooks/submodules_evaluation.py b/ssod/utils/hooks/submodules_evaluation.py new file mode 100644 index 0000000..13f5abe --- /dev/null +++ b/ssod/utils/hooks/submodules_evaluation.py @@ -0,0 +1,106 @@ +import os.path as osp + +import torch.distributed as dist +from mmcv.parallel import is_module_wrapper +from mmcv.runner.hooks import HOOKS +from mmdet.core import DistEvalHook +from torch.nn.modules.batchnorm import _BatchNorm + + +@HOOKS.register_module() +class SubModulesDistEvalHook(DistEvalHook): + def __init__(self, *args, evaluated_modules=None, **kwargs): + super().__init__(*args, **kwargs) + self.evaluated_modules = evaluated_modules + + def before_run(self, runner): + if is_module_wrapper(runner.model): + model = runner.model.module + else: + model = runner.model + assert hasattr(model, "submodules") + assert hasattr(model, "inference_on") + + def _do_evaluate(self, runner): + """perform evaluation and save ckpt.""" + # Synchronization of BatchNorm's buffer (running_mean + # and running_var) is not supported in the DDP of pytorch, + # which may cause the inconsistent performance of models in + # different ranks, so we broadcast BatchNorm's buffers + # of rank 0 to other ranks to avoid this. + + if self.broadcast_bn_buffer: + model = runner.model + for name, module in model.named_modules(): + if isinstance(module, _BatchNorm) and module.track_running_stats: + dist.broadcast(module.running_var, 0) + dist.broadcast(module.running_mean, 0) + + if not self._should_evaluate(runner): + return + # TODO: add `runner.mode = "val"` + + tmpdir = self.tmpdir + if tmpdir is None: + tmpdir = osp.join(runner.work_dir, ".eval_hook") + + if is_module_wrapper(runner.model): + model_ref = runner.model.module + else: + model_ref = runner.model + if not self.evaluated_modules: + submodules = model_ref.submodules + else: + submodules = self.evaluated_modules + key_scores = [] + from mmdet.apis import multi_gpu_test + + for submodule in submodules: + # change inference on + model_ref.inference_on = submodule + results = multi_gpu_test( + runner.model, + self.dataloader, + tmpdir=tmpdir, + gpu_collect=self.gpu_collect, + ) + if runner.rank == 0: + key_score = self.evaluate(runner, results, prefix=submodule) + if key_score is not None: + key_scores.append(key_score) + + if runner.rank == 0: + runner.log_buffer.ready = True + if len(key_scores) == 0: + key_scores = [None] + best_score = key_scores[0] + for key_score in key_scores: + if hasattr(self, "compare_func") and self.compare_func( + key_score, best_score + ): + best_score = key_score + + print("\n") + runner.log_buffer.output["eval_iter_num"] = len(self.dataloader) + if self.save_best: + self._save_ckpt(runner, best_score) + + def evaluate(self, runner, results, prefix=""): + """Evaluate the results. + Args: + runner (:obj:`mmcv.Runner`): The underlined training runner. + results (list): Output results. + """ + eval_res = self.dataloader.dataset.evaluate( + results, logger=runner.logger, **self.eval_kwargs + ) + for name, val in eval_res.items(): + runner.log_buffer.output[(".").join([prefix, name])] = val + + if self.save_best is not None: + if self.key_indicator == "auto": + # infer from eval_results + self._init_rule(self.rule, list(eval_res.keys())[0]) + return eval_res[self.key_indicator] + + return None diff --git a/ssod/utils/hooks/weight_adjust.py b/ssod/utils/hooks/weight_adjust.py new file mode 100644 index 0000000..c874685 --- /dev/null +++ b/ssod/utils/hooks/weight_adjust.py @@ -0,0 +1,35 @@ +from mmcv.parallel import is_module_wrapper +from mmcv.runner.hooks import HOOKS, Hook +from bisect import bisect_right + + +@HOOKS.register_module() +class Weighter(Hook): + def __init__( + self, + steps=None, + vals=None, + name=None, + ): + self.steps = steps + self.vals = vals + self.name = name + if self.name is not None: + assert self.steps is not None + assert self.vals is not None + assert len(self.vals) == len(self.steps) + 1 + + def before_train_iter(self, runner): + curr_step = runner.iter + if self.name is None: + return + model = runner.model + if is_module_wrapper(model): + model = model.module + assert hasattr(model, self.name) + self.steps = [s if s > 0 else runner.max_iters - s for s in self.steps] + runner.log_buffer.output[self.name] = self.vals[ + bisect_right(self.steps, curr_step) + ] + + setattr(model, self.name, runner.log_buffer.output[self.name]) diff --git a/ssod/utils/hooks/weights_summary.py b/ssod/utils/hooks/weights_summary.py new file mode 100644 index 0000000..11dbd61 --- /dev/null +++ b/ssod/utils/hooks/weights_summary.py @@ -0,0 +1,101 @@ +import os.path as osp + +import torch.distributed as dist +from mmcv.parallel import is_module_wrapper +from mmcv.runner.hooks import HOOKS, Hook +from ..logger import get_root_logger +from prettytable import PrettyTable + + +def bool2str(input): + if input: + return "Y" + else: + return "N" + + +def unknown(): + return "-" + + +def shape_str(size): + size = [str(s) for s in size] + return "X".join(size) + + +def min_max_str(input): + return "Min:{:.3f} Max:{:.3f}".format(input.min(), input.max()) + + +def construct_params_dict(input): + assert isinstance(input, list) + param_dict = {} + for group in input: + if "name" in group: + param_dict[group["name"]] = group + return param_dict + + +def max_match_sub_str(strs, sub_str): + # find most related str for sub_str + matched = None + for child in strs: + if len(child) <= len(sub_str): + if child == sub_str: + return child + elif sub_str[: len(child)] == child: + if matched is None or len(matched) < len(child): + matched = child + return matched + + +def get_optim(optimizer, params_dict, name, key): + rel_name = max_match_sub_str(list(params_dict.keys()), name) + if rel_name is not None: + return params_dict[rel_name][key] + else: + if key in optimizer.defaults: + return optimizer.defaults[key] + + +@HOOKS.register_module() +class WeightSummary(Hook): + def before_run(self, runner): + if runner.rank != 0: + return + if is_module_wrapper(runner.model): + model = runner.model.module + else: + model = runner.model + weight_summaries = self.collect_model_info(model, optimizer=runner.optimizer) + logger = get_root_logger() + logger.info(weight_summaries) + + @staticmethod + def collect_model_info(model, optimizer=None, rich_text=False): + param_groups = None + if optimizer is not None: + param_groups = construct_params_dict(optimizer.param_groups) + + if not rich_text: + table = PrettyTable( + ["Name", "Optimized", "Shape", "Value Scale [Min,Max]", "Lr", "Wd"] + ) + for name, param in model.named_parameters(): + table.add_row( + [ + name, + bool2str(param.requires_grad), + shape_str(param.size()), + min_max_str(param), + unknown() + if param_groups is None + else get_optim(optimizer, param_groups, name, "lr"), + unknown() + if param_groups is None + else get_optim(optimizer, param_groups, name, "weight_decay"), + ] + ) + return "\n" + table.get_string(title="Model Information") + else: + pass diff --git a/ssod/utils/logger.py b/ssod/utils/logger.py new file mode 100644 index 0000000..c10e294 --- /dev/null +++ b/ssod/utils/logger.py @@ -0,0 +1,172 @@ +import logging +import os +import sys +from collections import Counter +from typing import Tuple + +import mmcv +import numpy as np +import torch +from mmcv.runner.dist_utils import get_dist_info +from mmcv.utils import get_logger +from mmdet.core.visualization import imshow_det_bboxes + +try: + import wandb +except: + wandb = None + +_log_counter = Counter() + + +def get_root_logger(log_file=None, log_level=logging.INFO): + """Get root logger. + + Args: + log_file (str, optional): File path of log. Defaults to None. + log_level (int, optional): The level of logger. + Defaults to logging.INFO. + + Returns: + :obj:`logging.Logger`: The obtained logger + """ + logger = get_logger(name="mmdet.ssod", log_file=log_file, log_level=log_level) + logger.propagate = False + return logger + + +def _find_caller(): + frame = sys._getframe(2) + while frame: + code = frame.f_code + if os.path.join("utils", "logger.") not in code.co_filename: + mod_name = frame.f_globals["__name__"] + if mod_name == "__main__": + mod_name = r"ssod" + return mod_name, (code.co_filename, frame.f_lineno, code.co_name) + frame = frame.f_back + + +def convert_box(tag, boxes, box_labels, class_labels, std, scores=None): + if isinstance(std, int): + std = [std, std] + if len(std) != 4: + std = std[::-1] * 2 + std = boxes.new_tensor(std).reshape(1, 4) + wandb_box = {} + boxes = boxes / std + boxes = boxes.detach().cpu().numpy().tolist() + box_labels = box_labels.detach().cpu().numpy().tolist() + class_labels = {k: class_labels[k] for k in range(len(class_labels))} + wandb_box["class_labels"] = class_labels + assert len(boxes) == len(box_labels) + if scores is not None: + scores = scores.detach().cpu().numpy().tolist() + box_data = [ + dict( + position=dict(minX=box[0], minY=box[1], maxX=box[2], maxY=box[3]), + class_id=label, + scores=dict(cls=scores[i]), + ) + for i, (box, label) in enumerate(zip(boxes, box_labels)) + ] + else: + box_data = [ + dict( + position=dict(minX=box[0], minY=box[1], maxX=box[2], maxY=box[3]), + class_id=label, + ) + for i, (box, label) in enumerate(zip(boxes, box_labels)) + ] + + wandb_box["box_data"] = box_data + return {tag: wandb.data_types.BoundingBoxes2D(wandb_box, tag)} + + +def color_transform(img_tensor, mean, std, to_rgb=False): + img_np = img_tensor.detach().cpu().numpy().transpose((1, 2, 0)).astype(np.float32) + return mmcv.imdenormalize(img_np, mean, std, to_bgr=not to_rgb) + + +def log_image_with_boxes( + tag: str, + image: torch.Tensor, + bboxes: torch.Tensor, + bbox_tag: str = None, + labels: torch.Tensor = None, + scores: torch.Tensor = None, + class_names: Tuple[str] = None, + filename: str = None, + img_norm_cfg: dict = None, + backend: str = "auto", + interval: int = 50, +): + rank, _ = get_dist_info() + if rank != 0: + return + _, key = _find_caller() + _log_counter[key] += 1 + if not (interval == 1 or _log_counter[key] % interval == 1): + return + if backend == "auto": + if wandb is None: + backend = "file" + else: + backend = "wandb" + + if backend == "wandb": + if wandb is None: + raise ImportError("wandb is not installed") + assert ( + wandb.run is not None + ), "wandb has not been initialized, call `wandb.init` first`" + + elif backend != "file": + raise TypeError("backend must be file or wandb") + + if filename is None: + filename = f"{_log_counter[key]}.jpg" + if bbox_tag is not None: + bbox_tag = "vis" + if img_norm_cfg is not None: + image = color_transform(image, **img_norm_cfg) + if labels is None: + labels = bboxes.new_zeros(bboxes.shape[0]).long() + class_names = ["foreground"] + if backend == "wandb": + im = {} + im["data_or_path"] = image + im["boxes"] = convert_box( + bbox_tag, bboxes, labels, class_names, scores=scores, std=image.shape[:2] + ) + wandb.log({tag: wandb.Image(**im)}, commit=False) + elif backend == "file": + root_dir = os.environ.get("WORK_DIR", ".") + + imshow_det_bboxes( + image, + bboxes.cpu().detach().numpy(), + labels.cpu().detach().numpy(), + class_names=class_names, + show=False, + out_file=os.path.join(root_dir, tag, bbox_tag, filename), + ) + else: + raise TypeError("backend must be file or wandb") + + +def log_every_n(msg: str, n: int = 50, level: int = logging.DEBUG, backend="auto"): + """ + Args: + msg (Any): + n (int): + level (int): + name (str): + """ + caller_module, key = _find_caller() + _log_counter[key] += 1 + if n == 1 or _log_counter[key] % n == 1: + if isinstance(msg, dict) and (wandb is not None) and (wandb.run is not None): + wandb.log(msg, commit=False) + else: + get_root_logger().log(level, msg) diff --git a/ssod/utils/patch.py b/ssod/utils/patch.py new file mode 100644 index 0000000..ddad8ab --- /dev/null +++ b/ssod/utils/patch.py @@ -0,0 +1,81 @@ +import glob +import os +import os.path as osp +import shutil +import types + +from mmcv.runner import BaseRunner, EpochBasedRunner, IterBasedRunner +from mmcv.utils import Config + +from .signature import parse_method_info +from .vars import resolve + + +def find_latest_checkpoint(path, ext="pth"): + if not osp.exists(path): + return None + if osp.exists(osp.join(path, f"latest.{ext}")): + return osp.join(path, f"latest.{ext}") + + checkpoints = glob.glob(osp.join(path, f"*.{ext}")) + if len(checkpoints) == 0: + return None + latest = -1 + latest_path = None + for checkpoint in checkpoints: + count = int(osp.basename(checkpoint).split("_")[-1].split(".")[0]) + if count > latest: + latest = count + latest_path = checkpoint + return latest_path + + +def patch_checkpoint(runner: BaseRunner): + # patch save_checkpoint + old_save_checkpoint = runner.save_checkpoint + params = parse_method_info(old_save_checkpoint) + default_tmpl = params["filename_tmpl"].default + + def save_checkpoint(self, out_dir, **kwargs): + create_symlink = kwargs.get("create_symlink", True) + filename_tmpl = kwargs.get("filename_tmpl", default_tmpl) + # create_symlink + kwargs.update(create_symlink=False) + old_save_checkpoint(out_dir, **kwargs) + if create_symlink: + dst_file = osp.join(out_dir, "latest.pth") + if isinstance(self, EpochBasedRunner): + filename = filename_tmpl.format(self.epoch + 1) + elif isinstance(self, IterBasedRunner): + filename = filename_tmpl.format(self.iter + 1) + else: + raise NotImplementedError() + filepath = osp.join(out_dir, filename) + shutil.copy(filepath, dst_file) + + runner.save_checkpoint = types.MethodType(save_checkpoint, runner) + return runner + + +def patch_runner(runner): + runner = patch_checkpoint(runner) + return runner + + +def setup_env(cfg): + os.environ["WORK_DIR"] = cfg.work_dir + + +def patch_config(cfg): + + cfg_dict = super(Config, cfg).__getattribute__("_cfg_dict").to_dict() + cfg_dict["cfg_name"] = osp.splitext(osp.basename(cfg.filename))[0] + cfg_dict = resolve(cfg_dict) + cfg = Config(cfg_dict, filename=cfg.filename) + # wrap for semi + if cfg.get("semi_wrapper", None) is not None: + cfg.model = cfg.semi_wrapper + cfg.pop("semi_wrapper") + # enable enviroment variables + setup_env(cfg) + return cfg diff --git a/ssod/utils/signature.py b/ssod/utils/signature.py new file mode 100644 index 0000000..abe83e0 --- /dev/null +++ b/ssod/utils/signature.py @@ -0,0 +1,7 @@ +import inspect + + +def parse_method_info(method): + sig = inspect.signature(method) + params = sig.parameters + return params diff --git a/ssod/utils/structure_utils.py b/ssod/utils/structure_utils.py new file mode 100644 index 0000000..fc48067 --- /dev/null +++ b/ssod/utils/structure_utils.py @@ -0,0 +1,153 @@ +import warnings +from collections import Counter, Mapping, Sequence +from numbers import Number +from typing import Dict, List + +import numpy as np +import torch +from mmdet.core.mask.structures import BitmapMasks +from torch.nn import functional as F + +_step_counter = Counter() + + +def list_concat(data_list: List[list]): + if isinstance(data_list[0], torch.Tensor): + return torch.cat(data_list) + else: + endpoint = [d for d in data_list[0]] + + for i in range(1, len(data_list)): + endpoint.extend(data_list[i]) + return endpoint + + +def sequence_concat(a, b): + if isinstance(a, Sequence) and isinstance(b, Sequence): + return a + b + else: + return None + + +def dict_concat(dicts: List[Dict[str, list]]): + return {k: list_concat([d[k] for d in dicts]) for k in dicts[0].keys()} + + +def dict_fuse(obj_list, reference_obj): + if isinstance(reference_obj, torch.Tensor): + return torch.stack(obj_list) + return obj_list + + +def dict_select(dict1: Dict[str, list], key: str, value: str): + flag = [v == value for v in dict1[key]] + return { + k: dict_fuse([vv for vv, ff in zip(v, flag) if ff], v) for k, v in dict1.items() + } + + +def dict_split(dict1, key): + group_names = list(set(dict1[key])) + dict_groups = {k: dict_select(dict1, key, k) for k in group_names} + + return dict_groups + + +def dict_sum(a, b): + if isinstance(a, dict): + assert isinstance(b, dict) + return {k: dict_sum(v, b[k]) for k, v in a.items()} + elif isinstance(a, list): + assert len(a) == len(b) + return [dict_sum(aa, bb) for aa, bb in zip(a, b)] + else: + return a + b + + +def zero_like(tensor_pack, prefix=""): + if isinstance(tensor_pack, Sequence): + return [zero_like(t) for t in tensor_pack] + elif isinstance(tensor_pack, Mapping): + return {prefix + k: zero_like(v) for k, v in tensor_pack.items()} + elif isinstance(tensor_pack, torch.Tensor): + return tensor_pack.new_zeros(tensor_pack.shape) + elif isinstance(tensor_pack, np.ndarray): + return np.zeros_like(tensor_pack) + else: + warnings.warn("Unexpected data type {}".format(type(tensor_pack))) + return 0 + + +def pad_stack(tensors, shape, pad_value=255): + tensors = torch.stack( + [ + F.pad( + tensor, + pad=[0, shape[1] - tensor.shape[1], 0, shape[0] - tensor.shape[0]], + value=pad_value, + ) + for tensor in tensors + ] + ) + return tensors + + +def result2bbox(result): + num_class = len(result) + + bbox = np.concatenate(result) + if bbox.shape[0] == 0: + label = np.zeros(0, dtype=np.uint8) + else: + label = np.concatenate( + [[i] * len(result[i]) for i in range(num_class) if len(result[i]) > 0] + ).reshape((-1,)) + return bbox, label + + +def result2mask(result): + num_class = len(result) + mask = [np.stack(result[i]) for i in range(num_class) if len(result[i]) > 0] + if len(mask) > 0: + mask = np.concatenate(mask) + else: + mask = np.zeros((0, 1, 1)) + return BitmapMasks(mask, mask.shape[1], mask.shape[2]), None + + +def sequence_mul(obj, multiplier): + if isinstance(obj, Sequence): + return [o * multiplier for o in obj] + else: + return obj * multiplier + + +def is_match(word, word_list): + for keyword in word_list: + if keyword in word: + return True + return False + + +def weighted_loss(loss: dict, weight, ignore_keys=[], warmup=0): + _step_counter["weight"] += 1 + lambda_weight = ( + lambda x: x * (_step_counter["weight"] - 1) / warmup + if _step_counter["weight"] <= warmup + else x + ) + if isinstance(weight, Mapping): + for k, v in weight.items(): + for name, loss_item in loss.items(): + if (k in name) and ("loss" in name): + loss[name] = sequence_mul(loss[name], lambda_weight(v)) + elif isinstance(weight, Number): + for name, loss_item in loss.items(): + if "loss" in name: + if not is_match(name, ignore_keys): + loss[name] = sequence_mul(loss[name], lambda_weight(weight)) + else: + loss[name] = sequence_mul(loss[name], 0.0) + else: + raise NotImplementedError() + return loss diff --git a/ssod/utils/vars.py b/ssod/utils/vars.py new file mode 100644 index 0000000..49da8fd --- /dev/null +++ b/ssod/utils/vars.py @@ -0,0 +1,35 @@ +import re +from typing import Union + +pattern = re.compile("\$\{[a-zA-Z\d_.]*\}") + + +def get_value(cfg: dict, chained_key: str): + keys = chained_key.split(".") + if len(keys) == 1: + return cfg[keys[0]] + else: + return get_value(cfg[keys[0]], ".".join(keys[1:])) + + +def resolve(cfg: Union[dict, list], base=None): + if base is None: + base = cfg + if isinstance(cfg, dict): + return {k: resolve(v, base) for k, v in cfg.items()} + elif isinstance(cfg, list): + return [resolve(v, base) for v in cfg] + elif isinstance(cfg, tuple): + return tuple([resolve(v, base) for v in cfg]) + elif isinstance(cfg, str): + # process + var_names = pattern.findall(cfg) + if len(var_names) == 1 and len(cfg) == len(var_names[0]): + return get_value(base, var_names[0][2:-1]) + else: + vars = [get_value(base, name[2:-1]) for name in var_names] + for name, var in zip(var_names, vars): + cfg = cfg.replace(name, str(var)) + return cfg + else: + return cfg diff --git a/ssod/version.py b/ssod/version.py new file mode 100644 index 0000000..8d885d2 --- /dev/null +++ b/ssod/version.py @@ -0,0 +1,3 @@ +__version__ = "0.0.1" + +__all__ = ["__version__"] diff --git a/tools/dataset/prepare_coco_data.sh b/tools/dataset/prepare_coco_data.sh new file mode 100644 index 0000000..b2cdb32 --- /dev/null +++ b/tools/dataset/prepare_coco_data.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + + +help() { + echo "Usage: $0 [option...] download|conduct|fulll" + echo "download download coco dataset" + echo "conduct conduct data split for semi supervised training and evaluation" + echo "option:" + echo " -r, --root [PATH] select the root path of dataset. The default dataset root is ssod/data" +} +download() { + mkdir -p coco + for split in train2017 val2017 unlabeled2017; + do + wget http://images.cocodataset.org/zips/${split}.zip; + unzip ${split}.zip + done + wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip + unzip annotations_trainval2017.zip +} +conduct() { + OFFSET=$RANDOM + for percent in 1 5 10; do + for fold in 1 2 3 4 5; do + python tools/dataset/semi_coco.py --percent ${percent} --seed ${fold} --data-dir "${data_root}"/coco --seed-offset ${OFFSET} + done + done +} + +data_root=data +ROOT=$(dirname "$0")/../.. + +cd "${ROOT}" + +case $1 in + -r | --root) + data_root=$2 + shift 2 + ;; +esac +mkdir -p ${data_root} +case $1 in + download) + cd ${data_root} + download + ;; + conduct) + conduct + ;; + full) + cd ${data_root} + download + cd .. + conduct + ;; + *) + help + exit 0 + ;; +esac diff --git a/tools/dataset/semi_coco.py b/tools/dataset/semi_coco.py new file mode 100644 index 0000000..3ef0b9b --- /dev/null +++ b/tools/dataset/semi_coco.py @@ -0,0 +1,121 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#!/bin/bash +"""Generate labeled and unlabeled dataset for coco train. + +Example: +python tools/coco_semi.py +""" + +import argparse +import numpy as np +import json +import os + + +def prepare_coco_data(seed=1, percent=10.0, version=2017, seed_offset=0): + """Prepare COCO dataset for Semi-supervised learning + Args: + seed: random seed for dataset split + percent: percentage of labeled dataset + version: COCO dataset version + """ + + def _save_anno(name, images, annotations): + """Save annotation.""" + print( + ">> Processing dataset {}.json saved ({} images {} annotations)".format( + name, len(images), len(annotations) + ) + ) + new_anno = {} + new_anno["images"] = images + new_anno["annotations"] = annotations + new_anno["licenses"] = anno["licenses"] + new_anno["categories"] = anno["categories"] + new_anno["info"] = anno["info"] + path = "{}/{}".format(COCOANNODIR, "semi_supervised") + if not os.path.exists(path): + os.mkdir(path) + + with open( + "{root}/{folder}/{save_name}.json".format( + save_name=name, root=COCOANNODIR, folder="semi_supervised" + ), + "w", + ) as f: + json.dump(new_anno, f) + print( + ">> Data {}.json saved ({} images {} annotations)".format( + name, len(images), len(annotations) + ) + ) + + np.random.seed(seed + seed_offset) + COCOANNODIR = os.path.join(DATA_DIR, "annotations") + + anno = json.load( + open(os.path.join(COCOANNODIR, "instances_train{}.json".format(version))) + ) + + image_list = anno["images"] + labeled_tot = int(percent / 100.0 * len(image_list)) + labeled_ind = np.random.choice( + range(len(image_list)), size=labeled_tot, replace=False + ) + labeled_id = [] + labeled_images = [] + unlabeled_images = [] + labeled_ind = set(labeled_ind) + for i in range(len(image_list)): + if i in labeled_ind: + labeled_images.append(image_list[i]) + labeled_id.append(image_list[i]["id"]) + else: + unlabeled_images.append(image_list[i]) + + # get all annotations of labeled images + labeled_id = set(labeled_id) + labeled_annotations = [] + unlabeled_annotations = [] + for an in anno["annotations"]: + if an["image_id"] in labeled_id: + labeled_annotations.append(an) + else: + unlabeled_annotations.append(an) + + # save labeled and unlabeled + save_name = "instances_train{version}.{seed}@{tot}".format( + version=version, seed=seed, tot=int(percent) + ) + _save_anno(save_name, labeled_images, labeled_annotations) + save_name = "instances_train{version}.{seed}@{tot}-unlabeled".format( + version=version, seed=seed, tot=int(percent) + ) + _save_anno(save_name, unlabeled_images, unlabeled_annotations) + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser() + parser.add_argument("--data-dir", type=str) + parser.add_argument("--percent", type=float, default=10) + parser.add_argument("--version", type=int, default=2017) + parser.add_argument("--seed", type=int, help="seed", default=1) + parser.add_argument("--seed-offset", type=int, default=0) + args = parser.parse_args() + print(args) + DATA_DIR = args.data_dir + prepare_coco_data(args.seed, args.percent, args.version, args.seed_offset) diff --git a/tools/dataset/semi_coco.sh b/tools/dataset/semi_coco.sh new file mode 100644 index 0000000..2d28e67 --- /dev/null +++ b/tools/dataset/semi_coco.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -x +OFFSET=$RANDOM +for percent in 1 5 10; do + for fold in 1 2 3 4 5; do + $(dirname "$0")/coco_semi.py --percent ${percent} --seed ${fold} --data-dir $1 --seed-offset ${OFFSET} + done +done diff --git a/tools/dist_test.sh b/tools/dist_test.sh new file mode 100755 index 0000000..3c74ec6 --- /dev/null +++ b/tools/dist_test.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +CONFIG=$1 +CHECKPOINT=$2 +GPUS=$3 +PORT=${PORT:-29500} + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ +python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ + $(dirname "$0")/test.py $CONFIG $CHECKPOINT --launcher pytorch ${@:4} diff --git a/tools/dist_train.sh b/tools/dist_train.sh new file mode 100755 index 0000000..5b43fff --- /dev/null +++ b/tools/dist_train.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +CONFIG=$1 +GPUS=$2 +PORT=${PORT:-29500} + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ +python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ + $(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3} diff --git a/tools/dist_train_partially.sh b/tools/dist_train_partially.sh new file mode 100644 index 0000000..465d3b3 --- /dev/null +++ b/tools/dist_train_partially.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -x + +TYPE=$1 +FOLD=$2 +PERCENT=$3 +GPUS=$4 +PORT=${PORT:-29500} + + +PYTHONPATH="$(dirname $0)/..":$PYTHONPATH + +if [[ ${TYPE} == 'baseline' ]]; then + python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ + $(dirname "$0")/train.py configs/baseline/faster_rcnn_r50_caffe_fpn_coco_partial_180k.py --launcher pytorch \ + --cfg-options fold=${FOLD} percent=${PERCENT} ${@:5} +else + python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ + $(dirname "$0")/train.py configs/soft_teacher/soft_teacher_faster_rcnn_r50_caffe_fpn_coco_180k.py --launcher pytorch \ + --cfg-options fold=${FOLD} percent=${PERCENT} ${@:5} +fi diff --git a/tools/misc/browse_dataset.py b/tools/misc/browse_dataset.py new file mode 100644 index 0000000..041f98c --- /dev/null +++ b/tools/misc/browse_dataset.py @@ -0,0 +1,173 @@ +import argparse +import os +from pathlib import Path + +import mmcv +import torch +from mmcv import Config, DictAction +from mmdet.core.utils import mask2ndarray +from mmdet.core.visualization import imshow_det_bboxes + +from ssod.datasets import build_dataset +from ssod.models.utils import Transform2D + + +def parse_args(): + parser = argparse.ArgumentParser(description="Browse a dataset") + parser.add_argument("config", help="train config file path") + parser.add_argument( + "--skip-type", + type=str, + nargs="+", + default=["DefaultFormatBundle", "Normalize", "Collect"], + help="skip some useless pipeline", + ) + parser.add_argument( + "--output-dir", + default=None, + type=str, + help="If there is no display interface, you can save it", + ) + parser.add_argument("--not-show", default=False, action="store_true") + parser.add_argument( + "--show-interval", type=float, default=2, help="the interval of show (s)" + ) + parser.add_argument( + "--cfg-options", + nargs="+", + action=DictAction, + help="override some settings in the used config, the key-value pair " + "in xxx=yyy format will be merged into config file. If the value to " + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + "Note that the quotation marks are necessary and that no white space " + "is allowed.", + ) + args = parser.parse_args() + return args + + +def remove_pipe(pipelines, skip_type): + if isinstance(pipelines, list): + new_pipelines = [] + for pipe in pipelines: + pipe = remove_pipe(pipe, skip_type) + if pipe is not None: + new_pipelines.append(pipe) + return new_pipelines + elif isinstance(pipelines, dict): + if pipelines["type"] in skip_type: + return None + elif pipelines["type"] == "MultiBranch": + new_pipelines = {} + for k, v in pipelines.items(): + if k != "type": + new_pipelines[k] = remove_pipe(v, skip_type) + else: + new_pipelines[k] = v + return new_pipelines + else: + return pipelines + else: + raise NotImplementedError() + + +def retrieve_data_cfg(config_path, skip_type, cfg_options): + cfg = Config.fromfile(config_path) + if cfg_options is not None: + cfg.merge_from_dict(cfg_options) + # import modules from string list. + if cfg.get("custom_imports", None): + from mmcv.utils import import_modules_from_strings + + import_modules_from_strings(**cfg["custom_imports"]) + train_data_cfg = cfg.data.train + while "dataset" in train_data_cfg: + train_data_cfg = train_data_cfg["dataset"] + train_data_cfg["pipeline"] = remove_pipe(train_data_cfg["pipeline"], skip_type) + return cfg + + +def main(): + args = parse_args() + cfg = retrieve_data_cfg(args.config, args.skip_type, args.cfg_options) + + dataset = build_dataset(cfg.data.train) + + progress_bar = mmcv.ProgressBar(len(dataset)) + + for item in dataset: + if not isinstance(item, list): + item = [item] + bboxes = [] + labels = [] + tran_mats = [] + out_shapes = [] + for it in item: + trans_matrix = it["transform_matrix"] + bbox = it["gt_bboxes"] + tran_mats.append(trans_matrix) + bboxes.append(bbox) + labels.append(it["gt_labels"]) + out_shapes.append(it["img_shape"]) + + filename = ( + os.path.join(args.output_dir, Path(it["filename"]).name) + if args.output_dir is not None + else None + ) + + gt_masks = it.get("gt_masks", None) + if gt_masks is not None: + gt_masks = mask2ndarray(gt_masks) + + imshow_det_bboxes( + it["img"], + it["gt_bboxes"], + it["gt_labels"], + gt_masks, + class_names=dataset.CLASSES, + show=not args.not_show, + wait_time=args.show_interval, + out_file=filename, + bbox_color=(255, 102, 61), + text_color=(255, 102, 61), + ) + + if len(tran_mats) == 2: + # check equality between different augmentation + transed_bboxes = Transform2D.transform_bboxes( + torch.from_numpy(bboxes[1]).float(), + torch.from_numpy(tran_mats[0]).float() + @ torch.from_numpy(tran_mats[1]).float().inverse(), + out_shapes[0], + ) + img = imshow_det_bboxes( + item[0]["img"], + item[0]["gt_bboxes"], + item[0]["gt_labels"], + class_names=dataset.CLASSES, + show=False, + wait_time=args.show_interval, + out_file=None, + bbox_color=(255, 102, 61), + text_color=(255, 102, 61), + ) + imshow_det_bboxes( + img, + transed_bboxes.numpy(), + labels[1], + class_names=dataset.CLASSES, + show=True, + wait_time=args.show_interval, + out_file=None, + bbox_color=(0, 0, 255), + text_color=(0, 0, 255), + thickness=5, + ) + + progress_bar.update() + + +if __name__ == "__main__": + main() diff --git a/tools/test.py b/tools/test.py new file mode 100644 index 0000000..f09e298 --- /dev/null +++ b/tools/test.py @@ -0,0 +1,261 @@ +import argparse +import os +import os.path as osp +import time +import warnings + +import mmcv +import torch +from mmcv import Config, DictAction +from mmcv.cnn import fuse_conv_bn +from mmcv.parallel import MMDataParallel, MMDistributedDataParallel +from mmcv.runner import get_dist_info, init_dist, load_checkpoint, wrap_fp16_model +from mmdet.apis import multi_gpu_test, single_gpu_test +from mmdet.datasets import build_dataloader, build_dataset, replace_ImageToTensor +from mmdet.models import build_detector + +from ssod.utils import patch_config + + +def parse_args(): + parser = argparse.ArgumentParser(description="MMDet test (and eval) a model") + parser.add_argument("config", help="test config file path") + parser.add_argument("checkpoint", help="checkpoint file") + parser.add_argument( + "--work-dir", + help="the directory to save the file containing evaluation metrics", + ) + parser.add_argument("--out", help="output result file in pickle format") + parser.add_argument( + "--fuse-conv-bn", + action="store_true", + help="Whether to fuse conv and bn, this will slightly increase" + "the inference speed", + ) + parser.add_argument( + "--format-only", + action="store_true", + help="Format the output results without perform evaluation. It is" + "useful when you want to format the result to a specific format and " + "submit it to the test server", + ) + parser.add_argument( + "--eval", + type=str, + nargs="+", + help='evaluation metrics, which depends on the dataset, e.g., "bbox",' + ' "segm", "proposal" for COCO, and "mAP", "recall" for PASCAL VOC', + ) + parser.add_argument("--show", action="store_true", help="show results") + parser.add_argument( + "--show-dir", help="directory where painted images will be saved" + ) + parser.add_argument( + "--show-score-thr", + type=float, + default=0.3, + help="score threshold (default: 0.3)", + ) + parser.add_argument( + "--gpu-collect", + action="store_true", + help="whether to use gpu to collect results.", + ) + parser.add_argument( + "--tmpdir", + help="tmp directory used for collecting results from multiple " + "workers, available when gpu-collect is not specified", + ) + parser.add_argument( + "--cfg-options", + nargs="+", + action=DictAction, + help="override some settings in the used config, the key-value pair " + "in xxx=yyy format will be merged into config file. If the value to " + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + "Note that the quotation marks are necessary and that no white space " + "is allowed.", + ) + parser.add_argument( + "--options", + nargs="+", + action=DictAction, + help="custom options for evaluation, the key-value pair in xxx=yyy " + "format will be kwargs for dataset.evaluate() function (deprecate), " + "change to --eval-options instead.", + ) + parser.add_argument( + "--eval-options", + nargs="+", + action=DictAction, + help="custom options for evaluation, the key-value pair in xxx=yyy " + "format will be kwargs for dataset.evaluate() function", + ) + parser.add_argument( + "--launcher", + choices=["none", "pytorch", "slurm", "mpi"], + default="none", + help="job launcher", + ) + parser.add_argument("--local_rank", type=int, default=0) + args = parser.parse_args() + if "LOCAL_RANK" not in os.environ: + os.environ["LOCAL_RANK"] = str(args.local_rank) + + if args.options and args.eval_options: + raise ValueError( + "--options and --eval-options cannot be both " + "specified, --options is deprecated in favor of --eval-options" + ) + if args.options: + warnings.warn("--options is deprecated in favor of --eval-options") + args.eval_options = args.options + return args + + +def main(): + args = parse_args() + + assert args.out or args.eval or args.format_only or args.show or args.show_dir, ( + "Please specify at least one operation (save/eval/format/show the " + 'results / save the results) with the argument "--out", "--eval"' + ', "--format-only", "--show" or "--show-dir"' + ) + + if args.eval and args.format_only: + raise ValueError("--eval and --format_only cannot be both specified") + + if args.out is not None and not args.out.endswith((".pkl", ".pickle")): + raise ValueError("The output file must be a pkl file.") + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + # import modules from string list. + if cfg.get("custom_imports", None): + from mmcv.utils import import_modules_from_strings + + import_modules_from_strings(**cfg["custom_imports"]) + # set cudnn_benchmark + if cfg.get("cudnn_benchmark", False): + torch.backends.cudnn.benchmark = True + + cfg.model.pretrained = None + if cfg.model.get("neck"): + if isinstance(cfg.model.neck, list): + for neck_cfg in cfg.model.neck: + if neck_cfg.get("rfp_backbone"): + if neck_cfg.rfp_backbone.get("pretrained"): + neck_cfg.rfp_backbone.pretrained = None + elif cfg.model.neck.get("rfp_backbone"): + if cfg.model.neck.rfp_backbone.get("pretrained"): + cfg.model.neck.rfp_backbone.pretrained = None + + # in case the test dataset is concatenated + samples_per_gpu = 1 + if isinstance(cfg.data.test, dict): + cfg.data.test.test_mode = True + samples_per_gpu = cfg.data.test.pop("samples_per_gpu", 1) + if samples_per_gpu > 1: + # Replace 'ImageToTensor' to 'DefaultFormatBundle' + cfg.data.test.pipeline = replace_ImageToTensor(cfg.data.test.pipeline) + elif isinstance(cfg.data.test, list): + for ds_cfg in cfg.data.test: + ds_cfg.test_mode = True + samples_per_gpu = max( + [ds_cfg.pop("samples_per_gpu", 1) for ds_cfg in cfg.data.test] + ) + if samples_per_gpu > 1: + for ds_cfg in cfg.data.test: + ds_cfg.pipeline = replace_ImageToTensor(ds_cfg.pipeline) + + # init distributed env first, since logger depends on the dist info. + if args.launcher == "none": + distributed = False + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + + rank, _ = get_dist_info() + # allows not to create + if args.work_dir is not None and rank == 0: + cfg.work_dir = args.work_dir + mmcv.mkdir_or_exist(osp.abspath(args.work_dir)) + timestamp = time.strftime("%Y%m%d_%H%M%S", time.localtime()) + json_file = osp.join(args.work_dir, f"eval_{timestamp}.json") + elif cfg.get("work_dir", None) is None: + cfg.work_dir = osp.join( + "./work_dirs", osp.splitext(osp.basename(args.config))[0] + ) + cfg = patch_config(cfg) + # build the dataloader + dataset = build_dataset(cfg.data.test) + data_loader = build_dataloader( + dataset, + samples_per_gpu=samples_per_gpu, + workers_per_gpu=cfg.data.workers_per_gpu, + dist=distributed, + shuffle=False, + ) + + # build the model and load checkpoint + cfg.model.train_cfg = None + model = build_detector(cfg.model, test_cfg=cfg.get("test_cfg")) + fp16_cfg = cfg.get("fp16", None) + if fp16_cfg is not None: + wrap_fp16_model(model) + checkpoint = load_checkpoint(model, args.checkpoint, map_location="cpu") + if args.fuse_conv_bn: + model = fuse_conv_bn(model) + # old versions did not save class info in checkpoints, this walkaround is + # for backward compatibility + if "CLASSES" in checkpoint.get("meta", {}): + model.CLASSES = checkpoint["meta"]["CLASSES"] + else: + model.CLASSES = dataset.CLASSES + + if not distributed: + model = MMDataParallel(model, device_ids=[0]) + outputs = single_gpu_test( + model, data_loader, args.show, args.show_dir, args.show_score_thr + ) + else: + model = MMDistributedDataParallel( + model.cuda(), + device_ids=[torch.cuda.current_device()], + broadcast_buffers=False, + ) + outputs = multi_gpu_test(model, data_loader, args.tmpdir, args.gpu_collect) + + rank, _ = get_dist_info() + if rank == 0: + if args.out: + print(f"\nwriting results to {args.out}") + mmcv.dump(outputs, args.out) + kwargs = {} if args.eval_options is None else args.eval_options + if args.format_only: + dataset.format_results(outputs, **kwargs) + if args.eval: + eval_kwargs = cfg.get("evaluation", {}).copy() + # hard-code way to remove EvalHook args + for key in [ + "type", + "interval", + "tmpdir", + "start", + "gpu_collect", + "save_best", + "rule", + ]: + eval_kwargs.pop(key, None) + eval_kwargs.update(dict(metric=args.eval, **kwargs)) + metric = dataset.evaluate(outputs, **eval_kwargs) + print(metric) + metric_dict = dict(config=args.config, metric=metric) + if args.work_dir is not None and rank == 0: + mmcv.dump(metric_dict, json_file) + + +if __name__ == "__main__": + main() diff --git a/tools/train.py b/tools/train.py new file mode 100644 index 0000000..2e741cf --- /dev/null +++ b/tools/train.py @@ -0,0 +1,198 @@ +import argparse +import copy +import os +import os.path as osp +import time +import warnings +from logging import log + +import mmcv +import torch +from mmcv import Config, DictAction +from mmcv.runner import get_dist_info, init_dist +from mmcv.utils import get_git_hash +from mmdet import __version__ +from mmdet.models import build_detector +from mmdet.utils import collect_env + +from ssod.apis import get_root_logger, set_random_seed, train_detector +from ssod.datasets import build_dataset +from ssod.utils import patch_config + + +def parse_args(): + parser = argparse.ArgumentParser(description="Train a detector") + parser.add_argument("config", help="train config file path") + parser.add_argument("--work-dir", help="the dir to save logs and models") + parser.add_argument("--resume-from", help="the checkpoint file to resume from") + parser.add_argument( + "--no-validate", + action="store_true", + help="whether not to evaluate the checkpoint during training", + ) + group_gpus = parser.add_mutually_exclusive_group() + group_gpus.add_argument( + "--gpus", + type=int, + help="number of gpus to use " "(only applicable to non-distributed training)", + ) + group_gpus.add_argument( + "--gpu-ids", + type=int, + nargs="+", + help="ids of gpus to use " "(only applicable to non-distributed training)", + ) + parser.add_argument("--seed", type=int, default=None, help="random seed") + parser.add_argument( + "--deterministic", + action="store_true", + help="whether to set deterministic options for CUDNN backend.", + ) + parser.add_argument( + "--options", + nargs="+", + action=DictAction, + help="override some settings in the used config, the key-value pair " + "in xxx=yyy format will be merged into config file (deprecate), " + "change to --cfg-options instead.", + ) + parser.add_argument( + "--cfg-options", + nargs="+", + action=DictAction, + help="override some settings in the used config, the key-value pair " + "in xxx=yyy format will be merged into config file. If the value to " + 'be overwritten is a list, it should be like key="[a,b]" or key=a,b ' + 'It also allows nested list/tuple values, e.g. key="[(a,b),(c,d)]" ' + "Note that the quotation marks are necessary and that no white space " + "is allowed.", + ) + parser.add_argument( + "--launcher", + choices=["none", "pytorch", "slurm", "mpi"], + default="none", + help="job launcher", + ) + parser.add_argument("--local_rank", type=int, default=0) + args = parser.parse_args() + if "LOCAL_RANK" not in os.environ: + os.environ["LOCAL_RANK"] = str(args.local_rank) + + if args.options and args.cfg_options: + raise ValueError( + "--options and --cfg-options cannot be both " + "specified, --options is deprecated in favor of --cfg-options" + ) + if args.options: + warnings.warn("--options is deprecated in favor of --cfg-options") + args.cfg_options = args.options + + return args + + +def main(): + args = parse_args() + + cfg = Config.fromfile(args.config) + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + # import modules from string list. + if cfg.get("custom_imports", None): + from mmcv.utils import import_modules_from_strings + + import_modules_from_strings(**cfg["custom_imports"]) + # set cudnn_benchmark + if cfg.get("cudnn_benchmark", False): + torch.backends.cudnn.benchmark = True + + # work_dir is determined in this priority: CLI > segment in file > filename + if args.work_dir is not None: + # update configs according to CLI args if args.work_dir is not None + cfg.work_dir = args.work_dir + elif cfg.get("work_dir", None) is None: + # use config filename as default work_dir if cfg.work_dir is None + cfg.work_dir = osp.join( + "./work_dirs", osp.splitext(osp.basename(args.config))[0] + ) + cfg = patch_config(cfg) + if args.resume_from is not None: + cfg.resume_from = args.resume_from + if args.gpu_ids is not None: + cfg.gpu_ids = args.gpu_ids + else: + cfg.gpu_ids = range(1) if args.gpus is None else range(args.gpus) + + # init distributed env first, since logger depends on the dist info. + if args.launcher == "none": + distributed = False + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + # re-set gpu_ids with distributed training mode + _, world_size = get_dist_info() + cfg.gpu_ids = range(world_size) + # create work_dir + mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir)) + # dump config + cfg.dump(osp.join(cfg.work_dir, osp.basename(args.config))) + # init the logger before other steps + timestamp = time.strftime("%Y%m%d_%H%M%S", time.localtime()) + log_file = osp.join(cfg.work_dir, f"{timestamp}.log") + logger = get_root_logger(log_file=log_file, log_level=cfg.log_level) + + # init the meta dict to record some important information such as + # environment info and seed, which will be logged + meta = dict() + # log env info + env_info_dict = collect_env() + env_info = "\n".join([(f"{k}: {v}") for k, v in env_info_dict.items()]) + dash_line = "-" * 60 + "\n" + logger.info(logger.handlers) + logger.info("Environment info:\n" + dash_line + env_info + "\n" + dash_line) + meta["env_info"] = env_info + meta["config"] = cfg.pretty_text + # log some basic info + logger.info(f"Distributed training: {distributed}") + logger.info(f"Config:\n{cfg.pretty_text}") + + # set random seeds + if args.seed is not None: + logger.info( + f"Set random seed to {args.seed}, " f"deterministic: {args.deterministic}" + ) + set_random_seed(args.seed, deterministic=args.deterministic) + cfg.seed = args.seed + meta["seed"] = args.seed + meta["exp_name"] = osp.basename(args.config) + + model = build_detector( + cfg.model, train_cfg=cfg.get("train_cfg"), test_cfg=cfg.get("test_cfg") + ) + model.init_weights() + + datasets = [build_dataset(cfg.data.train)] + if len(cfg.workflow) == 2: + val_dataset = copy.deepcopy(cfg.data.val) + val_dataset.pipeline = cfg.data.train.pipeline + datasets.append(build_dataset(val_dataset)) + if cfg.checkpoint_config is not None: + # save mmdet version, config file content and class names in + # checkpoints as meta data + cfg.checkpoint_config.meta = dict( + mmdet_version=__version__ + get_git_hash()[:7], CLASSES=datasets[0].CLASSES + ) + # add an attribute for visualization convenience + model.CLASSES = datasets[0].CLASSES + train_detector( + model, + datasets, + cfg, + distributed=distributed, + validate=(not args.no_validate), + timestamp=timestamp, + meta=meta, + ) + + +if __name__ == "__main__": + main()