Skip to content
Snippets Groups Projects
  1. Feb 28, 2023
  2. Feb 23, 2023
  3. Feb 16, 2023
  4. Feb 03, 2023
  5. Feb 01, 2023
    • Qingyun's avatar
      [Fix] Fix MaskFormer and Mask2Former of MMSegmentation (#2532) · a092fea8
      Qingyun authored
      ## Motivation
      
      The DETR-related modules have been refactored in
      open-mmlab/mmdetection#8763, which causes breakings of MaskFormer and
      Mask2Former in both MMDetection (has been fixed in
      open-mmlab/mmdetection#9515) and MMSegmentation. This pr fix the bugs in
      MMSegmentation.
      
      ### TO-DO List
      
      - [x] update configs
      - [x] check and modify data flow
      - [x] fix unit test
      - [x] aligning inference
      - [x] write a ckpt converter
      - [x] write ckpt update script
      - [x] update model zoo
      - [x] update model link in readme
      - [x] update
      [faq.md](https://github.com/open-mmlab/mmsegmentation/blob/dev-1.x/docs/en/notes/faq.md#installation
      
      )
      
      ## Tips of Fixing other implementations based on MaskXFormer of mmseg
      
      1. The Transformer modules should be built directly. The original
      building with register manner has been refactored.
      2. The config requires to be modified. Delete `type` and modify several
      keys, according to the modifications in this pr.
      3. The `batch_first` is set `True` uniformly in the new implementations.
      Hence the data flow requires to be transposed and config of
      `batch_first` needs to be modified.
      4. The checkpoint trained on the old implementation should be converted
      to be used in the new one.
      
      ### Convert script
      
      ```Python
      import argparse
      from copy import deepcopy
      from collections import OrderedDict
      
      import torch
      
      from mmengine.config import Config
      from mmseg.models import build_segmentor
      from mmseg.utils import register_all_modules
      register_all_modules(init_default_scope=True)
      
      
      def parse_args():
          parser = argparse.ArgumentParser(
              description='MMSeg convert MaskXFormer model, by Li-Qingyun')
          parser.add_argument('Mask_what_former', type=int,
                              help='Mask what former, can be a `1` or `2`',
                              choices=[1, 2])
          parser.add_argument('CFG_FILE', help='config file path')
          parser.add_argument('OLD_CKPT_FILEPATH', help='old ckpt file path')
          parser.add_argument('NEW_CKPT_FILEPATH', help='new ckpt file path')
          args = parser.parse_args()
          return args
      
      
      args = parse_args()
      
      def get_new_name(old_name: str):
          new_name = old_name
      
          if 'encoder.layers' in new_name:
              new_name = new_name.replace('attentions.0', 'self_attn')
      
          new_name = new_name.replace('ffns.0', 'ffn')
      
          if 'decoder.layers' in new_name:
      
              if args.Mask_what_former == 2:
                  # for Mask2Former
                  new_name = new_name.replace('attentions.0', 'cross_attn')
                  new_name = new_name.replace('attentions.1', 'self_attn')
              else:
                  # for Mask2Former
                  new_name = new_name.replace('attentions.0', 'self_attn')
                  new_name = new_name.replace('attentions.1', 'cross_attn')
      
          return new_name
          
      def cvt_sd(old_sd: OrderedDict):
          new_sd = OrderedDict()
          for name, param in old_sd.items():
              new_name = get_new_name(name)
              assert new_name not in new_sd
              new_sd[new_name] = param
          assert len(new_sd) == len(old_sd)
          return new_sd
          
      if __name__ == '__main__':
          cfg = Config.fromfile(args.CFG_FILE)
          model_cfg = cfg.model
      
          segmentor = build_segmentor(model_cfg)
      
          refer_sd = segmentor.state_dict()
          old_ckpt = torch.load(args.OLD_CKPT_FILEPATH)
          old_sd = old_ckpt['state_dict']
      
          new_sd = cvt_sd(old_sd)
          print(segmentor.load_state_dict(new_sd))
      
          new_ckpt = deepcopy(old_ckpt)
          new_ckpt['state_dict'] = new_sd
          torch.save(new_ckpt, args.NEW_CKPT_FILEPATH)
          print(f'{args.NEW_CKPT_FILEPATH} has been saved!')
      ```
      
      Usage:
      ```bash
      # for example
      python ckpt4pr2532.py 1 configs/maskformer/maskformer_r50-d32_8xb2-160k_ade20k-512x512.py original_ckpts/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724-cbd39cc1.pth cvt_outputs/maskformer_r50-d32_8xb2-160k_ade20k-512x512_20221030_182724.pth
      python ckpt4pr2532.py 2 configs/mask2former/mask2former_r50_8xb2-160k_ade20k-512x512.py original_ckpts/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055-4c62652d.pth cvt_outputs/mask2former_r50_8xb2-160k_ade20k-512x512_20221204_000055.pth
      ```
      
      ---------
      
      Co-authored-by: default avatarMeowZheng <meowzheng@outlook.com>
    • 谢昕辰's avatar
      [Refactor] Refactor fileio (#2543) · 124b87ce
      谢昕辰 authored
      ## Motivation
      
      Use the new fileio from mmengine
      https://github.com/open-mmlab/mmengine/pull/533
      
      ## Modification
      
      1. Use `mmengine.fileio` to repalce FileClient  in mmseg/datasets
      2. Use `mmengine.fileio` to repalce FileClient in
      mmseg/datasets/transforms
      3. Use `mmengine.fileio` to repalce FileClient in mmseg/visualization
      
      ## BC-breaking (Optional)
      
      we modify all the dataset configurations, so please use the latest config file.
  6. Jan 31, 2023
  7. Jan 06, 2023
  8. Dec 30, 2022
    • 谢昕辰's avatar
      [Refactor] Support TTA (#2184) · da412558
      谢昕辰 authored
      * tta init
      
      * use mmcv transform
      
      * test city
      
      * add multiscale
      
      * fix merge
      
      * add softmax to post process
      
      * add ut
      
      * add tta pipeline to other datasets
      
      * remove softmax
      
      * add encoder_decoder_tta ut
      
      * add encoder_decoder_tta ut
      
      * rename
      
      * rename file
      
      * rename config
      
      * rm aug_test
      
      * move flip to post process
      
      * fix channel
      da412558
    • haofeng's avatar
      add pspnet model structure graph (#2437) · 20a6c584
      haofeng authored
      20a6c584
  9. Dec 05, 2022
    • 谢昕辰's avatar
      [Feature] Support Mask2former in MMSeg 1.x (#2255) · 163277bf
      谢昕辰 authored
      
      * init commits
      
      * fix crop size
      
      * add seg_data2instance_data method
      
      * add ut and update requirement
      
      * update configs and readme
      
      * add model-indel
      
      * update optional requirements
      
      * fix results
      
      * fix lint error
      
      * update results
      
      * update results
      
      * remove mmdet from requirements/optional.txt
      
      * use try import and update README
      
      * add docstring to overwrtied method
      
      * minor change
      
      Co-authored-by: default avatarMengzhangLI <mcmong@pku.edu.cn>
  10. Dec 01, 2022
    • MengzhangLI's avatar
      [Feature] Support MaskFormer(NeurIPS'2021) in MMSeg 1.x (#2215) · 933e4d3c
      MengzhangLI authored
      * [Feature] Support MaskFormer(NeurIPS'2021) in MMSeg 1.x
      
      * add mmdet try except logic
      
      * refactor config files
      
      * add readme
      
      * fix config
      
      * update models & logs
      
      * add MMDET installation and fix info
      
      * fix comments
      
      * fix
      
      * fix config norm optimizer setting
      
      * update models & logs & unittest
      
      * add docstring of MaskFormerHead
      
      * wait for mmdet 3.0.0rc4
      
      * replace seg_mask with seg_logits & add docstring for batch_input_shape
      
      * use mmdet3.0.0rc4
      
      * fix readme and modify config comments
      
      * add mmdet installation in pr_stage_test.yml
      
      * update mmcv version in pr_stage_test.yml
      
      * add mmdet in build_cpu of pr_stage_test.yml
      
      * modify mmdet& mmcv installation in merge_stage_test.yml
      
      * fix typo
      
      * update test.yml
      
      * update test.yml
  11. Oct 27, 2022
  12. Oct 19, 2022
  13. Oct 18, 2022
  14. Oct 14, 2022
  15. Sep 14, 2022
  16. Aug 30, 2022
  17. Aug 29, 2022
  18. Aug 26, 2022
  19. Aug 19, 2022
  20. Aug 09, 2022
  21. Aug 04, 2022
  22. Aug 01, 2022
  23. Jul 14, 2022
  24. Jul 07, 2022
  25. Jul 06, 2022
  26. Jul 05, 2022
  27. Jun 27, 2022
  28. Jun 20, 2022
  29. Jun 19, 2022
  30. Jun 16, 2022
  31. Jun 13, 2022
  32. Jun 12, 2022
  33. Jun 10, 2022
Loading