## Motivation
Through this PR, I (1) fix a bug, and (2) perform some associated cleanup, and (3) add a unit test. The bug occurs during evaluation when two options -- `reduce_zero_label=True`, and custom classes are used. The bug was that the `reduce_zero_label` is not properly propagated (see details below).
## Modification
1. **Bugfix**
The bug occurs [in the initialization of `CustomDataset`](5d49918b3c/mmseg/datasets/custom.py (L108-L110)) where the `reduce_zero_label` flag is not propagated to its member `self.gt_seg_map_loader_cfg`:
```python
self.gt_seg_map_loader = LoadAnnotations(
) if gt_seg_map_loader_cfg is None else LoadAnnotations(
**gt_seg_map_loader_cfg)
```
Because the `reduce_zero_label` flag was not being propagated, the zero label reduction was being [unnecessarily and explicitly duplicated during the evaluation](5d49918b3c/mmseg/core/evaluation/metrics.py (L66-L69)).
As pointed in a previous PR (#2500), `reduce_zero_label` must occur before applying the `label_map`. Due to this bug, the order gets reversed when both features are used simultaneously.
This has been fixed to:
```python
self.gt_seg_map_loader = LoadAnnotations(
reduce_zero_label=reduce_zero_label, **gt_seg_map_loader_cfg)
```
2. **Cleanup**
Due to the bug fix, since both `reduce_zero_label` and `label_map` are being applied in `get_gt_seg_map_by_idx()` (i.e. `LoadAnnotations.__call__()`), the evaluation does not need perform them anymore. However, for backwards compatibility, the evaluation keeps previous input arguments.
This was pointed out for `label_map` in a previous issue (#1415) that the `label_map` should not be applied in the evaluation. This was handled by [passing an empty dict](5d49918b3c/mmseg/datasets/custom.py (L306-L311)):
```python
# as the labels has been converted when dataset initialized
# in `get_palette_for_custom_classes ` this `label_map`
# should be `dict()`, see
# https://github.com/open-mmlab/mmsegmentation/issues/1415
# for more ditails
label_map=dict(),
reduce_zero_label=self.reduce_zero_label))
```
Similar to this, I now also set `reduce_label=False` since it is now also being handled by `get_gt_seg_map_by_idx()` (i.e. `LoadAnnotations.__call__()`).
3. **Unit test**
I've added a unit test that tests the `CustomDataset.pre_eval()` function when `reduce_zero_label=True` and custom classes are used. The test fails on the original `master` branch but passes with this fix.
## BC-breaking (Optional)
I do not anticipate this change braking any backward-compatibility.
## Checklist
- [x] Pre-commit or other linting tools are used to fix the potential lint issues.
- _I've fixed all linting/pre-commit errors._
- [x] The modification is covered by complete unit tests. If not, please add more unit test to ensure the correctness.
- _I've added a test that passes when the fix is introduced, and fails on the original master branch._
- [x] If the modification has potential influence on downstream projects, this PR should be tested with downstream projects, like MMDet or MMDet3D.
- _I don't think this change affects MMDet or MMDet3D._
- [x] The documentation has been modified accordingly, like docstring or example tutorials.
- _This change fixes an existing bug and doesn't require modifying any documentation/docstring._
## Motivation
This fixes#2493. When the `label_map` is created, the index for ignored
classes was being set to -1, whereas the index that is actually ignored
is 255. This worked indirectly since -1 was underflowed to 255 when
converting to uint8.
The same fix was made in the 1.x by #2332 but this fix was never made to
`master`.
## Modification
The only small modification is setting the index of ignored classes to
255 instead of -1.
## Checklist
- [x] Pre-commit or other linting tools are used to fix the potential
lint issues.
- _I've fixed all linting/pre-commit errors._
- [x] The modification is covered by complete unit tests. If not, please
add more unit test to ensure the correctness.
- _No unit tests need to be added. Unit tests that are affected were
modified.
- [x] If the modification has potential influence on downstream
projects, this PR should be tested with downstream projects, like MMDet
or MMDet3D.
- _I don't think this change affects MMDet or MMDet3D._
- [x] The documentation has been modified accordingly, like docstring or
example tutorials.
- _This change fixes an existing bug and doesn't require modifying any
documentation/docstring._
## Motivation
I want to fix a bug through this PR. The bug occurs when two options --
`reduce_zero_label=True`, and custom classes are used.
`reduce_zero_label` remaps the GT seg labels by remapping the zero-class
to 255 which is ignored. Conceptually, this should occur *before* the
`label_map` is applied, which maps *already reduced labels*. However,
currently, the `label_map` is applied before the zero label is reduced.
## Modification
The modification is simple:
- I've just interchanged the order of the two operations by moving 4
lines from bottom to top.
- I've added a test that passes when the fix is introduced, and fails on
the original `master` branch.
## BC-breaking (Optional)
I do not anticipate this change braking any backward-compatibility.
## Checklist
- [x] Pre-commit or other linting tools are used to fix the potential
lint issues.
- _I've fixed all linting/pre-commit errors._
- [x] The modification is covered by complete unit tests. If not, please
add more unit test to ensure the correctness.
- _I've added a unit test._
- [x] If the modification has potential influence on downstream
projects, this PR should be tested with downstream projects, like MMDet
or MMDet3D.
- _I don't think this change affects MMDet or MMDet3D._
- [x] The documentation has been modified accordingly, like docstring or
example tutorials.
- _This change fixes an existing bug and doesn't require modifying any
documentation/docstring._
* fix binary
* add ut
* fix ut
* restore metric computation
* remove metric ut update
* set out_channels by num_classes
* replace num_classes in encoder_decoder
* update props setting and fix ut
* update ut
* minor change
* update warning
* [Fix] Add avg_non_ignore in cross entropy loss
* [Fix] Add avg_non_ignore in cross entropy loss
* add docstring
* fix ut
* fix docstring and comments
* fix
* fix bce
* fix avg_factor in BCE and add more ut
* add avg_non_ignore
* add more ut
* fix part of ut
* fix part of ut
* test avg_non_ignore would not affect ce/bce when reduction none/sum
* test avg_non_ignore would not affect ce/bce when reduction none/sum/mean
* re-organize ut
* re-organize ut
* re-organize ut
* re-organize hardcode case
* fix parts of comments
* fix another parts of comments
* fix
* knet first commit
* fix import error in knet
* remove kernel update head from decoder head
* [Feature] Add kenerl updation for some decoder heads.
* [Feature] Add kenerl updation for some decoder heads.
* directly use forward_feature && modify other 3 decoder heads
* remover kernel_update attr
* delete unnecessary variables in forward function
* delete kernel update function
* delete kernel update function
* delete kernel_generate_head
* add unit test & comments in knet.py
* add copyright to fix lint error
* modify config names of knet
* rename swin-l 640
* upload models&logs and refactor knet_head.py
* modify docstrings and add some ut
* add url, modify docstring and add loss ut
* modify docstrings
* [Fix] Fix the bug that when all pixels in an image is ignored, the accuracy calculation raises ZeroDivisionError
* use eps
* all close
* add ignore test
* add eps
* upload original backbone and configs
* ConvNext Refactor
* ConvNext Refactor
* convnext customization refactor with mmseg style
* convnext customization refactor with mmseg style
* add ade20k_640x640.py
* upload files for training
* delete dist_optimizer_hook and remove layer_decay_optimizer_constructor
* check max(out_indices) < num_stages
* add unittest
* fix lint error
* use MMClassification backbone
* fix bugs in base_1k
* add mmcls in requirements/mminstall.txt
* add mmcls in requirements/mminstall.txt
* fix drop_path_rate and layer_scale_init_value
* use logger.info instead of print
* add mmcls in runtime.txt
* fix f string && delete
* add doctring in LearningRateDecayOptimizerConstructor and fix mmcls version in requirements
* fix typo in LearningRateDecayOptimizerConstructor
* use ConvNext models in unit test for LearningRateDecayOptimizerConstructor
* add unit test
* fix typo
* fix typo
* add layer_wise and fix redundant backbone.downsample_norm in it
* fix unit test
* give a ground truth lr_scale and weight_decay
* upload models and readme
* delete 'backbone.stem_norm' and 'backbone.downsample_norm' in get_num_layer()
* fix unit test and use mmcls url
* update md2yml.py and metafile
* fix typo
* support iSAID aerial dataset
* Update and rename docs/dataset_prepare.md to 博士/dataset_prepare.md
* Update dataset_prepare.md
* fix typo
* fix typo
* fix typo
* remove imgviz
* fix wrong order in annotation name
* upload models&logs
* upload models&logs
* add load_annotations
* fix unittest coverage
* fix unittest coverage
* fix correct crop size in config
* fix iSAID unit test
* fix iSAID unit test
* fix typos
* fix wrong crop size in readme
* use smaller figure as test data
* add smaller dataset in test data
* add blank in docs
* use 0 bytes pseudo data
* add footnote and comments for crop size
* change iSAID to isaid and add default value in it
* change iSAID to isaid in _base_
Co-authored-by: MengzhangLI <mcmong@pku.edu.cn>
* assert original HardSwish when PyTorch > 1.6 in unit test
* assert original HardSwish when PyTorch > 1.6 in unit test
* assert original HardSwish when PyTorch > 1.6 in unit test
* assert original HardSwish when PyTorch > 1.6 in unit test
* assert original HardSwish when PyTorch > 1.6 in unit test
* assert original HardSwish when PyTorch > 1.6 in unit test
* Fix typo in usage example
* original mosaic code in mmdet
* Adjust mosaic to the semantic segmentation
* Remove bbox test in test_mosaic
* Add unittests
* Fix resize mode for seg_fields
* Fix repr error
* modify Mosaic docs
* modify from Mosaic to RandomMosaic
* Add docstring
* modify Mosaic docstring
* [Docs] Add a blank line before Returns:
* add blank lines
Co-authored-by: MeowZheng <meowzheng@outlook.com>
* [Feature] add focal loss
* fix the bug of 'non' reduction type
* refine the implementation
* add class_weight and ignore_index; support different alpha values for different classes
* fixed some bugs
* fix bugs
* add comments
* modify test
* Update mmseg/models/losses/focal_loss.py
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* update test_focal_loss.py
* modified the implementation
* Update mmseg/models/losses/focal_loss.py
Co-authored-by: Jerry Jiarui XU <xvjiarui0826@gmail.com>
* update focal_loss.py
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
Co-authored-by: Jerry Jiarui XU <xvjiarui0826@gmail.com>
* Fix typo in usage example
* [Feature] Add CutOut transform
* CutOut repr covered by unittests
* Cutout ignore index, test
* ignore_index -> seg_fill_in, defualt is None
* seg_fill_in is added to repr
* test is modified for seg_fill_in is None
* seg_fill_in (int), 0-255
* add seg_fill_in test
* doc string for seg_fill_in
* rename CutOut to RandomCutOut, add prob
* Add unittest when cutout is False
* update LoveDA dataset api
* revised lint errors in dataset_prepare.md
* revised lint errors in loveda.py
* revised lint errors in loveda.py
* revised lint errors in dataset_prepare.md
* revised lint errors in dataset_prepare.md
* checked with isort and yapf
* checked with isort and yapf
* checked with isort and yapf
* Revert "checked with isort and yapf"
This reverts commit 686a51d9
* Revert "checked with isort and yapf"
This reverts commit b877e121bb2935ceefc503c09675019489829feb.
* Revert "revised lint errors in dataset_prepare.md"
This reverts commit 2289e27c
* Revert "checked with isort and yapf"
This reverts commit 159db2f8
* Revert "checked with isort and yapf"
This reverts commit 159db2f8
* add configs & fix bugs
* update new branch
* upload models&logs and add format-only
* change pretraied model path of HRNet
* fix the errors in dataset_prepare.md
* fix the errors in dataset_prepare.md and configs in loveda.py
* change the description in docs_zh-CN/dataset_prepare.md
* use init_cfg
* fix test converage
* adding pseudo loveda dataset
* adding pseudo loveda dataset
* adding pseudo loveda dataset
* adding pseudo loveda dataset
* adding pseudo loveda dataset
* adding pseudo loveda dataset
* Update docs/dataset_prepare.md
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* Update docs_zh-CN/dataset_prepare.md
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* Update docs_zh-CN/dataset_prepare.md
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* Delete unused lines of unittest and Add docs
* add convert .py file
* add downloading links from zenodo
* move place of LoveDA and Cityscapes in doc
* move place of LoveDA and Cityscapes in doc
Co-authored-by: MengzhangLI <mcmong@pku.edu.cn>
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* [Fix] Fix the bug that vit cannot load pretrain properly when using init_cfg to specify the pretrain scheme
* [Fix] fix the coverage problem
* Update mmseg/models/backbones/vit.py
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* [Fix] make the predicate more concise and clearer
* [Fix] Modified the judgement logic
* Update tests/test_models/test_backbones/test_vit.py
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* add comments
Co-authored-by: Junjun2016 <hejunjun@sjtu.edu.cn>
* add TIMMBackbone and unittests
* add timm to tests requirements
* deprecate pt1.3.1
* reduce the unittests input of timm backbone
* fix ci
* fix ci
* fix ci
* fix ci
* fix ci
* fix ci
* fix ci
* fix ci
* fix ci
* remove unittests of large models of timm backbone
* generate coverage report for all unittests env
* reduce the unittests input of timm backbone
* reduce the unittests input of timm backbone
* fix single loss type
* fix error in ohem & point_head
* fix coverage miss
* fix uncoverage error of PointHead loss
* fix coverage miss
* fix uncoverage error of PointHead loss
* nn.modules.container.ModuleList to nn.ModuleList
* more simple format
* merge unittest def
* [Fix] #916 expection string type classes
* add unittests for string path classes
* fix double quote string in test_dataset.py
* move the import to the top of the file
* fix isort lint error
fix isort lint error when move the import to the top of the file