Skip to content

Commit

Permalink
Add SETR.
Browse files Browse the repository at this point in the history
  • Loading branch information
nepeplwu authored May 27, 2021
1 parent e2ff0b3 commit 038e99b
Showing 14 changed files with 1,042 additions and 24 deletions.
22 changes: 22 additions & 0 deletions configs/_base_/cityscapes_769x769_setr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
_base_: './cityscapes.yml'

train_dataset:
transforms:
- type: ResizeStepScaling
min_scale_factor: 0.25
max_scale_factor: 2.0
scale_step_size: 0.25
- type: RandomPaddingCrop
crop_size: [769, 769]
- type: RandomHorizontalFlip
- type: RandomDistort
brightness_range: 0.5
contrast_range: 0.5
saturation_range: 0.5
- type: Normalize

val_dataset:
transforms:
- type: Padding
target_size: [2048, 1024]
- type: Normalize
15 changes: 15 additions & 0 deletions configs/setr/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

## Reference

> Zheng, Sixiao, Jiachen Lu, Hengshuang Zhao, Xiatian Zhu, Zekun Luo, Yabiao Wang, Yanwei Fu et al. "Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers." arXiv preprint arXiv:2012.15840 (2020).
## Performance

### CityScapes

| Model | Backbone | Head | Resolution | Training Iters | mIoU(slice) | Links |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|Segmentation Transformer|Vision Transformer|Naive|769x769|40000|77.29%|[model](https://bj.bcebos.com/paddleseg/dygraph/cityscapes/setr_naive_large_cityscapes_769x769_40k/model.pdparams) \| [log](https://bj.bcebos.com/paddleseg/dygraph/cityscapes/setr_naive_large_cityscapes_769x769_40k/train.log) \| [vdl]()|
|Segmentation Transformer|Vision Transformer|PUP|769x769|40000|78.08%|[model](https://bj.bcebos.com/paddleseg/dygraph/cityscapes/setr_pup_large_cityscapes_769x769_40k/model.pdparams) \| [log](https://bj.bcebos.com/paddleseg/dygraph/cityscapes/setr_pup_large_cityscapes_769x769_40k/train.log) \| [vdl]() |
|Segmentation Transformer|Vision Transformer|MLA|769x769|40000|76.52%|[model](https://bj.bcebos.com/paddleseg/dygraph/cityscapes/setr_mla_large_cityscapes_769x769_40k/model.pdparams) \| [log](https://bj.bcebos.com/paddleseg/dygraph/cityscapes/setr_mla_large_cityscapes_769x769_40k/train.log) \| [vdl]() |
33 changes: 33 additions & 0 deletions configs/setr/setr_mla_large_cityscapes_769x769_40k.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
_base_: '../_base_/cityscapes_769x769_setr.yml'

model:
type: SegmentationTransformer
backbone:
type: ViT_large_patch16_384
pretrained: https://bj.bcebos.com/paddleseg/dygraph/vit_large_patch16_384.tar.gz
num_classes: 19
backbone_indices: [5, 11, 17, 23]
head: mla
align_corners: True

optimizer:
weight_decay: 0.0

lr_scheduler:
end_lr: 1.0e-4

iters: 40000

loss:
types:
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
coef: [1, 0.4, 0.4, 0.4, 0.4]

test_config:
is_slide: True
crop_size: [769, 769]
stride: [512, 512]
32 changes: 32 additions & 0 deletions configs/setr/setr_naive_large_cityscapes_769x769_40k.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
_base_: '../_base_/cityscapes_769x769_setr.yml'

model:
type: SegmentationTransformer
backbone:
type: ViT_large_patch16_384
pretrained: https://bj.bcebos.com/paddleseg/dygraph/vit_large_patch16_384.tar.gz
num_classes: 19
backbone_indices: [9, 14, 19, 23]
head: naive
align_corners: True

optimizer:
weight_decay: 0.0

lr_scheduler:
end_lr: 1.0e-4

iters: 40000

loss:
types:
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
coef: [1, 0.4, 0.4, 0.4]

test_config:
is_slide: True
crop_size: [769, 769]
stride: [512, 512]
33 changes: 33 additions & 0 deletions configs/setr/setr_pup_large_cityscapes_769x769_40k.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
_base_: '../_base_/cityscapes_769x769_setr.yml'

model:
type: SegmentationTransformer
backbone:
type: ViT_large_patch16_384
pretrained: https://bj.bcebos.com/paddleseg/dygraph/vit_large_patch16_384.tar.gz
num_classes: 19
backbone_indices: [9, 14, 19, 23]
head: pup
align_corners: True

optimizer:
weight_decay: 0.0

lr_scheduler:
end_lr: 1.0e-4

iters: 40000

loss:
types:
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
- type: CrossEntropyLoss
coef: [1, 0.4, 0.4, 0.4, 0.4]

test_config:
is_slide: True
crop_size: [769, 769]
stride: [512, 512]
13 changes: 10 additions & 3 deletions paddleseg/core/train.py
Original file line number Diff line number Diff line change
@@ -60,7 +60,8 @@ def train(model,
num_workers=0,
use_vdl=False,
losses=None,
keep_checkpoint_max=5):
keep_checkpoint_max=5,
test_config=None):
"""
Launch training.
@@ -77,9 +78,10 @@ def train(model,
log_iters (int, optional): Display logging information at every log_iters. Default: 10.
num_workers (int, optional): Num workers for data loader. Default: 0.
use_vdl (bool, optional): Whether to record the data to VisualDL during training. Default: False.
losses (dict): A dict including 'types' and 'coef'. The length of coef should equal to 1 or len(losses['types']).
losses (dict, optional): A dict including 'types' and 'coef'. The length of coef should equal to 1 or len(losses['types']).
The 'types' item is a list of object of paddleseg.models.losses while the 'coef' item is a list of the relevant coefficient.
keep_checkpoint_max (int, optional): Maximum number of checkpoints to save. Default: 5.
test_config(dict, optional): Evaluation config.
"""
model.train()
nranks = paddle.distributed.ParallelEnv().nranks
@@ -204,8 +206,13 @@ def train(model,
if (iter % save_interval == 0
or iter == iters) and (val_dataset is not None):
num_workers = 1 if num_workers > 0 else 0

if test_config is None:
test_config = {}

mean_iou, acc, _, _, _ = evaluate(
model, val_dataset, num_workers=num_workers)
model, val_dataset, num_workers=num_workers, **test_config)

model.train()

if (iter % save_interval == 0 or iter == iters) and local_rank == 0:
4 changes: 4 additions & 0 deletions paddleseg/cvlibs/config.py
Original file line number Diff line number Diff line change
@@ -349,6 +349,10 @@ def _load_object(self, cfg: dict) -> Any:

return component(**params)

@property
def test_config(self) -> Dict:
return self.dic.get('test_config', {})

@property
def export_config(self) -> Dict:
return self.dic.get('export', {})
1 change: 1 addition & 0 deletions paddleseg/models/__init__.py
Original file line number Diff line number Diff line change
@@ -35,5 +35,6 @@
from .emanet import *
from .isanet import *
from .dnlnet import *
from .setr import *
from .sfnet import *
from .shufflenet_slim import ShuffleNetV2
1 change: 1 addition & 0 deletions paddleseg/models/backbones/__init__.py
Original file line number Diff line number Diff line change
@@ -16,3 +16,4 @@
from .resnet_vd import *
from .xception_deeplab import *
from .mobilenetv3 import *
from .vit import *
Loading

0 comments on commit 038e99b

Please sign in to comment.