Commit Graph

23 Commits (857f854b61bbbd8491305c0efca11fe6b5df2cf3)

Author SHA1 Message Date
谢昕辰 e4c1865a82
Bump1.1 (#3140)
Co-authored-by: CSH <40987381+csatsurnh@users.noreply.github.com>
2023-07-04 11:11:30 +08:00
谢昕辰 ffb7e2e239
[Fix] Fix dependency (#3136)
## Motivation

Change the dependency `mmcls` to `mmpretrain`

## Modification

- modify `mmcls` to `mmpretrain`
- modify CI requirements

## BC-breaking (Optional)

If users have installed mmcls but not install mmpretrain, it might raise some error.
2023-06-26 16:02:37 +08:00
谢昕辰 892f9e19e7
bumpv1.0.0 (#2849) 2023-04-06 17:24:57 +08:00
任祉涵 225e1582a8
[Docs] Add faq in dev-1.x branch (#2765) 2023-04-03 18:49:48 +08:00
谢昕辰 c448646a92
[Doc] Refine doc and fix links (#2821)
## Motivation

- Create the `main` branch

## Modification

Modify links from `dev-1.x` to `main`
2023-03-31 16:26:30 +08:00
谢昕辰 779b86cd74
bump v1.0.0rc6 (#2647)
as title
2023-03-03 16:54:12 +08:00
Miao Zheng aaa08dc4b2
[Doc] Refine MMSegmentation documentation (#2668) 2023-03-03 14:51:38 +08:00
Miao Zheng 619a3c2508
[Enhancement] Remove mmdet and mmcls from mminstall (#2642)
## Motivation

As the mmdet and mmcls are not very stabel, and mim can install repo
from source code, we remove them from mminstall and they won't be
installed automatically when run `mim install mmsegmentation`

## Modification

1. remove mmdet and mcls from mminstall
2. add explanation in faq

---------

Co-authored-by: MengzhangLI <mcmong@pku.edu.cn>
2023-02-24 14:57:54 +08:00
谢昕辰 7ac0888d9f
Bump v1.0.0rc5 (#2549)
as title
2023-02-01 20:34:20 +08:00
Qingyun a092fea8c1
[Fix] Fix MaskFormer and Mask2Former of MMSegmentation (#2532)
## 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: MeowZheng <meowzheng@outlook.com>
2023-02-01 18:58:21 +08:00
谢昕辰 124b87ce90
[Refactor] Refactor fileio (#2543)
## 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.
2023-02-01 17:53:22 +08:00
谢昕辰 18ee41eb7a
Bump v1.0.0rc4 (#2529) 2023-01-30 17:53:07 +08:00
Miao Zheng 6eb1a95a48
Bump 1.0.0rc3 (#2446)
## Motivation

To release 1.0.0rc3  

## Modification

1. Modify mmseg version 
2. Add change log
3. Modify README
4. Modify faq 
5. Revise docker file
2022-12-31 18:15:56 +08:00
Miao Zheng 750bb4f180
Bump 1.0.0rc2 (#2384)
* Bump 1.0.0rc2

* typo
2022-12-06 16:32:52 +08:00
MeowZheng 38c3145f4b refine changelog 2022-11-02 17:15:46 +08:00
MeowZheng ab26606214 typo 2022-11-02 17:12:16 +08:00
MeowZheng ddd2d6f27b fix 2022-11-02 17:00:32 +08:00
MeowZheng 84ed033246 Bump 1.0.0rc1 2022-11-02 16:49:12 +08:00
MeowZheng 85455100d5 Bump 1.0.0rc1 2022-11-02 16:48:28 +08:00
Miao Zheng 87a1d32221
Add changelog for MMSeg 1.0.0rc0 (#2007)
* Bump 1.0.0rc0

* rephase

* rephase
2022-09-01 00:19:51 +08:00
Miao Zheng 8f5dcc8579
[Fix] README for mmseg 1.x (#2009)
* [Fix] README for mmseg 1.x

* typo

* link and refine
2022-09-01 00:03:51 +08:00
Miao Zheng 309528de8d
[Refactor] Refine documentation (#1993)
* [WIP] Refine documentation

* get started done

* config refine

* train_test

* refine user guides

* add contribution

* add contribution

* refine visualization

* advanced tutorial

* advanced guides

* tricks

* refine zh doc

* refactor changelog
2022-08-31 20:54:15 +08:00
Miao Zheng 45b63c584f [Doc] MMSeg 1.x Documentation (#1924)
* [Doc] MMSeg 1.x Documentation

* revise index
2022-08-19 20:50:03 +08:00